@csmart/ngc-smart-core 1.15.6 → 1.15.8

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.
@@ -70,7 +70,7 @@ export class SmartNavbarComponent {
70
70
  });
71
71
  setTimeout(() => {
72
72
  this.selectedTab.setValue(this.navbarConfigs.findIndex(c => c.appModuleId === this.appModuleId));
73
- }, 100);
73
+ }, 1000);
74
74
  });
75
75
  // this.isAuthenticated = this.authnService.getAccount() ? true : false;
76
76
  }
@@ -159,10 +159,10 @@ export class SmartNavbarComponent {
159
159
  }
160
160
  }
161
161
  /** @nocollapse */ SmartNavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartNavbarComponent, deps: [{ token: i1.SmartNavbarService }, { token: i2.XdmService }, { token: i3.MsalService }], target: i0.ɵɵFactoryTarget.Component });
162
- /** @nocollapse */ SmartNavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-family:Roboto,arial,sans-serif;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }], encapsulation: i0.ViewEncapsulation.None });
162
+ /** @nocollapse */ SmartNavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }], encapsulation: i0.ViewEncapsulation.None });
163
163
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartNavbarComponent, decorators: [{
164
164
  type: Component,
165
- args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-family:Roboto,arial,sans-serif;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"] }]
165
+ args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"] }]
166
166
  }], ctorParameters: function () { return [{ type: i1.SmartNavbarService }, { type: i2.XdmService }, { type: i3.MsalService }]; }, propDecorators: { serviceApiUrl: [{
167
167
  type: Input
168
168
  }], appModuleId: [{
@@ -171,4 +171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
171
171
  type: ViewChild,
172
172
  args: ['tabs']
173
173
  }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUlULEtBQUssRUFFTCxTQUFTLEVBRVQsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBTzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRN0MsTUFBTSxPQUFPLG9CQUFvQjtJQWEvQixZQUNVLG1CQUF1QyxFQUN2QyxVQUFzQjtJQUM5Qix3QkFBd0I7SUFDaEIsWUFBeUI7UUFIekIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXRCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBZjFCLGdCQUFXLEdBQUcsT0FBTyxDQUFDO1FBUy9CLGdCQUFXLEdBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFPN0IsQ0FBQztJQUVKLFdBQVc7UUFDVDs7Ozs7VUFLRTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFBO0lBQzVCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkIsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsVUFBVTtvQkFDN0MsQ0FBQyxDQUFDLGdCQUFnQjtvQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNsRCx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2pELE1BQU07UUFDUixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVTthQUN4QyxpQkFBaUIsRUFBRTthQUNuQixTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQzlCLHdCQUF3QjtZQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7WUFDekMsTUFBTTtRQUNSLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVO2FBQ3JDLGNBQWMsRUFBRTthQUNoQixTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4Qix3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDN0IsTUFBTTtRQUNSLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLG1CQUFtQjthQUNyQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUU7b0JBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ1g7cUJBQU0sSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUU7b0JBQzFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNWO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7WUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRyxDQUFDLEVBQ0MsR0FBRyxDQUFDLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQztRQUVMLHdFQUF3RTtJQUMxRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVNLGVBQWUsQ0FBQyxNQUF5QjtRQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFDckQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxPQUFPO2dCQUNuRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxlQUFlLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7b0JBQ3pGLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxXQUFXO1FBQ3ZDLElBQ0UsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDdEM7WUFDQSxPQUFPLENBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUNuQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQ1AsQ0FBQztTQUNIO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBVyxtQkFBbUI7UUFDNUIsSUFDRSxJQUFJLENBQUMsVUFBVTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSztZQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNoQztZQUNBLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNsRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLG1CQUFtQixDQUFDLE1BQXlCO1FBQ2xELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLElBQ0UsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDaEM7WUFDQSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBVTtRQUMzQixJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFDO1lBQzlGLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxNQUF5QjtRQUNwRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVELElBQVcsYUFBYTtRQUN0QixJQUNFLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLO1lBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2hDO1lBQ0EsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sWUFBWSxDQUFDLElBQVU7UUFDN0IsSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBQztZQUM3QyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVU7UUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25CLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDOztxSUEzTFUsb0JBQW9CO3lIQUFwQixvQkFBb0IsdVBDOUJqQyxrM0VBc0RBOzRGRHhCYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGlCQUdiLGlCQUFpQixDQUFDLElBQUk7NEpBRzVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDYSxRQUFRO3NCQUExQixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGlzRGV2TW9kZSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmJhclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWGRtU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2UveGRtLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgTG9naW5TdGFmZixcclxuICBSb2xlLFxyXG59IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNtYXJ0LW5hdmJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5jc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnROYXZiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzZXJ2aWNlQXBpVXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwTW9kdWxlSWQgPSAnU01BUlQnO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYnMnKSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XHJcbiAgc2VsZWN0ZWRPZmZlbmRlcjogU2VsZWN0ZWRPZmZlbmRlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIG9mZmVuZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgc3RhZmZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAvLyBpc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuXHJcbiAgbmF2YmFyQ29uZmlnczogU21hcnROYXZiYXJDb25maWdbXTtcclxuICBzZWxlY3RlZFRhYj0gbmV3IEZvcm1Db250cm9sKDApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmF2YmFyQ29uZmlnU2VydmljZTogU21hcnROYXZiYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIGF1dGhuU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIC8qXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVGFiKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgICAqL1xyXG4gICAgIHRoaXMuc2VsZWN0ZWRUYWIuc2V0VmFsdWVcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldFNlbGVjdGVkT2ZmZW5kZXIoKS50aGVuKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9XHJcbiAgICAgICAgc2VsZWN0ZWRPZmZlbmRlciAmJiBzZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWRcclxuICAgICAgICAgID8gc2VsZWN0ZWRPZmZlbmRlclxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldExvZ2luU3RhZmYoKS50aGVuKChsb2dpblN0YWZmKSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmID8gbG9naW5TdGFmZiA6IG51bGw7XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vZmZlbmRlclN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0T2ZmZW5kZXJVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsZWN0ZWRPZmZlbmRlcjtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdGFmZlN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0U3RhZmZVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChsb2dpblN0YWZmKSA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gbG9naW5TdGFmZjtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5uYXZiYXJDb25maWdTZXJ2aWNlXHJcbiAgICAgIC5nZXROYXZiYXJDb25maWdzKHRoaXMuc2VydmljZUFwaVVybClcclxuICAgICAgLnN1YnNjcmliZSgoY29uZmlncykgPT4ge1xyXG4gICAgICAgIHRoaXMubmF2YmFyQ29uZmlncyA9IGNvbmZpZ3Muc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKGEuZGlzcGxheU9yZGVyIDwgYi5kaXNwbGF5T3JkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChhLmRpc3BsYXlPcmRlciA+IGIuZGlzcGxheU9yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiLnNldFZhbHVlKHRoaXMubmF2YmFyQ29uZmlncy5maW5kSW5kZXgoYyA9PiBjLmFwcE1vZHVsZUlkID09PSB0aGlzLmFwcE1vZHVsZUlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICwgMTAwKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhuU2VydmljZS5nZXRBY2NvdW50KCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMub2ZmZW5kZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc3RhZmZTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuY2xlYXJBbGwoKTtcclxuICAgIHRoaXMuYXV0aG5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmF1dGhuU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QXBwTW9kdWxlVXJsKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIHtcclxuICAgIHJldHVybiAoY29uZmlnLmFwcE1vZHVsZUlkID09PSAnUFBNQVNSVlcnKSA/IGNvbmZpZy51cmwgXHJcbiAgICAgIDogY29uZmlnICYmIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciAmJiBjb25maWcuYXBwTW9kdWxlSWQgPT09ICdQUE1BUydcclxuICAgICAgPyBgJHtjb25maWcudXJsfSZPZmZlbmRlcklkPSR7dGhpcy5zZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWR9YFxyXG4gICAgICA6IHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA/IGAke2NvbmZpZy51cmx9Lz9vZmZlbmRlcklkPSR7dGhpcy5zZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWR9YFxyXG4gICAgICA6IGNvbmZpZy51cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzQXBwTW9kdWxlUGVybWlzc2lvbihhcHBNb2R1bGVJZCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgKHApID0+IHAuYXBwTW9kdWxlSWQgPT09IGFwcE1vZHVsZUlkLFxyXG4gICAgICAgICkgPiAtMVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzRXh0ZXJuYWxVc2VyUm9sZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KHRoaXMuaXNFeHRlcm5hbFJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tEVklQUGVybWlzc2lvbihjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKSA6IGJvb2xlYW57XHJcbiAgICByZXR1cm4gKChjb25maWcuYXBwTW9kdWxlSWQgIT09ICdEVklQJykgfHwgKGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gXCJEVklQXCIgJiYgdGhpcy5oYXNEVklQUm9sZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNEVklQUm9sZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KHRoaXMuaXNEVklQUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNEVklQUm9sZShyb2xlOiBSb2xlKXtcclxuICAgIGlmKHJvbGUucm9sZUlkID09ICdUU0QnIHx8IHJvbGUucm9sZUlkID09ICdUQUQnIHx8IHJvbGUucm9sZUlkID09ICdTVFNEJyB8fCByb2xlLnJvbGVJZCA9PSAnQkMnKXtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja1ZpY3RpbVBlcm1pc3Npb24oY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykgOiBib29sZWFue1xyXG4gICAgcmV0dXJuICgoY29uZmlnLmFwcE1vZHVsZUlkICE9PSAnVklDVElNJykgfHwgKGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gXCJWSUNUSU1cIiAmJiB0aGlzLmhhc1ZpY3RpbVJvbGUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzVmljdGltUm9sZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvZ2luU3RhZmYucm9sZXMuZmluZEluZGV4KHRoaXMuaXNWaWN0aW1Sb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1ZpY3RpbVJvbGUocm9sZTogUm9sZSl7XHJcbiAgICBpZihyb2xlLnJvbGVJZCA9PSAnQkMnIHx8IHJvbGUucm9sZUlkID09ICdWU1AnKXtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFeHRlcm5hbFJvbGUocm9sZTogUm9sZSkge1xyXG4gICAgc3dpdGNoIChyb2xlLnJvbGVJZCkge1xyXG4gICAgICBjYXNlICdFVURUTCc6XHJcbiAgICAgIGNhc2UgJ0VVRFVTTSc6XHJcbiAgICAgIGNhc2UgJ0VVSkRHJzpcclxuICAgICAgY2FzZSAnRVVNUEQnOlxyXG4gICAgICBjYXNlICdFVVNPVFYnOlxyXG4gICAgICBjYXNlICdFVVVTQTInOlxyXG4gICAgICBjYXNlICdFVVVTQU8nOlxyXG4gICAgICBjYXNlICdFVVVTUEMnOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8vIEVVRFRMXHJcbi8vIEVVRFVTTVxyXG4vLyBFVUpER1xyXG5cclxuLy8gRVVNUERcclxuLy8gRVVTT1RWXHJcbi8vIEVVVVNBMlxyXG5cclxuLy8gRVVVU0FPXHJcbi8vIEVVVVNQQ1xyXG4iLCI8IS0tXHJcbjxhIGNsYXNzPVwic21hcnQtbmF2YmFyLXRvZ2dsZSBvcGVuXCIgaHJlZj1cIiNuYXZcIj5cclxuICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+bWVudTwvaT5cclxuPC9hPlxyXG5cclxuPG5hdiBpZD1cIm5hdlwiIHJvbGU9XCJuYXZpZ2F0aW9uXCIgY2xhc3M9XCJzbWFydC1uYXZiYXItY29udGFpbmVyXCI+XHJcbiAgPGEgY2xhc3M9XCJzbWFydC1uYXZiYXItdG9nZ2xlIGNsb3NlXCIgaHJlZj1cIiNcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5jbG9zZTwvaT5cclxuICA8L2E+XHJcblxyXG4gIDxzcGFuICpuZ0Zvcj1cImxldCBjb25maWcgb2YgbmF2YmFyQ29uZmlnc1wiPlxyXG4gICAgPGEgbWF0LWJ1dHRvbiBjbGFzcz1cInNtYXJ0LW5hdmJhci1pdGVtXCIgXHJcbiAgICAgICpuZ0lmPVwiKGNvbmZpZy5vZmZlbmRlclNwZWNpZmljRmxhZyA9PT0gZmFsc2UgfHwgc2VsZWN0ZWRPZmZlbmRlcikgJiYgaXNBdXRoZW50aWNhdGVkICYmIGxvZ2luU3RhZmZcIiBocmVmPVwie3tjb25maWcudXJsfX1cIj57e2NvbmZpZy5uYW1lfX08L2E+XHJcbiAgPC9zcGFuPlxyXG5cclxuICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJzbWFydC1uYXZiYXItaXRlbVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51VGhlbWVcIj5TZXQgVGhlbWU8L2J1dHRvbj5cclxuICA8bWF0LW1lbnUgI21lbnVUaGVtZT1cIm1hdE1lbnVcIj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TZXRUaGVtZSgnYmx1ZS10aGVtZScpXCI+Qmx1ZTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvblNldFRoZW1lKCdyZWQtdGhlbWUnKVwiPlJlZDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvblNldFRoZW1lKCdncmVlbi10aGVtZScpXCI+R3JlZW48L2J1dHRvbj5cclxuICA8L21hdC1tZW51PlxyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInNtYXJ0LW5hdmJhci1pdGVtIHNtYXJ0LW5hdmJhci1sYXN0LWl0ZW1cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXHJcbiAgICAqbmdJZj1cImlzQXV0aGVudGljYXRlZCAmJiBsb2dpblN0YWZmXCI+e3tsb2dpblN0YWZmLmZpcnN0TmFtZSArICcgJyArIGxvZ2luU3RhZmYubGFzdE5hbWV9fTwvYnV0dG9uPlxyXG4gIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5Qcm9maWxlPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImxvZ291dCgpXCI+U2lnbiBPdXQ8L2J1dHRvbj5cclxuICA8L21hdC1tZW51PlxyXG48L25hdj5cclxuLS0+XHJcblxyXG48IS0tIDxuYXYgbWF0LXRhYi1uYXYtYmFyPlxyXG4gIDxhIG1hdC10YWItbGluayBtYXQtZmxhdC1idXR0b24gKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBuYXZiYXJDb25maWdzXCIgW2FjdGl2ZV09XCJhcHBNb2R1bGVJZCA9PSBjb25maWcuYXBwTW9kdWxlSWRcIiBocmVmPVwie3tjb25maWcudXJsfX1cIj57e2NvbmZpZy5uYW1lfX08L2E+XHJcbjwvbmF2PiAtLT5cclxuXHJcbjxtYXQtdGFiLWdyb3VwIGNsYXNzPVwibmF2LXRhYi1ncm91cFwiIFtzZWxlY3RlZEluZGV4XT1cInNlbGVjdGVkVGFiLnZhbHVlXCIgKHNlbGVjdGVkSW5kZXhDaGFuZ2UpPVwic2VsZWN0ZWRUYWIuc2V0VmFsdWUoJGV2ZW50KVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBuYXZiYXJDb25maWdzOyBsZXQgaW5kZXggPSBpbmRleFwiPlxyXG4gICAgPG1hdC10YWJcclxuICAgICAgKm5nSWY9XCJcclxuICAgICAgICAoKGhhc0V4dGVybmFsVXNlclJvbGUgJiYgaGFzQXBwTW9kdWxlUGVybWlzc2lvbihjb25maWcuYXBwTW9kdWxlSWQpKSB8fFxyXG4gICAgICAgICghaGFzRXh0ZXJuYWxVc2VyUm9sZSAmJiBcclxuICAgICAgICAoY29uZmlnLm9mZmVuZGVyU3BlY2lmaWNGbGFnID09PSBmYWxzZSB8fCBzZWxlY3RlZE9mZmVuZGVyKSkpICYmXHJcbiAgICAgICAgY2hlY2tWaWN0aW1QZXJtaXNzaW9uKGNvbmZpZykgJiZcclxuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQgJiZcclxuICAgICAgICBsb2dpblN0YWZmXCJcclxuICAgICAgbGFiZWw9XCJjb25maWcubmFtZVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cclxuICAgICAgICA8YVxyXG4gICAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgICBbaHJlZl09XCJnZXRBcHBNb2R1bGVVcmwoY29uZmlnKVwiXHJcbiAgICAgICAgICA+e3sgY29uZmlnLm5hbWUgfX08L2E+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L21hdC10YWI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbWF0LXRhYi1ncm91cD5cclxuIl19
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUlULEtBQUssRUFFTCxTQUFTLEVBRVQsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBTzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRN0MsTUFBTSxPQUFPLG9CQUFvQjtJQWEvQixZQUNVLG1CQUF1QyxFQUN2QyxVQUFzQjtJQUM5Qix3QkFBd0I7SUFDaEIsWUFBeUI7UUFIekIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXRCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBZjFCLGdCQUFXLEdBQUcsT0FBTyxDQUFDO1FBUy9CLGdCQUFXLEdBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFPN0IsQ0FBQztJQUVKLFdBQVc7UUFDVDs7Ozs7VUFLRTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFB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LENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sWUFBWSxDQUFDLElBQVU7UUFDN0IsSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBQztZQUM3QyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVU7UUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25CLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDOztxSUEzTFUsb0JBQW9CO3lIQUFwQixvQkFBb0IsdVBDOUJqQyxrM0VBc0RBOzRGRHhCYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGlCQUdiLGlCQUFpQixDQUFDLElBQUk7NEpBRzVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDYSxRQUFRO3NCQUExQixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGlzRGV2TW9kZSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmJhclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWGRtU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2UveGRtLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgTG9naW5TdGFmZixcclxuICBSb2xlLFxyXG59IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNtYXJ0LW5hdmJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5jc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnROYXZiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzZXJ2aWNlQXBpVXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwTW9kdWxlSWQgPSAnU01BUlQnO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYnMnKSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XHJcbiAgc2VsZWN0ZWRPZmZlbmRlcjogU2VsZWN0ZWRPZmZlbmRlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIG9mZmVuZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgc3RhZmZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAvLyBpc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuXHJcbiAgbmF2YmFyQ29uZmlnczogU21hcnROYXZiYXJDb25maWdbXTtcclxuICBzZWxlY3RlZFRhYj0gbmV3IEZvcm1Db250cm9sKDApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmF2YmFyQ29uZmlnU2VydmljZTogU21hcnROYXZiYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIGF1dGhuU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIC8qXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVGFiKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgICAqL1xyXG4gICAgIHRoaXMuc2VsZWN0ZWRUYWIuc2V0VmFsdWVcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldFNlbGVjdGVkT2ZmZW5kZXIoKS50aGVuKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9XHJcbiAgICAgICAgc2VsZWN0ZWRPZmZlbmRlciAmJiBzZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWRcclxuICAgICAgICAgID8gc2VsZWN0ZWRPZmZlbmRlclxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldExvZ2luU3RhZmYoKS50aGVuKChsb2dpblN0YWZmKSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmID8gbG9naW5TdGFmZiA6IG51bGw7XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vZmZlbmRlclN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0T2ZmZW5kZXJVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsZWN0ZWRPZmZlbmRlcjtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdGFmZlN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0U3RhZmZVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChsb2dpblN0YWZmKSA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gbG9naW5TdGFmZjtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5uYXZiYXJDb25maWdTZXJ2aWNlXHJcbiAgICAgIC5nZXROYXZiYXJDb25maWdzKHRoaXMuc2VydmljZUFwaVVybClcclxuICAgICAgLnN1YnNjcmliZSgoY29uZmlncykgPT4ge1xyXG4gICAgICAgIHRoaXMubmF2YmFyQ29uZmlncyA9IGNvbmZpZ3Muc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKGEuZGlzcGxheU9yZGVyIDwgYi5kaXNwbGF5T3JkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChhLmRpc3BsYXlPcmRlciA+IGIuZGlzcGxheU9yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiLnNldFZhbHVlKHRoaXMubmF2YmFyQ29uZmlncy5maW5kSW5kZXgoYyA9PiBjLmFwcE1vZHVsZUlkID09PSB0aGlzLmFwcE1vZHVsZUlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICwgMTAwMCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoblNlcnZpY2UuZ2V0QWNjb3VudCgpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmNsZWFyQWxsKCk7XHJcbiAgICB0aGlzLmF1dGhuU2VydmljZS5sb2dvdXQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRoblNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFwcE1vZHVsZVVybChjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gKGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gJ1BQTUFTUlZXJykgPyBjb25maWcudXJsIFxyXG4gICAgICA6IGNvbmZpZyAmJiB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgJiYgY29uZmlnLmFwcE1vZHVsZUlkID09PSAnUFBNQVMnXHJcbiAgICAgID8gYCR7Y29uZmlnLnVybH0mT2ZmZW5kZXJJZD0ke3RoaXMuc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkfWBcclxuICAgICAgOiB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPyBgJHtjb25maWcudXJsfS8/b2ZmZW5kZXJJZD0ke3RoaXMuc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkfWBcclxuICAgICAgOiBjb25maWcudXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0FwcE1vZHVsZVBlcm1pc3Npb24oYXBwTW9kdWxlSWQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zLmZpbmRJbmRleChcclxuICAgICAgICAgIChwKSA9PiBwLmFwcE1vZHVsZUlkID09PSBhcHBNb2R1bGVJZCxcclxuICAgICAgICApID4gLTFcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0V4dGVybmFsVXNlclJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRXh0ZXJuYWxSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrRFZJUFBlcm1pc3Npb24oY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykgOiBib29sZWFue1xyXG4gICAgcmV0dXJuICgoY29uZmlnLmFwcE1vZHVsZUlkICE9PSAnRFZJUCcpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiRFZJUFwiICYmIHRoaXMuaGFzRFZJUFJvbGUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzRFZJUFJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRFZJUFJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRFZJUFJvbGUocm9sZTogUm9sZSl7XHJcbiAgICBpZihyb2xlLnJvbGVJZCA9PSAnVFNEJyB8fCByb2xlLnJvbGVJZCA9PSAnVEFEJyB8fCByb2xlLnJvbGVJZCA9PSAnU1RTRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ0JDJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tWaWN0aW1QZXJtaXNzaW9uKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbntcclxuICAgIHJldHVybiAoKGNvbmZpZy5hcHBNb2R1bGVJZCAhPT0gJ1ZJQ1RJTScpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiVklDVElNXCIgJiYgdGhpcy5oYXNWaWN0aW1Sb2xlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc1ZpY3RpbVJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzVmljdGltUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNWaWN0aW1Sb2xlKHJvbGU6IFJvbGUpe1xyXG4gICAgaWYocm9sZS5yb2xlSWQgPT0gJ0JDJyB8fCByb2xlLnJvbGVJZCA9PSAnVlNQJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRXh0ZXJuYWxSb2xlKHJvbGU6IFJvbGUpIHtcclxuICAgIHN3aXRjaCAocm9sZS5yb2xlSWQpIHtcclxuICAgICAgY2FzZSAnRVVEVEwnOlxyXG4gICAgICBjYXNlICdFVURVU00nOlxyXG4gICAgICBjYXNlICdFVUpERyc6XHJcbiAgICAgIGNhc2UgJ0VVTVBEJzpcclxuICAgICAgY2FzZSAnRVVTT1RWJzpcclxuICAgICAgY2FzZSAnRVVVU0EyJzpcclxuICAgICAgY2FzZSAnRVVVU0FPJzpcclxuICAgICAgY2FzZSAnRVVVU1BDJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLyBFVURUTFxyXG4vLyBFVURVU01cclxuLy8gRVVKREdcclxuXHJcbi8vIEVVTVBEXHJcbi8vIEVVU09UVlxyXG4vLyBFVVVTQTJcclxuXHJcbi8vIEVVVVNBT1xyXG4vLyBFVVVTUENcclxuIiwiPCEtLVxyXG48YSBjbGFzcz1cInNtYXJ0LW5hdmJhci10b2dnbGUgb3BlblwiIGhyZWY9XCIjbmF2XCI+XHJcbiAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPm1lbnU8L2k+XHJcbjwvYT5cclxuXHJcbjxuYXYgaWQ9XCJuYXZcIiByb2xlPVwibmF2aWdhdGlvblwiIGNsYXNzPVwic21hcnQtbmF2YmFyLWNvbnRhaW5lclwiPlxyXG4gIDxhIGNsYXNzPVwic21hcnQtbmF2YmFyLXRvZ2dsZSBjbG9zZVwiIGhyZWY9XCIjXCI+XHJcbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+Y2xvc2U8L2k+XHJcbiAgPC9hPlxyXG5cclxuICA8c3BhbiAqbmdGb3I9XCJsZXQgY29uZmlnIG9mIG5hdmJhckNvbmZpZ3NcIj5cclxuICAgIDxhIG1hdC1idXR0b24gY2xhc3M9XCJzbWFydC1uYXZiYXItaXRlbVwiIFxyXG4gICAgICAqbmdJZj1cIihjb25maWcub2ZmZW5kZXJTcGVjaWZpY0ZsYWcgPT09IGZhbHNlIHx8IHNlbGVjdGVkT2ZmZW5kZXIpICYmIGlzQXV0aGVudGljYXRlZCAmJiBsb2dpblN0YWZmXCIgaHJlZj1cInt7Y29uZmlnLnVybH19XCI+e3tjb25maWcubmFtZX19PC9hPlxyXG4gIDwvc3Bhbj5cclxuXHJcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic21hcnQtbmF2YmFyLWl0ZW1cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVRoZW1lXCI+U2V0IFRoZW1lPC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNtZW51VGhlbWU9XCJtYXRNZW51XCI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uU2V0VGhlbWUoJ2JsdWUtdGhlbWUnKVwiPkJsdWU8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TZXRUaGVtZSgncmVkLXRoZW1lJylcIj5SZWQ8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TZXRUaGVtZSgnZ3JlZW4tdGhlbWUnKVwiPkdyZWVuPC9idXR0b24+XHJcbiAgPC9tYXQtbWVudT5cclxuICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJzbWFydC1uYXZiYXItaXRlbSBzbWFydC1uYXZiYXItbGFzdC1pdGVtXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxyXG4gICAgKm5nSWY9XCJpc0F1dGhlbnRpY2F0ZWQgJiYgbG9naW5TdGFmZlwiPnt7bG9naW5TdGFmZi5maXJzdE5hbWUgKyAnICcgKyBsb2dpblN0YWZmLmxhc3ROYW1lfX08L2J1dHRvbj5cclxuICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0+UHJvZmlsZTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJsb2dvdXQoKVwiPlNpZ24gT3V0PC9idXR0b24+XHJcbiAgPC9tYXQtbWVudT5cclxuPC9uYXY+XHJcbi0tPlxyXG5cclxuPCEtLSA8bmF2IG1hdC10YWItbmF2LWJhcj5cclxuICA8YSBtYXQtdGFiLWxpbmsgbWF0LWZsYXQtYnV0dG9uICpuZ0Zvcj1cImxldCBjb25maWcgb2YgbmF2YmFyQ29uZmlnc1wiIFthY3RpdmVdPVwiYXBwTW9kdWxlSWQgPT0gY29uZmlnLmFwcE1vZHVsZUlkXCIgaHJlZj1cInt7Y29uZmlnLnVybH19XCI+e3tjb25maWcubmFtZX19PC9hPlxyXG48L25hdj4gLS0+XHJcblxyXG48bWF0LXRhYi1ncm91cCBjbGFzcz1cIm5hdi10YWItZ3JvdXBcIiBbc2VsZWN0ZWRJbmRleF09XCJzZWxlY3RlZFRhYi52YWx1ZVwiIChzZWxlY3RlZEluZGV4Q2hhbmdlKT1cInNlbGVjdGVkVGFiLnNldFZhbHVlKCRldmVudClcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb25maWcgb2YgbmF2YmFyQ29uZmlnczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cclxuICAgIDxtYXQtdGFiXHJcbiAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgKChoYXNFeHRlcm5hbFVzZXJSb2xlICYmIGhhc0FwcE1vZHVsZVBlcm1pc3Npb24oY29uZmlnLmFwcE1vZHVsZUlkKSkgfHxcclxuICAgICAgICAoIWhhc0V4dGVybmFsVXNlclJvbGUgJiYgXHJcbiAgICAgICAgKGNvbmZpZy5vZmZlbmRlclNwZWNpZmljRmxhZyA9PT0gZmFsc2UgfHwgc2VsZWN0ZWRPZmZlbmRlcikpKSAmJlxyXG4gICAgICAgIGNoZWNrVmljdGltUGVybWlzc2lvbihjb25maWcpICYmXHJcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkICYmXHJcbiAgICAgICAgbG9naW5TdGFmZlwiXHJcbiAgICAgIGxhYmVsPVwiY29uZmlnLm5hbWVcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XHJcbiAgICAgICAgPGFcclxuICAgICAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICAgICAgW2hyZWZdPVwiZ2V0QXBwTW9kdWxlVXJsKGNvbmZpZylcIlxyXG4gICAgICAgICAgPnt7IGNvbmZpZy5uYW1lIH19PC9hPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L21hdC10YWItZ3JvdXA+XHJcbiJdfQ==
@@ -143,9 +143,9 @@ export class SmartOffenderHeaderComponent {
143
143
  }
144
144
  }
145
145
  /** @nocollapse */ SmartOffenderHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderHeaderComponent, deps: [{ token: i1.XdmService }, { token: i2.MsalService }, { token: i3.SmartOffenderHeaderService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
146
- /** @nocollapse */ SmartOffenderHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartOffenderHeaderComponent, selector: "app-smart-offender-header", ngImport: i0, template: "<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
146
+ /** @nocollapse */ SmartOffenderHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartOffenderHeaderComponent, selector: "app-smart-offender-header", ngImport: i0, template: "<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
147
147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderHeaderComponent, decorators: [{
148
148
  type: Component,
149
- args: [{ selector: 'app-smart-offender-header', template: "<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"] }]
149
+ args: [{ selector: 'app-smart-offender-header', template: "<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"] }]
150
150
  }], ctorParameters: function () { return [{ type: i1.XdmService }, { type: i2.MsalService }, { type: i3.SmartOffenderHeaderService }, { type: i4.Router }]; } });
151
151
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtb2ZmZW5kZXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci9zbWFydC1vZmZlbmRlci1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtb2ZmZW5kZXItaGVhZGVyL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFtRCxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE9BQU8sRUFBRSwwQkFBMEIsRUFBb0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7O0FBT3pDLE1BQU0sT0FBTyw0QkFBNEI7SUFRdkMsbUNBQW1DO0lBRW5DLFlBQ1UsVUFBc0IsRUFDdEIsWUFBeUIsRUFDekIsMEJBQXNELEVBQ3RELE1BQWM7UUFIZCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFDdEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVZ4Qiw2QkFBd0IsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFXakQsQ0FBQztJQUVKLFFBQVE7UUFDTix3RUFBd0U7UUFDeEUsSUFBSSxDQUFD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U0FBUzsrQkFDRSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBOZ1pvbmUsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhkbVNlcnZpY2UgfSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3hkbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRPZmZlbmRlciwgTG9naW5TdGFmZiwgUm9sZSwgT2ZmZW5kZXJRdWVyeSB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSwgZnJvbSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU21hcnRPZmZlbmRlckhlYWRlclNlcnZpY2UsIEFzc2lnbmVkT2ZmZW5kZXIgfSBmcm9tICcuL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNtYXJ0LW9mZmVuZGVyLWhlYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtb2ZmZW5kZXItaGVhZGVyLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0T2ZmZW5kZXJIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXI7XHJcbiAgbG9naW5TdGFmZjogTG9naW5TdGFmZjtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBzZWxlY3RlZE9mZmVuZGVyQ29udHJvbCQgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgLy8gYXNzaWduZWRPZmZlbmRlcnM6IEFzc2lnbmVkT2ZmZW5kZXJbXTtcclxuICBvZmZlbmRlclF1ZXJ5TGlzdDogU2VsZWN0ZWRPZmZlbmRlcltdO1xyXG4gIG9mZmVuZGVyUXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAvLyBwdWJsaWMgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgeGRtU2VydmljZTogWGRtU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aG5TZXJ2aWNlOiBNc2FsU2VydmljZSxcclxuICAgIHByaXZhdGUgc21hcnRPZmZlbmRlckhlYWRlclNlcnZpY2U6IFNtYXJ0T2ZmZW5kZXJIZWFkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhuU2VydmljZS5nZXRBY2NvdW50KCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuZ2V0TG9naW5TdGFmZigpLnRoZW4oKGxvZ2luU3RhZmYpID0+IHtcclxuICAgICAgdGhpcy5sb2dpblN0YWZmID0gbG9naW5TdGFmZiA/IGxvZ2luU3RhZmYgOiBudWxsO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuZ2V0U2VsZWN0ZWRPZmZlbmRlcigpLnRoZW4oKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID1cclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyICYmIHNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZFxyXG4gICAgICAgICAgPyBzZWxlY3RlZE9mZmVuZGVyXHJcbiAgICAgICAgICA6IG51bGw7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0T2ZmZW5kZXJVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsZWN0ZWRPZmZlbmRlcjtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkT2ZmZW5kZXJDb250cm9sKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRPZmZlbmRlclF1ZXJ5KCkudGhlbigob2ZmZW5kZXJRdWVyeTogT2ZmZW5kZXJRdWVyeSkgPT4ge1xyXG4gICAgICBpZiAob2ZmZW5kZXJRdWVyeSkge1xyXG4gICAgICAgIHRoaXMub2ZmZW5kZXJRdWVyeUxpc3QgPSBvZmZlbmRlclF1ZXJ5Lm9mZmVuZGVycztcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkT2ZmZW5kZXJDb250cm9sKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub2ZmZW5kZXJRdWVyeVN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0T2ZmZW5kZXJRdWVyeVVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKG9mZmVuZGVyTGlzdCkgPT4ge1xyXG4gICAgICAgIGlmIChvZmZlbmRlckxpc3QgJiYgb2ZmZW5kZXJMaXN0Lm9mZmVuZGVycykge1xyXG4gICAgICAgICAgdGhpcy5vZmZlbmRlclF1ZXJ5TGlzdCA9IFsuLi5vZmZlbmRlckxpc3Qub2ZmZW5kZXJzXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlckNvbnRyb2wkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKG8pID0+XHJcbiAgICAgIHRoaXMub25PZmZlbmRlclNlbGVjdGVkKG8pLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldCBpc0F1dGhlbnRpY2F0ZWQoKSA6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0aG5TZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKCkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25PZmZlbmRlclNlbGVjdGVkKG9mZmVuZGVyKTogdm9pZCB7XHJcbiAgICBpZiAob2ZmZW5kZXIpIHtcclxuICAgICAgLy8gY29uc3QgbyA9IG9mZmVuZGVyLm9mZmVuZGVyTmFtZS5zcGxpdCgnLCcpO1xyXG4gICAgICAvLyBpZiAoby5sZW5ndGggPT09IDIpIHtcclxuICAgICAgLy8gICBjb25zdCBvZmZlbmRlck5hbWUgPSBgJHtvWzFdfSAke29bMF19YDtcclxuICAgICAgLy8gICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPSB7XHJcbiAgICAgIC8vICAgICBvZmZlbmRlcklkOiBvZmZlbmRlci5vZmZlbmRlcklkLFxyXG4gICAgICAvLyAgICAgbmFtZTogb2ZmZW5kZXJOYW1lLFxyXG4gICAgICAvLyAgICAgcGRJZDogb2ZmZW5kZXIucGRJZCxcclxuICAgICAgLy8gICAgIGJpcnRoRGF0ZTogb2ZmZW5kZXIuYmlydGhEYXRlLFxyXG4gICAgICAvLyAgICAgZ2VuZGVyOiBvZmZlbmRlci5nZW5kZXJDb2RlLFxyXG4gICAgICAvLyAgICAgYXNzaWdubWVudFN0YWZmUmVsYXRpb25JZDogJycsXHJcbiAgICAgIC8vICAgICBpbnRha2VGbGFnOiB0aGlzLmxvZ2luU3RhZmZcclxuICAgICAgLy8gICAgICAgPyB0aGlzLmhhc0ludGFrZVJvbGUodGhpcy5sb2dpblN0YWZmLnJvbGVzKVxyXG4gICAgICAvLyAgICAgICA6IGZhbHNlLFxyXG4gICAgICAvLyAgIH0gYXMgU2VsZWN0ZWRPZmZlbmRlcjtcclxuICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gb2ZmZW5kZXI7XHJcbiAgICAgIHRoaXMueGRtU2VydmljZS5zZXRTZWxlY3RlZE9mZmVuZGVyKHRoaXMuc2VsZWN0ZWRPZmZlbmRlcik7XHJcbiAgICAgIHRoaXMucmVsb2FkQ3VycmVudFJvdXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkT2ZmZW5kZXJDb250cm9sKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgJiZcclxuICAgICAgdGhpcy5vZmZlbmRlclF1ZXJ5TGlzdCAmJlxyXG4gICAgICB0aGlzLm9mZmVuZGVyUXVlcnlMaXN0Lmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICBjb25zdCBvID0gdGhpcy5vZmZlbmRlclF1ZXJ5TGlzdC5maW5kKFxyXG4gICAgICAgICh4KSA9PiB4Lm9mZmVuZGVySWQgPT09IHRoaXMuc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAobykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlckNvbnRyb2wkLnNldFZhbHVlKG8sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFvICYmIHRoaXMub2ZmZW5kZXJRdWVyeUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlckNvbnRyb2wkLnNldFZhbHVlKHRoaXMub2ZmZW5kZXJRdWVyeUxpc3RbMF0sIHtcclxuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVsb2FkQ3VycmVudFJvdXRlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB1cmxUcmVlICYmXHJcbiAgICAgICAgdXJsVHJlZS5yb290ICYmXHJcbiAgICAgICAgdXJsVHJlZS5yb290LnNlZ21lbnRzICYmXHJcbiAgICAgICAgdXJsVHJlZS5yb290LnNlZ21lbnRzLmxlbmd0aCA+IDFcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybFRyZWUucm9vdC5zZWdtZW50c1swXS5wYXRoXSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgdXJsVHJlZSAmJlxyXG4gICAgICAgIHVybFRyZWUucm9vdCAmJlxyXG4gICAgICAgIHVybFRyZWUucm9vdC5jaGlsZHJlbiAmJlxyXG4gICAgICAgIHVybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5ICYmXHJcbiAgICAgICAgdXJsVHJlZS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHMgJiZcclxuICAgICAgICB1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50cy5sZW5ndGggPiAxXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50c1swXS5wYXRoXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucm91dGVyLnVybF0pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNJbnRha2VSb2xlKHJvbGVzOiBSb2xlW10pIHtcclxuICAgIGlmIChyb2xlcyAmJiByb2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiByb2xlcy5maW5kSW5kZXgodGhpcy5pc0ludGFrZVJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSW50YWtlUm9sZShyb2xlOiBSb2xlKSB7XHJcbiAgICBzd2l0Y2ggKHJvbGUucm9sZUlkKSB7XHJcbiAgICAgIGNhc2UgJ09QQSc6XHJcbiAgICAgIGNhc2UgJ09QUyc6XHJcbiAgICAgIGNhc2UgJ1NPUFMnOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwib2ZmZW5kZXItaGVhZGVyLWNvbnRhaW5lclwiXHJcbiAgKm5nSWY9XCJzZWxlY3RlZE9mZmVuZGVyICYmIGlzQXV0aGVudGljYXRlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJvZmZlbmRlci1oZWFkZXItbmFtZS1pdGVtXCI+XHJcbiAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwic3dpdGNoLW9mZmVuZGVyXCIgYXBwZWFyYW5jZT1cImZpbGxcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+U3dpdGNoIE9mZmVuZGVyPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwic2VsZWN0ZWRPZmZlbmRlckNvbnRyb2wkXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9mZmVuZGVyIG9mIG9mZmVuZGVyUXVlcnlMaXN0XCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwib2ZmZW5kZXJcIj5cclxuICAgICAgICAgICAgICB7eyBvZmZlbmRlcj8ubmFtZX19ICh7e29mZmVuZGVyPy5vZmZlbmRlcklkfX0pXHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwib2ZmZW5kZXItaGVhZGVyLWlkLWl0ZW1cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLWxhYmVsXCI+UERJRDo8L3NwYW4+IHt7IHNlbGVjdGVkT2ZmZW5kZXIucGRJZCB9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwib2ZmZW5kZXItaGVhZGVyLWlkLWl0ZW1cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLWxhYmVsXCI+Q1NPU0EgSUQ6PC9zcGFuPlxyXG4gICAgICB7eyBzZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWQgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -416,10 +416,10 @@ class SmartOffenderHeaderComponent {
416
416
  }
417
417
  }
418
418
  /** @nocollapse */ SmartOffenderHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderHeaderComponent, deps: [{ token: XdmService }, { token: i2.MsalService }, { token: SmartOffenderHeaderService }, { token: i2$1.Router }], target: i0.ɵɵFactoryTarget.Component });
419
- /** @nocollapse */ SmartOffenderHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartOffenderHeaderComponent, selector: "app-smart-offender-header", ngImport: i0, template: "<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i8$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
419
+ /** @nocollapse */ SmartOffenderHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartOffenderHeaderComponent, selector: "app-smart-offender-header", ngImport: i0, template: "<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i8$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
420
420
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderHeaderComponent, decorators: [{
421
421
  type: Component,
422
- args: [{ selector: 'app-smart-offender-header', template: "<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"] }]
422
+ args: [{ selector: 'app-smart-offender-header', template: "<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"] }]
423
423
  }], ctorParameters: function () { return [{ type: XdmService }, { type: i2.MsalService }, { type: SmartOffenderHeaderService }, { type: i2$1.Router }]; } });
424
424
 
425
425
  class SmartNavbarService {
@@ -539,7 +539,7 @@ class SmartNavbarComponent {
539
539
  });
540
540
  setTimeout(() => {
541
541
  this.selectedTab.setValue(this.navbarConfigs.findIndex(c => c.appModuleId === this.appModuleId));
542
- }, 100);
542
+ }, 1000);
543
543
  });
544
544
  // this.isAuthenticated = this.authnService.getAccount() ? true : false;
545
545
  }
@@ -628,10 +628,10 @@ class SmartNavbarComponent {
628
628
  }
629
629
  }
630
630
  /** @nocollapse */ SmartNavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartNavbarComponent, deps: [{ token: SmartNavbarService }, { token: XdmService }, { token: i2.MsalService }], target: i0.ɵɵFactoryTarget.Component });
631
- /** @nocollapse */ SmartNavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-family:Roboto,arial,sans-serif;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6$1.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i6$1.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i6$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }], encapsulation: i0.ViewEncapsulation.None });
631
+ /** @nocollapse */ SmartNavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6$1.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i6$1.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i6$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }], encapsulation: i0.ViewEncapsulation.None });
632
632
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartNavbarComponent, decorators: [{
633
633
  type: Component,
634
- args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-family:Roboto,arial,sans-serif;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"] }]
634
+ args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"] }]
635
635
  }], ctorParameters: function () { return [{ type: SmartNavbarService }, { type: XdmService }, { type: i2.MsalService }]; }, propDecorators: { serviceApiUrl: [{
636
636
  type: Input
637
637
  }], appModuleId: [{