@ieeesa-npm/groups 0.15.2 → 0.15.4

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.
@@ -2,8 +2,9 @@ import { ChangeDetectionStrategy, Component, ViewEncapsulation, } from '@angular
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { HttpErrorResponse } from '@angular/common/http';
4
4
  import { Subject, takeUntil } from 'rxjs';
5
+ import { MatButtonModule } from '@angular/material/button';
5
6
  import { MatDialogModule } from '@angular/material/dialog';
6
- import { TableColumnType, TableColumnSortDirection, ChipsType, AlignType, DataTableComponent, ModalConfirmationComponent, } from '@ieeesa-npm/presentation';
7
+ import { TableColumnType, TableColumnSortDirection, ChipsType, AlignType, DataTableComponent, ModalConfirmationComponent, ExportFormatPopoverComponent, } from '@ieeesa-npm/presentation';
7
8
  import { AlertType } from '@ieeesa-npm/models';
8
9
  import * as constants from '../../assets/constants.json';
9
10
  import { GroupFunctionType } from '../../models/group-function-type.model';
@@ -16,6 +17,9 @@ import * as i0 from "@angular/core";
16
17
  import * as i1 from "@angular/material/dialog";
17
18
  import * as i2 from "../../services/groups.service";
18
19
  import * as i3 from "@ieeesa-npm/utility";
20
+ import * as i4 from "../../services/roster-export.service";
21
+ import * as i5 from "@angular/common";
22
+ import * as i6 from "@angular/material/button";
19
23
  /**
20
24
  * ViewRosterComponent implements the functionalities to add, edit, delete user to group roster, assign and modify roles(s) to the group users, and search user from roster.
21
25
  * @export
@@ -33,12 +37,15 @@ export class ViewRosterComponent {
33
37
  // eslint-disable-next-line no-unused-vars
34
38
  cdr,
35
39
  // eslint-disable-next-line no-unused-vars
36
- globalErrorHandlerService) {
40
+ globalErrorHandlerService,
41
+ // eslint-disable-next-line no-unused-vars
42
+ rosterExportService) {
37
43
  this.dialog = dialog;
38
44
  this.groupService = groupService;
39
45
  this.alertService = alertService;
40
46
  this.cdr = cdr;
41
47
  this.globalErrorHandlerService = globalErrorHandlerService;
48
+ this.rosterExportService = rosterExportService;
42
49
  this.destroy$ = new Subject();
43
50
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
51
  this.constants = constants;
@@ -72,6 +79,7 @@ export class ViewRosterComponent {
72
79
  }
73
80
  ngOnInit() {
74
81
  this.userInfo = this.groupService?.getUserInfo();
82
+ this.rosterExportService.setApiBaseUrl(this.groupService?.apiBaseUrl);
75
83
  const groupType = this.groupService.getBusinessRuleOfSelectedGroup();
76
84
  this.hasClassification = groupType?.hasClassification ?? false;
77
85
  this.groupRosterType = groupType?.rosterType;
@@ -727,19 +735,51 @@ export class ViewRosterComponent {
727
735
  isCloseNeeded: true,
728
736
  });
729
737
  }
738
+ /**
739
+ * Toggles the export format popover — delegates to RosterExportService.
740
+ * @memberof ViewRosterComponent
741
+ */
742
+ onExportClick() {
743
+ this.rosterExportService.togglePopover();
744
+ }
745
+ /**
746
+ * Handles export format selection — delegates to RosterExportService using the
747
+ * currently selected group's id and name.
748
+ * @param {ExportFormat} format
749
+ * @memberof ViewRosterComponent
750
+ */
751
+ onExportFormatSelected(format) {
752
+ const selectedGroupInfo = this.groupService?.getSelectedGroupInfo();
753
+ const groupId = selectedGroupInfo?.groupId;
754
+ // Without a group id the export URL would be malformed, so guard here
755
+ // instead of firing a bad request.
756
+ if (!groupId) {
757
+ this.showAlertMessage(this.constants?.errors?.default, AlertType.ERROR);
758
+ return;
759
+ }
760
+ const groupName = selectedGroupInfo?.groupName ?? '';
761
+ this.rosterExportService.onFormatSelected(format, groupId, groupName);
762
+ }
730
763
  /**
731
764
  * NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
732
765
  * @memberof ViewRosterComponent
733
766
  */
734
767
  ngOnDestroy() {
768
+ this.rosterExportService.destroy();
735
769
  this.destroy$.next(true);
736
770
  this.destroy$.unsubscribe();
737
771
  }
738
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewRosterComponent, deps: [{ token: i1.MatDialog }, { token: i2.GroupsService }, { token: i3.AlertsService }, { token: i0.ChangeDetectorRef }, { token: i3.GlobalErrorHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
739
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ViewRosterComponent, isStandalone: true, selector: "ieeesa-view-roster", ngImport: i0, template: "<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\r\n></ieeesa-data-table>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-view-roster{max-width:90vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:3em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0;min-height:405px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-classification{width:15em;max-width:15em}@media (max-width: 576px){.ieeesa-modal-dialog.ieeesa-view-roster{max-width:95vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table{padding-right:0!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DataTableComponent, selector: "ieeesa-data-table", inputs: ["tableDataInfo", "nestedTableDataInfo", "columnSchemaInfo", "nestedTableColumnSchemaInfo", "tableActions", "hasNestedTable", "tableColumnActions", "tableColumnActionMenuSize", "tableRowActions", "nestedTableRowActions", "caption", "viewAll", "paginatorConfig", "nestedPaginatorConfig", "legends", "pageIndex", "pageSize", "searchPlaceHolderText", "rowEditButton", "rowDeleteButton", "tableEditButton", "tableDeleteButton", "rowExpandButton", "rowCollapseButton", "isNestedTableHeaderNeeded", "addButton", "defaultColumnSortDirection", "defaultSortedColumn", "isClearSortNeeded", "filters", "selectedFilterOptions", "appliedFilterOptions", "searchType", "className", "searchSupportMessage", "inbuiltSortingNeeded", "isCellTextOverflowEllipsis", "isTableHeaderNeeded", "tableColumnsHeaderText", "verticalColumnHeaderNumber", "scrollbarSupportMessage", "isScrollSupportMessageNeeded", "isStickyHeaderNeeded", "customStickyHeaderNeeded", "headerElementClassName", "minCharToSearch", "searchResultMessage", "rowMenuActionIcon", "canDisableCheckbox", "isEllipsisRequiredForLink"], outputs: ["rowSelected", "selectedRowToEdit", "selectedRowToDelete", "selectedRowsToDelete", "rowLink", "addRow", "columnDataOnRowLinkClick", "menuActionClick", "selectActionMenu", "paginationChange", "selectedFilter", "removeFilteredOption", "filteredOptions", "searchedValue", "sortChange", "selectedRowsInfo", "rowExpansionClick", "tableColumnMenuActionClick", "tableColumnMenuToggleButton", "rowSlideToggle"] }, { kind: "ngmodule", type: MatDialogModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
772
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewRosterComponent, deps: [{ token: i1.MatDialog }, { token: i2.GroupsService }, { token: i3.AlertsService }, { token: i0.ChangeDetectorRef }, { token: i3.GlobalErrorHandlerService }, { token: i4.RosterExportService }], target: i0.ɵɵFactoryTarget.Component }); }
773
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ViewRosterComponent, isStandalone: true, selector: "ieeesa-view-roster", ngImport: i0, template: "<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\r\n>\r\n <!-- Export Roster Button + Popover \u2014 projected into the data-table action row,\r\n inline after the delete icon. -->\r\n <div dataTableActions class=\"ieeesa-view-roster__export-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-view-roster__export-btn\"\r\n type=\"button\"\r\n [attr.aria-label]=\"constants?.rosterExport?.ariaLabel\"\r\n [disabled]=\"rosterExportService.isExportInProgress$ | async\"\r\n (click)=\"onExportClick()\"\r\n >\r\n <svg class=\"ieeesa-view-roster__export-btn-icon\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-export\"></use>\r\n </svg>\r\n {{ constants?.rosterExport?.buttonLabel }}\r\n </button>\r\n\r\n <ieeesa-export-format-popover\r\n [formatOptions]=\"rosterExportService.exportFormatOptions\"\r\n [isOpen]=\"(rosterExportService.isPopoverOpen$ | async) ?? false\"\r\n [popoverTitle]=\"rosterExportService.popoverTitle\"\r\n [formatSubtitles]=\"rosterExportService.exportFormatSubtitles\"\r\n (formatSelected)=\"onExportFormatSelected($event)\"\r\n (closed)=\"rosterExportService.closePopover()\"\r\n ></ieeesa-export-format-popover>\r\n </div>\r\n</ieeesa-data-table>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-view-roster{max-width:90vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:3em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0;min-height:405px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-classification{width:15em;max-width:15em}@media (max-width: 576px){.ieeesa-modal-dialog.ieeesa-view-roster{max-width:95vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table{padding-right:0!important}}.ieeesa-view-roster__export-wrapper{position:relative}.ieeesa-view-roster__export-btn.mat-mdc-button.mat-mdc-button-base{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-size:13px;white-space:nowrap}.ieeesa-view-roster__export-btn-icon{width:16px;height:16px;flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "component", type: DataTableComponent, selector: "ieeesa-data-table", inputs: ["tableDataInfo", "nestedTableDataInfo", "columnSchemaInfo", "nestedTableColumnSchemaInfo", "tableActions", "hasNestedTable", "tableColumnActions", "tableColumnActionMenuSize", "tableRowActions", "nestedTableRowActions", "caption", "viewAll", "paginatorConfig", "nestedPaginatorConfig", "legends", "pageIndex", "pageSize", "searchPlaceHolderText", "rowEditButton", "rowDeleteButton", "tableEditButton", "tableDeleteButton", "rowExpandButton", "rowCollapseButton", "isNestedTableHeaderNeeded", "addButton", "defaultColumnSortDirection", "defaultSortedColumn", "isClearSortNeeded", "filters", "selectedFilterOptions", "appliedFilterOptions", "searchType", "className", "searchSupportMessage", "inbuiltSortingNeeded", "isCellTextOverflowEllipsis", "isTableHeaderNeeded", "tableColumnsHeaderText", "verticalColumnHeaderNumber", "scrollbarSupportMessage", "isScrollSupportMessageNeeded", "isStickyHeaderNeeded", "customStickyHeaderNeeded", "headerElementClassName", "minCharToSearch", "searchResultMessage", "rowMenuActionIcon", "canDisableCheckbox", "isEllipsisRequiredForLink"], outputs: ["rowSelected", "selectedRowToEdit", "selectedRowToDelete", "selectedRowsToDelete", "rowLink", "addRow", "columnDataOnRowLinkClick", "menuActionClick", "selectActionMenu", "paginationChange", "selectedFilter", "removeFilteredOption", "filteredOptions", "searchedValue", "sortChange", "selectedRowsInfo", "rowExpansionClick", "tableColumnMenuActionClick", "tableColumnMenuToggleButton", "rowSlideToggle"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: ExportFormatPopoverComponent, selector: "ieeesa-export-format-popover", inputs: ["formatOptions", "origin", "isOpen", "popoverTitle", "formatSubtitles"], outputs: ["formatSelected", "closed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
740
774
  }
741
775
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ViewRosterComponent, decorators: [{
742
776
  type: Component,
743
- args: [{ selector: 'ieeesa-view-roster', standalone: true, imports: [CommonModule, DataTableComponent, MatDialogModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\r\n></ieeesa-data-table>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-view-roster{max-width:90vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:3em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0;min-height:405px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-classification{width:15em;max-width:15em}@media (max-width: 576px){.ieeesa-modal-dialog.ieeesa-view-roster{max-width:95vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table{padding-right:0!important}}\n"] }]
744
- }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.GroupsService }, { type: i3.AlertsService }, { type: i0.ChangeDetectorRef }, { type: i3.GlobalErrorHandlerService }]; } });
745
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1yb3N0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3JvdXBzL3NyYy9saWIvY29tcG9uZW50cy92aWV3LXJvc3Rlci92aWV3LXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3ZpZXctcm9zdGVyL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUdULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCxlQUFlLEVBRWYsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxTQUFTLEVBSVQsa0JBQWtCLEVBQ2xCLDBCQUEwQixHQUMzQixNQUFNLDBCQUEwQixDQUFDO0FBS2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVEvQyxPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FB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QUNoQixTQUFTLEVBQUUsU0FBUztZQUNwQixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQzsrR0FoeUJVLG1CQUFtQjttR0FBbkIsbUJBQW1CLDhFQ2hFaEMsdTFCQW1CQSx3aVdEdUNZLFlBQVksK0JBQUUsa0JBQWtCLHVoREFBRSxlQUFlOzs0RkFNaEQsbUJBQW1CO2tCQVQvQixTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGlCQUc3QyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge1xyXG4gIFRhYmxlQ29sdW1uU2NoZW1hLFxyXG4gIFRhYmxlQ29sdW1uVHlwZSxcclxuICBUYWJsZUFjdGlvbnMsXHJcbiAgVGFibGVDb2x1bW5Tb3J0RGlyZWN0aW9uLFxyXG4gIENoaXBzVHlwZSxcclxuICBBbGlnblR5cGUsXHJcbiAgQ2hpcE9wdGlvbixcclxuICBDaGVja2JveE9wdGlvbixcclxuICBGaWx0ZXJzQW5kT3B0aW9ucyxcclxuICBEYXRhVGFibGVDb21wb25lbnQsXHJcbiAgTW9kYWxDb25maXJtYXRpb25Db21wb25lbnQsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0IHtcclxuICBBbGVydHNTZXJ2aWNlLFxyXG4gIEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEFsZXJ0VHlwZSB9IGZyb20gJ0BpZWVlc2EtbnBtL21vZGVscyc7XHJcbmltcG9ydCB7IEdyb3Vwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoVXNlcnNQYXlsb2FkLFxyXG4gIEZpbHRlclVzZXJzUGF5bG9hZCxcclxuICBVc2VyLFxyXG4gIExvZ2dlZEluVXNlckluZm8sXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgRGVsZXRlVXNlckdyb3VwUGF5bG9hZCB9IGZyb20gJy4uLy4uL21vZGVscy9kZWxldGUtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBSb3N0ZXJGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvcm9zdGVyLWZ1bmN0aW9uLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFVzZXJJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLXVzZXItaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUm9zdGVyVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9yb3N0ZXItdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmlsdGVyLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cCB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS1jb2x1bW4tc2NoZW1hLXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9wZXJtaXNzaW9uLXR5cGUubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIFZpZXdSb3N0ZXJDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25hbGl0aWVzIHRvIGFkZCwgZWRpdCwgZGVsZXRlIHVzZXIgdG8gZ3JvdXAgcm9zdGVyLCBhc3NpZ24gYW5kIG1vZGlmeSByb2xlcyhzKSB0byB0aGUgZ3JvdXAgdXNlcnMsIGFuZCBzZWFyY2ggdXNlciBmcm9tIHJvc3Rlci5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25EZXN0cm95fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2Etdmlldy1yb3N0ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRGF0YVRhYmxlQ29tcG9uZW50LCBNYXREaWFsb2dNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3LXJvc3Rlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdmlldy1yb3N0ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlld1Jvc3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICB2aWV3Um9zdGVyQ29uc3RhbnRzID0gdGhpcy5jb25zdGFudHM/LnZpZXdSb3N0ZXI7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkaWFsb2dSZWY6IGFueTtcclxuICBhbGlnbm1lbnRUeXBlID0gQWxpZ25UeXBlO1xyXG4gIGZpbHRlcnMhOiBDaGlwT3B0aW9uW107XHJcbiAgY29sdW1uU2NoZW1hITogVGFibGVDb2x1bW5TY2hlbWFbXTtcclxuICB0YWJsZURhdGEhOiBVc2VyW107XHJcbiAgc2VsZWN0ZWRSb2xlSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkTWVtYmVyVHlwZUlkczogc3RyaW5nW10gPSBbXTtcclxuICBzZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlYXJjaFBsYWNlaG9sZGVyVGV4dCE6IHN0cmluZztcclxuICBzZWxlY3RlZFJvbGVzOiBGaWx0ZXJzQW5kT3B0aW9ucyA9IHt9O1xyXG4gIHNlbGVjdGVkTWVtYmVyVHlwZXM6IEZpbHRlcnNBbmRPcHRpb25zID0ge307XHJcbiAgc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnM6IEZpbHRlcnNBbmRPcHRpb25zID0ge307XHJcbiAgcm9sZXM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBmaWx0ZXJPcHRpb25zOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgbWVtYmVyVHlwZXM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBjbGFzc2lmaWNhdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICByb3N0ZXJBY3Rpb25zOiBUYWJsZUFjdGlvbnMgPSB7XHJcbiAgICBpc1NlYXJjaE5lZWRlZDogdHJ1ZSxcclxuICAgIGlzRmlsdGVyTmVlZGVkOiB0cnVlLFxyXG4gICAgaXNBZGROZWVkZWQ6IGZhbHNlLFxyXG4gICAgaXNEZWxldGVOZWVkZWQ6IGZhbHNlLFxyXG4gICAgaXNFZGl0TmVlZGVkOiBmYWxzZSxcclxuICB9O1xyXG4gIGRlZmF1bHRTb3J0ZWRDb2x1bW4hOiBzdHJpbmc7XHJcbiAgZGF0YVRhYmxlQ2xhc3NOYW1lITogc3RyaW5nO1xyXG4gIGhhc0NsYXNzaWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgc2VhcmNoVGVybSE6IHN0cmluZztcclxuICBncm91cFJvc3RlclR5cGUhOiBHcm91cFJvc3RlclR5cGU7XHJcbiAgZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24gPSB0cnVlO1xyXG4gIHRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWwgPVxyXG4gICAgdGhpcy52aWV3Um9zdGVyQ29uc3RhbnRzPy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsO1xyXG4gIHRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzID1cclxuICAgIHRoaXMudmlld1Jvc3RlckNvbnN0YW50cz8udGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnM7XHJcbiAgZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeSA9XHJcbiAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnk7XHJcbiAgdXNlckluZm8hOiBMb2dnZWRJblVzZXJJbmZvO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ3JvdXBTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2U6IEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucm9zdGVyQWN0aW9ucy5pc0FkZE5lZWRlZCA9IHRoaXMuZ2V0TWFuYWdlUm9zdGVyQWN0aW9uc1Blcm1pc3Npb24oKTtcclxuICAgIHRoaXMucm9zdGVyQWN0aW9ucy5pc0VkaXROZWVkZWQgPSB0aGlzLmdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk7XHJcbiAgICB0aGlzLnJvc3RlckFjdGlvbnMuaXNEZWxldGVOZWVkZWQgPSB0aGlzLmdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRVc2VySW5mbygpO1xyXG4gICAgY29uc3QgZ3JvdXBUeXBlID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk7XHJcbiAgICB0aGlzLmhhc0NsYXNzaWZpY2F0aW9uID0gZ3JvdXBUeXBlPy5oYXNDbGFzc2lmaWNhdGlvbiA/PyBmYWxzZTtcclxuICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID0gZ3JvdXBUeXBlPy5yb3N0ZXJUeXBlIGFzIEdyb3VwUm9zdGVyVHlwZTtcclxuICAgIGlmICghdGhpcy5ncm91cFJvc3RlclR5cGUpXHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKHtcclxuICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LkVSMTAwMSxcclxuICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZS5XQVJOSU5HLFxyXG4gICAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5jb25maWd1cmVUYWJsZUluZm8oKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2hvdyBhZGQgbmV3IHVzZXIgc3VjY2VzcyBtZXNzYWdlIHdoZW4gY2FuU2hvd01lc3NhZ2UgaXMgc2V0IHRydWVcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdyb3VwU2VydmljZT8uY2FuU2hvd01lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UuY2FuU2hvd01lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5yb3N0ZXJGdW5jdGlvblR5cGUgPT09XHJcbiAgICAgICAgUm9zdGVyRnVuY3Rpb25UeXBlPy5BRERfVVNFUl9UT19ST1NURVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgdGhpcy5jb25zdGFudHM/LmFkZFVzZXJSb3N0ZXI/Lm1lc3NhZ2U/LnN1Y2Nlc3M/LnN1Ym1pc3Npb24sXHJcbiAgICAgICAgICBBbGVydFR5cGUuU1VDQ0VTU1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2U/LnJvc3RlckZ1bmN0aW9uVHlwZSA9PT1cclxuICAgICAgICBSb3N0ZXJGdW5jdGlvblR5cGU/LkVESVRfUk9TVEVSX1VTRVJfUk9MRVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICB0aGlzLmNvbnN0YW50cz8uZWRpdFVzZXJSb2xlcz8ubWVzc2FnZT8uc3VjY2Vzcz8uc3VibWlzc2lvbixcclxuICAgICAgICAgIEFsZXJ0VHlwZS5TVUNDRVNTXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JvdXBUeXBlID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk7XHJcbiAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9IGdyb3VwVHlwZT8ucm9zdGVyVHlwZSBhcyBHcm91cFJvc3RlclR5cGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZGVzIG9yIHNob3dzIHJvc3RlciBhZGQgdXNlciwgZWRpdCB1c2VyIGFuZCBkZWxldGUgdXNlciBhY3Rpb25zIGJhc2VkIG9uIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnMuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX09GRklDRVJTKSB8fFxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS52YWxpZGF0ZUFjY2VzcyhQZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfTUVNQkVSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9ST1NURVJTKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJlIFRhYmxlIGluZm9ybWF0aW9uIGJhc2VkIG9uIGdyb3VwIHJvc3RlciB0eXBlXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBjb25maWd1cmVUYWJsZUluZm8oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIHRoaXMuZGF0YVRhYmxlQ2xhc3NOYW1lID0gJ2llZWVzYS1pbmRpdmlkdWFsLXJvc3Rlcic7XHJcbiAgICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXJUZXh0ID1cclxuICAgICAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LnNlYXJjaFBsYWNlaG9sZGVySW5kaXZpZHVhbDtcclxuICAgICAgdGhpcy5maWx0ZXJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFLFxyXG4gICAgICAgICAgbmFtZTogRmlsdGVyVHlwZS5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2hpcFR5cGU6IENoaXBzVHlwZS5UT0dHTEUsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgdGhpcy5jb2x1bW5TY2hlbWEgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDEsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICBoZWFkaW5nOiAnJyxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQuc2VsZWN0fWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMixcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuTkFNRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8ubmFtZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50Lm5hbWV9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMyxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuRU1QTE9ZRVIsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LmVtcGxveWVyLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQuZW1wbG95ZXIgPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDQsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLkVNQUlMLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5lbWFpbCxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50LmVtYWlsID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA1LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8ubWVtYmVyVHlwZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50Lm1lbWJlclN0YXR1cyA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA2LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5PUkdBTklaQVRJT04sXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/Lm9yZ2FuaXphdGlvbk5hbWUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5vcmdhbml6YXRpb24gPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDgsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLlJPTEUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/LnJvbGUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5yb2xlID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5nZXRDbGFzc2lmaWNhdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmNvbHVtblNjaGVtYS5zcGxpY2UodGhpcy5jb2x1bW5TY2hlbWEubGVuZ3RoIC0gMSwgMCwge1xyXG4gICAgICAgICAgaWQ6IDcsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLkNMQVNTSUZJQ0FUSU9OLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5jbGFzc2lmaWNhdGlvbixcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50LmNsYXNzaWZpY2F0aW9uID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgICBpZDogRmlsdGVyVHlwZS5DTEFTU0lGSUNBVElPTixcclxuICAgICAgICAgIG5hbWU6IEZpbHRlclR5cGUuQ0xBU1NJRklDQVRJT04sXHJcbiAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgIGNoaXBUeXBlOiBDaGlwc1R5cGUuVE9HR0xFLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuU1lTVEVNX1VTRVIpIHtcclxuICAgICAgdGhpcy5kYXRhVGFibGVDbGFzc05hbWUgPSAnaWVlZXNhLXN5c3RlbS11c2Vycy1yb3N0ZXInO1xyXG4gICAgICB0aGlzLnNlYXJjaFBsYWNlaG9sZGVyVGV4dCA9XHJcbiAgICAgICAgdGhpcy52aWV3Um9zdGVyQ29uc3RhbnRzPy5zZWFyY2hQbGFjZWhvbGRlclN5c3RlbVVzZXJzO1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IEZpbHRlclR5cGUuUk9MRSxcclxuICAgICAgICAgIG5hbWU6IEZpbHRlclR5cGUuUk9MRSxcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2hpcFR5cGU6IENoaXBzVHlwZS5UT0dHTEUsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgdGhpcy5jb2x1bW5TY2hlbWEgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDEsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICBoZWFkaW5nOiAnJyxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQuc2VsZWN0fWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogMixcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuTkFNRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnM/Lm5hbWUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5uYW1lfWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDMsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLkVNQUlMLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JTeXN0ZW1Vc2Vycz8uZW1haWwsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5lbWFpbH1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA0LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5ST0xFLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JTeXN0ZW1Vc2Vycz8ucm9sZSxcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50LnJvbGUgPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0Um9sZXMoKTtcclxuICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbiA9IHRoaXMuY29sdW1uU2NoZW1hWzFdLmNvbHVtbkRlZjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYnkgY2FsbGluZyBnZXRHcm91cFVzZXJzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgdGFibGVEYXRhIHRvIGRpc3BsYXkgdGhlIHVzZXJzIGluIGEgZ3JpZC5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgc29ydENvbHVtbjogc3RyaW5nLFxyXG4gICAgc29ydERpcmVjdGlvbjogYm9vbGVhblxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldEdyb3VwVXNlcnMoXHJcbiAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgc29ydENvbHVtbixcclxuICAgICAgICBzb3J0RGlyZWN0aW9uXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID1cclxuICAgICAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UudHJhbnNmb3JtVXNlclJvbGVzTmFtZUFzU3RyaW5nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ29kZXM/LmluY2x1ZGVzKCcxMDI2JykpIHtcclxuICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSBlbHNlIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXBzIGJhc2VkIG9uIHRoZSBjb2x1bW4gbmFtZSBhbmQgc29ydCBkaXJlY3Rpb24uXHJcbiAgICogQHBhcmFtIHtTb3J0fSBzb3J0XHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvblNvcnRHcm91cFVzZXJzKHNvcnQ6IFNvcnQpIHtcclxuICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbiA9IHNvcnQuYWN0aXZlO1xyXG4gICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbiA9XHJcbiAgICAgIHNvcnQuZGlyZWN0aW9uID09PSBUYWJsZUNvbHVtblNvcnREaXJlY3Rpb24uQVNDRU5ESU5HO1xyXG4gICAgaWYgKHNvcnQuZGlyZWN0aW9uID09PSBUYWJsZUNvbHVtblNvcnREaXJlY3Rpb24uTk9fU09SVCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuU1lTVEVNX1VTRVIpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb2xlSWRzLmxlbmd0aClcclxuICAgICAgICB0aGlzLm9uRmlsdGVyR3JvdXBVc2VycyhbdGhpcy5zZWxlY3RlZFJvbGVzXSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzLmxlbmd0aCB8fFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLm9uRmlsdGVyR3JvdXBVc2VycyhbXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25zLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVzLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHNlbGVjdGVkIGdyb3VwIHR5cGUgcm9sZXMgYnkgY2FsbGluZyBnZXRHcm91cFR5cGVSb2xlcygpIGZyb20gZ3JvdXBTZXJ2aWNlIGFuZCBzZXRzIGFzc2lnbiByb2xlcy5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFJvbGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldEdyb3VwVHlwZVJvbGVzKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwVHlwZSBhcyBzdHJpbmdcclxuICAgICAgKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yb2xlcyA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldE1lbWJlclR5cGVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjbGFzc2lmaWNhdGlvbiBieSBjYWxsaW5nIGdldENsYXNzaWZpY2F0aW9ucygpIGZyb20gZ3JvdXBTZXJ2aWNlIGFuZCBzZXRzIGNsYXNzaWZpY2F0aW9ucy5cclxuICAgKiBAbWVtYmVyb2YgVmlld1VzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRDbGFzc2lmaWNhdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0Q2xhc3NpZmljYXRpb25zKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWNhdGlvbnM/LnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb24uY2xhc3NpZmljYXRpb25JZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24uY2xhc3NpZmljYXRpb25OYW1lLFxyXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIG1lbWJlciB0eXBlcyBieSBjYWxsaW5nIGdldE1lbWJlclR5cGVzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgbWVtYmVyIHR5cGVzLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3VXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1lbWJlclR5cGVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWVtYmVyVHlwZXMgPSB0aGlzLmdyb3VwU2VydmljZS5nZXRNZW1iZXJUeXBlcygpO1xyXG4gICAgbWVtYmVyVHlwZXM/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICB0aGlzLm1lbWJlclR5cGVzPy5wdXNoKHtcclxuICAgICAgICBpZDogb3B0aW9uLnJvbGVJZCxcclxuICAgICAgICBuYW1lOiBvcHRpb24ucm9sZU5hbWUsXHJcbiAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBmaWx0ZXIgb3B0aW9ucyBmb3IgTWVtYmVyIFR5cGUgb3IgQ2xhc3NpZmljYXRpb24gZmlsdGVyIGRlcGVuZHMgb24gdGhlIHNlbGVjdGlvbi5cclxuICAgKiBAcGFyYW0ge0NoaXBPcHRpb259IG9wdGlvblxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zKG9wdGlvbjogQ2hpcE9wdGlvbikge1xyXG4gICAgc3dpdGNoIChvcHRpb24uaWQpIHtcclxuICAgICAgY2FzZSBGaWx0ZXJUeXBlLk1FTUJFUl9UWVBFOiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zID0gdGhpcy5tZW1iZXJUeXBlcztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEZpbHRlclR5cGUuQ0xBU1NJRklDQVRJT046IHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLmNsYXNzaWZpY2F0aW9ucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIEZpbHRlclR5cGUuUk9MRToge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMucm9sZXM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYnkgY2FsbGluZyBzZWFyY2hHcm91cFVzZXJzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgdGFibGVEYXRhIHRvIGRpc3BsYXkgdGhlIHVzZXJzIGluIGEgZ3JpZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGVybSAtc2VhcmNoVGVybSBjYW4gYmUgdXNlciBuYW1lIG9yIGVtYWlsIGFuZCB1c2VyIGlzIHNlYXJjaGVkIGJhc2VkIG9uIHRoZSBlbWFpbCBvciBuYW1lLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25TZWFyY2hHcm91cFVzZXJzKHNlYXJjaFRlcm06IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hUZXJtID0gc2VhcmNoVGVybT8udHJpbSgpO1xyXG4gICAgbGV0IHBheWxvYWQhOiBTZWFyY2hVc2Vyc1BheWxvYWQ7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlKSB7XHJcbiAgICAgIGNhc2UgR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSOiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm9sZUlkcz8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm9sZUlkcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uRmlsdGVyR3JvdXBVc2VycyhbdGhpcy5zZWxlY3RlZFJvbGVzXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKVxyXG4gICAgICAgICAgICAgID8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIHNlYXJjaEJ5TmFtZU9yRW1haWxPclJlcE9yZzogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVDbGFzc2lmaWNhdGlvbk1lbWJlclN0YXR1c0lkczogdGhpcy5zZWxlY3RlZFJvbGVJZHMsXHJcbiAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgYXNjZW5kaW5nT3JkZXI6IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTDoge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzPy5sZW5ndGggPT09IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzPy5sZW5ndGggPT09IDBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcz8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25GaWx0ZXJHcm91cFVzZXJzKFtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25zLFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlcyxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKVxyXG4gICAgICAgICAgICAgID8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIHNlYXJjaEJ5TmFtZU9yRW1haWxPclJlcE9yZzogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVDbGFzc2lmaWNhdGlvbk1lbWJlclN0YXR1c0lkczogW1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcyxcclxuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcyxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICBhc2NlbmRpbmdPcmRlcjogdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLnNlYXJjaEdyb3VwVXNlcnMocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID1cclxuICAgICAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UudHJhbnNmb3JtVXNlclJvbGVzTmFtZUFzU3RyaW5nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgY29uc3Qgbm9Vc2Vyc0ZvdW5kRXJyb3JDb2RlcyA9IFsnMTAyOScsICcxMDMwJywgJzEwMzEnLCAnMTAzMiddO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ29kZXMgJiYgbm9Vc2Vyc0ZvdW5kRXJyb3JDb2Rlcy5pbmNsdWRlcyhlcnJvckNvZGVzWzBdKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBvcHRpb25zIG9mIGZpbHRlcnMgYW5kIHJldHVybnMgaWQgb2Ygc2VsZWN0ZWQgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7RmlsdGVyc0FuZE9wdGlvbnNbXX0gc2VsZWN0ZWRPcHRpb25zXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJUeXBlfSBmaWx0ZXJUeXBlXHJcbiAgICogQHBhcmFtIHtGaWx0ZXJzQW5kT3B0aW9uc30gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkRmlsdGVyT3B0aW9uc0FuZElkcyhcclxuICAgIHNlbGVjdGVkT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnNbXSxcclxuICAgIGZpbHRlclR5cGU6IEZpbHRlclR5cGUsXHJcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IEZpbHRlcnNBbmRPcHRpb25zLFxyXG4gICAgc2VsZWN0ZWRGaWx0ZXJJZHM6IHN0cmluZ1tdXHJcbiAgKSB7XHJcbiAgICBzZWxlY3RlZE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdGVkT3B0aW9uKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlbGVjdGVkT3B0aW9uKSkge1xyXG4gICAgICAgIGlmIChrZXkgPT09IGZpbHRlclR5cGUpIHtcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3Q6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICAgICAgICAgIHZhbHVlPy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJJZHMucHVzaChvcHRpb24uaWQgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zTGlzdC5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uc1trZXldID0gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zTGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBieSBjYWxsaW5nIGdldEdyb3VwVXNlcnNCeVJvbGVzKCkgZnJvbSBncm91cFNlcnZpY2UgYW5kIHNldHMgdGFibGVEYXRhIHRvIGRpc3BsYXkgdGhlIHVzZXJzIGluIGEgZ3JpZC5cclxuICAgKiBAcGFyYW0ge0NoaXBPcHRpb25bXSB8IHwgQ2hlY2tib3hPcHRpb25bXX0gcm9sZXNcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRmlsdGVyR3JvdXBVc2VycyhzZWxlY3RlZE9wdGlvbnM6IEZpbHRlcnNBbmRPcHRpb25zW10pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb2xlSWRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25zID0ge307XHJcbiAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZXMgPSB7fTtcclxuICAgIGxldCBwYXlsb2FkITogRmlsdGVyVXNlcnNQYXlsb2FkO1xyXG4gICAgc3dpdGNoICh0aGlzLmdyb3VwUm9zdGVyVHlwZSkge1xyXG4gICAgICBjYXNlIEdyb3VwUm9zdGVyVHlwZS5TWVNURU1fVVNFUjoge1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zLFxyXG4gICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvbGVzLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvbGVJZHNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIHRoaXMub25TZWFyY2hHcm91cFVzZXJzKHRoaXMuc2VhcmNoVGVybSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKClcclxuICAgICAgICAgICAgICA/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICBmaWx0ZXJCeVJvbGVDbGFzc2lmaWNhdGlvbk1lbWJlclN0YXR1c0lkczogdGhpcy5zZWxlY3RlZFJvbGVJZHMsXHJcbiAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgYXNjZW5kaW5nT3JkZXI6IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTDoge1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zQW5kSWRzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zLFxyXG4gICAgICAgICAgRmlsdGVyVHlwZS5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlSWRzXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmdldFNlbGVjdGVkRmlsdGVyT3B0aW9uc0FuZElkcyhcclxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyxcclxuICAgICAgICAgIEZpbHRlclR5cGUuQ0xBU1NJRklDQVRJT04sXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25zLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb25zPy5sZW5ndGggPT09IDAgJiYgIXRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2VhcmNoR3JvdXBVc2Vycyh0aGlzLnNlYXJjaFRlcm0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpXHJcbiAgICAgICAgICAgICAgPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgZmlsdGVyQnlSb2xlQ2xhc3NpZmljYXRpb25NZW1iZXJTdGF0dXNJZHM6IFtcclxuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcyxcclxuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHMsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgYXNjZW5kaW5nT3JkZXI6IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFVzZXJzQnlSb2xlcyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VydmljZS50cmFuc2Zvcm1Vc2VyUm9sZXNOYW1lQXNTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIG5vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yQ29kZXMgPSBlcnJvcj8uZXJyb3I/LmJvZHk/LmVycm9yQ29kZXM7XHJcbiAgICAgICAgICBpZiAoZXJyb3JDb2Rlcz8uaW5jbHVkZXMoJzEwMjcnKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjdXN0b20gZXJyb3JzIHdoaWxlIHJldHJpZXZpbmcgZ3JvdXBzIHVzZXJzLCByb2xlcywgc2VhcmNoIHVzZXJzLCBmaWx0ZXIgdXNlciBieSByb2xlcy5cclxuICAgKiBAcGFyYW0geyp9IGVycm9yXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGhhbmRsZUVycm9ycyhlcnJvcjogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3JDb2RlcykgJiYgIWVycm9yPy5lcnJvcj8uc3RhdHVzKSB7XHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZ3JvdXBTZXJ2aWNlLnBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXMpO1xyXG4gICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoZXJyb3JNZXNzYWdlLCBBbGVydFR5cGUuRVJST1IpO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE9wZW5zIHRoZSBjb25maXJtYXRpb24gbW9kYWwgdG8gZ2V0IHVzZXIgY29uZmlybWF0aW9uIHRvIGRlbGV0ZSB0aGUgdXNlcnMgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXAuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9wZW5Vc2VyRGVsZXRlQ29uZmlybWF0aW9uTW9kYWwoc2VsZWN0ZWRVc2VyczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VySWRzID0gc2VsZWN0ZWRVc2Vycy5tYXAoKHVzZXI6IFVzZXIpID0+IHVzZXI/LnVzZXJJZCk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHVzZXJJZHMuaW5jbHVkZXModGhpcy51c2VySW5mbz8udXNlcklkKSAmJlxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS5pc0FkbWluVXNlcigpICYmXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRCdXNpbmVzc1J1bGVPZlNlbGVjdGVkR3JvdXAoKT8uaXNBZG1pblxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShgJHtjb25zdGFudHM/LmVycm9ycz8uWzEwMzldfWAsIEFsZXJ0VHlwZS5FUlJPUik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEdyb3VwSW5mbyA9IHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRTZWxlY3RlZEdyb3VwSW5mbygpO1xyXG4gICAgICBjb25zdCBjb25maXJtYXRpb25JbmZvID0gY29uc3RhbnRzPy5kZWxldGVVc2Vyc0dyb3VwPy5jb25maXJtYXRpb25JbmZvO1xyXG4gICAgICBjb25zdCBkZWxldGVVc2VyR3JvdXBNb2RhbE9wdGlvbnMgPSB7XHJcbiAgICAgICAgbGVmdEJ1dHRvbkxhYmVsOiBjb25maXJtYXRpb25JbmZvPy5sZWZ0QnV0dG9uTGFiZWwsXHJcbiAgICAgICAgcmlnaHRCdXR0b25MYWJlbDogY29uZmlybWF0aW9uSW5mbz8ucmlnaHRCdXR0b25MYWJlbCxcclxuICAgICAgICBwcm9tcHRNZXNzYWdlOiBgJHtjb25maXJtYXRpb25JbmZvPy5wcm9tcHRNZXNzYWdlUGFydDF9ICR7dXNlcklkcz8ubGVuZ3RofSAke2NvbmZpcm1hdGlvbkluZm8/LnByb21wdE1lc3NhZ2VQYXJ0Mn0gJHtzZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBOYW1lfT9gLFxyXG4gICAgICAgIGFjdGlvbkJ1dHRvbkFsaWduOiB0aGlzLmFsaWdubWVudFR5cGU/Lk1JRERMRSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE1vZGFsQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YTogZGVsZXRlVXNlckdyb3VwTW9kYWxPcHRpb25zLFxyXG4gICAgICAgIHdpZHRoOiAnYXV0bycsXHJcbiAgICAgICAgYXV0b0ZvY3VzOiAnZGlhbG9nJyxcclxuICAgICAgICBhcmlhTGFiZWw6IGNvbnN0YW50cz8uYXJpYUxhYmVsPy5hbGVydCxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmXHJcbiAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlVXNlcnNHcm91cChcclxuICAgICAgICAgICAgICBzZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgdXNlcklkc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZW5kIEFQSSByZXF1ZXN0IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgdXNlcihzKSBmcm9tIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgaGFuZGxlcyB0aGUgc3VjY2VzcyBhbmQgZXJyb3IgcmVzcG9uc2UuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBkZWxldGVVc2Vyc0dyb3VwKGdyb3VwSWQ6IHN0cmluZywgdXNlcklkczogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IGRlbGV0ZVVzZXJzR3JvdXBUZXh0cyA9IGNvbnN0YW50cz8uZGVsZXRlVXNlcnNHcm91cDtcclxuICAgIGNvbnN0IGRlbGV0ZVVzZXJHcm91cFBheWxvYWQ6IERlbGV0ZVVzZXJHcm91cFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICBbZ3JvdXBJZF06IHVzZXJJZHMsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmRlbGV0ZVVzZXJzR3JvdXAoZGVsZXRlVXNlckdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgICAgICAgICAgICBgJHtyZXMuYm9keX0gJHtkZWxldGVVc2Vyc0dyb3VwVGV4dHM/Lm1lc3NhZ2U/LnN1Y2Nlc3M/LnJlbW92ZWR9YCxcclxuICAgICAgICAgICAgICBBbGVydFR5cGUuU1VDQ0VTU1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBzZWxlY3RlZCB1c2VyIGluZm8gYW5kIGVtaXRzIGV2ZW50IG9wZW5Nb2RhbE5vdGlmaWVyIHdpdGggRURJVF9ST1NURVJfVVNFUl9ST0xFIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBVc2VySW5mb1tdfSBzZWxlY3RlZFVzZXJJbmZvXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkVkaXRVc2VyUm9sZXMoc2VsZWN0ZWRVc2VySW5mbzogR3JvdXBVc2VySW5mb1tdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKVxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS5zZXRTZWxlY3RlZFVzZXJJbmZvKHtcclxuICAgICAgICBlbWFpbDogc2VsZWN0ZWRVc2VySW5mb1swXT8uZW1haWwsXHJcbiAgICAgICAgbmFtZTogc2VsZWN0ZWRVc2VySW5mb1swXT8ubmFtZSxcclxuICAgICAgICByb2xlOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5yb2xlLFxyXG4gICAgICAgIHVzZXJJZDogc2VsZWN0ZWRVc2VySW5mb1swXT8udXNlcklkLFxyXG4gICAgICAgIGNsYXNzaWZpY2F0aW9uOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5jbGFzc2lmaWNhdGlvbixcclxuICAgICAgICBvcmdhbml6YXRpb246IHNlbGVjdGVkVXNlckluZm9bMF0/Lm9yZ2FuaXphdGlvbixcclxuICAgICAgICBtZW1iZXJTdGF0dXM6IHNlbGVjdGVkVXNlckluZm9bMF0/Lm1lbWJlclN0YXR1cyxcclxuICAgICAgICBjYW5EZWxldGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LmNhbkRlbGV0ZSxcclxuICAgICAgfSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnNldFNlbGVjdGVkVXNlckluZm8oe1xyXG4gICAgICAgIGVtYWlsOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5lbWFpbCxcclxuICAgICAgICBuYW1lOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5uYW1lLFxyXG4gICAgICAgIHJvbGU6IHNlbGVjdGVkVXNlckluZm9bMF0/LnJvbGUsXHJcbiAgICAgICAgdXNlcklkOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy51c2VySWQsXHJcbiAgICAgICAgY2FuRGVsZXRlOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5jYW5EZWxldGUsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5vcGVuTW9kYWxOb3RpZmllcj8ubmV4dChcclxuICAgICAgR3JvdXBGdW5jdGlvblR5cGUuRURJVF9ST1NURVJfVVNFUl9ST0xFXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgb3Blbk1vZGFsTm90aWZpZXIgZXZlbnQgd2l0aCBHcm91cEZ1bmN0aW9uVHlwZSB2YWx1ZSBhcyBBRERfVVNFUl9UT19ST1NURVJcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uQWRkTmV3VXNlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5vcGVuTW9kYWxOb3RpZmllcj8ubmV4dChcclxuICAgICAgR3JvdXBGdW5jdGlvblR5cGUuQUREX1VTRVJfVE9fUk9TVEVSXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhbGVydHMgZm9yIHN1Y2Nlc3MsIGVycm9yLCB3YXJuaW5nLlxyXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IHN0cmluZ1tdKX0gbWVzc2FnZSAtZXJyb3Igb3Igd2FybmluZyBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHtBbGVydFR5cGV9IGFsZXJ0VHlwZVxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2hvd0FsZXJ0TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSwgYWxlcnRUeXBlOiBBbGVydFR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlPy5zaG93TWVzc2FnZSh7XHJcbiAgICAgIHN0YXR1czogJ2N1c3RvbScsXHJcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXHJcbiAgICAgIGFsZXJ0VHlwZTogYWxlcnRUeXBlLFxyXG4gICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGllZWVzYS1kYXRhLXRhYmxlXHJcbiAgW3RhYmxlRGF0YUluZm9dPVwidGFibGVEYXRhXCJcclxuICBbY29sdW1uU2NoZW1hSW5mb109XCJjb2x1bW5TY2hlbWFcIlxyXG4gIFtzZWFyY2hQbGFjZUhvbGRlclRleHRdPVwic2VhcmNoUGxhY2Vob2xkZXJUZXh0XCJcclxuICBbdGFibGVBY3Rpb25zXT1cInJvc3RlckFjdGlvbnNcIlxyXG4gIFtpc0NlbGxUZXh0T3ZlcmZsb3dFbGxpcHNpc109XCJ0cnVlXCJcclxuICBbZmlsdGVyc109XCJmaWx0ZXJzXCJcclxuICBbY2xhc3NOYW1lXT1cImRhdGFUYWJsZUNsYXNzTmFtZVwiXHJcbiAgW3NlbGVjdGVkRmlsdGVyT3B0aW9uc109XCJmaWx0ZXJPcHRpb25zXCJcclxuICBbZGVmYXVsdFNvcnRlZENvbHVtbl09XCJkZWZhdWx0U29ydGVkQ29sdW1uXCJcclxuICAoc2VsZWN0ZWRGaWx0ZXIpPVwic2V0U2VsZWN0ZWRGaWx0ZXJPcHRpb25zKCRldmVudClcIlxyXG4gIChyZW1vdmVGaWx0ZXJlZE9wdGlvbik9XCJvbkZpbHRlckdyb3VwVXNlcnMoJGV2ZW50KVwiXHJcbiAgKGZpbHRlcmVkT3B0aW9ucyk9XCJvbkZpbHRlckdyb3VwVXNlcnMoJGV2ZW50KVwiXHJcbiAgKHNlYXJjaGVkVmFsdWUpPVwib25TZWFyY2hHcm91cFVzZXJzKCRldmVudClcIlxyXG4gIChzZWxlY3RlZFJvd1RvRWRpdCk9XCJvbkVkaXRVc2VyUm9sZXMoJGV2ZW50KVwiXHJcbiAgKHNlbGVjdGVkUm93c1RvRGVsZXRlKT1cIm9wZW5Vc2VyRGVsZXRlQ29uZmlybWF0aW9uTW9kYWwoJGV2ZW50KVwiXHJcbiAgKHNvcnRDaGFuZ2UpPVwib25Tb3J0R3JvdXBVc2VycygkZXZlbnQpXCJcclxuICAoYWRkUm93KT1cIm9uQWRkTmV3VXNlcigpXCJcclxuPjwvaWVlZXNhLWRhdGEtdGFibGU+XHJcbiJdfQ==
777
+ args: [{ selector: 'ieeesa-view-roster', standalone: true, imports: [
778
+ CommonModule,
779
+ DataTableComponent,
780
+ MatDialogModule,
781
+ MatButtonModule,
782
+ ExportFormatPopoverComponent,
783
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ieeesa-data-table\r\n [tableDataInfo]=\"tableData\"\r\n [columnSchemaInfo]=\"columnSchema\"\r\n [searchPlaceHolderText]=\"searchPlaceholderText\"\r\n [tableActions]=\"rosterActions\"\r\n [isCellTextOverflowEllipsis]=\"true\"\r\n [filters]=\"filters\"\r\n [className]=\"dataTableClassName\"\r\n [selectedFilterOptions]=\"filterOptions\"\r\n [defaultSortedColumn]=\"defaultSortedColumn\"\r\n (selectedFilter)=\"setSelectedFilterOptions($event)\"\r\n (removeFilteredOption)=\"onFilterGroupUsers($event)\"\r\n (filteredOptions)=\"onFilterGroupUsers($event)\"\r\n (searchedValue)=\"onSearchGroupUsers($event)\"\r\n (selectedRowToEdit)=\"onEditUserRoles($event)\"\r\n (selectedRowsToDelete)=\"openUserDeleteConfirmationModal($event)\"\r\n (sortChange)=\"onSortGroupUsers($event)\"\r\n (addRow)=\"onAddNewUser()\"\r\n>\r\n <!-- Export Roster Button + Popover \u2014 projected into the data-table action row,\r\n inline after the delete icon. -->\r\n <div dataTableActions class=\"ieeesa-view-roster__export-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-view-roster__export-btn\"\r\n type=\"button\"\r\n [attr.aria-label]=\"constants?.rosterExport?.ariaLabel\"\r\n [disabled]=\"rosterExportService.isExportInProgress$ | async\"\r\n (click)=\"onExportClick()\"\r\n >\r\n <svg class=\"ieeesa-view-roster__export-btn-icon\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-export\"></use>\r\n </svg>\r\n {{ constants?.rosterExport?.buttonLabel }}\r\n </button>\r\n\r\n <ieeesa-export-format-popover\r\n [formatOptions]=\"rosterExportService.exportFormatOptions\"\r\n [isOpen]=\"(rosterExportService.isPopoverOpen$ | async) ?? false\"\r\n [popoverTitle]=\"rosterExportService.popoverTitle\"\r\n [formatSubtitles]=\"rosterExportService.exportFormatSubtitles\"\r\n (formatSelected)=\"onExportFormatSelected($event)\"\r\n (closed)=\"rosterExportService.closePopover()\"\r\n ></ieeesa-export-format-popover>\r\n </div>\r\n</ieeesa-data-table>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-modal-dialog.ieeesa-view-roster{max-width:90vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal{box-shadow:0 3px #11b7e5 inset,0 4px 24px #00000080;padding-bottom:3em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-modal .mat-mdc-dialog-content{padding:0;min-height:405px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__content{height:500px}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__no-table-data{height:auto}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table__filter{padding-bottom:1em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter{--mdc-checkbox-state-layer-size: 2.5em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-filter .ieeesa-chip .mat-mdc-chip{background-color:#fffbfe!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .cdk-column-select{width:7%}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-name{width:11.25em;max-width:11.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-system-users-roster .cdk-column-email{width:15em;max-width:15em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-name{width:11em;max-width:11em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-email{width:13em;max-width:13em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-memberType,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-role,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-employer{width:8.25em;max-width:8.25em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-org_name,.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column{width:10em;max-width:10em}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table .ieeesa-individual-roster .cdk-column-classification{width:15em;max-width:15em}@media (max-width: 576px){.ieeesa-modal-dialog.ieeesa-view-roster{max-width:95vw!important}.ieeesa-modal-dialog.ieeesa-view-roster .ieeesa-data-table{padding-right:0!important}}.ieeesa-view-roster__export-wrapper{position:relative}.ieeesa-view-roster__export-btn.mat-mdc-button.mat-mdc-button-base{display:inline-flex;flex-direction:row;align-items:center;gap:6px;font-size:13px;white-space:nowrap}.ieeesa-view-roster__export-btn-icon{width:16px;height:16px;flex-shrink:0}\n"] }]
784
+ }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.GroupsService }, { type: i3.AlertsService }, { type: i0.ChangeDetectorRef }, { type: i3.GlobalErrorHandlerService }, { type: i4.RosterExportService }]; } });
785
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1yb3N0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3JvdXBzL3NyYy9saWIvY29tcG9uZW50cy92aWV3LXJvc3Rlci92aWV3LXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3ZpZXctcm9zdGVyL3ZpZXctcm9zdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUdULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBYSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RSxPQUFPLEVBRUwsZUFBZSxFQUVmLHdCQUF3QixFQUN4QixTQUFTLEVBQ1QsU0FBUyxFQUlULGtCQUFrQixFQUNsQiwwQkFBMEIsRUFFMUIsNEJBQTRCLEdBQzdCLE1BQU0sMEJBQTBCLENBQUM7QUFLbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBUS9DLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxD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QUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQS96QlUsbUJBQW1CO21HQUFuQixtQkFBbUIsOEVDMUVoQyx5a0VBOENBLCswV0RpQkksWUFBWSxvRkFDWixrQkFBa0IsdWhEQUNsQixlQUFlLDhCQUNmLGVBQWUsNFFBQ2YsNEJBQTRCOzs0RkFPbkIsbUJBQW1CO2tCQWYvQixTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZiw0QkFBNEI7cUJBQzdCLGlCQUdjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7XHJcbiAgVGFibGVDb2x1bW5TY2hlbWEsXHJcbiAgVGFibGVDb2x1bW5UeXBlLFxyXG4gIFRhYmxlQWN0aW9ucyxcclxuICBUYWJsZUNvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgQ2hpcHNUeXBlLFxyXG4gIEFsaWduVHlwZSxcclxuICBDaGlwT3B0aW9uLFxyXG4gIENoZWNrYm94T3B0aW9uLFxyXG4gIEZpbHRlcnNBbmRPcHRpb25zLFxyXG4gIERhdGFUYWJsZUNvbXBvbmVudCxcclxuICBNb2RhbENvbmZpcm1hdGlvbkNvbXBvbmVudCxcclxuICBFeHBvcnRGb3JtYXQsXHJcbiAgRXhwb3J0Rm9ybWF0UG9wb3ZlckNvbXBvbmVudCxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHsgQWxlcnRUeXBlIH0gZnJvbSAnQGllZWVzYS1ucG0vbW9kZWxzJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTZWFyY2hVc2Vyc1BheWxvYWQsXHJcbiAgRmlsdGVyVXNlcnNQYXlsb2FkLFxyXG4gIFVzZXIsXHJcbiAgTG9nZ2VkSW5Vc2VySW5mbyxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBEZWxldGVVc2VyR3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RlbGV0ZS11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9yb3N0ZXItZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwVXNlckluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtdXNlci1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBSb3N0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvc3Rlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9maWx0ZXItdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLWNvbHVtbi1zY2hlbWEtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvc3RlckV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3N0ZXItZXhwb3J0LnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFZpZXdSb3N0ZXJDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25hbGl0aWVzIHRvIGFkZCwgZWRpdCwgZGVsZXRlIHVzZXIgdG8gZ3JvdXAgcm9zdGVyLCBhc3NpZ24gYW5kIG1vZGlmeSByb2xlcyhzKSB0byB0aGUgZ3JvdXAgdXNlcnMsIGFuZCBzZWFyY2ggdXNlciBmcm9tIHJvc3Rlci5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25EZXN0cm95fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2Etdmlldy1yb3N0ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgRXhwb3J0Rm9ybWF0UG9wb3ZlckNvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3LXJvc3Rlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdmlldy1yb3N0ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlld1Jvc3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICB2aWV3Um9zdGVyQ29uc3RhbnRzID0gdGhpcy5jb25zdGFudHM/LnZpZXdSb3N0ZXI7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkaWFsb2dSZWY6IGFueTtcclxuICBhbGlnbm1lbnRUeXBlID0gQWxpZ25UeXBlO1xyXG4gIGZpbHRlcnMhOiBDaGlwT3B0aW9uW107XHJcbiAgY29sdW1uU2NoZW1hITogVGFibGVDb2x1bW5TY2hlbWFbXTtcclxuICB0YWJsZURhdGEhOiBVc2VyW107XHJcbiAgc2VsZWN0ZWRSb2xlSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkTWVtYmVyVHlwZUlkczogc3RyaW5nW10gPSBbXTtcclxuICBzZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlYXJjaFBsYWNlaG9sZGVyVGV4dCE6IHN0cmluZztcclxuICBzZWxlY3RlZFJvbGVzOiBGaWx0ZXJzQW5kT3B0aW9ucyA9IHt9O1xyXG4gIHNlbGVjdGVkTWVtYmVyVHlwZXM6IEZpbHRlcnNBbmRPcHRpb25zID0ge307XHJcbiAgc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbnM6IEZpbHRlcnNBbmRPcHRpb25zID0ge307XHJcbiAgcm9sZXM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBmaWx0ZXJPcHRpb25zOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgbWVtYmVyVHlwZXM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICBjbGFzc2lmaWNhdGlvbnM6IENoZWNrYm94T3B0aW9uW10gPSBbXTtcclxuICByb3N0ZXJBY3Rpb25zOiBUYWJsZUFjdGlvbnMgPSB7XHJcbiAgICBpc1NlYXJjaE5lZWRlZDogdHJ1ZSxcclxuICAgIGlzRmlsdGVyTmVlZGVkOiB0cnVlLFxyXG4gICAgaXNBZGROZWVkZWQ6IGZhbHNlLFxyXG4gICAgaXNEZWxldGVOZWVkZWQ6IGZhbHNlLFxyXG4gICAgaXNFZGl0TmVlZGVkOiBmYWxzZSxcclxuICB9O1xyXG4gIGRlZmF1bHRTb3J0ZWRDb2x1bW4hOiBzdHJpbmc7XHJcbiAgZGF0YVRhYmxlQ2xhc3NOYW1lITogc3RyaW5nO1xyXG4gIGhhc0NsYXNzaWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgc2VhcmNoVGVybSE6IHN0cmluZztcclxuICBncm91cFJvc3RlclR5cGUhOiBHcm91cFJvc3RlclR5cGU7XHJcbiAgZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24gPSB0cnVlO1xyXG4gIHRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWwgPVxyXG4gICAgdGhpcy52aWV3Um9zdGVyQ29uc3RhbnRzPy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsO1xyXG4gIHRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzID1cclxuICAgIHRoaXMudmlld1Jvc3RlckNvbnN0YW50cz8udGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnM7XHJcbiAgZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeSA9XHJcbiAgICB0aGlzLnZpZXdSb3N0ZXJDb25zdGFudHM/LmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnk7XHJcbiAgdXNlckluZm8hOiBMb2dnZWRJblVzZXJJbmZvO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ3JvdXBTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2U6IEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyByb3N0ZXJFeHBvcnRTZXJ2aWNlOiBSb3N0ZXJFeHBvcnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnJvc3RlckFjdGlvbnMuaXNBZGROZWVkZWQgPSB0aGlzLmdldE1hbmFnZVJvc3RlckFjdGlvbnNQZXJtaXNzaW9uKCk7XHJcbiAgICB0aGlzLnJvc3RlckFjdGlvbnMuaXNFZGl0TmVlZGVkID0gdGhpcy5nZXRNYW5hZ2VSb3N0ZXJBY3Rpb25zUGVybWlzc2lvbigpO1xyXG4gICAgdGhpcy5yb3N0ZXJBY3Rpb25zLmlzRGVsZXRlTmVlZGVkID0gdGhpcy5nZXRNYW5hZ2VSb3N0ZXJBY3Rpb25zUGVybWlzc2lvbigpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlckluZm8gPSB0aGlzLmdyb3VwU2VydmljZT8uZ2V0VXNlckluZm8oKTtcclxuICAgIHRoaXMucm9zdGVyRXhwb3J0U2VydmljZS5zZXRBcGlCYXNlVXJsKHRoaXMuZ3JvdXBTZXJ2aWNlPy5hcGlCYXNlVXJsKTtcclxuICAgIGNvbnN0IGdyb3VwVHlwZSA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpO1xyXG4gICAgdGhpcy5oYXNDbGFzc2lmaWNhdGlvbiA9IGdyb3VwVHlwZT8uaGFzQ2xhc3NpZmljYXRpb24gPz8gZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9IGdyb3VwVHlwZT8ucm9zdGVyVHlwZSBhcyBHcm91cFJvc3RlclR5cGU7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBSb3N0ZXJUeXBlKVxyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLmNvbnN0YW50cz8uZXJyb3JzPy5FUjEwMDEsXHJcbiAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuV0FSTklORyxcclxuICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuY29uZmlndXJlVGFibGVJbmZvKCk7XHJcbiAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNob3cgYWRkIG5ldyB1c2VyIHN1Y2Nlc3MgbWVzc2FnZSB3aGVuIGNhblNob3dNZXNzYWdlIGlzIHNldCB0cnVlXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ncm91cFNlcnZpY2U/LmNhblNob3dNZXNzYWdlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmNhblNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmdyb3VwU2VydmljZT8ucm9zdGVyRnVuY3Rpb25UeXBlID09PVxyXG4gICAgICAgIFJvc3RlckZ1bmN0aW9uVHlwZT8uQUREX1VTRVJfVE9fUk9TVEVSXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgICAgICAgIHRoaXMuY29uc3RhbnRzPy5hZGRVc2VyUm9zdGVyPy5tZXNzYWdlPy5zdWNjZXNzPy5zdWJtaXNzaW9uLFxyXG4gICAgICAgICAgQWxlcnRUeXBlLlNVQ0NFU1NcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlPy5yb3N0ZXJGdW5jdGlvblR5cGUgPT09XHJcbiAgICAgICAgUm9zdGVyRnVuY3Rpb25UeXBlPy5FRElUX1JPU1RFUl9VU0VSX1JPTEVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgdGhpcy5jb25zdGFudHM/LmVkaXRVc2VyUm9sZXM/Lm1lc3NhZ2U/LnN1Y2Nlc3M/LnN1Ym1pc3Npb24sXHJcbiAgICAgICAgICBBbGVydFR5cGUuU1VDQ0VTU1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGdyb3VwVHlwZSA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpO1xyXG4gICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPSBncm91cFR5cGU/LnJvc3RlclR5cGUgYXMgR3JvdXBSb3N0ZXJUeXBlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWRlcyBvciBzaG93cyByb3N0ZXIgYWRkIHVzZXIsIGVkaXQgdXNlciBhbmQgZGVsZXRlIHVzZXIgYWN0aW9ucyBiYXNlZCBvbiB1c2VyIGdyb3VwIHBlcm1pc3Npb25zLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRNYW5hZ2VSb3N0ZXJBY3Rpb25zUGVybWlzc2lvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMpIHx8XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFBlcm1pc3Npb25UeXBlLk1BTkFHRV9HUk9VUF9PRkZJQ0VSUykgfHxcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UudmFsaWRhdGVBY2Nlc3MoUGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX01FTUJFUlMpIHx8XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfUk9TVEVSUylcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyZSBUYWJsZSBpbmZvcm1hdGlvbiBiYXNlZCBvbiBncm91cCByb3N0ZXIgdHlwZVxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgY29uZmlndXJlVGFibGVJbmZvKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTCkge1xyXG4gICAgICB0aGlzLmRhdGFUYWJsZUNsYXNzTmFtZSA9ICdpZWVlc2EtaW5kaXZpZHVhbC1yb3N0ZXInO1xyXG4gICAgICB0aGlzLnNlYXJjaFBsYWNlaG9sZGVyVGV4dCA9XHJcbiAgICAgICAgdGhpcy52aWV3Um9zdGVyQ29uc3RhbnRzPy5zZWFyY2hQbGFjZWhvbGRlckluZGl2aWR1YWw7XHJcbiAgICAgIHRoaXMuZmlsdGVycyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogRmlsdGVyVHlwZS5NRU1CRVJfVFlQRSxcclxuICAgICAgICAgIG5hbWU6IEZpbHRlclR5cGUuTUVNQkVSX1RZUEUsXHJcbiAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgIGNoaXBUeXBlOiBDaGlwc1R5cGUuVE9HR0xFLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMuY29sdW1uU2NoZW1hID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAxLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgaGVhZGluZzogJycsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LnNlbGVjdH1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDIsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLk5BTUUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/Lm5hbWUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT4gYCR7ZWxlbWVudC5uYW1lfWAsXHJcbiAgICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDMsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLkVNUExPWUVSLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5lbXBsb3llcixcclxuICAgICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICBgJHtlbGVtZW50LmVtcGxveWVyID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA0LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5FTUFJTCxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8uZW1haWwsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5lbWFpbCA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogNSxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuTUVNQkVSX1RZUEUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvckluZGl2aWR1YWw/Lm1lbWJlclR5cGUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5tZW1iZXJTdGF0dXMgPz8gdGhpcy5lbXB0eUZpZWxkVmFsdWVSZXBsYWNlZEJ5fWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogNixcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuT1JHQU5JWkFUSU9OLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5vcmdhbml6YXRpb25OYW1lLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQub3JnYW5pemF0aW9uID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiA4LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5ST0xFLFxyXG4gICAgICAgICAgaGVhZGluZzogdGhpcy50YWJsZUNvbHVtbnNGb3JJbmRpdmlkdWFsPy5yb2xlLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgIGAke2VsZW1lbnQucm9sZSA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICBpZiAodGhpcy5oYXNDbGFzc2lmaWNhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZ2V0Q2xhc3NpZmljYXRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5TY2hlbWEuc3BsaWNlKHRoaXMuY29sdW1uU2NoZW1hLmxlbmd0aCAtIDEsIDAsIHtcclxuICAgICAgICAgIGlkOiA3LFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5DTEFTU0lGSUNBVElPTixcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9ySW5kaXZpZHVhbD8uY2xhc3NpZmljYXRpb24sXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5jbGFzc2lmaWNhdGlvbiA/PyB0aGlzLmVtcHR5RmllbGRWYWx1ZVJlcGxhY2VkQnl9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IEZpbHRlclR5cGUuQ0xBU1NJRklDQVRJT04sXHJcbiAgICAgICAgICBuYW1lOiBGaWx0ZXJUeXBlLkNMQVNTSUZJQ0FUSU9OLFxyXG4gICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICBjaGlwVHlwZTogQ2hpcHNUeXBlLlRPR0dMRSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSKSB7XHJcbiAgICAgIHRoaXMuZGF0YVRhYmxlQ2xhc3NOYW1lID0gJ2llZWVzYS1zeXN0ZW0tdXNlcnMtcm9zdGVyJztcclxuICAgICAgdGhpcy5zZWFyY2hQbGFjZWhvbGRlclRleHQgPVxyXG4gICAgICAgIHRoaXMudmlld1Jvc3RlckNvbnN0YW50cz8uc2VhcmNoUGxhY2Vob2xkZXJTeXN0ZW1Vc2VycztcclxuICAgICAgdGhpcy5maWx0ZXJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiBGaWx0ZXJUeXBlLlJPTEUsXHJcbiAgICAgICAgICBuYW1lOiBGaWx0ZXJUeXBlLlJPTEUsXHJcbiAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgIGNoaXBUeXBlOiBDaGlwc1R5cGUuVE9HR0xFLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMuY29sdW1uU2NoZW1hID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAxLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgaGVhZGluZzogJycsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGNlbGxEYXRhOiAoZWxlbWVudDogYW55KSA9PiBgJHtlbGVtZW50LnNlbGVjdH1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IDIsXHJcbiAgICAgICAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uU2NoZW1hVXNlckdyb3VwLk5BTUUsXHJcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLnRhYmxlQ29sdW1uc0ZvclN5c3RlbVVzZXJzPy5uYW1lLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQubmFtZX1gLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiAzLFxyXG4gICAgICAgICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtblNjaGVtYVVzZXJHcm91cC5FTUFJTCxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnM/LmVtYWlsLFxyXG4gICAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgICAgY2VsbERhdGE6IChlbGVtZW50OiBhbnkpID0+IGAke2VsZW1lbnQuZW1haWx9YCxcclxuICAgICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZDogNCxcclxuICAgICAgICAgIGNvbHVtbkRlZjogVGFibGVDb2x1bW5TY2hlbWFVc2VyR3JvdXAuUk9MRSxcclxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMudGFibGVDb2x1bW5zRm9yU3lzdGVtVXNlcnM/LnJvbGUsXHJcbiAgICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjZWxsRGF0YTogKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgYCR7ZWxlbWVudC5yb2xlID8/IHRoaXMuZW1wdHlGaWVsZFZhbHVlUmVwbGFjZWRCeX1gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldFJvbGVzKCk7XHJcbiAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4gPSB0aGlzLmNvbHVtblNjaGVtYVsxXS5jb2x1bW5EZWY7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJ5IGNhbGxpbmcgZ2V0R3JvdXBVc2VycygpIGZyb20gZ3JvdXBTZXJ2aWNlIGFuZCBzZXRzIHRhYmxlRGF0YSB0byBkaXNwbGF5IHRoZSB1c2VycyBpbiBhIGdyaWQuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgIHNvcnRDb2x1bW46IHN0cmluZyxcclxuICAgIHNvcnREaXJlY3Rpb246IGJvb2xlYW5cclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFVzZXJzKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgIHNvcnRDb2x1bW4sXHJcbiAgICAgICAgc29ydERpcmVjdGlvblxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnRyYW5zZm9ybVVzZXJSb2xlc05hbWVBc1N0cmluZyhyZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzPy5pbmNsdWRlcygnMTAyNicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwcyBiYXNlZCBvbiB0aGUgY29sdW1uIG5hbWUgYW5kIHNvcnQgZGlyZWN0aW9uLlxyXG4gICAqIEBwYXJhbSB7U29ydH0gc29ydFxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Tb3J0R3JvdXBVc2Vycyhzb3J0OiBTb3J0KSB7XHJcbiAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4gPSBzb3J0LmFjdGl2ZTtcclxuICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24gPVxyXG4gICAgICBzb3J0LmRpcmVjdGlvbiA9PT0gVGFibGVDb2x1bW5Tb3J0RGlyZWN0aW9uLkFTQ0VORElORztcclxuICAgIGlmIChzb3J0LmRpcmVjdGlvbiA9PT0gVGFibGVDb2x1bW5Tb3J0RGlyZWN0aW9uLk5PX1NPUlQpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm9sZUlkcy5sZW5ndGgpXHJcbiAgICAgICAgdGhpcy5vbkZpbHRlckdyb3VwVXNlcnMoW3RoaXMuc2VsZWN0ZWRSb2xlc10pO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcy5sZW5ndGggfHxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcy5sZW5ndGhcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5vbkZpbHRlckdyb3VwVXNlcnMoW1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9ucyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZW1iZXJUeXBlcyxcclxuICAgICAgICBdKTtcclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb25cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBzZWxlY3RlZCBncm91cCB0eXBlIHJvbGVzIGJ5IGNhbGxpbmcgZ2V0R3JvdXBUeXBlUm9sZXMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyBhc3NpZ24gcm9sZXMuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRSb2xlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFR5cGVSb2xlcyhcclxuICAgICAgICB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cFR5cGUgYXMgc3RyaW5nXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMucm9sZXMgPSByZXNwb25zZTtcclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRNZW1iZXJUeXBlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgY2xhc3NpZmljYXRpb24gYnkgY2FsbGluZyBnZXRDbGFzc2lmaWNhdGlvbnMoKSBmcm9tIGdyb3VwU2VydmljZSBhbmQgc2V0cyBjbGFzc2lmaWNhdGlvbnMuXHJcbiAgICogQG1lbWJlcm9mIFZpZXdVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Q2xhc3NpZmljYXRpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldENsYXNzaWZpY2F0aW9ucygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NpZmljYXRpb25zPy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogb3B0aW9uLmNsYXNzaWZpY2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLmNsYXNzaWZpY2F0aW9uTmFtZSxcclxuICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBtZW1iZXIgdHlwZXMgYnkgY2FsbGluZyBnZXRNZW1iZXJUeXBlcygpIGZyb20gZ3JvdXBTZXJ2aWNlIGFuZCBzZXRzIG1lbWJlciB0eXBlcy5cclxuICAgKiBAbWVtYmVyb2YgVmlld1VzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRNZW1iZXJUeXBlcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1lbWJlclR5cGVzID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0TWVtYmVyVHlwZXMoKTtcclxuICAgIG1lbWJlclR5cGVzPy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgdGhpcy5tZW1iZXJUeXBlcz8ucHVzaCh7XHJcbiAgICAgICAgaWQ6IG9wdGlvbi5yb2xlSWQsXHJcbiAgICAgICAgbmFtZTogb3B0aW9uLnJvbGVOYW1lLFxyXG4gICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgZmlsdGVyIG9wdGlvbnMgZm9yIE1lbWJlciBUeXBlIG9yIENsYXNzaWZpY2F0aW9uIGZpbHRlciBkZXBlbmRzIG9uIHRoZSBzZWxlY3Rpb24uXHJcbiAgICogQHBhcmFtIHtDaGlwT3B0aW9ufSBvcHRpb25cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldFNlbGVjdGVkRmlsdGVyT3B0aW9ucyhvcHRpb246IENoaXBPcHRpb24pIHtcclxuICAgIHN3aXRjaCAob3B0aW9uLmlkKSB7XHJcbiAgICAgIGNhc2UgRmlsdGVyVHlwZS5NRU1CRVJfVFlQRToge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9IHRoaXMubWVtYmVyVHlwZXM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBGaWx0ZXJUeXBlLkNMQVNTSUZJQ0FUSU9OOiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zID0gdGhpcy5jbGFzc2lmaWNhdGlvbnM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBGaWx0ZXJUeXBlLlJPTEU6IHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB0aGlzLnJvbGVzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGdyb3VwIHVzZXJzIGJ5IGNhbGxpbmcgc2VhcmNoR3JvdXBVc2VycygpIGZyb20gZ3JvdXBTZXJ2aWNlIGFuZCBzZXRzIHRhYmxlRGF0YSB0byBkaXNwbGF5IHRoZSB1c2VycyBpbiBhIGdyaWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm0gLXNlYXJjaFRlcm0gY2FuIGJlIHVzZXIgbmFtZSBvciBlbWFpbCBhbmQgdXNlciBpcyBzZWFyY2hlZCBiYXNlZCBvbiB0aGUgZW1haWwgb3IgbmFtZS5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uU2VhcmNoR3JvdXBVc2VycyhzZWFyY2hUZXJtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0/LnRyaW0oKTtcclxuICAgIGxldCBwYXlsb2FkITogU2VhcmNoVXNlcnNQYXlsb2FkO1xyXG4gICAgc3dpdGNoICh0aGlzLmdyb3VwUm9zdGVyVHlwZSkge1xyXG4gICAgICBjYXNlIEdyb3VwUm9zdGVyVHlwZS5TWVNURU1fVVNFUjoge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvbGVJZHM/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEdyb3VwVXNlcnNBbmRJbml0aWFsaXplVGFibGVWaWV3KFxyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJvbGVJZHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vbkZpbHRlckdyb3VwVXNlcnMoW3RoaXMuc2VsZWN0ZWRSb2xlc10pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKClcclxuICAgICAgICAgICAgICA/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICBzZWFyY2hCeU5hbWVPckVtYWlsT3JSZXBPcmc6IHRoaXMuc2VhcmNoVGVybSxcclxuICAgICAgICAgICAgZmlsdGVyQnlSb2xlQ2xhc3NpZmljYXRpb25NZW1iZXJTdGF0dXNJZHM6IHRoaXMuc2VsZWN0ZWRSb2xlSWRzLFxyXG4gICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIGFzY2VuZGluZ09yZGVyOiB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUw6IHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkcz8ubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcz8ubGVuZ3RoID09PSAwXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHM/Lmxlbmd0aCA+IDAgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHM/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLm9uRmlsdGVyR3JvdXBVc2VycyhbXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9ucyxcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZXMsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKClcclxuICAgICAgICAgICAgICA/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICBzZWFyY2hCeU5hbWVPckVtYWlsT3JSZXBPcmc6IHRoaXMuc2VhcmNoVGVybSxcclxuICAgICAgICAgICAgZmlsdGVyQnlSb2xlQ2xhc3NpZmljYXRpb25NZW1iZXJTdGF0dXNJZHM6IFtcclxuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ2xhc3NpZmljYXRpb25JZHMsXHJcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHMsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgYXNjZW5kaW5nT3JkZXI6IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5zZWFyY2hHcm91cFVzZXJzKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnRyYW5zZm9ybVVzZXJSb2xlc05hbWVBc1N0cmluZyhyZXNwb25zZSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGNvbnN0IG5vVXNlcnNGb3VuZEVycm9yQ29kZXMgPSBbJzEwMjknLCAnMTAzMCcsICcxMDMxJywgJzEwMzInXTtcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzICYmIG5vVXNlcnNGb3VuZEVycm9yQ29kZXMuaW5jbHVkZXMoZXJyb3JDb2Rlc1swXSkpIHtcclxuICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSBlbHNlIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBvZiBmaWx0ZXJzIGFuZCByZXR1cm5zIGlkIG9mIHNlbGVjdGVkIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge0ZpbHRlcnNBbmRPcHRpb25zW119IHNlbGVjdGVkT3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7RmlsdGVyVHlwZX0gZmlsdGVyVHlwZVxyXG4gICAqIEBwYXJhbSB7RmlsdGVyc0FuZE9wdGlvbnN9IHNlbGVjdGVkRmlsdGVyT3B0aW9uc1xyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZEZpbHRlck9wdGlvbnNBbmRJZHMoXHJcbiAgICBzZWxlY3RlZE9wdGlvbnM6IEZpbHRlcnNBbmRPcHRpb25zW10sXHJcbiAgICBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlLFxyXG4gICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zOiBGaWx0ZXJzQW5kT3B0aW9ucyxcclxuICAgIHNlbGVjdGVkRmlsdGVySWRzOiBzdHJpbmdbXVxyXG4gICkge1xyXG4gICAgc2VsZWN0ZWRPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RlZE9wdGlvbikgPT4ge1xyXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZWxlY3RlZE9wdGlvbikpIHtcclxuICAgICAgICBpZiAoa2V5ID09PSBmaWx0ZXJUeXBlKSB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEZpbHRlck9wdGlvbnNMaXN0OiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgICAgICAgICB2YWx1ZT8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVySWRzLnB1c2gob3B0aW9uLmlkIGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3QucHVzaChvcHRpb24pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnNba2V5XSA9IHNlbGVjdGVkRmlsdGVyT3B0aW9uc0xpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYnkgY2FsbGluZyBnZXRHcm91cFVzZXJzQnlSb2xlcygpIGZyb20gZ3JvdXBTZXJ2aWNlIGFuZCBzZXRzIHRhYmxlRGF0YSB0byBkaXNwbGF5IHRoZSB1c2VycyBpbiBhIGdyaWQuXHJcbiAgICogQHBhcmFtIHtDaGlwT3B0aW9uW10gfCB8IENoZWNrYm94T3B0aW9uW119IHJvbGVzXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkZpbHRlckdyb3VwVXNlcnMoc2VsZWN0ZWRPcHRpb25zOiBGaWx0ZXJzQW5kT3B0aW9uc1tdKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm9sZUlkcyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkcyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9ucyA9IHt9O1xyXG4gICAgdGhpcy5zZWxlY3RlZE1lbWJlclR5cGVzID0ge307XHJcbiAgICBsZXQgcGF5bG9hZCE6IEZpbHRlclVzZXJzUGF5bG9hZDtcclxuICAgIHN3aXRjaCAodGhpcy5ncm91cFJvc3RlclR5cGUpIHtcclxuICAgICAgY2FzZSBHcm91cFJvc3RlclR5cGUuU1lTVEVNX1VTRVI6IHtcclxuICAgICAgICB0aGlzLmdldFNlbGVjdGVkRmlsdGVyT3B0aW9uc0FuZElkcyhcclxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyxcclxuICAgICAgICAgIEZpbHRlclR5cGUuUk9MRSxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb2xlcyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb2xlSWRzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb25zPy5sZW5ndGggPT09IDAgJiYgIXRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uLFxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hUZXJtKSB7XHJcbiAgICAgICAgICB0aGlzLm9uU2VhcmNoR3JvdXBVc2Vycyh0aGlzLnNlYXJjaFRlcm0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpXHJcbiAgICAgICAgICAgICAgPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgZmlsdGVyQnlSb2xlQ2xhc3NpZmljYXRpb25NZW1iZXJTdGF0dXNJZHM6IHRoaXMuc2VsZWN0ZWRSb2xlSWRzLFxyXG4gICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIGFzY2VuZGluZ09yZGVyOiB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUw6IHtcclxuICAgICAgICB0aGlzLmdldFNlbGVjdGVkRmlsdGVyT3B0aW9uc0FuZElkcyhcclxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyxcclxuICAgICAgICAgIEZpbHRlclR5cGUuTUVNQkVSX1RZUEUsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZXMsXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVtYmVyVHlwZUlkc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEZpbHRlck9wdGlvbnNBbmRJZHMoXHJcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMsXHJcbiAgICAgICAgICBGaWx0ZXJUeXBlLkNMQVNTSUZJQ0FUSU9OLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9ucyxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDbGFzc2lmaWNhdGlvbklkc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9ucz8ubGVuZ3RoID09PSAwICYmICF0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgIHRoaXMuZ2V0R3JvdXBVc2Vyc0FuZEluaXRpYWxpemVUYWJsZVZpZXcoXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbixcclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgdGhpcy5vblNlYXJjaEdyb3VwVXNlcnModGhpcy5zZWFyY2hUZXJtKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKVxyXG4gICAgICAgICAgICAgID8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgIGZpbHRlckJ5Um9sZUNsYXNzaWZpY2F0aW9uTWVtYmVyU3RhdHVzSWRzOiBbXHJcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZE1lbWJlclR5cGVJZHMsXHJcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZENsYXNzaWZpY2F0aW9uSWRzLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgIGFzY2VuZGluZ09yZGVyOiB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBVc2Vyc0J5Um9sZXMocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID1cclxuICAgICAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UudHJhbnNmb3JtVXNlclJvbGVzTmFtZUFzU3RyaW5nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBuby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ29kZXM/LmluY2x1ZGVzKCcxMDI3JykpIHtcclxuICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSBlbHNlIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgY3VzdG9tIGVycm9ycyB3aGlsZSByZXRyaWV2aW5nIGdyb3VwcyB1c2Vycywgcm9sZXMsIHNlYXJjaCB1c2VycywgZmlsdGVyIHVzZXIgYnkgcm9sZXMuXHJcbiAgICogQHBhcmFtIHsqfSBlcnJvclxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBoYW5kbGVFcnJvcnMoZXJyb3I6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpICYmICFlcnJvcj8uZXJyb3I/LnN0YXR1cykge1xyXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLmdyb3VwU2VydmljZS5wYXJzZUVycm9yTWVzc2FnZShlcnJvckNvZGVzKTtcclxuICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKGVycm9yTWVzc2FnZSwgQWxlcnRUeXBlLkVSUk9SKTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICB0aGlzLmdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBPcGVucyB0aGUgY29uZmlybWF0aW9uIG1vZGFsIHRvIGdldCB1c2VyIGNvbmZpcm1hdGlvbiB0byBkZWxldGUgdGhlIHVzZXJzIGZyb20gdGhlIHNlbGVjdGVkIGdyb3VwLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBvcGVuVXNlckRlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsKHNlbGVjdGVkVXNlcnM6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgdXNlcklkcyA9IHNlbGVjdGVkVXNlcnMubWFwKCh1c2VyOiBVc2VyKSA9PiB1c2VyPy51c2VySWQpO1xyXG4gICAgaWYgKFxyXG4gICAgICB1c2VySWRzLmluY2x1ZGVzKHRoaXMudXNlckluZm8/LnVzZXJJZCkgJiZcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2UuaXNBZG1pblVzZXIoKSAmJlxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZT8uZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk/LmlzQWRtaW5cclxuICAgICkge1xyXG4gICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoYCR7Y29uc3RhbnRzPy5lcnJvcnM/LlsxMDM5XX1gLCBBbGVydFR5cGUuRVJST1IpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cEluZm8gPSB0aGlzLmdyb3VwU2VydmljZT8uZ2V0U2VsZWN0ZWRHcm91cEluZm8oKTtcclxuICAgICAgY29uc3QgY29uZmlybWF0aW9uSW5mbyA9IGNvbnN0YW50cz8uZGVsZXRlVXNlcnNHcm91cD8uY29uZmlybWF0aW9uSW5mbztcclxuICAgICAgY29uc3QgZGVsZXRlVXNlckdyb3VwTW9kYWxPcHRpb25zID0ge1xyXG4gICAgICAgIGxlZnRCdXR0b25MYWJlbDogY29uZmlybWF0aW9uSW5mbz8ubGVmdEJ1dHRvbkxhYmVsLFxyXG4gICAgICAgIHJpZ2h0QnV0dG9uTGFiZWw6IGNvbmZpcm1hdGlvbkluZm8/LnJpZ2h0QnV0dG9uTGFiZWwsXHJcbiAgICAgICAgcHJvbXB0TWVzc2FnZTogYCR7Y29uZmlybWF0aW9uSW5mbz8ucHJvbXB0TWVzc2FnZVBhcnQxfSAke3VzZXJJZHM/Lmxlbmd0aH0gJHtjb25maXJtYXRpb25JbmZvPy5wcm9tcHRNZXNzYWdlUGFydDJ9ICR7c2VsZWN0ZWRHcm91cEluZm8/Lmdyb3VwTmFtZX0/YCxcclxuICAgICAgICBhY3Rpb25CdXR0b25BbGlnbjogdGhpcy5hbGlnbm1lbnRUeXBlPy5NSURETEUsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihNb2RhbENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IGRlbGV0ZVVzZXJHcm91cE1vZGFsT3B0aW9ucyxcclxuICAgICAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgICAgIGF1dG9Gb2N1czogJ2RpYWxvZycsXHJcbiAgICAgICAgYXJpYUxhYmVsOiBjb25zdGFudHM/LmFyaWFMYWJlbD8uYWxlcnQsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZlxyXG4gICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVVzZXJzR3JvdXAoXHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cEluZm8/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICAgIHVzZXJJZHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2VuZCBBUEkgcmVxdWVzdCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHVzZXIocykgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIGhhbmRsZXMgdGhlIHN1Y2Nlc3MgYW5kIGVycm9yIHJlc3BvbnNlLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZGVsZXRlVXNlcnNHcm91cChncm91cElkOiBzdHJpbmcsIHVzZXJJZHM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBkZWxldGVVc2Vyc0dyb3VwVGV4dHMgPSBjb25zdGFudHM/LmRlbGV0ZVVzZXJzR3JvdXA7XHJcbiAgICBjb25zdCBkZWxldGVVc2VyR3JvdXBQYXlsb2FkOiBEZWxldGVVc2VyR3JvdXBQYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgW2dyb3VwSWRdOiB1c2VySWRzLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5kZWxldGVVc2Vyc0dyb3VwKGRlbGV0ZVVzZXJHcm91cFBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXM/LnN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgYCR7cmVzLmJvZHl9ICR7ZGVsZXRlVXNlcnNHcm91cFRleHRzPy5tZXNzYWdlPy5zdWNjZXNzPy5yZW1vdmVkfWAsXHJcbiAgICAgICAgICAgICAgQWxlcnRUeXBlLlNVQ0NFU1NcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRHcm91cFVzZXJzQW5kSW5pdGlhbGl6ZVRhYmxlVmlldyhcclxuICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTb3J0ZWRDb2x1bW4sXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgc2VsZWN0ZWQgdXNlciBpbmZvIGFuZCBlbWl0cyBldmVudCBvcGVuTW9kYWxOb3RpZmllciB3aXRoIEVESVRfUk9TVEVSX1VTRVJfUk9MRSB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge0dyb3VwVXNlckluZm9bXX0gc2VsZWN0ZWRVc2VySW5mb1xyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25FZGl0VXNlclJvbGVzKHNlbGVjdGVkVXNlckluZm86IEdyb3VwVXNlckluZm9bXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTClcclxuICAgICAgdGhpcy5ncm91cFNlcnZpY2Uuc2V0U2VsZWN0ZWRVc2VySW5mbyh7XHJcbiAgICAgICAgZW1haWw6IHNlbGVjdGVkVXNlckluZm9bMF0/LmVtYWlsLFxyXG4gICAgICAgIG5hbWU6IHNlbGVjdGVkVXNlckluZm9bMF0/Lm5hbWUsXHJcbiAgICAgICAgcm9sZTogc2VsZWN0ZWRVc2VySW5mb1swXT8ucm9sZSxcclxuICAgICAgICB1c2VySWQ6IHNlbGVjdGVkVXNlckluZm9bMF0/LnVzZXJJZCxcclxuICAgICAgICBjbGFzc2lmaWNhdGlvbjogc2VsZWN0ZWRVc2VySW5mb1swXT8uY2xhc3NpZmljYXRpb24sXHJcbiAgICAgICAgb3JnYW5pemF0aW9uOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5vcmdhbml6YXRpb24sXHJcbiAgICAgICAgbWVtYmVyU3RhdHVzOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5tZW1iZXJTdGF0dXMsXHJcbiAgICAgICAgY2FuRGVsZXRlOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5jYW5EZWxldGUsXHJcbiAgICAgIH0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmdyb3VwU2VydmljZS5zZXRTZWxlY3RlZFVzZXJJbmZvKHtcclxuICAgICAgICBlbWFpbDogc2VsZWN0ZWRVc2VySW5mb1swXT8uZW1haWwsXHJcbiAgICAgICAgbmFtZTogc2VsZWN0ZWRVc2VySW5mb1swXT8ubmFtZSxcclxuICAgICAgICByb2xlOiBzZWxlY3RlZFVzZXJJbmZvWzBdPy5yb2xlLFxyXG4gICAgICAgIHVzZXJJZDogc2VsZWN0ZWRVc2VySW5mb1swXT8udXNlcklkLFxyXG4gICAgICAgIGNhbkRlbGV0ZTogc2VsZWN0ZWRVc2VySW5mb1swXT8uY2FuRGVsZXRlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdyb3VwU2VydmljZT8ub3Blbk1vZGFsTm90aWZpZXI/Lm5leHQoXHJcbiAgICAgIEdyb3VwRnVuY3Rpb25UeXBlLkVESVRfUk9TVEVSX1VTRVJfUk9MRVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIG9wZW5Nb2RhbE5vdGlmaWVyIGV2ZW50IHdpdGggR3JvdXBGdW5jdGlvblR5cGUgdmFsdWUgYXMgQUREX1VTRVJfVE9fUk9TVEVSXHJcbiAgICogQG1lbWJlcm9mIFZpZXdSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkFkZE5ld1VzZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZT8ub3Blbk1vZGFsTm90aWZpZXI/Lm5leHQoXHJcbiAgICAgIEdyb3VwRnVuY3Rpb25UeXBlLkFERF9VU0VSX1RPX1JPU1RFUlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgYWxlcnRzIGZvciBzdWNjZXNzLCBlcnJvciwgd2FybmluZy5cclxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBzdHJpbmdbXSl9IG1lc3NhZ2UgLWVycm9yIG9yIHdhcm5pbmcgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB7QWxlcnRUeXBlfSBhbGVydFR5cGVcclxuICAgKiBAcmV0dXJuIC1yZXR1cm5zIG5vdGhpbmdcclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNob3dBbGVydE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10sIGFsZXJ0VHlwZTogQWxlcnRUeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZT8uc2hvd01lc3NhZ2Uoe1xyXG4gICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxyXG4gICAgICBhbGVydFR5cGU6IGFsZXJ0VHlwZSxcclxuICAgICAgaXNDbG9zZU5lZWRlZDogdHJ1ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlcyB0aGUgZXhwb3J0IGZvcm1hdCBwb3BvdmVyIOKAlCBkZWxlZ2F0ZXMgdG8gUm9zdGVyRXhwb3J0U2VydmljZS5cclxuICAgKiBAbWVtYmVyb2YgVmlld1Jvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRXhwb3J0Q2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvc3RlckV4cG9ydFNlcnZpY2UudG9nZ2xlUG9wb3ZlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBleHBvcnQgZm9ybWF0IHNlbGVjdGlvbiDigJQgZGVsZWdhdGVzIHRvIFJvc3RlckV4cG9ydFNlcnZpY2UgdXNpbmcgdGhlXHJcbiAgICogY3VycmVudGx5IHNlbGVjdGVkIGdyb3VwJ3MgaWQgYW5kIG5hbWUuXHJcbiAgICogQHBhcmFtIHtFeHBvcnRGb3JtYXR9IGZvcm1hdFxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25FeHBvcnRGb3JtYXRTZWxlY3RlZChmb3JtYXQ6IEV4cG9ydEZvcm1hdCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEluZm8gPSB0aGlzLmdyb3VwU2VydmljZT8uZ2V0U2VsZWN0ZWRHcm91cEluZm8oKTtcclxuICAgIGNvbnN0IGdyb3VwSWQgPSBzZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmc7XHJcbiAgICAvLyBXaXRob3V0IGEgZ3JvdXAgaWQgdGhlIGV4cG9ydCBVUkwgd291bGQgYmUgbWFsZm9ybWVkLCBzbyBndWFyZCBoZXJlXHJcbiAgICAvLyBpbnN0ZWFkIG9mIGZpcmluZyBhIGJhZCByZXF1ZXN0LlxyXG4gICAgaWYgKCFncm91cElkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZSh0aGlzLmNvbnN0YW50cz8uZXJyb3JzPy5kZWZhdWx0LCBBbGVydFR5cGUuRVJST1IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBncm91cE5hbWUgPSBzZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBOYW1lID8/ICcnO1xyXG4gICAgdGhpcy5yb3N0ZXJFeHBvcnRTZXJ2aWNlLm9uRm9ybWF0U2VsZWN0ZWQoZm9ybWF0LCBncm91cElkLCBncm91cE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmdPbkRlc3Ryb3kgcGVyZm9ybXMgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgdW5zdWJzY3JpYmluZyBmcm9tIHN1YnNjcmlwdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBWaWV3Um9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvc3RlckV4cG9ydFNlcnZpY2UuZGVzdHJveSgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8aWVlZXNhLWRhdGEtdGFibGVcclxuICBbdGFibGVEYXRhSW5mb109XCJ0YWJsZURhdGFcIlxyXG4gIFtjb2x1bW5TY2hlbWFJbmZvXT1cImNvbHVtblNjaGVtYVwiXHJcbiAgW3NlYXJjaFBsYWNlSG9sZGVyVGV4dF09XCJzZWFyY2hQbGFjZWhvbGRlclRleHRcIlxyXG4gIFt0YWJsZUFjdGlvbnNdPVwicm9zdGVyQWN0aW9uc1wiXHJcbiAgW2lzQ2VsbFRleHRPdmVyZmxvd0VsbGlwc2lzXT1cInRydWVcIlxyXG4gIFtmaWx0ZXJzXT1cImZpbHRlcnNcIlxyXG4gIFtjbGFzc05hbWVdPVwiZGF0YVRhYmxlQ2xhc3NOYW1lXCJcclxuICBbc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXT1cImZpbHRlck9wdGlvbnNcIlxyXG4gIFtkZWZhdWx0U29ydGVkQ29sdW1uXT1cImRlZmF1bHRTb3J0ZWRDb2x1bW5cIlxyXG4gIChzZWxlY3RlZEZpbHRlcik9XCJzZXRTZWxlY3RlZEZpbHRlck9wdGlvbnMoJGV2ZW50KVwiXHJcbiAgKHJlbW92ZUZpbHRlcmVkT3B0aW9uKT1cIm9uRmlsdGVyR3JvdXBVc2VycygkZXZlbnQpXCJcclxuICAoZmlsdGVyZWRPcHRpb25zKT1cIm9uRmlsdGVyR3JvdXBVc2VycygkZXZlbnQpXCJcclxuICAoc2VhcmNoZWRWYWx1ZSk9XCJvblNlYXJjaEdyb3VwVXNlcnMoJGV2ZW50KVwiXHJcbiAgKHNlbGVjdGVkUm93VG9FZGl0KT1cIm9uRWRpdFVzZXJSb2xlcygkZXZlbnQpXCJcclxuICAoc2VsZWN0ZWRSb3dzVG9EZWxldGUpPVwib3BlblVzZXJEZWxldGVDb25maXJtYXRpb25Nb2RhbCgkZXZlbnQpXCJcclxuICAoc29ydENoYW5nZSk9XCJvblNvcnRHcm91cFVzZXJzKCRldmVudClcIlxyXG4gIChhZGRSb3cpPVwib25BZGROZXdVc2VyKClcIlxyXG4+XHJcbiAgPCEtLSBFeHBvcnQgUm9zdGVyIEJ1dHRvbiArIFBvcG92ZXIg4oCUIHByb2plY3RlZCBpbnRvIHRoZSBkYXRhLXRhYmxlIGFjdGlvbiByb3csXHJcbiAgICAgICBpbmxpbmUgYWZ0ZXIgdGhlIGRlbGV0ZSBpY29uLiAtLT5cclxuICA8ZGl2IGRhdGFUYWJsZUFjdGlvbnMgY2xhc3M9XCJpZWVlc2Etdmlldy1yb3N0ZXJfX2V4cG9ydC13cmFwcGVyXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1idXR0b25cclxuICAgICAgY2xhc3M9XCJtYXQtdGVydGlhcnktYnV0dG9uIGllZWVzYS12aWV3LXJvc3Rlcl9fZXhwb3J0LWJ0blwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbnN0YW50cz8ucm9zdGVyRXhwb3J0Py5hcmlhTGFiZWxcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwicm9zdGVyRXhwb3J0U2VydmljZS5pc0V4cG9ydEluUHJvZ3Jlc3MkIHwgYXN5bmNcIlxyXG4gICAgICAoY2xpY2spPVwib25FeHBvcnRDbGljaygpXCJcclxuICAgID5cclxuICAgICAgPHN2ZyBjbGFzcz1cImllZWVzYS12aWV3LXJvc3Rlcl9fZXhwb3J0LWJ0bi1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgPHVzZSB4bGluazpocmVmPVwiYXNzZXRzL2ltYWdlcy9zcHJpdGVzL3Nwcml0ZXMuc3ZnI2ljb24tZXhwb3J0XCI+PC91c2U+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICB7eyBjb25zdGFudHM/LnJvc3RlckV4cG9ydD8uYnV0dG9uTGFiZWwgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxpZWVlc2EtZXhwb3J0LWZvcm1hdC1wb3BvdmVyXHJcbiAgICAgIFtmb3JtYXRPcHRpb25zXT1cInJvc3RlckV4cG9ydFNlcnZpY2UuZXhwb3J0Rm9ybWF0T3B0aW9uc1wiXHJcbiAgICAgIFtpc09wZW5dPVwiKHJvc3RlckV4cG9ydFNlcnZpY2UuaXNQb3BvdmVyT3BlbiQgfCBhc3luYykgPz8gZmFsc2VcIlxyXG4gICAgICBbcG9wb3ZlclRpdGxlXT1cInJvc3RlckV4cG9ydFNlcnZpY2UucG9wb3ZlclRpdGxlXCJcclxuICAgICAgW2Zvcm1hdFN1YnRpdGxlc109XCJyb3N0ZXJFeHBvcnRTZXJ2aWNlLmV4cG9ydEZvcm1hdFN1YnRpdGxlc1wiXHJcbiAgICAgIChmb3JtYXRTZWxlY3RlZCk9XCJvbkV4cG9ydEZvcm1hdFNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAoY2xvc2VkKT1cInJvc3RlckV4cG9ydFNlcnZpY2UuY2xvc2VQb3BvdmVyKClcIlxyXG4gICAgPjwvaWVlZXNhLWV4cG9ydC1mb3JtYXQtcG9wb3Zlcj5cclxuICA8L2Rpdj5cclxuPC9pZWVlc2EtZGF0YS10YWJsZT5cclxuIl19