@ieeesa-npm/dashboard 0.0.4 → 0.0.6

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.
@@ -320,7 +320,7 @@ export class YourGroupsComponent {
320
320
  this.visibleRows = rows;
321
321
  }
322
322
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: YourGroupsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
323
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: YourGroupsComponent, isStandalone: true, selector: "ieeesa-your-groups", inputs: { groups: "groups", sectionState: "sectionState", totalGroups: "totalGroups", pageIndex: "pageIndex", pageSize: "pageSize", expanded: "expanded" }, outputs: { viewAllGroups: "viewAllGroups", pageChange: "pageChange", expandedChange: "expandedChange" }, ngImport: i0, template: "<section class=\"ieeesa-your-groups\">\r\n <!-- Header: title + count, View All link, collapse/expand toggle -->\r\n <div class=\"ieeesa-your-groups__header\">\r\n <div class=\"ieeesa-your-groups__heading\">\r\n <h2 class=\"ieeesa-your-groups__title m-0\">{{ texts?.title }}</h2>\r\n </div>\r\n\r\n <div class=\"ieeesa-your-groups__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-your-groups__view-all\"\r\n [attr.aria-label]=\"texts?.ariaLabel?.viewAll\"\r\n (click)=\"onViewAll()\"\r\n >\r\n {{ texts?.viewAllLabel }}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-your-groups__toggle\"\r\n [attr.aria-expanded]=\"isExpanded\"\r\n [attr.aria-label]=\"texts?.ariaLabel?.toggle\"\r\n (click)=\"onToggleExpand()\"\r\n >\r\n <span>{{ isExpanded ? texts?.collapseLabel : texts?.expandLabel }}</span>\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"isExpanded ? 'fa-chevron-up' : 'fa-chevron-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Body: only when the card is expanded. -->\r\n <div class=\"ieeesa-your-groups__body\" *ngIf=\"isExpanded\">\r\n <ieeesa-loader\r\n *ngIf=\"sectionState === sectionStates.LOADING\"\r\n ></ieeesa-loader>\r\n\r\n <p\r\n *ngIf=\"sectionState === sectionStates.ERROR\"\r\n class=\"ieeesa-your-groups__message ieeesa-your-groups__message--error\"\r\n role=\"alert\"\r\n >\r\n {{ texts?.errorMessage }}\r\n </p>\r\n\r\n <p\r\n *ngIf=\"sectionState === sectionStates.EMPTY\"\r\n class=\"ieeesa-your-groups__message\"\r\n role=\"status\"\r\n >\r\n {{ texts?.emptyMessage }}\r\n </p>\r\n\r\n <ng-container *ngIf=\"sectionState === sectionStates.LOADED\">\r\n <table class=\"ieeesa-your-groups__table\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">{{ texts?.columns?.group }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.type }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.officerRole }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.affiliation }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.memberLevel }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of visibleRows; trackBy: trackByRow\">\r\n <!-- GROUP ROW -->\r\n <ng-container *ngIf=\"row.kind === 'group'\">\r\n <td class=\"ieeesa-your-groups__group-cell\">\r\n <!-- Group row toggle (level -1): reveals the first hierarchy\r\n node. Same shared icon button as the Groups tree. -->\r\n <ieeesa-icon-button\r\n *ngIf=\"isLevelExpandable(row.group!, -1)\"\r\n class=\"ieeesa-your-groups__hierarchy-toggle\"\r\n [iconButton]=\"getToggleButton(row.group!, -1)\"\r\n [ariaExpanded]=\"isLevelExpanded(row.group!, -1)\"\r\n (iconButtonClick)=\"onToggleLevel(row.group!, -1)\"\r\n ></ieeesa-icon-button>\r\n <!-- Leaf group (no hierarchy): spacer keeps names aligned. -->\r\n <span\r\n *ngIf=\"!isLevelExpandable(row.group!, -1)\"\r\n class=\"ieeesa-your-groups__toggle-spacer\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"ieeesa-your-groups__group-name\">\r\n {{ row.group!.group }}\r\n </span>\r\n </td>\r\n <td>{{ row.group!.type }}</td>\r\n <td>{{ row.group!.officerRole }}</td>\r\n <td>{{ row.group!.affiliation }}</td>\r\n <td>\r\n <span\r\n class=\"ieeesa-your-groups__badge\"\r\n [ngClass]=\"resolveBadgeClass(row.group!.memberLevel)\"\r\n >\r\n {{ row.group!.memberLevel }}\r\n </span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- HIERARCHY (ancestor) ROW -->\r\n <ng-container *ngIf=\"row.kind === 'hierarchy'\">\r\n <td class=\"ieeesa-your-groups__group-cell ieeesa-your-groups__hierarchy-cell\">\r\n <span\r\n class=\"ieeesa-your-groups__indent\"\r\n [style.width.px]=\"row.level * indentPerLevel\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <!-- This node's own +/- toggle, when it has a further child to\r\n reveal (step-by-step drill-down like the Groups tree). -->\r\n <ieeesa-icon-button\r\n *ngIf=\"isLevelExpandable(row.group!, row.nodeIndex!)\"\r\n class=\"ieeesa-your-groups__hierarchy-toggle\"\r\n [iconButton]=\"getToggleButton(row.group!, row.nodeIndex!)\"\r\n [ariaExpanded]=\"isLevelExpanded(row.group!, row.nodeIndex!)\"\r\n (iconButtonClick)=\"onToggleLevel(row.group!, row.nodeIndex!)\"\r\n ></ieeesa-icon-button>\r\n <!-- Leaf node: spacer keeps the name aligned with parent nodes\r\n (same footprint as the toggle), no connector arrow. -->\r\n <span\r\n *ngIf=\"!isLevelExpandable(row.group!, row.nodeIndex!)\"\r\n class=\"ieeesa-your-groups__toggle-spacer\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"ieeesa-your-groups__hierarchy-name\">\r\n {{ row.node!.groupName }}\r\n <span\r\n *ngIf=\"row.node!.groupAcronym\"\r\n class=\"ieeesa-your-groups__hierarchy-acronym\"\r\n >\r\n ({{ row.node!.groupAcronym }})\r\n </span>\r\n </span>\r\n </td>\r\n <td colspan=\"4\"></td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Pagination: the same Angular Material paginator the shared data-table\r\n uses \u2014 it provides the \"Items per page\" dropdown, range label, and\r\n prev/next controls. -->\r\n <mat-paginator\r\n *ngIf=\"groupCount > 0\"\r\n class=\"ieeesa-your-groups__paginator\"\r\n [length]=\"groupCount\"\r\n [pageSize]=\"pageSize\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onPaginatorChange($event)\"\r\n ></mat-paginator>\r\n </ng-container>\r\n </div>\r\n</section>\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-your-groups{display:block;background-color:#fff;border-radius:12px;box-shadow:0 1px 2px #0003;padding:20px 24px;border:1px solid #E2E8F0}.ieeesa-your-groups__header{display:flex;align-items:center;justify-content:space-between;gap:16px}.ieeesa-your-groups__heading{display:flex;flex-direction:column;gap:2px}.ieeesa-your-groups__title{font-family:Calibri Bold;font-weight:700;font-size:18px;color:#0f172a}.ieeesa-your-groups__count{font-family:Calibri Regular;font-size:.75rem;color:#777a7e}.ieeesa-your-groups__actions{display:flex;align-items:center;gap:16px}.ieeesa-your-groups__view-all{background:none;border:none;padding:0;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-your-groups__view-all:hover{text-decoration:underline}.ieeesa-your-groups__toggle{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border:1px solid #dbe2eb;border-radius:8px;background-color:#fff;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-your-groups__toggle:hover{border-color:#00629b}.ieeesa-your-groups__toggle i{font-size:.75rem}.ieeesa-your-groups__body{margin-top:16px}.ieeesa-your-groups__message{text-align:center;padding:32px 0;font-family:Calibri Regular;font-size:.875rem;color:#777a7e}.ieeesa-your-groups__message--error{color:#ba0c2f}.ieeesa-your-groups__table{width:100%;border-collapse:collapse}.ieeesa-your-groups__table th,.ieeesa-your-groups__table td{text-align:left;padding:14px 16px;border-bottom:1px solid #dbe2eb;vertical-align:middle}.ieeesa-your-groups__table th{background-color:#f4f5f7;color:#333436;font-family:Calibri Bold;font-weight:700;font-size:.875rem}.ieeesa-your-groups__table td{color:#333436;font-size:.875rem}.ieeesa-your-groups__table tbody tr:nth-child(2n) td{background-color:#f8fcff}.ieeesa-your-groups__group-cell{display:flex;align-items:center;gap:10px}.ieeesa-your-groups__indent{flex:0 0 auto;display:inline-block}.ieeesa-your-groups__hierarchy-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;line-height:0}.ieeesa-your-groups__hierarchy-toggle ::ng-deep .ieeesa-icon-button{display:inline-flex;align-items:flex-start!important;justify-content:center;width:24px;height:24px;min-width:0;padding:0;margin:0;line-height:0}.ieeesa-your-groups__hierarchy-toggle ::ng-deep .ieeesa-icon-button__svg{width:24px;height:24px;display:block}.ieeesa-your-groups__toggle-spacer{flex:0 0 auto;display:inline-block;width:24px;height:24px}.ieeesa-your-groups__group-name{color:#00629b;font-family:Calibri Bold;font-weight:700}.ieeesa-your-groups__hierarchy-cell{gap:6px}.ieeesa-your-groups__hierarchy-name{color:#333436}.ieeesa-your-groups__hierarchy-acronym{color:#777a7e}.ieeesa-your-groups__badge{display:inline-flex;align-items:center;padding:.125em .75em;border-radius:1em;font-size:.875rem;white-space:nowrap}.ieeesa-your-groups__badge--success{color:#2e7d32;background-color:#2e7d321f}.ieeesa-your-groups__badge--warning{color:#b35600;background-color:#b356001f}.ieeesa-your-groups__paginator{margin-top:8px}.ieeesa-your-groups__paginator ::ng-deep .mat-mdc-paginator-container{justify-content:flex-end}.ieeesa-your-groups__paginator ::ng-deep .mat-mdc-paginator{background-color:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i2.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: LoaderComponent, selector: "ieeesa-loader", inputs: ["diameter"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton", "isLabelNeeded"], outputs: ["iconButtonClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
323
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: YourGroupsComponent, isStandalone: true, selector: "ieeesa-your-groups", inputs: { groups: "groups", sectionState: "sectionState", totalGroups: "totalGroups", pageIndex: "pageIndex", pageSize: "pageSize", expanded: "expanded" }, outputs: { viewAllGroups: "viewAllGroups", pageChange: "pageChange", expandedChange: "expandedChange" }, ngImport: i0, template: "<section class=\"ieeesa-your-groups\">\r\n <!-- Header: title + count, View All link, collapse/expand toggle -->\r\n <div class=\"ieeesa-your-groups__header\">\r\n <div class=\"ieeesa-your-groups__heading\">\r\n <h2 class=\"ieeesa-your-groups__title m-0\">{{ texts?.title }}</h2>\r\n <!-- Count shown only when the card is collapsed (e.g. \"12 Groups\"),\r\n matching the Figma. When expanded, the table replaces it. -->\r\n <span\r\n *ngIf=\"!isExpanded && sectionState === sectionStates.LOADED\"\r\n class=\"ieeesa-your-groups__count\"\r\n >\r\n {{ groupCount }} {{ texts?.countSuffix }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"ieeesa-your-groups__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-your-groups__view-all\"\r\n [attr.aria-label]=\"texts?.ariaLabel?.viewAll\"\r\n (click)=\"onViewAll()\"\r\n >\r\n {{ texts?.viewAllLabel }}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-your-groups__toggle\"\r\n [attr.aria-expanded]=\"isExpanded\"\r\n [attr.aria-label]=\"texts?.ariaLabel?.toggle\"\r\n (click)=\"onToggleExpand()\"\r\n >\r\n <span>{{ isExpanded ? texts?.collapseLabel : texts?.expandLabel }}</span>\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"isExpanded ? 'fa-chevron-up' : 'fa-chevron-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Body: only when the card is expanded. -->\r\n <div class=\"ieeesa-your-groups__body\" *ngIf=\"isExpanded\">\r\n <ieeesa-loader\r\n *ngIf=\"sectionState === sectionStates.LOADING\"\r\n ></ieeesa-loader>\r\n\r\n <p\r\n *ngIf=\"sectionState === sectionStates.ERROR\"\r\n class=\"ieeesa-your-groups__message ieeesa-your-groups__message--error\"\r\n role=\"alert\"\r\n >\r\n {{ texts?.errorMessage }}\r\n </p>\r\n\r\n <p\r\n *ngIf=\"sectionState === sectionStates.EMPTY\"\r\n class=\"ieeesa-your-groups__message\"\r\n role=\"status\"\r\n >\r\n {{ texts?.emptyMessage }}\r\n </p>\r\n\r\n <ng-container *ngIf=\"sectionState === sectionStates.LOADED\">\r\n <table class=\"ieeesa-your-groups__table\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">{{ texts?.columns?.group }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.type }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.officerRole }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.affiliation }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.memberLevel }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of visibleRows; trackBy: trackByRow\">\r\n <!-- GROUP ROW -->\r\n <ng-container *ngIf=\"row.kind === 'group'\">\r\n <td class=\"ieeesa-your-groups__group-cell\">\r\n <!-- Group row toggle (level -1): reveals the first hierarchy\r\n node. Same shared icon button as the Groups tree. -->\r\n <ieeesa-icon-button\r\n *ngIf=\"isLevelExpandable(row.group!, -1)\"\r\n class=\"ieeesa-your-groups__hierarchy-toggle\"\r\n [iconButton]=\"getToggleButton(row.group!, -1)\"\r\n [ariaExpanded]=\"isLevelExpanded(row.group!, -1)\"\r\n (iconButtonClick)=\"onToggleLevel(row.group!, -1)\"\r\n ></ieeesa-icon-button>\r\n <!-- Leaf group (no hierarchy): spacer keeps names aligned. -->\r\n <span\r\n *ngIf=\"!isLevelExpandable(row.group!, -1)\"\r\n class=\"ieeesa-your-groups__toggle-spacer\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"ieeesa-your-groups__group-name\">\r\n {{ row.group!.group }}\r\n </span>\r\n </td>\r\n <td>{{ row.group!.type }}</td>\r\n <td>{{ row.group!.officerRole }}</td>\r\n <td>{{ row.group!.affiliation }}</td>\r\n <td>\r\n <span\r\n class=\"ieeesa-your-groups__badge\"\r\n [ngClass]=\"resolveBadgeClass(row.group!.memberLevel)\"\r\n >\r\n {{ row.group!.memberLevel }}\r\n </span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- HIERARCHY (ancestor) ROW -->\r\n <ng-container *ngIf=\"row.kind === 'hierarchy'\">\r\n <td class=\"ieeesa-your-groups__group-cell ieeesa-your-groups__hierarchy-cell\">\r\n <span\r\n class=\"ieeesa-your-groups__indent\"\r\n [style.width.px]=\"row.level * indentPerLevel\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <!-- This node's own +/- toggle, when it has a further child to\r\n reveal (step-by-step drill-down like the Groups tree). -->\r\n <ieeesa-icon-button\r\n *ngIf=\"isLevelExpandable(row.group!, row.nodeIndex!)\"\r\n class=\"ieeesa-your-groups__hierarchy-toggle\"\r\n [iconButton]=\"getToggleButton(row.group!, row.nodeIndex!)\"\r\n [ariaExpanded]=\"isLevelExpanded(row.group!, row.nodeIndex!)\"\r\n (iconButtonClick)=\"onToggleLevel(row.group!, row.nodeIndex!)\"\r\n ></ieeesa-icon-button>\r\n <!-- Leaf node: spacer keeps the name aligned with parent nodes\r\n (same footprint as the toggle), no connector arrow. -->\r\n <span\r\n *ngIf=\"!isLevelExpandable(row.group!, row.nodeIndex!)\"\r\n class=\"ieeesa-your-groups__toggle-spacer\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"ieeesa-your-groups__hierarchy-name\">\r\n {{ row.node!.groupName }}\r\n <span\r\n *ngIf=\"row.node!.groupAcronym\"\r\n class=\"ieeesa-your-groups__hierarchy-acronym\"\r\n >\r\n ({{ row.node!.groupAcronym }})\r\n </span>\r\n </span>\r\n </td>\r\n <td colspan=\"4\"></td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Pagination: the same Angular Material paginator the shared data-table\r\n uses \u2014 it provides the \"Items per page\" dropdown, range label, and\r\n prev/next controls. -->\r\n <mat-paginator\r\n *ngIf=\"groupCount > 0\"\r\n class=\"ieeesa-your-groups__paginator\"\r\n [length]=\"groupCount\"\r\n [pageSize]=\"pageSize\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onPaginatorChange($event)\"\r\n ></mat-paginator>\r\n </ng-container>\r\n </div>\r\n</section>\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-your-groups{display:block;background-color:#fff;border-radius:12px;box-shadow:0 1px 2px #0003;padding:20px 24px;border:1px solid #E2E8F0}.ieeesa-your-groups__header{display:flex;align-items:center;justify-content:space-between;gap:16px}.ieeesa-your-groups__heading{display:flex;flex-direction:column;gap:2px}.ieeesa-your-groups__title{font-family:Calibri Bold;font-weight:700;font-size:18px;color:#0f172a}.ieeesa-your-groups__count{font-family:Calibri Regular;font-size:14px;color:#64748b;font-weight:400}.ieeesa-your-groups__actions{display:flex;align-items:center;gap:16px}.ieeesa-your-groups__view-all{background:none;border:none;padding:0;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-your-groups__view-all:hover{text-decoration:underline}.ieeesa-your-groups__toggle{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border:1px solid #dbe2eb;border-radius:8px;background-color:#fff;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-your-groups__toggle:hover{border-color:#00629b}.ieeesa-your-groups__toggle i{font-size:.75rem}.ieeesa-your-groups__body{margin-top:16px}.ieeesa-your-groups__message{text-align:center;padding:32px 0;font-family:Calibri Regular;font-size:.875rem;color:#777a7e}.ieeesa-your-groups__message--error{color:#ba0c2f}.ieeesa-your-groups__table{width:100%;border-collapse:collapse}.ieeesa-your-groups__table th,.ieeesa-your-groups__table td{text-align:left;padding:14px 16px;border-bottom:1px solid #dbe2eb;vertical-align:middle}.ieeesa-your-groups__table th{background-color:#f4f5f7;color:#333436;font-family:Calibri Bold;font-weight:700;font-size:.875rem}.ieeesa-your-groups__table td{color:#333436;font-size:.875rem}.ieeesa-your-groups__table tbody tr:nth-child(2n) td{background-color:#f8fcff}.ieeesa-your-groups__group-cell{display:flex;align-items:center;gap:10px}.ieeesa-your-groups__indent{flex:0 0 auto;display:inline-block}.ieeesa-your-groups__hierarchy-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;line-height:0}.ieeesa-your-groups__hierarchy-toggle .ieeesa-icon-button{display:inline-flex;align-items:flex-start!important;justify-content:center;width:24px;height:24px;min-width:0;padding:0;margin:0;line-height:0}.ieeesa-your-groups__hierarchy-toggle .ieeesa-icon-button__svg{width:24px;height:24px;display:block}.ieeesa-your-groups__toggle-spacer{flex:0 0 auto;display:inline-block;width:24px;height:24px}.ieeesa-your-groups__group-name{color:#00629b;font-family:Calibri Bold;font-weight:700}.ieeesa-your-groups__hierarchy-cell{gap:6px}.ieeesa-your-groups__hierarchy-name{color:#333436}.ieeesa-your-groups__hierarchy-acronym{color:#777a7e}.ieeesa-your-groups__badge{display:inline-flex;align-items:center;padding:.125em .75em;border-radius:1em;font-size:.875rem;white-space:nowrap}.ieeesa-your-groups__badge--success{color:#2e7d32;background-color:#2e7d321f}.ieeesa-your-groups__badge--warning{color:#b35600;background-color:#b356001f}.ieeesa-your-groups__paginator{margin-top:8px}.ieeesa-your-groups__paginator ::ng-deep .mat-mdc-paginator-container{justify-content:flex-end}.ieeesa-your-groups__paginator ::ng-deep .mat-mdc-paginator{background-color:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i2.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: LoaderComponent, selector: "ieeesa-loader", inputs: ["diameter"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton", "isLabelNeeded", "ariaExpanded"], outputs: ["iconButtonClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
324
324
  }
325
325
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: YourGroupsComponent, decorators: [{
326
326
  type: Component,
@@ -329,7 +329,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
329
329
  MatPaginatorModule,
330
330
  LoaderComponent,
331
331
  IconButtonComponent,
332
- ], encapsulation: ViewEncapsulation.None, template: "<section class=\"ieeesa-your-groups\">\r\n <!-- Header: title + count, View All link, collapse/expand toggle -->\r\n <div class=\"ieeesa-your-groups__header\">\r\n <div class=\"ieeesa-your-groups__heading\">\r\n <h2 class=\"ieeesa-your-groups__title m-0\">{{ texts?.title }}</h2>\r\n </div>\r\n\r\n <div class=\"ieeesa-your-groups__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-your-groups__view-all\"\r\n [attr.aria-label]=\"texts?.ariaLabel?.viewAll\"\r\n (click)=\"onViewAll()\"\r\n >\r\n {{ texts?.viewAllLabel }}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-your-groups__toggle\"\r\n [attr.aria-expanded]=\"isExpanded\"\r\n [attr.aria-label]=\"texts?.ariaLabel?.toggle\"\r\n (click)=\"onToggleExpand()\"\r\n >\r\n <span>{{ isExpanded ? texts?.collapseLabel : texts?.expandLabel }}</span>\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"isExpanded ? 'fa-chevron-up' : 'fa-chevron-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Body: only when the card is expanded. -->\r\n <div class=\"ieeesa-your-groups__body\" *ngIf=\"isExpanded\">\r\n <ieeesa-loader\r\n *ngIf=\"sectionState === sectionStates.LOADING\"\r\n ></ieeesa-loader>\r\n\r\n <p\r\n *ngIf=\"sectionState === sectionStates.ERROR\"\r\n class=\"ieeesa-your-groups__message ieeesa-your-groups__message--error\"\r\n role=\"alert\"\r\n >\r\n {{ texts?.errorMessage }}\r\n </p>\r\n\r\n <p\r\n *ngIf=\"sectionState === sectionStates.EMPTY\"\r\n class=\"ieeesa-your-groups__message\"\r\n role=\"status\"\r\n >\r\n {{ texts?.emptyMessage }}\r\n </p>\r\n\r\n <ng-container *ngIf=\"sectionState === sectionStates.LOADED\">\r\n <table class=\"ieeesa-your-groups__table\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">{{ texts?.columns?.group }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.type }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.officerRole }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.affiliation }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.memberLevel }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of visibleRows; trackBy: trackByRow\">\r\n <!-- GROUP ROW -->\r\n <ng-container *ngIf=\"row.kind === 'group'\">\r\n <td class=\"ieeesa-your-groups__group-cell\">\r\n <!-- Group row toggle (level -1): reveals the first hierarchy\r\n node. Same shared icon button as the Groups tree. -->\r\n <ieeesa-icon-button\r\n *ngIf=\"isLevelExpandable(row.group!, -1)\"\r\n class=\"ieeesa-your-groups__hierarchy-toggle\"\r\n [iconButton]=\"getToggleButton(row.group!, -1)\"\r\n [ariaExpanded]=\"isLevelExpanded(row.group!, -1)\"\r\n (iconButtonClick)=\"onToggleLevel(row.group!, -1)\"\r\n ></ieeesa-icon-button>\r\n <!-- Leaf group (no hierarchy): spacer keeps names aligned. -->\r\n <span\r\n *ngIf=\"!isLevelExpandable(row.group!, -1)\"\r\n class=\"ieeesa-your-groups__toggle-spacer\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"ieeesa-your-groups__group-name\">\r\n {{ row.group!.group }}\r\n </span>\r\n </td>\r\n <td>{{ row.group!.type }}</td>\r\n <td>{{ row.group!.officerRole }}</td>\r\n <td>{{ row.group!.affiliation }}</td>\r\n <td>\r\n <span\r\n class=\"ieeesa-your-groups__badge\"\r\n [ngClass]=\"resolveBadgeClass(row.group!.memberLevel)\"\r\n >\r\n {{ row.group!.memberLevel }}\r\n </span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- HIERARCHY (ancestor) ROW -->\r\n <ng-container *ngIf=\"row.kind === 'hierarchy'\">\r\n <td class=\"ieeesa-your-groups__group-cell ieeesa-your-groups__hierarchy-cell\">\r\n <span\r\n class=\"ieeesa-your-groups__indent\"\r\n [style.width.px]=\"row.level * indentPerLevel\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <!-- This node's own +/- toggle, when it has a further child to\r\n reveal (step-by-step drill-down like the Groups tree). -->\r\n <ieeesa-icon-button\r\n *ngIf=\"isLevelExpandable(row.group!, row.nodeIndex!)\"\r\n class=\"ieeesa-your-groups__hierarchy-toggle\"\r\n [iconButton]=\"getToggleButton(row.group!, row.nodeIndex!)\"\r\n [ariaExpanded]=\"isLevelExpanded(row.group!, row.nodeIndex!)\"\r\n (iconButtonClick)=\"onToggleLevel(row.group!, row.nodeIndex!)\"\r\n ></ieeesa-icon-button>\r\n <!-- Leaf node: spacer keeps the name aligned with parent nodes\r\n (same footprint as the toggle), no connector arrow. -->\r\n <span\r\n *ngIf=\"!isLevelExpandable(row.group!, row.nodeIndex!)\"\r\n class=\"ieeesa-your-groups__toggle-spacer\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"ieeesa-your-groups__hierarchy-name\">\r\n {{ row.node!.groupName }}\r\n <span\r\n *ngIf=\"row.node!.groupAcronym\"\r\n class=\"ieeesa-your-groups__hierarchy-acronym\"\r\n >\r\n ({{ row.node!.groupAcronym }})\r\n </span>\r\n </span>\r\n </td>\r\n <td colspan=\"4\"></td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Pagination: the same Angular Material paginator the shared data-table\r\n uses \u2014 it provides the \"Items per page\" dropdown, range label, and\r\n prev/next controls. -->\r\n <mat-paginator\r\n *ngIf=\"groupCount > 0\"\r\n class=\"ieeesa-your-groups__paginator\"\r\n [length]=\"groupCount\"\r\n [pageSize]=\"pageSize\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onPaginatorChange($event)\"\r\n ></mat-paginator>\r\n </ng-container>\r\n </div>\r\n</section>\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-your-groups{display:block;background-color:#fff;border-radius:12px;box-shadow:0 1px 2px #0003;padding:20px 24px;border:1px solid #E2E8F0}.ieeesa-your-groups__header{display:flex;align-items:center;justify-content:space-between;gap:16px}.ieeesa-your-groups__heading{display:flex;flex-direction:column;gap:2px}.ieeesa-your-groups__title{font-family:Calibri Bold;font-weight:700;font-size:18px;color:#0f172a}.ieeesa-your-groups__count{font-family:Calibri Regular;font-size:.75rem;color:#777a7e}.ieeesa-your-groups__actions{display:flex;align-items:center;gap:16px}.ieeesa-your-groups__view-all{background:none;border:none;padding:0;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-your-groups__view-all:hover{text-decoration:underline}.ieeesa-your-groups__toggle{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border:1px solid #dbe2eb;border-radius:8px;background-color:#fff;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-your-groups__toggle:hover{border-color:#00629b}.ieeesa-your-groups__toggle i{font-size:.75rem}.ieeesa-your-groups__body{margin-top:16px}.ieeesa-your-groups__message{text-align:center;padding:32px 0;font-family:Calibri Regular;font-size:.875rem;color:#777a7e}.ieeesa-your-groups__message--error{color:#ba0c2f}.ieeesa-your-groups__table{width:100%;border-collapse:collapse}.ieeesa-your-groups__table th,.ieeesa-your-groups__table td{text-align:left;padding:14px 16px;border-bottom:1px solid #dbe2eb;vertical-align:middle}.ieeesa-your-groups__table th{background-color:#f4f5f7;color:#333436;font-family:Calibri Bold;font-weight:700;font-size:.875rem}.ieeesa-your-groups__table td{color:#333436;font-size:.875rem}.ieeesa-your-groups__table tbody tr:nth-child(2n) td{background-color:#f8fcff}.ieeesa-your-groups__group-cell{display:flex;align-items:center;gap:10px}.ieeesa-your-groups__indent{flex:0 0 auto;display:inline-block}.ieeesa-your-groups__hierarchy-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;line-height:0}.ieeesa-your-groups__hierarchy-toggle ::ng-deep .ieeesa-icon-button{display:inline-flex;align-items:flex-start!important;justify-content:center;width:24px;height:24px;min-width:0;padding:0;margin:0;line-height:0}.ieeesa-your-groups__hierarchy-toggle ::ng-deep .ieeesa-icon-button__svg{width:24px;height:24px;display:block}.ieeesa-your-groups__toggle-spacer{flex:0 0 auto;display:inline-block;width:24px;height:24px}.ieeesa-your-groups__group-name{color:#00629b;font-family:Calibri Bold;font-weight:700}.ieeesa-your-groups__hierarchy-cell{gap:6px}.ieeesa-your-groups__hierarchy-name{color:#333436}.ieeesa-your-groups__hierarchy-acronym{color:#777a7e}.ieeesa-your-groups__badge{display:inline-flex;align-items:center;padding:.125em .75em;border-radius:1em;font-size:.875rem;white-space:nowrap}.ieeesa-your-groups__badge--success{color:#2e7d32;background-color:#2e7d321f}.ieeesa-your-groups__badge--warning{color:#b35600;background-color:#b356001f}.ieeesa-your-groups__paginator{margin-top:8px}.ieeesa-your-groups__paginator ::ng-deep .mat-mdc-paginator-container{justify-content:flex-end}.ieeesa-your-groups__paginator ::ng-deep .mat-mdc-paginator{background-color:transparent}\n"] }]
332
+ ], encapsulation: ViewEncapsulation.None, template: "<section class=\"ieeesa-your-groups\">\r\n <!-- Header: title + count, View All link, collapse/expand toggle -->\r\n <div class=\"ieeesa-your-groups__header\">\r\n <div class=\"ieeesa-your-groups__heading\">\r\n <h2 class=\"ieeesa-your-groups__title m-0\">{{ texts?.title }}</h2>\r\n <!-- Count shown only when the card is collapsed (e.g. \"12 Groups\"),\r\n matching the Figma. When expanded, the table replaces it. -->\r\n <span\r\n *ngIf=\"!isExpanded && sectionState === sectionStates.LOADED\"\r\n class=\"ieeesa-your-groups__count\"\r\n >\r\n {{ groupCount }} {{ texts?.countSuffix }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"ieeesa-your-groups__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-your-groups__view-all\"\r\n [attr.aria-label]=\"texts?.ariaLabel?.viewAll\"\r\n (click)=\"onViewAll()\"\r\n >\r\n {{ texts?.viewAllLabel }}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-your-groups__toggle\"\r\n [attr.aria-expanded]=\"isExpanded\"\r\n [attr.aria-label]=\"texts?.ariaLabel?.toggle\"\r\n (click)=\"onToggleExpand()\"\r\n >\r\n <span>{{ isExpanded ? texts?.collapseLabel : texts?.expandLabel }}</span>\r\n <i\r\n class=\"fa-solid\"\r\n [ngClass]=\"isExpanded ? 'fa-chevron-up' : 'fa-chevron-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Body: only when the card is expanded. -->\r\n <div class=\"ieeesa-your-groups__body\" *ngIf=\"isExpanded\">\r\n <ieeesa-loader\r\n *ngIf=\"sectionState === sectionStates.LOADING\"\r\n ></ieeesa-loader>\r\n\r\n <p\r\n *ngIf=\"sectionState === sectionStates.ERROR\"\r\n class=\"ieeesa-your-groups__message ieeesa-your-groups__message--error\"\r\n role=\"alert\"\r\n >\r\n {{ texts?.errorMessage }}\r\n </p>\r\n\r\n <p\r\n *ngIf=\"sectionState === sectionStates.EMPTY\"\r\n class=\"ieeesa-your-groups__message\"\r\n role=\"status\"\r\n >\r\n {{ texts?.emptyMessage }}\r\n </p>\r\n\r\n <ng-container *ngIf=\"sectionState === sectionStates.LOADED\">\r\n <table class=\"ieeesa-your-groups__table\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">{{ texts?.columns?.group }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.type }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.officerRole }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.affiliation }}</th>\r\n <th scope=\"col\">{{ texts?.columns?.memberLevel }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of visibleRows; trackBy: trackByRow\">\r\n <!-- GROUP ROW -->\r\n <ng-container *ngIf=\"row.kind === 'group'\">\r\n <td class=\"ieeesa-your-groups__group-cell\">\r\n <!-- Group row toggle (level -1): reveals the first hierarchy\r\n node. Same shared icon button as the Groups tree. -->\r\n <ieeesa-icon-button\r\n *ngIf=\"isLevelExpandable(row.group!, -1)\"\r\n class=\"ieeesa-your-groups__hierarchy-toggle\"\r\n [iconButton]=\"getToggleButton(row.group!, -1)\"\r\n [ariaExpanded]=\"isLevelExpanded(row.group!, -1)\"\r\n (iconButtonClick)=\"onToggleLevel(row.group!, -1)\"\r\n ></ieeesa-icon-button>\r\n <!-- Leaf group (no hierarchy): spacer keeps names aligned. -->\r\n <span\r\n *ngIf=\"!isLevelExpandable(row.group!, -1)\"\r\n class=\"ieeesa-your-groups__toggle-spacer\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"ieeesa-your-groups__group-name\">\r\n {{ row.group!.group }}\r\n </span>\r\n </td>\r\n <td>{{ row.group!.type }}</td>\r\n <td>{{ row.group!.officerRole }}</td>\r\n <td>{{ row.group!.affiliation }}</td>\r\n <td>\r\n <span\r\n class=\"ieeesa-your-groups__badge\"\r\n [ngClass]=\"resolveBadgeClass(row.group!.memberLevel)\"\r\n >\r\n {{ row.group!.memberLevel }}\r\n </span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- HIERARCHY (ancestor) ROW -->\r\n <ng-container *ngIf=\"row.kind === 'hierarchy'\">\r\n <td class=\"ieeesa-your-groups__group-cell ieeesa-your-groups__hierarchy-cell\">\r\n <span\r\n class=\"ieeesa-your-groups__indent\"\r\n [style.width.px]=\"row.level * indentPerLevel\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <!-- This node's own +/- toggle, when it has a further child to\r\n reveal (step-by-step drill-down like the Groups tree). -->\r\n <ieeesa-icon-button\r\n *ngIf=\"isLevelExpandable(row.group!, row.nodeIndex!)\"\r\n class=\"ieeesa-your-groups__hierarchy-toggle\"\r\n [iconButton]=\"getToggleButton(row.group!, row.nodeIndex!)\"\r\n [ariaExpanded]=\"isLevelExpanded(row.group!, row.nodeIndex!)\"\r\n (iconButtonClick)=\"onToggleLevel(row.group!, row.nodeIndex!)\"\r\n ></ieeesa-icon-button>\r\n <!-- Leaf node: spacer keeps the name aligned with parent nodes\r\n (same footprint as the toggle), no connector arrow. -->\r\n <span\r\n *ngIf=\"!isLevelExpandable(row.group!, row.nodeIndex!)\"\r\n class=\"ieeesa-your-groups__toggle-spacer\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"ieeesa-your-groups__hierarchy-name\">\r\n {{ row.node!.groupName }}\r\n <span\r\n *ngIf=\"row.node!.groupAcronym\"\r\n class=\"ieeesa-your-groups__hierarchy-acronym\"\r\n >\r\n ({{ row.node!.groupAcronym }})\r\n </span>\r\n </span>\r\n </td>\r\n <td colspan=\"4\"></td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Pagination: the same Angular Material paginator the shared data-table\r\n uses \u2014 it provides the \"Items per page\" dropdown, range label, and\r\n prev/next controls. -->\r\n <mat-paginator\r\n *ngIf=\"groupCount > 0\"\r\n class=\"ieeesa-your-groups__paginator\"\r\n [length]=\"groupCount\"\r\n [pageSize]=\"pageSize\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onPaginatorChange($event)\"\r\n ></mat-paginator>\r\n </ng-container>\r\n </div>\r\n</section>\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-your-groups{display:block;background-color:#fff;border-radius:12px;box-shadow:0 1px 2px #0003;padding:20px 24px;border:1px solid #E2E8F0}.ieeesa-your-groups__header{display:flex;align-items:center;justify-content:space-between;gap:16px}.ieeesa-your-groups__heading{display:flex;flex-direction:column;gap:2px}.ieeesa-your-groups__title{font-family:Calibri Bold;font-weight:700;font-size:18px;color:#0f172a}.ieeesa-your-groups__count{font-family:Calibri Regular;font-size:14px;color:#64748b;font-weight:400}.ieeesa-your-groups__actions{display:flex;align-items:center;gap:16px}.ieeesa-your-groups__view-all{background:none;border:none;padding:0;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-your-groups__view-all:hover{text-decoration:underline}.ieeesa-your-groups__toggle{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border:1px solid #dbe2eb;border-radius:8px;background-color:#fff;cursor:pointer;font-family:Calibri Bold;font-weight:700;font-size:18px;color:#00629b}.ieeesa-your-groups__toggle:hover{border-color:#00629b}.ieeesa-your-groups__toggle i{font-size:.75rem}.ieeesa-your-groups__body{margin-top:16px}.ieeesa-your-groups__message{text-align:center;padding:32px 0;font-family:Calibri Regular;font-size:.875rem;color:#777a7e}.ieeesa-your-groups__message--error{color:#ba0c2f}.ieeesa-your-groups__table{width:100%;border-collapse:collapse}.ieeesa-your-groups__table th,.ieeesa-your-groups__table td{text-align:left;padding:14px 16px;border-bottom:1px solid #dbe2eb;vertical-align:middle}.ieeesa-your-groups__table th{background-color:#f4f5f7;color:#333436;font-family:Calibri Bold;font-weight:700;font-size:.875rem}.ieeesa-your-groups__table td{color:#333436;font-size:.875rem}.ieeesa-your-groups__table tbody tr:nth-child(2n) td{background-color:#f8fcff}.ieeesa-your-groups__group-cell{display:flex;align-items:center;gap:10px}.ieeesa-your-groups__indent{flex:0 0 auto;display:inline-block}.ieeesa-your-groups__hierarchy-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;line-height:0}.ieeesa-your-groups__hierarchy-toggle .ieeesa-icon-button{display:inline-flex;align-items:flex-start!important;justify-content:center;width:24px;height:24px;min-width:0;padding:0;margin:0;line-height:0}.ieeesa-your-groups__hierarchy-toggle .ieeesa-icon-button__svg{width:24px;height:24px;display:block}.ieeesa-your-groups__toggle-spacer{flex:0 0 auto;display:inline-block;width:24px;height:24px}.ieeesa-your-groups__group-name{color:#00629b;font-family:Calibri Bold;font-weight:700}.ieeesa-your-groups__hierarchy-cell{gap:6px}.ieeesa-your-groups__hierarchy-name{color:#333436}.ieeesa-your-groups__hierarchy-acronym{color:#777a7e}.ieeesa-your-groups__badge{display:inline-flex;align-items:center;padding:.125em .75em;border-radius:1em;font-size:.875rem;white-space:nowrap}.ieeesa-your-groups__badge--success{color:#2e7d32;background-color:#2e7d321f}.ieeesa-your-groups__badge--warning{color:#b35600;background-color:#b356001f}.ieeesa-your-groups__paginator{margin-top:8px}.ieeesa-your-groups__paginator ::ng-deep .mat-mdc-paginator-container{justify-content:flex-end}.ieeesa-your-groups__paginator ::ng-deep .mat-mdc-paginator{background-color:transparent}\n"] }]
333
333
  }], propDecorators: { groups: [{
334
334
  type: Input
335
335
  }], sectionState: [{
@@ -349,4 +349,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
349
349
  }], expanded: [{
350
350
  type: Input
351
351
  }] } });
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW91ci1ncm91cHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy95b3VyLWdyb3Vwcy95b3VyLWdyb3Vwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL3lvdXItZ3JvdXBzL3lvdXItZ3JvdXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RSxPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLGVBQWUsR0FDaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQU1uRixPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDOzs7O0FBbUJ6RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFlSCxNQUFNLE9BQU8sbUJBQW1CO0lBZGhDO1FBZUUsOERBQThEO1FBQzdDLGNBQVMsR0FBUSxTQUFTLENBQUM7UUFDNUMseURBQXlEO1FBQ2hELFVBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztRQUUvQyxzRUFBc0U7UUFDN0Qsa0JBQWEsR0FBRyxxQkFBcUIsQ0FBQztRQUUvQyx1RUFBdUU7UUFDOUQsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFFN0IsOENBQThDO1FBQ3JDLG9CQUFlLEdBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FB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O2dCQUdHLFVBQVU7c0JBQW5CLE1BQU07Z0JBVUcsY0FBYztzQkFBdkIsTUFBTTtnQkFXSCxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7XHJcbiAgSWNvbkJ1dHRvbixcclxuICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gIExvYWRlckNvbXBvbmVudCxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRTZWN0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGFzaGJvYXJkLXNlY3Rpb24tc3RhdGUubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdyb3VwSGllcmFyY2h5Tm9kZSxcclxuICBHcm91cFJvdyxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtcm93Lm1vZGVsJztcclxuaW1wb3J0IHsgUGFnZUNoYW5nZSB9IGZyb20gJy4uLy4uL21vZGVscy9wYWdlLWNoYW5nZS5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5cclxuLyoqXHJcbiAqIEEgc2luZ2xlIHJlbmRlcmVkIHRhYmxlIHJvdy4gRWl0aGVyIGEgdG9wLWxldmVsIGdyb3VwIHJvdyAoYGtpbmQ6ICdncm91cCdgLFxyXG4gKiBjYXJyeWluZyB0aGUgZnVsbCB7QGxpbmsgR3JvdXBSb3d9KSBvciBhIGhpZXJhcmNoeSBub2RlIHJvdyAoYGtpbmQ6XHJcbiAqICdoaWVyYXJjaHknYCkgcmV2ZWFsZWQgc3RlcC1ieS1zdGVwIGFzIHRoZSB1c2VyIGRyaWxscyBkb3duLiBgbm9kZUluZGV4YCBpc1xyXG4gKiB0aGUgbm9kZSdzIHBvc2l0aW9uIGluIHRoZSBncm91cCdzIGBoaWVyYXJjaHlbXWAsIHVzZWQgdG8gZHJpdmUgdGhlIG5leHRcclxuICogZHJpbGwtZG93biBsZXZlbCBhbmQgdGhlIHBlci1ub2RlIHRvZ2dsZSAobWF0Y2hpbmcgdGhlIEdyb3VwcyBtb2R1bGUsIHdoZXJlXHJcbiAqIGVhY2ggbGV2ZWwgcmV2ZWFscyBvbmx5IGl0cyBuZXh0IGNoaWxkIGFuZCB0aGF0IGNoaWxkIGNhcnJpZXMgaXRzIG93biArL+KIkikuXHJcbiAqL1xyXG5pbnRlcmZhY2UgVGFibGVSb3cge1xyXG4gIGtpbmQ6ICdncm91cCcgfCAnaGllcmFyY2h5JztcclxuICBncm91cD86IEdyb3VwUm93O1xyXG4gIG5vZGU/OiBHcm91cEhpZXJhcmNoeU5vZGU7XHJcbiAgLyoqIEluZGV4IG9mIHRoaXMgbm9kZSB3aXRoaW4gdGhlIGdyb3VwJ3MgaGllcmFyY2h5W10gKGhpZXJhcmNoeSByb3dzIG9ubHkpLiAqL1xyXG4gIG5vZGVJbmRleD86IG51bWJlcjtcclxuICBsZXZlbDogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogR3JvdXBzX1NlY3Rpb24gKGBpZWVlc2EteW91ci1ncm91cHNgKSByZW5kZXJzIHRoZSBzaWduZWQtaW4gdXNlcidzIGdyb3VwcyBpblxyXG4gKiBhIGNvbGxhcHNpYmxlIGNhcmQgYXMgYSBjdXN0b20gaGllcmFyY2h5IHRhYmxlIHN0eWxlZCBsaWtlIHRoZSBNeSBQcm9maWxlXHJcbiAqIEZpbmQgR3JvdXBzIHRyZWU6IGVhY2ggZ3JvdXAgcm93IGNhcnJpZXMgYSBibHVlICsvLSB0b2dnbGUgKHdoZW4gaXQgaGFzIGFuXHJcbiAqIGFuY2VzdG9yIGhpZXJhcmNoeSkgdGhhdCBleHBhbmRzIHRvIHJldmVhbCB0aGUgZ3JvdXAncyBoaWVyYXJjaHkgcGF0aFxyXG4gKiAocm9vdOKGkmxlYWYpLCBpbmRlbnRlZC4gQ29sdW1uczogR3JvdXAsIFR5cGUsIE9mZmljZXIgUm9sZSwgQWZmaWxpYXRpb24sXHJcbiAqIE1lbWJlciBMZXZlbCAodGhlIG1lbWJlciBsZXZlbCByZW5kZXJzIGFzIGEgY29sb3VyZWQgcGlsbCDigJQgZ3JlZW4gZm9yIGFuXHJcbiAqIGFzc2lnbmVkIGxldmVsLCBhbWJlciBmb3IgXCJVbmFzc2lnbmVkXCIpLiBUaGUgY2FyZCBwYWdpbmF0ZXMgdGhlIHRvcC1sZXZlbFxyXG4gKiBncm91cHMgKDUgcGVyIHBhZ2UpLlxyXG4gKlxyXG4gKiBQdXJlbHkgcHJlc2VudGF0aW9uYWw6IGRhdGEgYXJyaXZlcyB2aWEgYEBJbnB1dGAsIGludGVudHMgbGVhdmUgdmlhXHJcbiAqIGBAT3V0cHV0YDsgbm8gQVBJIG9yIG5hdmlnYXRpb24gaGVyZS4gU3RhdGVzIChsb2FkZXIgLyBlbXB0eSAvIGVycm9yIC8gdGFibGUpXHJcbiAqIGFyZSBkcml2ZW4gYnkgYHNlY3Rpb25TdGF0ZWAuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIFlvdXJHcm91cHNDb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EteW91ci1ncm91cHMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxyXG4gICAgTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi95b3VyLWdyb3Vwcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4veW91ci1ncm91cHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWW91ckdyb3Vwc0NvbXBvbmVudCB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIC8qKiBVc2VyLWZhY2luZyBzdHJpbmdzIHNvdXJjZWQgZnJvbSBgY29uc3RhbnRzLmpzb25gLiAqL1xyXG4gIHJlYWRvbmx5IHRleHRzID0gdGhpcy5jb25zdGFudHM/Lmdyb3Vwc1NlY3Rpb247XHJcblxyXG4gIC8qKiBFbnVtIHJlZmVyZW5jZSBmb3IgdGVtcGxhdGUgY29tcGFyaXNvbnMgYWdhaW5zdCBgc2VjdGlvblN0YXRlYC4gKi9cclxuICByZWFkb25seSBzZWN0aW9uU3RhdGVzID0gRGFzaGJvYXJkU2VjdGlvblN0YXRlO1xyXG5cclxuICAvKiogUGVyLWxldmVsIGluZGVudGF0aW9uIHN0ZXAgKHB4KSBmb3IgdGhlIGV4cGFuZGVkIGhpZXJhcmNoeSByb3dzLiAqL1xyXG4gIHJlYWRvbmx5IGluZGVudFBlckxldmVsID0gMjg7XHJcblxyXG4gIC8qKiBTZWxlY3RhYmxlIFwiSXRlbXMgcGVyIHBhZ2VcIiBwYWdlIHNpemVzLiAqL1xyXG4gIHJlYWRvbmx5IHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1XTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXhwYW5kICgrKSBpY29uIGJ1dHRvbiDigJQgdGhlIFNBTUUgc3ByaXRlIGljb24gdGhlIEdyb3VwcyBwYWNrYWdlIHVzZXMgZm9yXHJcbiAgICogaXRzIHRyZWUgZXhwYW5kIHRvZ2dsZSAoaWNvbi1leHBhbmQtY29sbGFwc2UtcGx1cyksIHJlbmRlcmVkIHZpYSB0aGUgc2hhcmVkXHJcbiAgICogSWNvbkJ1dHRvbkNvbXBvbmVudCBmb3IgYSBjb25zaXN0ZW50IGxvb2sgYWNyb3NzIHRoZSBhcHAuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZXhwYW5kSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHtcclxuICAgIGlkOiAxLFxyXG4gICAgaWNvblVSTDogJ2Fzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLWV4cGFuZC1jb2xsYXBzZS1wbHVzJyxcclxuICAgIGFyaWFMYWJlbDogJ0V4cGFuZCBncm91cCcsXHJcbiAgICB0b29sVGlwOiAnRXhwYW5kIGdyb3VwJyxcclxuICB9O1xyXG5cclxuICAvKiogQ29sbGFwc2UgKOKIkikgaWNvbiBidXR0b24g4oCUIHRoZSBHcm91cHMgcGFja2FnZSdzIGljb24tZXhwYW5kLWNvbGxhcHNlLW1pbnVzLiAqL1xyXG4gIHJlYWRvbmx5IGNvbGxhcHNlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHtcclxuICAgIGlkOiAyLFxyXG4gICAgaWNvblVSTDogJ2Fzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLWV4cGFuZC1jb2xsYXBzZS1taW51cycsXHJcbiAgICBhcmlhTGFiZWw6ICdDb2xsYXBzZSBncm91cCcsXHJcbiAgICB0b29sVGlwOiAnQ29sbGFwc2UgZ3JvdXAnLFxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlICsvLSB0b2dnbGUgaWNvbiBidXR0b24gZm9yIGEgbGV2ZWwsIG1hdGNoaW5nIHRoZSBHcm91cHMgdHJlZTpcclxuICAgKiB0aGUgbWludXMgKGNvbGxhcHNlKSBpY29uIHdoZW4gdGhhdCBsZXZlbCBpcyBleHBhbmRlZCwgb3RoZXJ3aXNlIHRoZSBwbHVzXHJcbiAgICogKGV4cGFuZCkgaWNvbi5cclxuICAgKiBAcGFyYW0ge0dyb3VwUm93fSBncm91cFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIC0xIGZvciB0aGUgZ3JvdXAgcm93LCBlbHNlIHRoZSBub2RlIGluZGV4LlxyXG4gICAqIEByZXR1cm4ge0ljb25CdXR0b259XHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRUb2dnbGVCdXR0b24oZ3JvdXA6IEdyb3VwUm93LCBpbmRleDogbnVtYmVyKTogSWNvbkJ1dHRvbiB7XHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmlzTGV2ZWxFeHBhbmRlZChncm91cCwgaW5kZXgpXHJcbiAgICAgID8gdGhpcy5jb2xsYXBzZUljb25CdXR0b25cclxuICAgICAgOiB0aGlzLmV4cGFuZEljb25CdXR0b247XHJcbiAgICAvLyBJbmNsdWRlIHRoZSB0YXJnZXQncyBuYW1lIHNvIGVhY2ggdG9nZ2xlIGhhcyBhIGRpc3RpbmN0IGFjY2Vzc2libGUgbmFtZVxyXG4gICAgLy8gKGUuZy4gXCJFeHBhbmQgZ3JvdXAgVGVjaCB3b3JraW5nXCIpLiBSZXR1cm4gYSBORVcgb2JqZWN0IHNvIHRoZSBzaGFyZWRcclxuICAgIC8vIGV4cGFuZC9jb2xsYXBzZSBjb25maWdzIGFyZSBuZXZlciBtdXRhdGVkLlxyXG4gICAgY29uc3QgbmFtZSA9XHJcbiAgICAgIGluZGV4IDwgMFxyXG4gICAgICAgID8gZ3JvdXAuZ3JvdXBcclxuICAgICAgICA6IGdyb3VwLmhpZXJhcmNoeT8uW2luZGV4XT8uZ3JvdXBOYW1lID8/IGdyb3VwLmdyb3VwO1xyXG4gICAgcmV0dXJuIHsgLi4uYnV0dG9uLCBhcmlhTGFiZWw6IGAke2J1dHRvbi5hcmlhTGFiZWx9ICR7bmFtZX1gIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyb3Vwc1ZhbHVlOiBHcm91cFJvd1tdID0gW107XHJcbiAgLyoqIFRoZSBncm91cHMgcmVuZGVyZWQgaW4gdGhlIHRhYmxlLiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGdyb3Vwcyh2YWx1ZTogR3JvdXBSb3dbXSkge1xyXG4gICAgdGhpcy5ncm91cHNWYWx1ZSA9IHZhbHVlID8/IFtdO1xyXG4gICAgdGhpcy5yZWJ1aWxkUm93cygpO1xyXG4gIH1cclxuICBnZXQgZ3JvdXBzKCk6IEdyb3VwUm93W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIHNlY3Rpb24ncyBsb2FkL2VtcHR5L2Vycm9yIHN0YXRlIGRyaXZpbmcgdGhlIG11dHVhbGx5LWV4Y2x1c2l2ZSByZWdpb25zLiAqL1xyXG4gIEBJbnB1dCgpIHNlY3Rpb25TdGF0ZTogRGFzaGJvYXJkU2VjdGlvblN0YXRlID0gRGFzaGJvYXJkU2VjdGlvblN0YXRlLkxPQURFRDtcclxuXHJcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBncm91cHMgKGZvciB0aGUgXCJ7bn0gR3JvdXBzXCIgY291bnQgYW5kIHBhZ2luYXRvcikuICovXHJcbiAgQElucHV0KCkgdG90YWxHcm91cHMgPSAwO1xyXG5cclxuICBwcml2YXRlIHBhZ2VJbmRleFZhbHVlID0gMDtcclxuICAvKiogQ3VycmVudCB6ZXJvLWJhc2VkIHBhZ2UgaW5kZXguICovXHJcbiAgQElucHV0KClcclxuICBzZXQgcGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnZUluZGV4VmFsdWUgPSB2YWx1ZSA/PyAwO1xyXG4gICAgdGhpcy5yZWJ1aWxkUm93cygpO1xyXG4gIH1cclxuICBnZXQgcGFnZUluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlSW5kZXhWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFnZVNpemVWYWx1ZSA9IDU7XHJcbiAgLyoqIEN1cnJlbnQgcGFnZSBzaXplIChkZWZhdWx0cyB0byA1IHJvd3MgcGVyIHBhZ2UgcGVyIHRoZSBkZXNpZ24pLiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnZVNpemVWYWx1ZSA9IHZhbHVlID8/IDU7XHJcbiAgICB0aGlzLnJlYnVpbGRSb3dzKCk7XHJcbiAgfVxyXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZVNpemVWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBcIlZpZXcgQWxsXCIgbGluayBpcyBhY3RpdmF0ZWQuICovXHJcbiAgQE91dHB1dCgpIHZpZXdBbGxHcm91cHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKiBFbWl0cyB0aGUgcmVxdWVzdGVkIHBhZ2Ugd2hlbiB0aGUgcGFnaW5hdG9yIGNoYW5nZXMuICovXHJcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2U+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBuZXcgZXhwYW5kZWQgc3RhdGUgd2hlbmV2ZXIgdGhlIHVzZXIgdG9nZ2xlcyB0aGUgY2FyZCwgc28gYVxyXG4gICAqIHR3by13YXkgYFsoZXhwYW5kZWQpXWAgYmluZGluZyBrZWVwcyB0aGUgaG9zdCdzIGZsYWcgaW4gc3luYy4gV2l0aG91dCB0aGlzLFxyXG4gICAqIGEgaG9zdCB0aGF0IG9wZW5lZCB0aGUgY2FyZCAoZXhwYW5kZWQ9dHJ1ZSkgYW5kIHRoZW4gdGhlIHVzZXIgY29sbGFwc2luZyBpdFxyXG4gICAqIHdvdWxkIGxlYXZlIHRoZSBob3N0IGZsYWcgc3RhbGUsIHNvIHJlLW9wZW5pbmcgdmlhIHRoZSBzYW1lIGlucHV0IHZhbHVlXHJcbiAgICogd291bGQgYmUgYSBuby1vcC5cclxuICAgKiBAbWVtYmVyb2YgWW91ckdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIGNhcmQgaXMgZXhwYW5kZWQgKHRhYmxlIHZpc2libGUpLiBTdGFydHMgY29sbGFwc2VkLiAqL1xyXG4gIGlzRXhwYW5kZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIHRoZSBob3N0L2NvbnRhaW5lciB0byBvcGVuIG9yIGNsb3NlIHRoZSBjYXJkIChlLmcuIGEgXCJKdW1wIHRvXCJcclxuICAgKiBzaG9ydGN1dCBvcGVucyBpdCkuXHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gISF2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEtleXMgb2YgdGhlIGhpZXJhcmNoeSBsZXZlbHMgY3VycmVudGx5IGV4cGFuZGVkLCBlYWNoIGBcIjxncm91cElkPjo8aW5kZXg+XCJgLlxyXG4gICAqIEluZGV4IC0xIGlzIHRoZSBncm91cCByb3cgaXRzZWxmIChpdHMgdG9nZ2xlIHJldmVhbHMgdGhlIGZpcnN0IGhpZXJhcmNoeVxyXG4gICAqIG5vZGUpOyBpbmRleCBOIGlzIHRoZSBOdGggaGllcmFyY2h5IG5vZGUgKGl0cyB0b2dnbGUgcmV2ZWFscyBub2RlIE4rMSkuIEFcclxuICAgKiBsZXZlbCBvbmx5IHJldmVhbHMgdGhlIE5FWFQgbm9kZSwgbWF0Y2hpbmcgdGhlIEdyb3VwcyBtb2R1bGUncyBzdGVwLWJ5LXN0ZXBcclxuICAgKiBkcmlsbC1kb3duLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwYW5kZWRLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKiBUaGUgZmxhdHRlbmVkIHJvd3MgY3VycmVudGx5IHJlbmRlcmVkIChncm91cCByb3dzICsgYW55IHJldmVhbGVkIGhpZXJhcmNoeSByb3dzKS4gKi9cclxuICB2aXNpYmxlUm93czogVGFibGVSb3dbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgY291bnQgc2hvd24gaW4gdGhlIGhlYWRlciBzdWJ0aXRsZSDigJQgdGhlIHNlcnZlciB0b3RhbCB3aGVuIHByb3ZpZGVkLFxyXG4gICAqIG90aGVyd2lzZSB0aGUgbnVtYmVyIG9mIGdyb3Vwcy5cclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAbWVtYmVyb2YgWW91ckdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldCBncm91cENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50b3RhbEdyb3VwcyB8fCB0aGlzLmdyb3Vwcy5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyB0aGUgZXhwYW5kL2NvbGxhcHNlIGtleSBmb3IgYSBoaWVyYXJjaHkgbGV2ZWwuIEluZGV4IC0xIGlzIHRoZSBncm91cFxyXG4gICAqIHJvdyBpdHNlbGY7IGluZGV4IE4gaXMgdGhlIE50aCBoaWVyYXJjaHkgbm9kZS5cclxuICAgKiBAcGFyYW0ge0dyb3VwUm93fSBncm91cFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgKiBAbWVtYmVyb2YgWW91ckdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbGV2ZWxLZXkoZ3JvdXA6IEdyb3VwUm93LCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHtncm91cC5ncm91cElkfToke2luZGV4fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgbGV2ZWwgc2hvd3MgYSArLy0gdG9nZ2xlLlxyXG4gICAqXHJcbiAgICogLSBHcm91cCByb3cgKGluZGV4IC0xKTogZXhwYW5kYWJsZSB3aGVuIGl0IGhhcyBBTlkgaGllcmFyY2h5IG5vZGUsIG1hdGNoaW5nXHJcbiAgICogICB0aGUgR3JvdXBzIG1vZHVsZSB3aGljaCBzaG93cyB0aGUgdG9nZ2xlIG9uIGV2ZXJ5IGdyb3VwIHRoYXQgaGFzIHJlbGF0ZWRcclxuICAgKiAgIGhpZXJhcmNoeSAoZHJpdmVuIGJ5IGhhc0NoaWxkcmVuLCB0cnVlIGZvciBhbGwgdGhlc2UgZ3JvdXBzKS5cclxuICAgKiAtIEhpZXJhcmNoeSBub2RlIChpbmRleCBOKTogZXhwYW5kYWJsZSBvbmx5IHdoZW4gdGhlcmUgaXMgYSBmdXJ0aGVyIG5vZGVcclxuICAgKiAgIGFmdGVyIGl0IChzdGVwLWJ5LXN0ZXAgZHJpbGwtZG93bik7IHRoZSBkZWVwZXN0IG5vZGUgaXMgYSBsZWFmLCBubyB0b2dnbGUuXHJcbiAgICogQHBhcmFtIHtHcm91cFJvd30gZ3JvdXBcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSAtMSBmb3IgdGhlIGdyb3VwIHJvdywgZWxzZSB0aGUgbm9kZSBpbmRleC5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNMZXZlbEV4cGFuZGFibGUoZ3JvdXA6IEdyb3VwUm93LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBsZW5ndGggPSBncm91cD8uaGllcmFyY2h5Py5sZW5ndGggPz8gMDtcclxuICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgLy8gR3JvdXAgcm93OiBhIHRvZ2dsZSBvbmx5IHdoZW4gaXQgaGFzIFJFTEFURUQgZ3JvdXBzIHRvIHNob3cg4oCUIGkuZS4gdGhlXHJcbiAgICAgIC8vIGhpZXJhcmNoeSBoYXMgbW9yZSB0aGFuIGp1c3QgdGhlIGdyb3VwJ3Mgb3duIG5vZGUuIEEgc2luZ2xlLW5vZGVcclxuICAgICAgLy8gaGllcmFyY2h5IChvbmx5IGl0c2VsZikgaGFzIG5vdGhpbmcgdG8gcmV2ZWFsLCBzbyBubyB0b2dnbGUuXHJcbiAgICAgIHJldHVybiBsZW5ndGggPiAxO1xyXG4gICAgfVxyXG4gICAgLy8gSGllcmFyY2h5IG5vZGU6IGV4cGFuZGFibGUgb25seSBpZiBhIGRlZXBlciBub2RlIGZvbGxvd3MgaXQuXHJcbiAgICByZXR1cm4gaW5kZXggPCBsZW5ndGggLSAxO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgZ3JvdXAgcm93IHNob3dzIGEgdG9nZ2xlIChoYXMgcmVsYXRlZCBoaWVyYXJjaHkgdG8gZHJpbGwgaW50bykuXHJcbiAgICogQHBhcmFtIHtHcm91cFJvd30gZ3JvdXBcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzSGllcmFyY2h5KGdyb3VwOiBHcm91cFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChncm91cD8uaGllcmFyY2h5Py5sZW5ndGggPz8gMCkgPiAxO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIGdpdmVuIGxldmVsIGlzIGN1cnJlbnRseSBleHBhbmRlZCAoaXRzIG5leHQgbm9kZSBpcyByZXZlYWxlZCkuXHJcbiAgICogQHBhcmFtIHtHcm91cFJvd30gZ3JvdXBcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNMZXZlbEV4cGFuZGVkKGdyb3VwOiBHcm91cFJvdywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRLZXlzLmhhcyh0aGlzLmxldmVsS2V5KGdyb3VwLCBpbmRleCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENvbnZlbmllbmNlIGZvciB0aGUgZ3JvdXAgcm93IChsZXZlbCAtMSkuICovXHJcbiAgaXNHcm91cEV4cGFuZGVkKGdyb3VwOiBHcm91cFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNMZXZlbEV4cGFuZGVkKGdyb3VwLCAtMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGVzIGEgbGV2ZWwncyBleHBhbnNpb24gKHJldmVhbHMvaGlkZXMgaXRzIG5leHQgbm9kZSkuIENvbGxhcHNpbmcgYVxyXG4gICAqIGxldmVsIGFsc28gY29sbGFwc2VzIGV2ZXJ5dGhpbmcgZGVlcGVyIHVuZGVyIGl0IHNvIHJlLW9wZW5pbmcgc3RhcnRzIGZyZXNoLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBSb3d9IGdyb3VwXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gLTEgZm9yIHRoZSBncm91cCByb3csIGVsc2UgdGhlIG5vZGUgaW5kZXguXHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvblRvZ2dsZUxldmVsKGdyb3VwOiBHcm91cFJvdywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzTGV2ZWxFeHBhbmRhYmxlKGdyb3VwLCBpbmRleCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5sZXZlbEtleShncm91cCwgaW5kZXgpO1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kZWRLZXlzLmhhcyhrZXkpKSB7XHJcbiAgICAgIC8vIENvbGxhcHNlIHRoaXMgbGV2ZWwgYW5kIGFueSBkZWVwZXIgbGV2ZWxzIG9mIHRoZSBzYW1lIGdyb3VwLlxyXG4gICAgICBjb25zdCBsZW5ndGggPSBncm91cD8uaGllcmFyY2h5Py5sZW5ndGggPz8gMDtcclxuICAgICAgZm9yIChsZXQgZGVlcGVyID0gaW5kZXg7IGRlZXBlciA8IGxlbmd0aDsgZGVlcGVyKyspIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkS2V5cy5kZWxldGUodGhpcy5sZXZlbEtleShncm91cCwgZGVlcGVyKSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRLZXlzLmFkZChrZXkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWJ1aWxkUm93cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlcyB0aGUgY2FyZCdzIGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZSAod2hvbGUgdGFibGUgdmlzaWJpbGl0eSkgYW5kXHJcbiAgICogZW1pdHMgdGhlIG5ldyBzdGF0ZSBzbyB0aGUgaG9zdCdzIHR3by13YXkgYmluZGluZyBzdGF5cyBpbiBzeW5jLlxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Ub2dnbGVFeHBhbmQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xyXG4gICAgdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuaXNFeHBhbmRlZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgXCJWaWV3IEFsbFwiIGludGVudCBmb3IgdGhlIGhvc3QuXHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvblZpZXdBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdBbGxHcm91cHMuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmUtZW1pdHMgdGhlIE1hdGVyaWFsIHBhZ2luYXRvciBjaGFuZ2UgKHBhZ2UgaW5kZXggb3IgXCJJdGVtcyBwZXIgcGFnZVwiXHJcbiAgICogc2l6ZSkgYXMgYSB7QGxpbmsgUGFnZUNoYW5nZX0gZm9yIHRoZSBob3N0LlxyXG4gICAqIEBwYXJhbSB7UGFnZUV2ZW50fSBldmVudCAtIFRoZSBNYXRlcmlhbCBwYWdpbmF0b3IgZXZlbnQuXHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvblBhZ2luYXRvckNoYW5nZShldmVudDogUGFnZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIHBhZ2VJbmRleDogZXZlbnQucGFnZUluZGV4LFxyXG4gICAgICBwYWdlU2l6ZTogZXZlbnQucGFnZVNpemUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc29sdmVzIHRoZSBtZW1iZXItbGV2ZWwgcGlsbCBDU1MgY2xhc3MsIG1pcnJvcmluZyB0aGUgTXkgR3JvdXBzIHByb2ZpbGVcclxuICAgKiB0YWI6IGFuIGFzc2lnbmVkIGxldmVsIHJlbmRlcnMgZ3JlZW4gKHN1Y2Nlc3MpLCBcIlVuYXNzaWduZWRcIiByZW5kZXJzIGFtYmVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZW1iZXJMZXZlbFxyXG4gICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgKiBAbWVtYmVyb2YgWW91ckdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHJlc29sdmVCYWRnZUNsYXNzKG1lbWJlckxldmVsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYmFkZ2UgPSB0aGlzLnRleHRzPy5tZW1iZXJMZXZlbEJhZGdlO1xyXG4gICAgcmV0dXJuIG1lbWJlckxldmVsID09PSB0aGlzLnRleHRzPy51bmFzc2lnbmVkTWVtYmVyTGV2ZWxcclxuICAgICAgPyBiYWRnZT8ud2FybmluZ1xyXG4gICAgICA6IGJhZGdlPy5zdWNjZXNzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tCeSBmb3IgdGhlIHJlbmRlcmVkIHRhYmxlIHJvd3MuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtUYWJsZVJvd30gcm93XHJcbiAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeVJvdyhpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93KTogc3RyaW5nIHtcclxuICAgIHJldHVybiByb3cua2luZCA9PT0gJ2dyb3VwJ1xyXG4gICAgICA/IGBnOiR7cm93Lmdyb3VwPy5ncm91cElkfWBcclxuICAgICAgOiBgaDoke3Jvdy5ncm91cD8uZ3JvdXBJZH06JHtyb3cubm9kZT8uZ3JvdXBJZH06JHtpbmRleH1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVidWlsZHMgdGhlIHZpc2libGUgcm93cyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4gRWFjaCBncm91cCByZXZlYWxzIGl0c1xyXG4gICAqIGhpZXJhcmNoeSBPTkUgbGV2ZWwgYXQgYSB0aW1lIChHcm91cHMtbW9kdWxlIHN0eWxlKTogdGhlIGdyb3VwIHJvdyByZXZlYWxzXHJcbiAgICogbm9kZSAwIG9ubHkgd2hlbiBpdHMgb3duIGxldmVsICgtMSkgaXMgZXhwYW5kZWQ7IG5vZGUgMCByZXZlYWxzIG5vZGUgMSBvbmx5XHJcbiAgICogd2hlbiBub2RlIDAncyBsZXZlbCBpcyBleHBhbmRlZDsgYW5kIHNvIG9uLiBFYWNoIHJldmVhbGVkIG5vZGUgdGhhdCBzdGlsbFxyXG4gICAqIGhhcyBhIGNoaWxkIGNhcnJpZXMgaXRzIG93biArLy0gdG9nZ2xlLlxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWJ1aWxkUm93cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgcGFnZUdyb3VwcyA9IHRoaXMuZ3JvdXBzLnNsaWNlKHN0YXJ0LCBzdGFydCArIHRoaXMucGFnZVNpemUpO1xyXG4gICAgY29uc3Qgcm93czogVGFibGVSb3dbXSA9IFtdO1xyXG5cclxuICAgIHBhZ2VHcm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgcm93cy5wdXNoKHsga2luZDogJ2dyb3VwJywgZ3JvdXAsIGxldmVsOiAwIH0pO1xyXG5cclxuICAgICAgY29uc3QgaGllcmFyY2h5ID0gZ3JvdXAuaGllcmFyY2h5ID8/IFtdO1xyXG4gICAgICAvLyBXYWxrIHRoZSBwYXRoLCByZXZlYWxpbmcgZWFjaCBuZXh0IG5vZGUgb25seSB3aGlsZSB0aGUgY2hhaW4gb2ZcclxuICAgICAgLy8gcGFyZW50IGxldmVscyBhYm92ZSBpdCBzdGF5cyBleHBhbmRlZC4gU3RvcCBhcyBzb29uIGFzIGEgbGV2ZWwgaXNcclxuICAgICAgLy8gY29sbGFwc2VkLlxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaGllcmFyY2h5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0xldmVsRXhwYW5kZWQoZ3JvdXAsIGluZGV4IC0gMSkpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgICAga2luZDogJ2hpZXJhcmNoeScsXHJcbiAgICAgICAgICBncm91cCxcclxuICAgICAgICAgIG5vZGU6IGhpZXJhcmNoeVtpbmRleF0sXHJcbiAgICAgICAgICBub2RlSW5kZXg6IGluZGV4LFxyXG4gICAgICAgICAgbGV2ZWw6IGluZGV4ICsgMSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy52aXNpYmxlUm93cyA9IHJvd3M7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzXCI+XHJcbiAgPCEtLSBIZWFkZXI6IHRpdGxlICsgY291bnQsIFZpZXcgQWxsIGxpbmssIGNvbGxhcHNlL2V4cGFuZCB0b2dnbGUgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19faGVhZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19oZWFkaW5nXCI+XHJcbiAgICAgIDxoMiBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fdGl0bGUgbS0wXCI+e3sgdGV4dHM/LnRpdGxlIH19PC9oMj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX2FjdGlvbnNcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX192aWV3LWFsbFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0cz8uYXJpYUxhYmVsPy52aWV3QWxsXCJcclxuICAgICAgICAoY2xpY2spPVwib25WaWV3QWxsKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgdGV4dHM/LnZpZXdBbGxMYWJlbCB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fdG9nZ2xlXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dHM/LmFyaWFMYWJlbD8udG9nZ2xlXCJcclxuICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVFeHBhbmQoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3Bhbj57eyBpc0V4cGFuZGVkID8gdGV4dHM/LmNvbGxhcHNlTGFiZWwgOiB0ZXh0cz8uZXhwYW5kTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgPGlcclxuICAgICAgICAgIGNsYXNzPVwiZmEtc29saWRcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiaXNFeHBhbmRlZCA/ICdmYS1jaGV2cm9uLXVwJyA6ICdmYS1jaGV2cm9uLWRvd24nXCJcclxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBCb2R5OiBvbmx5IHdoZW4gdGhlIGNhcmQgaXMgZXhwYW5kZWQuIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX2JvZHlcIiAqbmdJZj1cImlzRXhwYW5kZWRcIj5cclxuICAgIDxpZWVlc2EtbG9hZGVyXHJcbiAgICAgICpuZ0lmPVwic2VjdGlvblN0YXRlID09PSBzZWN0aW9uU3RhdGVzLkxPQURJTkdcIlxyXG4gICAgPjwvaWVlZXNhLWxvYWRlcj5cclxuXHJcbiAgICA8cFxyXG4gICAgICAqbmdJZj1cInNlY3Rpb25TdGF0ZSA9PT0gc2VjdGlvblN0YXRlcy5FUlJPUlwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19tZXNzYWdlIGllZWVzYS15b3VyLWdyb3Vwc19fbWVzc2FnZS0tZXJyb3JcIlxyXG4gICAgICByb2xlPVwiYWxlcnRcIlxyXG4gICAgPlxyXG4gICAgICB7eyB0ZXh0cz8uZXJyb3JNZXNzYWdlIH19XHJcbiAgICA8L3A+XHJcblxyXG4gICAgPHBcclxuICAgICAgKm5nSWY9XCJzZWN0aW9uU3RhdGUgPT09IHNlY3Rpb25TdGF0ZXMuRU1QVFlcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fbWVzc2FnZVwiXHJcbiAgICAgIHJvbGU9XCJzdGF0dXNcIlxyXG4gICAgPlxyXG4gICAgICB7eyB0ZXh0cz8uZW1wdHlNZXNzYWdlIH19XHJcbiAgICA8L3A+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlY3Rpb25TdGF0ZSA9PT0gc2VjdGlvblN0YXRlcy5MT0FERURcIj5cclxuICAgICAgPHRhYmxlIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX190YWJsZVwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3sgdGV4dHM/LmNvbHVtbnM/Lmdyb3VwIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3sgdGV4dHM/LmNvbHVtbnM/LnR5cGUgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eyB0ZXh0cz8uY29sdW1ucz8ub2ZmaWNlclJvbGUgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eyB0ZXh0cz8uY29sdW1ucz8uYWZmaWxpYXRpb24gfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eyB0ZXh0cz8uY29sdW1ucz8ubWVtYmVyTGV2ZWwgfX08L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHZpc2libGVSb3dzOyB0cmFja0J5OiB0cmFja0J5Um93XCI+XHJcbiAgICAgICAgICAgIDwhLS0gR1JPVVAgUk9XIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmtpbmQgPT09ICdncm91cCdcIj5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX2dyb3VwLWNlbGxcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gR3JvdXAgcm93IHRvZ2dsZSAobGV2ZWwgLTEpOiByZXZlYWxzIHRoZSBmaXJzdCBoaWVyYXJjaHlcclxuICAgICAgICAgICAgICAgICAgICAgbm9kZS4gU2FtZSBzaGFyZWQgaWNvbiBidXR0b24gYXMgdGhlIEdyb3VwcyB0cmVlLiAtLT5cclxuICAgICAgICAgICAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0xldmVsRXhwYW5kYWJsZShyb3cuZ3JvdXAhLCAtMSlcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19faGllcmFyY2h5LXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpY29uQnV0dG9uXT1cImdldFRvZ2dsZUJ1dHRvbihyb3cuZ3JvdXAhLCAtMSlcIlxyXG4gICAgICAgICAgICAgICAgICBbYXJpYUV4cGFuZGVkXT1cImlzTGV2ZWxFeHBhbmRlZChyb3cuZ3JvdXAhLCAtMSlcIlxyXG4gICAgICAgICAgICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIm9uVG9nZ2xlTGV2ZWwocm93Lmdyb3VwISwgLTEpXCJcclxuICAgICAgICAgICAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTGVhZiBncm91cCAobm8gaGllcmFyY2h5KTogc3BhY2VyIGtlZXBzIG5hbWVzIGFsaWduZWQuIC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNMZXZlbEV4cGFuZGFibGUocm93Lmdyb3VwISwgLTEpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX3RvZ2dsZS1zcGFjZXJcIlxyXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19ncm91cC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvdy5ncm91cCEuZ3JvdXAgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyByb3cuZ3JvdXAhLnR5cGUgfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyByb3cuZ3JvdXAhLm9mZmljZXJSb2xlIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgcm93Lmdyb3VwIS5hZmZpbGlhdGlvbiB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX2JhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicmVzb2x2ZUJhZGdlQ2xhc3Mocm93Lmdyb3VwIS5tZW1iZXJMZXZlbClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyByb3cuZ3JvdXAhLm1lbWJlckxldmVsIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEhJRVJBUkNIWSAoYW5jZXN0b3IpIFJPVyAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdy5raW5kID09PSAnaGllcmFyY2h5J1wiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fZ3JvdXAtY2VsbCBpZWVlc2EteW91ci1ncm91cHNfX2hpZXJhcmNoeS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19faW5kZW50XCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvdy5sZXZlbCAqIGluZGVudFBlckxldmVsXCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFRoaXMgbm9kZSdzIG93biArLy0gdG9nZ2xlLCB3aGVuIGl0IGhhcyBhIGZ1cnRoZXIgY2hpbGQgdG9cclxuICAgICAgICAgICAgICAgICAgICAgcmV2ZWFsIChzdGVwLWJ5LXN0ZXAgZHJpbGwtZG93biBsaWtlIHRoZSBHcm91cHMgdHJlZSkuIC0tPlxyXG4gICAgICAgICAgICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTGV2ZWxFeHBhbmRhYmxlKHJvdy5ncm91cCEsIHJvdy5ub2RlSW5kZXghKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19oaWVyYXJjaHktdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgW2ljb25CdXR0b25dPVwiZ2V0VG9nZ2xlQnV0dG9uKHJvdy5ncm91cCEsIHJvdy5ub2RlSW5kZXghKVwiXHJcbiAgICAgICAgICAgICAgICAgIFthcmlhRXhwYW5kZWRdPVwiaXNMZXZlbEV4cGFuZGVkKHJvdy5ncm91cCEsIHJvdy5ub2RlSW5kZXghKVwiXHJcbiAgICAgICAgICAgICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwib25Ub2dnbGVMZXZlbChyb3cuZ3JvdXAhLCByb3cubm9kZUluZGV4ISlcIlxyXG4gICAgICAgICAgICAgICAgPjwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBMZWFmIG5vZGU6IHNwYWNlciBrZWVwcyB0aGUgbmFtZSBhbGlnbmVkIHdpdGggcGFyZW50IG5vZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgIChzYW1lIGZvb3RwcmludCBhcyB0aGUgdG9nZ2xlKSwgbm8gY29ubmVjdG9yIGFycm93LiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTGV2ZWxFeHBhbmRhYmxlKHJvdy5ncm91cCEsIHJvdy5ub2RlSW5kZXghKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX190b2dnbGUtc3BhY2VyXCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19faGllcmFyY2h5LW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcm93Lm5vZGUhLmdyb3VwTmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93Lm5vZGUhLmdyb3VwQWNyb255bVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX2hpZXJhcmNoeS1hY3JvbnltXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICh7eyByb3cubm9kZSEuZ3JvdXBBY3JvbnltIH19KVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj48L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgIDwhLS0gUGFnaW5hdGlvbjogdGhlIHNhbWUgQW5ndWxhciBNYXRlcmlhbCBwYWdpbmF0b3IgdGhlIHNoYXJlZCBkYXRhLXRhYmxlXHJcbiAgICAgICAgICAgdXNlcyDigJQgaXQgcHJvdmlkZXMgdGhlIFwiSXRlbXMgcGVyIHBhZ2VcIiBkcm9wZG93biwgcmFuZ2UgbGFiZWwsIGFuZFxyXG4gICAgICAgICAgIHByZXYvbmV4dCBjb250cm9scy4gLS0+XHJcbiAgICAgIDxtYXQtcGFnaW5hdG9yXHJcbiAgICAgICAgKm5nSWY9XCJncm91cENvdW50ID4gMFwiXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX3BhZ2luYXRvclwiXHJcbiAgICAgICAgW2xlbmd0aF09XCJncm91cENvdW50XCJcclxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcclxuICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAgICAgKHBhZ2UpPVwib25QYWdpbmF0b3JDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID48L21hdC1wYWdpbmF0b3I+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW91ci1ncm91cHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy95b3VyLWdyb3Vwcy95b3VyLWdyb3Vwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL3lvdXItZ3JvdXBzL3lvdXItZ3JvdXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RSxPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLGVBQWUsR0FDaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQU1uRixPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDOzs7O0FBbUJ6RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFlSCxNQUFNLE9BQU8sbUJBQW1CO0lBZGhDO1FBZUUsOERBQThEO1FBQzdDLGNBQVMsR0FBUSxTQUFTLENBQUM7UUFDNUMseURBQXlEO1FBQ2hELFVBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztRQUUvQyxzRUFBc0U7UUFDN0Qsa0JBQWEsR0FBRyxxQkFBcUIsQ0FBQztRQUUvQyx1RUFBdUU7UUFDOUQsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFFN0IsOENBQThDO1FBQ3JDLG9CQUFlLEdBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FB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O2dCQUdHLFVBQVU7c0JBQW5CLE1BQU07Z0JBVUcsY0FBYztzQkFBdkIsTUFBTTtnQkFXSCxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7XHJcbiAgSWNvbkJ1dHRvbixcclxuICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gIExvYWRlckNvbXBvbmVudCxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRTZWN0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGFzaGJvYXJkLXNlY3Rpb24tc3RhdGUubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdyb3VwSGllcmFyY2h5Tm9kZSxcclxuICBHcm91cFJvdyxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtcm93Lm1vZGVsJztcclxuaW1wb3J0IHsgUGFnZUNoYW5nZSB9IGZyb20gJy4uLy4uL21vZGVscy9wYWdlLWNoYW5nZS5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5cclxuLyoqXHJcbiAqIEEgc2luZ2xlIHJlbmRlcmVkIHRhYmxlIHJvdy4gRWl0aGVyIGEgdG9wLWxldmVsIGdyb3VwIHJvdyAoYGtpbmQ6ICdncm91cCdgLFxyXG4gKiBjYXJyeWluZyB0aGUgZnVsbCB7QGxpbmsgR3JvdXBSb3d9KSBvciBhIGhpZXJhcmNoeSBub2RlIHJvdyAoYGtpbmQ6XHJcbiAqICdoaWVyYXJjaHknYCkgcmV2ZWFsZWQgc3RlcC1ieS1zdGVwIGFzIHRoZSB1c2VyIGRyaWxscyBkb3duLiBgbm9kZUluZGV4YCBpc1xyXG4gKiB0aGUgbm9kZSdzIHBvc2l0aW9uIGluIHRoZSBncm91cCdzIGBoaWVyYXJjaHlbXWAsIHVzZWQgdG8gZHJpdmUgdGhlIG5leHRcclxuICogZHJpbGwtZG93biBsZXZlbCBhbmQgdGhlIHBlci1ub2RlIHRvZ2dsZSAobWF0Y2hpbmcgdGhlIEdyb3VwcyBtb2R1bGUsIHdoZXJlXHJcbiAqIGVhY2ggbGV2ZWwgcmV2ZWFscyBvbmx5IGl0cyBuZXh0IGNoaWxkIGFuZCB0aGF0IGNoaWxkIGNhcnJpZXMgaXRzIG93biArL+KIkikuXHJcbiAqL1xyXG5pbnRlcmZhY2UgVGFibGVSb3cge1xyXG4gIGtpbmQ6ICdncm91cCcgfCAnaGllcmFyY2h5JztcclxuICBncm91cD86IEdyb3VwUm93O1xyXG4gIG5vZGU/OiBHcm91cEhpZXJhcmNoeU5vZGU7XHJcbiAgLyoqIEluZGV4IG9mIHRoaXMgbm9kZSB3aXRoaW4gdGhlIGdyb3VwJ3MgaGllcmFyY2h5W10gKGhpZXJhcmNoeSByb3dzIG9ubHkpLiAqL1xyXG4gIG5vZGVJbmRleD86IG51bWJlcjtcclxuICBsZXZlbDogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogR3JvdXBzX1NlY3Rpb24gKGBpZWVlc2EteW91ci1ncm91cHNgKSByZW5kZXJzIHRoZSBzaWduZWQtaW4gdXNlcidzIGdyb3VwcyBpblxyXG4gKiBhIGNvbGxhcHNpYmxlIGNhcmQgYXMgYSBjdXN0b20gaGllcmFyY2h5IHRhYmxlIHN0eWxlZCBsaWtlIHRoZSBNeSBQcm9maWxlXHJcbiAqIEZpbmQgR3JvdXBzIHRyZWU6IGVhY2ggZ3JvdXAgcm93IGNhcnJpZXMgYSBibHVlICsvLSB0b2dnbGUgKHdoZW4gaXQgaGFzIGFuXHJcbiAqIGFuY2VzdG9yIGhpZXJhcmNoeSkgdGhhdCBleHBhbmRzIHRvIHJldmVhbCB0aGUgZ3JvdXAncyBoaWVyYXJjaHkgcGF0aFxyXG4gKiAocm9vdOKGkmxlYWYpLCBpbmRlbnRlZC4gQ29sdW1uczogR3JvdXAsIFR5cGUsIE9mZmljZXIgUm9sZSwgQWZmaWxpYXRpb24sXHJcbiAqIE1lbWJlciBMZXZlbCAodGhlIG1lbWJlciBsZXZlbCByZW5kZXJzIGFzIGEgY29sb3VyZWQgcGlsbCDigJQgZ3JlZW4gZm9yIGFuXHJcbiAqIGFzc2lnbmVkIGxldmVsLCBhbWJlciBmb3IgXCJVbmFzc2lnbmVkXCIpLiBUaGUgY2FyZCBwYWdpbmF0ZXMgdGhlIHRvcC1sZXZlbFxyXG4gKiBncm91cHMgKDUgcGVyIHBhZ2UpLlxyXG4gKlxyXG4gKiBQdXJlbHkgcHJlc2VudGF0aW9uYWw6IGRhdGEgYXJyaXZlcyB2aWEgYEBJbnB1dGAsIGludGVudHMgbGVhdmUgdmlhXHJcbiAqIGBAT3V0cHV0YDsgbm8gQVBJIG9yIG5hdmlnYXRpb24gaGVyZS4gU3RhdGVzIChsb2FkZXIgLyBlbXB0eSAvIGVycm9yIC8gdGFibGUpXHJcbiAqIGFyZSBkcml2ZW4gYnkgYHNlY3Rpb25TdGF0ZWAuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIFlvdXJHcm91cHNDb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EteW91ci1ncm91cHMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxyXG4gICAgTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi95b3VyLWdyb3Vwcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4veW91ci1ncm91cHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWW91ckdyb3Vwc0NvbXBvbmVudCB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIC8qKiBVc2VyLWZhY2luZyBzdHJpbmdzIHNvdXJjZWQgZnJvbSBgY29uc3RhbnRzLmpzb25gLiAqL1xyXG4gIHJlYWRvbmx5IHRleHRzID0gdGhpcy5jb25zdGFudHM/Lmdyb3Vwc1NlY3Rpb247XHJcblxyXG4gIC8qKiBFbnVtIHJlZmVyZW5jZSBmb3IgdGVtcGxhdGUgY29tcGFyaXNvbnMgYWdhaW5zdCBgc2VjdGlvblN0YXRlYC4gKi9cclxuICByZWFkb25seSBzZWN0aW9uU3RhdGVzID0gRGFzaGJvYXJkU2VjdGlvblN0YXRlO1xyXG5cclxuICAvKiogUGVyLWxldmVsIGluZGVudGF0aW9uIHN0ZXAgKHB4KSBmb3IgdGhlIGV4cGFuZGVkIGhpZXJhcmNoeSByb3dzLiAqL1xyXG4gIHJlYWRvbmx5IGluZGVudFBlckxldmVsID0gMjg7XHJcblxyXG4gIC8qKiBTZWxlY3RhYmxlIFwiSXRlbXMgcGVyIHBhZ2VcIiBwYWdlIHNpemVzLiAqL1xyXG4gIHJlYWRvbmx5IHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1XTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXhwYW5kICgrKSBpY29uIGJ1dHRvbiDigJQgdGhlIFNBTUUgc3ByaXRlIGljb24gdGhlIEdyb3VwcyBwYWNrYWdlIHVzZXMgZm9yXHJcbiAgICogaXRzIHRyZWUgZXhwYW5kIHRvZ2dsZSAoaWNvbi1leHBhbmQtY29sbGFwc2UtcGx1cyksIHJlbmRlcmVkIHZpYSB0aGUgc2hhcmVkXHJcbiAgICogSWNvbkJ1dHRvbkNvbXBvbmVudCBmb3IgYSBjb25zaXN0ZW50IGxvb2sgYWNyb3NzIHRoZSBhcHAuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZXhwYW5kSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHtcclxuICAgIGlkOiAxLFxyXG4gICAgaWNvblVSTDogJ2Fzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLWV4cGFuZC1jb2xsYXBzZS1wbHVzJyxcclxuICAgIGFyaWFMYWJlbDogJ0V4cGFuZCBncm91cCcsXHJcbiAgICB0b29sVGlwOiAnRXhwYW5kIGdyb3VwJyxcclxuICB9O1xyXG5cclxuICAvKiogQ29sbGFwc2UgKOKIkikgaWNvbiBidXR0b24g4oCUIHRoZSBHcm91cHMgcGFja2FnZSdzIGljb24tZXhwYW5kLWNvbGxhcHNlLW1pbnVzLiAqL1xyXG4gIHJlYWRvbmx5IGNvbGxhcHNlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHtcclxuICAgIGlkOiAyLFxyXG4gICAgaWNvblVSTDogJ2Fzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLWV4cGFuZC1jb2xsYXBzZS1taW51cycsXHJcbiAgICBhcmlhTGFiZWw6ICdDb2xsYXBzZSBncm91cCcsXHJcbiAgICB0b29sVGlwOiAnQ29sbGFwc2UgZ3JvdXAnLFxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlICsvLSB0b2dnbGUgaWNvbiBidXR0b24gZm9yIGEgbGV2ZWwsIG1hdGNoaW5nIHRoZSBHcm91cHMgdHJlZTpcclxuICAgKiB0aGUgbWludXMgKGNvbGxhcHNlKSBpY29uIHdoZW4gdGhhdCBsZXZlbCBpcyBleHBhbmRlZCwgb3RoZXJ3aXNlIHRoZSBwbHVzXHJcbiAgICogKGV4cGFuZCkgaWNvbi5cclxuICAgKiBAcGFyYW0ge0dyb3VwUm93fSBncm91cFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIC0xIGZvciB0aGUgZ3JvdXAgcm93LCBlbHNlIHRoZSBub2RlIGluZGV4LlxyXG4gICAqIEByZXR1cm4ge0ljb25CdXR0b259XHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRUb2dnbGVCdXR0b24oZ3JvdXA6IEdyb3VwUm93LCBpbmRleDogbnVtYmVyKTogSWNvbkJ1dHRvbiB7XHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmlzTGV2ZWxFeHBhbmRlZChncm91cCwgaW5kZXgpXHJcbiAgICAgID8gdGhpcy5jb2xsYXBzZUljb25CdXR0b25cclxuICAgICAgOiB0aGlzLmV4cGFuZEljb25CdXR0b247XHJcbiAgICAvLyBJbmNsdWRlIHRoZSB0YXJnZXQncyBuYW1lIHNvIGVhY2ggdG9nZ2xlIGhhcyBhIGRpc3RpbmN0IGFjY2Vzc2libGUgbmFtZVxyXG4gICAgLy8gKGUuZy4gXCJFeHBhbmQgZ3JvdXAgVGVjaCB3b3JraW5nXCIpLiBSZXR1cm4gYSBORVcgb2JqZWN0IHNvIHRoZSBzaGFyZWRcclxuICAgIC8vIGV4cGFuZC9jb2xsYXBzZSBjb25maWdzIGFyZSBuZXZlciBtdXRhdGVkLlxyXG4gICAgY29uc3QgbmFtZSA9XHJcbiAgICAgIGluZGV4IDwgMFxyXG4gICAgICAgID8gZ3JvdXAuZ3JvdXBcclxuICAgICAgICA6IGdyb3VwLmhpZXJhcmNoeT8uW2luZGV4XT8uZ3JvdXBOYW1lID8/IGdyb3VwLmdyb3VwO1xyXG4gICAgcmV0dXJuIHsgLi4uYnV0dG9uLCBhcmlhTGFiZWw6IGAke2J1dHRvbi5hcmlhTGFiZWx9ICR7bmFtZX1gIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyb3Vwc1ZhbHVlOiBHcm91cFJvd1tdID0gW107XHJcbiAgLyoqIFRoZSBncm91cHMgcmVuZGVyZWQgaW4gdGhlIHRhYmxlLiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGdyb3Vwcyh2YWx1ZTogR3JvdXBSb3dbXSkge1xyXG4gICAgdGhpcy5ncm91cHNWYWx1ZSA9IHZhbHVlID8/IFtdO1xyXG4gICAgdGhpcy5yZWJ1aWxkUm93cygpO1xyXG4gIH1cclxuICBnZXQgZ3JvdXBzKCk6IEdyb3VwUm93W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIHNlY3Rpb24ncyBsb2FkL2VtcHR5L2Vycm9yIHN0YXRlIGRyaXZpbmcgdGhlIG11dHVhbGx5LWV4Y2x1c2l2ZSByZWdpb25zLiAqL1xyXG4gIEBJbnB1dCgpIHNlY3Rpb25TdGF0ZTogRGFzaGJvYXJkU2VjdGlvblN0YXRlID0gRGFzaGJvYXJkU2VjdGlvblN0YXRlLkxPQURFRDtcclxuXHJcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBncm91cHMgKGZvciB0aGUgXCJ7bn0gR3JvdXBzXCIgY291bnQgYW5kIHBhZ2luYXRvcikuICovXHJcbiAgQElucHV0KCkgdG90YWxHcm91cHMgPSAwO1xyXG5cclxuICBwcml2YXRlIHBhZ2VJbmRleFZhbHVlID0gMDtcclxuICAvKiogQ3VycmVudCB6ZXJvLWJhc2VkIHBhZ2UgaW5kZXguICovXHJcbiAgQElucHV0KClcclxuICBzZXQgcGFnZUluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnZUluZGV4VmFsdWUgPSB2YWx1ZSA/PyAwO1xyXG4gICAgdGhpcy5yZWJ1aWxkUm93cygpO1xyXG4gIH1cclxuICBnZXQgcGFnZUluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlSW5kZXhWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFnZVNpemVWYWx1ZSA9IDU7XHJcbiAgLyoqIEN1cnJlbnQgcGFnZSBzaXplIChkZWZhdWx0cyB0byA1IHJvd3MgcGVyIHBhZ2UgcGVyIHRoZSBkZXNpZ24pLiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnZVNpemVWYWx1ZSA9IHZhbHVlID8/IDU7XHJcbiAgICB0aGlzLnJlYnVpbGRSb3dzKCk7XHJcbiAgfVxyXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZVNpemVWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBcIlZpZXcgQWxsXCIgbGluayBpcyBhY3RpdmF0ZWQuICovXHJcbiAgQE91dHB1dCgpIHZpZXdBbGxHcm91cHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKiBFbWl0cyB0aGUgcmVxdWVzdGVkIHBhZ2Ugd2hlbiB0aGUgcGFnaW5hdG9yIGNoYW5nZXMuICovXHJcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2U+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBuZXcgZXhwYW5kZWQgc3RhdGUgd2hlbmV2ZXIgdGhlIHVzZXIgdG9nZ2xlcyB0aGUgY2FyZCwgc28gYVxyXG4gICAqIHR3by13YXkgYFsoZXhwYW5kZWQpXWAgYmluZGluZyBrZWVwcyB0aGUgaG9zdCdzIGZsYWcgaW4gc3luYy4gV2l0aG91dCB0aGlzLFxyXG4gICAqIGEgaG9zdCB0aGF0IG9wZW5lZCB0aGUgY2FyZCAoZXhwYW5kZWQ9dHJ1ZSkgYW5kIHRoZW4gdGhlIHVzZXIgY29sbGFwc2luZyBpdFxyXG4gICAqIHdvdWxkIGxlYXZlIHRoZSBob3N0IGZsYWcgc3RhbGUsIHNvIHJlLW9wZW5pbmcgdmlhIHRoZSBzYW1lIGlucHV0IHZhbHVlXHJcbiAgICogd291bGQgYmUgYSBuby1vcC5cclxuICAgKiBAbWVtYmVyb2YgWW91ckdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIGNhcmQgaXMgZXhwYW5kZWQgKHRhYmxlIHZpc2libGUpLiBTdGFydHMgY29sbGFwc2VkLiAqL1xyXG4gIGlzRXhwYW5kZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIHRoZSBob3N0L2NvbnRhaW5lciB0byBvcGVuIG9yIGNsb3NlIHRoZSBjYXJkIChlLmcuIGEgXCJKdW1wIHRvXCJcclxuICAgKiBzaG9ydGN1dCBvcGVucyBpdCkuXHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gISF2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEtleXMgb2YgdGhlIGhpZXJhcmNoeSBsZXZlbHMgY3VycmVudGx5IGV4cGFuZGVkLCBlYWNoIGBcIjxncm91cElkPjo8aW5kZXg+XCJgLlxyXG4gICAqIEluZGV4IC0xIGlzIHRoZSBncm91cCByb3cgaXRzZWxmIChpdHMgdG9nZ2xlIHJldmVhbHMgdGhlIGZpcnN0IGhpZXJhcmNoeVxyXG4gICAqIG5vZGUpOyBpbmRleCBOIGlzIHRoZSBOdGggaGllcmFyY2h5IG5vZGUgKGl0cyB0b2dnbGUgcmV2ZWFscyBub2RlIE4rMSkuIEFcclxuICAgKiBsZXZlbCBvbmx5IHJldmVhbHMgdGhlIE5FWFQgbm9kZSwgbWF0Y2hpbmcgdGhlIEdyb3VwcyBtb2R1bGUncyBzdGVwLWJ5LXN0ZXBcclxuICAgKiBkcmlsbC1kb3duLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwYW5kZWRLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKiBUaGUgZmxhdHRlbmVkIHJvd3MgY3VycmVudGx5IHJlbmRlcmVkIChncm91cCByb3dzICsgYW55IHJldmVhbGVkIGhpZXJhcmNoeSByb3dzKS4gKi9cclxuICB2aXNpYmxlUm93czogVGFibGVSb3dbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgY291bnQgc2hvd24gaW4gdGhlIGhlYWRlciBzdWJ0aXRsZSDigJQgdGhlIHNlcnZlciB0b3RhbCB3aGVuIHByb3ZpZGVkLFxyXG4gICAqIG90aGVyd2lzZSB0aGUgbnVtYmVyIG9mIGdyb3Vwcy5cclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAbWVtYmVyb2YgWW91ckdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldCBncm91cENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50b3RhbEdyb3VwcyB8fCB0aGlzLmdyb3Vwcy5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyB0aGUgZXhwYW5kL2NvbGxhcHNlIGtleSBmb3IgYSBoaWVyYXJjaHkgbGV2ZWwuIEluZGV4IC0xIGlzIHRoZSBncm91cFxyXG4gICAqIHJvdyBpdHNlbGY7IGluZGV4IE4gaXMgdGhlIE50aCBoaWVyYXJjaHkgbm9kZS5cclxuICAgKiBAcGFyYW0ge0dyb3VwUm93fSBncm91cFxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgKiBAbWVtYmVyb2YgWW91ckdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbGV2ZWxLZXkoZ3JvdXA6IEdyb3VwUm93LCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHtncm91cC5ncm91cElkfToke2luZGV4fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgbGV2ZWwgc2hvd3MgYSArLy0gdG9nZ2xlLlxyXG4gICAqXHJcbiAgICogLSBHcm91cCByb3cgKGluZGV4IC0xKTogZXhwYW5kYWJsZSB3aGVuIGl0IGhhcyBBTlkgaGllcmFyY2h5IG5vZGUsIG1hdGNoaW5nXHJcbiAgICogICB0aGUgR3JvdXBzIG1vZHVsZSB3aGljaCBzaG93cyB0aGUgdG9nZ2xlIG9uIGV2ZXJ5IGdyb3VwIHRoYXQgaGFzIHJlbGF0ZWRcclxuICAgKiAgIGhpZXJhcmNoeSAoZHJpdmVuIGJ5IGhhc0NoaWxkcmVuLCB0cnVlIGZvciBhbGwgdGhlc2UgZ3JvdXBzKS5cclxuICAgKiAtIEhpZXJhcmNoeSBub2RlIChpbmRleCBOKTogZXhwYW5kYWJsZSBvbmx5IHdoZW4gdGhlcmUgaXMgYSBmdXJ0aGVyIG5vZGVcclxuICAgKiAgIGFmdGVyIGl0IChzdGVwLWJ5LXN0ZXAgZHJpbGwtZG93bik7IHRoZSBkZWVwZXN0IG5vZGUgaXMgYSBsZWFmLCBubyB0b2dnbGUuXHJcbiAgICogQHBhcmFtIHtHcm91cFJvd30gZ3JvdXBcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSAtMSBmb3IgdGhlIGdyb3VwIHJvdywgZWxzZSB0aGUgbm9kZSBpbmRleC5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNMZXZlbEV4cGFuZGFibGUoZ3JvdXA6IEdyb3VwUm93LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBsZW5ndGggPSBncm91cD8uaGllcmFyY2h5Py5sZW5ndGggPz8gMDtcclxuICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgLy8gR3JvdXAgcm93OiBhIHRvZ2dsZSBvbmx5IHdoZW4gaXQgaGFzIFJFTEFURUQgZ3JvdXBzIHRvIHNob3cg4oCUIGkuZS4gdGhlXHJcbiAgICAgIC8vIGhpZXJhcmNoeSBoYXMgbW9yZSB0aGFuIGp1c3QgdGhlIGdyb3VwJ3Mgb3duIG5vZGUuIEEgc2luZ2xlLW5vZGVcclxuICAgICAgLy8gaGllcmFyY2h5IChvbmx5IGl0c2VsZikgaGFzIG5vdGhpbmcgdG8gcmV2ZWFsLCBzbyBubyB0b2dnbGUuXHJcbiAgICAgIHJldHVybiBsZW5ndGggPiAxO1xyXG4gICAgfVxyXG4gICAgLy8gSGllcmFyY2h5IG5vZGU6IGV4cGFuZGFibGUgb25seSBpZiBhIGRlZXBlciBub2RlIGZvbGxvd3MgaXQuXHJcbiAgICByZXR1cm4gaW5kZXggPCBsZW5ndGggLSAxO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgZ3JvdXAgcm93IHNob3dzIGEgdG9nZ2xlIChoYXMgcmVsYXRlZCBoaWVyYXJjaHkgdG8gZHJpbGwgaW50bykuXHJcbiAgICogQHBhcmFtIHtHcm91cFJvd30gZ3JvdXBcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzSGllcmFyY2h5KGdyb3VwOiBHcm91cFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChncm91cD8uaGllcmFyY2h5Py5sZW5ndGggPz8gMCkgPiAxO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIGdpdmVuIGxldmVsIGlzIGN1cnJlbnRseSBleHBhbmRlZCAoaXRzIG5leHQgbm9kZSBpcyByZXZlYWxlZCkuXHJcbiAgICogQHBhcmFtIHtHcm91cFJvd30gZ3JvdXBcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNMZXZlbEV4cGFuZGVkKGdyb3VwOiBHcm91cFJvdywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRLZXlzLmhhcyh0aGlzLmxldmVsS2V5KGdyb3VwLCBpbmRleCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENvbnZlbmllbmNlIGZvciB0aGUgZ3JvdXAgcm93IChsZXZlbCAtMSkuICovXHJcbiAgaXNHcm91cEV4cGFuZGVkKGdyb3VwOiBHcm91cFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNMZXZlbEV4cGFuZGVkKGdyb3VwLCAtMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGVzIGEgbGV2ZWwncyBleHBhbnNpb24gKHJldmVhbHMvaGlkZXMgaXRzIG5leHQgbm9kZSkuIENvbGxhcHNpbmcgYVxyXG4gICAqIGxldmVsIGFsc28gY29sbGFwc2VzIGV2ZXJ5dGhpbmcgZGVlcGVyIHVuZGVyIGl0IHNvIHJlLW9wZW5pbmcgc3RhcnRzIGZyZXNoLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBSb3d9IGdyb3VwXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gLTEgZm9yIHRoZSBncm91cCByb3csIGVsc2UgdGhlIG5vZGUgaW5kZXguXHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvblRvZ2dsZUxldmVsKGdyb3VwOiBHcm91cFJvdywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzTGV2ZWxFeHBhbmRhYmxlKGdyb3VwLCBpbmRleCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5sZXZlbEtleShncm91cCwgaW5kZXgpO1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kZWRLZXlzLmhhcyhrZXkpKSB7XHJcbiAgICAgIC8vIENvbGxhcHNlIHRoaXMgbGV2ZWwgYW5kIGFueSBkZWVwZXIgbGV2ZWxzIG9mIHRoZSBzYW1lIGdyb3VwLlxyXG4gICAgICBjb25zdCBsZW5ndGggPSBncm91cD8uaGllcmFyY2h5Py5sZW5ndGggPz8gMDtcclxuICAgICAgZm9yIChsZXQgZGVlcGVyID0gaW5kZXg7IGRlZXBlciA8IGxlbmd0aDsgZGVlcGVyKyspIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkS2V5cy5kZWxldGUodGhpcy5sZXZlbEtleShncm91cCwgZGVlcGVyKSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRLZXlzLmFkZChrZXkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWJ1aWxkUm93cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlcyB0aGUgY2FyZCdzIGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZSAod2hvbGUgdGFibGUgdmlzaWJpbGl0eSkgYW5kXHJcbiAgICogZW1pdHMgdGhlIG5ldyBzdGF0ZSBzbyB0aGUgaG9zdCdzIHR3by13YXkgYmluZGluZyBzdGF5cyBpbiBzeW5jLlxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Ub2dnbGVFeHBhbmQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xyXG4gICAgdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuaXNFeHBhbmRlZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgXCJWaWV3IEFsbFwiIGludGVudCBmb3IgdGhlIGhvc3QuXHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvblZpZXdBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdBbGxHcm91cHMuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmUtZW1pdHMgdGhlIE1hdGVyaWFsIHBhZ2luYXRvciBjaGFuZ2UgKHBhZ2UgaW5kZXggb3IgXCJJdGVtcyBwZXIgcGFnZVwiXHJcbiAgICogc2l6ZSkgYXMgYSB7QGxpbmsgUGFnZUNoYW5nZX0gZm9yIHRoZSBob3N0LlxyXG4gICAqIEBwYXJhbSB7UGFnZUV2ZW50fSBldmVudCAtIFRoZSBNYXRlcmlhbCBwYWdpbmF0b3IgZXZlbnQuXHJcbiAgICogQG1lbWJlcm9mIFlvdXJHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBvblBhZ2luYXRvckNoYW5nZShldmVudDogUGFnZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIHBhZ2VJbmRleDogZXZlbnQucGFnZUluZGV4LFxyXG4gICAgICBwYWdlU2l6ZTogZXZlbnQucGFnZVNpemUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc29sdmVzIHRoZSBtZW1iZXItbGV2ZWwgcGlsbCBDU1MgY2xhc3MsIG1pcnJvcmluZyB0aGUgTXkgR3JvdXBzIHByb2ZpbGVcclxuICAgKiB0YWI6IGFuIGFzc2lnbmVkIGxldmVsIHJlbmRlcnMgZ3JlZW4gKHN1Y2Nlc3MpLCBcIlVuYXNzaWduZWRcIiByZW5kZXJzIGFtYmVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZW1iZXJMZXZlbFxyXG4gICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgKiBAbWVtYmVyb2YgWW91ckdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHJlc29sdmVCYWRnZUNsYXNzKG1lbWJlckxldmVsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYmFkZ2UgPSB0aGlzLnRleHRzPy5tZW1iZXJMZXZlbEJhZGdlO1xyXG4gICAgcmV0dXJuIG1lbWJlckxldmVsID09PSB0aGlzLnRleHRzPy51bmFzc2lnbmVkTWVtYmVyTGV2ZWxcclxuICAgICAgPyBiYWRnZT8ud2FybmluZ1xyXG4gICAgICA6IGJhZGdlPy5zdWNjZXNzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tCeSBmb3IgdGhlIHJlbmRlcmVkIHRhYmxlIHJvd3MuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtUYWJsZVJvd30gcm93XHJcbiAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeVJvdyhpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlUm93KTogc3RyaW5nIHtcclxuICAgIHJldHVybiByb3cua2luZCA9PT0gJ2dyb3VwJ1xyXG4gICAgICA/IGBnOiR7cm93Lmdyb3VwPy5ncm91cElkfWBcclxuICAgICAgOiBgaDoke3Jvdy5ncm91cD8uZ3JvdXBJZH06JHtyb3cubm9kZT8uZ3JvdXBJZH06JHtpbmRleH1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVidWlsZHMgdGhlIHZpc2libGUgcm93cyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4gRWFjaCBncm91cCByZXZlYWxzIGl0c1xyXG4gICAqIGhpZXJhcmNoeSBPTkUgbGV2ZWwgYXQgYSB0aW1lIChHcm91cHMtbW9kdWxlIHN0eWxlKTogdGhlIGdyb3VwIHJvdyByZXZlYWxzXHJcbiAgICogbm9kZSAwIG9ubHkgd2hlbiBpdHMgb3duIGxldmVsICgtMSkgaXMgZXhwYW5kZWQ7IG5vZGUgMCByZXZlYWxzIG5vZGUgMSBvbmx5XHJcbiAgICogd2hlbiBub2RlIDAncyBsZXZlbCBpcyBleHBhbmRlZDsgYW5kIHNvIG9uLiBFYWNoIHJldmVhbGVkIG5vZGUgdGhhdCBzdGlsbFxyXG4gICAqIGhhcyBhIGNoaWxkIGNhcnJpZXMgaXRzIG93biArLy0gdG9nZ2xlLlxyXG4gICAqIEBtZW1iZXJvZiBZb3VyR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWJ1aWxkUm93cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgcGFnZUdyb3VwcyA9IHRoaXMuZ3JvdXBzLnNsaWNlKHN0YXJ0LCBzdGFydCArIHRoaXMucGFnZVNpemUpO1xyXG4gICAgY29uc3Qgcm93czogVGFibGVSb3dbXSA9IFtdO1xyXG5cclxuICAgIHBhZ2VHcm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgcm93cy5wdXNoKHsga2luZDogJ2dyb3VwJywgZ3JvdXAsIGxldmVsOiAwIH0pO1xyXG5cclxuICAgICAgY29uc3QgaGllcmFyY2h5ID0gZ3JvdXAuaGllcmFyY2h5ID8/IFtdO1xyXG4gICAgICAvLyBXYWxrIHRoZSBwYXRoLCByZXZlYWxpbmcgZWFjaCBuZXh0IG5vZGUgb25seSB3aGlsZSB0aGUgY2hhaW4gb2ZcclxuICAgICAgLy8gcGFyZW50IGxldmVscyBhYm92ZSBpdCBzdGF5cyBleHBhbmRlZC4gU3RvcCBhcyBzb29uIGFzIGEgbGV2ZWwgaXNcclxuICAgICAgLy8gY29sbGFwc2VkLlxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaGllcmFyY2h5Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0xldmVsRXhwYW5kZWQoZ3JvdXAsIGluZGV4IC0gMSkpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgICAga2luZDogJ2hpZXJhcmNoeScsXHJcbiAgICAgICAgICBncm91cCxcclxuICAgICAgICAgIG5vZGU6IGhpZXJhcmNoeVtpbmRleF0sXHJcbiAgICAgICAgICBub2RlSW5kZXg6IGluZGV4LFxyXG4gICAgICAgICAgbGV2ZWw6IGluZGV4ICsgMSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy52aXNpYmxlUm93cyA9IHJvd3M7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzXCI+XHJcbiAgPCEtLSBIZWFkZXI6IHRpdGxlICsgY291bnQsIFZpZXcgQWxsIGxpbmssIGNvbGxhcHNlL2V4cGFuZCB0b2dnbGUgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19faGVhZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19oZWFkaW5nXCI+XHJcbiAgICAgIDxoMiBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fdGl0bGUgbS0wXCI+e3sgdGV4dHM/LnRpdGxlIH19PC9oMj5cclxuICAgICAgPCEtLSBDb3VudCBzaG93biBvbmx5IHdoZW4gdGhlIGNhcmQgaXMgY29sbGFwc2VkIChlLmcuIFwiMTIgR3JvdXBzXCIpLFxyXG4gICAgICAgICAgIG1hdGNoaW5nIHRoZSBGaWdtYS4gV2hlbiBleHBhbmRlZCwgdGhlIHRhYmxlIHJlcGxhY2VzIGl0LiAtLT5cclxuICAgICAgPHNwYW5cclxuICAgICAgICAqbmdJZj1cIiFpc0V4cGFuZGVkICYmIHNlY3Rpb25TdGF0ZSA9PT0gc2VjdGlvblN0YXRlcy5MT0FERURcIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19jb3VudFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBncm91cENvdW50IH19IHt7IHRleHRzPy5jb3VudFN1ZmZpeCB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19hY3Rpb25zXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fdmlldy1hbGxcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dHM/LmFyaWFMYWJlbD8udmlld0FsbFwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVmlld0FsbCgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHRleHRzPy52aWV3QWxsTGFiZWwgfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX3RvZ2dsZVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHRzPy5hcmlhTGFiZWw/LnRvZ2dsZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlRXhwYW5kKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4+e3sgaXNFeHBhbmRlZCA/IHRleHRzPy5jb2xsYXBzZUxhYmVsIDogdGV4dHM/LmV4cGFuZExhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgIDxpXHJcbiAgICAgICAgICBjbGFzcz1cImZhLXNvbGlkXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImlzRXhwYW5kZWQgPyAnZmEtY2hldnJvbi11cCcgOiAnZmEtY2hldnJvbi1kb3duJ1wiXHJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgID48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gQm9keTogb25seSB3aGVuIHRoZSBjYXJkIGlzIGV4cGFuZGVkLiAtLT5cclxuICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19ib2R5XCIgKm5nSWY9XCJpc0V4cGFuZGVkXCI+XHJcbiAgICA8aWVlZXNhLWxvYWRlclxyXG4gICAgICAqbmdJZj1cInNlY3Rpb25TdGF0ZSA9PT0gc2VjdGlvblN0YXRlcy5MT0FESU5HXCJcclxuICAgID48L2llZWVzYS1sb2FkZXI+XHJcblxyXG4gICAgPHBcclxuICAgICAgKm5nSWY9XCJzZWN0aW9uU3RhdGUgPT09IHNlY3Rpb25TdGF0ZXMuRVJST1JcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fbWVzc2FnZSBpZWVlc2EteW91ci1ncm91cHNfX21lc3NhZ2UtLWVycm9yXCJcclxuICAgICAgcm9sZT1cImFsZXJ0XCJcclxuICAgID5cclxuICAgICAge3sgdGV4dHM/LmVycm9yTWVzc2FnZSB9fVxyXG4gICAgPC9wPlxyXG5cclxuICAgIDxwXHJcbiAgICAgICpuZ0lmPVwic2VjdGlvblN0YXRlID09PSBzZWN0aW9uU3RhdGVzLkVNUFRZXCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX21lc3NhZ2VcIlxyXG4gICAgICByb2xlPVwic3RhdHVzXCJcclxuICAgID5cclxuICAgICAge3sgdGV4dHM/LmVtcHR5TWVzc2FnZSB9fVxyXG4gICAgPC9wPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWN0aW9uU3RhdGUgPT09IHNlY3Rpb25TdGF0ZXMuTE9BREVEXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fdGFibGVcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7IHRleHRzPy5jb2x1bW5zPy5ncm91cCB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7IHRleHRzPy5jb2x1bW5zPy50eXBlIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3sgdGV4dHM/LmNvbHVtbnM/Lm9mZmljZXJSb2xlIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3sgdGV4dHM/LmNvbHVtbnM/LmFmZmlsaWF0aW9uIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3sgdGV4dHM/LmNvbHVtbnM/Lm1lbWJlckxldmVsIH19PC90aD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiB2aXNpYmxlUm93czsgdHJhY2tCeTogdHJhY2tCeVJvd1wiPlxyXG4gICAgICAgICAgICA8IS0tIEdST1VQIFJPVyAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdy5raW5kID09PSAnZ3JvdXAnXCI+XHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19ncm91cC1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEdyb3VwIHJvdyB0b2dnbGUgKGxldmVsIC0xKTogcmV2ZWFscyB0aGUgZmlyc3QgaGllcmFyY2h5XHJcbiAgICAgICAgICAgICAgICAgICAgIG5vZGUuIFNhbWUgc2hhcmVkIGljb24gYnV0dG9uIGFzIHRoZSBHcm91cHMgdHJlZS4gLS0+XHJcbiAgICAgICAgICAgICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMZXZlbEV4cGFuZGFibGUocm93Lmdyb3VwISwgLTEpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX2hpZXJhcmNoeS10b2dnbGVcIlxyXG4gICAgICAgICAgICAgICAgICBbaWNvbkJ1dHRvbl09XCJnZXRUb2dnbGVCdXR0b24ocm93Lmdyb3VwISwgLTEpXCJcclxuICAgICAgICAgICAgICAgICAgW2FyaWFFeHBhbmRlZF09XCJpc0xldmVsRXhwYW5kZWQocm93Lmdyb3VwISwgLTEpXCJcclxuICAgICAgICAgICAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJvblRvZ2dsZUxldmVsKHJvdy5ncm91cCEsIC0xKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIExlYWYgZ3JvdXAgKG5vIGhpZXJhcmNoeSk6IHNwYWNlciBrZWVwcyBuYW1lcyBhbGlnbmVkLiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTGV2ZWxFeHBhbmRhYmxlKHJvdy5ncm91cCEsIC0xKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX190b2dnbGUtc3BhY2VyXCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fZ3JvdXAtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyByb3cuZ3JvdXAhLmdyb3VwIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgcm93Lmdyb3VwIS50eXBlIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgcm93Lmdyb3VwIS5vZmZpY2VyUm9sZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IHJvdy5ncm91cCEuYWZmaWxpYXRpb24gfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19iYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJlc29sdmVCYWRnZUNsYXNzKHJvdy5ncm91cCEubWVtYmVyTGV2ZWwpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgcm93Lmdyb3VwIS5tZW1iZXJMZXZlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBISUVSQVJDSFkgKGFuY2VzdG9yKSBST1cgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cua2luZCA9PT0gJ2hpZXJhcmNoeSdcIj5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX2dyb3VwLWNlbGwgaWVlZXNhLXlvdXItZ3JvdXBzX19oaWVyYXJjaHktY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX2luZGVudFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyb3cubGV2ZWwgKiBpbmRlbnRQZXJMZXZlbFwiXHJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBUaGlzIG5vZGUncyBvd24gKy8tIHRvZ2dsZSwgd2hlbiBpdCBoYXMgYSBmdXJ0aGVyIGNoaWxkIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgIHJldmVhbCAoc3RlcC1ieS1zdGVwIGRyaWxsLWRvd24gbGlrZSB0aGUgR3JvdXBzIHRyZWUpLiAtLT5cclxuICAgICAgICAgICAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0xldmVsRXhwYW5kYWJsZShyb3cuZ3JvdXAhLCByb3cubm9kZUluZGV4ISlcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19faGllcmFyY2h5LXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpY29uQnV0dG9uXT1cImdldFRvZ2dsZUJ1dHRvbihyb3cuZ3JvdXAhLCByb3cubm9kZUluZGV4ISlcIlxyXG4gICAgICAgICAgICAgICAgICBbYXJpYUV4cGFuZGVkXT1cImlzTGV2ZWxFeHBhbmRlZChyb3cuZ3JvdXAhLCByb3cubm9kZUluZGV4ISlcIlxyXG4gICAgICAgICAgICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIm9uVG9nZ2xlTGV2ZWwocm93Lmdyb3VwISwgcm93Lm5vZGVJbmRleCEpXCJcclxuICAgICAgICAgICAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTGVhZiBub2RlOiBzcGFjZXIga2VlcHMgdGhlIG5hbWUgYWxpZ25lZCB3aXRoIHBhcmVudCBub2Rlc1xyXG4gICAgICAgICAgICAgICAgICAgICAoc2FtZSBmb290cHJpbnQgYXMgdGhlIHRvZ2dsZSksIG5vIGNvbm5lY3RvciBhcnJvdy4gLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0xldmVsRXhwYW5kYWJsZShyb3cuZ3JvdXAhLCByb3cubm9kZUluZGV4ISlcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImllZWVzYS15b3VyLWdyb3Vwc19fdG9nZ2xlLXNwYWNlclwiXHJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZWVlc2EteW91ci1ncm91cHNfX2hpZXJhcmNoeS1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvdy5ub2RlIS5ncm91cE5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy5ub2RlIS5ncm91cEFjcm9ueW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19oaWVyYXJjaHktYWNyb255bVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAoe3sgcm93Lm5vZGUhLmdyb3VwQWNyb255bSB9fSlcclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+PC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICA8IS0tIFBhZ2luYXRpb246IHRoZSBzYW1lIEFuZ3VsYXIgTWF0ZXJpYWwgcGFnaW5hdG9yIHRoZSBzaGFyZWQgZGF0YS10YWJsZVxyXG4gICAgICAgICAgIHVzZXMg4oCUIGl0IHByb3ZpZGVzIHRoZSBcIkl0ZW1zIHBlciBwYWdlXCIgZHJvcGRvd24sIHJhbmdlIGxhYmVsLCBhbmRcclxuICAgICAgICAgICBwcmV2L25leHQgY29udHJvbHMuIC0tPlxyXG4gICAgICA8bWF0LXBhZ2luYXRvclxyXG4gICAgICAgICpuZ0lmPVwiZ3JvdXBDb3VudCA+IDBcIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXlvdXItZ3JvdXBzX19wYWdpbmF0b3JcIlxyXG4gICAgICAgIFtsZW5ndGhdPVwiZ3JvdXBDb3VudFwiXHJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXHJcbiAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxyXG4gICAgICAgIChwYWdlKT1cIm9uUGFnaW5hdG9yQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICA+PC9tYXQtcGFnaW5hdG9yPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19