@piserve-tech/form-submission 1.3.319 → 1.3.321
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 +12 -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 +458 -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 +2 -2
- 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
|
@@ -333,11 +333,11 @@ export class SubFormComponent {
|
|
|
333
333
|
}
|
|
334
334
|
}
|
|
335
335
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubFormComponent, deps: [{ token: i1.SubformCopyService }, { token: i2.MatDialog }, { token: i3.DataService }, { token: i4.FormService }, { token: i5.WhenClauseService }, { token: i6.ValidationService }, { token: i7.ScoreCalculationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
336
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SubFormComponent, selector: "lib-sub-form", inputs: { subForm: "subForm", edit: "edit", acceptedLanguage: "acceptedLanguage", pages: "pages" }, outputs: { subFormChange: "subFormChange" }, host: { listeners: { "click": "onAnyClick($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"outer-container mb-4 px-3\"\r\n [id]=\"'question-' + subForm.id\"\r\n [attr.name]=\"subForm.testElementName\"\r\n *ngIf=\"!subForm.deleted\"\r\n>\r\n <div class=\"body py-1 px-1\">\r\n <div class=\"tab-content pt-4 pb-3 px-3\">\r\n <ng-container *ngIf=\"!subForm.copied; else copySubformContainer\">\r\n <div class=\"subform-header\">\r\n <div class=\"data-container\">\r\n <p class=\"sectionTitle\">{{ subForm.title }}</p>\r\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\r\n </div>\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n class=\"finalScore\"\r\n *ngFor=\"let s of subForm?.scores\"\r\n [ngClass]=\"{\r\n goodScore: s.scoreType === 'GOOD_SCORE',\r\n badScore: s.scoreType === 'BAD_SCORE'\r\n }\"\r\n >\r\n <span class=\"scoreTitle\">Score</span>\r\n <p class=\"mb-0\">{{ s.score }}</p>\r\n </div>\r\n <div class=\"icon-container\">\r\n <img\r\n src=\"assets/icons/copy-icon.svg\"\r\n alt=\"copy-icon\"\r\n (click)=\"copySubform()\"\r\n *ngIf=\"allowCopy\"\r\n />\r\n <img\r\n src=\"assets/icons/delete-icon.svg\"\r\n class=\"delete-icon ms-3\"\r\n alt=\"delete icon\"\r\n (click)=\"deleteMainSubform(subForm.id)\"\r\n *ngIf=\"allowDelete\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #copySubformContainer>\r\n <div class=\"d-flex justify-content-end gap-4\">\r\n <div\r\n class=\"finalScore\"\r\n *ngFor=\"let s of subForm?.scores\"\r\n [ngClass]=\"{\r\n goodScore: s.scoreType === 'GOOD_SCORE',\r\n badScore: s.scoreType === 'BAD_SCORE'\r\n }\"\r\n >\r\n <span class=\"scoreTitle\">Score</span>\r\n <p class=\"mb-0\">{{ s.score }}</p>\r\n </div>\r\n <div class=\"icon-container\" (click)=\"deleteCopySubform(subForm.id)\">\r\n <img\r\n src=\"assets/icons/delete-icon.svg\"\r\n class=\"delete-icon\"\r\n alt=\"delete icon\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"copy-subform-container mb-3\">\r\n <p>Title</p>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"subformTitle\"\r\n (ngModelChange)=\"updateSubformData($event, subForm.id, 'title')\"\r\n />\r\n <p class=\"mt-3\">Description</p>\r\n <quill-editor\r\n [(ngModel)]=\"subformDescription\"\r\n (ngModelChange)=\"\r\n updateSubformData($event, subForm.id, 'description')\r\n \"\r\n (onEditorCreated)=\"editorCreated($event)\"\r\n class=\"editor\"\r\n placeholder=\"\"\r\n ></quill-editor>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"subForm.property.subFormStructure == 'multiple'\">\r\n <lib-multiple-subform\r\n *ngIf=\"subForm.property.subFormType === 'table'\"\r\n [subForm]=\"subForm\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-multiple-subform>\r\n\r\n <lib-inline-multiple-subform\r\n *ngIf=\"subForm.property.subFormType === 'inline'\"\r\n [subForm]=\"subForm\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-inline-multiple-subform>\r\n <lib-card-subform\r\n *ngIf=\"subForm.property.subFormType === 'card'\"\r\n [subForm]=\"subForm\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [edit]=\"edit\"\r\n ></lib-card-subform>\r\n </div>\r\n <div *ngIf=\"subForm.property.subFormStructure == 'single'\">\r\n <div *ngFor=\"let row of subForm.rows\">\r\n <div class=\"d-flex\">\r\n <div\r\n *ngFor=\"let grid of row.grid\"\r\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\r\n >\r\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\r\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\r\n <lib-check-box-fields\r\n *ngSwitchCase=\"'CHECK_BOX'\"\r\n [question]=\"grid.element\"\r\n ></lib-check-box-fields>\r\n <lib-date-time-fields\r\n *ngSwitchCase=\"'DATE_TIME'\"\r\n [question]=\"grid.element\"\r\n ></lib-date-time-fields>\r\n <lib-drop-down-fields\r\n *ngSwitchCase=\"'DROP_DOWN'\"\r\n [question]=\"grid.element\"\r\n ></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngSwitchCase=\"'FILE_PICKER'\"\r\n [question]=\"grid.element\"\r\n ></lib-file-picker-fields>\r\n <lib-location-fields\r\n *ngSwitchCase=\"'LOCATION'\"\r\n [question]=\"grid.element\"\r\n ></lib-location-fields>\r\n <lib-mail-fields\r\n *ngSwitchCase=\"'EMAIL'\"\r\n [question]=\"grid.element\"\r\n ></lib-mail-fields>\r\n <lib-mobile-fields\r\n *ngSwitchCase=\"'MOBILE'\"\r\n [question]=\"grid.element\"\r\n ></lib-mobile-fields>\r\n <lib-number-fields\r\n *ngSwitchCase=\"'NUMBER'\"\r\n [question]=\"grid.element\"\r\n [rowId]=\"'0'\"\r\n ></lib-number-fields>\r\n <lib-password-fields\r\n *ngSwitchCase=\"'PASSWORD'\"\r\n [question]=\"grid.element\"\r\n ></lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngSwitchCase=\"'RADIO_BUTTON'\"\r\n [question]=\"grid.element\"\r\n ></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\r\n [question]=\"grid.element\"\r\n ></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-selection-matrix-fields>\r\n <lib-signature-fields\r\n *ngSwitchCase=\"'SIGNATURE'\"\r\n [question]=\"grid.element\"\r\n ></lib-signature-fields>\r\n <lib-slider-fields\r\n *ngSwitchCase=\"'SLIDER'\"\r\n [question]=\"grid.element\"\r\n ></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\r\n [question]=\"grid.element\"\r\n ></lib-terms-and-condition-fields>\r\n <lib-text-area-fields\r\n *ngSwitchCase=\"'TEXT_AREA'\"\r\n [question]=\"grid.element\"\r\n ></lib-text-area-fields>\r\n <lib-text-fields\r\n *ngSwitchCase=\"'TEXT_BOX'\"\r\n [question]=\"grid.element\"\r\n ></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-toggle-switch-fields>\r\n <lib-url-fields\r\n *ngSwitchCase=\"'URL'\"\r\n [question]=\"grid.element\"\r\n ></lib-url-fields>\r\n <lib-currency-fields\r\n *ngSwitchCase=\"'CURRENCY'\"\r\n [question]=\"grid.element\"\r\n ></lib-currency-fields>\r\n <lib-aggregate-function\r\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\r\n [question]=\"grid.element\"\r\n [rowId]=\"'0'\"\r\n ></lib-aggregate-function>\r\n <lib-hidden-field\r\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\r\n [question]=\"grid.element\"\r\n ></lib-hidden-field>\r\n <lib-iframe-fields\r\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\r\n [question]=\"grid.element\"\r\n ></lib-iframe-fields>\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\r\n <ng-container\r\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\r\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container> -->\r\n <ng-container *ngIf=\"grid?.element?.childLogics\">\r\n <ng-container *ngIf=\"componentToLoad\">\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n componentToLoad;\r\n inputs: {\r\n grid: grid?.element?.childLogics,\r\n answer: grid?.element?.answer,\r\n state: 'child'\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"grid.entityType === 'SECTION' && grid.show\">\r\n <lib-section-fields\r\n [section]=\"grid.element\"\r\n ></lib-section-fields>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isInvalid\" class=\"error-message mt-4\">\r\n {{ errorMessage }}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".outer-container{background-color:#fff;position:relative}@media (max-width: 576px){.outer-container{padding:8px}}.body{position:relative;background:#efefef;border-radius:6px}.tab-content{background-color:#fff}.sectionTitle{font-size:19px;font-weight:700;margin-bottom:20px;word-break:break-word}.description{font-size:17px;font-weight:500;margin-bottom:18px;word-break:break-word}::ng-deep .description img{max-width:100%}.subform-header{display:flex;justify-content:space-between;margin-bottom:10px}.icon-container{cursor:pointer}.delete-icon{height:36px;width:36px}.finalScore{width:57px;height:52px;border-radius:6px;border:1px solid #c8c8c8;display:flex;flex-direction:column;justify-content:center;align-items:center;font-weight:500}.goodScore{border-color:#50f550}.badScore{border-color:#f08080}.scoreTitle{font-weight:400;font-size:14px;color:#2b2e3e80}.error-message{color:#f44336;font-size:1em;margin-top:4px;padding:0 8px}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i9.CheckBoxFieldsComponent, selector: "lib-check-box-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i10.DateTimeFieldsComponent, selector: "lib-date-time-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i11.DropDownFieldsComponent, selector: "lib-drop-down-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i12.FilePickerFieldsComponent, selector: "lib-file-picker-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange", "inlineDeleteFiles"] }, { kind: "component", type: i13.LocationFieldsComponent, selector: "lib-location-fields", inputs: ["question", "inLine"], outputs: ["answerChange"] }, { kind: "component", type: i14.MailFieldsComponent, selector: "lib-mail-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i15.MobileFieldsComponent, selector: "lib-mobile-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i16.NumberFieldsComponent, selector: "lib-number-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i17.PasswordFieldsComponent, selector: "lib-password-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i18.RadioButtonFieldsComponent, selector: "lib-radio-button-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i19.RichTextEditorFieldsComponent, selector: "lib-rich-text-editor-fields", inputs: ["question", "inLine", "inSubForm", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i20.SelectionMatrixFieldsComponent, selector: "lib-selection-matrix-fields", inputs: ["question", "inLine", "acceptedLanguage", "rowId", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i21.SignatureFieldsComponent, selector: "lib-signature-fields", inputs: ["question", "inLine"] }, { kind: "component", type: i22.SliderFieldsComponent, selector: "lib-slider-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i23.TermsAndConditionFieldsComponent, selector: "lib-terms-and-condition-fields", inputs: ["question", "inLine"] }, { kind: "component", type: i24.TextAreaFieldsComponent, selector: "lib-text-area-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i25.TextFieldsComponent, selector: "lib-text-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i26.ToggleSwitchFieldsComponent, selector: "lib-toggle-switch-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "acceptedLanguage", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i27.UrlFieldsComponent, selector: "lib-url-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i28.SectionFieldsComponent, selector: "lib-section-fields", inputs: ["section"] }, { kind: "component", type: i29.AggregateFunctionComponent, selector: "lib-aggregate-function", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i30.CurrencyFieldsComponent, selector: "lib-currency-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit", "rowId"], outputs: ["answerChange"] }, { kind: "component", type: i31.HiddenFieldComponent, selector: "lib-hidden-field", inputs: ["question", "inLine", "inCard", "submissionIndex"], outputs: ["answerChange"] }, { kind: "component", type: i32.IframeFieldsComponent, selector: "lib-iframe-fields", inputs: ["question"] }, { kind: "component", type: i33.QuillEditorComponent, selector: "quill-editor" }, { kind: "directive", type: i34.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: i34.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i34.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i35.MultipleSubformComponent, selector: "lib-multiple-subform", inputs: ["subForm", "acceptedLanguage"], outputs: ["subFormChange"] }, { kind: "component", type: i36.InlineMultipleSubformComponent, selector: "lib-inline-multiple-subform", inputs: ["subForm", "acceptedLanguage"], outputs: ["subFormChange"] }, { kind: "component", type: i37.CardSubformComponent, selector: "lib-card-subform", inputs: ["subForm", "acceptedLanguage", "edit"], outputs: ["subFormChange"] }] }); }
|
|
336
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SubFormComponent, selector: "lib-sub-form", inputs: { subForm: "subForm", edit: "edit", acceptedLanguage: "acceptedLanguage", pages: "pages" }, outputs: { subFormChange: "subFormChange" }, host: { listeners: { "click": "onAnyClick($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"outer-container mb-4 px-3\"\n [id]=\"'question-' + subForm.id\"\n [attr.name]=\"subForm.testElementName\"\n *ngIf=\"!subForm.deleted\"\n>\n <div class=\"body py-1 px-1\">\n <div class=\"tab-content pt-4 pb-3 px-3\">\n <ng-container *ngIf=\"!subForm.copied; else copySubformContainer\">\n <div class=\"subform-header\">\n <div class=\"data-container\">\n <p class=\"sectionTitle\">{{ subForm.title }}</p>\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n </div>\n <div class=\"d-flex gap-3\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s.score }}</p>\n </div>\n <div class=\"icon-container\">\n <img\n src=\"assets/icons/copy-icon.svg\"\n alt=\"copy-icon\"\n (click)=\"copySubform()\"\n *ngIf=\"allowCopy\"\n />\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon ms-3\"\n alt=\"delete icon\"\n (click)=\"deleteMainSubform(subForm.id)\"\n *ngIf=\"allowDelete\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #copySubformContainer>\n <div class=\"d-flex justify-content-end gap-4\">\n <ng-container *ngIf=\"subForm?.scores?.length\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s?.score }}</p>\n </div>\n </ng-container>\n <div class=\"icon-container\" (click)=\"deleteCopySubform(subForm.id)\">\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon\"\n alt=\"delete icon\"\n />\n </div>\n </div>\n <div class=\"copy-subform-container mb-3\">\n <p>Title</p>\n <input\n type=\"text\"\n class=\"form-control\"\n [(ngModel)]=\"subformTitle\"\n (ngModelChange)=\"updateSubformData($event, subForm.id, 'title')\"\n />\n <p class=\"mt-3\">Description</p>\n <quill-editor\n [(ngModel)]=\"subformDescription\"\n (ngModelChange)=\"\n updateSubformData($event, subForm.id, 'description')\n \"\n (onEditorCreated)=\"editorCreated($event)\"\n class=\"editor\"\n placeholder=\"\"\n ></quill-editor>\n </div>\n </ng-template>\n\n <div *ngIf=\"subForm.property.subFormStructure == 'multiple'\">\n <lib-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'table'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-multiple-subform>\n\n <lib-inline-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'inline'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-inline-multiple-subform>\n <lib-card-subform\n *ngIf=\"subForm.property.subFormType === 'card'\"\n [subForm]=\"subForm\"\n [acceptedLanguage]=\"acceptedLanguage\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [edit]=\"edit\"\n ></lib-card-subform>\n </div>\n <div *ngIf=\"subForm.property.subFormStructure == 'single'\">\n <div *ngFor=\"let row of subForm.rows\">\n <div class=\"d-flex\">\n <div\n *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n >\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\n <lib-check-box-fields\n *ngSwitchCase=\"'CHECK_BOX'\"\n [question]=\"grid.element\"\n ></lib-check-box-fields>\n <lib-date-time-fields\n *ngSwitchCase=\"'DATE_TIME'\"\n [question]=\"grid.element\"\n ></lib-date-time-fields>\n <lib-drop-down-fields\n *ngSwitchCase=\"'DROP_DOWN'\"\n [question]=\"grid.element\"\n ></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngSwitchCase=\"'FILE_PICKER'\"\n [question]=\"grid.element\"\n ></lib-file-picker-fields>\n <lib-location-fields\n *ngSwitchCase=\"'LOCATION'\"\n [question]=\"grid.element\"\n ></lib-location-fields>\n <lib-mail-fields\n *ngSwitchCase=\"'EMAIL'\"\n [question]=\"grid.element\"\n ></lib-mail-fields>\n <lib-mobile-fields\n *ngSwitchCase=\"'MOBILE'\"\n [question]=\"grid.element\"\n ></lib-mobile-fields>\n <lib-number-fields\n *ngSwitchCase=\"'NUMBER'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-number-fields>\n <lib-password-fields\n *ngSwitchCase=\"'PASSWORD'\"\n [question]=\"grid.element\"\n ></lib-password-fields>\n <lib-radio-button-fields\n *ngSwitchCase=\"'RADIO_BUTTON'\"\n [question]=\"grid.element\"\n ></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n [question]=\"grid.element\"\n ></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-selection-matrix-fields>\n <lib-signature-fields\n *ngSwitchCase=\"'SIGNATURE'\"\n [question]=\"grid.element\"\n ></lib-signature-fields>\n <lib-slider-fields\n *ngSwitchCase=\"'SLIDER'\"\n [question]=\"grid.element\"\n ></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n [question]=\"grid.element\"\n ></lib-terms-and-condition-fields>\n <lib-text-area-fields\n *ngSwitchCase=\"'TEXT_AREA'\"\n [question]=\"grid.element\"\n ></lib-text-area-fields>\n <lib-text-fields\n *ngSwitchCase=\"'TEXT_BOX'\"\n [question]=\"grid.element\"\n ></lib-text-fields>\n <lib-toggle-switch-fields\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-toggle-switch-fields>\n <lib-url-fields\n *ngSwitchCase=\"'URL'\"\n [question]=\"grid.element\"\n ></lib-url-fields>\n <lib-currency-fields\n *ngSwitchCase=\"'CURRENCY'\"\n [question]=\"grid.element\"\n ></lib-currency-fields>\n <lib-aggregate-function\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-aggregate-function>\n <lib-hidden-field\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\n [question]=\"grid.element\"\n ></lib-hidden-field>\n <lib-iframe-fields\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\n [question]=\"grid.element\"\n ></lib-iframe-fields>\n </div>\n\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n <ng-container\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\n </ng-container>\n </ng-container>\n </ng-container> -->\n <ng-container *ngIf=\"grid?.element?.childLogics\">\n <ng-container *ngIf=\"componentToLoad\">\n <ng-container\n *ngComponentOutlet=\"\n componentToLoad;\n inputs: {\n grid: grid?.element?.childLogics,\n answer: grid?.element?.answer,\n state: 'child'\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"grid.entityType === 'SECTION' && grid.show\">\n <lib-section-fields\n [section]=\"grid.element\"\n ></lib-section-fields>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isInvalid\" class=\"error-message mt-4\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".outer-container{background-color:#fff;position:relative}@media (max-width: 576px){.outer-container{padding:8px}}.body{position:relative;background:#efefef;border-radius:6px}.tab-content{background-color:#fff}.sectionTitle{font-size:19px;font-weight:700;margin-bottom:20px;word-break:break-word}.description{font-size:17px;font-weight:500;margin-bottom:18px;word-break:break-word}::ng-deep .description img{max-width:100%}.subform-header{display:flex;justify-content:space-between;margin-bottom:10px}.icon-container{cursor:pointer}.delete-icon{height:36px;width:36px}.finalScore{width:57px;height:52px;border-radius:6px;border:1px solid #c8c8c8;display:flex;flex-direction:column;justify-content:center;align-items:center;font-weight:500}.goodScore{border-color:#50f550}.badScore{border-color:#f08080}.scoreTitle{font-weight:400;font-size:14px;color:#2b2e3e80}.error-message{color:#f44336;font-size:1em;margin-top:4px;padding:0 8px}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i9.CheckBoxFieldsComponent, selector: "lib-check-box-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i10.DateTimeFieldsComponent, selector: "lib-date-time-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i11.DropDownFieldsComponent, selector: "lib-drop-down-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i12.FilePickerFieldsComponent, selector: "lib-file-picker-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange", "inlineDeleteFiles"] }, { kind: "component", type: i13.LocationFieldsComponent, selector: "lib-location-fields", inputs: ["question", "inLine"], outputs: ["answerChange"] }, { kind: "component", type: i14.MailFieldsComponent, selector: "lib-mail-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i15.MobileFieldsComponent, selector: "lib-mobile-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i16.NumberFieldsComponent, selector: "lib-number-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i17.PasswordFieldsComponent, selector: "lib-password-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i18.RadioButtonFieldsComponent, selector: "lib-radio-button-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i19.RichTextEditorFieldsComponent, selector: "lib-rich-text-editor-fields", inputs: ["question", "inLine", "inSubForm", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i20.SelectionMatrixFieldsComponent, selector: "lib-selection-matrix-fields", inputs: ["question", "inLine", "acceptedLanguage", "rowId", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i21.SignatureFieldsComponent, selector: "lib-signature-fields", inputs: ["question", "inLine"] }, { kind: "component", type: i22.SliderFieldsComponent, selector: "lib-slider-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i23.TermsAndConditionFieldsComponent, selector: "lib-terms-and-condition-fields", inputs: ["question", "inLine"] }, { kind: "component", type: i24.TextAreaFieldsComponent, selector: "lib-text-area-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i25.TextFieldsComponent, selector: "lib-text-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i26.ToggleSwitchFieldsComponent, selector: "lib-toggle-switch-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "acceptedLanguage", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i27.UrlFieldsComponent, selector: "lib-url-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i28.SectionFieldsComponent, selector: "lib-section-fields", inputs: ["section"] }, { kind: "component", type: i29.AggregateFunctionComponent, selector: "lib-aggregate-function", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i30.CurrencyFieldsComponent, selector: "lib-currency-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit", "rowId"], outputs: ["answerChange"] }, { kind: "component", type: i31.HiddenFieldComponent, selector: "lib-hidden-field", inputs: ["question", "inLine", "inCard", "submissionIndex"], outputs: ["answerChange"] }, { kind: "component", type: i32.IframeFieldsComponent, selector: "lib-iframe-fields", inputs: ["question"] }, { kind: "component", type: i33.QuillEditorComponent, selector: "quill-editor" }, { kind: "directive", type: i34.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: i34.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i34.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i35.MultipleSubformComponent, selector: "lib-multiple-subform", inputs: ["subForm", "acceptedLanguage"], outputs: ["subFormChange"] }, { kind: "component", type: i36.InlineMultipleSubformComponent, selector: "lib-inline-multiple-subform", inputs: ["subForm", "acceptedLanguage"], outputs: ["subFormChange"] }, { kind: "component", type: i37.CardSubformComponent, selector: "lib-card-subform", inputs: ["subForm", "acceptedLanguage", "edit"], outputs: ["subFormChange"] }] }); }
|
|
337
337
|
}
|
|
338
338
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubFormComponent, decorators: [{
|
|
339
339
|
type: Component,
|
|
340
|
-
args: [{ selector: 'lib-sub-form', template: "<div\r\n class=\"outer-container mb-4 px-3\"\r\n [id]=\"'question-' + subForm.id\"\r\n [attr.name]=\"subForm.testElementName\"\r\n *ngIf=\"!subForm.deleted\"\r\n>\r\n <div class=\"body py-1 px-1\">\r\n <div class=\"tab-content pt-4 pb-3 px-3\">\r\n <ng-container *ngIf=\"!subForm.copied; else copySubformContainer\">\r\n <div class=\"subform-header\">\r\n <div class=\"data-container\">\r\n <p class=\"sectionTitle\">{{ subForm.title }}</p>\r\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\r\n </div>\r\n <div class=\"d-flex gap-3\">\r\n <div\r\n class=\"finalScore\"\r\n *ngFor=\"let s of subForm?.scores\"\r\n [ngClass]=\"{\r\n goodScore: s.scoreType === 'GOOD_SCORE',\r\n badScore: s.scoreType === 'BAD_SCORE'\r\n }\"\r\n >\r\n <span class=\"scoreTitle\">Score</span>\r\n <p class=\"mb-0\">{{ s.score }}</p>\r\n </div>\r\n <div class=\"icon-container\">\r\n <img\r\n src=\"assets/icons/copy-icon.svg\"\r\n alt=\"copy-icon\"\r\n (click)=\"copySubform()\"\r\n *ngIf=\"allowCopy\"\r\n />\r\n <img\r\n src=\"assets/icons/delete-icon.svg\"\r\n class=\"delete-icon ms-3\"\r\n alt=\"delete icon\"\r\n (click)=\"deleteMainSubform(subForm.id)\"\r\n *ngIf=\"allowDelete\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #copySubformContainer>\r\n <div class=\"d-flex justify-content-end gap-4\">\r\n <div\r\n class=\"finalScore\"\r\n *ngFor=\"let s of subForm?.scores\"\r\n [ngClass]=\"{\r\n goodScore: s.scoreType === 'GOOD_SCORE',\r\n badScore: s.scoreType === 'BAD_SCORE'\r\n }\"\r\n >\r\n <span class=\"scoreTitle\">Score</span>\r\n <p class=\"mb-0\">{{ s.score }}</p>\r\n </div>\r\n <div class=\"icon-container\" (click)=\"deleteCopySubform(subForm.id)\">\r\n <img\r\n src=\"assets/icons/delete-icon.svg\"\r\n class=\"delete-icon\"\r\n alt=\"delete icon\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"copy-subform-container mb-3\">\r\n <p>Title</p>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n [(ngModel)]=\"subformTitle\"\r\n (ngModelChange)=\"updateSubformData($event, subForm.id, 'title')\"\r\n />\r\n <p class=\"mt-3\">Description</p>\r\n <quill-editor\r\n [(ngModel)]=\"subformDescription\"\r\n (ngModelChange)=\"\r\n updateSubformData($event, subForm.id, 'description')\r\n \"\r\n (onEditorCreated)=\"editorCreated($event)\"\r\n class=\"editor\"\r\n placeholder=\"\"\r\n ></quill-editor>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"subForm.property.subFormStructure == 'multiple'\">\r\n <lib-multiple-subform\r\n *ngIf=\"subForm.property.subFormType === 'table'\"\r\n [subForm]=\"subForm\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-multiple-subform>\r\n\r\n <lib-inline-multiple-subform\r\n *ngIf=\"subForm.property.subFormType === 'inline'\"\r\n [subForm]=\"subForm\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-inline-multiple-subform>\r\n <lib-card-subform\r\n *ngIf=\"subForm.property.subFormType === 'card'\"\r\n [subForm]=\"subForm\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\r\n [edit]=\"edit\"\r\n ></lib-card-subform>\r\n </div>\r\n <div *ngIf=\"subForm.property.subFormStructure == 'single'\">\r\n <div *ngFor=\"let row of subForm.rows\">\r\n <div class=\"d-flex\">\r\n <div\r\n *ngFor=\"let grid of row.grid\"\r\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\r\n >\r\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\r\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\r\n <lib-check-box-fields\r\n *ngSwitchCase=\"'CHECK_BOX'\"\r\n [question]=\"grid.element\"\r\n ></lib-check-box-fields>\r\n <lib-date-time-fields\r\n *ngSwitchCase=\"'DATE_TIME'\"\r\n [question]=\"grid.element\"\r\n ></lib-date-time-fields>\r\n <lib-drop-down-fields\r\n *ngSwitchCase=\"'DROP_DOWN'\"\r\n [question]=\"grid.element\"\r\n ></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngSwitchCase=\"'FILE_PICKER'\"\r\n [question]=\"grid.element\"\r\n ></lib-file-picker-fields>\r\n <lib-location-fields\r\n *ngSwitchCase=\"'LOCATION'\"\r\n [question]=\"grid.element\"\r\n ></lib-location-fields>\r\n <lib-mail-fields\r\n *ngSwitchCase=\"'EMAIL'\"\r\n [question]=\"grid.element\"\r\n ></lib-mail-fields>\r\n <lib-mobile-fields\r\n *ngSwitchCase=\"'MOBILE'\"\r\n [question]=\"grid.element\"\r\n ></lib-mobile-fields>\r\n <lib-number-fields\r\n *ngSwitchCase=\"'NUMBER'\"\r\n [question]=\"grid.element\"\r\n [rowId]=\"'0'\"\r\n ></lib-number-fields>\r\n <lib-password-fields\r\n *ngSwitchCase=\"'PASSWORD'\"\r\n [question]=\"grid.element\"\r\n ></lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngSwitchCase=\"'RADIO_BUTTON'\"\r\n [question]=\"grid.element\"\r\n ></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\r\n [question]=\"grid.element\"\r\n ></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-selection-matrix-fields>\r\n <lib-signature-fields\r\n *ngSwitchCase=\"'SIGNATURE'\"\r\n [question]=\"grid.element\"\r\n ></lib-signature-fields>\r\n <lib-slider-fields\r\n *ngSwitchCase=\"'SLIDER'\"\r\n [question]=\"grid.element\"\r\n ></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\r\n [question]=\"grid.element\"\r\n ></lib-terms-and-condition-fields>\r\n <lib-text-area-fields\r\n *ngSwitchCase=\"'TEXT_AREA'\"\r\n [question]=\"grid.element\"\r\n ></lib-text-area-fields>\r\n <lib-text-fields\r\n *ngSwitchCase=\"'TEXT_BOX'\"\r\n [question]=\"grid.element\"\r\n ></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\r\n [question]=\"grid.element\"\r\n [acceptedLanguage]=\"acceptedLanguage\"\r\n ></lib-toggle-switch-fields>\r\n <lib-url-fields\r\n *ngSwitchCase=\"'URL'\"\r\n [question]=\"grid.element\"\r\n ></lib-url-fields>\r\n <lib-currency-fields\r\n *ngSwitchCase=\"'CURRENCY'\"\r\n [question]=\"grid.element\"\r\n ></lib-currency-fields>\r\n <lib-aggregate-function\r\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\r\n [question]=\"grid.element\"\r\n [rowId]=\"'0'\"\r\n ></lib-aggregate-function>\r\n <lib-hidden-field\r\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\r\n [question]=\"grid.element\"\r\n ></lib-hidden-field>\r\n <lib-iframe-fields\r\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\r\n [question]=\"grid.element\"\r\n ></lib-iframe-fields>\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\r\n <ng-container\r\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\r\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container> -->\r\n <ng-container *ngIf=\"grid?.element?.childLogics\">\r\n <ng-container *ngIf=\"componentToLoad\">\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n componentToLoad;\r\n inputs: {\r\n grid: grid?.element?.childLogics,\r\n answer: grid?.element?.answer,\r\n state: 'child'\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"grid.entityType === 'SECTION' && grid.show\">\r\n <lib-section-fields\r\n [section]=\"grid.element\"\r\n ></lib-section-fields>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isInvalid\" class=\"error-message mt-4\">\r\n {{ errorMessage }}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".outer-container{background-color:#fff;position:relative}@media (max-width: 576px){.outer-container{padding:8px}}.body{position:relative;background:#efefef;border-radius:6px}.tab-content{background-color:#fff}.sectionTitle{font-size:19px;font-weight:700;margin-bottom:20px;word-break:break-word}.description{font-size:17px;font-weight:500;margin-bottom:18px;word-break:break-word}::ng-deep .description img{max-width:100%}.subform-header{display:flex;justify-content:space-between;margin-bottom:10px}.icon-container{cursor:pointer}.delete-icon{height:36px;width:36px}.finalScore{width:57px;height:52px;border-radius:6px;border:1px solid #c8c8c8;display:flex;flex-direction:column;justify-content:center;align-items:center;font-weight:500}.goodScore{border-color:#50f550}.badScore{border-color:#f08080}.scoreTitle{font-weight:400;font-size:14px;color:#2b2e3e80}.error-message{color:#f44336;font-size:1em;margin-top:4px;padding:0 8px}\n"] }]
|
|
340
|
+
args: [{ selector: 'lib-sub-form', template: "<div\n class=\"outer-container mb-4 px-3\"\n [id]=\"'question-' + subForm.id\"\n [attr.name]=\"subForm.testElementName\"\n *ngIf=\"!subForm.deleted\"\n>\n <div class=\"body py-1 px-1\">\n <div class=\"tab-content pt-4 pb-3 px-3\">\n <ng-container *ngIf=\"!subForm.copied; else copySubformContainer\">\n <div class=\"subform-header\">\n <div class=\"data-container\">\n <p class=\"sectionTitle\">{{ subForm.title }}</p>\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n </div>\n <div class=\"d-flex gap-3\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s.score }}</p>\n </div>\n <div class=\"icon-container\">\n <img\n src=\"assets/icons/copy-icon.svg\"\n alt=\"copy-icon\"\n (click)=\"copySubform()\"\n *ngIf=\"allowCopy\"\n />\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon ms-3\"\n alt=\"delete icon\"\n (click)=\"deleteMainSubform(subForm.id)\"\n *ngIf=\"allowDelete\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #copySubformContainer>\n <div class=\"d-flex justify-content-end gap-4\">\n <ng-container *ngIf=\"subForm?.scores?.length\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s?.score }}</p>\n </div>\n </ng-container>\n <div class=\"icon-container\" (click)=\"deleteCopySubform(subForm.id)\">\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon\"\n alt=\"delete icon\"\n />\n </div>\n </div>\n <div class=\"copy-subform-container mb-3\">\n <p>Title</p>\n <input\n type=\"text\"\n class=\"form-control\"\n [(ngModel)]=\"subformTitle\"\n (ngModelChange)=\"updateSubformData($event, subForm.id, 'title')\"\n />\n <p class=\"mt-3\">Description</p>\n <quill-editor\n [(ngModel)]=\"subformDescription\"\n (ngModelChange)=\"\n updateSubformData($event, subForm.id, 'description')\n \"\n (onEditorCreated)=\"editorCreated($event)\"\n class=\"editor\"\n placeholder=\"\"\n ></quill-editor>\n </div>\n </ng-template>\n\n <div *ngIf=\"subForm.property.subFormStructure == 'multiple'\">\n <lib-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'table'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-multiple-subform>\n\n <lib-inline-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'inline'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-inline-multiple-subform>\n <lib-card-subform\n *ngIf=\"subForm.property.subFormType === 'card'\"\n [subForm]=\"subForm\"\n [acceptedLanguage]=\"acceptedLanguage\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [edit]=\"edit\"\n ></lib-card-subform>\n </div>\n <div *ngIf=\"subForm.property.subFormStructure == 'single'\">\n <div *ngFor=\"let row of subForm.rows\">\n <div class=\"d-flex\">\n <div\n *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n >\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\n <lib-check-box-fields\n *ngSwitchCase=\"'CHECK_BOX'\"\n [question]=\"grid.element\"\n ></lib-check-box-fields>\n <lib-date-time-fields\n *ngSwitchCase=\"'DATE_TIME'\"\n [question]=\"grid.element\"\n ></lib-date-time-fields>\n <lib-drop-down-fields\n *ngSwitchCase=\"'DROP_DOWN'\"\n [question]=\"grid.element\"\n ></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngSwitchCase=\"'FILE_PICKER'\"\n [question]=\"grid.element\"\n ></lib-file-picker-fields>\n <lib-location-fields\n *ngSwitchCase=\"'LOCATION'\"\n [question]=\"grid.element\"\n ></lib-location-fields>\n <lib-mail-fields\n *ngSwitchCase=\"'EMAIL'\"\n [question]=\"grid.element\"\n ></lib-mail-fields>\n <lib-mobile-fields\n *ngSwitchCase=\"'MOBILE'\"\n [question]=\"grid.element\"\n ></lib-mobile-fields>\n <lib-number-fields\n *ngSwitchCase=\"'NUMBER'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-number-fields>\n <lib-password-fields\n *ngSwitchCase=\"'PASSWORD'\"\n [question]=\"grid.element\"\n ></lib-password-fields>\n <lib-radio-button-fields\n *ngSwitchCase=\"'RADIO_BUTTON'\"\n [question]=\"grid.element\"\n ></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n [question]=\"grid.element\"\n ></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-selection-matrix-fields>\n <lib-signature-fields\n *ngSwitchCase=\"'SIGNATURE'\"\n [question]=\"grid.element\"\n ></lib-signature-fields>\n <lib-slider-fields\n *ngSwitchCase=\"'SLIDER'\"\n [question]=\"grid.element\"\n ></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n [question]=\"grid.element\"\n ></lib-terms-and-condition-fields>\n <lib-text-area-fields\n *ngSwitchCase=\"'TEXT_AREA'\"\n [question]=\"grid.element\"\n ></lib-text-area-fields>\n <lib-text-fields\n *ngSwitchCase=\"'TEXT_BOX'\"\n [question]=\"grid.element\"\n ></lib-text-fields>\n <lib-toggle-switch-fields\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-toggle-switch-fields>\n <lib-url-fields\n *ngSwitchCase=\"'URL'\"\n [question]=\"grid.element\"\n ></lib-url-fields>\n <lib-currency-fields\n *ngSwitchCase=\"'CURRENCY'\"\n [question]=\"grid.element\"\n ></lib-currency-fields>\n <lib-aggregate-function\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-aggregate-function>\n <lib-hidden-field\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\n [question]=\"grid.element\"\n ></lib-hidden-field>\n <lib-iframe-fields\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\n [question]=\"grid.element\"\n ></lib-iframe-fields>\n </div>\n\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n <ng-container\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\n </ng-container>\n </ng-container>\n </ng-container> -->\n <ng-container *ngIf=\"grid?.element?.childLogics\">\n <ng-container *ngIf=\"componentToLoad\">\n <ng-container\n *ngComponentOutlet=\"\n componentToLoad;\n inputs: {\n grid: grid?.element?.childLogics,\n answer: grid?.element?.answer,\n state: 'child'\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"grid.entityType === 'SECTION' && grid.show\">\n <lib-section-fields\n [section]=\"grid.element\"\n ></lib-section-fields>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isInvalid\" class=\"error-message mt-4\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".outer-container{background-color:#fff;position:relative}@media (max-width: 576px){.outer-container{padding:8px}}.body{position:relative;background:#efefef;border-radius:6px}.tab-content{background-color:#fff}.sectionTitle{font-size:19px;font-weight:700;margin-bottom:20px;word-break:break-word}.description{font-size:17px;font-weight:500;margin-bottom:18px;word-break:break-word}::ng-deep .description img{max-width:100%}.subform-header{display:flex;justify-content:space-between;margin-bottom:10px}.icon-container{cursor:pointer}.delete-icon{height:36px;width:36px}.finalScore{width:57px;height:52px;border-radius:6px;border:1px solid #c8c8c8;display:flex;flex-direction:column;justify-content:center;align-items:center;font-weight:500}.goodScore{border-color:#50f550}.badScore{border-color:#f08080}.scoreTitle{font-weight:400;font-size:14px;color:#2b2e3e80}.error-message{color:#f44336;font-size:1em;margin-top:4px;padding:0 8px}\n"] }]
|
|
341
341
|
}], ctorParameters: function () { return [{ type: i1.SubformCopyService }, { type: i2.MatDialog }, { type: i3.DataService }, { type: i4.FormService }, { type: i5.WhenClauseService }, { type: i6.ValidationService }, { type: i7.ScoreCalculationService }]; }, propDecorators: { subForm: [{
|
|
342
342
|
type: Input
|
|
343
343
|
}], edit: [{
|
|
@@ -352,4 +352,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
352
352
|
type: HostListener,
|
|
353
353
|
args: ['click', ['$event']]
|
|
354
354
|
}] } });
|
|
355
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9xdWVzdGlvbi9zdWItZm9ybS9zdWItZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3F1ZXN0aW9uL3N1Yi1mb3JtL3N1Yi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBR3BGLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZcEMsTUFBTSxPQUFPLGdCQUFnQjtJQXdCM0IsWUFDVSxrQkFBcUMsRUFDdEMsTUFBaUIsRUFDaEIsV0FBd0IsRUFDeEIsV0FBdUIsRUFDdkIsaUJBQW1DLEVBQ25DLGlCQUFvQyxFQUNwQyxnQkFBeUM7UUFOekMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBOUIxQyxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLFNBQUks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LE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViZm9ybUNvcHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3ViZm9ybS1jb3B5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1Ym1pc3Npb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvc3VibWlzc2lvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEFuc3dlciB9IGZyb20gJy4uLy4uL21vZGVscy9hbnN3ZXIubW9kZWwnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IFdoZW5DbGF1c2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2hlbkNsYXVzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTY29yZUNhbGN1bGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Njb3JlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc3ViLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdWItZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc3ViLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN1YkZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHN1YkZvcm06IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgc3ViRm9ybUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBJbnB1dCgpIGFjY2VwdGVkTGFuZ3VhZ2U6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHBhZ2VzOiBhbnlbXSA9IFtdO1xyXG4gIGRlY29kZWREZXNjcmlwdGlvbjogc3RyaW5nID0gJyc7XHJcbiAgZ3JpZDogYW55O1xyXG4gIHN0YXRlITogc3RyaW5nO1xyXG4gIGNoaWxkTG9naWNDYWNoZTogeyBba2V5OiBzdHJpbmddOiB7IGNvbXBvbmVudDogUHJvbWlzZTxhbnk+LCBpbmplY3RvcjogSW5qZWN0b3IgfSB9ID0ge307XHJcbiAgY29tcG9uZW50VG9Mb2FkOiBhbnk7XHJcbiAgaW5qZWN0b3IhOiBJbmplY3RvcjtcclxuICBjb3B5U3ViRm9ybWRhdGE6YW55O1xyXG4gIHN1YmZvcm1EZXNjcmlwdGlvbjpzdHJpbmcgPSAnJztcclxuICBzdWJmb3JtVGl0bGU6IHN0cmluZz0gJyc7XHJcbiAgZWRpdG9yOiBhbnk7XHJcbiAgYWxsb3dDb3B5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWxsb3dEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGRpYWxvZ1JlZj86IE1hdERpYWxvZ1JlZjxDb25maXJtRGlhbG9nQ29tcG9uZW50PjtcclxuICBzdWJmb3JtRGF0YTphbnk7XHJcbiAgcHJldmlvdXNTdWJtaXNzaW9uczphbnlbXT1bXTtcclxuICBtYXhQb3NzaWJsZUdvb2RTY29yZSE6IG51bWJlcjtcclxuICBtYXhQb3NzaWJsZUJhZFNjb3JlITogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc3ViZm9ybUNvcHlTZXJ2aWNlOlN1YmZvcm1Db3B5U2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTpGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgd2hlbkNsYXVzZVNlcnZpY2U6V2hlbkNsYXVzZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgc2NvcmVDYWxjU2VydmljZTogU2NvcmVDYWxjdWxhdGlvblNlcnZpY2VcclxuICApe1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5zdWJmb3JtJC5zdWJzY3JpYmUoKGRhdGEpPT57XHJcbiAgICAgIHRoaXMuc3ViZm9ybURhdGEgPSBkYXRhO1xyXG4gICAgICB0aGlzLnRyeUxvYWRQcmV2aW91c1N1Ym1pc3Npb25zKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cnlMb2FkUHJldmlvdXNTdWJtaXNzaW9ucygpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zdWJmb3JtRGF0YSAmJlxyXG4gICAgICB0aGlzLnN1YkZvcm0gJiZcclxuICAgICAgIXRoaXMuZWRpdCAmJlxyXG4gICAgICB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbkNvcHlDb25maWc/LmFsbG93Q29weUZyb21PdGhlclN1Ym1pc3Npb25zXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5sb2FkUHJldmlvdXNTdWJtaXNzaW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGxvYWRQcmV2aW91c1N1Ym1pc3Npb25zKCkge1xyXG4gICAgaWYgKHRoaXMuc3ViZm9ybURhdGEgJiYgT2JqZWN0LmtleXModGhpcy5zdWJmb3JtRGF0YSkubGVuZ3RoID4gMCAmJiAhdGhpcy5lZGl0KSB7XHJcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZ2V0U3ViZm9ybVN1Ym1pc3Npb25zKHRoaXMuc3ViZm9ybURhdGEpPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzU3VibWlzc2lvbnMgPSByZXNwb25zZTtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldFN1YkZvcm1zOiBzdHJpbmdbXSA9XHJcbiAgICAgICAgICAgIHRoaXMuc3ViZm9ybURhdGE/LmR1cGxpY2F0ZVN1Ym1pc3Npb24/LnRhcmdldFN1YkZvcm0gPz8gW107XHJcbiAgXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGFyZ2V0U3ViRm9ybXMpICYmXHJcbiAgICAgICAgICAgIHRhcmdldFN1YkZvcm1zLmluY2x1ZGVzKHRoaXMuc3ViRm9ybS50aXRsZSlcclxuICAgICAgICAgICkge1xyXG4gIFxyXG4gICAgICAgICAgICAvLyDinIUgRmlsdGVyIHN1Ym1pc3Npb25zIGJlbG9uZ2luZyB0byB0aGlzIHN1YmZvcm1cclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRTdWJtaXNzaW9ucyA9IHRoaXMucHJldmlvdXNTdWJtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHN1Ym1pc3Npb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24udGl0bGUgPT09IHRoaXMuc3ViRm9ybS50aXRsZVxyXG4gICAgICAgICAgICApO1xyXG4gIFxyXG4gICAgICAgICAgICBjb25zdCBsb2FkZWRTdWJtaXNzaW9ucyA9IHRoaXMuY3JlYXRlU3VibWlzc2lvbnNGcm9tQXBpKFxyXG4gICAgICAgICAgICAgIGZpbHRlcmVkU3VibWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJGb3JtXHJcbiAgICAgICAgICAgICk7XHJcbiAgXHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nU3VibWlzc2lvbnMgPSB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbnMgPz8gW107XHJcbiAgXHJcbiAgICAgICAgICAgIHRoaXMuc3ViRm9ybSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnN1YkZvcm0sXHJcbiAgICAgICAgICAgICAgc3VibWlzc2lvbnM6IFtcclxuICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nU3VibWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgICAuLi5sb2FkZWRTdWJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfTtcclxuICBcclxuICAgICAgICAgICAgY29uc3QgaGFzQW55U2NvcmUgPSB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbnMuc29tZSgoc3ViOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgc3ViLnNjb3Jlcz8uc29tZShcclxuICAgICAgICAgICAgICAgIChzOiBhbnkpID0+IHMuc2NvcmUgIT09IG51bGwgJiYgcy5zY29yZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gIFxyXG4gICAgICAgICAgICBpZiAoaGFzQW55U2NvcmUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnN1YkZvcm0uc2NvcmVzID0gdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmNhbGN1bGF0ZUZpbmFsU2NvcmUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlR29vZFNjb3JlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhQb3NzaWJsZUJhZFNjb3JlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnN1YkZvcm0uc2NvcmVzID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7fVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hbGxvd0NvcHkgPSB0aGlzLnN1YkZvcm0ucHJvcGVydHk/LmFsbG93Q29weTtcclxuICAgIHRoaXMuYWxsb3dEZWxldGUgPSB0aGlzLnN1YkZvcm0ucHJvcGVydHk/LmFsbG93RGVsZXRlO1xyXG4gICAgdGhpcy5jb3B5U3ViRm9ybWRhdGEgPSB0aGlzLnN1YkZvcm0/LmNvcHlTdWJmb3JtTWV0YTtcclxuICAgIHRoaXMudHJ5TG9hZFByZXZpb3VzU3VibWlzc2lvbnMoKTtcclxuICAgIGlmICh0aGlzLnN1YkZvcm0ucHJvcGVydHkuc3ViRm9ybVN0cnVjdHVyZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICB0aGlzLmJpbmRBbnN3ZXJzVG9Gb3JtRWxlbWVudHMoKTtcclxuICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgIHRoaXMud2hlbkNsYXVzZVNlcnZpY2UuYWRkR3JpZHNGcm9tU3ViZm9ybSh0aGlzLnN1YkZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgZ29vZE1heCwgYmFkTWF4IH0gPSB0aGlzLnNjb3JlQ2FsY1NlcnZpY2UuZ2V0TWF4UG9zc2libGVTY29yZShcclxuICAgICAgdGhpcy5zdWJGb3JtXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXhQb3NzaWJsZUdvb2RTY29yZSA9IGdvb2RNYXg7XHJcbiAgICB0aGlzLm1heFBvc3NpYmxlQmFkU2NvcmUgPSBiYWRNYXg7XHJcbiAgfVxyXG5cclxuICBlZGl0b3JDcmVhdGVkKGVkaXRvckluc3RhbmNlOiBhbnkpIHtcclxuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9ySW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRDb21wb25lbnQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFRvTG9hZCA9IGF3YWl0IHRoaXMubG9hZEZvcm1FbGVtZW50c0NvbXBvbmVudCgpO1xyXG4gICAgdGhpcy5pbmplY3RvciA9IHRoaXMuY3JlYXRlSW5qZWN0b3IoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZvcm1FbGVtZW50c0NvbXBvbmVudCgpIHtcclxuICAgIGNvbnN0IHsgRm9ybUVsZW1lbnRzQ29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJy4uL2Zvcm0tZWxlbWVudHMvZm9ybS1lbGVtZW50cy5jb21wb25lbnQnKTtcclxuICAgIHJldHVybiBGb3JtRWxlbWVudHNDb21wb25lbnQ7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVJbmplY3RvcigpOiBJbmplY3RvciB7XHJcbiAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiAnZ3JpZCcsIHVzZVZhbHVlOiB0aGlzLmdyaWQ/LmVsZW1lbnQuY2hpbGRMb2dpY3MgIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiAnc3RhdGUnLCB1c2VWYWx1ZTogJ2NoaWxkJyB9LFxyXG4gICAgICBdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWNvZGVIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XHJcbiAgICB0ZXh0QXJlYS5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgcmV0dXJuIHRleHRBcmVhLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYmluZEFuc3dlcnNUb0Zvcm1FbGVtZW50cygpIHtcclxuICAgIGNvbnN0IGJpbmRBbnN3ZXJzID0gKGZvcm1FbGVtZW50czogYW55W10sIHN1Ym1pc3Npb25zOiBhbnlbXSkgPT4ge1xyXG4gICAgICBmb3JtRWxlbWVudHM/LmZvckVhY2goKGdyaWRzOiBhbnkpID0+IHtcclxuICAgICAgICBncmlkcz8uZ3JpZD8uZm9yRWFjaChcclxuICAgICAgICAgIChmb3JtRWxlbWVudDogeyBlbnRpdHlUeXBlOiBzdHJpbmc7IGVsZW1lbnQ6IGFueSB9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3VibWlzc2lvbiA9IHN1Ym1pc3Npb25zLmZpbmQoKHN1YjogeyBhbnN3ZXJzOiBhbnlbXSB9KSA9PlxyXG4gICAgICAgICAgICAgICAgc3ViLmFuc3dlcnMuc29tZShcclxuICAgICAgICAgICAgICAgICAgKGFuczogeyBxdWVzdGlvbklkOiBhbnkgfSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBhbnMucXVlc3Rpb25JZCA9PT0gZm9ybUVsZW1lbnQuZWxlbWVudC5pZFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzdWJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBzdWJtaXNzaW9uLmFuc3dlcnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgKGFuczogeyBxdWVzdGlvbklkOiBhbnkgfSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBhbnMucXVlc3Rpb25JZCA9PT0gZm9ybUVsZW1lbnQuZWxlbWVudC5pZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgZm9ybUVsZW1lbnQuZWxlbWVudC5hbnN3ZXIgPSBhbnN3ZXIuYW5zd2VyO1xyXG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmFuc3dlcklkID0gYW5zd2VyLmFuc3dlcklkO1xyXG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LnZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmF0dGFjaG1lbnRzID0gYW5zd2VyLmF0dGFjaG1lbnRzO1xyXG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmFtb3VudEluV29yZHMgPSBhbnN3ZXIuYW1vdW50SW5Xb3JkcztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdWJGb3JtLnN1Ym1pc3Npb25JZCA9IHN1Ym1pc3Npb24uc3VibWlzc2lvbklkO1xyXG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmFuc3dlckN1cnJlbmN5ID0gYW5zd2VyLmFuc3dlckN1cnJlbmN5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgKGNoaWxkTG9naWM6IHsgcm93czogYW55W10gfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJpbmRBbnN3ZXJzKGNoaWxkTG9naWMucm93cywgc3VibWlzc2lvbnMpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5zdWJGb3JtICYmIHRoaXMuc3ViRm9ybS5yb3dzICYmIHRoaXMuc3ViRm9ybS5zdWJtaXNzaW9ucykge1xyXG4gICAgICBiaW5kQW5zd2Vycyh0aGlzLnN1YkZvcm0ucm93cywgdGhpcy5zdWJGb3JtLnN1Ym1pc3Npb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zdWJGb3JtID0gZXZlbnQ7XHJcbiAgICB0aGlzLnN1YkZvcm1DaGFuZ2UuZW1pdCh0aGlzLnN1YkZvcm0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdWJGb3JtLmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGVjb2RlZERlc2NyaXB0aW9uID0gdGhpcy5kZWNvZGVIdG1sKHRoaXMuc3ViRm9ybS5kZXNjcmlwdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb3B5U3ViZm9ybSgpIHtcclxuICAgIGNvbnN0IHsgdXBkYXRlZFBhZ2VzIH0gPSB0aGlzLnN1YmZvcm1Db3B5U2VydmljZS5jb3B5U3ViZm9ybSh0aGlzLnN1YkZvcm0sIHRoaXMucGFnZXMpO1xyXG5cclxuICAgIHRoaXMucGFnZXMgPSB1cGRhdGVkUGFnZXM7XHJcbiAgICAvLyBFbWl0IHVwZGF0ZWQgcGFnZXMgb3Igc3ViRm9ybUNoYW5nZSBpZiBuZWVkZWRcclxuXHJcbiAgICAvLyBPcHRpb25hbGx5IHBhc3MgbWV0YSB0byBwYXJlbnQgaWYgbmVlZGVkXHJcbiAgICAvLyB0aGlzLmNvcHlNZXRhLmVtaXQoY29weVN1YkZvcm1NZXRhKTtcclxuICB9XHJcblxyXG5cclxuICB1cGRhdGVTdWJmb3JtRGF0YShldmVudDogYW55LCBzdWJmb3JtSWQ6IHN0cmluZywgZmllbGQ6ICd0aXRsZScgfCAnZGVzY3JpcHRpb24nKSB7XHJcbiAgICBpZih0aGlzLmNvcHlTdWJGb3JtZGF0YS5pZCA9PSBzdWJmb3JtSWQpe1xyXG4gICAgICB0aGlzLmNvcHlTdWJGb3JtZGF0YVtmaWVsZF0gPSBldmVudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZUNvcHlTdWJmb3JtKHN1YmZvcm1JZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICBkaWFsb2dDb25maWcuZGF0YSA9IHtcclxuICAgICAgbWVzc2FnZUhlYWRlcjogXCJBcmUgeW91IHN1cmU/XCIsXHJcbiAgICAgIG1lc3NhZ2U6IFwiRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgc3ViZm9ybT9cIlxyXG4gICAgfTtcclxuICAgIGRpYWxvZ0NvbmZpZy5oYXNCYWNrZHJvcCA9IHRydWU7XHJcbiAgICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIC8vIDEuIFJlbW92ZSB0aGUgY29waWVkIHN1YmZvcm0gZnJvbSB0aGUgcGFnZXNcclxuICAgICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgdGhpcy5wYWdlcykge1xyXG4gICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBwYWdlLnJvd3MuZmluZEluZGV4KChyb3c6IGFueSkgPT5cclxuICAgICAgICAgICAgcm93LmdyaWQuc29tZSgoZ3JpZDogYW55KSA9PlxyXG4gICAgICAgICAgICAgIGdyaWQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXHJcbiAgICAgICAgICAgICAgZ3JpZC5lbGVtZW50Py5pZCA9PT0gc3ViZm9ybUlkICYmXHJcbiAgICAgICAgICAgICAgZ3JpZC5lbGVtZW50Py5jb3BpZWRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAocm93SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHBhZ2Uucm93cy5zcGxpY2Uocm93SW5kZXgsIDEpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIDIuIFJlbW92ZSB0aGlzIHN1YmZvcm1JZCBmcm9tIGFueSBzdWJmb3JtJ3MgY29waWVkRm9ybXMgYXJyYXlcclxuICAgICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgdGhpcy5wYWdlcykge1xyXG4gICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgcGFnZS5yb3dzKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JpZCBvZiByb3cuZ3JpZCkge1xyXG4gICAgICAgICAgICAgIGlmIChncmlkLmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJiBncmlkLmVsZW1lbnQ/LmNvcGllZEZvcm1zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGdyaWQuZWxlbWVudC5jb3BpZWRGb3Jtcy5pbmRleE9mKHN1YmZvcm1JZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIGdyaWQuZWxlbWVudC5jb3BpZWRGb3Jtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZGVsZXRlTWFpblN1YmZvcm0oc3ViZm9ybUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0ge1xyXG4gICAgICBtZXNzYWdlSGVhZGVyOiBcIkFyZSB5b3Ugc3VyZT9cIixcclxuICAgICAgbWVzc2FnZTogXCJEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBzdWJmb3JtP1wiXHJcbiAgICB9O1xyXG4gICAgZGlhbG9nQ29uZmlnLmhhc0JhY2tkcm9wID0gdHJ1ZTtcclxuICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtRGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xyXG5cclxuICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBwYWdlIG9mIHRoaXMucGFnZXMpIHtcclxuICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHBhZ2Uucm93cykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZ3JpZEl0ZW0uZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXHJcbiAgICAgICAgICAgICAgICBncmlkSXRlbS5lbGVtZW50Py5pZCA9PT0gc3ViZm9ybUlkXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSXRlbS5lbGVtZW50LmRlbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBzdG9wIGFmdGVyIHRoZSBmaXJzdCBtYXRjaFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVTdWJtaXNzaW9uc0Zyb21BcGkoYXBpU3VibWlzc2lvbnM6IGFueVtdLCBzdWJmb3JtOiBhbnkpOiBTdWJtaXNzaW9uW10ge1xyXG4gICAgcmV0dXJuIGFwaVN1Ym1pc3Npb25zLm1hcChhcGlTdWJtaXNzaW9uID0+IHtcclxuICAgICAgY29uc3QgYW5zd2VyczogQW5zd2VyW10gPSBbXTtcclxuXHJcbiAgICAgIHN1YmZvcm0ucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlICE9PSAnUVVFU1RJT04nKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGdyaWRJdGVtLmVsZW1lbnQ7XHJcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbktleSA9IGVsZW1lbnQucXVlc3Rpb247XHJcbiAgICAgICAgICBpZiAoIWFwaVN1Ym1pc3Npb24uYW5zd2VycyB8fCAhYXBpU3VibWlzc2lvbi5hbnN3ZXJzW3F1ZXN0aW9uS2V5XSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBhcGlBbnN3ZXIgPSBhcGlTdWJtaXNzaW9uLmFuc3dlcnNbcXVlc3Rpb25LZXldO1xyXG4gICAgICAgICAgLy8g4pyFIENBU0UgMTogRmlsZSB1cGxvYWQgKGFycmF5IHdpdGggbmFtZSAmIHVybClcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShhcGlBbnN3ZXIpICYmXHJcbiAgICAgICAgICAgIGFwaUFuc3dlci5sZW5ndGggJiZcclxuICAgICAgICAgICAgYXBpQW5zd2VyWzBdLm5hbWUgJiZcclxuICAgICAgICAgICAgYXBpQW5zd2VyWzBdLnVybFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGFuc3dlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZWxlbWVudC5pZCxcclxuICAgICAgICAgICAgICBhbnN3ZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgYXR0YWNobWVudHM6IGFwaUFuc3dlci5tYXAoKGZpbGU6IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGZpbGVJZDogZmlsZS5pZCxcclxuICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBmaWxlVXJsOiBmaWxlLnVybFxyXG4gICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICBjb3BpZWRBdHRhY2htZW50czogYXBpQW5zd2VyLm1hcCgoZmlsZTogYW55KSA9PiBmaWxlLmlkKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIOKchSBDQVNFIDI6IE5vcm1hbCBxdWVzdGlvbiBvYmplY3RcclxuICAgICAgICAgIGFuc3dlcnMucHVzaCh7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuaWQsXHJcbiAgICAgICAgICAgIGFuc3dlcjogYXBpQW5zd2VyLmFuc3dlciA/PyBudWxsLFxyXG4gICAgICAgICAgICBhdHRhY2htZW50czogYXBpQW5zd2VyLmZpbGVcclxuICAgICAgICAgICAgICA/IGFwaUFuc3dlci5maWxlLm1hcCgoZmlsZTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICBmaWxlVXJsOiBmaWxlLnVybFxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHNjb3JlczogYXBpQW5zd2VyLnNjb3JlcyxcclxuICAgICAgICAgICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6IGFwaUFuc3dlci5tYXhpbXVtUG9zc2libGVTY29yZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzdWJtaXNzaW9uSWQ6IHV1aWR2NCgpLFxyXG4gICAgICAgIHNvdXJjZVN1Ym1pc3Npb25JZDogYXBpU3VibWlzc2lvbi5zdWJtaXNzaW9uSWQsXHJcbiAgICAgICAgYW5zd2VycyxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XHJcbiAgICAgICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICAgICAgYWxsb3dEZWxldGU6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNjb3JlczogYXBpU3VibWlzc2lvbi5zY29yZVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5zdWJGb3JtLmlkKTtcclxuICB9XHJcblxyXG4gIGdldCBlcnJvck1lc3NhZ2UoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5zdWJGb3JtLmlkKTtcclxuICB9XHJcblxyXG4gIGNsZWFySW52YWxpZCgpe1xyXG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5zdWJGb3JtLmlkKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICAgIG9uQW55Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJJbnZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cIm91dGVyLWNvbnRhaW5lciBtYi00IHB4LTNcIlxyXG4gIFtpZF09XCIncXVlc3Rpb24tJyArIHN1YkZvcm0uaWRcIlxyXG4gIFthdHRyLm5hbWVdPVwic3ViRm9ybS50ZXN0RWxlbWVudE5hbWVcIlxyXG4gICpuZ0lmPVwiIXN1YkZvcm0uZGVsZXRlZFwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiYm9keSBweS0xIHB4LTFcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudCBwdC00IHBiLTMgcHgtM1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN1YkZvcm0uY29waWVkOyBlbHNlIGNvcHlTdWJmb3JtQ29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YmZvcm0taGVhZGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJzZWN0aW9uVGl0bGVcIj57eyBzdWJGb3JtLnRpdGxlIH19PC9wPlxyXG4gICAgICAgICAgICA8cCBbaW5uZXJIVE1MXT1cImRlY29kZWREZXNjcmlwdGlvblwiIGNsYXNzPVwiZGVzY3JpcHRpb25cIj48L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmluYWxTY29yZVwiXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHMgb2Ygc3ViRm9ybT8uc2NvcmVzXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICBnb29kU2NvcmU6IHMuc2NvcmVUeXBlID09PSAnR09PRF9TQ09SRScsXHJcbiAgICAgICAgICAgICAgICBiYWRTY29yZTogcy5zY29yZVR5cGUgPT09ICdCQURfU0NPUkUnXHJcbiAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjb3JlVGl0bGVcIj5TY29yZTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj57eyBzLnNjb3JlIH19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2NvcHktaWNvbi5zdmdcIlxyXG4gICAgICAgICAgICAgICAgYWx0PVwiY29weS1pY29uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb3B5U3ViZm9ybSgpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWxsb3dDb3B5XCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9kZWxldGUtaWNvbi5zdmdcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxldGUtaWNvbiBtcy0zXCJcclxuICAgICAgICAgICAgICAgIGFsdD1cImRlbGV0ZSBpY29uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVNYWluU3ViZm9ybShzdWJGb3JtLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFsbG93RGVsZXRlXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNjb3B5U3ViZm9ybUNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgZ2FwLTRcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZpbmFsU2NvcmVcIlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzIG9mIHN1YkZvcm0/LnNjb3Jlc1wiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgZ29vZFNjb3JlOiBzLnNjb3JlVHlwZSA9PT0gJ0dPT0RfU0NPUkUnLFxyXG4gICAgICAgICAgICAgICAgYmFkU2NvcmU6IHMuc2NvcmVUeXBlID09PSAnQkFEX1NDT1JFJ1xyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzY29yZVRpdGxlXCI+U2NvcmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+e3sgcy5zY29yZSB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIiAoY2xpY2spPVwiZGVsZXRlQ29weVN1YmZvcm0oc3ViRm9ybS5pZClcIj5cclxuICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9kZWxldGUtaWNvbi5zdmdcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlLWljb25cIlxyXG4gICAgICAgICAgICAgIGFsdD1cImRlbGV0ZSBpY29uXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3B5LXN1YmZvcm0tY29udGFpbmVyIG1iLTNcIj5cclxuICAgICAgICAgIDxwPlRpdGxlPC9wPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInN1YmZvcm1UaXRsZVwiXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVN1YmZvcm1EYXRhKCRldmVudCwgc3ViRm9ybS5pZCwgJ3RpdGxlJylcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibXQtM1wiPkRlc2NyaXB0aW9uPC9wPlxyXG4gICAgICAgICAgPHF1aWxsLWVkaXRvclxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInN1YmZvcm1EZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxyXG4gICAgICAgICAgICAgIHVwZGF0ZVN1YmZvcm1EYXRhKCRldmVudCwgc3ViRm9ybS5pZCwgJ2Rlc2NyaXB0aW9uJylcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgKG9uRWRpdG9yQ3JlYXRlZCk9XCJlZGl0b3JDcmVhdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImVkaXRvclwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgID48L3F1aWxsLWVkaXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT0gJ211bHRpcGxlJ1wiPlxyXG4gICAgICAgIDxsaWItbXVsdGlwbGUtc3ViZm9ybVxyXG4gICAgICAgICAgKm5nSWY9XCJzdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1UeXBlID09PSAndGFibGUnXCJcclxuICAgICAgICAgIFtzdWJGb3JtXT1cInN1YkZvcm1cIlxyXG4gICAgICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgIFthY2NlcHRlZExhbmd1YWdlXT1cImFjY2VwdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgID48L2xpYi1tdWx0aXBsZS1zdWJmb3JtPlxyXG5cclxuICAgICAgICA8bGliLWlubGluZS1tdWx0aXBsZS1zdWJmb3JtXHJcbiAgICAgICAgICAqbmdJZj1cInN1YkZvcm0ucHJvcGVydHkuc3ViRm9ybVR5cGUgPT09ICdpbmxpbmUnXCJcclxuICAgICAgICAgIFtzdWJGb3JtXT1cInN1YkZvcm1cIlxyXG4gICAgICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcclxuICAgICAgICAgIFthY2NlcHRlZExhbmd1YWdlXT1cImFjY2VwdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgID48L2xpYi1pbmxpbmUtbXVsdGlwbGUtc3ViZm9ybT5cclxuICAgICAgICA8bGliLWNhcmQtc3ViZm9ybVxyXG4gICAgICAgICAgKm5nSWY9XCJzdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1UeXBlID09PSAnY2FyZCdcIlxyXG4gICAgICAgICAgW3N1YkZvcm1dPVwic3ViRm9ybVwiXHJcbiAgICAgICAgICBbYWNjZXB0ZWRMYW5ndWFnZV09XCJhY2NlcHRlZExhbmd1YWdlXCJcclxuICAgICAgICAgIChzdWJGb3JtQ2hhbmdlKT1cInVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbZWRpdF09XCJlZGl0XCJcclxuICAgICAgICA+PC9saWItY2FyZC1zdWJmb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInN1YkZvcm0ucHJvcGVydHkuc3ViRm9ybVN0cnVjdHVyZSA9PSAnc2luZ2xlJ1wiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdWJGb3JtLnJvd3NcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncmlkIG9mIHJvdy5ncmlkXCJcclxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICd3aWR0aC4lJzogZ3JpZC5lbGVtZW50LmNvdW50ICogKDEwMCAvIDEyKSB9XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncmlkLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiYgZ3JpZC5zaG93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJncmlkLmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1jaGVjay1ib3gtZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidDSEVDS19CT1gnXCJcclxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcclxuICAgICAgICAgICAgICAgICAgPjwvbGliLWNoZWNrLWJveC1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZGF0ZS10aW1lLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInREFURV9USU1FJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1kYXRlLXRpbWUtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLWRyb3AtZG93bi1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0RST1BfRE9XTidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItZHJvcC1kb3duLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1maWxlLXBpY2tlci1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0ZJTEVfUElDS0VSJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1maWxlLXBpY2tlci1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItbG9jYXRpb24tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidMT0NBVElPTidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItbG9jYXRpb24tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLW1haWwtZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidFTUFJTCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItbWFpbC1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItbW9iaWxlLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInTU9CSUxFJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1tb2JpbGUtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLW51bWJlci1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ05VTUJFUidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dJZF09XCInMCdcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItbnVtYmVyLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1wYXNzd29yZC1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1BBU1NXT1JEJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1wYXNzd29yZC1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItcmFkaW8tYnV0dG9uLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInUkFESU9fQlVUVE9OJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1yYWRpby1idXR0b24tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLXJpY2gtdGV4dC1lZGl0b3ItZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidSSUNIX1RFWFRfRURJVE9SJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1yaWNoLXRleHQtZWRpdG9yLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1zZWxlY3Rpb24tbWF0cml4LWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInU0VMRUNUSU9OX01BVFJJWCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthY2NlcHRlZExhbmd1YWdlXT1cImFjY2VwdGVkTGFuZ3VhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItc2VsZWN0aW9uLW1hdHJpeC1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItc2lnbmF0dXJlLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInU0lHTkFUVVJFJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1zaWduYXR1cmUtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLXNsaWRlci1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1NMSURFUidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItc2xpZGVyLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgPGxpYi10ZXJtcy1hbmQtY29uZGl0aW9uLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInVEVSTVNfQU5EX0NPTkRJVElPTidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItdGVybXMtYW5kLWNvbmRpdGlvbi1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItdGV4dC1hcmVhLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInVEVYVF9BUkVBJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2xpYi10ZXh0LWFyZWEtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLXRleHQtZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidURVhUX0JPWCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItdGV4dC1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItdG9nZ2xlLXN3aXRjaC1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1RPR0dMRV9TV0lUQ0gnXCJcclxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbYWNjZXB0ZWRMYW5ndWFnZV09XCJhY2NlcHRlZExhbmd1YWdlXCJcclxuICAgICAgICAgICAgICAgICAgPjwvbGliLXRvZ2dsZS1zd2l0Y2gtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLXVybC1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1VSTCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItdXJsLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1jdXJyZW5jeS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0NVUlJFTkNZJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1jdXJyZW5jeS1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItYWdncmVnYXRlLWZ1bmN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidBR0dSRUdBVEVfRlVOQ1RJT04nXCJcclxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiJzAnXCJcclxuICAgICAgICAgICAgICAgICAgPjwvbGliLWFnZ3JlZ2F0ZS1mdW5jdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1oaWRkZW4tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0hJRERFTl9GSUVMRCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9saWItaGlkZGVuLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLWlmcmFtZS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0lGUkFNRV9XSURHRVQnXCJcclxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcclxuICAgICAgICAgICAgICAgICAgPjwvbGliLWlmcmFtZS1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkLmVsZW1lbnQuY2hpbGRMb2dpY3NcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29tcG9uZW50Rm9yQ2hpbGRMb2dpY3MoZ3JpZC5lbGVtZW50LmNoaWxkTG9naWNzLCAnY2hpbGQnLCBncmlkLmVsZW1lbnQuYW5zd2VyKSBhcyBvdXRsZXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIm91dGxldC5jb21wb25lbnQgfCBhc3luYzsgaW5qZWN0b3I6IG91dGxldC5pbmplY3RvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkPy5lbGVtZW50Py5jaGlsZExvZ2ljc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50VG9Mb2FkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFRvTG9hZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZDogZ3JpZD8uZWxlbWVudD8uY2hpbGRMb2dpY3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkPy5lbGVtZW50Py5hbnN3ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdjaGlsZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncmlkLmVudGl0eVR5cGUgPT09ICdTRUNUSU9OJyAmJiBncmlkLnNob3dcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VjdGlvbi1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgW3NlY3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcclxuICAgICAgICAgICAgICAgID48L2xpYi1zZWN0aW9uLWZpZWxkcz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNJbnZhbGlkXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlIG10LTRcIj5cclxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
355
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9xdWVzdGlvbi9zdWItZm9ybS9zdWItZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3F1ZXN0aW9uL3N1Yi1mb3JtL3N1Yi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBR3BGLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZcEMsTUFBTSxPQUFPLGdCQUFnQjtJQXdCM0IsWUFDVSxrQkFBcUMsRUFDdEMsTUFBaUIsRUFDaEIsV0FBd0IsRUFDeEIsV0FBdUIsRUFDdkIsaUJBQW1DLEVBQ25DLGlCQUFvQyxFQUNwQyxnQkFBeUM7UUFOekMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBOUIxQyxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLFNBQUks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LE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViZm9ybUNvcHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3ViZm9ybS1jb3B5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFN1Ym1pc3Npb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvc3VibWlzc2lvbi5tb2RlbCc7XG5pbXBvcnQgeyBBbnN3ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvYW5zd2VyLm1vZGVsJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2hlbkNsYXVzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93aGVuQ2xhdXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NvcmVDYWxjdWxhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zY29yZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXN1Yi1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1Yi1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3ViLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3ViRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN1YkZvcm06IGFueSA9IHt9O1xuICBASW5wdXQoKSBlZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBzdWJGb3JtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIGFjY2VwdGVkTGFuZ3VhZ2U6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBwYWdlczogYW55W10gPSBbXTtcbiAgZGVjb2RlZERlc2NyaXB0aW9uOiBzdHJpbmcgPSAnJztcbiAgZ3JpZDogYW55O1xuICBzdGF0ZSE6IHN0cmluZztcbiAgY2hpbGRMb2dpY0NhY2hlOiB7IFtrZXk6IHN0cmluZ106IHsgY29tcG9uZW50OiBQcm9taXNlPGFueT4sIGluamVjdG9yOiBJbmplY3RvciB9IH0gPSB7fTtcbiAgY29tcG9uZW50VG9Mb2FkOiBhbnk7XG4gIGluamVjdG9yITogSW5qZWN0b3I7XG4gIGNvcHlTdWJGb3JtZGF0YTphbnk7XG4gIHN1YmZvcm1EZXNjcmlwdGlvbjpzdHJpbmcgPSAnJztcbiAgc3ViZm9ybVRpdGxlOiBzdHJpbmc9ICcnO1xuICBlZGl0b3I6IGFueTtcbiAgYWxsb3dDb3B5OiBib29sZWFuID0gZmFsc2U7XG4gIGFsbG93RGVsZXRlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgZGlhbG9nUmVmPzogTWF0RGlhbG9nUmVmPENvbmZpcm1EaWFsb2dDb21wb25lbnQ+O1xuICBzdWJmb3JtRGF0YTphbnk7XG4gIHByZXZpb3VzU3VibWlzc2lvbnM6YW55W109W107XG4gIG1heFBvc3NpYmxlR29vZFNjb3JlITogbnVtYmVyO1xuICBtYXhQb3NzaWJsZUJhZFNjb3JlITogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3ViZm9ybUNvcHlTZXJ2aWNlOlN1YmZvcm1Db3B5U2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTpGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIHdoZW5DbGF1c2VTZXJ2aWNlOldoZW5DbGF1c2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NvcmVDYWxjU2VydmljZTogU2NvcmVDYWxjdWxhdGlvblNlcnZpY2VcbiAgKXtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnN1YmZvcm0kLnN1YnNjcmliZSgoZGF0YSk9PntcbiAgICAgIHRoaXMuc3ViZm9ybURhdGEgPSBkYXRhO1xuICAgICAgdGhpcy50cnlMb2FkUHJldmlvdXNTdWJtaXNzaW9ucygpO1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHRyeUxvYWRQcmV2aW91c1N1Ym1pc3Npb25zKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3ViZm9ybURhdGEgJiZcbiAgICAgIHRoaXMuc3ViRm9ybSAmJlxuICAgICAgIXRoaXMuZWRpdCAmJlxuICAgICAgdGhpcy5zdWJGb3JtLnN1Ym1pc3Npb25Db3B5Q29uZmlnPy5hbGxvd0NvcHlGcm9tT3RoZXJTdWJtaXNzaW9uc1xuICAgICkge1xuICAgICAgdGhpcy5sb2FkUHJldmlvdXNTdWJtaXNzaW9ucygpO1xuICAgIH1cbiAgfVxuXG5cbiAgbG9hZFByZXZpb3VzU3VibWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuc3ViZm9ybURhdGEgJiYgT2JqZWN0LmtleXModGhpcy5zdWJmb3JtRGF0YSkubGVuZ3RoID4gMCAmJiAhdGhpcy5lZGl0KSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLmdldFN1YmZvcm1TdWJtaXNzaW9ucyh0aGlzLnN1YmZvcm1EYXRhKT8uc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzU3VibWlzc2lvbnMgPSByZXNwb25zZTtcbiAgICAgICAgICBjb25zdCB0YXJnZXRTdWJGb3Jtczogc3RyaW5nW10gPVxuICAgICAgICAgICAgdGhpcy5zdWJmb3JtRGF0YT8uZHVwbGljYXRlU3VibWlzc2lvbj8udGFyZ2V0U3ViRm9ybSA/PyBbXTtcbiAgXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0YXJnZXRTdWJGb3JtcykgJiZcbiAgICAgICAgICAgIHRhcmdldFN1YkZvcm1zLmluY2x1ZGVzKHRoaXMuc3ViRm9ybS50aXRsZSlcbiAgICAgICAgICApIHtcbiAgXG4gICAgICAgICAgICAvLyDinIUgRmlsdGVyIHN1Ym1pc3Npb25zIGJlbG9uZ2luZyB0byB0aGlzIHN1YmZvcm1cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU3VibWlzc2lvbnMgPSB0aGlzLnByZXZpb3VzU3VibWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAoc3VibWlzc2lvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24udGl0bGUgPT09IHRoaXMuc3ViRm9ybS50aXRsZVxuICAgICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgICBjb25zdCBsb2FkZWRTdWJtaXNzaW9ucyA9IHRoaXMuY3JlYXRlU3VibWlzc2lvbnNGcm9tQXBpKFxuICAgICAgICAgICAgICBmaWx0ZXJlZFN1Ym1pc3Npb25zLFxuICAgICAgICAgICAgICB0aGlzLnN1YkZvcm1cbiAgICAgICAgICAgICk7XG4gIFxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTdWJtaXNzaW9ucyA9IHRoaXMuc3ViRm9ybS5zdWJtaXNzaW9ucyA/PyBbXTtcbiAgXG4gICAgICAgICAgICB0aGlzLnN1YkZvcm0gPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuc3ViRm9ybSxcbiAgICAgICAgICAgICAgc3VibWlzc2lvbnM6IFtcbiAgICAgICAgICAgICAgICAuLi5leGlzdGluZ1N1Ym1pc3Npb25zLFxuICAgICAgICAgICAgICAgIC4uLmxvYWRlZFN1Ym1pc3Npb25zXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG4gIFxuICAgICAgICAgICAgY29uc3QgaGFzQW55U2NvcmUgPSB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbnMuc29tZSgoc3ViOiBhbnkpID0+XG4gICAgICAgICAgICAgIHN1Yi5zY29yZXM/LnNvbWUoXG4gICAgICAgICAgICAgICAgKHM6IGFueSkgPT4gcy5zY29yZSAhPT0gbnVsbCAmJiBzLnNjb3JlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgICBpZiAoaGFzQW55U2NvcmUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdWJGb3JtLnNjb3JlcyA9IHRoaXMuc2NvcmVDYWxjU2VydmljZS5jYWxjdWxhdGVGaW5hbFNjb3JlKFxuICAgICAgICAgICAgICAgIHRoaXMuc3ViRm9ybS5zdWJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlR29vZFNjb3JlLFxuICAgICAgICAgICAgICAgIHRoaXMubWF4UG9zc2libGVCYWRTY29yZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zdWJGb3JtLnNjb3JlcyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHt9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hbGxvd0NvcHkgPSB0aGlzLnN1YkZvcm0ucHJvcGVydHk/LmFsbG93Q29weTtcbiAgICB0aGlzLmFsbG93RGVsZXRlID0gdGhpcy5zdWJGb3JtLnByb3BlcnR5Py5hbGxvd0RlbGV0ZTtcbiAgICB0aGlzLmNvcHlTdWJGb3JtZGF0YSA9IHRoaXMuc3ViRm9ybT8uY29weVN1YmZvcm1NZXRhO1xuICAgIHRoaXMudHJ5TG9hZFByZXZpb3VzU3VibWlzc2lvbnMoKTtcbiAgICBpZiAodGhpcy5zdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuYmluZEFuc3dlcnNUb0Zvcm1FbGVtZW50cygpO1xuICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLndoZW5DbGF1c2VTZXJ2aWNlLmFkZEdyaWRzRnJvbVN1YmZvcm0odGhpcy5zdWJGb3JtKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGdvb2RNYXgsIGJhZE1heCB9ID0gdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmdldE1heFBvc3NpYmxlU2NvcmUoXG4gICAgICB0aGlzLnN1YkZvcm1cbiAgICApO1xuICAgIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUgPSBnb29kTWF4O1xuICAgIHRoaXMubWF4UG9zc2libGVCYWRTY29yZSA9IGJhZE1heDtcbiAgfVxuXG4gIGVkaXRvckNyZWF0ZWQoZWRpdG9ySW5zdGFuY2U6IGFueSkge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9ySW5zdGFuY2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRDb21wb25lbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jb21wb25lbnRUb0xvYWQgPSBhd2FpdCB0aGlzLmxvYWRGb3JtRWxlbWVudHNDb21wb25lbnQoKTtcbiAgICB0aGlzLmluamVjdG9yID0gdGhpcy5jcmVhdGVJbmplY3RvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRm9ybUVsZW1lbnRzQ29tcG9uZW50KCkge1xuICAgIGNvbnN0IHsgRm9ybUVsZW1lbnRzQ29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJy4uL2Zvcm0tZWxlbWVudHMvZm9ybS1lbGVtZW50cy5jb21wb25lbnQnKTtcbiAgICByZXR1cm4gRm9ybUVsZW1lbnRzQ29tcG9uZW50O1xuICB9XG5cbiAgY3JlYXRlSW5qZWN0b3IoKTogSW5qZWN0b3Ige1xuICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogJ2dyaWQnLCB1c2VWYWx1ZTogdGhpcy5ncmlkPy5lbGVtZW50LmNoaWxkTG9naWNzICB9LFxuICAgICAgICB7IHByb3ZpZGU6ICdzdGF0ZScsIHVzZVZhbHVlOiAnY2hpbGQnIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgZGVjb2RlSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICB0ZXh0QXJlYS5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiB0ZXh0QXJlYS52YWx1ZTtcbiAgfVxuXG4gIGJpbmRBbnN3ZXJzVG9Gb3JtRWxlbWVudHMoKSB7XG4gICAgY29uc3QgYmluZEFuc3dlcnMgPSAoZm9ybUVsZW1lbnRzOiBhbnlbXSwgc3VibWlzc2lvbnM6IGFueVtdKSA9PiB7XG4gICAgICBmb3JtRWxlbWVudHM/LmZvckVhY2goKGdyaWRzOiBhbnkpID0+IHtcbiAgICAgICAgZ3JpZHM/LmdyaWQ/LmZvckVhY2goXG4gICAgICAgICAgKGZvcm1FbGVtZW50OiB7IGVudGl0eVR5cGU6IHN0cmluZzsgZWxlbWVudDogYW55IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1Ym1pc3Npb24gPSBzdWJtaXNzaW9ucy5maW5kKChzdWI6IHsgYW5zd2VyczogYW55W10gfSkgPT5cbiAgICAgICAgICAgICAgICBzdWIuYW5zd2Vycy5zb21lKFxuICAgICAgICAgICAgICAgICAgKGFuczogeyBxdWVzdGlvbklkOiBhbnkgfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgYW5zLnF1ZXN0aW9uSWQgPT09IGZvcm1FbGVtZW50LmVsZW1lbnQuaWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1Ym1pc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBzdWJtaXNzaW9uLmFuc3dlcnMuZmluZChcbiAgICAgICAgICAgICAgICAgIChhbnM6IHsgcXVlc3Rpb25JZDogYW55IH0pID0+XG4gICAgICAgICAgICAgICAgICAgIGFucy5xdWVzdGlvbklkID09PSBmb3JtRWxlbWVudC5lbGVtZW50LmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyKSB7XG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmFuc3dlciA9IGFuc3dlci5hbnN3ZXI7XG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmFuc3dlcklkID0gYW5zd2VyLmFuc3dlcklkO1xuICAgICAgICAgICAgICAgICAgZm9ybUVsZW1lbnQuZWxlbWVudC52YWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50LmVsZW1lbnQuYXR0YWNobWVudHMgPSBhbnN3ZXIuYXR0YWNobWVudHM7XG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmFtb3VudEluV29yZHMgPSBhbnN3ZXIuYW1vdW50SW5Xb3JkcztcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3ViRm9ybS5zdWJtaXNzaW9uSWQgPSBzdWJtaXNzaW9uLnN1Ym1pc3Npb25JZDtcbiAgICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50LmVsZW1lbnQuYW5zd2VyQ3VycmVuY3kgPSBhbnN3ZXIuYW5zd2VyQ3VycmVuY3k7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAoY2hpbGRMb2dpYzogeyByb3dzOiBhbnlbXSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGJpbmRBbnN3ZXJzKGNoaWxkTG9naWMucm93cywgc3VibWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc3ViRm9ybSAmJiB0aGlzLnN1YkZvcm0ucm93cyAmJiB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbnMpIHtcbiAgICAgIGJpbmRBbnN3ZXJzKHRoaXMuc3ViRm9ybS5yb3dzLCB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3ViRm9ybSA9IGV2ZW50O1xuICAgIHRoaXMuc3ViRm9ybUNoYW5nZS5lbWl0KHRoaXMuc3ViRm9ybSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJGb3JtLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRlY29kZWREZXNjcmlwdGlvbiA9IHRoaXMuZGVjb2RlSHRtbCh0aGlzLnN1YkZvcm0uZGVzY3JpcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvcHlTdWJmb3JtKCkge1xuICAgIGNvbnN0IHsgdXBkYXRlZFBhZ2VzIH0gPSB0aGlzLnN1YmZvcm1Db3B5U2VydmljZS5jb3B5U3ViZm9ybSh0aGlzLnN1YkZvcm0sIHRoaXMucGFnZXMpO1xuXG4gICAgdGhpcy5wYWdlcyA9IHVwZGF0ZWRQYWdlcztcbiAgICAvLyBFbWl0IHVwZGF0ZWQgcGFnZXMgb3Igc3ViRm9ybUNoYW5nZSBpZiBuZWVkZWRcblxuICAgIC8vIE9wdGlvbmFsbHkgcGFzcyBtZXRhIHRvIHBhcmVudCBpZiBuZWVkZWRcbiAgICAvLyB0aGlzLmNvcHlNZXRhLmVtaXQoY29weVN1YkZvcm1NZXRhKTtcbiAgfVxuXG5cbiAgdXBkYXRlU3ViZm9ybURhdGEoZXZlbnQ6IGFueSwgc3ViZm9ybUlkOiBzdHJpbmcsIGZpZWxkOiAndGl0bGUnIHwgJ2Rlc2NyaXB0aW9uJykge1xuICAgIGlmKHRoaXMuY29weVN1YkZvcm1kYXRhLmlkID09IHN1YmZvcm1JZCl7XG4gICAgICB0aGlzLmNvcHlTdWJGb3JtZGF0YVtmaWVsZF0gPSBldmVudDtcbiAgICB9XG4gIH1cblxuICBkZWxldGVDb3B5U3ViZm9ybShzdWJmb3JtSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcbiAgICBkaWFsb2dDb25maWcuZGF0YSA9IHtcbiAgICAgIG1lc3NhZ2VIZWFkZXI6IFwiQXJlIHlvdSBzdXJlP1wiLFxuICAgICAgbWVzc2FnZTogXCJEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBzdWJmb3JtP1wiXG4gICAgfTtcbiAgICBkaWFsb2dDb25maWcuaGFzQmFja2Ryb3AgPSB0cnVlO1xuICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1EaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgLy8gMS4gUmVtb3ZlIHRoZSBjb3BpZWQgc3ViZm9ybSBmcm9tIHRoZSBwYWdlc1xuICAgICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgdGhpcy5wYWdlcykge1xuICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFnZS5yb3dzLmZpbmRJbmRleCgocm93OiBhbnkpID0+XG4gICAgICAgICAgICByb3cuZ3JpZC5zb21lKChncmlkOiBhbnkpID0+XG4gICAgICAgICAgICAgIGdyaWQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICAgIGdyaWQuZWxlbWVudD8uaWQgPT09IHN1YmZvcm1JZCAmJlxuICAgICAgICAgICAgICBncmlkLmVsZW1lbnQ/LmNvcGllZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocm93SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBwYWdlLnJvd3Muc3BsaWNlKHJvd0luZGV4LCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIFJlbW92ZSB0aGlzIHN1YmZvcm1JZCBmcm9tIGFueSBzdWJmb3JtJ3MgY29waWVkRm9ybXMgYXJyYXlcbiAgICAgICAgZm9yIChjb25zdCBwYWdlIG9mIHRoaXMucGFnZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBwYWdlLnJvd3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JpZCBvZiByb3cuZ3JpZCkge1xuICAgICAgICAgICAgICBpZiAoZ3JpZC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgZ3JpZC5lbGVtZW50Py5jb3BpZWRGb3Jtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ3JpZC5lbGVtZW50LmNvcGllZEZvcm1zLmluZGV4T2Yoc3ViZm9ybUlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICBncmlkLmVsZW1lbnQuY29waWVkRm9ybXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgZGVsZXRlTWFpblN1YmZvcm0oc3ViZm9ybUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XG4gICAgZGlhbG9nQ29uZmlnLmRhdGEgPSB7XG4gICAgICBtZXNzYWdlSGVhZGVyOiBcIkFyZSB5b3Ugc3VyZT9cIixcbiAgICAgIG1lc3NhZ2U6IFwiRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgc3ViZm9ybT9cIlxuICAgIH07XG4gICAgZGlhbG9nQ29uZmlnLmhhc0JhY2tkcm9wID0gdHJ1ZTtcbiAgICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtRGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xuXG4gICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLnBhZ2VzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgcGFnZS5yb3dzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiZcbiAgICAgICAgICAgICAgICBncmlkSXRlbS5lbGVtZW50Py5pZCA9PT0gc3ViZm9ybUlkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGdyaWRJdGVtLmVsZW1lbnQuZGVsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBzdG9wIGFmdGVyIHRoZSBmaXJzdCBtYXRjaFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVTdWJtaXNzaW9uc0Zyb21BcGkoYXBpU3VibWlzc2lvbnM6IGFueVtdLCBzdWJmb3JtOiBhbnkpOiBTdWJtaXNzaW9uW10ge1xuICAgIHJldHVybiBhcGlTdWJtaXNzaW9ucy5tYXAoYXBpU3VibWlzc2lvbiA9PiB7XG4gICAgICBjb25zdCBhbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xuXG4gICAgICBzdWJmb3JtLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlICE9PSAnUVVFU1RJT04nKSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZ3JpZEl0ZW0uZWxlbWVudDtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbktleSA9IGVsZW1lbnQucXVlc3Rpb247XG4gICAgICAgICAgaWYgKCFhcGlTdWJtaXNzaW9uLmFuc3dlcnMgfHwgIWFwaVN1Ym1pc3Npb24uYW5zd2Vyc1txdWVzdGlvbktleV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYXBpQW5zd2VyID0gYXBpU3VibWlzc2lvbi5hbnN3ZXJzW3F1ZXN0aW9uS2V5XTtcbiAgICAgICAgICAvLyDinIUgQ0FTRSAxOiBGaWxlIHVwbG9hZCAoYXJyYXkgd2l0aCBuYW1lICYgdXJsKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXBpQW5zd2VyKSAmJlxuICAgICAgICAgICAgYXBpQW5zd2VyLmxlbmd0aCAmJlxuICAgICAgICAgICAgYXBpQW5zd2VyWzBdLm5hbWUgJiZcbiAgICAgICAgICAgIGFwaUFuc3dlclswXS51cmxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGFuc3dlcnMucHVzaCh7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgIGFuc3dlcjogbnVsbCxcbiAgICAgICAgICAgICAgYXR0YWNobWVudHM6IGFwaUFuc3dlci5tYXAoKGZpbGU6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICBmaWxlVXJsOiBmaWxlLnVybFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgIGNvcGllZEF0dGFjaG1lbnRzOiBhcGlBbnN3ZXIubWFwKChmaWxlOiBhbnkpID0+IGZpbGUuaWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyDinIUgQ0FTRSAyOiBOb3JtYWwgcXVlc3Rpb24gb2JqZWN0XG4gICAgICAgICAgYW5zd2Vycy5wdXNoKHtcbiAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBhbnN3ZXI6IGFwaUFuc3dlci5hbnN3ZXIgPz8gbnVsbCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBhcGlBbnN3ZXIuZmlsZVxuICAgICAgICAgICAgICA/IGFwaUFuc3dlci5maWxlLm1hcCgoZmlsZTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVVcmw6IGZpbGUudXJsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2NvcmVzOiBhcGlBbnN3ZXIuc2NvcmVzLFxuICAgICAgICAgICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6IGFwaUFuc3dlci5tYXhpbXVtUG9zc2libGVTY29yZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWJtaXNzaW9uSWQ6IHV1aWR2NCgpLFxuICAgICAgICBzb3VyY2VTdWJtaXNzaW9uSWQ6IGFwaVN1Ym1pc3Npb24uc3VibWlzc2lvbklkLFxuICAgICAgICBhbnN3ZXJzLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBhbGxvd0RlbGV0ZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBzY29yZXM6IGFwaVN1Ym1pc3Npb24uc2NvcmVcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHRoaXMuc3ViRm9ybS5pZCk7XG4gIH1cblxuICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEVycm9yTWVzc2FnZSh0aGlzLnN1YkZvcm0uaWQpO1xuICB9XG5cbiAgY2xlYXJJbnZhbGlkKCl7XG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5zdWJGb3JtLmlkKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkFueUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckludmFsaWQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuXG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwib3V0ZXItY29udGFpbmVyIG1iLTQgcHgtM1wiXG4gIFtpZF09XCIncXVlc3Rpb24tJyArIHN1YkZvcm0uaWRcIlxuICBbYXR0ci5uYW1lXT1cInN1YkZvcm0udGVzdEVsZW1lbnROYW1lXCJcbiAgKm5nSWY9XCIhc3ViRm9ybS5kZWxldGVkXCJcbj5cbiAgPGRpdiBjbGFzcz1cImJvZHkgcHktMSBweC0xXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50IHB0LTQgcGItMyBweC0zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN1YkZvcm0uY29waWVkOyBlbHNlIGNvcHlTdWJmb3JtQ29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJmb3JtLWhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJzZWN0aW9uVGl0bGVcIj57eyBzdWJGb3JtLnRpdGxlIH19PC9wPlxuICAgICAgICAgICAgPHAgW2lubmVySFRNTF09XCJkZWNvZGVkRGVzY3JpcHRpb25cIiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaW5hbFNjb3JlXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHMgb2Ygc3ViRm9ybT8uc2NvcmVzXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIGdvb2RTY29yZTogcy5zY29yZVR5cGUgPT09ICdHT09EX1NDT1JFJyxcbiAgICAgICAgICAgICAgICBiYWRTY29yZTogcy5zY29yZVR5cGUgPT09ICdCQURfU0NPUkUnXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjb3JlVGl0bGVcIj5TY29yZTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+e3sgcy5zY29yZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvY29weS1pY29uLnN2Z1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiY29weS1pY29uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weVN1YmZvcm0oKVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd0NvcHlcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2RlbGV0ZS1pY29uLnN2Z1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxldGUtaWNvbiBtcy0zXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJkZWxldGUgaWNvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZU1haW5TdWJmb3JtKHN1YkZvcm0uaWQpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFsbG93RGVsZXRlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjb3B5U3ViZm9ybUNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC00XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YkZvcm0/LnNjb3Jlcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZpbmFsU2NvcmVcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcyBvZiBzdWJGb3JtPy5zY29yZXNcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgZ29vZFNjb3JlOiBzLnNjb3JlVHlwZSA9PT0gJ0dPT0RfU0NPUkUnLFxuICAgICAgICAgICAgICAgIGJhZFNjb3JlOiBzLnNjb3JlVHlwZSA9PT0gJ0JBRF9TQ09SRSdcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2NvcmVUaXRsZVwiPlNjb3JlPC9zcGFuPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj57eyBzPy5zY29yZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNvbnRhaW5lclwiIChjbGljayk9XCJkZWxldGVDb3B5U3ViZm9ybShzdWJGb3JtLmlkKVwiPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvZGVsZXRlLWljb24uc3ZnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkZWxldGUtaWNvblwiXG4gICAgICAgICAgICAgIGFsdD1cImRlbGV0ZSBpY29uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29weS1zdWJmb3JtLWNvbnRhaW5lciBtYi0zXCI+XG4gICAgICAgICAgPHA+VGl0bGU8L3A+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInN1YmZvcm1UaXRsZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVTdWJmb3JtRGF0YSgkZXZlbnQsIHN1YkZvcm0uaWQsICd0aXRsZScpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwIGNsYXNzPVwibXQtM1wiPkRlc2NyaXB0aW9uPC9wPlxuICAgICAgICAgIDxxdWlsbC1lZGl0b3JcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3ViZm9ybURlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICB1cGRhdGVTdWJmb3JtRGF0YSgkZXZlbnQsIHN1YkZvcm0uaWQsICdkZXNjcmlwdGlvbicpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKG9uRWRpdG9yQ3JlYXRlZCk9XCJlZGl0b3JDcmVhdGVkKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJlZGl0b3JcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgID48L3F1aWxsLWVkaXRvcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwic3ViRm9ybS5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09ICdtdWx0aXBsZSdcIj5cbiAgICAgICAgPGxpYi1tdWx0aXBsZS1zdWJmb3JtXG4gICAgICAgICAgKm5nSWY9XCJzdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1UeXBlID09PSAndGFibGUnXCJcbiAgICAgICAgICBbc3ViRm9ybV09XCJzdWJGb3JtXCJcbiAgICAgICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgICAgICAgIFthY2NlcHRlZExhbmd1YWdlXT1cImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgICA+PC9saWItbXVsdGlwbGUtc3ViZm9ybT5cblxuICAgICAgICA8bGliLWlubGluZS1tdWx0aXBsZS1zdWJmb3JtXG4gICAgICAgICAgKm5nSWY9XCJzdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1UeXBlID09PSAnaW5saW5lJ1wiXG4gICAgICAgICAgW3N1YkZvcm1dPVwic3ViRm9ybVwiXG4gICAgICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICAgICAgICBbYWNjZXB0ZWRMYW5ndWFnZV09XCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgICAgPjwvbGliLWlubGluZS1tdWx0aXBsZS1zdWJmb3JtPlxuICAgICAgICA8bGliLWNhcmQtc3ViZm9ybVxuICAgICAgICAgICpuZ0lmPVwic3ViRm9ybS5wcm9wZXJ0eS5zdWJGb3JtVHlwZSA9PT0gJ2NhcmQnXCJcbiAgICAgICAgICBbc3ViRm9ybV09XCJzdWJGb3JtXCJcbiAgICAgICAgICBbYWNjZXB0ZWRMYW5ndWFnZV09XCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgICAgICAgIFtlZGl0XT1cImVkaXRcIlxuICAgICAgICA+PC9saWItY2FyZC1zdWJmb3JtPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwic3ViRm9ybS5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09ICdzaW5nbGUnXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdWJGb3JtLnJvd3NcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncmlkIG9mIHJvdy5ncmlkXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnd2lkdGguJSc6IGdyaWQuZWxlbWVudC5jb3VudCAqICgxMDAgLyAxMikgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncmlkLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiYgZ3JpZC5zaG93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiZ3JpZC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlXCI+XG4gICAgICAgICAgICAgICAgICA8bGliLWNoZWNrLWJveC1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidDSEVDS19CT1gnXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItY2hlY2stYm94LWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItZGF0ZS10aW1lLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0RBVEVfVElNRSdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1kYXRlLXRpbWUtZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi1kcm9wLWRvd24tZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInRFJPUF9ET1dOJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLWRyb3AtZG93bi1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLWZpbGUtcGlja2VyLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0ZJTEVfUElDS0VSJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLWZpbGUtcGlja2VyLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItbG9jYXRpb24tZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInTE9DQVRJT04nXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItbG9jYXRpb24tZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi1tYWlsLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0VNQUlMJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLW1haWwtZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi1tb2JpbGUtZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInTU9CSUxFJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLW1vYmlsZS1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLW51bWJlci1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidOVU1CRVInXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dJZF09XCInMCdcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLW51bWJlci1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLXBhc3N3b3JkLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1BBU1NXT1JEJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLXBhc3N3b3JkLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItcmFkaW8tYnV0dG9uLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1JBRElPX0JVVFRPTidcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1yYWRpby1idXR0b24tZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi1yaWNoLXRleHQtZWRpdG9yLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1JJQ0hfVEVYVF9FRElUT1InXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItcmljaC10ZXh0LWVkaXRvci1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLXNlbGVjdGlvbi1tYXRyaXgtZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInU0VMRUNUSU9OX01BVFJJWCdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2FjY2VwdGVkTGFuZ3VhZ2VdPVwiYWNjZXB0ZWRMYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItc2VsZWN0aW9uLW1hdHJpeC1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLXNpZ25hdHVyZS1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidTSUdOQVRVUkUnXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItc2lnbmF0dXJlLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItc2xpZGVyLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1NMSURFUidcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1zbGlkZXItZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi10ZXJtcy1hbmQtY29uZGl0aW9uLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1RFUk1TX0FORF9DT05ESVRJT04nXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItdGVybXMtYW5kLWNvbmRpdGlvbi1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLXRleHQtYXJlYS1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidURVhUX0FSRUEnXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItdGV4dC1hcmVhLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItdGV4dC1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidURVhUX0JPWCdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi10ZXh0LWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItdG9nZ2xlLXN3aXRjaC1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidUT0dHTEVfU1dJVENIJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbYWNjZXB0ZWRMYW5ndWFnZV09XCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi10b2dnbGUtc3dpdGNoLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItdXJsLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1VSTCdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi11cmwtZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi1jdXJyZW5jeS1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidDVVJSRU5DWSdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1jdXJyZW5jeS1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLWFnZ3JlZ2F0ZS1mdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0FHR1JFR0FURV9GVU5DVElPTidcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cIicwJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9saWItYWdncmVnYXRlLWZ1bmN0aW9uPlxuICAgICAgICAgICAgICAgICAgPGxpYi1oaWRkZW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidISURERU5fRklFTEQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItaGlkZGVuLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGxpYi1pZnJhbWUtZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInSUZSQU1FX1dJREdFVCdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1pZnJhbWUtZmllbGRzPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JpZC5lbGVtZW50LmNoaWxkTG9naWNzXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29tcG9uZW50Rm9yQ2hpbGRMb2dpY3MoZ3JpZC5lbGVtZW50LmNoaWxkTG9naWNzLCAnY2hpbGQnLCBncmlkLmVsZW1lbnQuYW5zd2VyKSBhcyBvdXRsZXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJvdXRsZXQuY29tcG9uZW50IHwgYXN5bmM7IGluamVjdG9yOiBvdXRsZXQuaW5qZWN0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyaWQ/LmVsZW1lbnQ/LmNoaWxkTG9naWNzXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50VG9Mb2FkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFRvTG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkOiBncmlkPy5lbGVtZW50Py5jaGlsZExvZ2ljcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkPy5lbGVtZW50Py5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiAnY2hpbGQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncmlkLmVudGl0eVR5cGUgPT09ICdTRUNUSU9OJyAmJiBncmlkLnNob3dcIj5cbiAgICAgICAgICAgICAgICA8bGliLXNlY3Rpb24tZmllbGRzXG4gICAgICAgICAgICAgICAgICBbc2VjdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgID48L2xpYi1zZWN0aW9uLWZpZWxkcz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImlzSW52YWxpZFwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZSBtdC00XCI+XG4gICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -136,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
136
136
|
providedIn: 'root',
|
|
137
137
|
}]
|
|
138
138
|
}], ctorParameters: function () { return []; } });
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2FnZ3JlZ2F0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFNbkQsTUFBTSxPQUFPLDBCQUEwQjtJQVNyQztRQVBBLHNEQUFzRDtRQUNoRCx1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBNEYsQ0FBQztRQUN6SCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUF1RCxDQUFDO1FBRS9FLGlDQUE0QixHQUFHLElBQUksZUFBZSxDQUEwRCxJQUFJLENBQUMsQ0FBQztRQUMxSCwyQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFM0QsQ0FBQztJQUVoQjs7T0FFRztJQUNILGlCQUFpQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsU0FBaUIsRUFBRSxPQUFlO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsTUFBYztRQUMzRCxJQUFJLENBQUMsSUFBSSxD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QUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQzsrR0EzSVUsMEJBQTBCO21IQUExQiwwQkFBMEIsY0FGekIsTUFBTTs7NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2Uge1xyXG5cclxuICAvLyBOZXcgc3RydWN0dXJlOiB7IFtyb3dJZF06IE1hcDxmaWVsZElkLCBmaWVsZERhdGE+IH1cclxucHJpdmF0ZSBhZ2dyZWdhdGVGaWVsZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgeyBpZDogc3RyaW5nOyBvcGVyYXRpb246IHN0cmluZzsgZm9ybXVsYTogc3RyaW5nOyByZXN1bHQ/OiBudW1iZXIgfT4+KCk7XHJcbnByaXZhdGUgbnVtYmVyRmllbGRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHsgaWQ6IHN0cmluZzsgYW5zd2VyOiBudW1iZXIgfT4+KCk7XHJcblxyXG4gIHByaXZhdGUgYWdncmVnYXRlRmllbGRSZXN1bHRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBpZDogc3RyaW5nOyByZXN1bHQ6IG51bWJlcixldmFsdWF0ZWQ6Ym9vbGVhbiB9IHwgbnVsbD4obnVsbCk7XHJcbiAgYWdncmVnYXRlRmllbGRSZXN1bHRzJCA9IHRoaXMuYWdncmVnYXRlRmllbGRSZXN1bHRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBvciB1cGRhdGUgYW4gYWdncmVnYXRlIGZpZWxkIGluIHRoZSBtYXBcclxuICAgKi9cclxuICBzZXRBZ2dyZWdhdGVGaWVsZChyb3dJZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nLCBmb3JtdWxhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuaGFzKHJvd0lkKSkge1xyXG4gICAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkc01hcC5zZXQocm93SWQsIG5ldyBNYXAoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkc01hcC5nZXQocm93SWQpIS5zZXQoZmllbGRJZCwgeyBpZDogZmllbGRJZCwgb3BlcmF0aW9uLCBmb3JtdWxhIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgb3IgdXBkYXRlIGEgbnVtYmVyIGZpZWxkIGluIHRoZSBtYXBcclxuICAgKi9cclxuICBzZXROdW1iZXJGaWVsZChyb3dJZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIGFuc3dlcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubnVtYmVyRmllbGRzTWFwLmhhcyhyb3dJZCkpIHtcclxuICAgICAgdGhpcy5udW1iZXJGaWVsZHNNYXAuc2V0KHJvd0lkLCBuZXcgTWFwKCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5udW1iZXJGaWVsZHNNYXAuZ2V0KHJvd0lkKSEuc2V0KGZpZWxkSWQsIHsgaWQ6IGZpZWxkSWQsIGFuc3dlciB9KTtcclxuICAgIHRoaXMuY2hlY2tBbmRFdmFsdWF0ZUZvcm11bGFzKHJvd0lkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdEFnZ3JlZ2F0ZVJlc3VsdChpZDogc3RyaW5nLCByZXN1bHQ6IG51bWJlcixldmFsdWF0ZWQ6Ym9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5hZ2dyZWdhdGVGaWVsZFJlc3VsdHNTdWJqZWN0Lm5leHQoeyBpZCwgcmVzdWx0LGV2YWx1YXRlZCB9KTtcclxuICB9XHJcblxyXG5cclxuICBldmFsdWF0ZUN1c3RvbUZvcm11bGEocm93SWQ6IHN0cmluZywgZm9ybXVsYTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBcclxuICAgIGNvbnN0IHJvd051bWJlckZpZWxkcyA9IHRoaXMubnVtYmVyRmllbGRzTWFwLmdldChyb3dJZCk7XHJcbiAgICBpZiAoIWZvcm11bGEgfHwgIXJvd051bWJlckZpZWxkcykgcmV0dXJuIG51bGw7XHJcbiAgXHJcbiAgICBjb25zdCB1dWlkUmVnZXggPSAvWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtNV1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfS9nOy9bMC05YS1mQS1GXFwtXXszNn0vZztcclxuICAgIGNvbnN0IHV1aWRNYXRjaGVzID0gZm9ybXVsYS5tYXRjaCh1dWlkUmVnZXgpIHx8IFtdO1xyXG4gIFxyXG4gICAgY29uc3QgYWxsSGF2ZUFuc3dlcnMgPSB1dWlkTWF0Y2hlcy5ldmVyeSh1dWlkID0+IHtcclxuICAgICAgY29uc3QgZmllbGQgPSByb3dOdW1iZXJGaWVsZHMuZ2V0KHV1aWQpO1xyXG4gICAgICByZXR1cm4gZmllbGQgIT09IHVuZGVmaW5lZCAmJiBcclxuICAgICAgICAgICAgIGZpZWxkLmFuc3dlciAhPT0gdW5kZWZpbmVkICYmIFxyXG4gICAgICAgICAgICAgZmllbGQuYW5zd2VyICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICBTdHJpbmcoZmllbGQuYW5zd2VyKS50cmltKCkgIT09ICcnO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBpZiAoIWFsbEhhdmVBbnN3ZXJzKSByZXR1cm4gbnVsbDtcclxuICBcclxuICAgIGNvbnN0IHJlcGxhY2VkRm9ybXVsYSA9IGZvcm11bGEucmVwbGFjZSh1dWlkUmVnZXgsIChtYXRjaCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IHJvd051bWJlckZpZWxkcy5nZXQobWF0Y2gpO1xyXG4gICAgICByZXR1cm4gZmllbGQ/LmFuc3dlcj8udG9TdHJpbmcoKSB8fCAnMCc7XHJcbiAgICB9KTtcclxuICBcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oYHJldHVybiAke3JlcGxhY2VkRm9ybXVsYX07YCkoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGV2YWx1YXRpbmcgZm9ybXVsYTonLCBlcnJvcik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBldmFsdWF0ZVByZWRlZmluZWRPcGVyYXRpb24ocm93SWQ6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcsIGZvcm11bGE6IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xyXG4gICAgY29uc3Qgcm93TnVtYmVyRmllbGRzID0gdGhpcy5udW1iZXJGaWVsZHNNYXAuZ2V0KHJvd0lkKTtcclxuICAgIGlmICghcm93TnVtYmVyRmllbGRzKSByZXR1cm4gbnVsbDtcclxuICBcclxuICAgIGNvbnN0IHV1aWRMaXN0ID0gZm9ybXVsYS5zcGxpdCgnLCcpLm1hcChpZCA9PiBpZC50cmltKCkpO1xyXG4gICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGV0IGhhc0FueUFuc3dlciA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAoY29uc3QgdXVpZCBvZiB1dWlkTGlzdCkge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IHJvd051bWJlckZpZWxkcy5nZXQodXVpZCk7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGZpZWxkPy5hbnN3ZXI7XHJcbiAgXHJcbiAgICAgIC8vIElmIHRoZSBmaWVsZCBkb2Vzbid0IGV4aXN0IG9yIHZhbHVlIGlzIGludmFsaWQsIHB1c2ggMCBhcyBkZWZhdWx0XHJcbiAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgU3RyaW5nKHZhbCkudHJpbSgpICE9PSAnJykge1xyXG4gICAgICAgIGhhc0FueUFuc3dlciA9IHRydWU7XHJcbiAgICAgICAgdmFsdWVzLnB1c2goTnVtYmVyKHZhbCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlcy5wdXNoKDApOyAvLyBTdGlsbCBwdXNoIDAgdG8ga2VlcCBhcnJheSBsZW5ndGgsIGJ1dCBmbGFnIHN0YXlzIGZhbHNlIHVubGVzcyBhdCBsZWFzdCBvbmUgYW5zd2VyIGV4aXN0c1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWhhc0FueUFuc3dlcikgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzdWx0ID0gMDtcclxuICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ1NVTSc6XHJcbiAgICAgICAgcmVzdWx0ID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1NVQlRSQUNUSU9OJzpcclxuICAgICAgICByZXN1bHQgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjIC0gdmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnTVVMVElQTElDQVRJT04nOlxyXG4gICAgICAgIHJlc3VsdCA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKiB2YWwsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICBcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBjaGVja0FuZEV2YWx1YXRlRm9ybXVsYXMocm93SWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgYWdncmVnYXRlRmllbGRzID0gdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuZ2V0KHJvd0lkKTtcclxuICAgIGlmICghYWdncmVnYXRlRmllbGRzKSByZXR1cm47XHJcbiAgXHJcbiAgICBhZ2dyZWdhdGVGaWVsZHMuZm9yRWFjaCgoYWdncmVnYXRlRmllbGQsIGlkKSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gICAgICBpZiAoYWdncmVnYXRlRmllbGQub3BlcmF0aW9uID09PSAnQ1VTVE9NJykge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZXZhbHVhdGVDdXN0b21Gb3JtdWxhKHJvd0lkLCBhZ2dyZWdhdGVGaWVsZC5mb3JtdWxhKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLmV2YWx1YXRlUHJlZGVmaW5lZE9wZXJhdGlvbihyb3dJZCwgYWdncmVnYXRlRmllbGQub3BlcmF0aW9uLCBhZ2dyZWdhdGVGaWVsZC5mb3JtdWxhKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgYWdncmVnYXRlRmllbGQucmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuYWdncmVnYXRlRmllbGRzTWFwLmdldChyb3dJZCkhLnNldChpZCwgYWdncmVnYXRlRmllbGQpO1xyXG4gICAgICAgIHRoaXMuZW1pdEFnZ3JlZ2F0ZVJlc3VsdChgJHtyb3dJZH06JHtpZH1gLCByZXN1bHQsdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbWl0QWdncmVnYXRlUmVzdWx0KGAke3Jvd0lkfToke2lkfWAsIDAsZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuY2xlYXIoKTtcclxuICAgIHRoaXMubnVtYmVyRmllbGRzTWFwLmNsZWFyKCk7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkUmVzdWx0c1N1YmplY3QubmV4dChudWxsKTtcclxuICB9XHJcbiAgXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyQWxsKCk7XHJcbiAgfVxyXG59Il19
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2FnZ3JlZ2F0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFNbkQsTUFBTSxPQUFPLDBCQUEwQjtJQVNyQztRQVBBLHNEQUFzRDtRQUNoRCx1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBNEYsQ0FBQztRQUN6SCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUF1RCxDQUFDO1FBRS9FLGlDQUE0QixHQUFHLElBQUksZUFBZSxDQUEwRCxJQUFJLENBQUMsQ0FBQztRQUMxSCwyQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFM0QsQ0FBQztJQUVoQjs7T0FFRztJQUNILGlCQUFpQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsU0FBaUIsRUFBRSxPQUFlO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsTUFBYztRQUMzRCxJQUFJLENBQUMsSUFBSSxD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QUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQzsrR0EzSVUsMEJBQTBCO21IQUExQiwwQkFBMEIsY0FGekIsTUFBTTs7NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlIHtcblxuICAvLyBOZXcgc3RydWN0dXJlOiB7IFtyb3dJZF06IE1hcDxmaWVsZElkLCBmaWVsZERhdGE+IH1cbnByaXZhdGUgYWdncmVnYXRlRmllbGRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHsgaWQ6IHN0cmluZzsgb3BlcmF0aW9uOiBzdHJpbmc7IGZvcm11bGE6IHN0cmluZzsgcmVzdWx0PzogbnVtYmVyIH0+PigpO1xucHJpdmF0ZSBudW1iZXJGaWVsZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgeyBpZDogc3RyaW5nOyBhbnN3ZXI6IG51bWJlciB9Pj4oKTtcblxuICBwcml2YXRlIGFnZ3JlZ2F0ZUZpZWxkUmVzdWx0c1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgaWQ6IHN0cmluZzsgcmVzdWx0OiBudW1iZXIsZXZhbHVhdGVkOmJvb2xlYW4gfSB8IG51bGw+KG51bGwpO1xuICBhZ2dyZWdhdGVGaWVsZFJlc3VsdHMkID0gdGhpcy5hZ2dyZWdhdGVGaWVsZFJlc3VsdHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogU3RvcmUgb3IgdXBkYXRlIGFuIGFnZ3JlZ2F0ZSBmaWVsZCBpbiB0aGUgbWFwXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVGaWVsZChyb3dJZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nLCBmb3JtdWxhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWdncmVnYXRlRmllbGRzTWFwLmhhcyhyb3dJZCkpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlRmllbGRzTWFwLnNldChyb3dJZCwgbmV3IE1hcCgpKTtcbiAgICB9XG4gICAgdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuZ2V0KHJvd0lkKSEuc2V0KGZpZWxkSWQsIHsgaWQ6IGZpZWxkSWQsIG9wZXJhdGlvbiwgZm9ybXVsYSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBvciB1cGRhdGUgYSBudW1iZXIgZmllbGQgaW4gdGhlIG1hcFxuICAgKi9cbiAgc2V0TnVtYmVyRmllbGQocm93SWQ6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBhbnN3ZXI6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5udW1iZXJGaWVsZHNNYXAuaGFzKHJvd0lkKSkge1xuICAgICAgdGhpcy5udW1iZXJGaWVsZHNNYXAuc2V0KHJvd0lkLCBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICB0aGlzLm51bWJlckZpZWxkc01hcC5nZXQocm93SWQpIS5zZXQoZmllbGRJZCwgeyBpZDogZmllbGRJZCwgYW5zd2VyIH0pO1xuICAgIHRoaXMuY2hlY2tBbmRFdmFsdWF0ZUZvcm11bGFzKHJvd0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEFnZ3JlZ2F0ZVJlc3VsdChpZDogc3RyaW5nLCByZXN1bHQ6IG51bWJlcixldmFsdWF0ZWQ6Ym9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYWdncmVnYXRlRmllbGRSZXN1bHRzU3ViamVjdC5uZXh0KHsgaWQsIHJlc3VsdCxldmFsdWF0ZWQgfSk7XG4gIH1cblxuXG4gIGV2YWx1YXRlQ3VzdG9tRm9ybXVsYShyb3dJZDogc3RyaW5nLCBmb3JtdWxhOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgICBcbiAgICBjb25zdCByb3dOdW1iZXJGaWVsZHMgPSB0aGlzLm51bWJlckZpZWxkc01hcC5nZXQocm93SWQpO1xuICAgIGlmICghZm9ybXVsYSB8fCAhcm93TnVtYmVyRmllbGRzKSByZXR1cm4gbnVsbDtcbiAgXG4gICAgY29uc3QgdXVpZFJlZ2V4ID0gL1swLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLTVdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0vZzsvWzAtOWEtZkEtRlxcLV17MzZ9L2c7XG4gICAgY29uc3QgdXVpZE1hdGNoZXMgPSBmb3JtdWxhLm1hdGNoKHV1aWRSZWdleCkgfHwgW107XG4gIFxuICAgIGNvbnN0IGFsbEhhdmVBbnN3ZXJzID0gdXVpZE1hdGNoZXMuZXZlcnkodXVpZCA9PiB7XG4gICAgICBjb25zdCBmaWVsZCA9IHJvd051bWJlckZpZWxkcy5nZXQodXVpZCk7XG4gICAgICByZXR1cm4gZmllbGQgIT09IHVuZGVmaW5lZCAmJiBcbiAgICAgICAgICAgICBmaWVsZC5hbnN3ZXIgIT09IHVuZGVmaW5lZCAmJiBcbiAgICAgICAgICAgICBmaWVsZC5hbnN3ZXIgIT09IG51bGwgJiZcbiAgICAgICAgICAgICBTdHJpbmcoZmllbGQuYW5zd2VyKS50cmltKCkgIT09ICcnO1xuICAgIH0pO1xuICBcbiAgICBpZiAoIWFsbEhhdmVBbnN3ZXJzKSByZXR1cm4gbnVsbDtcbiAgXG4gICAgY29uc3QgcmVwbGFjZWRGb3JtdWxhID0gZm9ybXVsYS5yZXBsYWNlKHV1aWRSZWdleCwgKG1hdGNoKSA9PiB7XG4gICAgICBjb25zdCBmaWVsZCA9IHJvd051bWJlckZpZWxkcy5nZXQobWF0Y2gpO1xuICAgICAgcmV0dXJuIGZpZWxkPy5hbnN3ZXI/LnRvU3RyaW5nKCkgfHwgJzAnO1xuICAgIH0pO1xuICBcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihgcmV0dXJuICR7cmVwbGFjZWRGb3JtdWxhfTtgKSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBldmFsdWF0aW5nIGZvcm11bGE6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIFxuICBldmFsdWF0ZVByZWRlZmluZWRPcGVyYXRpb24ocm93SWQ6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcsIGZvcm11bGE6IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHJvd051bWJlckZpZWxkcyA9IHRoaXMubnVtYmVyRmllbGRzTWFwLmdldChyb3dJZCk7XG4gICAgaWYgKCFyb3dOdW1iZXJGaWVsZHMpIHJldHVybiBudWxsO1xuICBcbiAgICBjb25zdCB1dWlkTGlzdCA9IGZvcm11bGEuc3BsaXQoJywnKS5tYXAoaWQgPT4gaWQudHJpbSgpKTtcbiAgICBjb25zdCB2YWx1ZXM6IG51bWJlcltdID0gW107XG4gICAgbGV0IGhhc0FueUFuc3dlciA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCB1dWlkIG9mIHV1aWRMaXN0KSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHJvd051bWJlckZpZWxkcy5nZXQodXVpZCk7XG4gICAgICBjb25zdCB2YWwgPSBmaWVsZD8uYW5zd2VyO1xuICBcbiAgICAgIC8vIElmIHRoZSBmaWVsZCBkb2Vzbid0IGV4aXN0IG9yIHZhbHVlIGlzIGludmFsaWQsIHB1c2ggMCBhcyBkZWZhdWx0XG4gICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmIFN0cmluZyh2YWwpLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgaGFzQW55QW5zd2VyID0gdHJ1ZTtcbiAgICAgICAgdmFsdWVzLnB1c2goTnVtYmVyKHZhbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVzLnB1c2goMCk7IC8vIFN0aWxsIHB1c2ggMCB0byBrZWVwIGFycmF5IGxlbmd0aCwgYnV0IGZsYWcgc3RheXMgZmFsc2UgdW5sZXNzIGF0IGxlYXN0IG9uZSBhbnN3ZXIgZXhpc3RzXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaGFzQW55QW5zd2VyKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgY2FzZSAnU1VNJzpcbiAgICAgICAgcmVzdWx0ID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnU1VCVFJBQ1RJT04nOlxuICAgICAgICByZXN1bHQgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjIC0gdmFsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdNVUxUSVBMSUNBVElPTic6XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKiB2YWwsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY2hlY2tBbmRFdmFsdWF0ZUZvcm11bGFzKHJvd0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBhZ2dyZWdhdGVGaWVsZHMgPSB0aGlzLmFnZ3JlZ2F0ZUZpZWxkc01hcC5nZXQocm93SWQpO1xuICAgIGlmICghYWdncmVnYXRlRmllbGRzKSByZXR1cm47XG4gIFxuICAgIGFnZ3JlZ2F0ZUZpZWxkcy5mb3JFYWNoKChhZ2dyZWdhdGVGaWVsZCwgaWQpID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBcbiAgICAgIGlmIChhZ2dyZWdhdGVGaWVsZC5vcGVyYXRpb24gPT09ICdDVVNUT00nKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZXZhbHVhdGVDdXN0b21Gb3JtdWxhKHJvd0lkLCBhZ2dyZWdhdGVGaWVsZC5mb3JtdWxhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZXZhbHVhdGVQcmVkZWZpbmVkT3BlcmF0aW9uKHJvd0lkLCBhZ2dyZWdhdGVGaWVsZC5vcGVyYXRpb24sIGFnZ3JlZ2F0ZUZpZWxkLmZvcm11bGEpO1xuICAgICAgfVxuICBcbiAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgYWdncmVnYXRlRmllbGQucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkc01hcC5nZXQocm93SWQpIS5zZXQoaWQsIGFnZ3JlZ2F0ZUZpZWxkKTtcbiAgICAgICAgdGhpcy5lbWl0QWdncmVnYXRlUmVzdWx0KGAke3Jvd0lkfToke2lkfWAsIHJlc3VsdCx0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW1pdEFnZ3JlZ2F0ZVJlc3VsdChgJHtyb3dJZH06JHtpZH1gLCAwLGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuYWdncmVnYXRlRmllbGRzTWFwLmNsZWFyKCk7XG4gICAgdGhpcy5udW1iZXJGaWVsZHNNYXAuY2xlYXIoKTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkUmVzdWx0c1N1YmplY3QubmV4dChudWxsKTtcbiAgfVxuICBcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckFsbCgpO1xuICB9XG59Il19
|
|
@@ -86,4 +86,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
86
86
|
providedIn: 'root',
|
|
87
87
|
}]
|
|
88
88
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.DataService }]; } });
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2NvdW50cnlTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFjM0MsTUFBTSxPQUFPLGNBQWM7SUFJekIsWUFBb0IsSUFBZ0IsRUFBVSxXQUF3QjtRQUFsRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFIOUQsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUM1QixXQUFNLEdBQVEsRUFBRSxDQUFDO1FBR2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBa0IsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLFNBQWlCO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxpQ0FBaUMsSUFBSSxTQUFTLElBQUksY0FBYyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0ksQ0FBQztJQUVELHFCQUFxQixDQUNuQixJQUFXLEVBQ1gsV0FBb0IsRUFDcEIsV0FBb0IsRUFDcEIsZUFBd0I7UUFFeEIsTUFBTSxjQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEdBQUcsV0FBVyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FB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aW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgQ291bnRyeURhdGEge1xuICB2YWx1ZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpbWFnZTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ291bnRyeVNlcnZpY2Uge1xuICBwcml2YXRlIGFwaVVybDogc3RyaW5nID0gJyc7XG4gIGhlYWRlcjogYW55ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge1xuICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpVXJsJC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuYXBpVXJsID0gZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRDb3VudHJ5RGV0YWlscyhxdWVzdGlvbklkOiBzdHJpbmcsIHBhZ2U6IG51bWJlciwgc2l6ZTogbnVtYmVyLCBzZWFyY2hLZXk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLmFwaVVybH0vYXBpL3B1YmxpYy9qc29uL2NvdW50cnk/cGFnZT0ke3BhZ2V9JnNpemU9JHtzaXplfSZzZWFyY2hLZXk9JHtlbmNvZGVVUklDb21wb25lbnQoc2VhcmNoS2V5KX1gKTtcbiAgfVxuXG4gIHByb2Nlc3NDb3VudHJ5RGV0YWlscyhcbiAgICBkYXRhOiBhbnlbXSxcbiAgICBkaXNwbGF5RmxhZzogYm9vbGVhbixcbiAgICBkaXNwbGF5Q29kZTogYm9vbGVhbixcbiAgICBzaG93Q291bnRyeU5hbWU6IGJvb2xlYW5cbiAgKTogQ291bnRyeURhdGFbXSB7XG4gICAgY29uc3QgY291bnRyeURldGFpbHM6IENvdW50cnlEYXRhW10gPSBbXTtcbiAgICBkYXRhLmZvckVhY2goKGNvdW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGZsYWcgPSBkaXNwbGF5RmxhZyAmJiBjb3VudHJ5LmZsYWcgPyBjb3VudHJ5LmZsYWcgOiAnJztcbiAgICAgIGNvbnN0IG5hbWUgPSBzaG93Q291bnRyeU5hbWUgPyBjb3VudHJ5Lm5hbWUgfHwgJycgOiAnJztcbiAgICAgIGNvbnN0IGlzZFJvb3QgPSBjb3VudHJ5LmlzZD8ucm9vdCB8fCAnJztcbiAgICAgIGNvbnN0IGlzZFN1ZmZpeGVzID0gY291bnRyeS5pc2Q/LnN1ZmZpeGVzIHx8IFtdO1xuICBcbiAgICAgIGlmIChpc2RSb290ICYmIGlzZFN1ZmZpeGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaXNkU3VmZml4ZXMuZm9yRWFjaCgoc3VmZml4OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBpc2RDb2RlID0gYCR7aXNkUm9vdH0ke3N1ZmZpeH1gO1xuICBcbiAgICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IE9ubHkgZmxhZyBzaG91bGQgYmUgZGlzcGxheWVkLCBidXQgdmFsdWUgbXVzdCBoYXZlIElTRCBjb2RlXG4gICAgICAgICAgaWYgKGRpc3BsYXlGbGFnICYmICFkaXNwbGF5Q29kZSAmJiAhc2hvd0NvdW50cnlOYW1lKSB7XG4gICAgICAgICAgICBjb3VudHJ5RGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgICAgdmFsdWU6IGlzZENvZGUsICAvLyBLZWVwIElTRCBjb2RlIGluIHZhbHVlXG4gICAgICAgICAgICAgIGxhYmVsOiAnJywgICAgICAgLy8gTm8gdGV4dCBpbiBsYWJlbFxuICAgICAgICAgICAgICBpbWFnZTogZmxhZywgICAgIC8vICBPbmx5IGZsYWcgc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBhbGwgb3RoZXIgY2FzZXNcbiAgICAgICAgICAgIGxldCBsYWJlbCA9ICcnO1xuICAgICAgICAgICAgaWYgKHNob3dDb3VudHJ5TmFtZSkgbGFiZWwgKz0gbmFtZTtcbiAgICAgICAgICAgIGlmIChkaXNwbGF5Q29kZSkgbGFiZWwgKz0gKGxhYmVsID8gJyAnIDogJycpICsgaXNkQ29kZTtcbiAgICAgICAgICAgIGlmICghbGFiZWwpIGxhYmVsID0gaXNkQ29kZTsgLy8gRW5zdXJlIGxhYmVsIGlzIG5vdCBlbXB0eVxuICBcbiAgICAgICAgICAgIGNvdW50cnlEZXRhaWxzLnB1c2goe1xuICAgICAgICAgICAgICB2YWx1ZTogaXNkQ29kZSxcbiAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLnRyaW0oKSxcbiAgICAgICAgICAgICAgaW1hZ2U6IGZsYWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmFsbGJhY2tDb2RlID0gaXNkUm9vdCB8fCBjb3VudHJ5LmNvZGUgfHwgJyc7IC8vIEZhbGxiYWNrIGlmIG5vIHN1ZmZpeGVzXG4gIFxuICAgICAgICBpZiAoZGlzcGxheUZsYWcgJiYgIWRpc3BsYXlDb2RlICYmICFzaG93Q291bnRyeU5hbWUpIHtcbiAgICAgICAgICBjb3VudHJ5RGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiBmYWxsYmFja0NvZGUsXG4gICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICBpbWFnZTogZmxhZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSAnJztcbiAgICAgICAgICBpZiAoc2hvd0NvdW50cnlOYW1lKSBsYWJlbCArPSBuYW1lO1xuICAgICAgICAgIGlmIChkaXNwbGF5Q29kZSkgbGFiZWwgKz0gKGxhYmVsID8gJyAnIDogJycpICsgZmFsbGJhY2tDb2RlO1xuICAgICAgICAgIGlmICghbGFiZWwpIGxhYmVsID0gZmFsbGJhY2tDb2RlO1xuICBcbiAgICAgICAgICBjb3VudHJ5RGV0YWlscy5wdXNoKHtcbiAgICAgICAgICAgIHZhbHVlOiBmYWxsYmFja0NvZGUsXG4gICAgICAgICAgICBsYWJlbDogbGFiZWwudHJpbSgpLFxuICAgICAgICAgICAgaW1hZ2U6IGZsYWcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY291bnRyeURldGFpbHM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
33
33
|
providedIn: 'root',
|
|
34
34
|
}]
|
|
35
35
|
}], ctorParameters: function () { return []; } });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQUtuRCxNQUFNLE9BQU8sV0FBVztJQUN0QjtRQUVRLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0MsWUFBTyxHQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFvQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTVELG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDL0MsYUFBUSxHQUFvQixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTlELDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO1FBQ3pELHFCQUFnQixHQUFvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFYdkUsQ0FBQztJQWFoQixTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVM7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0E1QlUsV0FBVzttSEFBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHByaXZhdGUgZGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgYXBpVXJsJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5kYXRhU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHJpdmF0ZSBoZWFkZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcbiAgcHVibGljIGhlYWRlciQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuaGVhZGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHN1YmZvcm1TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcbiAgcHVibGljIHN1YmZvcm0kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnN1YmZvcm1TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgcGFyZW50UXVlc3Rpb25zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgcHVibGljIHBhcmVudFF1ZXN0aW9ucyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMucGFyZW50UXVlc3Rpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBzZXRBcGlVcmwoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgc2V0SGVhZGVyKGRhdGE6IGFueSkge1xuICAgIHRoaXMuaGVhZGVyU3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgc2V0UGFyZW50UXVlc3Rpb25zKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50UXVlc3Rpb25zU3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgc2V0U3ViZm9ybURhdGEoZGF0YTogYW55KSB7XG4gICAgdGhpcy5zdWJmb3JtU3ViamVjdC5uZXh0KGRhdGEpO1xuICB9XG59XG4iXX0=
|