@symphony-talent/component-library 4.204.0 → 4.205.0
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/esm2020/lib/organisms/merge-contacts-modal/merge-contacts-modal.component.mjs +3 -3
- package/esm2020/projects/component-library/lib/organisms/merge-contacts-modal/merge-contacts-modal.component.mjs +3 -3
- package/fesm2015/symphony-talent-component-library-projects-component-library.mjs +2 -2
- package/fesm2015/symphony-talent-component-library-projects-component-library.mjs.map +1 -1
- package/fesm2015/symphony-talent-component-library.mjs +2 -2
- package/fesm2015/symphony-talent-component-library.mjs.map +1 -1
- package/fesm2020/symphony-talent-component-library-projects-component-library.mjs +2 -2
- package/fesm2020/symphony-talent-component-library-projects-component-library.mjs.map +1 -1
- package/fesm2020/symphony-talent-component-library.mjs +2 -2
- package/fesm2020/symphony-talent-component-library.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -127,10 +127,10 @@ export class MergeContactsModalComponent {
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
MergeContactsModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MergeContactsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
130
|
-
MergeContactsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MergeContactsModalComponent, selector: "symphony-merge-contacts-modal", inputs: { model: "model", isLoading: "isLoading", hasError: "hasError", stepCopy: "stepCopy", confirmStepCopy: "confirmStepCopy", selected: "selected", confirmSuggestion: "confirmSuggestion", showSuccessToast: "showSuccessToast", showFailureToast: "showFailureToast", currentStep: "currentStep" }, outputs: { next: "next", cancel: "cancel", notDuplicate: "notDuplicate", selectionChange: "selectionChange", hideSuccessToast: "hideSuccessToast", hideFailureToast: "hideFailureToast", requestConfirmSuggestion: "requestConfirmSuggestion", requestCancelConfirmSuggestion: "requestCancelConfirmSuggestion" }, ngImport: i0, template: "<div class=\"sfx sfx-modal modal-container\" *ngIf=\"model\">\n <section class=\"modal-header sfx-p-30 sfx-pt-40\">\n <div class=\"modal-title\">\n <div class=\"row\">\n <div class=\"col-xs-8 col-sm-8 col-md-8 col-lg-8\">\n <ng-container *ngIf=\"getStepTitle(currentStep) as stepTitle\">\n <symphony-h4 [text]=\"stepTitle\"></symphony-h4>\n </ng-container> \n </div>\n <div class=\"col-xs-4 col-sm-4 col-md-4 col-lg-4\">\n <symphony-icon\n class=\"pull-right\"\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCancel()\"\n ></symphony-icon>\n </div>\n <div\n class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sfx-mt-15\"\n *ngIf=\"getStepDescription(currentStep)\"\n >\n <ng-container *ngIf=\"getStepDescription(currentStep) as stepDescription\">\n <symphony-paragraph [text]=\"stepDescription\"></symphony-paragraph>\n </ng-container> \n </div>\n </div>\n </div>\n </section>\n <section class=\"modal-body sfx-p-30\" *ngIf=\"currentStep === 1\">\n <ng-container>\n <div class=\"toaster-alert-container-global\">\n <symphony-toaster-alert\n *ngIf=\"showSuccessToast\"\n [alertModel]=\"successToast\"\n (hideAlert)=\"onHideSuccessToast()\"\n ></symphony-toaster-alert>\n <symphony-toaster-alert\n *ngIf=\"showFailureToast\"\n [alertModel]=\"failureToast\"\n (hideAlert)=\"onHideFailureToast()\"\n ></symphony-toaster-alert>\n </div>\n <div *ngIf=\"isLoading\" class=\"sfx-mt-30 sfx-mb-30\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n <div *ngIf=\"hasError\" class=\"sfx-mt-30\">\n <symphony-paragraph text=\"We couldn't retrieve the candidate data. The information cannot be displayed at this time, please try again.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && (!model?.suggestions || model.suggestions.length === 0)\" class=\"sfx-mt-30\">\n <symphony-paragraph text=\"No more duplicates exist for this selected contact. Please try again later\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && !confirmSuggestion && model?.suggestions?.length\" class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <p class=\"sfx-mt-20 sfx-font-bold\">{{ model.selectedContact.name }} [{{ model.selectedContact.id }}]</p>\n <p>{{ model.selectedContact.email }}</p>\n <p *ngFor=\"let criterion of model.selectedContact.criteria\">{{ criterion.value }}</p>\n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 [text]=\"'Potential Duplicates (' + (model?.suggestions?.length || 0) + ')'\"></symphony-h5>\n <div class=\"scrollable-container card-wrapper\">\n <div\n *ngFor=\"let suggestion of model.suggestions; let i = index\"\n class=\"suggestion-card\"\n [ngClass]=\"{ selected: selected === suggestion }\"\n (click)=\"onSelect(suggestion)\"\n >\n <div class=\"card-header\">\n <symphony-input-radio\n [radioID]=\"suggestion.id\"\n [name]=\"'merge-suggestions'\"\n [isActive]=\"selected === suggestion\"\n (clicked)=\"onSelect(suggestion)\"\n ></symphony-input-radio> \n <div class=\"card-title sfx-font-bold\">\n {{ suggestion.name }} [{{ suggestion.id }}]\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <symphony-grid-cell-clicked-open-new-tab\n [newTabUrl]=\"getContactUrl(suggestion.id)\"\n ></symphony-grid-cell-clicked-open-new-tab>\n <symphony-icon-wrapper\n class=\"not-duplicate-icon-global\"\n title=\"Mark not duplicate\"\n (clicked)=\"onNotDuplicate(suggestion)\"\n >\n <symphony-icon [icon]=\"'si-exclude'\"></symphony-icon>\n </symphony-icon-wrapper>\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"suggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ suggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of suggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"suggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ suggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"suggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of suggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!isLoading && !hasError && confirmSuggestion\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <p class=\"sfx-mt-20 sfx-font-bold\">{{ model.selectedContact.name }} [{{ model.selectedContact.id }}]</p>\n <p>{{ model.selectedContact.email }}</p>\n <p *ngFor=\"let criterion of model.selectedContact.criteria\">{{ criterion }}</p>\n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Duplicate\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card confirm-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ confirmSuggestion.name }} [{{ confirmSuggestion.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ confirmSuggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of confirmSuggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ confirmSuggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"confirmSuggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of confirmSuggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </section>\n <section *ngIf=\"currentStep === 2\" class=\"modal-body merge-contacts-body\">\n <ng-content></ng-content>\n </section>\n <section *ngIf=\"currentStep === 1\" class=\"modal-footer\">\n <ng-container *ngIf=\"!confirmSuggestion; else confirmActions\">\n <symphony-button-v2 text=\"Close\" [isSecondary]=\"true\" (clicked)=\"onCancel()\"></symphony-button-v2>\n <symphony-button-v2 text=\"Next\" [disabled]=\"!selected || !!confirmSuggestion\" (clicked)=\"onNext()\"></symphony-button-v2>\n </ng-container>\n <ng-template #confirmActions>\n <div class=\"confirm-actions\">\n <symphony-button-v2\n text=\"Back\"\n [isSecondary]=\"true\"\n (clicked)=\"cancelNotDuplicate()\"\n ></symphony-button-v2>\n <symphony-button-v2\n text=\"Confirm\"\n (clicked)=\"confirmOnNotDuplicate()\"\n ></symphony-button-v2>\n </div>\n </ng-template>\n </section>\n</div>\n", styles: [".scrollable-container{max-height:500px;display:flex;flex-direction:column;overflow-y:auto;padding:20px 10px;gap:10px}.radio-item{display:flex;align-items:flex-start;gap:5px}.radio-label{display:flex;align-items:center;gap:1px}.radio-details{padding-left:24px}.radio-action{margin-left:auto;display:flex}.icon-upwards{margin-top:-1px!important;margin-bottom:auto}.modal-footer{display:flex;gap:10px;width:100%;justify-content:flex-end}.confirm-actions{display:flex;gap:10px}.suggestion-confirm{margin-top:38px}.pending-icon{margin-right:8px}.suggestion-card{border:1px solid #e4e7ef;border-radius:10px;padding:20px;background:#ffffff}.suggestion-card .card-header{display:flex;align-items:flex-start}.suggestion-card .card-title{flex:1;word-break:break-word}.suggestion-card .card-actions{margin-left:auto;display:flex;gap:10px}.suggestion-card .card-body{margin-top:15px;display:flex;flex-direction:column;gap:8px}.suggestion-card .info-row{display:flex;align-items:baseline;gap:8px;word-break:break-word}.suggestion-card .match-criteria{margin-top:10px}.suggestion-card .match-label{font-size:12px;font-weight:500;margin-bottom:8px}.suggestion-card .criteria-list{display:flex;flex-wrap:wrap;gap:8px}.sfx-modal.modal-container .modal-body.merge-contacts-body{padding:0}\n"], components: [{ type: i1.H4Component, selector: "symphony-h4", inputs: ["text", "isSecondary"] }, { type: i2.IconComponent, selector: "symphony-icon", inputs: ["icon", "isSecondary", "size", "iconColor"], outputs: ["clicked"] }, { type: i3.ParagraphComponent, selector: "symphony-paragraph", inputs: ["text", "isSecondary", "isFontBold"] }, { type: i4.ToasterAlertComponent, selector: "symphony-toaster-alert", inputs: ["alertModel", "showAlert"], outputs: ["hideAlert", "refreshClicked"] }, { type: i5.SfxLoaderComponent, selector: "symphony-sfx-loader", inputs: ["leftStyle", "message", "hasCustomMessage"] }, { type: i6.H5Component, selector: "symphony-h5", inputs: ["text", "isSecondary"] }, { type: i7.InputRadioComponent, selector: "symphony-input-radio", inputs: ["isActive", "name", "label", "isRequired", "radioID"], outputs: ["clicked"] }, { type: i8.GridCellClickedOpenNewTabComponent, selector: "symphony-grid-cell-clicked-open-new-tab", inputs: ["newTabUrl"] }, { type: i9.IconWrapperComponent, selector: "symphony-icon-wrapper", inputs: ["backgroundColor", "isInverse", "hasHoverWithoutBorder", "isDisabled"], outputs: ["clicked"] }, { type: i10.StatusPillComponent, selector: "symphony-status-pill", inputs: ["statusPillModel"] }, { type: i11.ButtonV2Component, selector: "symphony-button-v2" }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
130
|
+
MergeContactsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MergeContactsModalComponent, selector: "symphony-merge-contacts-modal", inputs: { model: "model", isLoading: "isLoading", hasError: "hasError", stepCopy: "stepCopy", confirmStepCopy: "confirmStepCopy", selected: "selected", confirmSuggestion: "confirmSuggestion", showSuccessToast: "showSuccessToast", showFailureToast: "showFailureToast", currentStep: "currentStep" }, outputs: { next: "next", cancel: "cancel", notDuplicate: "notDuplicate", selectionChange: "selectionChange", hideSuccessToast: "hideSuccessToast", hideFailureToast: "hideFailureToast", requestConfirmSuggestion: "requestConfirmSuggestion", requestCancelConfirmSuggestion: "requestCancelConfirmSuggestion" }, ngImport: i0, template: "<div class=\"sfx sfx-modal modal-container\" *ngIf=\"model\">\n <section class=\"modal-header sfx-p-30 sfx-pt-40\">\n <div class=\"modal-title\">\n <div class=\"row\">\n <div class=\"col-xs-8 col-sm-8 col-md-8 col-lg-8\">\n <ng-container *ngIf=\"getStepTitle(currentStep) as stepTitle\">\n <symphony-h4 [text]=\"stepTitle\"></symphony-h4>\n </ng-container> \n </div>\n <div class=\"col-xs-4 col-sm-4 col-md-4 col-lg-4\">\n <symphony-icon\n class=\"pull-right\"\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCancel()\"\n ></symphony-icon>\n </div>\n <div\n class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sfx-mt-15\"\n *ngIf=\"getStepDescription(currentStep)\"\n >\n <ng-container *ngIf=\"getStepDescription(currentStep) as stepDescription\">\n <symphony-paragraph [text]=\"stepDescription\"></symphony-paragraph>\n </ng-container> \n </div>\n </div>\n </div>\n </section>\n <section class=\"modal-body sfx-p-30\" *ngIf=\"currentStep === 1\">\n <ng-container>\n <div class=\"toaster-alert-container-global\">\n <symphony-toaster-alert\n *ngIf=\"showSuccessToast\"\n [alertModel]=\"successToast\"\n (hideAlert)=\"onHideSuccessToast()\"\n ></symphony-toaster-alert>\n <symphony-toaster-alert\n *ngIf=\"showFailureToast\"\n [alertModel]=\"failureToast\"\n (hideAlert)=\"onHideFailureToast()\"\n ></symphony-toaster-alert>\n </div>\n <div *ngIf=\"isLoading\" class=\"sfx-mt-30 sfx-mb-30\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n <div *ngIf=\"hasError\" class=\"sfx-mt-20 sfx-mb-20 sfx-txt-center\">\n <symphony-paragraph text=\"We couldn't retrieve the candidate data. The information cannot be displayed at this time, please try again.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && (!model?.suggestions || model.suggestions.length === 0)\" class=\"sfx-mt-20 sfx-mb-20 sfx-txt-center\">\n <symphony-paragraph text=\"No more duplicates exist for this selected contact. Please try again later.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && !confirmSuggestion && model?.suggestions?.length\" class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5> \n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card selected-contact-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ model.selectedContact.name }} [{{ model.selectedContact.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"model.selectedContact.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ model.selectedContact.email }}</span>\n </div>\n <div\n class=\"info-row\"\n *ngFor=\"let criterion of model.selectedContact.criteria\"\n >\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"model.selectedContact.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ model.selectedContact.atsId }}</span>\n </div>\n </div>\n </div>\n </div> \n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 [text]=\"'Potential Duplicates (' + (model?.suggestions?.length || 0) + ')'\"></symphony-h5>\n <div class=\"scrollable-container card-wrapper\">\n <div\n *ngFor=\"let suggestion of model.suggestions; let i = index\"\n class=\"suggestion-card\"\n [ngClass]=\"{ selected: selected === suggestion }\"\n (click)=\"onSelect(suggestion)\"\n >\n <div class=\"card-header\">\n <symphony-input-radio\n [radioID]=\"suggestion.id\"\n [name]=\"'merge-suggestions'\"\n [isActive]=\"selected === suggestion\"\n (clicked)=\"onSelect(suggestion)\"\n ></symphony-input-radio> \n <div class=\"card-title sfx-font-bold\">\n {{ suggestion.name }} [{{ suggestion.id }}]\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <symphony-grid-cell-clicked-open-new-tab\n [newTabUrl]=\"getContactUrl(suggestion.id)\"\n ></symphony-grid-cell-clicked-open-new-tab>\n <symphony-icon-wrapper\n class=\"not-duplicate-icon-global\"\n title=\"Mark not duplicate\"\n (clicked)=\"onNotDuplicate(suggestion)\"\n >\n <symphony-icon [icon]=\"'si-exclude'\"></symphony-icon>\n </symphony-icon-wrapper>\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"suggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ suggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of suggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"suggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ suggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"suggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of suggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!isLoading && !hasError && confirmSuggestion\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card selected-contact-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ model.selectedContact.name }} [{{ model.selectedContact.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"model.selectedContact.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ model.selectedContact.email }}</span>\n </div>\n <div\n class=\"info-row\"\n *ngFor=\"let criterion of model.selectedContact.criteria\"\n >\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"model.selectedContact.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ model.selectedContact.atsId }}</span>\n </div>\n </div>\n </div>\n </div> \n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Duplicate\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card confirm-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ confirmSuggestion.name }} [{{ confirmSuggestion.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ confirmSuggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of confirmSuggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ confirmSuggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"confirmSuggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of confirmSuggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </section>\n <section *ngIf=\"currentStep === 2\" class=\"modal-body merge-contacts-body\">\n <ng-content></ng-content>\n </section>\n <section *ngIf=\"currentStep === 1\" class=\"modal-footer\">\n <ng-container *ngIf=\"!confirmSuggestion; else confirmActions\">\n <symphony-button-v2 text=\"Close\" [isSecondary]=\"true\" (clicked)=\"onCancel()\"></symphony-button-v2>\n <symphony-button-v2 text=\"Next\" [disabled]=\"!selected || !!confirmSuggestion\" (clicked)=\"onNext()\"></symphony-button-v2>\n </ng-container>\n <ng-template #confirmActions>\n <div class=\"confirm-actions\">\n <symphony-button-v2\n text=\"Back\"\n [isSecondary]=\"true\"\n (clicked)=\"cancelNotDuplicate()\"\n ></symphony-button-v2>\n <symphony-button-v2\n text=\"Confirm\"\n (clicked)=\"confirmOnNotDuplicate()\"\n ></symphony-button-v2>\n </div>\n </ng-template>\n </section>\n</div>\n", styles: [".scrollable-container{max-height:500px;display:flex;flex-direction:column;overflow-y:auto;padding:20px 10px;gap:10px}.radio-item{display:flex;align-items:flex-start;gap:5px}.radio-label{display:flex;align-items:center;gap:1px}.radio-details{padding-left:24px}.radio-action{margin-left:auto;display:flex}.icon-upwards{margin-top:-1px!important;margin-bottom:auto}.modal-footer{display:flex;gap:10px;width:100%;justify-content:flex-end}.confirm-actions{display:flex;gap:10px}.suggestion-confirm{margin-top:38px}.pending-icon{margin-right:8px}.suggestion-card{border:1px solid #e4e7ef;border-radius:10px;padding:20px;background:#ffffff}.suggestion-card .card-header{display:flex;align-items:flex-start}.suggestion-card .card-title{flex:1;word-break:break-word}.suggestion-card .card-actions{margin-left:auto;display:flex;gap:10px}.suggestion-card .card-body{margin-top:15px;display:flex;flex-direction:column;gap:8px}.suggestion-card .info-row{display:flex;align-items:baseline;gap:8px;word-break:break-word}.suggestion-card .match-criteria{margin-top:10px}.suggestion-card .match-label{font-size:12px;font-weight:500;margin-bottom:8px}.suggestion-card .criteria-list{display:flex;flex-wrap:wrap;gap:8px}.sfx-modal.modal-container .modal-body.merge-contacts-body{padding:0}\n"], components: [{ type: i1.H4Component, selector: "symphony-h4", inputs: ["text", "isSecondary"] }, { type: i2.IconComponent, selector: "symphony-icon", inputs: ["icon", "isSecondary", "size", "iconColor"], outputs: ["clicked"] }, { type: i3.ParagraphComponent, selector: "symphony-paragraph", inputs: ["text", "isSecondary", "isFontBold"] }, { type: i4.ToasterAlertComponent, selector: "symphony-toaster-alert", inputs: ["alertModel", "showAlert"], outputs: ["hideAlert", "refreshClicked"] }, { type: i5.SfxLoaderComponent, selector: "symphony-sfx-loader", inputs: ["leftStyle", "message", "hasCustomMessage"] }, { type: i6.H5Component, selector: "symphony-h5", inputs: ["text", "isSecondary"] }, { type: i7.InputRadioComponent, selector: "symphony-input-radio", inputs: ["isActive", "name", "label", "isRequired", "radioID"], outputs: ["clicked"] }, { type: i8.GridCellClickedOpenNewTabComponent, selector: "symphony-grid-cell-clicked-open-new-tab", inputs: ["newTabUrl"] }, { type: i9.IconWrapperComponent, selector: "symphony-icon-wrapper", inputs: ["backgroundColor", "isInverse", "hasHoverWithoutBorder", "isDisabled"], outputs: ["clicked"] }, { type: i10.StatusPillComponent, selector: "symphony-status-pill", inputs: ["statusPillModel"] }, { type: i11.ButtonV2Component, selector: "symphony-button-v2" }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
131
131
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MergeContactsModalComponent, decorators: [{
|
|
132
132
|
type: Component,
|
|
133
|
-
args: [{ selector: 'symphony-merge-contacts-modal', template: "<div class=\"sfx sfx-modal modal-container\" *ngIf=\"model\">\n <section class=\"modal-header sfx-p-30 sfx-pt-40\">\n <div class=\"modal-title\">\n <div class=\"row\">\n <div class=\"col-xs-8 col-sm-8 col-md-8 col-lg-8\">\n <ng-container *ngIf=\"getStepTitle(currentStep) as stepTitle\">\n <symphony-h4 [text]=\"stepTitle\"></symphony-h4>\n </ng-container> \n </div>\n <div class=\"col-xs-4 col-sm-4 col-md-4 col-lg-4\">\n <symphony-icon\n class=\"pull-right\"\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCancel()\"\n ></symphony-icon>\n </div>\n <div\n class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sfx-mt-15\"\n *ngIf=\"getStepDescription(currentStep)\"\n >\n <ng-container *ngIf=\"getStepDescription(currentStep) as stepDescription\">\n <symphony-paragraph [text]=\"stepDescription\"></symphony-paragraph>\n </ng-container> \n </div>\n </div>\n </div>\n </section>\n <section class=\"modal-body sfx-p-30\" *ngIf=\"currentStep === 1\">\n <ng-container>\n <div class=\"toaster-alert-container-global\">\n <symphony-toaster-alert\n *ngIf=\"showSuccessToast\"\n [alertModel]=\"successToast\"\n (hideAlert)=\"onHideSuccessToast()\"\n ></symphony-toaster-alert>\n <symphony-toaster-alert\n *ngIf=\"showFailureToast\"\n [alertModel]=\"failureToast\"\n (hideAlert)=\"onHideFailureToast()\"\n ></symphony-toaster-alert>\n </div>\n <div *ngIf=\"isLoading\" class=\"sfx-mt-30 sfx-mb-30\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n <div *ngIf=\"hasError\" class=\"sfx-mt-30\">\n <symphony-paragraph text=\"We couldn't retrieve the candidate data. The information cannot be displayed at this time, please try again.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && (!model?.suggestions || model.suggestions.length === 0)\" class=\"sfx-mt-30\">\n <symphony-paragraph text=\"No more duplicates exist for this selected contact. Please try again later\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && !confirmSuggestion && model?.suggestions?.length\" class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <p class=\"sfx-mt-20 sfx-font-bold\">{{ model.selectedContact.name }} [{{ model.selectedContact.id }}]</p>\n <p>{{ model.selectedContact.email }}</p>\n <p *ngFor=\"let criterion of model.selectedContact.criteria\">{{ criterion.value }}</p>\n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 [text]=\"'Potential Duplicates (' + (model?.suggestions?.length || 0) + ')'\"></symphony-h5>\n <div class=\"scrollable-container card-wrapper\">\n <div\n *ngFor=\"let suggestion of model.suggestions; let i = index\"\n class=\"suggestion-card\"\n [ngClass]=\"{ selected: selected === suggestion }\"\n (click)=\"onSelect(suggestion)\"\n >\n <div class=\"card-header\">\n <symphony-input-radio\n [radioID]=\"suggestion.id\"\n [name]=\"'merge-suggestions'\"\n [isActive]=\"selected === suggestion\"\n (clicked)=\"onSelect(suggestion)\"\n ></symphony-input-radio> \n <div class=\"card-title sfx-font-bold\">\n {{ suggestion.name }} [{{ suggestion.id }}]\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <symphony-grid-cell-clicked-open-new-tab\n [newTabUrl]=\"getContactUrl(suggestion.id)\"\n ></symphony-grid-cell-clicked-open-new-tab>\n <symphony-icon-wrapper\n class=\"not-duplicate-icon-global\"\n title=\"Mark not duplicate\"\n (clicked)=\"onNotDuplicate(suggestion)\"\n >\n <symphony-icon [icon]=\"'si-exclude'\"></symphony-icon>\n </symphony-icon-wrapper>\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"suggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ suggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of suggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"suggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ suggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"suggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of suggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!isLoading && !hasError && confirmSuggestion\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <p class=\"sfx-mt-20 sfx-font-bold\">{{ model.selectedContact.name }} [{{ model.selectedContact.id }}]</p>\n <p>{{ model.selectedContact.email }}</p>\n <p *ngFor=\"let criterion of model.selectedContact.criteria\">{{ criterion }}</p>\n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Duplicate\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card confirm-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ confirmSuggestion.name }} [{{ confirmSuggestion.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ confirmSuggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of confirmSuggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ confirmSuggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"confirmSuggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of confirmSuggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </section>\n <section *ngIf=\"currentStep === 2\" class=\"modal-body merge-contacts-body\">\n <ng-content></ng-content>\n </section>\n <section *ngIf=\"currentStep === 1\" class=\"modal-footer\">\n <ng-container *ngIf=\"!confirmSuggestion; else confirmActions\">\n <symphony-button-v2 text=\"Close\" [isSecondary]=\"true\" (clicked)=\"onCancel()\"></symphony-button-v2>\n <symphony-button-v2 text=\"Next\" [disabled]=\"!selected || !!confirmSuggestion\" (clicked)=\"onNext()\"></symphony-button-v2>\n </ng-container>\n <ng-template #confirmActions>\n <div class=\"confirm-actions\">\n <symphony-button-v2\n text=\"Back\"\n [isSecondary]=\"true\"\n (clicked)=\"cancelNotDuplicate()\"\n ></symphony-button-v2>\n <symphony-button-v2\n text=\"Confirm\"\n (clicked)=\"confirmOnNotDuplicate()\"\n ></symphony-button-v2>\n </div>\n </ng-template>\n </section>\n</div>\n", styles: [".scrollable-container{max-height:500px;display:flex;flex-direction:column;overflow-y:auto;padding:20px 10px;gap:10px}.radio-item{display:flex;align-items:flex-start;gap:5px}.radio-label{display:flex;align-items:center;gap:1px}.radio-details{padding-left:24px}.radio-action{margin-left:auto;display:flex}.icon-upwards{margin-top:-1px!important;margin-bottom:auto}.modal-footer{display:flex;gap:10px;width:100%;justify-content:flex-end}.confirm-actions{display:flex;gap:10px}.suggestion-confirm{margin-top:38px}.pending-icon{margin-right:8px}.suggestion-card{border:1px solid #e4e7ef;border-radius:10px;padding:20px;background:#ffffff}.suggestion-card .card-header{display:flex;align-items:flex-start}.suggestion-card .card-title{flex:1;word-break:break-word}.suggestion-card .card-actions{margin-left:auto;display:flex;gap:10px}.suggestion-card .card-body{margin-top:15px;display:flex;flex-direction:column;gap:8px}.suggestion-card .info-row{display:flex;align-items:baseline;gap:8px;word-break:break-word}.suggestion-card .match-criteria{margin-top:10px}.suggestion-card .match-label{font-size:12px;font-weight:500;margin-bottom:8px}.suggestion-card .criteria-list{display:flex;flex-wrap:wrap;gap:8px}.sfx-modal.modal-container .modal-body.merge-contacts-body{padding:0}\n"] }]
|
|
133
|
+
args: [{ selector: 'symphony-merge-contacts-modal', template: "<div class=\"sfx sfx-modal modal-container\" *ngIf=\"model\">\n <section class=\"modal-header sfx-p-30 sfx-pt-40\">\n <div class=\"modal-title\">\n <div class=\"row\">\n <div class=\"col-xs-8 col-sm-8 col-md-8 col-lg-8\">\n <ng-container *ngIf=\"getStepTitle(currentStep) as stepTitle\">\n <symphony-h4 [text]=\"stepTitle\"></symphony-h4>\n </ng-container> \n </div>\n <div class=\"col-xs-4 col-sm-4 col-md-4 col-lg-4\">\n <symphony-icon\n class=\"pull-right\"\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCancel()\"\n ></symphony-icon>\n </div>\n <div\n class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sfx-mt-15\"\n *ngIf=\"getStepDescription(currentStep)\"\n >\n <ng-container *ngIf=\"getStepDescription(currentStep) as stepDescription\">\n <symphony-paragraph [text]=\"stepDescription\"></symphony-paragraph>\n </ng-container> \n </div>\n </div>\n </div>\n </section>\n <section class=\"modal-body sfx-p-30\" *ngIf=\"currentStep === 1\">\n <ng-container>\n <div class=\"toaster-alert-container-global\">\n <symphony-toaster-alert\n *ngIf=\"showSuccessToast\"\n [alertModel]=\"successToast\"\n (hideAlert)=\"onHideSuccessToast()\"\n ></symphony-toaster-alert>\n <symphony-toaster-alert\n *ngIf=\"showFailureToast\"\n [alertModel]=\"failureToast\"\n (hideAlert)=\"onHideFailureToast()\"\n ></symphony-toaster-alert>\n </div>\n <div *ngIf=\"isLoading\" class=\"sfx-mt-30 sfx-mb-30\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n <div *ngIf=\"hasError\" class=\"sfx-mt-20 sfx-mb-20 sfx-txt-center\">\n <symphony-paragraph text=\"We couldn't retrieve the candidate data. The information cannot be displayed at this time, please try again.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && (!model?.suggestions || model.suggestions.length === 0)\" class=\"sfx-mt-20 sfx-mb-20 sfx-txt-center\">\n <symphony-paragraph text=\"No more duplicates exist for this selected contact. Please try again later.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && !confirmSuggestion && model?.suggestions?.length\" class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5> \n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card selected-contact-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ model.selectedContact.name }} [{{ model.selectedContact.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"model.selectedContact.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ model.selectedContact.email }}</span>\n </div>\n <div\n class=\"info-row\"\n *ngFor=\"let criterion of model.selectedContact.criteria\"\n >\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"model.selectedContact.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ model.selectedContact.atsId }}</span>\n </div>\n </div>\n </div>\n </div> \n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 [text]=\"'Potential Duplicates (' + (model?.suggestions?.length || 0) + ')'\"></symphony-h5>\n <div class=\"scrollable-container card-wrapper\">\n <div\n *ngFor=\"let suggestion of model.suggestions; let i = index\"\n class=\"suggestion-card\"\n [ngClass]=\"{ selected: selected === suggestion }\"\n (click)=\"onSelect(suggestion)\"\n >\n <div class=\"card-header\">\n <symphony-input-radio\n [radioID]=\"suggestion.id\"\n [name]=\"'merge-suggestions'\"\n [isActive]=\"selected === suggestion\"\n (clicked)=\"onSelect(suggestion)\"\n ></symphony-input-radio> \n <div class=\"card-title sfx-font-bold\">\n {{ suggestion.name }} [{{ suggestion.id }}]\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <symphony-grid-cell-clicked-open-new-tab\n [newTabUrl]=\"getContactUrl(suggestion.id)\"\n ></symphony-grid-cell-clicked-open-new-tab>\n <symphony-icon-wrapper\n class=\"not-duplicate-icon-global\"\n title=\"Mark not duplicate\"\n (clicked)=\"onNotDuplicate(suggestion)\"\n >\n <symphony-icon [icon]=\"'si-exclude'\"></symphony-icon>\n </symphony-icon-wrapper>\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"suggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ suggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of suggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"suggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ suggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"suggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of suggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!isLoading && !hasError && confirmSuggestion\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card selected-contact-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ model.selectedContact.name }} [{{ model.selectedContact.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"model.selectedContact.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ model.selectedContact.email }}</span>\n </div>\n <div\n class=\"info-row\"\n *ngFor=\"let criterion of model.selectedContact.criteria\"\n >\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"model.selectedContact.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ model.selectedContact.atsId }}</span>\n </div>\n </div>\n </div>\n </div> \n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Duplicate\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card confirm-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ confirmSuggestion.name }} [{{ confirmSuggestion.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ confirmSuggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of confirmSuggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ confirmSuggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"confirmSuggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of confirmSuggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </section>\n <section *ngIf=\"currentStep === 2\" class=\"modal-body merge-contacts-body\">\n <ng-content></ng-content>\n </section>\n <section *ngIf=\"currentStep === 1\" class=\"modal-footer\">\n <ng-container *ngIf=\"!confirmSuggestion; else confirmActions\">\n <symphony-button-v2 text=\"Close\" [isSecondary]=\"true\" (clicked)=\"onCancel()\"></symphony-button-v2>\n <symphony-button-v2 text=\"Next\" [disabled]=\"!selected || !!confirmSuggestion\" (clicked)=\"onNext()\"></symphony-button-v2>\n </ng-container>\n <ng-template #confirmActions>\n <div class=\"confirm-actions\">\n <symphony-button-v2\n text=\"Back\"\n [isSecondary]=\"true\"\n (clicked)=\"cancelNotDuplicate()\"\n ></symphony-button-v2>\n <symphony-button-v2\n text=\"Confirm\"\n (clicked)=\"confirmOnNotDuplicate()\"\n ></symphony-button-v2>\n </div>\n </ng-template>\n </section>\n</div>\n", styles: [".scrollable-container{max-height:500px;display:flex;flex-direction:column;overflow-y:auto;padding:20px 10px;gap:10px}.radio-item{display:flex;align-items:flex-start;gap:5px}.radio-label{display:flex;align-items:center;gap:1px}.radio-details{padding-left:24px}.radio-action{margin-left:auto;display:flex}.icon-upwards{margin-top:-1px!important;margin-bottom:auto}.modal-footer{display:flex;gap:10px;width:100%;justify-content:flex-end}.confirm-actions{display:flex;gap:10px}.suggestion-confirm{margin-top:38px}.pending-icon{margin-right:8px}.suggestion-card{border:1px solid #e4e7ef;border-radius:10px;padding:20px;background:#ffffff}.suggestion-card .card-header{display:flex;align-items:flex-start}.suggestion-card .card-title{flex:1;word-break:break-word}.suggestion-card .card-actions{margin-left:auto;display:flex;gap:10px}.suggestion-card .card-body{margin-top:15px;display:flex;flex-direction:column;gap:8px}.suggestion-card .info-row{display:flex;align-items:baseline;gap:8px;word-break:break-word}.suggestion-card .match-criteria{margin-top:10px}.suggestion-card .match-label{font-size:12px;font-weight:500;margin-bottom:8px}.suggestion-card .criteria-list{display:flex;flex-wrap:wrap;gap:8px}.sfx-modal.modal-container .modal-body.merge-contacts-body{padding:0}\n"] }]
|
|
134
134
|
}], ctorParameters: function () { return []; }, propDecorators: { model: [{
|
|
135
135
|
type: Input
|
|
136
136
|
}], isLoading: [{
|
|
@@ -168,4 +168,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
|
|
|
168
168
|
}], currentStep: [{
|
|
169
169
|
type: Input
|
|
170
170
|
}] } });
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9vcmdhbmlzbXMvbWVyZ2UtY29udGFjdHMtbW9kYWwvbWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9vcmdhbmlzbXMvbWVyZ2UtY29udGFjdHMtbW9kYWwvbWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPdkQsTUFBTSxPQUFPLDJCQUEyQjtJQXlCdEM7UUF2QlMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBbUQsRUFBRSxDQUFDO1FBQzdELFNBQUksR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUNsRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNsQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUdyQyxDQUFDO1FBQ0ssb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUM3RCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFFdEUsbUNBQThCLEdBQUcsSUFBSSxZQUFZLEVBQVEs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TyxxQkFBcUIsQ0FDM0IsSUFBWTtRQUVaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhDLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtZQUMxQixPQUFPO2dCQUNMLEdBQUcsU0FBUztnQkFDWixHQUFHLFNBQVM7YUFDYixDQUFDO1NBQ0g7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzt3SEFoSlUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsa3FCQ2J4QyxpL1JBZ01BOzJGRG5MYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsK0JBQStCOzBFQUtoQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksSUFBSTtzQkFBYixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0UsZUFBZTtzQkFBdkIsS0FBSztnQkFDSSw4QkFBOEI7c0JBQXZDLE1BQU07Z0JBQ0UsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lcmdlQ29udGFjdHNNb2RhbE1vZGVsLCBNZXJnZUNvbnRhY3RzU3RlcENvcHksIE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfSBmcm9tICcuL21lcmdlLWNvbnRhY3RzLW1vZGFsLm1vZGVsJztcbmltcG9ydCB7XG4gIEFsZXJ0RHVyYXRpb24sXG4gIFRvYXN0ZXJBbGVydE1vZGVsLFxuICBUb2FzdGVyQWxlcnRUeXBlLFxufSBmcm9tICcuLi8uLi9hdG9tcy90b2FzdGVyLWFsZXJ0L3RvYXN0ZXItYWxlcnQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzeW1waG9ueS1tZXJnZS1jb250YWN0cy1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXJnZS1jb250YWN0cy1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lcmdlLWNvbnRhY3RzLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWVyZ2VDb250YWN0c01vZGFsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbW9kZWw6IE1lcmdlQ29udGFjdHNNb2RhbE1vZGVsO1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzRXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgc3RlcENvcHk6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgTWVyZ2VDb250YWN0c1N0ZXBDb3B5Pj4gPSB7fTsgIFxuICBAT3V0cHV0KCkgbmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8TWVyZ2VDb250YWN0U3VnZ2VzdGlvbj4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG5vdER1cGxpY2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHNlbGVjdGVkOiBNZXJnZUNvbnRhY3RzTW9kYWxNb2RlbFsnc2VsZWN0ZWRDb250YWN0J107XG4gICAgc3VnZ2VzdGlvbjogTWVyZ2VDb250YWN0U3VnZ2VzdGlvbjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVyZ2VDb250YWN0U3VnZ2VzdGlvbj4oKTtcbiAgQE91dHB1dCgpIGhpZGVTdWNjZXNzVG9hc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBoaWRlRmFpbHVyZVRvYXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVxdWVzdENvbmZpcm1TdWdnZXN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxNZXJnZUNvbnRhY3RTdWdnZXN0aW9uPigpO1xuICBASW5wdXQoKSBjb25maXJtU3RlcENvcHk/OiBNZXJnZUNvbnRhY3RzU3RlcENvcHk7ICBcbiAgQE91dHB1dCgpIHJlcXVlc3RDYW5jZWxDb25maXJtU3VnZ2VzdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQElucHV0KCkgc2VsZWN0ZWQ6IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgY29uZmlybVN1Z2dlc3Rpb246IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgc2hvd1N1Y2Nlc3NUb2FzdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RmFpbHVyZVRvYXN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGN1cnJlbnRTdGVwOiBudW1iZXIgPSAxO1xuICBzdWNjZXNzVG9hc3Q6IFRvYXN0ZXJBbGVydE1vZGVsO1xuICBmYWlsdXJlVG9hc3Q6IFRvYXN0ZXJBbGVydE1vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB0aGlzLnN1Y2Nlc3NUb2FzdCA9IG5ldyBUb2FzdGVyQWxlcnRNb2RlbCgpO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC50eXBlID0gVG9hc3RlckFsZXJ0VHlwZS5TdWNjZXNzO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC5tZXNzYWdlID0gXCJDb250YWN0IHJlbW92ZWQgZnJvbSBkdXBsaWNhdGVzIHN1Y2Nlc3NmdWxseVwiO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC5kdXJhdGlvbiA9IEFsZXJ0RHVyYXRpb24uRml2ZVNlY29uZHM7XG4gIHRoaXMuc3VjY2Vzc1RvYXN0LnNob3dDbG9zZUljb24gPSB0cnVlO1xuXG4gIHRoaXMuZmFpbHVyZVRvYXN0ID0gbmV3IFRvYXN0ZXJBbGVydE1vZGVsKCk7XG4gIHRoaXMuZmFpbHVyZVRvYXN0LnR5cGUgPSBUb2FzdGVyQWxlcnRUeXBlLkVycm9yO1xuICB0aGlzLmZhaWx1cmVUb2FzdC5tZXNzYWdlID0gXCJGYWlsZWQgdG8gcmVtb3ZlIGNvbnRhY3QgZnJvbSBkdXBsaWNhdGVzXCI7XG4gIHRoaXMuZmFpbHVyZVRvYXN0LmR1cmF0aW9uID0gQWxlcnREdXJhdGlvbi5GaXZlU2Vjb25kcztcbiAgdGhpcy5mYWlsdXJlVG9hc3Quc2hvd0Nsb3NlSWNvbiA9IHRydWU7XG4gIH1cblxuICBvbk5leHQoKSB7XG4gICAgdGhpcy5uZXh0LmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gIH1cblxuICBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvblNlbGVjdChzdWdnZXN0aW9uOiBNZXJnZUNvbnRhY3RTdWdnZXN0aW9uKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIG9uTm90RHVwbGljYXRlKHN1Z2dlc3Rpb246IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24pIHtcbiAgICB0aGlzLnJlcXVlc3RDb25maXJtU3VnZ2VzdGlvbi5lbWl0KHN1Z2dlc3Rpb24pO1xuICB9XG5cbiAgY2FuY2VsTm90RHVwbGljYXRlKCkge1xuICAgIHRoaXMucmVxdWVzdENhbmNlbENvbmZpcm1TdWdnZXN0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIGNvbmZpcm1Pbk5vdER1cGxpY2F0ZSgpIHtcbiAgICBpZiAodGhpcy5jb25maXJtU3VnZ2VzdGlvbikge1xuICAgICAgdGhpcy5ub3REdXBsaWNhdGUuZW1pdCh7XG4gICAgICAgIHNlbGVjdGVkOiB0aGlzLm1vZGVsLnNlbGVjdGVkQ29udGFjdCxcbiAgICAgICAgc3VnZ2VzdGlvbjogdGhpcy5jb25maXJtU3VnZ2VzdGlvbixcbiAgICAgIH0pO1xuICAgICB9XG4gIH1cblxuICBoYW5kbGVOb3REdXBsaWNhdGVTdWNjZXNzKCkge1xuICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmNvbmZpcm1TdWdnZXN0aW9uO1xuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICB0aGlzLm1vZGVsLnN1Z2dlc3Rpb25zID0gdGhpcy5tb2RlbC5zdWdnZXN0aW9ucy5maWx0ZXIoXG4gICAgICAgIChzKSA9PiBzICE9PSByZW1vdmVkXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmZpcm1TdWdnZXN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuc2hvd1N1Y2Nlc3NUb2FzdCA9IHRydWU7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5vdER1cGxpY2F0ZUVycm9yKCkge1xuICAgIHRoaXMuc2hvd0ZhaWx1cmVUb2FzdCA9IHRydWU7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uSGlkZVN1Y2Nlc3NUb2FzdCgpIHtcbiAgICB0aGlzLmhpZGVTdWNjZXNzVG9hc3QuZW1pdCgpO1xuICB9XG4gIG9uSGlkZUZhaWx1cmVUb2FzdCgpIHtcbiAgICB0aGlzLmhpZGVGYWlsdXJlVG9hc3QuZW1pdCgpO1xuICB9XG5cbiAgZ2V0Q29udGFjdFVybChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICBjb25zdCBbYmFzZVVybF0gPSB1cmwuc3BsaXQoJyMnKTtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0jL2NhbmRpZGF0ZXByb2ZpbGV2aWV3P2lkPSR7aWR9YDtcbiAgfVxuXG4gIGdldFN0ZXBUaXRsZShzdGVwOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBDb3B5KHN0ZXApPy50aXRsZTtcbiAgfVxuXG4gIGdldFN0ZXBEZXNjcmlwdGlvbihzdGVwOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBDb3B5KHN0ZXApPy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RlcENvcHkoc3RlcDogbnVtYmVyKTogTWVyZ2VDb250YWN0c1N0ZXBDb3B5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5jb25maXJtU3VnZ2VzdGlvbiAmJiBzdGVwID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb25maXJtU3VnZ2VzdGlvbkNvcHkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDb25maWd1cmVkU3RlcENvcHkoc3RlcCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbmZpcm1TdWdnZXN0aW9uQ29weSgpOiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbmZpcm1Db3B5OiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgPSB7XG4gICAgICAuLi4odGhpcy5tb2RlbD8uY29uZmlybVN0ZXBDb3B5ID8/IHt9KSxcbiAgICAgIC4uLih0aGlzLmNvbmZpcm1TdGVwQ29weSA/PyB7fSksXG4gICAgfTtcblxuICAgIGlmIChjb25maXJtQ29weS50aXRsZSB8fCBjb25maXJtQ29weS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGNvbmZpcm1Db3B5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldENvbmZpZ3VyZWRTdGVwQ29weSgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlndXJlZFN0ZXBDb3B5KFxuICAgIHN0ZXA6IG51bWJlclxuICApOiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1vZGVsQ29weSA9IHRoaXMubW9kZWw/LnN0ZXBDb3B5Py5bc3RlcF07XG4gICAgY29uc3QgaW5wdXRDb3B5ID0gdGhpcy5zdGVwQ29weT8uW3N0ZXBdO1xuXG4gICAgaWYgKG1vZGVsQ29weSB8fCBpbnB1dENvcHkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1vZGVsQ29weSxcbiAgICAgICAgLi4uaW5wdXRDb3B5LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIFxufVxuIiwiPGRpdiBjbGFzcz1cInNmeCBzZngtbW9kYWwgbW9kYWwtY29udGFpbmVyXCIgKm5nSWY9XCJtb2RlbFwiPlxuICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWhlYWRlciBzZngtcC0zMCBzZngtcHQtNDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy04IGNvbC1zbS04IGNvbC1tZC04IGNvbC1sZy04XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFN0ZXBUaXRsZShjdXJyZW50U3RlcCkgYXMgc3RlcFRpdGxlXCI+XG4gICAgICAgICAgICA8c3ltcGhvbnktaDQgW3RleHRdPVwic3RlcFRpdGxlXCI+PC9zeW1waG9ueS1oND5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTQgY29sLXNtLTQgY29sLW1kLTQgY29sLWxnLTRcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJwdWxsLXJpZ2h0XCJcbiAgICAgICAgICAgIFtpY29uXT1cIidzaS1jbG9zZS1tb2RhbCdcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiXG4gICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBzZngtbXQtMTVcIlxuICAgICAgICAgICpuZ0lmPVwiZ2V0U3RlcERlc2NyaXB0aW9uKGN1cnJlbnRTdGVwKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RlcERlc2NyaXB0aW9uKGN1cnJlbnRTdGVwKSBhcyBzdGVwRGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxzeW1waG9ueS1wYXJhZ3JhcGggW3RleHRdPVwic3RlcERlc2NyaXB0aW9uXCI+PC9zeW1waG9ueS1wYXJhZ3JhcGg+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1ib2R5IHNmeC1wLTMwXCIgKm5nSWY9XCJjdXJyZW50U3RlcCA9PT0gMVwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cInRvYXN0ZXItYWxlcnQtY29udGFpbmVyLWdsb2JhbFwiPlxuICAgICAgICA8c3ltcGhvbnktdG9hc3Rlci1hbGVydFxuICAgICAgICAgICpuZ0lmPVwic2hvd1N1Y2Nlc3NUb2FzdFwiXG4gICAgICAgICAgW2FsZXJ0TW9kZWxdPVwic3VjY2Vzc1RvYXN0XCJcbiAgICAgICAgICAoaGlkZUFsZXJ0KT1cIm9uSGlkZVN1Y2Nlc3NUb2FzdCgpXCJcbiAgICAgICAgPjwvc3ltcGhvbnktdG9hc3Rlci1hbGVydD5cbiAgICAgIDxzeW1waG9ueS10b2FzdGVyLWFsZXJ0XG4gICAgICAgICpuZ0lmPVwic2hvd0ZhaWx1cmVUb2FzdFwiXG4gICAgICAgIFthbGVydE1vZGVsXT1cImZhaWx1cmVUb2FzdFwiXG4gICAgICAgIChoaWRlQWxlcnQpPVwib25IaWRlRmFpbHVyZVRvYXN0KClcIlxuICAgICAgPjwvc3ltcGhvbnktdG9hc3Rlci1hbGVydD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJzZngtbXQtMzAgc2Z4LW1iLTMwXCI+XG4gICAgICA8c3ltcGhvbnktc2Z4LWxvYWRlcj48L3N5bXBob255LXNmeC1sb2FkZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImhhc0Vycm9yXCIgY2xhc3M9XCJzZngtbXQtMzBcIj5cbiAgICAgIDxzeW1waG9ueS1wYXJhZ3JhcGggdGV4dD1cIldlIGNvdWxkbid0IHJldHJpZXZlIHRoZSBjYW5kaWRhdGUgZGF0YS4gVGhlIGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkaXNwbGF5ZWQgYXQgdGhpcyB0aW1lLCBwbGVhc2UgdHJ5IGFnYWluLlwiPjwvc3ltcGhvbnktcGFyYWdyYXBoPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nICYmICFoYXNFcnJvciAmJiAoIW1vZGVsPy5zdWdnZXN0aW9ucyB8fCBtb2RlbC5zdWdnZXN0aW9ucy5sZW5ndGggPT09IDApXCIgY2xhc3M9XCJzZngtbXQtMzBcIj5cbiAgICAgIDxzeW1waG9ueS1wYXJhZ3JhcGggdGV4dD1cIk5vIG1vcmUgZHVwbGljYXRlcyBleGlzdCBmb3IgdGhpcyBzZWxlY3RlZCBjb250YWN0LiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyXCI+PC9zeW1waG9ueS1wYXJhZ3JhcGg+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWhhc0Vycm9yICYmICFjb25maXJtU3VnZ2VzdGlvbiAmJiBtb2RlbD8uc3VnZ2VzdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC02IGNvbC1sZy02XCI+XG4gICAgICAgIDxzeW1waG9ueS1oNSB0ZXh0PVwiU2VsZWN0ZWQgQ29udGFjdFwiPjwvc3ltcGhvbnktaDU+XG4gICAgICAgIDxwIGNsYXNzPVwic2Z4LW10LTIwIHNmeC1mb250LWJvbGRcIj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QubmFtZSB9fSAgW3t7IG1vZGVsLnNlbGVjdGVkQ29udGFjdC5pZCB9fV08L3A+XG4gICAgICAgIDxwPnt7IG1vZGVsLnNlbGVjdGVkQ29udGFjdC5lbWFpbCB9fTwvcD5cbiAgICAgICAgPHAgKm5nRm9yPVwibGV0IGNyaXRlcmlvbiBvZiBtb2RlbC5zZWxlY3RlZENvbnRhY3QuY3JpdGVyaWFcIj57eyBjcml0ZXJpb24udmFsdWUgfX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICA8c3ltcGhvbnktaDUgW3RleHRdPVwiJ1BvdGVudGlhbCBEdXBsaWNhdGVzICgnICsgKG1vZGVsPy5zdWdnZXN0aW9ucz8ubGVuZ3RoIHx8IDApICsgJyknXCI+PC9zeW1waG9ueS1oNT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGFibGUtY29udGFpbmVyIGNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIG1vZGVsLnN1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbi1jYXJkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHNlbGVjdGVkID09PSBzdWdnZXN0aW9uIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KHN1Z2dlc3Rpb24pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHN5bXBob255LWlucHV0LXJhZGlvXG4gICAgICAgICAgICAgICAgW3JhZGlvSURdPVwic3VnZ2VzdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ21lcmdlLXN1Z2dlc3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cInNlbGVjdGVkID09PSBzdWdnZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvblNlbGVjdChzdWdnZXN0aW9uKVwiXG4gICAgICAgICAgICAgID48L3N5bXBob255LWlucHV0LXJhZGlvPiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHNmeC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBzdWdnZXN0aW9uLm5hbWUgfX0gW3t7IHN1Z2dlc3Rpb24uaWQgfX1dXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1hY3Rpb25zXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1ncmlkLWNlbGwtY2xpY2tlZC1vcGVuLW5ldy10YWJcbiAgICAgICAgICAgICAgICAgIFtuZXdUYWJVcmxdPVwiZ2V0Q29udGFjdFVybChzdWdnZXN0aW9uLmlkKVwiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktZ3JpZC1jZWxsLWNsaWNrZWQtb3Blbi1uZXctdGFiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uLXdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm90LWR1cGxpY2F0ZS1pY29uLWdsb2JhbFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIk1hcmsgbm90IGR1cGxpY2F0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbk5vdER1cGxpY2F0ZShzdWdnZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb24gW2ljb25dPVwiJ3NpLWV4Y2x1ZGUnXCI+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3ltcGhvbnktaWNvbi13cmFwcGVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cInN1Z2dlc3Rpb24uZW1haWxcIj5cbiAgICAgICAgICAgICAgICA8c3ltcGhvbnktaWNvbiBbaWNvbl09XCInc2ktZW1haWwtc2VuZCdcIj48L3N5bXBob255LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3VnZ2VzdGlvbi5lbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0Zvcj1cImxldCBjcml0ZXJpb24gb2Ygc3VnZ2VzdGlvbi5jcml0ZXJpYVwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNyaXRlcmlvbi5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBjcml0ZXJpb24udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cInN1Z2dlc3Rpb24uYXRzSWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmeC10eHQtZ3JheSBzZngtZm9udC1ib2xkIHNmeC1mb250MTJcIj5BVFMgSUQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN1Z2dlc3Rpb24uYXRzSWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtY3JpdGVyaWFcIiAqbmdJZj1cInN1Z2dlc3Rpb24uc3RhdHVzZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtbGFiZWwgc2Z4LXR4dC1ncmF5XCI+Q29udGFjdHMgc2hhcmUgdGhlIHNhbWU6PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcml0ZXJpYS1saXN0XCI+XG4gICAgICAgICAgICAgICAgPHN5bXBob255LXN0YXR1cy1waWxsXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIHN1Z2dlc3Rpb24uc3RhdHVzZXNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXR1c1BpbGxNb2RlbF09XCJ7IHN0YXR1c0NsYXNzOiAnc3RhdHVzR3JleScsIHZhbHVlOiBzdGF0dXMgfVwiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktc3RhdHVzLXBpbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWhhc0Vycm9yICYmIGNvbmZpcm1TdWdnZXN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaDUgdGV4dD1cIlNlbGVjdGVkIENvbnRhY3RcIj48L3N5bXBob255LWg1PlxuICAgICAgICAgIDxwIGNsYXNzPVwic2Z4LW10LTIwIHNmeC1mb250LWJvbGRcIj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QubmFtZSB9fSAgW3t7IG1vZGVsLnNlbGVjdGVkQ29udGFjdC5pZCB9fV08L3A+XG4gICAgICAgICAgPHA+e3sgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmVtYWlsIH19PC9wPlxuICAgICAgICAgIDxwICpuZ0Zvcj1cImxldCBjcml0ZXJpb24gb2YgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmNyaXRlcmlhXCI+e3sgY3JpdGVyaW9uIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNiBjb2wtbGctNlwiPlxuICAgICAgICAgIDxzeW1waG9ueS1oNSB0ZXh0PVwiU2VsZWN0ZWQgRHVwbGljYXRlXCI+PC9zeW1waG9ueS1oNT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC13cmFwcGVyIHNmeC1tdC0yMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb24tY2FyZCBjb25maXJtLWNhcmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgc2Z4LWZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAge3sgY29uZmlybVN1Z2dlc3Rpb24ubmFtZSB9fSBbe3sgY29uZmlybVN1Z2dlc3Rpb24uaWQgfX1dXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCIgKm5nSWY9XCJjb25maXJtU3VnZ2VzdGlvbi5lbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb24gW2ljb25dPVwiJ3NpLWVtYWlsLXNlbmQnXCI+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29uZmlybVN1Z2dlc3Rpb24uZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCIgKm5nRm9yPVwibGV0IGNyaXRlcmlvbiBvZiBjb25maXJtU3VnZ2VzdGlvbi5jcml0ZXJpYVwiPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcml0ZXJpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICA+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY3JpdGVyaW9uLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwiY29uZmlybVN1Z2dlc3Rpb24uYXRzSWRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2Z4LXR4dC1ncmF5IHNmeC1mb250LWJvbGQgc2Z4LWZvbnQxMlwiPkFUUyBJRDo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb25maXJtU3VnZ2VzdGlvbi5hdHNJZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXRjaC1jcml0ZXJpYVwiICpuZ0lmPVwiY29uZmlybVN1Z2dlc3Rpb24uc3RhdHVzZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXRjaC1sYWJlbCBzZngtdHh0LWdyYXlcIj5Db250YWN0cyBzaGFyZSB0aGUgc2FtZTo8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JpdGVyaWEtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LXN0YXR1cy1waWxsXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdGF0dXMgb2YgY29uZmlybVN1Z2dlc3Rpb24uc3RhdHVzZXNcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhdHVzUGlsbE1vZGVsXT1cInsgc3RhdHVzQ2xhc3M6ICdzdGF0dXNHcmV5JywgdmFsdWU6IHN0YXR1cyB9XCJcbiAgICAgICAgICAgICAgICAgID48L3N5bXBob255LXN0YXR1cy1waWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3NlY3Rpb24+XG4gIDxzZWN0aW9uICpuZ0lmPVwiY3VycmVudFN0ZXAgPT09IDJcIiBjbGFzcz1cIm1vZGFsLWJvZHkgbWVyZ2UtY29udGFjdHMtYm9keVwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiAqbmdJZj1cImN1cnJlbnRTdGVwID09PSAxXCIgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbmZpcm1TdWdnZXN0aW9uOyBlbHNlIGNvbmZpcm1BY3Rpb25zXCI+XG4gICAgICA8c3ltcGhvbnktYnV0dG9uLXYyIHRleHQ9XCJDbG9zZVwiIFtpc1NlY29uZGFyeV09XCJ0cnVlXCIgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPjwvc3ltcGhvbnktYnV0dG9uLXYyPlxuICAgICAgPHN5bXBob255LWJ1dHRvbi12MiB0ZXh0PVwiTmV4dFwiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWQgfHwgISFjb25maXJtU3VnZ2VzdGlvblwiIChjbGlja2VkKT1cIm9uTmV4dCgpXCI+PC9zeW1waG9ueS1idXR0b24tdjI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25maXJtQWN0aW9ucz5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLWFjdGlvbnNcIj5cbiAgICAgICAgPHN5bXBob255LWJ1dHRvbi12MlxuICAgICAgICAgIHRleHQ9XCJCYWNrXCJcbiAgICAgICAgICBbaXNTZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiY2FuY2VsTm90RHVwbGljYXRlKClcIlxuICAgICAgICA+PC9zeW1waG9ueS1idXR0b24tdjI+XG4gICAgICAgIDxzeW1waG9ueS1idXR0b24tdjJcbiAgICAgICAgICB0ZXh0PVwiQ29uZmlybVwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiY29uZmlybU9uTm90RHVwbGljYXRlKClcIlxuICAgICAgICA+PC9zeW1waG9ueS1idXR0b24tdjI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3NlY3Rpb24+XG48L2Rpdj5cbiJdfQ==
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9vcmdhbmlzbXMvbWVyZ2UtY29udGFjdHMtbW9kYWwvbWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9vcmdhbmlzbXMvbWVyZ2UtY29udGFjdHMtbW9kYWwvbWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPdkQsTUFBTSxPQUFPLDJCQUEyQjtJQXlCdEM7UUF2QlMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBbUQsRUFBRSxDQUFDO1FBQzdELFNBQUksR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUNsRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNsQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUdyQyxDQUFDO1FBQ0ssb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUM3RCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFFdEUsbUNBQThCLEdBQUcsSUFBSSxZQUFZLEVBQVEs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TyxxQkFBcUIsQ0FDM0IsSUFBWTtRQUVaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhDLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtZQUMxQixPQUFPO2dCQUNMLEdBQUcsU0FBUztnQkFDWixHQUFHLFNBQVM7YUFDYixDQUFDO1NBQ0g7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzt3SEFoSlUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsa3FCQ2J4Qyw4cFdBb1BBOzJGRHZPYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsK0JBQStCOzBFQUtoQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksSUFBSTtzQkFBYixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0UsZUFBZTtzQkFBdkIsS0FBSztnQkFDSSw4QkFBOEI7c0JBQXZDLE1BQU07Z0JBQ0UsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lcmdlQ29udGFjdHNNb2RhbE1vZGVsLCBNZXJnZUNvbnRhY3RzU3RlcENvcHksIE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfSBmcm9tICcuL21lcmdlLWNvbnRhY3RzLW1vZGFsLm1vZGVsJztcbmltcG9ydCB7XG4gIEFsZXJ0RHVyYXRpb24sXG4gIFRvYXN0ZXJBbGVydE1vZGVsLFxuICBUb2FzdGVyQWxlcnRUeXBlLFxufSBmcm9tICcuLi8uLi9hdG9tcy90b2FzdGVyLWFsZXJ0L3RvYXN0ZXItYWxlcnQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzeW1waG9ueS1tZXJnZS1jb250YWN0cy1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXJnZS1jb250YWN0cy1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lcmdlLWNvbnRhY3RzLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWVyZ2VDb250YWN0c01vZGFsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbW9kZWw6IE1lcmdlQ29udGFjdHNNb2RhbE1vZGVsO1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzRXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgc3RlcENvcHk6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgTWVyZ2VDb250YWN0c1N0ZXBDb3B5Pj4gPSB7fTsgIFxuICBAT3V0cHV0KCkgbmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8TWVyZ2VDb250YWN0U3VnZ2VzdGlvbj4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG5vdER1cGxpY2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHNlbGVjdGVkOiBNZXJnZUNvbnRhY3RzTW9kYWxNb2RlbFsnc2VsZWN0ZWRDb250YWN0J107XG4gICAgc3VnZ2VzdGlvbjogTWVyZ2VDb250YWN0U3VnZ2VzdGlvbjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVyZ2VDb250YWN0U3VnZ2VzdGlvbj4oKTtcbiAgQE91dHB1dCgpIGhpZGVTdWNjZXNzVG9hc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBoaWRlRmFpbHVyZVRvYXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVxdWVzdENvbmZpcm1TdWdnZXN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxNZXJnZUNvbnRhY3RTdWdnZXN0aW9uPigpO1xuICBASW5wdXQoKSBjb25maXJtU3RlcENvcHk/OiBNZXJnZUNvbnRhY3RzU3RlcENvcHk7ICBcbiAgQE91dHB1dCgpIHJlcXVlc3RDYW5jZWxDb25maXJtU3VnZ2VzdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQElucHV0KCkgc2VsZWN0ZWQ6IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgY29uZmlybVN1Z2dlc3Rpb246IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgc2hvd1N1Y2Nlc3NUb2FzdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RmFpbHVyZVRvYXN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGN1cnJlbnRTdGVwOiBudW1iZXIgPSAxO1xuICBzdWNjZXNzVG9hc3Q6IFRvYXN0ZXJBbGVydE1vZGVsO1xuICBmYWlsdXJlVG9hc3Q6IFRvYXN0ZXJBbGVydE1vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB0aGlzLnN1Y2Nlc3NUb2FzdCA9IG5ldyBUb2FzdGVyQWxlcnRNb2RlbCgpO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC50eXBlID0gVG9hc3RlckFsZXJ0VHlwZS5TdWNjZXNzO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC5tZXNzYWdlID0gXCJDb250YWN0IHJlbW92ZWQgZnJvbSBkdXBsaWNhdGVzIHN1Y2Nlc3NmdWxseVwiO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC5kdXJhdGlvbiA9IEFsZXJ0RHVyYXRpb24uRml2ZVNlY29uZHM7XG4gIHRoaXMuc3VjY2Vzc1RvYXN0LnNob3dDbG9zZUljb24gPSB0cnVlO1xuXG4gIHRoaXMuZmFpbHVyZVRvYXN0ID0gbmV3IFRvYXN0ZXJBbGVydE1vZGVsKCk7XG4gIHRoaXMuZmFpbHVyZVRvYXN0LnR5cGUgPSBUb2FzdGVyQWxlcnRUeXBlLkVycm9yO1xuICB0aGlzLmZhaWx1cmVUb2FzdC5tZXNzYWdlID0gXCJGYWlsZWQgdG8gcmVtb3ZlIGNvbnRhY3QgZnJvbSBkdXBsaWNhdGVzXCI7XG4gIHRoaXMuZmFpbHVyZVRvYXN0LmR1cmF0aW9uID0gQWxlcnREdXJhdGlvbi5GaXZlU2Vjb25kcztcbiAgdGhpcy5mYWlsdXJlVG9hc3Quc2hvd0Nsb3NlSWNvbiA9IHRydWU7XG4gIH1cblxuICBvbk5leHQoKSB7XG4gICAgdGhpcy5uZXh0LmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gIH1cblxuICBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvblNlbGVjdChzdWdnZXN0aW9uOiBNZXJnZUNvbnRhY3RTdWdnZXN0aW9uKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIG9uTm90RHVwbGljYXRlKHN1Z2dlc3Rpb246IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24pIHtcbiAgICB0aGlzLnJlcXVlc3RDb25maXJtU3VnZ2VzdGlvbi5lbWl0KHN1Z2dlc3Rpb24pO1xuICB9XG5cbiAgY2FuY2VsTm90RHVwbGljYXRlKCkge1xuICAgIHRoaXMucmVxdWVzdENhbmNlbENvbmZpcm1TdWdnZXN0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIGNvbmZpcm1Pbk5vdER1cGxpY2F0ZSgpIHtcbiAgICBpZiAodGhpcy5jb25maXJtU3VnZ2VzdGlvbikge1xuICAgICAgdGhpcy5ub3REdXBsaWNhdGUuZW1pdCh7XG4gICAgICAgIHNlbGVjdGVkOiB0aGlzLm1vZGVsLnNlbGVjdGVkQ29udGFjdCxcbiAgICAgICAgc3VnZ2VzdGlvbjogdGhpcy5jb25maXJtU3VnZ2VzdGlvbixcbiAgICAgIH0pO1xuICAgICB9XG4gIH1cblxuICBoYW5kbGVOb3REdXBsaWNhdGVTdWNjZXNzKCkge1xuICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmNvbmZpcm1TdWdnZXN0aW9uO1xuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICB0aGlzLm1vZGVsLnN1Z2dlc3Rpb25zID0gdGhpcy5tb2RlbC5zdWdnZXN0aW9ucy5maWx0ZXIoXG4gICAgICAgIChzKSA9PiBzICE9PSByZW1vdmVkXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmZpcm1TdWdnZXN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuc2hvd1N1Y2Nlc3NUb2FzdCA9IHRydWU7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5vdER1cGxpY2F0ZUVycm9yKCkge1xuICAgIHRoaXMuc2hvd0ZhaWx1cmVUb2FzdCA9IHRydWU7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uSGlkZVN1Y2Nlc3NUb2FzdCgpIHtcbiAgICB0aGlzLmhpZGVTdWNjZXNzVG9hc3QuZW1pdCgpO1xuICB9XG4gIG9uSGlkZUZhaWx1cmVUb2FzdCgpIHtcbiAgICB0aGlzLmhpZGVGYWlsdXJlVG9hc3QuZW1pdCgpO1xuICB9XG5cbiAgZ2V0Q29udGFjdFVybChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICBjb25zdCBbYmFzZVVybF0gPSB1cmwuc3BsaXQoJyMnKTtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0jL2NhbmRpZGF0ZXByb2ZpbGV2aWV3P2lkPSR7aWR9YDtcbiAgfVxuXG4gIGdldFN0ZXBUaXRsZShzdGVwOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBDb3B5KHN0ZXApPy50aXRsZTtcbiAgfVxuXG4gIGdldFN0ZXBEZXNjcmlwdGlvbihzdGVwOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBDb3B5KHN0ZXApPy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RlcENvcHkoc3RlcDogbnVtYmVyKTogTWVyZ2VDb250YWN0c1N0ZXBDb3B5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5jb25maXJtU3VnZ2VzdGlvbiAmJiBzdGVwID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb25maXJtU3VnZ2VzdGlvbkNvcHkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDb25maWd1cmVkU3RlcENvcHkoc3RlcCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbmZpcm1TdWdnZXN0aW9uQ29weSgpOiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbmZpcm1Db3B5OiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgPSB7XG4gICAgICAuLi4odGhpcy5tb2RlbD8uY29uZmlybVN0ZXBDb3B5ID8/IHt9KSxcbiAgICAgIC4uLih0aGlzLmNvbmZpcm1TdGVwQ29weSA/PyB7fSksXG4gICAgfTtcblxuICAgIGlmIChjb25maXJtQ29weS50aXRsZSB8fCBjb25maXJtQ29weS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGNvbmZpcm1Db3B5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldENvbmZpZ3VyZWRTdGVwQ29weSgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlndXJlZFN0ZXBDb3B5KFxuICAgIHN0ZXA6IG51bWJlclxuICApOiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1vZGVsQ29weSA9IHRoaXMubW9kZWw/LnN0ZXBDb3B5Py5bc3RlcF07XG4gICAgY29uc3QgaW5wdXRDb3B5ID0gdGhpcy5zdGVwQ29weT8uW3N0ZXBdO1xuXG4gICAgaWYgKG1vZGVsQ29weSB8fCBpbnB1dENvcHkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1vZGVsQ29weSxcbiAgICAgICAgLi4uaW5wdXRDb3B5LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIFxufVxuIiwiPGRpdiBjbGFzcz1cInNmeCBzZngtbW9kYWwgbW9kYWwtY29udGFpbmVyXCIgKm5nSWY9XCJtb2RlbFwiPlxuICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWhlYWRlciBzZngtcC0zMCBzZngtcHQtNDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy04IGNvbC1zbS04IGNvbC1tZC04IGNvbC1sZy04XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFN0ZXBUaXRsZShjdXJyZW50U3RlcCkgYXMgc3RlcFRpdGxlXCI+XG4gICAgICAgICAgICA8c3ltcGhvbnktaDQgW3RleHRdPVwic3RlcFRpdGxlXCI+PC9zeW1waG9ueS1oND5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTQgY29sLXNtLTQgY29sLW1kLTQgY29sLWxnLTRcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJwdWxsLXJpZ2h0XCJcbiAgICAgICAgICAgIFtpY29uXT1cIidzaS1jbG9zZS1tb2RhbCdcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiXG4gICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBzZngtbXQtMTVcIlxuICAgICAgICAgICpuZ0lmPVwiZ2V0U3RlcERlc2NyaXB0aW9uKGN1cnJlbnRTdGVwKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RlcERlc2NyaXB0aW9uKGN1cnJlbnRTdGVwKSBhcyBzdGVwRGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxzeW1waG9ueS1wYXJhZ3JhcGggW3RleHRdPVwic3RlcERlc2NyaXB0aW9uXCI+PC9zeW1waG9ueS1wYXJhZ3JhcGg+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1ib2R5IHNmeC1wLTMwXCIgKm5nSWY9XCJjdXJyZW50U3RlcCA9PT0gMVwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cInRvYXN0ZXItYWxlcnQtY29udGFpbmVyLWdsb2JhbFwiPlxuICAgICAgICA8c3ltcGhvbnktdG9hc3Rlci1hbGVydFxuICAgICAgICAgICpuZ0lmPVwic2hvd1N1Y2Nlc3NUb2FzdFwiXG4gICAgICAgICAgW2FsZXJ0TW9kZWxdPVwic3VjY2Vzc1RvYXN0XCJcbiAgICAgICAgICAoaGlkZUFsZXJ0KT1cIm9uSGlkZVN1Y2Nlc3NUb2FzdCgpXCJcbiAgICAgICAgPjwvc3ltcGhvbnktdG9hc3Rlci1hbGVydD5cbiAgICAgIDxzeW1waG9ueS10b2FzdGVyLWFsZXJ0XG4gICAgICAgICpuZ0lmPVwic2hvd0ZhaWx1cmVUb2FzdFwiXG4gICAgICAgIFthbGVydE1vZGVsXT1cImZhaWx1cmVUb2FzdFwiXG4gICAgICAgIChoaWRlQWxlcnQpPVwib25IaWRlRmFpbHVyZVRvYXN0KClcIlxuICAgICAgPjwvc3ltcGhvbnktdG9hc3Rlci1hbGVydD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJzZngtbXQtMzAgc2Z4LW1iLTMwXCI+XG4gICAgICA8c3ltcGhvbnktc2Z4LWxvYWRlcj48L3N5bXBob255LXNmeC1sb2FkZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImhhc0Vycm9yXCIgY2xhc3M9XCJzZngtbXQtMjAgc2Z4LW1iLTIwIHNmeC10eHQtY2VudGVyXCI+XG4gICAgICA8c3ltcGhvbnktcGFyYWdyYXBoIHRleHQ9XCJXZSBjb3VsZG4ndCByZXRyaWV2ZSB0aGUgY2FuZGlkYXRlIGRhdGEuIFRoZSBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGlzcGxheWVkIGF0IHRoaXMgdGltZSwgcGxlYXNlIHRyeSBhZ2Fpbi5cIj48L3N5bXBob255LXBhcmFncmFwaD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZyAmJiAhaGFzRXJyb3IgJiYgKCFtb2RlbD8uc3VnZ2VzdGlvbnMgfHwgbW9kZWwuc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwKVwiIGNsYXNzPVwic2Z4LW10LTIwIHNmeC1tYi0yMCBzZngtdHh0LWNlbnRlclwiPlxuICAgICAgPHN5bXBob255LXBhcmFncmFwaCB0ZXh0PVwiTm8gbW9yZSBkdXBsaWNhdGVzIGV4aXN0IGZvciB0aGlzIHNlbGVjdGVkIGNvbnRhY3QuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXCI+PC9zeW1waG9ueS1wYXJhZ3JhcGg+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWhhc0Vycm9yICYmICFjb25maXJtU3VnZ2VzdGlvbiAmJiBtb2RlbD8uc3VnZ2VzdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC02IGNvbC1sZy02XCI+XG4gICAgICAgIDxzeW1waG9ueS1oNSB0ZXh0PVwiU2VsZWN0ZWQgQ29udGFjdFwiPjwvc3ltcGhvbnktaDU+ICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlciBzZngtbXQtMjBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvbi1jYXJkIHNlbGVjdGVkLWNvbnRhY3QtY2FyZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHNmeC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QubmFtZSB9fSBbe3sgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmlkIH19XVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cIm1vZGVsLnNlbGVjdGVkQ29udGFjdC5lbWFpbFwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uIFtpY29uXT1cIidzaS1lbWFpbC1zZW5kJ1wiPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QuZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbmZvLXJvd1wiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNyaXRlcmlvbiBvZiBtb2RlbC5zZWxlY3RlZENvbnRhY3QuY3JpdGVyaWFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN5bXBob255LWljb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJjcml0ZXJpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICA+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNyaXRlcmlvbi52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwibW9kZWwuc2VsZWN0ZWRDb250YWN0LmF0c0lkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZngtdHh0LWdyYXkgc2Z4LWZvbnQtYm9sZCBzZngtZm9udDEyXCI+QVRTIElEOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QuYXRzSWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAgICAgICAgXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICA8c3ltcGhvbnktaDUgW3RleHRdPVwiJ1BvdGVudGlhbCBEdXBsaWNhdGVzICgnICsgKG1vZGVsPy5zdWdnZXN0aW9ucz8ubGVuZ3RoIHx8IDApICsgJyknXCI+PC9zeW1waG9ueS1oNT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGFibGUtY29udGFpbmVyIGNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIG1vZGVsLnN1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbi1jYXJkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHNlbGVjdGVkID09PSBzdWdnZXN0aW9uIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KHN1Z2dlc3Rpb24pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHN5bXBob255LWlucHV0LXJhZGlvXG4gICAgICAgICAgICAgICAgW3JhZGlvSURdPVwic3VnZ2VzdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ21lcmdlLXN1Z2dlc3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cInNlbGVjdGVkID09PSBzdWdnZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvblNlbGVjdChzdWdnZXN0aW9uKVwiXG4gICAgICAgICAgICAgID48L3N5bXBob255LWlucHV0LXJhZGlvPiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHNmeC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBzdWdnZXN0aW9uLm5hbWUgfX0gW3t7IHN1Z2dlc3Rpb24uaWQgfX1dXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1hY3Rpb25zXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1ncmlkLWNlbGwtY2xpY2tlZC1vcGVuLW5ldy10YWJcbiAgICAgICAgICAgICAgICAgIFtuZXdUYWJVcmxdPVwiZ2V0Q29udGFjdFVybChzdWdnZXN0aW9uLmlkKVwiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktZ3JpZC1jZWxsLWNsaWNrZWQtb3Blbi1uZXctdGFiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uLXdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm90LWR1cGxpY2F0ZS1pY29uLWdsb2JhbFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIk1hcmsgbm90IGR1cGxpY2F0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbk5vdER1cGxpY2F0ZShzdWdnZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb24gW2ljb25dPVwiJ3NpLWV4Y2x1ZGUnXCI+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3ltcGhvbnktaWNvbi13cmFwcGVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cInN1Z2dlc3Rpb24uZW1haWxcIj5cbiAgICAgICAgICAgICAgICA8c3ltcGhvbnktaWNvbiBbaWNvbl09XCInc2ktZW1haWwtc2VuZCdcIj48L3N5bXBob255LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3VnZ2VzdGlvbi5lbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0Zvcj1cImxldCBjcml0ZXJpb24gb2Ygc3VnZ2VzdGlvbi5jcml0ZXJpYVwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNyaXRlcmlvbi5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBjcml0ZXJpb24udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cInN1Z2dlc3Rpb24uYXRzSWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmeC10eHQtZ3JheSBzZngtZm9udC1ib2xkIHNmeC1mb250MTJcIj5BVFMgSUQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN1Z2dlc3Rpb24uYXRzSWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtY3JpdGVyaWFcIiAqbmdJZj1cInN1Z2dlc3Rpb24uc3RhdHVzZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtbGFiZWwgc2Z4LXR4dC1ncmF5XCI+Q29udGFjdHMgc2hhcmUgdGhlIHNhbWU6PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcml0ZXJpYS1saXN0XCI+XG4gICAgICAgICAgICAgICAgPHN5bXBob255LXN0YXR1cy1waWxsXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIHN1Z2dlc3Rpb24uc3RhdHVzZXNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXR1c1BpbGxNb2RlbF09XCJ7IHN0YXR1c0NsYXNzOiAnc3RhdHVzR3JleScsIHZhbHVlOiBzdGF0dXMgfVwiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktc3RhdHVzLXBpbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWhhc0Vycm9yICYmIGNvbmZpcm1TdWdnZXN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaDUgdGV4dD1cIlNlbGVjdGVkIENvbnRhY3RcIj48L3N5bXBob255LWg1PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXdyYXBwZXIgc2Z4LW10LTIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvbi1jYXJkIHNlbGVjdGVkLWNvbnRhY3QtY2FyZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBzZngtZm9udC1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QubmFtZSB9fSBbe3sgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmlkIH19XVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwibW9kZWwuc2VsZWN0ZWRDb250YWN0LmVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICA8c3ltcGhvbnktaWNvbiBbaWNvbl09XCInc2ktZW1haWwtc2VuZCdcIj48L3N5bXBob255LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QuZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbmZvLXJvd1wiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3JpdGVyaW9uIG9mIG1vZGVsLnNlbGVjdGVkQ29udGFjdC5jcml0ZXJpYVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcml0ZXJpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICA+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY3JpdGVyaW9uLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwibW9kZWwuc2VsZWN0ZWRDb250YWN0LmF0c0lkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmeC10eHQtZ3JheSBzZngtZm9udC1ib2xkIHNmeC1mb250MTJcIj5BVFMgSUQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmF0c0lkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaDUgdGV4dD1cIlNlbGVjdGVkIER1cGxpY2F0ZVwiPjwvc3ltcGhvbnktaDU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlciBzZngtbXQtMjBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWdnZXN0aW9uLWNhcmQgY29uZmlybS1jYXJkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHNmeC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbmZpcm1TdWdnZXN0aW9uLm5hbWUgfX0gW3t7IGNvbmZpcm1TdWdnZXN0aW9uLmlkIH19XVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwiY29uZmlybVN1Z2dlc3Rpb24uZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uIFtpY29uXT1cIidzaS1lbWFpbC1zZW5kJ1wiPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbmZpcm1TdWdnZXN0aW9uLmVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0Zvcj1cImxldCBjcml0ZXJpb24gb2YgY29uZmlybVN1Z2dlc3Rpb24uY3JpdGVyaWFcIj5cbiAgICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImNyaXRlcmlvbi5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNyaXRlcmlvbi52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cImNvbmZpcm1TdWdnZXN0aW9uLmF0c0lkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmeC10eHQtZ3JheSBzZngtZm9udC1ib2xkIHNmeC1mb250MTJcIj5BVFMgSUQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29uZmlybVN1Z2dlc3Rpb24uYXRzSWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtY3JpdGVyaWFcIiAqbmdJZj1cImNvbmZpcm1TdWdnZXN0aW9uLnN0YXR1c2VzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtbGFiZWwgc2Z4LXR4dC1ncmF5XCI+Q29udGFjdHMgc2hhcmUgdGhlIHNhbWU6PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyaXRlcmlhLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIDxzeW1waG9ueS1zdGF0dXMtcGlsbFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIGNvbmZpcm1TdWdnZXN0aW9uLnN0YXR1c2VzXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXR1c1BpbGxNb2RlbF09XCJ7IHN0YXR1c0NsYXNzOiAnc3RhdHVzR3JleScsIHZhbHVlOiBzdGF0dXMgfVwiXG4gICAgICAgICAgICAgICAgICA+PC9zeW1waG9ueS1zdGF0dXMtcGlsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiAqbmdJZj1cImN1cnJlbnRTdGVwID09PSAyXCIgY2xhc3M9XCJtb2RhbC1ib2R5IG1lcmdlLWNvbnRhY3RzLWJvZHlcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gKm5nSWY9XCJjdXJyZW50U3RlcCA9PT0gMVwiIGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb25maXJtU3VnZ2VzdGlvbjsgZWxzZSBjb25maXJtQWN0aW9uc1wiPlxuICAgICAgPHN5bXBob255LWJ1dHRvbi12MiB0ZXh0PVwiQ2xvc2VcIiBbaXNTZWNvbmRhcnldPVwidHJ1ZVwiIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj48L3N5bXBob255LWJ1dHRvbi12Mj5cbiAgICAgIDxzeW1waG9ueS1idXR0b24tdjIgdGV4dD1cIk5leHRcIiBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkIHx8ICEhY29uZmlybVN1Z2dlc3Rpb25cIiAoY2xpY2tlZCk9XCJvbk5leHQoKVwiPjwvc3ltcGhvbnktYnV0dG9uLXYyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29uZmlybUFjdGlvbnM+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybS1hY3Rpb25zXCI+XG4gICAgICAgIDxzeW1waG9ueS1idXR0b24tdjJcbiAgICAgICAgICB0ZXh0PVwiQmFja1wiXG4gICAgICAgICAgW2lzU2Vjb25kYXJ5XT1cInRydWVcIlxuICAgICAgICAgIChjbGlja2VkKT1cImNhbmNlbE5vdER1cGxpY2F0ZSgpXCJcbiAgICAgICAgPjwvc3ltcGhvbnktYnV0dG9uLXYyPlxuICAgICAgICA8c3ltcGhvbnktYnV0dG9uLXYyXG4gICAgICAgICAgdGV4dD1cIkNvbmZpcm1cIlxuICAgICAgICAgIChjbGlja2VkKT1cImNvbmZpcm1Pbk5vdER1cGxpY2F0ZSgpXCJcbiAgICAgICAgPjwvc3ltcGhvbnktYnV0dG9uLXYyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
|
|
@@ -127,10 +127,10 @@ export class MergeContactsModalComponent {
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
MergeContactsModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MergeContactsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
130
|
-
MergeContactsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MergeContactsModalComponent, selector: "symphony-merge-contacts-modal", inputs: { model: "model", isLoading: "isLoading", hasError: "hasError", stepCopy: "stepCopy", confirmStepCopy: "confirmStepCopy", selected: "selected", confirmSuggestion: "confirmSuggestion", showSuccessToast: "showSuccessToast", showFailureToast: "showFailureToast", currentStep: "currentStep" }, outputs: { next: "next", cancel: "cancel", notDuplicate: "notDuplicate", selectionChange: "selectionChange", hideSuccessToast: "hideSuccessToast", hideFailureToast: "hideFailureToast", requestConfirmSuggestion: "requestConfirmSuggestion", requestCancelConfirmSuggestion: "requestCancelConfirmSuggestion" }, ngImport: i0, template: "<div class=\"sfx sfx-modal modal-container\" *ngIf=\"model\">\n <section class=\"modal-header sfx-p-30 sfx-pt-40\">\n <div class=\"modal-title\">\n <div class=\"row\">\n <div class=\"col-xs-8 col-sm-8 col-md-8 col-lg-8\">\n <ng-container *ngIf=\"getStepTitle(currentStep) as stepTitle\">\n <symphony-h4 [text]=\"stepTitle\"></symphony-h4>\n </ng-container> \n </div>\n <div class=\"col-xs-4 col-sm-4 col-md-4 col-lg-4\">\n <symphony-icon\n class=\"pull-right\"\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCancel()\"\n ></symphony-icon>\n </div>\n <div\n class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sfx-mt-15\"\n *ngIf=\"getStepDescription(currentStep)\"\n >\n <ng-container *ngIf=\"getStepDescription(currentStep) as stepDescription\">\n <symphony-paragraph [text]=\"stepDescription\"></symphony-paragraph>\n </ng-container> \n </div>\n </div>\n </div>\n </section>\n <section class=\"modal-body sfx-p-30\" *ngIf=\"currentStep === 1\">\n <ng-container>\n <div class=\"toaster-alert-container-global\">\n <symphony-toaster-alert\n *ngIf=\"showSuccessToast\"\n [alertModel]=\"successToast\"\n (hideAlert)=\"onHideSuccessToast()\"\n ></symphony-toaster-alert>\n <symphony-toaster-alert\n *ngIf=\"showFailureToast\"\n [alertModel]=\"failureToast\"\n (hideAlert)=\"onHideFailureToast()\"\n ></symphony-toaster-alert>\n </div>\n <div *ngIf=\"isLoading\" class=\"sfx-mt-30 sfx-mb-30\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n <div *ngIf=\"hasError\" class=\"sfx-mt-30\">\n <symphony-paragraph text=\"We couldn't retrieve the candidate data. The information cannot be displayed at this time, please try again.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && (!model?.suggestions || model.suggestions.length === 0)\" class=\"sfx-mt-30\">\n <symphony-paragraph text=\"No more duplicates exist for this selected contact. Please try again later\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && !confirmSuggestion && model?.suggestions?.length\" class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <p class=\"sfx-mt-20 sfx-font-bold\">{{ model.selectedContact.name }} [{{ model.selectedContact.id }}]</p>\n <p>{{ model.selectedContact.email }}</p>\n <p *ngFor=\"let criterion of model.selectedContact.criteria\">{{ criterion.value }}</p>\n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 [text]=\"'Potential Duplicates (' + (model?.suggestions?.length || 0) + ')'\"></symphony-h5>\n <div class=\"scrollable-container card-wrapper\">\n <div\n *ngFor=\"let suggestion of model.suggestions; let i = index\"\n class=\"suggestion-card\"\n [ngClass]=\"{ selected: selected === suggestion }\"\n (click)=\"onSelect(suggestion)\"\n >\n <div class=\"card-header\">\n <symphony-input-radio\n [radioID]=\"suggestion.id\"\n [name]=\"'merge-suggestions'\"\n [isActive]=\"selected === suggestion\"\n (clicked)=\"onSelect(suggestion)\"\n ></symphony-input-radio> \n <div class=\"card-title sfx-font-bold\">\n {{ suggestion.name }} [{{ suggestion.id }}]\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <symphony-grid-cell-clicked-open-new-tab\n [newTabUrl]=\"getContactUrl(suggestion.id)\"\n ></symphony-grid-cell-clicked-open-new-tab>\n <symphony-icon-wrapper\n class=\"not-duplicate-icon-global\"\n title=\"Mark not duplicate\"\n (clicked)=\"onNotDuplicate(suggestion)\"\n >\n <symphony-icon [icon]=\"'si-exclude'\"></symphony-icon>\n </symphony-icon-wrapper>\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"suggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ suggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of suggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"suggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ suggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"suggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of suggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!isLoading && !hasError && confirmSuggestion\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <p class=\"sfx-mt-20 sfx-font-bold\">{{ model.selectedContact.name }} [{{ model.selectedContact.id }}]</p>\n <p>{{ model.selectedContact.email }}</p>\n <p *ngFor=\"let criterion of model.selectedContact.criteria\">{{ criterion }}</p>\n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Duplicate\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card confirm-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ confirmSuggestion.name }} [{{ confirmSuggestion.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ confirmSuggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of confirmSuggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ confirmSuggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"confirmSuggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of confirmSuggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </section>\n <section *ngIf=\"currentStep === 2\" class=\"modal-body merge-contacts-body\">\n <ng-content></ng-content>\n </section>\n <section *ngIf=\"currentStep === 1\" class=\"modal-footer\">\n <ng-container *ngIf=\"!confirmSuggestion; else confirmActions\">\n <symphony-button-v2 text=\"Close\" [isSecondary]=\"true\" (clicked)=\"onCancel()\"></symphony-button-v2>\n <symphony-button-v2 text=\"Next\" [disabled]=\"!selected || !!confirmSuggestion\" (clicked)=\"onNext()\"></symphony-button-v2>\n </ng-container>\n <ng-template #confirmActions>\n <div class=\"confirm-actions\">\n <symphony-button-v2\n text=\"Back\"\n [isSecondary]=\"true\"\n (clicked)=\"cancelNotDuplicate()\"\n ></symphony-button-v2>\n <symphony-button-v2\n text=\"Confirm\"\n (clicked)=\"confirmOnNotDuplicate()\"\n ></symphony-button-v2>\n </div>\n </ng-template>\n </section>\n</div>\n", styles: [".scrollable-container{max-height:500px;display:flex;flex-direction:column;overflow-y:auto;padding:20px 10px;gap:10px}.radio-item{display:flex;align-items:flex-start;gap:5px}.radio-label{display:flex;align-items:center;gap:1px}.radio-details{padding-left:24px}.radio-action{margin-left:auto;display:flex}.icon-upwards{margin-top:-1px!important;margin-bottom:auto}.modal-footer{display:flex;gap:10px;width:100%;justify-content:flex-end}.confirm-actions{display:flex;gap:10px}.suggestion-confirm{margin-top:38px}.pending-icon{margin-right:8px}.suggestion-card{border:1px solid #e4e7ef;border-radius:10px;padding:20px;background:#ffffff}.suggestion-card .card-header{display:flex;align-items:flex-start}.suggestion-card .card-title{flex:1;word-break:break-word}.suggestion-card .card-actions{margin-left:auto;display:flex;gap:10px}.suggestion-card .card-body{margin-top:15px;display:flex;flex-direction:column;gap:8px}.suggestion-card .info-row{display:flex;align-items:baseline;gap:8px;word-break:break-word}.suggestion-card .match-criteria{margin-top:10px}.suggestion-card .match-label{font-size:12px;font-weight:500;margin-bottom:8px}.suggestion-card .criteria-list{display:flex;flex-wrap:wrap;gap:8px}.sfx-modal.modal-container .modal-body.merge-contacts-body{padding:0}\n"], components: [{ type: i1.H4Component, selector: "symphony-h4", inputs: ["text", "isSecondary"] }, { type: i2.IconComponent, selector: "symphony-icon", inputs: ["icon", "isSecondary", "size", "iconColor"], outputs: ["clicked"] }, { type: i3.ParagraphComponent, selector: "symphony-paragraph", inputs: ["text", "isSecondary", "isFontBold"] }, { type: i4.ToasterAlertComponent, selector: "symphony-toaster-alert", inputs: ["alertModel", "showAlert"], outputs: ["hideAlert", "refreshClicked"] }, { type: i5.SfxLoaderComponent, selector: "symphony-sfx-loader", inputs: ["leftStyle", "message", "hasCustomMessage"] }, { type: i6.H5Component, selector: "symphony-h5", inputs: ["text", "isSecondary"] }, { type: i7.InputRadioComponent, selector: "symphony-input-radio", inputs: ["isActive", "name", "label", "isRequired", "radioID"], outputs: ["clicked"] }, { type: i8.GridCellClickedOpenNewTabComponent, selector: "symphony-grid-cell-clicked-open-new-tab", inputs: ["newTabUrl"] }, { type: i9.IconWrapperComponent, selector: "symphony-icon-wrapper", inputs: ["backgroundColor", "isInverse", "hasHoverWithoutBorder", "isDisabled"], outputs: ["clicked"] }, { type: i10.StatusPillComponent, selector: "symphony-status-pill", inputs: ["statusPillModel"] }, { type: i11.ButtonV2Component, selector: "symphony-button-v2" }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
130
|
+
MergeContactsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MergeContactsModalComponent, selector: "symphony-merge-contacts-modal", inputs: { model: "model", isLoading: "isLoading", hasError: "hasError", stepCopy: "stepCopy", confirmStepCopy: "confirmStepCopy", selected: "selected", confirmSuggestion: "confirmSuggestion", showSuccessToast: "showSuccessToast", showFailureToast: "showFailureToast", currentStep: "currentStep" }, outputs: { next: "next", cancel: "cancel", notDuplicate: "notDuplicate", selectionChange: "selectionChange", hideSuccessToast: "hideSuccessToast", hideFailureToast: "hideFailureToast", requestConfirmSuggestion: "requestConfirmSuggestion", requestCancelConfirmSuggestion: "requestCancelConfirmSuggestion" }, ngImport: i0, template: "<div class=\"sfx sfx-modal modal-container\" *ngIf=\"model\">\n <section class=\"modal-header sfx-p-30 sfx-pt-40\">\n <div class=\"modal-title\">\n <div class=\"row\">\n <div class=\"col-xs-8 col-sm-8 col-md-8 col-lg-8\">\n <ng-container *ngIf=\"getStepTitle(currentStep) as stepTitle\">\n <symphony-h4 [text]=\"stepTitle\"></symphony-h4>\n </ng-container> \n </div>\n <div class=\"col-xs-4 col-sm-4 col-md-4 col-lg-4\">\n <symphony-icon\n class=\"pull-right\"\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCancel()\"\n ></symphony-icon>\n </div>\n <div\n class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sfx-mt-15\"\n *ngIf=\"getStepDescription(currentStep)\"\n >\n <ng-container *ngIf=\"getStepDescription(currentStep) as stepDescription\">\n <symphony-paragraph [text]=\"stepDescription\"></symphony-paragraph>\n </ng-container> \n </div>\n </div>\n </div>\n </section>\n <section class=\"modal-body sfx-p-30\" *ngIf=\"currentStep === 1\">\n <ng-container>\n <div class=\"toaster-alert-container-global\">\n <symphony-toaster-alert\n *ngIf=\"showSuccessToast\"\n [alertModel]=\"successToast\"\n (hideAlert)=\"onHideSuccessToast()\"\n ></symphony-toaster-alert>\n <symphony-toaster-alert\n *ngIf=\"showFailureToast\"\n [alertModel]=\"failureToast\"\n (hideAlert)=\"onHideFailureToast()\"\n ></symphony-toaster-alert>\n </div>\n <div *ngIf=\"isLoading\" class=\"sfx-mt-30 sfx-mb-30\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n <div *ngIf=\"hasError\" class=\"sfx-mt-20 sfx-mb-20 sfx-txt-center\">\n <symphony-paragraph text=\"We couldn't retrieve the candidate data. The information cannot be displayed at this time, please try again.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && (!model?.suggestions || model.suggestions.length === 0)\" class=\"sfx-mt-20 sfx-mb-20 sfx-txt-center\">\n <symphony-paragraph text=\"No more duplicates exist for this selected contact. Please try again later.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && !confirmSuggestion && model?.suggestions?.length\" class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5> \n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card selected-contact-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ model.selectedContact.name }} [{{ model.selectedContact.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"model.selectedContact.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ model.selectedContact.email }}</span>\n </div>\n <div\n class=\"info-row\"\n *ngFor=\"let criterion of model.selectedContact.criteria\"\n >\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"model.selectedContact.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ model.selectedContact.atsId }}</span>\n </div>\n </div>\n </div>\n </div> \n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 [text]=\"'Potential Duplicates (' + (model?.suggestions?.length || 0) + ')'\"></symphony-h5>\n <div class=\"scrollable-container card-wrapper\">\n <div\n *ngFor=\"let suggestion of model.suggestions; let i = index\"\n class=\"suggestion-card\"\n [ngClass]=\"{ selected: selected === suggestion }\"\n (click)=\"onSelect(suggestion)\"\n >\n <div class=\"card-header\">\n <symphony-input-radio\n [radioID]=\"suggestion.id\"\n [name]=\"'merge-suggestions'\"\n [isActive]=\"selected === suggestion\"\n (clicked)=\"onSelect(suggestion)\"\n ></symphony-input-radio> \n <div class=\"card-title sfx-font-bold\">\n {{ suggestion.name }} [{{ suggestion.id }}]\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <symphony-grid-cell-clicked-open-new-tab\n [newTabUrl]=\"getContactUrl(suggestion.id)\"\n ></symphony-grid-cell-clicked-open-new-tab>\n <symphony-icon-wrapper\n class=\"not-duplicate-icon-global\"\n title=\"Mark not duplicate\"\n (clicked)=\"onNotDuplicate(suggestion)\"\n >\n <symphony-icon [icon]=\"'si-exclude'\"></symphony-icon>\n </symphony-icon-wrapper>\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"suggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ suggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of suggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"suggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ suggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"suggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of suggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!isLoading && !hasError && confirmSuggestion\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card selected-contact-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ model.selectedContact.name }} [{{ model.selectedContact.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"model.selectedContact.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ model.selectedContact.email }}</span>\n </div>\n <div\n class=\"info-row\"\n *ngFor=\"let criterion of model.selectedContact.criteria\"\n >\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"model.selectedContact.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ model.selectedContact.atsId }}</span>\n </div>\n </div>\n </div>\n </div> \n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Duplicate\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card confirm-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ confirmSuggestion.name }} [{{ confirmSuggestion.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ confirmSuggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of confirmSuggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ confirmSuggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"confirmSuggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of confirmSuggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </section>\n <section *ngIf=\"currentStep === 2\" class=\"modal-body merge-contacts-body\">\n <ng-content></ng-content>\n </section>\n <section *ngIf=\"currentStep === 1\" class=\"modal-footer\">\n <ng-container *ngIf=\"!confirmSuggestion; else confirmActions\">\n <symphony-button-v2 text=\"Close\" [isSecondary]=\"true\" (clicked)=\"onCancel()\"></symphony-button-v2>\n <symphony-button-v2 text=\"Next\" [disabled]=\"!selected || !!confirmSuggestion\" (clicked)=\"onNext()\"></symphony-button-v2>\n </ng-container>\n <ng-template #confirmActions>\n <div class=\"confirm-actions\">\n <symphony-button-v2\n text=\"Back\"\n [isSecondary]=\"true\"\n (clicked)=\"cancelNotDuplicate()\"\n ></symphony-button-v2>\n <symphony-button-v2\n text=\"Confirm\"\n (clicked)=\"confirmOnNotDuplicate()\"\n ></symphony-button-v2>\n </div>\n </ng-template>\n </section>\n</div>\n", styles: [".scrollable-container{max-height:500px;display:flex;flex-direction:column;overflow-y:auto;padding:20px 10px;gap:10px}.radio-item{display:flex;align-items:flex-start;gap:5px}.radio-label{display:flex;align-items:center;gap:1px}.radio-details{padding-left:24px}.radio-action{margin-left:auto;display:flex}.icon-upwards{margin-top:-1px!important;margin-bottom:auto}.modal-footer{display:flex;gap:10px;width:100%;justify-content:flex-end}.confirm-actions{display:flex;gap:10px}.suggestion-confirm{margin-top:38px}.pending-icon{margin-right:8px}.suggestion-card{border:1px solid #e4e7ef;border-radius:10px;padding:20px;background:#ffffff}.suggestion-card .card-header{display:flex;align-items:flex-start}.suggestion-card .card-title{flex:1;word-break:break-word}.suggestion-card .card-actions{margin-left:auto;display:flex;gap:10px}.suggestion-card .card-body{margin-top:15px;display:flex;flex-direction:column;gap:8px}.suggestion-card .info-row{display:flex;align-items:baseline;gap:8px;word-break:break-word}.suggestion-card .match-criteria{margin-top:10px}.suggestion-card .match-label{font-size:12px;font-weight:500;margin-bottom:8px}.suggestion-card .criteria-list{display:flex;flex-wrap:wrap;gap:8px}.sfx-modal.modal-container .modal-body.merge-contacts-body{padding:0}\n"], components: [{ type: i1.H4Component, selector: "symphony-h4", inputs: ["text", "isSecondary"] }, { type: i2.IconComponent, selector: "symphony-icon", inputs: ["icon", "isSecondary", "size", "iconColor"], outputs: ["clicked"] }, { type: i3.ParagraphComponent, selector: "symphony-paragraph", inputs: ["text", "isSecondary", "isFontBold"] }, { type: i4.ToasterAlertComponent, selector: "symphony-toaster-alert", inputs: ["alertModel", "showAlert"], outputs: ["hideAlert", "refreshClicked"] }, { type: i5.SfxLoaderComponent, selector: "symphony-sfx-loader", inputs: ["leftStyle", "message", "hasCustomMessage"] }, { type: i6.H5Component, selector: "symphony-h5", inputs: ["text", "isSecondary"] }, { type: i7.InputRadioComponent, selector: "symphony-input-radio", inputs: ["isActive", "name", "label", "isRequired", "radioID"], outputs: ["clicked"] }, { type: i8.GridCellClickedOpenNewTabComponent, selector: "symphony-grid-cell-clicked-open-new-tab", inputs: ["newTabUrl"] }, { type: i9.IconWrapperComponent, selector: "symphony-icon-wrapper", inputs: ["backgroundColor", "isInverse", "hasHoverWithoutBorder", "isDisabled"], outputs: ["clicked"] }, { type: i10.StatusPillComponent, selector: "symphony-status-pill", inputs: ["statusPillModel"] }, { type: i11.ButtonV2Component, selector: "symphony-button-v2" }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
131
131
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MergeContactsModalComponent, decorators: [{
|
|
132
132
|
type: Component,
|
|
133
|
-
args: [{ selector: 'symphony-merge-contacts-modal', template: "<div class=\"sfx sfx-modal modal-container\" *ngIf=\"model\">\n <section class=\"modal-header sfx-p-30 sfx-pt-40\">\n <div class=\"modal-title\">\n <div class=\"row\">\n <div class=\"col-xs-8 col-sm-8 col-md-8 col-lg-8\">\n <ng-container *ngIf=\"getStepTitle(currentStep) as stepTitle\">\n <symphony-h4 [text]=\"stepTitle\"></symphony-h4>\n </ng-container> \n </div>\n <div class=\"col-xs-4 col-sm-4 col-md-4 col-lg-4\">\n <symphony-icon\n class=\"pull-right\"\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCancel()\"\n ></symphony-icon>\n </div>\n <div\n class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sfx-mt-15\"\n *ngIf=\"getStepDescription(currentStep)\"\n >\n <ng-container *ngIf=\"getStepDescription(currentStep) as stepDescription\">\n <symphony-paragraph [text]=\"stepDescription\"></symphony-paragraph>\n </ng-container> \n </div>\n </div>\n </div>\n </section>\n <section class=\"modal-body sfx-p-30\" *ngIf=\"currentStep === 1\">\n <ng-container>\n <div class=\"toaster-alert-container-global\">\n <symphony-toaster-alert\n *ngIf=\"showSuccessToast\"\n [alertModel]=\"successToast\"\n (hideAlert)=\"onHideSuccessToast()\"\n ></symphony-toaster-alert>\n <symphony-toaster-alert\n *ngIf=\"showFailureToast\"\n [alertModel]=\"failureToast\"\n (hideAlert)=\"onHideFailureToast()\"\n ></symphony-toaster-alert>\n </div>\n <div *ngIf=\"isLoading\" class=\"sfx-mt-30 sfx-mb-30\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n <div *ngIf=\"hasError\" class=\"sfx-mt-30\">\n <symphony-paragraph text=\"We couldn't retrieve the candidate data. The information cannot be displayed at this time, please try again.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && (!model?.suggestions || model.suggestions.length === 0)\" class=\"sfx-mt-30\">\n <symphony-paragraph text=\"No more duplicates exist for this selected contact. Please try again later\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && !confirmSuggestion && model?.suggestions?.length\" class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <p class=\"sfx-mt-20 sfx-font-bold\">{{ model.selectedContact.name }} [{{ model.selectedContact.id }}]</p>\n <p>{{ model.selectedContact.email }}</p>\n <p *ngFor=\"let criterion of model.selectedContact.criteria\">{{ criterion.value }}</p>\n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 [text]=\"'Potential Duplicates (' + (model?.suggestions?.length || 0) + ')'\"></symphony-h5>\n <div class=\"scrollable-container card-wrapper\">\n <div\n *ngFor=\"let suggestion of model.suggestions; let i = index\"\n class=\"suggestion-card\"\n [ngClass]=\"{ selected: selected === suggestion }\"\n (click)=\"onSelect(suggestion)\"\n >\n <div class=\"card-header\">\n <symphony-input-radio\n [radioID]=\"suggestion.id\"\n [name]=\"'merge-suggestions'\"\n [isActive]=\"selected === suggestion\"\n (clicked)=\"onSelect(suggestion)\"\n ></symphony-input-radio> \n <div class=\"card-title sfx-font-bold\">\n {{ suggestion.name }} [{{ suggestion.id }}]\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <symphony-grid-cell-clicked-open-new-tab\n [newTabUrl]=\"getContactUrl(suggestion.id)\"\n ></symphony-grid-cell-clicked-open-new-tab>\n <symphony-icon-wrapper\n class=\"not-duplicate-icon-global\"\n title=\"Mark not duplicate\"\n (clicked)=\"onNotDuplicate(suggestion)\"\n >\n <symphony-icon [icon]=\"'si-exclude'\"></symphony-icon>\n </symphony-icon-wrapper>\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"suggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ suggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of suggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"suggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ suggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"suggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of suggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!isLoading && !hasError && confirmSuggestion\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <p class=\"sfx-mt-20 sfx-font-bold\">{{ model.selectedContact.name }} [{{ model.selectedContact.id }}]</p>\n <p>{{ model.selectedContact.email }}</p>\n <p *ngFor=\"let criterion of model.selectedContact.criteria\">{{ criterion }}</p>\n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Duplicate\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card confirm-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ confirmSuggestion.name }} [{{ confirmSuggestion.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ confirmSuggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of confirmSuggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ confirmSuggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"confirmSuggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of confirmSuggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </section>\n <section *ngIf=\"currentStep === 2\" class=\"modal-body merge-contacts-body\">\n <ng-content></ng-content>\n </section>\n <section *ngIf=\"currentStep === 1\" class=\"modal-footer\">\n <ng-container *ngIf=\"!confirmSuggestion; else confirmActions\">\n <symphony-button-v2 text=\"Close\" [isSecondary]=\"true\" (clicked)=\"onCancel()\"></symphony-button-v2>\n <symphony-button-v2 text=\"Next\" [disabled]=\"!selected || !!confirmSuggestion\" (clicked)=\"onNext()\"></symphony-button-v2>\n </ng-container>\n <ng-template #confirmActions>\n <div class=\"confirm-actions\">\n <symphony-button-v2\n text=\"Back\"\n [isSecondary]=\"true\"\n (clicked)=\"cancelNotDuplicate()\"\n ></symphony-button-v2>\n <symphony-button-v2\n text=\"Confirm\"\n (clicked)=\"confirmOnNotDuplicate()\"\n ></symphony-button-v2>\n </div>\n </ng-template>\n </section>\n</div>\n", styles: [".scrollable-container{max-height:500px;display:flex;flex-direction:column;overflow-y:auto;padding:20px 10px;gap:10px}.radio-item{display:flex;align-items:flex-start;gap:5px}.radio-label{display:flex;align-items:center;gap:1px}.radio-details{padding-left:24px}.radio-action{margin-left:auto;display:flex}.icon-upwards{margin-top:-1px!important;margin-bottom:auto}.modal-footer{display:flex;gap:10px;width:100%;justify-content:flex-end}.confirm-actions{display:flex;gap:10px}.suggestion-confirm{margin-top:38px}.pending-icon{margin-right:8px}.suggestion-card{border:1px solid #e4e7ef;border-radius:10px;padding:20px;background:#ffffff}.suggestion-card .card-header{display:flex;align-items:flex-start}.suggestion-card .card-title{flex:1;word-break:break-word}.suggestion-card .card-actions{margin-left:auto;display:flex;gap:10px}.suggestion-card .card-body{margin-top:15px;display:flex;flex-direction:column;gap:8px}.suggestion-card .info-row{display:flex;align-items:baseline;gap:8px;word-break:break-word}.suggestion-card .match-criteria{margin-top:10px}.suggestion-card .match-label{font-size:12px;font-weight:500;margin-bottom:8px}.suggestion-card .criteria-list{display:flex;flex-wrap:wrap;gap:8px}.sfx-modal.modal-container .modal-body.merge-contacts-body{padding:0}\n"] }]
|
|
133
|
+
args: [{ selector: 'symphony-merge-contacts-modal', template: "<div class=\"sfx sfx-modal modal-container\" *ngIf=\"model\">\n <section class=\"modal-header sfx-p-30 sfx-pt-40\">\n <div class=\"modal-title\">\n <div class=\"row\">\n <div class=\"col-xs-8 col-sm-8 col-md-8 col-lg-8\">\n <ng-container *ngIf=\"getStepTitle(currentStep) as stepTitle\">\n <symphony-h4 [text]=\"stepTitle\"></symphony-h4>\n </ng-container> \n </div>\n <div class=\"col-xs-4 col-sm-4 col-md-4 col-lg-4\">\n <symphony-icon\n class=\"pull-right\"\n [icon]=\"'si-close-modal'\"\n (clicked)=\"onCancel()\"\n ></symphony-icon>\n </div>\n <div\n class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sfx-mt-15\"\n *ngIf=\"getStepDescription(currentStep)\"\n >\n <ng-container *ngIf=\"getStepDescription(currentStep) as stepDescription\">\n <symphony-paragraph [text]=\"stepDescription\"></symphony-paragraph>\n </ng-container> \n </div>\n </div>\n </div>\n </section>\n <section class=\"modal-body sfx-p-30\" *ngIf=\"currentStep === 1\">\n <ng-container>\n <div class=\"toaster-alert-container-global\">\n <symphony-toaster-alert\n *ngIf=\"showSuccessToast\"\n [alertModel]=\"successToast\"\n (hideAlert)=\"onHideSuccessToast()\"\n ></symphony-toaster-alert>\n <symphony-toaster-alert\n *ngIf=\"showFailureToast\"\n [alertModel]=\"failureToast\"\n (hideAlert)=\"onHideFailureToast()\"\n ></symphony-toaster-alert>\n </div>\n <div *ngIf=\"isLoading\" class=\"sfx-mt-30 sfx-mb-30\">\n <symphony-sfx-loader></symphony-sfx-loader>\n </div>\n <div *ngIf=\"hasError\" class=\"sfx-mt-20 sfx-mb-20 sfx-txt-center\">\n <symphony-paragraph text=\"We couldn't retrieve the candidate data. The information cannot be displayed at this time, please try again.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && (!model?.suggestions || model.suggestions.length === 0)\" class=\"sfx-mt-20 sfx-mb-20 sfx-txt-center\">\n <symphony-paragraph text=\"No more duplicates exist for this selected contact. Please try again later.\"></symphony-paragraph>\n </div>\n <div *ngIf=\"!isLoading && !hasError && !confirmSuggestion && model?.suggestions?.length\" class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5> \n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card selected-contact-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ model.selectedContact.name }} [{{ model.selectedContact.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"model.selectedContact.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ model.selectedContact.email }}</span>\n </div>\n <div\n class=\"info-row\"\n *ngFor=\"let criterion of model.selectedContact.criteria\"\n >\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"model.selectedContact.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ model.selectedContact.atsId }}</span>\n </div>\n </div>\n </div>\n </div> \n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 [text]=\"'Potential Duplicates (' + (model?.suggestions?.length || 0) + ')'\"></symphony-h5>\n <div class=\"scrollable-container card-wrapper\">\n <div\n *ngFor=\"let suggestion of model.suggestions; let i = index\"\n class=\"suggestion-card\"\n [ngClass]=\"{ selected: selected === suggestion }\"\n (click)=\"onSelect(suggestion)\"\n >\n <div class=\"card-header\">\n <symphony-input-radio\n [radioID]=\"suggestion.id\"\n [name]=\"'merge-suggestions'\"\n [isActive]=\"selected === suggestion\"\n (clicked)=\"onSelect(suggestion)\"\n ></symphony-input-radio> \n <div class=\"card-title sfx-font-bold\">\n {{ suggestion.name }} [{{ suggestion.id }}]\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <symphony-grid-cell-clicked-open-new-tab\n [newTabUrl]=\"getContactUrl(suggestion.id)\"\n ></symphony-grid-cell-clicked-open-new-tab>\n <symphony-icon-wrapper\n class=\"not-duplicate-icon-global\"\n title=\"Mark not duplicate\"\n (clicked)=\"onNotDuplicate(suggestion)\"\n >\n <symphony-icon [icon]=\"'si-exclude'\"></symphony-icon>\n </symphony-icon-wrapper>\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"suggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ suggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of suggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"suggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ suggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"suggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of suggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!isLoading && !hasError && confirmSuggestion\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Contact\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card selected-contact-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ model.selectedContact.name }} [{{ model.selectedContact.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"model.selectedContact.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ model.selectedContact.email }}</span>\n </div>\n <div\n class=\"info-row\"\n *ngFor=\"let criterion of model.selectedContact.criteria\"\n >\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"model.selectedContact.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ model.selectedContact.atsId }}</span>\n </div>\n </div>\n </div>\n </div> \n </div>\n <div class=\"col-xs-12 col-sm-6 col-md-6 col-lg-6\">\n <symphony-h5 text=\"Selected Duplicate\"></symphony-h5>\n <div class=\"card-wrapper sfx-mt-20\">\n <div class=\"suggestion-card confirm-card\">\n <div class=\"card-header\">\n <div class=\"card-title sfx-font-bold\">\n {{ confirmSuggestion.name }} [{{ confirmSuggestion.id }}]\n </div>\n </div>\n <div class=\"card-body\">\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.email\">\n <symphony-icon [icon]=\"'si-email-send'\"></symphony-icon>\n <span>{{ confirmSuggestion.email }}</span>\n </div>\n <div class=\"info-row\" *ngFor=\"let criterion of confirmSuggestion.criteria\">\n <symphony-icon\n *ngIf=\"criterion.iconClass\"\n [icon]=\"criterion.iconClass\"\n ></symphony-icon>\n <span>{{ criterion.value }}</span>\n </div>\n <div class=\"info-row\" *ngIf=\"confirmSuggestion.atsId\">\n <span class=\"sfx-txt-gray sfx-font-bold sfx-font12\">ATS ID:</span>\n <span>{{ confirmSuggestion.atsId }}</span>\n </div>\n </div>\n <div class=\"match-criteria\" *ngIf=\"confirmSuggestion.statuses?.length\">\n <div class=\"match-label sfx-txt-gray\">Contacts share the same:</div>\n <div class=\"criteria-list\">\n <symphony-status-pill\n *ngFor=\"let status of confirmSuggestion.statuses\"\n [statusPillModel]=\"{ statusClass: 'statusGrey', value: status }\"\n ></symphony-status-pill>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </section>\n <section *ngIf=\"currentStep === 2\" class=\"modal-body merge-contacts-body\">\n <ng-content></ng-content>\n </section>\n <section *ngIf=\"currentStep === 1\" class=\"modal-footer\">\n <ng-container *ngIf=\"!confirmSuggestion; else confirmActions\">\n <symphony-button-v2 text=\"Close\" [isSecondary]=\"true\" (clicked)=\"onCancel()\"></symphony-button-v2>\n <symphony-button-v2 text=\"Next\" [disabled]=\"!selected || !!confirmSuggestion\" (clicked)=\"onNext()\"></symphony-button-v2>\n </ng-container>\n <ng-template #confirmActions>\n <div class=\"confirm-actions\">\n <symphony-button-v2\n text=\"Back\"\n [isSecondary]=\"true\"\n (clicked)=\"cancelNotDuplicate()\"\n ></symphony-button-v2>\n <symphony-button-v2\n text=\"Confirm\"\n (clicked)=\"confirmOnNotDuplicate()\"\n ></symphony-button-v2>\n </div>\n </ng-template>\n </section>\n</div>\n", styles: [".scrollable-container{max-height:500px;display:flex;flex-direction:column;overflow-y:auto;padding:20px 10px;gap:10px}.radio-item{display:flex;align-items:flex-start;gap:5px}.radio-label{display:flex;align-items:center;gap:1px}.radio-details{padding-left:24px}.radio-action{margin-left:auto;display:flex}.icon-upwards{margin-top:-1px!important;margin-bottom:auto}.modal-footer{display:flex;gap:10px;width:100%;justify-content:flex-end}.confirm-actions{display:flex;gap:10px}.suggestion-confirm{margin-top:38px}.pending-icon{margin-right:8px}.suggestion-card{border:1px solid #e4e7ef;border-radius:10px;padding:20px;background:#ffffff}.suggestion-card .card-header{display:flex;align-items:flex-start}.suggestion-card .card-title{flex:1;word-break:break-word}.suggestion-card .card-actions{margin-left:auto;display:flex;gap:10px}.suggestion-card .card-body{margin-top:15px;display:flex;flex-direction:column;gap:8px}.suggestion-card .info-row{display:flex;align-items:baseline;gap:8px;word-break:break-word}.suggestion-card .match-criteria{margin-top:10px}.suggestion-card .match-label{font-size:12px;font-weight:500;margin-bottom:8px}.suggestion-card .criteria-list{display:flex;flex-wrap:wrap;gap:8px}.sfx-modal.modal-container .modal-body.merge-contacts-body{padding:0}\n"] }]
|
|
134
134
|
}], ctorParameters: function () { return []; }, propDecorators: { model: [{
|
|
135
135
|
type: Input
|
|
136
136
|
}], isLoading: [{
|
|
@@ -168,4 +168,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
|
|
|
168
168
|
}], currentStep: [{
|
|
169
169
|
type: Input
|
|
170
170
|
}] } });
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9vcmdhbmlzbXMvbWVyZ2UtY29udGFjdHMtbW9kYWwvbWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9vcmdhbmlzbXMvbWVyZ2UtY29udGFjdHMtbW9kYWwvbWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPdkQsTUFBTSxPQUFPLDJCQUEyQjtJQXlCdEM7UUF2QlMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBbUQsRUFBRSxDQUFDO1FBQzdELFNBQUksR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUNsRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNsQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUdyQyxDQUFDO1FBQ0ssb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUM3RCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFFdEUsbUNBQThCLEdBQUcsSUFB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Q3ZDLENBQUM7SUFFTyxxQkFBcUIsQ0FDM0IsSUFBWTtRQUVaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhDLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtZQUMxQixPQUFPO2dCQUNMLEdBQUcsU0FBUztnQkFDWixHQUFHLFNBQVM7YUFDYixDQUFDO1NBQ0g7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzt3SEFoSlUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsa3FCQ2J4QyxpL1JBZ01BOzJGRG5MYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsK0JBQStCOzBFQUtoQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksSUFBSTtzQkFBYixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0UsZUFBZTtzQkFBdkIsS0FBSztnQkFDSSw4QkFBOEI7c0JBQXZDLE1BQU07Z0JBQ0UsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lcmdlQ29udGFjdHNNb2RhbE1vZGVsLCBNZXJnZUNvbnRhY3RzU3RlcENvcHksIE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfSBmcm9tICcuL21lcmdlLWNvbnRhY3RzLW1vZGFsLm1vZGVsJztcbmltcG9ydCB7XG4gIEFsZXJ0RHVyYXRpb24sXG4gIFRvYXN0ZXJBbGVydE1vZGVsLFxuICBUb2FzdGVyQWxlcnRUeXBlLFxufSBmcm9tICcuLi8uLi9hdG9tcy90b2FzdGVyLWFsZXJ0L3RvYXN0ZXItYWxlcnQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzeW1waG9ueS1tZXJnZS1jb250YWN0cy1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXJnZS1jb250YWN0cy1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lcmdlLWNvbnRhY3RzLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWVyZ2VDb250YWN0c01vZGFsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbW9kZWw6IE1lcmdlQ29udGFjdHNNb2RhbE1vZGVsO1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzRXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgc3RlcENvcHk6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgTWVyZ2VDb250YWN0c1N0ZXBDb3B5Pj4gPSB7fTsgIFxuICBAT3V0cHV0KCkgbmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8TWVyZ2VDb250YWN0U3VnZ2VzdGlvbj4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG5vdER1cGxpY2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHNlbGVjdGVkOiBNZXJnZUNvbnRhY3RzTW9kYWxNb2RlbFsnc2VsZWN0ZWRDb250YWN0J107XG4gICAgc3VnZ2VzdGlvbjogTWVyZ2VDb250YWN0U3VnZ2VzdGlvbjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVyZ2VDb250YWN0U3VnZ2VzdGlvbj4oKTtcbiAgQE91dHB1dCgpIGhpZGVTdWNjZXNzVG9hc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBoaWRlRmFpbHVyZVRvYXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVxdWVzdENvbmZpcm1TdWdnZXN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxNZXJnZUNvbnRhY3RTdWdnZXN0aW9uPigpO1xuICBASW5wdXQoKSBjb25maXJtU3RlcENvcHk/OiBNZXJnZUNvbnRhY3RzU3RlcENvcHk7ICBcbiAgQE91dHB1dCgpIHJlcXVlc3RDYW5jZWxDb25maXJtU3VnZ2VzdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQElucHV0KCkgc2VsZWN0ZWQ6IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgY29uZmlybVN1Z2dlc3Rpb246IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgc2hvd1N1Y2Nlc3NUb2FzdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RmFpbHVyZVRvYXN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGN1cnJlbnRTdGVwOiBudW1iZXIgPSAxO1xuICBzdWNjZXNzVG9hc3Q6IFRvYXN0ZXJBbGVydE1vZGVsO1xuICBmYWlsdXJlVG9hc3Q6IFRvYXN0ZXJBbGVydE1vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB0aGlzLnN1Y2Nlc3NUb2FzdCA9IG5ldyBUb2FzdGVyQWxlcnRNb2RlbCgpO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC50eXBlID0gVG9hc3RlckFsZXJ0VHlwZS5TdWNjZXNzO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC5tZXNzYWdlID0gXCJDb250YWN0IHJlbW92ZWQgZnJvbSBkdXBsaWNhdGVzIHN1Y2Nlc3NmdWxseVwiO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC5kdXJhdGlvbiA9IEFsZXJ0RHVyYXRpb24uRml2ZVNlY29uZHM7XG4gIHRoaXMuc3VjY2Vzc1RvYXN0LnNob3dDbG9zZUljb24gPSB0cnVlO1xuXG4gIHRoaXMuZmFpbHVyZVRvYXN0ID0gbmV3IFRvYXN0ZXJBbGVydE1vZGVsKCk7XG4gIHRoaXMuZmFpbHVyZVRvYXN0LnR5cGUgPSBUb2FzdGVyQWxlcnRUeXBlLkVycm9yO1xuICB0aGlzLmZhaWx1cmVUb2FzdC5tZXNzYWdlID0gXCJGYWlsZWQgdG8gcmVtb3ZlIGNvbnRhY3QgZnJvbSBkdXBsaWNhdGVzXCI7XG4gIHRoaXMuZmFpbHVyZVRvYXN0LmR1cmF0aW9uID0gQWxlcnREdXJhdGlvbi5GaXZlU2Vjb25kcztcbiAgdGhpcy5mYWlsdXJlVG9hc3Quc2hvd0Nsb3NlSWNvbiA9IHRydWU7XG4gIH1cblxuICBvbk5leHQoKSB7XG4gICAgdGhpcy5uZXh0LmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gIH1cblxuICBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvblNlbGVjdChzdWdnZXN0aW9uOiBNZXJnZUNvbnRhY3RTdWdnZXN0aW9uKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIG9uTm90RHVwbGljYXRlKHN1Z2dlc3Rpb246IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24pIHtcbiAgICB0aGlzLnJlcXVlc3RDb25maXJtU3VnZ2VzdGlvbi5lbWl0KHN1Z2dlc3Rpb24pO1xuICB9XG5cbiAgY2FuY2VsTm90RHVwbGljYXRlKCkge1xuICAgIHRoaXMucmVxdWVzdENhbmNlbENvbmZpcm1TdWdnZXN0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIGNvbmZpcm1Pbk5vdER1cGxpY2F0ZSgpIHtcbiAgICBpZiAodGhpcy5jb25maXJtU3VnZ2VzdGlvbikge1xuICAgICAgdGhpcy5ub3REdXBsaWNhdGUuZW1pdCh7XG4gICAgICAgIHNlbGVjdGVkOiB0aGlzLm1vZGVsLnNlbGVjdGVkQ29udGFjdCxcbiAgICAgICAgc3VnZ2VzdGlvbjogdGhpcy5jb25maXJtU3VnZ2VzdGlvbixcbiAgICAgIH0pO1xuICAgICB9XG4gIH1cblxuICBoYW5kbGVOb3REdXBsaWNhdGVTdWNjZXNzKCkge1xuICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmNvbmZpcm1TdWdnZXN0aW9uO1xuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICB0aGlzLm1vZGVsLnN1Z2dlc3Rpb25zID0gdGhpcy5tb2RlbC5zdWdnZXN0aW9ucy5maWx0ZXIoXG4gICAgICAgIChzKSA9PiBzICE9PSByZW1vdmVkXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmZpcm1TdWdnZXN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuc2hvd1N1Y2Nlc3NUb2FzdCA9IHRydWU7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5vdER1cGxpY2F0ZUVycm9yKCkge1xuICAgIHRoaXMuc2hvd0ZhaWx1cmVUb2FzdCA9IHRydWU7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uSGlkZVN1Y2Nlc3NUb2FzdCgpIHtcbiAgICB0aGlzLmhpZGVTdWNjZXNzVG9hc3QuZW1pdCgpO1xuICB9XG4gIG9uSGlkZUZhaWx1cmVUb2FzdCgpIHtcbiAgICB0aGlzLmhpZGVGYWlsdXJlVG9hc3QuZW1pdCgpO1xuICB9XG5cbiAgZ2V0Q29udGFjdFVybChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICBjb25zdCBbYmFzZVVybF0gPSB1cmwuc3BsaXQoJyMnKTtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0jL2NhbmRpZGF0ZXByb2ZpbGV2aWV3P2lkPSR7aWR9YDtcbiAgfVxuXG4gIGdldFN0ZXBUaXRsZShzdGVwOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBDb3B5KHN0ZXApPy50aXRsZTtcbiAgfVxuXG4gIGdldFN0ZXBEZXNjcmlwdGlvbihzdGVwOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBDb3B5KHN0ZXApPy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RlcENvcHkoc3RlcDogbnVtYmVyKTogTWVyZ2VDb250YWN0c1N0ZXBDb3B5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5jb25maXJtU3VnZ2VzdGlvbiAmJiBzdGVwID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb25maXJtU3VnZ2VzdGlvbkNvcHkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDb25maWd1cmVkU3RlcENvcHkoc3RlcCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbmZpcm1TdWdnZXN0aW9uQ29weSgpOiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbmZpcm1Db3B5OiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgPSB7XG4gICAgICAuLi4odGhpcy5tb2RlbD8uY29uZmlybVN0ZXBDb3B5ID8/IHt9KSxcbiAgICAgIC4uLih0aGlzLmNvbmZpcm1TdGVwQ29weSA/PyB7fSksXG4gICAgfTtcblxuICAgIGlmIChjb25maXJtQ29weS50aXRsZSB8fCBjb25maXJtQ29weS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGNvbmZpcm1Db3B5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldENvbmZpZ3VyZWRTdGVwQ29weSgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlndXJlZFN0ZXBDb3B5KFxuICAgIHN0ZXA6IG51bWJlclxuICApOiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1vZGVsQ29weSA9IHRoaXMubW9kZWw/LnN0ZXBDb3B5Py5bc3RlcF07XG4gICAgY29uc3QgaW5wdXRDb3B5ID0gdGhpcy5zdGVwQ29weT8uW3N0ZXBdO1xuXG4gICAgaWYgKG1vZGVsQ29weSB8fCBpbnB1dENvcHkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1vZGVsQ29weSxcbiAgICAgICAgLi4uaW5wdXRDb3B5LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIFxufVxuIiwiPGRpdiBjbGFzcz1cInNmeCBzZngtbW9kYWwgbW9kYWwtY29udGFpbmVyXCIgKm5nSWY9XCJtb2RlbFwiPlxuICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWhlYWRlciBzZngtcC0zMCBzZngtcHQtNDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy04IGNvbC1zbS04IGNvbC1tZC04IGNvbC1sZy04XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFN0ZXBUaXRsZShjdXJyZW50U3RlcCkgYXMgc3RlcFRpdGxlXCI+XG4gICAgICAgICAgICA8c3ltcGhvbnktaDQgW3RleHRdPVwic3RlcFRpdGxlXCI+PC9zeW1waG9ueS1oND5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTQgY29sLXNtLTQgY29sLW1kLTQgY29sLWxnLTRcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJwdWxsLXJpZ2h0XCJcbiAgICAgICAgICAgIFtpY29uXT1cIidzaS1jbG9zZS1tb2RhbCdcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiXG4gICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBzZngtbXQtMTVcIlxuICAgICAgICAgICpuZ0lmPVwiZ2V0U3RlcERlc2NyaXB0aW9uKGN1cnJlbnRTdGVwKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RlcERlc2NyaXB0aW9uKGN1cnJlbnRTdGVwKSBhcyBzdGVwRGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxzeW1waG9ueS1wYXJhZ3JhcGggW3RleHRdPVwic3RlcERlc2NyaXB0aW9uXCI+PC9zeW1waG9ueS1wYXJhZ3JhcGg+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1ib2R5IHNmeC1wLTMwXCIgKm5nSWY9XCJjdXJyZW50U3RlcCA9PT0gMVwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cInRvYXN0ZXItYWxlcnQtY29udGFpbmVyLWdsb2JhbFwiPlxuICAgICAgICA8c3ltcGhvbnktdG9hc3Rlci1hbGVydFxuICAgICAgICAgICpuZ0lmPVwic2hvd1N1Y2Nlc3NUb2FzdFwiXG4gICAgICAgICAgW2FsZXJ0TW9kZWxdPVwic3VjY2Vzc1RvYXN0XCJcbiAgICAgICAgICAoaGlkZUFsZXJ0KT1cIm9uSGlkZVN1Y2Nlc3NUb2FzdCgpXCJcbiAgICAgICAgPjwvc3ltcGhvbnktdG9hc3Rlci1hbGVydD5cbiAgICAgIDxzeW1waG9ueS10b2FzdGVyLWFsZXJ0XG4gICAgICAgICpuZ0lmPVwic2hvd0ZhaWx1cmVUb2FzdFwiXG4gICAgICAgIFthbGVydE1vZGVsXT1cImZhaWx1cmVUb2FzdFwiXG4gICAgICAgIChoaWRlQWxlcnQpPVwib25IaWRlRmFpbHVyZVRvYXN0KClcIlxuICAgICAgPjwvc3ltcGhvbnktdG9hc3Rlci1hbGVydD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJzZngtbXQtMzAgc2Z4LW1iLTMwXCI+XG4gICAgICA8c3ltcGhvbnktc2Z4LWxvYWRlcj48L3N5bXBob255LXNmeC1sb2FkZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImhhc0Vycm9yXCIgY2xhc3M9XCJzZngtbXQtMzBcIj5cbiAgICAgIDxzeW1waG9ueS1wYXJhZ3JhcGggdGV4dD1cIldlIGNvdWxkbid0IHJldHJpZXZlIHRoZSBjYW5kaWRhdGUgZGF0YS4gVGhlIGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkaXNwbGF5ZWQgYXQgdGhpcyB0aW1lLCBwbGVhc2UgdHJ5IGFnYWluLlwiPjwvc3ltcGhvbnktcGFyYWdyYXBoPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nICYmICFoYXNFcnJvciAmJiAoIW1vZGVsPy5zdWdnZXN0aW9ucyB8fCBtb2RlbC5zdWdnZXN0aW9ucy5sZW5ndGggPT09IDApXCIgY2xhc3M9XCJzZngtbXQtMzBcIj5cbiAgICAgIDxzeW1waG9ueS1wYXJhZ3JhcGggdGV4dD1cIk5vIG1vcmUgZHVwbGljYXRlcyBleGlzdCBmb3IgdGhpcyBzZWxlY3RlZCBjb250YWN0LiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyXCI+PC9zeW1waG9ueS1wYXJhZ3JhcGg+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWhhc0Vycm9yICYmICFjb25maXJtU3VnZ2VzdGlvbiAmJiBtb2RlbD8uc3VnZ2VzdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC02IGNvbC1sZy02XCI+XG4gICAgICAgIDxzeW1waG9ueS1oNSB0ZXh0PVwiU2VsZWN0ZWQgQ29udGFjdFwiPjwvc3ltcGhvbnktaDU+XG4gICAgICAgIDxwIGNsYXNzPVwic2Z4LW10LTIwIHNmeC1mb250LWJvbGRcIj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QubmFtZSB9fSAgW3t7IG1vZGVsLnNlbGVjdGVkQ29udGFjdC5pZCB9fV08L3A+XG4gICAgICAgIDxwPnt7IG1vZGVsLnNlbGVjdGVkQ29udGFjdC5lbWFpbCB9fTwvcD5cbiAgICAgICAgPHAgKm5nRm9yPVwibGV0IGNyaXRlcmlvbiBvZiBtb2RlbC5zZWxlY3RlZENvbnRhY3QuY3JpdGVyaWFcIj57eyBjcml0ZXJpb24udmFsdWUgfX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICA8c3ltcGhvbnktaDUgW3RleHRdPVwiJ1BvdGVudGlhbCBEdXBsaWNhdGVzICgnICsgKG1vZGVsPy5zdWdnZXN0aW9ucz8ubGVuZ3RoIHx8IDApICsgJyknXCI+PC9zeW1waG9ueS1oNT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGFibGUtY29udGFpbmVyIGNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIG1vZGVsLnN1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbi1jYXJkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHNlbGVjdGVkID09PSBzdWdnZXN0aW9uIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KHN1Z2dlc3Rpb24pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHN5bXBob255LWlucHV0LXJhZGlvXG4gICAgICAgICAgICAgICAgW3JhZGlvSURdPVwic3VnZ2VzdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ21lcmdlLXN1Z2dlc3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cInNlbGVjdGVkID09PSBzdWdnZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvblNlbGVjdChzdWdnZXN0aW9uKVwiXG4gICAgICAgICAgICAgID48L3N5bXBob255LWlucHV0LXJhZGlvPiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHNmeC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBzdWdnZXN0aW9uLm5hbWUgfX0gW3t7IHN1Z2dlc3Rpb24uaWQgfX1dXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1hY3Rpb25zXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1ncmlkLWNlbGwtY2xpY2tlZC1vcGVuLW5ldy10YWJcbiAgICAgICAgICAgICAgICAgIFtuZXdUYWJVcmxdPVwiZ2V0Q29udGFjdFVybChzdWdnZXN0aW9uLmlkKVwiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktZ3JpZC1jZWxsLWNsaWNrZWQtb3Blbi1uZXctdGFiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uLXdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm90LWR1cGxpY2F0ZS1pY29uLWdsb2JhbFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIk1hcmsgbm90IGR1cGxpY2F0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbk5vdER1cGxpY2F0ZShzdWdnZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb24gW2ljb25dPVwiJ3NpLWV4Y2x1ZGUnXCI+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3ltcGhvbnktaWNvbi13cmFwcGVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cInN1Z2dlc3Rpb24uZW1haWxcIj5cbiAgICAgICAgICAgICAgICA8c3ltcGhvbnktaWNvbiBbaWNvbl09XCInc2ktZW1haWwtc2VuZCdcIj48L3N5bXBob255LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3VnZ2VzdGlvbi5lbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0Zvcj1cImxldCBjcml0ZXJpb24gb2Ygc3VnZ2VzdGlvbi5jcml0ZXJpYVwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNyaXRlcmlvbi5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBjcml0ZXJpb24udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cInN1Z2dlc3Rpb24uYXRzSWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmeC10eHQtZ3JheSBzZngtZm9udC1ib2xkIHNmeC1mb250MTJcIj5BVFMgSUQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN1Z2dlc3Rpb24uYXRzSWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtY3JpdGVyaWFcIiAqbmdJZj1cInN1Z2dlc3Rpb24uc3RhdHVzZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtbGFiZWwgc2Z4LXR4dC1ncmF5XCI+Q29udGFjdHMgc2hhcmUgdGhlIHNhbWU6PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcml0ZXJpYS1saXN0XCI+XG4gICAgICAgICAgICAgICAgPHN5bXBob255LXN0YXR1cy1waWxsXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIHN1Z2dlc3Rpb24uc3RhdHVzZXNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXR1c1BpbGxNb2RlbF09XCJ7IHN0YXR1c0NsYXNzOiAnc3RhdHVzR3JleScsIHZhbHVlOiBzdGF0dXMgfVwiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktc3RhdHVzLXBpbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWhhc0Vycm9yICYmIGNvbmZpcm1TdWdnZXN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaDUgdGV4dD1cIlNlbGVjdGVkIENvbnRhY3RcIj48L3N5bXBob255LWg1PlxuICAgICAgICAgIDxwIGNsYXNzPVwic2Z4LW10LTIwIHNmeC1mb250LWJvbGRcIj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QubmFtZSB9fSAgW3t7IG1vZGVsLnNlbGVjdGVkQ29udGFjdC5pZCB9fV08L3A+XG4gICAgICAgICAgPHA+e3sgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmVtYWlsIH19PC9wPlxuICAgICAgICAgIDxwICpuZ0Zvcj1cImxldCBjcml0ZXJpb24gb2YgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmNyaXRlcmlhXCI+e3sgY3JpdGVyaW9uIH19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtNiBjb2wtbGctNlwiPlxuICAgICAgICAgIDxzeW1waG9ueS1oNSB0ZXh0PVwiU2VsZWN0ZWQgRHVwbGljYXRlXCI+PC9zeW1waG9ueS1oNT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC13cmFwcGVyIHNmeC1tdC0yMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb24tY2FyZCBjb25maXJtLWNhcmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgc2Z4LWZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAge3sgY29uZmlybVN1Z2dlc3Rpb24ubmFtZSB9fSBbe3sgY29uZmlybVN1Z2dlc3Rpb24uaWQgfX1dXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCIgKm5nSWY9XCJjb25maXJtU3VnZ2VzdGlvbi5lbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb24gW2ljb25dPVwiJ3NpLWVtYWlsLXNlbmQnXCI+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29uZmlybVN1Z2dlc3Rpb24uZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCIgKm5nRm9yPVwibGV0IGNyaXRlcmlvbiBvZiBjb25maXJtU3VnZ2VzdGlvbi5jcml0ZXJpYVwiPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcml0ZXJpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICA+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY3JpdGVyaW9uLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwiY29uZmlybVN1Z2dlc3Rpb24uYXRzSWRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2Z4LXR4dC1ncmF5IHNmeC1mb250LWJvbGQgc2Z4LWZvbnQxMlwiPkFUUyBJRDo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb25maXJtU3VnZ2VzdGlvbi5hdHNJZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXRjaC1jcml0ZXJpYVwiICpuZ0lmPVwiY29uZmlybVN1Z2dlc3Rpb24uc3RhdHVzZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXRjaC1sYWJlbCBzZngtdHh0LWdyYXlcIj5Db250YWN0cyBzaGFyZSB0aGUgc2FtZTo8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JpdGVyaWEtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LXN0YXR1cy1waWxsXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdGF0dXMgb2YgY29uZmlybVN1Z2dlc3Rpb24uc3RhdHVzZXNcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhdHVzUGlsbE1vZGVsXT1cInsgc3RhdHVzQ2xhc3M6ICdzdGF0dXNHcmV5JywgdmFsdWU6IHN0YXR1cyB9XCJcbiAgICAgICAgICAgICAgICAgID48L3N5bXBob255LXN0YXR1cy1waWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3NlY3Rpb24+XG4gIDxzZWN0aW9uICpuZ0lmPVwiY3VycmVudFN0ZXAgPT09IDJcIiBjbGFzcz1cIm1vZGFsLWJvZHkgbWVyZ2UtY29udGFjdHMtYm9keVwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiAqbmdJZj1cImN1cnJlbnRTdGVwID09PSAxXCIgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbmZpcm1TdWdnZXN0aW9uOyBlbHNlIGNvbmZpcm1BY3Rpb25zXCI+XG4gICAgICA8c3ltcGhvbnktYnV0dG9uLXYyIHRleHQ9XCJDbG9zZVwiIFtpc1NlY29uZGFyeV09XCJ0cnVlXCIgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPjwvc3ltcGhvbnktYnV0dG9uLXYyPlxuICAgICAgPHN5bXBob255LWJ1dHRvbi12MiB0ZXh0PVwiTmV4dFwiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWQgfHwgISFjb25maXJtU3VnZ2VzdGlvblwiIChjbGlja2VkKT1cIm9uTmV4dCgpXCI+PC9zeW1waG9ueS1idXR0b24tdjI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25maXJtQWN0aW9ucz5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLWFjdGlvbnNcIj5cbiAgICAgICAgPHN5bXBob255LWJ1dHRvbi12MlxuICAgICAgICAgIHRleHQ9XCJCYWNrXCJcbiAgICAgICAgICBbaXNTZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiY2FuY2VsTm90RHVwbGljYXRlKClcIlxuICAgICAgICA+PC9zeW1waG9ueS1idXR0b24tdjI+XG4gICAgICAgIDxzeW1waG9ueS1idXR0b24tdjJcbiAgICAgICAgICB0ZXh0PVwiQ29uZmlybVwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiY29uZmlybU9uTm90RHVwbGljYXRlKClcIlxuICAgICAgICA+PC9zeW1waG9ueS1idXR0b24tdjI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3NlY3Rpb24+XG48L2Rpdj5cbiJdfQ==
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9vcmdhbmlzbXMvbWVyZ2UtY29udGFjdHMtbW9kYWwvbWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9vcmdhbmlzbXMvbWVyZ2UtY29udGFjdHMtbW9kYWwvbWVyZ2UtY29udGFjdHMtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPdkQsTUFBTSxPQUFPLDJCQUEyQjtJQXlCdEM7UUF2QlMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBbUQsRUFBRSxDQUFDO1FBQzdELFNBQUksR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUNsRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNsQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUdyQyxDQUFDO1FBQ0ssb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUM3RCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFFdEUsbUNBQThCLEdBQUcsSUFB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Q3ZDLENBQUM7SUFFTyxxQkFBcUIsQ0FDM0IsSUFBWTtRQUVaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhDLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtZQUMxQixPQUFPO2dCQUNMLEdBQUcsU0FBUztnQkFDWixHQUFHLFNBQVM7YUFDYixDQUFDO1NBQ0g7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzt3SEFoSlUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsa3FCQ2J4Qyw4cFdBb1BBOzJGRHZPYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsK0JBQStCOzBFQUtoQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksSUFBSTtzQkFBYixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0UsZUFBZTtzQkFBdkIsS0FBSztnQkFDSSw4QkFBOEI7c0JBQXZDLE1BQU07Z0JBQ0UsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lcmdlQ29udGFjdHNNb2RhbE1vZGVsLCBNZXJnZUNvbnRhY3RzU3RlcENvcHksIE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfSBmcm9tICcuL21lcmdlLWNvbnRhY3RzLW1vZGFsLm1vZGVsJztcbmltcG9ydCB7XG4gIEFsZXJ0RHVyYXRpb24sXG4gIFRvYXN0ZXJBbGVydE1vZGVsLFxuICBUb2FzdGVyQWxlcnRUeXBlLFxufSBmcm9tICcuLi8uLi9hdG9tcy90b2FzdGVyLWFsZXJ0L3RvYXN0ZXItYWxlcnQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzeW1waG9ueS1tZXJnZS1jb250YWN0cy1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXJnZS1jb250YWN0cy1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lcmdlLWNvbnRhY3RzLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWVyZ2VDb250YWN0c01vZGFsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbW9kZWw6IE1lcmdlQ29udGFjdHNNb2RhbE1vZGVsO1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzRXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgc3RlcENvcHk6IFBhcnRpYWw8UmVjb3JkPG51bWJlciwgTWVyZ2VDb250YWN0c1N0ZXBDb3B5Pj4gPSB7fTsgIFxuICBAT3V0cHV0KCkgbmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8TWVyZ2VDb250YWN0U3VnZ2VzdGlvbj4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG5vdER1cGxpY2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHNlbGVjdGVkOiBNZXJnZUNvbnRhY3RzTW9kYWxNb2RlbFsnc2VsZWN0ZWRDb250YWN0J107XG4gICAgc3VnZ2VzdGlvbjogTWVyZ2VDb250YWN0U3VnZ2VzdGlvbjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVyZ2VDb250YWN0U3VnZ2VzdGlvbj4oKTtcbiAgQE91dHB1dCgpIGhpZGVTdWNjZXNzVG9hc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBoaWRlRmFpbHVyZVRvYXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVxdWVzdENvbmZpcm1TdWdnZXN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxNZXJnZUNvbnRhY3RTdWdnZXN0aW9uPigpO1xuICBASW5wdXQoKSBjb25maXJtU3RlcENvcHk/OiBNZXJnZUNvbnRhY3RzU3RlcENvcHk7ICBcbiAgQE91dHB1dCgpIHJlcXVlc3RDYW5jZWxDb25maXJtU3VnZ2VzdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQElucHV0KCkgc2VsZWN0ZWQ6IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgY29uZmlybVN1Z2dlc3Rpb246IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgc2hvd1N1Y2Nlc3NUb2FzdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RmFpbHVyZVRvYXN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGN1cnJlbnRTdGVwOiBudW1iZXIgPSAxO1xuICBzdWNjZXNzVG9hc3Q6IFRvYXN0ZXJBbGVydE1vZGVsO1xuICBmYWlsdXJlVG9hc3Q6IFRvYXN0ZXJBbGVydE1vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB0aGlzLnN1Y2Nlc3NUb2FzdCA9IG5ldyBUb2FzdGVyQWxlcnRNb2RlbCgpO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC50eXBlID0gVG9hc3RlckFsZXJ0VHlwZS5TdWNjZXNzO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC5tZXNzYWdlID0gXCJDb250YWN0IHJlbW92ZWQgZnJvbSBkdXBsaWNhdGVzIHN1Y2Nlc3NmdWxseVwiO1xuICB0aGlzLnN1Y2Nlc3NUb2FzdC5kdXJhdGlvbiA9IEFsZXJ0RHVyYXRpb24uRml2ZVNlY29uZHM7XG4gIHRoaXMuc3VjY2Vzc1RvYXN0LnNob3dDbG9zZUljb24gPSB0cnVlO1xuXG4gIHRoaXMuZmFpbHVyZVRvYXN0ID0gbmV3IFRvYXN0ZXJBbGVydE1vZGVsKCk7XG4gIHRoaXMuZmFpbHVyZVRvYXN0LnR5cGUgPSBUb2FzdGVyQWxlcnRUeXBlLkVycm9yO1xuICB0aGlzLmZhaWx1cmVUb2FzdC5tZXNzYWdlID0gXCJGYWlsZWQgdG8gcmVtb3ZlIGNvbnRhY3QgZnJvbSBkdXBsaWNhdGVzXCI7XG4gIHRoaXMuZmFpbHVyZVRvYXN0LmR1cmF0aW9uID0gQWxlcnREdXJhdGlvbi5GaXZlU2Vjb25kcztcbiAgdGhpcy5mYWlsdXJlVG9hc3Quc2hvd0Nsb3NlSWNvbiA9IHRydWU7XG4gIH1cblxuICBvbk5leHQoKSB7XG4gICAgdGhpcy5uZXh0LmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gIH1cblxuICBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvblNlbGVjdChzdWdnZXN0aW9uOiBNZXJnZUNvbnRhY3RTdWdnZXN0aW9uKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIG9uTm90RHVwbGljYXRlKHN1Z2dlc3Rpb246IE1lcmdlQ29udGFjdFN1Z2dlc3Rpb24pIHtcbiAgICB0aGlzLnJlcXVlc3RDb25maXJtU3VnZ2VzdGlvbi5lbWl0KHN1Z2dlc3Rpb24pO1xuICB9XG5cbiAgY2FuY2VsTm90RHVwbGljYXRlKCkge1xuICAgIHRoaXMucmVxdWVzdENhbmNlbENvbmZpcm1TdWdnZXN0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIGNvbmZpcm1Pbk5vdER1cGxpY2F0ZSgpIHtcbiAgICBpZiAodGhpcy5jb25maXJtU3VnZ2VzdGlvbikge1xuICAgICAgdGhpcy5ub3REdXBsaWNhdGUuZW1pdCh7XG4gICAgICAgIHNlbGVjdGVkOiB0aGlzLm1vZGVsLnNlbGVjdGVkQ29udGFjdCxcbiAgICAgICAgc3VnZ2VzdGlvbjogdGhpcy5jb25maXJtU3VnZ2VzdGlvbixcbiAgICAgIH0pO1xuICAgICB9XG4gIH1cblxuICBoYW5kbGVOb3REdXBsaWNhdGVTdWNjZXNzKCkge1xuICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmNvbmZpcm1TdWdnZXN0aW9uO1xuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICB0aGlzLm1vZGVsLnN1Z2dlc3Rpb25zID0gdGhpcy5tb2RlbC5zdWdnZXN0aW9ucy5maWx0ZXIoXG4gICAgICAgIChzKSA9PiBzICE9PSByZW1vdmVkXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmZpcm1TdWdnZXN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuc2hvd1N1Y2Nlc3NUb2FzdCA9IHRydWU7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5vdER1cGxpY2F0ZUVycm9yKCkge1xuICAgIHRoaXMuc2hvd0ZhaWx1cmVUb2FzdCA9IHRydWU7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uSGlkZVN1Y2Nlc3NUb2FzdCgpIHtcbiAgICB0aGlzLmhpZGVTdWNjZXNzVG9hc3QuZW1pdCgpO1xuICB9XG4gIG9uSGlkZUZhaWx1cmVUb2FzdCgpIHtcbiAgICB0aGlzLmhpZGVGYWlsdXJlVG9hc3QuZW1pdCgpO1xuICB9XG5cbiAgZ2V0Q29udGFjdFVybChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICBjb25zdCBbYmFzZVVybF0gPSB1cmwuc3BsaXQoJyMnKTtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0jL2NhbmRpZGF0ZXByb2ZpbGV2aWV3P2lkPSR7aWR9YDtcbiAgfVxuXG4gIGdldFN0ZXBUaXRsZShzdGVwOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBDb3B5KHN0ZXApPy50aXRsZTtcbiAgfVxuXG4gIGdldFN0ZXBEZXNjcmlwdGlvbihzdGVwOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBDb3B5KHN0ZXApPy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RlcENvcHkoc3RlcDogbnVtYmVyKTogTWVyZ2VDb250YWN0c1N0ZXBDb3B5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5jb25maXJtU3VnZ2VzdGlvbiAmJiBzdGVwID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb25maXJtU3VnZ2VzdGlvbkNvcHkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDb25maWd1cmVkU3RlcENvcHkoc3RlcCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbmZpcm1TdWdnZXN0aW9uQ29weSgpOiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbmZpcm1Db3B5OiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgPSB7XG4gICAgICAuLi4odGhpcy5tb2RlbD8uY29uZmlybVN0ZXBDb3B5ID8/IHt9KSxcbiAgICAgIC4uLih0aGlzLmNvbmZpcm1TdGVwQ29weSA/PyB7fSksXG4gICAgfTtcblxuICAgIGlmIChjb25maXJtQ29weS50aXRsZSB8fCBjb25maXJtQ29weS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGNvbmZpcm1Db3B5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldENvbmZpZ3VyZWRTdGVwQ29weSgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlndXJlZFN0ZXBDb3B5KFxuICAgIHN0ZXA6IG51bWJlclxuICApOiBNZXJnZUNvbnRhY3RzU3RlcENvcHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1vZGVsQ29weSA9IHRoaXMubW9kZWw/LnN0ZXBDb3B5Py5bc3RlcF07XG4gICAgY29uc3QgaW5wdXRDb3B5ID0gdGhpcy5zdGVwQ29weT8uW3N0ZXBdO1xuXG4gICAgaWYgKG1vZGVsQ29weSB8fCBpbnB1dENvcHkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1vZGVsQ29weSxcbiAgICAgICAgLi4uaW5wdXRDb3B5LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIFxufVxuIiwiPGRpdiBjbGFzcz1cInNmeCBzZngtbW9kYWwgbW9kYWwtY29udGFpbmVyXCIgKm5nSWY9XCJtb2RlbFwiPlxuICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWhlYWRlciBzZngtcC0zMCBzZngtcHQtNDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy04IGNvbC1zbS04IGNvbC1tZC04IGNvbC1sZy04XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFN0ZXBUaXRsZShjdXJyZW50U3RlcCkgYXMgc3RlcFRpdGxlXCI+XG4gICAgICAgICAgICA8c3ltcGhvbnktaDQgW3RleHRdPVwic3RlcFRpdGxlXCI+PC9zeW1waG9ueS1oND5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTQgY29sLXNtLTQgY29sLW1kLTQgY29sLWxnLTRcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJwdWxsLXJpZ2h0XCJcbiAgICAgICAgICAgIFtpY29uXT1cIidzaS1jbG9zZS1tb2RhbCdcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiXG4gICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMiBzZngtbXQtMTVcIlxuICAgICAgICAgICpuZ0lmPVwiZ2V0U3RlcERlc2NyaXB0aW9uKGN1cnJlbnRTdGVwKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0U3RlcERlc2NyaXB0aW9uKGN1cnJlbnRTdGVwKSBhcyBzdGVwRGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxzeW1waG9ueS1wYXJhZ3JhcGggW3RleHRdPVwic3RlcERlc2NyaXB0aW9uXCI+PC9zeW1waG9ueS1wYXJhZ3JhcGg+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1ib2R5IHNmeC1wLTMwXCIgKm5nSWY9XCJjdXJyZW50U3RlcCA9PT0gMVwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cInRvYXN0ZXItYWxlcnQtY29udGFpbmVyLWdsb2JhbFwiPlxuICAgICAgICA8c3ltcGhvbnktdG9hc3Rlci1hbGVydFxuICAgICAgICAgICpuZ0lmPVwic2hvd1N1Y2Nlc3NUb2FzdFwiXG4gICAgICAgICAgW2FsZXJ0TW9kZWxdPVwic3VjY2Vzc1RvYXN0XCJcbiAgICAgICAgICAoaGlkZUFsZXJ0KT1cIm9uSGlkZVN1Y2Nlc3NUb2FzdCgpXCJcbiAgICAgICAgPjwvc3ltcGhvbnktdG9hc3Rlci1hbGVydD5cbiAgICAgIDxzeW1waG9ueS10b2FzdGVyLWFsZXJ0XG4gICAgICAgICpuZ0lmPVwic2hvd0ZhaWx1cmVUb2FzdFwiXG4gICAgICAgIFthbGVydE1vZGVsXT1cImZhaWx1cmVUb2FzdFwiXG4gICAgICAgIChoaWRlQWxlcnQpPVwib25IaWRlRmFpbHVyZVRvYXN0KClcIlxuICAgICAgPjwvc3ltcGhvbnktdG9hc3Rlci1hbGVydD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJzZngtbXQtMzAgc2Z4LW1iLTMwXCI+XG4gICAgICA8c3ltcGhvbnktc2Z4LWxvYWRlcj48L3N5bXBob255LXNmeC1sb2FkZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImhhc0Vycm9yXCIgY2xhc3M9XCJzZngtbXQtMjAgc2Z4LW1iLTIwIHNmeC10eHQtY2VudGVyXCI+XG4gICAgICA8c3ltcGhvbnktcGFyYWdyYXBoIHRleHQ9XCJXZSBjb3VsZG4ndCByZXRyaWV2ZSB0aGUgY2FuZGlkYXRlIGRhdGEuIFRoZSBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGlzcGxheWVkIGF0IHRoaXMgdGltZSwgcGxlYXNlIHRyeSBhZ2Fpbi5cIj48L3N5bXBob255LXBhcmFncmFwaD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZyAmJiAhaGFzRXJyb3IgJiYgKCFtb2RlbD8uc3VnZ2VzdGlvbnMgfHwgbW9kZWwuc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwKVwiIGNsYXNzPVwic2Z4LW10LTIwIHNmeC1tYi0yMCBzZngtdHh0LWNlbnRlclwiPlxuICAgICAgPHN5bXBob255LXBhcmFncmFwaCB0ZXh0PVwiTm8gbW9yZSBkdXBsaWNhdGVzIGV4aXN0IGZvciB0aGlzIHNlbGVjdGVkIGNvbnRhY3QuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXCI+PC9zeW1waG9ueS1wYXJhZ3JhcGg+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWhhc0Vycm9yICYmICFjb25maXJtU3VnZ2VzdGlvbiAmJiBtb2RlbD8uc3VnZ2VzdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC02IGNvbC1sZy02XCI+XG4gICAgICAgIDxzeW1waG9ueS1oNSB0ZXh0PVwiU2VsZWN0ZWQgQ29udGFjdFwiPjwvc3ltcGhvbnktaDU+ICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlciBzZngtbXQtMjBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvbi1jYXJkIHNlbGVjdGVkLWNvbnRhY3QtY2FyZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHNmeC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QubmFtZSB9fSBbe3sgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmlkIH19XVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cIm1vZGVsLnNlbGVjdGVkQ29udGFjdC5lbWFpbFwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uIFtpY29uXT1cIidzaS1lbWFpbC1zZW5kJ1wiPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QuZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbmZvLXJvd1wiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNyaXRlcmlvbiBvZiBtb2RlbC5zZWxlY3RlZENvbnRhY3QuY3JpdGVyaWFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHN5bXBob255LWljb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJjcml0ZXJpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICA+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNyaXRlcmlvbi52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwibW9kZWwuc2VsZWN0ZWRDb250YWN0LmF0c0lkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZngtdHh0LWdyYXkgc2Z4LWZvbnQtYm9sZCBzZngtZm9udDEyXCI+QVRTIElEOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QuYXRzSWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAgICAgICAgXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICA8c3ltcGhvbnktaDUgW3RleHRdPVwiJ1BvdGVudGlhbCBEdXBsaWNhdGVzICgnICsgKG1vZGVsPy5zdWdnZXN0aW9ucz8ubGVuZ3RoIHx8IDApICsgJyknXCI+PC9zeW1waG9ueS1oNT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGFibGUtY29udGFpbmVyIGNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIG1vZGVsLnN1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbi1jYXJkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHNlbGVjdGVkID09PSBzdWdnZXN0aW9uIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KHN1Z2dlc3Rpb24pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHN5bXBob255LWlucHV0LXJhZGlvXG4gICAgICAgICAgICAgICAgW3JhZGlvSURdPVwic3VnZ2VzdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ21lcmdlLXN1Z2dlc3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cInNlbGVjdGVkID09PSBzdWdnZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvblNlbGVjdChzdWdnZXN0aW9uKVwiXG4gICAgICAgICAgICAgID48L3N5bXBob255LWlucHV0LXJhZGlvPiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHNmeC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBzdWdnZXN0aW9uLm5hbWUgfX0gW3t7IHN1Z2dlc3Rpb24uaWQgfX1dXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1hY3Rpb25zXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1ncmlkLWNlbGwtY2xpY2tlZC1vcGVuLW5ldy10YWJcbiAgICAgICAgICAgICAgICAgIFtuZXdUYWJVcmxdPVwiZ2V0Q29udGFjdFVybChzdWdnZXN0aW9uLmlkKVwiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktZ3JpZC1jZWxsLWNsaWNrZWQtb3Blbi1uZXctdGFiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uLXdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm90LWR1cGxpY2F0ZS1pY29uLWdsb2JhbFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIk1hcmsgbm90IGR1cGxpY2F0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbk5vdER1cGxpY2F0ZShzdWdnZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb24gW2ljb25dPVwiJ3NpLWV4Y2x1ZGUnXCI+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3ltcGhvbnktaWNvbi13cmFwcGVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cInN1Z2dlc3Rpb24uZW1haWxcIj5cbiAgICAgICAgICAgICAgICA8c3ltcGhvbnktaWNvbiBbaWNvbl09XCInc2ktZW1haWwtc2VuZCdcIj48L3N5bXBob255LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3VnZ2VzdGlvbi5lbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0Zvcj1cImxldCBjcml0ZXJpb24gb2Ygc3VnZ2VzdGlvbi5jcml0ZXJpYVwiPlxuICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNyaXRlcmlvbi5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBjcml0ZXJpb24udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cInN1Z2dlc3Rpb24uYXRzSWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmeC10eHQtZ3JheSBzZngtZm9udC1ib2xkIHNmeC1mb250MTJcIj5BVFMgSUQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN1Z2dlc3Rpb24uYXRzSWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtY3JpdGVyaWFcIiAqbmdJZj1cInN1Z2dlc3Rpb24uc3RhdHVzZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtbGFiZWwgc2Z4LXR4dC1ncmF5XCI+Q29udGFjdHMgc2hhcmUgdGhlIHNhbWU6PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcml0ZXJpYS1saXN0XCI+XG4gICAgICAgICAgICAgICAgPHN5bXBob255LXN0YXR1cy1waWxsXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIHN1Z2dlc3Rpb24uc3RhdHVzZXNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXR1c1BpbGxNb2RlbF09XCJ7IHN0YXR1c0NsYXNzOiAnc3RhdHVzR3JleScsIHZhbHVlOiBzdGF0dXMgfVwiXG4gICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktc3RhdHVzLXBpbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWhhc0Vycm9yICYmIGNvbmZpcm1TdWdnZXN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaDUgdGV4dD1cIlNlbGVjdGVkIENvbnRhY3RcIj48L3N5bXBob255LWg1PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXdyYXBwZXIgc2Z4LW10LTIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvbi1jYXJkIHNlbGVjdGVkLWNvbnRhY3QtY2FyZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBzZngtZm9udC1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QubmFtZSB9fSBbe3sgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmlkIH19XVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwibW9kZWwuc2VsZWN0ZWRDb250YWN0LmVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICA8c3ltcGhvbnktaWNvbiBbaWNvbl09XCInc2ktZW1haWwtc2VuZCdcIj48L3N5bXBob255LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBtb2RlbC5zZWxlY3RlZENvbnRhY3QuZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbmZvLXJvd1wiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3JpdGVyaW9uIG9mIG1vZGVsLnNlbGVjdGVkQ29udGFjdC5jcml0ZXJpYVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHN5bXBob255LWljb25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcml0ZXJpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICA+PC9zeW1waG9ueS1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY3JpdGVyaW9uLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwibW9kZWwuc2VsZWN0ZWRDb250YWN0LmF0c0lkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmeC10eHQtZ3JheSBzZngtZm9udC1ib2xkIHNmeC1mb250MTJcIj5BVFMgSUQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbW9kZWwuc2VsZWN0ZWRDb250YWN0LmF0c0lkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTZcIj5cbiAgICAgICAgICA8c3ltcGhvbnktaDUgdGV4dD1cIlNlbGVjdGVkIER1cGxpY2F0ZVwiPjwvc3ltcGhvbnktaDU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlciBzZngtbXQtMjBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWdnZXN0aW9uLWNhcmQgY29uZmlybS1jYXJkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIHNmeC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbmZpcm1TdWdnZXN0aW9uLm5hbWUgfX0gW3t7IGNvbmZpcm1TdWdnZXN0aW9uLmlkIH19XVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0lmPVwiY29uZmlybVN1Z2dlc3Rpb24uZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uIFtpY29uXT1cIidzaS1lbWFpbC1zZW5kJ1wiPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbmZpcm1TdWdnZXN0aW9uLmVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiICpuZ0Zvcj1cImxldCBjcml0ZXJpb24gb2YgY29uZmlybVN1Z2dlc3Rpb24uY3JpdGVyaWFcIj5cbiAgICAgICAgICAgICAgICAgIDxzeW1waG9ueS1pY29uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3JpdGVyaW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImNyaXRlcmlvbi5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgPjwvc3ltcGhvbnktaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNyaXRlcmlvbi52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIiAqbmdJZj1cImNvbmZpcm1TdWdnZXN0aW9uLmF0c0lkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmeC10eHQtZ3JheSBzZngtZm9udC1ib2xkIHNmeC1mb250MTJcIj5BVFMgSUQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29uZmlybVN1Z2dlc3Rpb24uYXRzSWQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtY3JpdGVyaWFcIiAqbmdJZj1cImNvbmZpcm1TdWdnZXN0aW9uLnN0YXR1c2VzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0Y2gtbGFiZWwgc2Z4LXR4dC1ncmF5XCI+Q29udGFjdHMgc2hhcmUgdGhlIHNhbWU6PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyaXRlcmlhLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIDxzeW1waG9ueS1zdGF0dXMtcGlsbFxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIGNvbmZpcm1TdWdnZXN0aW9uLnN0YXR1c2VzXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXR1c1BpbGxNb2RlbF09XCJ7IHN0YXR1c0NsYXNzOiAnc3RhdHVzR3JleScsIHZhbHVlOiBzdGF0dXMgfVwiXG4gICAgICAgICAgICAgICAgICA+PC9zeW1waG9ueS1zdGF0dXMtcGlsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiAqbmdJZj1cImN1cnJlbnRTdGVwID09PSAyXCIgY2xhc3M9XCJtb2RhbC1ib2R5IG1lcmdlLWNvbnRhY3RzLWJvZHlcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gKm5nSWY9XCJjdXJyZW50U3RlcCA9PT0gMVwiIGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb25maXJtU3VnZ2VzdGlvbjsgZWxzZSBjb25maXJtQWN0aW9uc1wiPlxuICAgICAgPHN5bXBob255LWJ1dHRvbi12MiB0ZXh0PVwiQ2xvc2VcIiBbaXNTZWNvbmRhcnldPVwidHJ1ZVwiIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj48L3N5bXBob255LWJ1dHRvbi12Mj5cbiAgICAgIDxzeW1waG9ueS1idXR0b24tdjIgdGV4dD1cIk5leHRcIiBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkIHx8ICEhY29uZmlybVN1Z2dlc3Rpb25cIiAoY2xpY2tlZCk9XCJvbk5leHQoKVwiPjwvc3ltcGhvbnktYnV0dG9uLXYyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29uZmlybUFjdGlvbnM+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybS1hY3Rpb25zXCI+XG4gICAgICAgIDxzeW1waG9ueS1idXR0b24tdjJcbiAgICAgICAgICB0ZXh0PVwiQmFja1wiXG4gICAgICAgICAgW2lzU2Vjb25kYXJ5XT1cInRydWVcIlxuICAgICAgICAgIChjbGlja2VkKT1cImNhbmNlbE5vdER1cGxpY2F0ZSgpXCJcbiAgICAgICAgPjwvc3ltcGhvbnktYnV0dG9uLXYyPlxuICAgICAgICA8c3ltcGhvbnktYnV0dG9uLXYyXG4gICAgICAgICAgdGV4dD1cIkNvbmZpcm1cIlxuICAgICAgICAgIChjbGlja2VkKT1cImNvbmZpcm1Pbk5vdER1cGxpY2F0ZSgpXCJcbiAgICAgICAgPjwvc3ltcGhvbnktYnV0dG9uLXYyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
|