@byuhbll/components 4.0.0-alpha.5 → 4.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/hbll-header/hbll-header.component.mjs +14 -26
- package/esm2022/lib/hbll-header/impersonate-modal/impersonate-modal.component.mjs +5 -4
- package/esm2022/lib/hbll-header/models/library-hours.mjs +2 -0
- package/esm2022/lib/hbll-header/models/token-payload.mjs +2 -0
- package/fesm2022/byuhbll-components.mjs +17 -28
- package/fesm2022/byuhbll-components.mjs.map +1 -1
- package/lib/hbll-header/hbll-header.component.d.ts +12 -23
- package/lib/hbll-header/impersonate-modal/impersonate-modal.component.d.ts +3 -2
- package/lib/hbll-header/models/library-hours.d.ts +10 -0
- package/lib/hbll-header/models/token-payload.d.ts +3 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CommonModule, DatePipe, LowerCasePipe } from '@angular/common';
|
|
2
2
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
3
3
|
import { HttpClient } from '@angular/common/http';
|
|
4
|
-
import { Component, EventEmitter, HostListener,
|
|
4
|
+
import { Component, EventEmitter, HostListener, Output, Renderer2, ViewChild, computed, inject, input, viewChild, } from '@angular/core';
|
|
5
5
|
import { NavBarComponent } from './nav-bar/nav-bar.component';
|
|
6
6
|
import { libHbllFadeInOut, libHbllSlideInOutRightLeft } from '../animations/animations';
|
|
7
7
|
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
@@ -20,7 +20,9 @@ export class HbllHeaderComponent {
|
|
|
20
20
|
// TODO: does this increase bundle size more than it's worth? vs fetch?
|
|
21
21
|
this.http = inject(HttpClient);
|
|
22
22
|
this.bo = inject(BreakpointObserver);
|
|
23
|
-
|
|
23
|
+
// --- API ---
|
|
24
|
+
// Require an object here so that access tokens are not visible/extractable from the DOM in consuming applications. Instead they are only stored in memory.
|
|
25
|
+
this.accessTokenPayload = input({ token: '' });
|
|
24
26
|
this.oidcBaseUri = input('https://keycloak.lib.byu.edu/');
|
|
25
27
|
this.oidcDefaultIdp = input('byu-realm');
|
|
26
28
|
this.login = new EventEmitter();
|
|
@@ -32,11 +34,13 @@ export class HbllHeaderComponent {
|
|
|
32
34
|
this.hoursEl = viewChild('hours');
|
|
33
35
|
// Auth info
|
|
34
36
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
35
|
-
this.parsedToken = {};
|
|
36
|
-
this.isLoggedIn =
|
|
37
|
-
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
37
|
+
this.parsedToken = computed(() => this.accessTokenPayload().token ? jwtDecode(this.accessTokenPayload().token) : {});
|
|
38
|
+
this.isLoggedIn = computed(() => !!this.accessTokenPayload().token &&
|
|
39
|
+
this.parsedToken().exp > Math.floor(new Date().getTime() / 1000));
|
|
40
|
+
this.isImpersonating = computed(() => !!this.parsedToken()['impersonator']);
|
|
41
|
+
this.showImpersonateButton = computed(() => this.parsedToken()['resource_access']['realm-management']?.['roles']?.includes('impersonation') && !this.isImpersonating());
|
|
42
|
+
this.name = computed(() => this.parsedToken()['given_name']);
|
|
43
|
+
// Hours
|
|
40
44
|
// Hours
|
|
41
45
|
this.libraryHours = toSignal(this.http.get(LIBRARY_HOURS_API_URL));
|
|
42
46
|
this.hoursExceptions$ = of(null).pipe(map(() => {
|
|
@@ -59,20 +63,6 @@ export class HbllHeaderComponent {
|
|
|
59
63
|
this.setMobileSidebarHeight = () => (this.mobileSidebarHeight =
|
|
60
64
|
window.innerHeight - this.header.nativeElement.getBoundingClientRect().height);
|
|
61
65
|
}
|
|
62
|
-
// --- API ---
|
|
63
|
-
set accessToken(token) {
|
|
64
|
-
this._accessToken = token;
|
|
65
|
-
this.parsedToken = this.accessToken ? jwtDecode(this.accessToken) : {};
|
|
66
|
-
this.isLoggedIn =
|
|
67
|
-
!!this.accessToken && this.parsedToken.exp > Math.floor(new Date().getTime() / 1000);
|
|
68
|
-
this.isImpersonating = !!this.parsedToken['impersonator'];
|
|
69
|
-
this.showImpersonateButton =
|
|
70
|
-
this.parsedToken['resource_access']?.['realm-management']?.['roles']?.includes('impersonation') && !this.isImpersonating;
|
|
71
|
-
this.name = this.parsedToken['given_name'] ?? '';
|
|
72
|
-
}
|
|
73
|
-
get accessToken() {
|
|
74
|
-
return this._accessToken;
|
|
75
|
-
}
|
|
76
66
|
ngAfterViewInit() {
|
|
77
67
|
this.r2.listen('window', 'click', (e) => {
|
|
78
68
|
if (!this.accountInfoEl()?.nativeElement.contains(e.target))
|
|
@@ -86,7 +76,7 @@ export class HbllHeaderComponent {
|
|
|
86
76
|
this.setMobileSidebarHeight();
|
|
87
77
|
}
|
|
88
78
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
89
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: HbllHeaderComponent, isStandalone: true, selector: "lib-hbll-header", inputs: { accessToken: { classPropertyName: "accessToken", publicName: "accessToken", isSignal: false, isRequired: false, transformFunction: null }, oidcBaseUri: { classPropertyName: "oidcBaseUri", publicName: "oidcBaseUri", isSignal: true, isRequired: false, transformFunction: null }, oidcDefaultIdp: { classPropertyName: "oidcDefaultIdp", publicName: "oidcDefaultIdp", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { login: "login", logout: "logout", endImpersonation: "endImpersonation" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "accountInfoEl", first: true, predicate: ["accountInfo"], descendants: true, isSignal: true }, { propertyName: "hoursEl", first: true, predicate: ["hours"], descendants: true, isSignal: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }], ngImport: i0, template: "<header role=\"banner\" class=\"wrapper\" #header [ngClass]=\"{ desktop: !isScreenSmall() }\">\n <a href=\"https://lib.byu.edu/\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <div id=\"libraryInfo\" class=\"wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"section\">\n <h2 class=\"header\">Regular Hours</h2>\n <div class=\"detail\">\n <h3 class=\"item\">Monday - Friday</h3>\n <h3 class=\"item\">Saturday</h3>\n <h3 class=\"item\">Sunday</h3>\n </div>\n <div class=\"hours\">\n <div class=\"item\">7 a.m - midnight</div>\n <div class=\"item\">8 a.m - midnight</div>\n <div class=\"item\">Closed*</div>\n </div>\n <div class=\"hours-note\">\n * Family history ONLY 4 p.m. - 8 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"section\">\n <h2 class=\"header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"item\">{{ exception.exception_title }}</div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"section\">\n <h2 class=\"header\">Library Cafe</h2>\n <div class=\"detail\">\n <h3 class=\"item\">Bagel Bubble</h3>\n <h3 class=\"item\">Provecho</h3>\n </div>\n <div class=\"hours\">\n <div class=\"item\">7 a.m - 11 p.m.</div>\n <div class=\"item\">10:30 a.m - 2 p.m.</div>\n </div>\n </section>\n <a href=\"https:/lib.byu.edu/about/hours\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"name\" data-testid=\"name\">{{ isLoggedIn ? name : 'Login' }}</span>\n }\n @if (isLoggedIn) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a href=\"https://lib.byu.edu/account\">My Account</a>\n <a href=\"https://lib.byu.edu/account\">My Items</a>\n <a href=\"https://lib.byu.edu/account/request\">Request an item</a>\n <a href=\"https://lib.byu.edu/account/saved\">Saved</a>\n <a href=\"https://lib.byu.edu/account/course\">Courses</a>\n <a href=\"https://lib.byu.edu/account/rooms\">Rooms</a>\n <a href=\"https://lib.byu.edu/account/preferences\">Preferences</a>\n @if (showImpersonateButton) {\n <button\n href=\"https://lib.byu.edu/account/preferences\"\n (click)=\"showImpersonationModal = true; showAccountDropdown = false\"\n class=\"impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button class=\"wrapper\" data-testid=\"mobileNavBtn\" (click)=\"showNavBar = true\">\n <span class=\"material-symbols-outlined icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div id=\"navWrapper\" data-testid=\"mobileNav\" @libHbllSlideInOutRightLeft>\n <button\n id=\"closeMobileNavBtn\"\n class=\"wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"showNavBar = false\"\n >\n <span class=\"material-symbols-outlined icon\"> close </span>\n </button>\n <lib-nav-bar [height]=\"mobileSidebarHeight\" />\n </div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n href=\"https:/lib.byu.edu/about/hours\"\n class=\"wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessToken]=\"accessToken\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box}.wrapper{display:flex;align-items:center}#mobileLibraryHours{color:#141414;background-color:#e6e6e6;font-size:1em;min-height:2em}#mobileLibraryHours.wrapper{width:100%;justify-content:center;padding:.2em}.icon,.left-icon{font-size:1.2em}.left-icon{margin-right:.4em}header{background-color:#002e5d;display:flex;align-items:center;position:relative}header a h1{font-size:100%;margin:0;height:1.8em}header a h1 img{height:100%;padding:0 0 0 .6em}header #libraryInfo{margin-left:auto;color:#fff}header #libraryInfo a,header #libraryInfo button{transition:color .2s ease-in-out;color:#fffc}header #libraryInfo a:hover,header #libraryInfo button:hover{color:#fff}header #libraryInfo #accountInfo button,header #libraryInfo #mobileNav button{padding:.8em .6em}header #libraryInfo #accountBtn .name{margin-left:.4em}header #libraryInfo #mobileNav{position:relative;z-index:11}header #libraryInfo #mobileNav #navWrapper{color:#fff;position:absolute;width:100vw;top:0;right:0}header #libraryInfo #mobileNav #navWrapper #closeMobileNavBtn{background-color:#0047ba;margin-left:auto;padding-left:.9em}header #libraryInfo :last-child button{padding-right:1em!important}header #libraryInfo .icon{font-size:1.8em}header #libraryInfo #accountInfo{position:relative}header #libraryInfo #accountInfo #accountDropdown{font-size:1em;text-wrap:nowrap;position:absolute;background-color:#002e5d;top:100%;right:-32px;z-index:11;background-color:#233753}header #libraryInfo #accountInfo #accountDropdown .impersonate-btn{color:#ca7ad1cc}header #libraryInfo #accountInfo #accountDropdown .impersonate-btn:hover{color:#ca7ad1}header #libraryInfo #accountInfo #accountDropdown a,header #libraryInfo #accountInfo #accountDropdown button{display:block;width:100%;text-align:left;padding:.4em 1.2em}header #libraryInfo #accountInfo #accountDropdown a:first-child,header #libraryInfo #accountInfo #accountDropdown button:first-child{margin-bottom:.4em;border-bottom:1px solid rgba(255,255,255,.3)}header #libraryInfo #accountInfo #accountDropdown a:last-child,header #libraryInfo #accountInfo #accountDropdown button:last-child{margin-top:.4em;border-top:1px solid rgba(255,255,255,.3);padding-bottom:.6em}header #libraryInfo #accountInfo #accountDropdown:before{content:\"\";width:0;height:0;border-style:solid;border-width:0 .6em .6em .6em;border-color:transparent transparent hsl(214,41%,23%) transparent;position:absolute;bottom:100%;right:50%;transform:translate(50%);z-index:inherit}header.desktop{padding:0 2em}header.desktop #libraryInfo #mainLibraryHours{position:relative;margin-right:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown{z-index:11;background-color:#fff;border-radius:4px;border:1px solid #d2d2d2;position:absolute;color:#000;padding:2em;top:100%;max-width:400%;right:50%;transform:translate(50%);margin-top:.6em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section{display:grid;grid-template-columns:repeat(3,9em);grid-template-rows:1fr;grid-column-gap:0px;grid-row-gap:0px;margin-bottom:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section h2{margin:0}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note{grid-column:2/4;font-size:.8em;margin-top:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note ul{list-style-type:disc;list-style-position:inside;margin-left:.8em;padding:0}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note ul li span{left:-8px;position:relative}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .header{font-weight:600;font-size:1.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours{margin-top:.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail .item+.item,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours .item+.item{margin-top:.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail h3,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours h3{margin:0;font-size:inherit}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail{font-weight:600;white-space:nowrap}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours{white-space:nowrap}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a{color:#4070b0;display:flex;align-items:center;float:right}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a:hover{color:#6892ca}header.desktop #libraryInfo #accountInfo #accountDropdown{right:auto;left:50%;transform:translate(-50%)}button{background-color:transparent;border:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;padding:0}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: LibraryHoursPipe, name: "libraryHours" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: NavBarComponent, selector: "lib-nav-bar", inputs: ["height"] }, { kind: "component", type: ImpersonateModalComponent, selector: "lib-impersonate-modal", inputs: ["showModal", "oidcBaseUri", "oidcDefaultIdp", "accessToken"], outputs: ["dismiss", "init"] }], animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut] }); }
|
|
79
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: HbllHeaderComponent, isStandalone: true, selector: "lib-hbll-header", inputs: { accessTokenPayload: { classPropertyName: "accessTokenPayload", publicName: "accessTokenPayload", isSignal: true, isRequired: false, transformFunction: null }, oidcBaseUri: { classPropertyName: "oidcBaseUri", publicName: "oidcBaseUri", isSignal: true, isRequired: false, transformFunction: null }, oidcDefaultIdp: { classPropertyName: "oidcDefaultIdp", publicName: "oidcDefaultIdp", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { login: "login", logout: "logout", endImpersonation: "endImpersonation" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "accountInfoEl", first: true, predicate: ["accountInfo"], descendants: true, isSignal: true }, { propertyName: "hoursEl", first: true, predicate: ["hours"], descendants: true, isSignal: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }], ngImport: i0, template: "<header role=\"banner\" class=\"wrapper\" #header [ngClass]=\"{ desktop: !isScreenSmall() }\">\n <a href=\"https://lib.byu.edu/\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <div id=\"libraryInfo\" class=\"wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"section\">\n <h2 class=\"header\">Regular Hours</h2>\n <div class=\"detail\">\n <h3 class=\"item\">Monday - Friday</h3>\n <h3 class=\"item\">Saturday</h3>\n <h3 class=\"item\">Sunday</h3>\n </div>\n <div class=\"hours\">\n <div class=\"item\">7 a.m - midnight</div>\n <div class=\"item\">8 a.m - midnight</div>\n <div class=\"item\">Closed*</div>\n </div>\n <div class=\"hours-note\">\n * Family history ONLY 4 p.m. - 8 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"section\">\n <h2 class=\"header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"item\">{{ exception.exception_title }}</div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"section\">\n <h2 class=\"header\">Library Cafe</h2>\n <div class=\"detail\">\n <h3 class=\"item\">Bagel Bubble</h3>\n <h3 class=\"item\">Provecho</h3>\n </div>\n <div class=\"hours\">\n <div class=\"item\">7 a.m - 11 p.m.</div>\n <div class=\"item\">10:30 a.m - 2 p.m.</div>\n </div>\n </section>\n <a href=\"https:/lib.byu.edu/about/hours\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn() ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"name\" data-testid=\"name\">{{\n isLoggedIn() ? name() : 'Login'\n }}</span>\n }\n @if (isLoggedIn()) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn() && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a href=\"https://lib.byu.edu/account\">My Account</a>\n <a href=\"https://lib.byu.edu/account\">My Items</a>\n <a href=\"https://lib.byu.edu/account/request\">Request an item</a>\n <a href=\"https://lib.byu.edu/account/saved\">Saved</a>\n <a href=\"https://lib.byu.edu/account/course\">Courses</a>\n <a href=\"https://lib.byu.edu/account/rooms\">Rooms</a>\n <a href=\"https://lib.byu.edu/account/preferences\">Preferences</a>\n @if (showImpersonateButton()) {\n <button\n href=\"https://lib.byu.edu/account/preferences\"\n (click)=\"showImpersonationModal = true; showAccountDropdown = false\"\n class=\"impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button class=\"wrapper\" data-testid=\"mobileNavBtn\" (click)=\"showNavBar = true\">\n <span class=\"material-symbols-outlined icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div id=\"navWrapper\" data-testid=\"mobileNav\" @libHbllSlideInOutRightLeft>\n <button\n id=\"closeMobileNavBtn\"\n class=\"wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"showNavBar = false\"\n >\n <span class=\"material-symbols-outlined icon\"> close </span>\n </button>\n <lib-nav-bar [height]=\"mobileSidebarHeight\" />\n </div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n href=\"https:/lib.byu.edu/about/hours\"\n class=\"wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessTokenPayload]=\"accessTokenPayload()\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box}.wrapper{display:flex;align-items:center}#mobileLibraryHours{color:#141414;background-color:#e6e6e6;font-size:1em;min-height:2em}#mobileLibraryHours.wrapper{width:100%;justify-content:center;padding:.2em}.icon,.left-icon{font-size:1.2em}.left-icon{margin-right:.4em}header{background-color:#002e5d;display:flex;align-items:center;position:relative}header a h1{font-size:100%;margin:0;height:1.8em}header a h1 img{height:100%;padding:0 0 0 .6em}header #libraryInfo{margin-left:auto;color:#fff}header #libraryInfo a,header #libraryInfo button{transition:color .2s ease-in-out;color:#fffc}header #libraryInfo a:hover,header #libraryInfo button:hover{color:#fff}header #libraryInfo #accountInfo button,header #libraryInfo #mobileNav button{padding:.8em .6em}header #libraryInfo #accountBtn .name{margin-left:.4em}header #libraryInfo #mobileNav{position:relative;z-index:11}header #libraryInfo #mobileNav #navWrapper{color:#fff;position:absolute;width:100vw;top:0;right:0}header #libraryInfo #mobileNav #navWrapper #closeMobileNavBtn{background-color:#0047ba;margin-left:auto;padding-left:.9em}header #libraryInfo :last-child button{padding-right:1em!important}header #libraryInfo .icon{font-size:1.8em}header #libraryInfo #accountInfo{position:relative}header #libraryInfo #accountInfo #accountDropdown{font-size:1em;text-wrap:nowrap;position:absolute;background-color:#002e5d;top:100%;right:-32px;z-index:11;background-color:#233753}header #libraryInfo #accountInfo #accountDropdown .impersonate-btn{color:#ca7ad1cc}header #libraryInfo #accountInfo #accountDropdown .impersonate-btn:hover{color:#ca7ad1}header #libraryInfo #accountInfo #accountDropdown a,header #libraryInfo #accountInfo #accountDropdown button{display:block;width:100%;text-align:left;padding:.4em 1.2em}header #libraryInfo #accountInfo #accountDropdown a:first-child,header #libraryInfo #accountInfo #accountDropdown button:first-child{margin-bottom:.4em;border-bottom:1px solid rgba(255,255,255,.3)}header #libraryInfo #accountInfo #accountDropdown a:last-child,header #libraryInfo #accountInfo #accountDropdown button:last-child{margin-top:.4em;border-top:1px solid rgba(255,255,255,.3);padding-bottom:.6em}header #libraryInfo #accountInfo #accountDropdown:before{content:\"\";width:0;height:0;border-style:solid;border-width:0 .6em .6em .6em;border-color:transparent transparent hsl(214,41%,23%) transparent;position:absolute;bottom:100%;right:50%;transform:translate(50%);z-index:inherit}header.desktop{padding:0 2em}header.desktop #libraryInfo #mainLibraryHours{position:relative;margin-right:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown{z-index:11;background-color:#fff;border-radius:4px;border:1px solid #d2d2d2;position:absolute;color:#000;padding:2em;top:100%;max-width:400%;right:50%;transform:translate(50%);margin-top:.6em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section{display:grid;grid-template-columns:repeat(3,9em);grid-template-rows:1fr;grid-column-gap:0px;grid-row-gap:0px;margin-bottom:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section h2{margin:0}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note{grid-column:2/4;font-size:.8em;margin-top:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note ul{list-style-type:disc;list-style-position:inside;margin-left:.8em;padding:0}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note ul li span{left:-8px;position:relative}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .header{font-weight:600;font-size:1.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours{margin-top:.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail .item+.item,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours .item+.item{margin-top:.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail h3,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours h3{margin:0;font-size:inherit}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail{font-weight:600;white-space:nowrap}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours{white-space:nowrap}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a{color:#4070b0;display:flex;align-items:center;float:right}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a:hover{color:#6892ca}header.desktop #libraryInfo #accountInfo #accountDropdown{right:auto;left:50%;transform:translate(-50%)}button{background-color:transparent;border:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;padding:0}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: LibraryHoursPipe, name: "libraryHours" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: NavBarComponent, selector: "lib-nav-bar", inputs: ["height"] }, { kind: "component", type: ImpersonateModalComponent, selector: "lib-impersonate-modal", inputs: ["showModal", "oidcBaseUri", "oidcDefaultIdp", "accessTokenPayload"], outputs: ["dismiss", "init"] }], animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut] }); }
|
|
90
80
|
}
|
|
91
81
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HbllHeaderComponent, decorators: [{
|
|
92
82
|
type: Component,
|
|
@@ -98,12 +88,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
98
88
|
NavBarComponent,
|
|
99
89
|
ExpandCollapseComponent,
|
|
100
90
|
ImpersonateModalComponent,
|
|
101
|
-
], animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut], template: "<header role=\"banner\" class=\"wrapper\" #header [ngClass]=\"{ desktop: !isScreenSmall() }\">\n <a href=\"https://lib.byu.edu/\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <div id=\"libraryInfo\" class=\"wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"section\">\n <h2 class=\"header\">Regular Hours</h2>\n <div class=\"detail\">\n <h3 class=\"item\">Monday - Friday</h3>\n <h3 class=\"item\">Saturday</h3>\n <h3 class=\"item\">Sunday</h3>\n </div>\n <div class=\"hours\">\n <div class=\"item\">7 a.m - midnight</div>\n <div class=\"item\">8 a.m - midnight</div>\n <div class=\"item\">Closed*</div>\n </div>\n <div class=\"hours-note\">\n * Family history ONLY 4 p.m. - 8 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"section\">\n <h2 class=\"header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"item\">{{ exception.exception_title }}</div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"section\">\n <h2 class=\"header\">Library Cafe</h2>\n <div class=\"detail\">\n <h3 class=\"item\">Bagel Bubble</h3>\n <h3 class=\"item\">Provecho</h3>\n </div>\n <div class=\"hours\">\n <div class=\"item\">7 a.m - 11 p.m.</div>\n <div class=\"item\">10:30 a.m - 2 p.m.</div>\n </div>\n </section>\n <a href=\"https:/lib.byu.edu/about/hours\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"name\" data-testid=\"name\">{{ isLoggedIn ? name : 'Login' }}</span>\n }\n @if (isLoggedIn) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a href=\"https://lib.byu.edu/account\">My Account</a>\n <a href=\"https://lib.byu.edu/account\">My Items</a>\n <a href=\"https://lib.byu.edu/account/request\">Request an item</a>\n <a href=\"https://lib.byu.edu/account/saved\">Saved</a>\n <a href=\"https://lib.byu.edu/account/course\">Courses</a>\n <a href=\"https://lib.byu.edu/account/rooms\">Rooms</a>\n <a href=\"https://lib.byu.edu/account/preferences\">Preferences</a>\n @if (showImpersonateButton) {\n <button\n href=\"https://lib.byu.edu/account/preferences\"\n (click)=\"showImpersonationModal = true; showAccountDropdown = false\"\n class=\"impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button class=\"wrapper\" data-testid=\"mobileNavBtn\" (click)=\"showNavBar = true\">\n <span class=\"material-symbols-outlined icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div id=\"navWrapper\" data-testid=\"mobileNav\" @libHbllSlideInOutRightLeft>\n <button\n id=\"closeMobileNavBtn\"\n class=\"wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"showNavBar = false\"\n >\n <span class=\"material-symbols-outlined icon\"> close </span>\n </button>\n <lib-nav-bar [height]=\"mobileSidebarHeight\" />\n </div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n href=\"https:/lib.byu.edu/about/hours\"\n class=\"wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessToken]=\"accessToken\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box}.wrapper{display:flex;align-items:center}#mobileLibraryHours{color:#141414;background-color:#e6e6e6;font-size:1em;min-height:2em}#mobileLibraryHours.wrapper{width:100%;justify-content:center;padding:.2em}.icon,.left-icon{font-size:1.2em}.left-icon{margin-right:.4em}header{background-color:#002e5d;display:flex;align-items:center;position:relative}header a h1{font-size:100%;margin:0;height:1.8em}header a h1 img{height:100%;padding:0 0 0 .6em}header #libraryInfo{margin-left:auto;color:#fff}header #libraryInfo a,header #libraryInfo button{transition:color .2s ease-in-out;color:#fffc}header #libraryInfo a:hover,header #libraryInfo button:hover{color:#fff}header #libraryInfo #accountInfo button,header #libraryInfo #mobileNav button{padding:.8em .6em}header #libraryInfo #accountBtn .name{margin-left:.4em}header #libraryInfo #mobileNav{position:relative;z-index:11}header #libraryInfo #mobileNav #navWrapper{color:#fff;position:absolute;width:100vw;top:0;right:0}header #libraryInfo #mobileNav #navWrapper #closeMobileNavBtn{background-color:#0047ba;margin-left:auto;padding-left:.9em}header #libraryInfo :last-child button{padding-right:1em!important}header #libraryInfo .icon{font-size:1.8em}header #libraryInfo #accountInfo{position:relative}header #libraryInfo #accountInfo #accountDropdown{font-size:1em;text-wrap:nowrap;position:absolute;background-color:#002e5d;top:100%;right:-32px;z-index:11;background-color:#233753}header #libraryInfo #accountInfo #accountDropdown .impersonate-btn{color:#ca7ad1cc}header #libraryInfo #accountInfo #accountDropdown .impersonate-btn:hover{color:#ca7ad1}header #libraryInfo #accountInfo #accountDropdown a,header #libraryInfo #accountInfo #accountDropdown button{display:block;width:100%;text-align:left;padding:.4em 1.2em}header #libraryInfo #accountInfo #accountDropdown a:first-child,header #libraryInfo #accountInfo #accountDropdown button:first-child{margin-bottom:.4em;border-bottom:1px solid rgba(255,255,255,.3)}header #libraryInfo #accountInfo #accountDropdown a:last-child,header #libraryInfo #accountInfo #accountDropdown button:last-child{margin-top:.4em;border-top:1px solid rgba(255,255,255,.3);padding-bottom:.6em}header #libraryInfo #accountInfo #accountDropdown:before{content:\"\";width:0;height:0;border-style:solid;border-width:0 .6em .6em .6em;border-color:transparent transparent hsl(214,41%,23%) transparent;position:absolute;bottom:100%;right:50%;transform:translate(50%);z-index:inherit}header.desktop{padding:0 2em}header.desktop #libraryInfo #mainLibraryHours{position:relative;margin-right:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown{z-index:11;background-color:#fff;border-radius:4px;border:1px solid #d2d2d2;position:absolute;color:#000;padding:2em;top:100%;max-width:400%;right:50%;transform:translate(50%);margin-top:.6em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section{display:grid;grid-template-columns:repeat(3,9em);grid-template-rows:1fr;grid-column-gap:0px;grid-row-gap:0px;margin-bottom:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section h2{margin:0}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note{grid-column:2/4;font-size:.8em;margin-top:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note ul{list-style-type:disc;list-style-position:inside;margin-left:.8em;padding:0}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note ul li span{left:-8px;position:relative}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .header{font-weight:600;font-size:1.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours{margin-top:.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail .item+.item,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours .item+.item{margin-top:.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail h3,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours h3{margin:0;font-size:inherit}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail{font-weight:600;white-space:nowrap}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours{white-space:nowrap}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a{color:#4070b0;display:flex;align-items:center;float:right}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a:hover{color:#6892ca}header.desktop #libraryInfo #accountInfo #accountDropdown{right:auto;left:50%;transform:translate(-50%)}button{background-color:transparent;border:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;padding:0}\n"] }]
|
|
91
|
+
], animations: [libHbllSlideInOutRightLeft, libHbllFadeInOut], template: "<header role=\"banner\" class=\"wrapper\" #header [ngClass]=\"{ desktop: !isScreenSmall() }\">\n <a href=\"https://lib.byu.edu/\">\n <h1>\n <img\n src=\"https://media.lib.byu.edu/web-assets/images/2.0.0/byu-hbll-logo-full.svg\"\n alt=\"BYU Library Logo\"\n />\n </h1>\n </a>\n <div id=\"libraryInfo\" class=\"wrapper\">\n @if (!isScreenSmall()) {\n <div #hours id=\"mainLibraryHours\" data-testid=\"desktopHours\">\n <button\n (click)=\"showLibraryHours = !showLibraryHours\"\n class=\"wrapper\"\n data-testid=\"hoursBtn\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </button>\n @if (!isScreenSmall() && showLibraryHours) {\n <div\n @libHbllFadeInOut\n id=\"libraryHoursDropdown\"\n data-testid=\"libraryHoursDropdown\"\n >\n <section class=\"section\">\n <h2 class=\"header\">Regular Hours</h2>\n <div class=\"detail\">\n <h3 class=\"item\">Monday - Friday</h3>\n <h3 class=\"item\">Saturday</h3>\n <h3 class=\"item\">Sunday</h3>\n </div>\n <div class=\"hours\">\n <div class=\"item\">7 a.m - midnight</div>\n <div class=\"item\">8 a.m - midnight</div>\n <div class=\"item\">Closed*</div>\n </div>\n <div class=\"hours-note\">\n * Family history ONLY 4 p.m. - 8 p.m\n <ul>\n <li><span>No checkouts after 11:45 p.m.</span></li>\n <li>\n <span>All services closed 10:45 to noon on Tuesdays</span>\n </li>\n </ul>\n </div>\n </section>\n <section class=\"section\">\n <h2 class=\"header\">Upcoming Exceptions</h2>\n @if (hoursExceptions$ | async; as exceptions) {\n <div class=\"detail\" data-testid=\"exceptionsDetail\">\n @for (exception of exceptions; track exception.date) {\n <h3 class=\"item\">\n {{ exception.date | date: 'MMM. d, YYYY' }}\n </h3>\n } @empty {\n No upcoming exceptions\n }\n </div>\n <div class=\"hours\" data-testid=\"exceptionsHours\">\n @for (exception of exceptions; track exception.date) {\n <div class=\"item\">{{ exception.exception_title }}</div>\n }\n </div>\n } @else {\n <div class=\"lib-spinner\" data-testid=\"exceptionsSpinner\"></div>\n }\n </section>\n <section class=\"section\">\n <h2 class=\"header\">Library Cafe</h2>\n <div class=\"detail\">\n <h3 class=\"item\">Bagel Bubble</h3>\n <h3 class=\"item\">Provecho</h3>\n </div>\n <div class=\"hours\">\n <div class=\"item\">7 a.m - 11 p.m.</div>\n <div class=\"item\">10:30 a.m - 2 p.m.</div>\n </div>\n </section>\n <a href=\"https:/lib.byu.edu/about/hours\"\n >See all hours\n <span class=\"material-symbols-outlined\"> chevron_right </span></a\n >\n </div>\n }\n </div>\n }\n <div id=\"accountInfo\" #accountInfo>\n <button\n (click)=\"isLoggedIn() ? (showAccountDropdown = !showAccountDropdown) : login.emit()\"\n class=\"wrapper\"\n id=\"accountBtn\"\n data-testid=\"accountBtn\"\n >\n <span class=\"material-symbols-outlined icon\"> person </span>\n @if (!isScreenSmall()) {\n <span class=\"name\" data-testid=\"name\">{{\n isLoggedIn() ? name() : 'Login'\n }}</span>\n }\n @if (isLoggedIn()) {\n <span class=\"material-symbols-outlined\" data-testid=\"loginDropdown\">\n arrow_drop_down\n </span>\n }\n </button>\n @if (isLoggedIn() && showAccountDropdown) {\n <div @libHbllFadeInOut id=\"accountDropdown\" data-testid=\"accountDropdown\">\n <a href=\"https://lib.byu.edu/account\">My Account</a>\n <a href=\"https://lib.byu.edu/account\">My Items</a>\n <a href=\"https://lib.byu.edu/account/request\">Request an item</a>\n <a href=\"https://lib.byu.edu/account/saved\">Saved</a>\n <a href=\"https://lib.byu.edu/account/course\">Courses</a>\n <a href=\"https://lib.byu.edu/account/rooms\">Rooms</a>\n <a href=\"https://lib.byu.edu/account/preferences\">Preferences</a>\n @if (showImpersonateButton()) {\n <button\n href=\"https://lib.byu.edu/account/preferences\"\n (click)=\"showImpersonationModal = true; showAccountDropdown = false\"\n class=\"impersonate-btn\"\n >\n Impersonate\n </button>\n }\n <button (click)=\"logout.emit()\" data-testid=\"logout\">Logout</button>\n </div>\n }\n </div>\n @if (isScreenSmall()) {\n <div id=\"mobileNav\">\n <button class=\"wrapper\" data-testid=\"mobileNavBtn\" (click)=\"showNavBar = true\">\n <span class=\"material-symbols-outlined icon\"> menu </span>\n </button>\n @if (showNavBar) {\n <div id=\"navWrapper\" data-testid=\"mobileNav\" @libHbllSlideInOutRightLeft>\n <button\n id=\"closeMobileNavBtn\"\n class=\"wrapper\"\n data-testid=\"closeMobileNavBtn\"\n (click)=\"showNavBar = false\"\n >\n <span class=\"material-symbols-outlined icon\"> close </span>\n </button>\n <lib-nav-bar [height]=\"mobileSidebarHeight\" />\n </div>\n }\n </div>\n }\n </div>\n</header>\n\n@if (!isScreenSmall()) {\n <div id=\"mainNav\">\n <lib-nav-bar />\n </div>\n}\n@if (isScreenSmall()) {\n <a\n id=\"mobileLibraryHours\"\n href=\"https:/lib.byu.edu/about/hours\"\n class=\"wrapper\"\n data-testid=\"mobileHours\"\n >\n <ng-container *ngTemplateOutlet=\"hoursTextBlock\"></ng-container>\n </a>\n}\n\n<ng-template #hoursTextBlock>\n @if (libraryHours()) {\n <span class=\"material-symbols-outlined left-icon\"> schedule </span>\n {{\n libraryHours()?.is_closed\n ? 'CLOSED'\n : \"Today's hours: \" +\n (libraryHours()!.date | libraryHours: libraryHours()!.open_time) +\n ' - ' +\n (libraryHours()!.date | libraryHours: libraryHours()!.close_time)\n }}\n }\n</ng-template>\n\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessTokenPayload]=\"accessTokenPayload()\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}*{box-sizing:border-box}.wrapper{display:flex;align-items:center}#mobileLibraryHours{color:#141414;background-color:#e6e6e6;font-size:1em;min-height:2em}#mobileLibraryHours.wrapper{width:100%;justify-content:center;padding:.2em}.icon,.left-icon{font-size:1.2em}.left-icon{margin-right:.4em}header{background-color:#002e5d;display:flex;align-items:center;position:relative}header a h1{font-size:100%;margin:0;height:1.8em}header a h1 img{height:100%;padding:0 0 0 .6em}header #libraryInfo{margin-left:auto;color:#fff}header #libraryInfo a,header #libraryInfo button{transition:color .2s ease-in-out;color:#fffc}header #libraryInfo a:hover,header #libraryInfo button:hover{color:#fff}header #libraryInfo #accountInfo button,header #libraryInfo #mobileNav button{padding:.8em .6em}header #libraryInfo #accountBtn .name{margin-left:.4em}header #libraryInfo #mobileNav{position:relative;z-index:11}header #libraryInfo #mobileNav #navWrapper{color:#fff;position:absolute;width:100vw;top:0;right:0}header #libraryInfo #mobileNav #navWrapper #closeMobileNavBtn{background-color:#0047ba;margin-left:auto;padding-left:.9em}header #libraryInfo :last-child button{padding-right:1em!important}header #libraryInfo .icon{font-size:1.8em}header #libraryInfo #accountInfo{position:relative}header #libraryInfo #accountInfo #accountDropdown{font-size:1em;text-wrap:nowrap;position:absolute;background-color:#002e5d;top:100%;right:-32px;z-index:11;background-color:#233753}header #libraryInfo #accountInfo #accountDropdown .impersonate-btn{color:#ca7ad1cc}header #libraryInfo #accountInfo #accountDropdown .impersonate-btn:hover{color:#ca7ad1}header #libraryInfo #accountInfo #accountDropdown a,header #libraryInfo #accountInfo #accountDropdown button{display:block;width:100%;text-align:left;padding:.4em 1.2em}header #libraryInfo #accountInfo #accountDropdown a:first-child,header #libraryInfo #accountInfo #accountDropdown button:first-child{margin-bottom:.4em;border-bottom:1px solid rgba(255,255,255,.3)}header #libraryInfo #accountInfo #accountDropdown a:last-child,header #libraryInfo #accountInfo #accountDropdown button:last-child{margin-top:.4em;border-top:1px solid rgba(255,255,255,.3);padding-bottom:.6em}header #libraryInfo #accountInfo #accountDropdown:before{content:\"\";width:0;height:0;border-style:solid;border-width:0 .6em .6em .6em;border-color:transparent transparent hsl(214,41%,23%) transparent;position:absolute;bottom:100%;right:50%;transform:translate(50%);z-index:inherit}header.desktop{padding:0 2em}header.desktop #libraryInfo #mainLibraryHours{position:relative;margin-right:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown{z-index:11;background-color:#fff;border-radius:4px;border:1px solid #d2d2d2;position:absolute;color:#000;padding:2em;top:100%;max-width:400%;right:50%;transform:translate(50%);margin-top:.6em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section{display:grid;grid-template-columns:repeat(3,9em);grid-template-rows:1fr;grid-column-gap:0px;grid-row-gap:0px;margin-bottom:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section h2{margin:0}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note{grid-column:2/4;font-size:.8em;margin-top:1em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note ul{list-style-type:disc;list-style-position:inside;margin-left:.8em;padding:0}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours-note ul li span{left:-8px;position:relative}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .header{font-weight:600;font-size:1.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours{margin-top:.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail .item+.item,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours .item+.item{margin-top:.2em}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail h3,header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours h3{margin:0;font-size:inherit}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .detail{font-weight:600;white-space:nowrap}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown .section .hours{white-space:nowrap}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a{color:#4070b0;display:flex;align-items:center;float:right}header.desktop #libraryInfo #mainLibraryHours #libraryHoursDropdown a:hover{color:#6892ca}header.desktop #libraryInfo #accountInfo #accountDropdown{right:auto;left:50%;transform:translate(-50%)}button{background-color:transparent;border:none;cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;padding:0}\n"] }]
|
|
102
92
|
}], propDecorators: { header: [{
|
|
103
93
|
type: ViewChild,
|
|
104
94
|
args: ['header']
|
|
105
|
-
}], accessToken: [{
|
|
106
|
-
type: Input
|
|
107
95
|
}], login: [{
|
|
108
96
|
type: Output
|
|
109
97
|
}], logout: [{
|
|
@@ -114,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
114
102
|
type: HostListener,
|
|
115
103
|
args: ['window:resize', ['$event']]
|
|
116
104
|
}] } });
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGJsbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2hibGwtaGVhZGVyL2hibGwtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9oYmxsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9B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QXVCO3dCQUN2Qix5QkFBeUI7cUJBQzVCLGNBR1csQ0FBQywwQkFBMEIsRUFBRSxnQkFBZ0IsQ0FBQzs4QkFTckMsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUdOLFdBQVc7c0JBQXZCLEtBQUs7Z0JBaUJJLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQW1EQyxRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEYXRlUGlwZSwgTG93ZXJDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdkJhckNvbXBvbmVudCB9IGZyb20gJy4vbmF2LWJhci9uYXYtYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBsaWJIYmxsRmFkZUluT3V0LCBsaWJIYmxsU2xpZGVJbk91dFJpZ2h0TGVmdCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IGlzU2NyZWVuU21hbGxTaWduYWwgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBMaWJyYXJ5SG91cnNQaXBlIH0gZnJvbSAnLi9waXBlcy9saWJyYXJ5LWhvdXJzLnBpcGUnO1xuaW1wb3J0IHsgbWFwLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXhwYW5kQ29sbGFwc2VDb21wb25lbnQgfSBmcm9tICcuLi9leHBhbmQtY29sbGFwc2UvZXhwYW5kLWNvbGxhcHNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbXBlcnNvbmF0ZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9pbXBlcnNvbmF0ZS1tb2RhbC9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgand0RGVjb2RlLCBKd3RQYXlsb2FkIH0gZnJvbSAnand0LWRlY29kZSc7XG5cbmV4cG9ydCBjb25zdCBMSUJSQVJZX0hPVVJTX0FQSV9VUkwgPSAnaHR0cHM6Ly9hcHBzLmxpYi5ieXUuZWR1L2xpYnJhcnlob3Vycy9hcGkvaG91cnMnO1xuXG5pbnRlcmZhY2UgTGlicmFyeUhvdXJzIHtcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgaXNfY2xvc2VkOiBib29sZWFuO1xuICAgIG9wZW5fdGltZTogc3RyaW5nO1xuICAgIGNsb3NlX3RpbWU6IHN0cmluZztcbiAgICBoYXNfZXhjZXB0aW9uOiBib29sZWFuO1xuICAgIGV4Y2VwdGlvbl90aXRsZTogc3RyaW5nO1xuICAgIGV4Y2VwdGlvbl9tZXNzYWdlOiBzdHJpbmc7XG4gICAgaXNfY3VycmVudGx5X29wZW46IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWhibGwtaGVhZGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRGF0ZVBpcGUsXG4gICAgICAgIExvd2VyQ2FzZVBpcGUsXG4gICAgICAgIExpYnJhcnlIb3Vyc1BpcGUsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTmF2QmFyQ29tcG9uZW50LFxuICAgICAgICBFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCxcbiAgICAgICAgSW1wZXJzb25hdGVNb2RhbENvbXBvbmVudCxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oYmxsLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2hibGwtaGVhZGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgICBhbmltYXRpb25zOiBbbGliSGJsbFNsaWRlSW5PdXRSaWdodExlZnQsIGxpYkhibGxGYWRlSW5PdXRdLFxufSlcbmV4cG9ydCBjbGFzcyBIYmxsSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByMiA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIC8vIFRPRE86IGRvZXMgdGhpcyBpbmNyZWFzZSBidW5kbGUgc2l6ZSBtb3JlIHRoYW4gaXQncyB3b3J0aD8gdnMgZmV0Y2g/XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYm8gPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcbiAgICBwcml2YXRlIF9hY2Nlc3NUb2tlbiA9ICcnO1xuXG4gICAgQFZpZXdDaGlsZCgnaGVhZGVyJykgaGVhZGVyITogRWxlbWVudFJlZjtcblxuICAgIC8vIC0tLSBBUEkgLS0tXG4gICAgQElucHV0KCkgc2V0IGFjY2Vzc1Rva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5wYXJzZWRUb2tlbiA9IHRoaXMuYWNjZXNzVG9rZW4gPyBqd3REZWNvZGUodGhpcy5hY2Nlc3NUb2tlbikgOiB7fTtcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID1cbiAgICAgICAgICAgICEhdGhpcy5hY2Nlc3NUb2tlbiAmJiB0aGlzLnBhcnNlZFRva2VuLmV4cCEgPiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgICAgIHRoaXMuaXNJbXBlcnNvbmF0aW5nID0gISF0aGlzLnBhcnNlZFRva2VuWydpbXBlcnNvbmF0b3InXTtcbiAgICAgICAgdGhpcy5zaG93SW1wZXJzb25hdGVCdXR0b24gPVxuICAgICAgICAgICAgdGhpcy5wYXJzZWRUb2tlblsncmVzb3VyY2VfYWNjZXNzJ10/LlsncmVhbG0tbWFuYWdlbWVudCddPy5bJ3JvbGVzJ10/LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICdpbXBlcnNvbmF0aW9uJyxcbiAgICAgICAgICAgICkgJiYgIXRoaXMuaXNJbXBlcnNvbmF0aW5nO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLnBhcnNlZFRva2VuWydnaXZlbl9uYW1lJ10gPz8gJyc7XG4gICAgfVxuICAgIGdldCBhY2Nlc3NUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjY2Vzc1Rva2VuO1xuICAgIH1cbiAgICBvaWRjQmFzZVVyaSA9IGlucHV0KCdodHRwczovL2tleWNsb2FrLmxpYi5ieXUuZWR1LycpO1xuICAgIG9pZGNEZWZhdWx0SWRwID0gaW5wdXQoJ2J5dS1yZWFsbScpO1xuICAgIEBPdXRwdXQoKSBsb2dpbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgbG9nb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBlbmRJbXBlcnNvbmF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8vIC0tLS0tLS0tLS0tXG4gICAgcHJpdmF0ZSBmb3JtYXREYXRlRm9ySG91cnMgPSAoZGF0ZTogRGF0ZSkgPT5cbiAgICAgICAgYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke1N0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpfS0ke1N0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgIHByaXZhdGUgYWNjb3VudEluZm9FbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignYWNjb3VudEluZm8nKTtcbiAgICBwcml2YXRlIGhvdXJzRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2hvdXJzJyk7XG5cbiAgICAvLyBBdXRoIGluZm9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByb3RlY3RlZCBwYXJzZWRUb2tlbjogSnd0UGF5bG9hZCAmIFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBwcm90ZWN0ZWQgaXNMb2dnZWRJbiA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBpc0ltcGVyc29uYXRpbmcgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgc2hvd0ltcGVyc29uYXRlQnV0dG9uID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIG5hbWUgPSAnJztcblxuICAgIC8vIEhvdXJzXG4gICAgcHJvdGVjdGVkIGxpYnJhcnlIb3VycyA9IHRvU2lnbmFsKHRoaXMuaHR0cC5nZXQ8TGlicmFyeUhvdXJzPihMSUJSQVJZX0hPVVJTX0FQSV9VUkwpKTtcbiAgICBwcm90ZWN0ZWQgaG91cnNFeGNlcHRpb25zJCA9IG9mKG51bGwpLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBHZXQgZXhjZXB0aW9ucyBmcm9tIHRvZGF5IHRvIHR3byBtb250aHMgb3V0XG4gICAgICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuZm9ybWF0RGF0ZUZvckhvdXJzKHRvZGF5KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgbmV3RGF0ZS5zZXRNb250aCh0b2RheS5nZXRNb250aCgpICsgMik7XG4gICAgICAgICAgICBjb25zdCBzdG9wID0gdGhpcy5mb3JtYXREYXRlRm9ySG91cnMobmV3RGF0ZSk7XG4gICAgICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdG9wXTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoW3N0YXJ0LCBzdG9wXTogc3RyaW5nW10pID0+XG4gICAgICAgICAgICB0aGlzLmh0dHBcbiAgICAgICAgICAgICAgICAuZ2V0PExpYnJhcnlIb3Vyc1tdPihgJHtMSUJSQVJZX0hPVVJTX0FQSV9VUkx9P3N0YXJ0PSR7c3RhcnR9JnN0b3A9JHtzdG9wfWApXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5maWx0ZXIoKGRheSkgPT4gZGF5Lmhhc19leGNlcHRpb24pLnNsaWNlKDAsIDUpKSksXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICk7XG4gICAgcHJvdGVjdGVkIHNob3dBY2NvdW50RHJvcGRvd24gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgc2hvd0xpYnJhcnlIb3VycyA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBtb2JpbGVTaWRlYmFySGVpZ2h0ID0gMDtcbiAgICBwcm90ZWN0ZWQgc2hvd05hdkJhciA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBzaG93SW1wZXJzb25hdGlvbk1vZGFsID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGlzU2NyZWVuU21hbGwgPSBpc1NjcmVlblNtYWxsU2lnbmFsKHRoaXMuYm8pO1xuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnIyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWNjb3VudEluZm9FbCgpPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KSlcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dBY2NvdW50RHJvcGRvd24gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5ob3Vyc0VsKCk/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpKSB0aGlzLnNob3dMaWJyYXJ5SG91cnMgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0TW9iaWxlU2lkZWJhckhlaWdodCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgb25SZXNpemUoKSB7XG4gICAgICAgIHRoaXMuc2V0TW9iaWxlU2lkZWJhckhlaWdodCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TW9iaWxlU2lkZWJhckhlaWdodCA9ICgpID0+XG4gICAgICAgICh0aGlzLm1vYmlsZVNpZGViYXJIZWlnaHQgPVxuICAgICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5oZWFkZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xufVxuIiwiPGhlYWRlciByb2xlPVwiYmFubmVyXCIgY2xhc3M9XCJ3cmFwcGVyXCIgI2hlYWRlciBbbmdDbGFzc109XCJ7IGRlc2t0b3A6ICFpc1NjcmVlblNtYWxsKCkgfVwiPlxuICAgIDxhIGhyZWY9XCJodHRwczovL2xpYi5ieXUuZWR1L1wiPlxuICAgICAgICA8aDE+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9tZWRpYS5saWIuYnl1LmVkdS93ZWItYXNzZXRzL2ltYWdlcy8yLjAuMC9ieXUtaGJsbC1sb2dvLWZ1bGwuc3ZnXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJCWVUgTGlicmFyeSBMb2dvXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvaDE+XG4gICAgPC9hPlxuICAgIDxkaXYgaWQ9XCJsaWJyYXJ5SW5mb1wiIGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICBAaWYgKCFpc1NjcmVlblNtYWxsKCkpIHtcbiAgICAgICAgICAgIDxkaXYgI2hvdXJzIGlkPVwibWFpbkxpYnJhcnlIb3Vyc1wiIGRhdGEtdGVzdGlkPVwiZGVza3RvcEhvdXJzXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0xpYnJhcnlIb3VycyA9ICFzaG93TGlicmFyeUhvdXJzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJob3Vyc0J0blwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaG91cnNUZXh0QmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICBAaWYgKCFpc1NjcmVlblNtYWxsKCkgJiYgc2hvd0xpYnJhcnlIb3Vycykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBAbGliSGJsbEZhZGVJbk91dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJsaWJyYXJ5SG91cnNEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImxpYnJhcnlIb3Vyc0Ryb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGVyXCI+UmVndWxhciBIb3VyczwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJpdGVtXCI+TW9uZGF5IC0gRnJpZGF5PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaXRlbVwiPlNhdHVyZGF5PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaXRlbVwiPlN1bmRheTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCI+NyBhLm0gLSBtaWRuaWdodDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPjggYS5tIC0gbWlkbmlnaHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5DbG9zZWQqPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXJzLW5vdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGYW1pbHkgaGlzdG9yeSBPTkxZIDQgcC5tLiAtIDggcC5tXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48c3Bhbj5ObyBjaGVja291dHMgYWZ0ZXIgMTE6NDUgcC5tLjwvc3Bhbj48L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFsbCBzZXJ2aWNlcyBjbG9zZWQgMTA6NDUgdG8gbm9vbiBvbiBUdWVzZGF5czwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJoZWFkZXJcIj5VcGNvbWluZyBFeGNlcHRpb25zPC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhvdXJzRXhjZXB0aW9ucyQgfCBhc3luYzsgYXMgZXhjZXB0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsXCIgZGF0YS10ZXN0aWQ9XCJleGNlcHRpb25zRGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChleGNlcHRpb24gb2YgZXhjZXB0aW9uczsgdHJhY2sgZXhjZXB0aW9uLmRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV4Y2VwdGlvbi5kYXRlIHwgZGF0ZTogJ01NTS4gZCwgWVlZWScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHVwY29taW5nIGV4Y2VwdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Vyc1wiIGRhdGEtdGVzdGlkPVwiZXhjZXB0aW9uc0hvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChleGNlcHRpb24gb2YgZXhjZXB0aW9uczsgdHJhY2sgZXhjZXB0aW9uLmRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPnt7IGV4Y2VwdGlvbi5leGNlcHRpb25fdGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWItc3Bpbm5lclwiIGRhdGEtdGVzdGlkPVwiZXhjZXB0aW9uc1NwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJoZWFkZXJcIj5MaWJyYXJ5IENhZmU8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaXRlbVwiPkJhZ2VsIEJ1YmJsZTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIml0ZW1cIj5Qcm92ZWNobzwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCI+NyBhLm0gLSAxMSBwLm0uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCI+MTA6MzAgYS5tIC0gMiBwLm0uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6L2xpYi5ieXUuZWR1L2Fib3V0L2hvdXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+U2VlIGFsbCBob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjaGV2cm9uX3JpZ2h0IDwvc3Bhbj48L2FcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBpZD1cImFjY291bnRJbmZvXCIgI2FjY291bnRJbmZvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0xvZ2dlZEluID8gKHNob3dBY2NvdW50RHJvcGRvd24gPSAhc2hvd0FjY291bnREcm9wZG93bikgOiBsb2dpbi5lbWl0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwid3JhcHBlclwiXG4gICAgICAgICAgICAgICAgaWQ9XCJhY2NvdW50QnRuXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFjY291bnRCdG5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IHBlcnNvbiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgQGlmICghaXNTY3JlZW5TbWFsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmFtZVwiIGRhdGEtdGVzdGlkPVwibmFtZVwiPnt7IGlzTG9nZ2VkSW4gPyBuYW1lIDogJ0xvZ2luJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChpc0xvZ2dlZEluKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIGRhdGEtdGVzdGlkPVwibG9naW5Ecm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dfZHJvcF9kb3duXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoaXNMb2dnZWRJbiAmJiBzaG93QWNjb3VudERyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBAbGliSGJsbEZhZGVJbk91dCBpZD1cImFjY291bnREcm9wZG93blwiIGRhdGEtdGVzdGlkPVwiYWNjb3VudERyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2xpYi5ieXUuZWR1L2FjY291bnRcIj5NeSBBY2NvdW50PC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9saWIuYnl1LmVkdS9hY2NvdW50XCI+TXkgSXRlbXM8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2xpYi5ieXUuZWR1L2FjY291bnQvcmVxdWVzdFwiPlJlcXVlc3QgYW4gaXRlbTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vbGliLmJ5dS5lZHUvYWNjb3VudC9zYXZlZFwiPlNhdmVkPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9saWIuYnl1LmVkdS9hY2NvdW50L2NvdXJzZVwiPkNvdXJzZXM8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2xpYi5ieXUuZWR1L2FjY291bnQvcm9vbXNcIj5Sb29tczwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vbGliLmJ5dS5lZHUvYWNjb3VudC9wcmVmZXJlbmNlc1wiPlByZWZlcmVuY2VzPC9hPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dJbXBlcnNvbmF0ZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL2xpYi5ieXUuZWR1L2FjY291bnQvcHJlZmVyZW5jZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93SW1wZXJzb25hdGlvbk1vZGFsID0gdHJ1ZTsgc2hvd0FjY291bnREcm9wZG93biA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImltcGVyc29uYXRlLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wZXJzb25hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvZ291dC5lbWl0KClcIiBkYXRhLXRlc3RpZD1cImxvZ291dFwiPkxvZ291dDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChpc1NjcmVlblNtYWxsKCkpIHtcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJtb2JpbGVOYXZcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwid3JhcHBlclwiIGRhdGEtdGVzdGlkPVwibW9iaWxlTmF2QnRuXCIgKGNsaWNrKT1cInNob3dOYXZCYXIgPSB0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IG1lbnUgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd05hdkJhcikge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibmF2V3JhcHBlclwiIGRhdGEtdGVzdGlkPVwibW9iaWxlTmF2XCIgQGxpYkhibGxTbGlkZUluT3V0UmlnaHRMZWZ0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY2xvc2VNb2JpbGVOYXZCdG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjbG9zZU1vYmlsZU5hdkJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dOYXZCYXIgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gY2xvc2UgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLW5hdi1iYXIgW2hlaWdodF09XCJtb2JpbGVTaWRlYmFySGVpZ2h0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvaGVhZGVyPlxuXG5AaWYgKCFpc1NjcmVlblNtYWxsKCkpIHtcbiAgICA8ZGl2IGlkPVwibWFpbk5hdlwiPlxuICAgICAgICA8bGliLW5hdi1iYXIgLz5cbiAgICA8L2Rpdj5cbn1cbkBpZiAoaXNTY3JlZW5TbWFsbCgpKSB7XG4gICAgPGFcbiAgICAgICAgaWQ9XCJtb2JpbGVMaWJyYXJ5SG91cnNcIlxuICAgICAgICBocmVmPVwiaHR0cHM6L2xpYi5ieXUuZWR1L2Fib3V0L2hvdXJzXCJcbiAgICAgICAgY2xhc3M9XCJ3cmFwcGVyXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2JpbGVIb3Vyc1wiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaG91cnNUZXh0QmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2E+XG59XG5cbjxuZy10ZW1wbGF0ZSAjaG91cnNUZXh0QmxvY2s+XG4gICAgQGlmIChsaWJyYXJ5SG91cnMoKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbGVmdC1pY29uXCI+IHNjaGVkdWxlIDwvc3Bhbj5cbiAgICAgICAge3tcbiAgICAgICAgICAgIGxpYnJhcnlIb3VycygpPy5pc19jbG9zZWRcbiAgICAgICAgICAgICAgICA/ICdDTE9TRUQnXG4gICAgICAgICAgICAgICAgOiBcIlRvZGF5J3MgaG91cnM6IFwiICtcbiAgICAgICAgICAgICAgICAgIChsaWJyYXJ5SG91cnMoKSEuZGF0ZSB8IGxpYnJhcnlIb3VyczogbGlicmFyeUhvdXJzKCkhLm9wZW5fdGltZSkgK1xuICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgKGxpYnJhcnlIb3VycygpIS5kYXRlIHwgbGlicmFyeUhvdXJzOiBsaWJyYXJ5SG91cnMoKSEuY2xvc2VfdGltZSlcbiAgICAgICAgfX1cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bGliLWltcGVyc29uYXRlLW1vZGFsXG4gICAgW3Nob3dNb2RhbF09XCJzaG93SW1wZXJzb25hdGlvbk1vZGFsXCJcbiAgICBbb2lkY0Jhc2VVcmldPVwib2lkY0Jhc2VVcmkoKVwiXG4gICAgW29pZGNEZWZhdWx0SWRwXT1cIm9pZGNEZWZhdWx0SWRwKClcIlxuICAgIFthY2Nlc3NUb2tlbl09XCJhY2Nlc3NUb2tlblwiXG4gICAgKGRpc21pc3MpPVwic2hvd0ltcGVyc29uYXRpb25Nb2RhbCA9IGZhbHNlXCJcbiAgICAoaW5pdCk9XCJzaG93SW1wZXJzb25hdGlvbk1vZGFsID0gdHJ1ZVwiXG4+PC9saWItaW1wZXJzb25hdGUtbW9kYWw+XG4iXX0=
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGJsbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2hibGwtaGVhZGVyL2hibGwtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9oYmxsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9B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MEIsRUFBRSxnQkFBZ0IsQ0FBQzs4QkFRckMsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQU9ULEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQWdFQyxRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEYXRlUGlwZSwgTG93ZXJDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpZ25hbCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgY29tcHV0ZWQsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZCYXJDb21wb25lbnQgfSBmcm9tICcuL25hdi1iYXIvbmF2LWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgbGliSGJsbEZhZGVJbk91dCwgbGliSGJsbFNsaWRlSW5PdXRSaWdodExlZnQgfSBmcm9tICcuLi9hbmltYXRpb25zL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBpc1NjcmVlblNtYWxsU2lnbmFsIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTGlicmFyeUhvdXJzUGlwZSB9IGZyb20gJy4vcGlwZXMvbGlicmFyeS1ob3Vycy5waXBlJztcbmltcG9ydCB7IG1hcCwgb2YsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlQ29tcG9uZW50IH0gZnJvbSAnLi4vZXhwYW5kLWNvbGxhcHNlL2V4cGFuZC1jb2xsYXBzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW1wZXJzb25hdGVNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vaW1wZXJzb25hdGUtbW9kYWwvaW1wZXJzb25hdGUtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IGp3dERlY29kZSwgSnd0UGF5bG9hZCB9IGZyb20gJ2p3dC1kZWNvZGUnO1xuaW1wb3J0IHsgVG9rZW5QYXlsb2FkIH0gZnJvbSAnLi9tb2RlbHMvdG9rZW4tcGF5bG9hZCc7XG5pbXBvcnQgeyBMaWJyYXJ5SG91cnMgfSBmcm9tICcuL21vZGVscy9saWJyYXJ5LWhvdXJzJztcblxuZXhwb3J0IGNvbnN0IExJQlJBUllfSE9VUlNfQVBJX1VSTCA9ICdodHRwczovL2FwcHMubGliLmJ5dS5lZHUvbGlicmFyeWhvdXJzL2FwaS9ob3Vycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWhibGwtaGVhZGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRGF0ZVBpcGUsXG4gICAgICAgIExvd2VyQ2FzZVBpcGUsXG4gICAgICAgIExpYnJhcnlIb3Vyc1BpcGUsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTmF2QmFyQ29tcG9uZW50LFxuICAgICAgICBFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCxcbiAgICAgICAgSW1wZXJzb25hdGVNb2RhbENvbXBvbmVudCxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oYmxsLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2hibGwtaGVhZGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgICBhbmltYXRpb25zOiBbbGliSGJsbFNsaWRlSW5PdXRSaWdodExlZnQsIGxpYkhibGxGYWRlSW5PdXRdLFxufSlcbmV4cG9ydCBjbGFzcyBIYmxsSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByMiA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIC8vIFRPRE86IGRvZXMgdGhpcyBpbmNyZWFzZSBidW5kbGUgc2l6ZSBtb3JlIHRoYW4gaXQncyB3b3J0aD8gdnMgZmV0Y2g/XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYm8gPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlcicpIGhlYWRlciE6IEVsZW1lbnRSZWY7XG5cbiAgICAvLyAtLS0gQVBJIC0tLVxuICAgIC8vIFJlcXVpcmUgYW4gb2JqZWN0IGhlcmUgc28gdGhhdCBhY2Nlc3MgdG9rZW5zIGFyZSBub3QgdmlzaWJsZS9leHRyYWN0YWJsZSBmcm9tIHRoZSBET00gaW4gY29uc3VtaW5nIGFwcGxpY2F0aW9ucy4gSW5zdGVhZCB0aGV5IGFyZSBvbmx5IHN0b3JlZCBpbiBtZW1vcnkuXG4gICAgYWNjZXNzVG9rZW5QYXlsb2FkID0gaW5wdXQ8VG9rZW5QYXlsb2FkPih7IHRva2VuOiAnJyB9KTtcbiAgICBvaWRjQmFzZVVyaSA9IGlucHV0KCdodHRwczovL2tleWNsb2FrLmxpYi5ieXUuZWR1LycpO1xuICAgIG9pZGNEZWZhdWx0SWRwID0gaW5wdXQoJ2J5dS1yZWFsbScpO1xuICAgIEBPdXRwdXQoKSBsb2dpbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgbG9nb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBlbmRJbXBlcnNvbmF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8vIC0tLS0tLS0tLS0tXG4gICAgcHJpdmF0ZSBmb3JtYXREYXRlRm9ySG91cnMgPSAoZGF0ZTogRGF0ZSkgPT5cbiAgICAgICAgYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke1N0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpfS0ke1N0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgIHByaXZhdGUgYWNjb3VudEluZm9FbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignYWNjb3VudEluZm8nKTtcbiAgICBwcml2YXRlIGhvdXJzRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2hvdXJzJyk7XG5cbiAgICAvLyBBdXRoIGluZm9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByb3RlY3RlZCBwYXJzZWRUb2tlbjogU2lnbmFsPEp3dFBheWxvYWQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuYWNjZXNzVG9rZW5QYXlsb2FkKCkudG9rZW4gPyBqd3REZWNvZGUodGhpcy5hY2Nlc3NUb2tlblBheWxvYWQoKS50b2tlbikgOiB7fSxcbiAgICApO1xuICAgIHByb3RlY3RlZCBpc0xvZ2dlZEluID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICAhIXRoaXMuYWNjZXNzVG9rZW5QYXlsb2FkKCkudG9rZW4gJiZcbiAgICAgICAgICAgIHRoaXMucGFyc2VkVG9rZW4oKS5leHAhID4gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgICk7XG4gICAgcHJvdGVjdGVkIGlzSW1wZXJzb25hdGluZyA9IGNvbXB1dGVkKCgpID0+ICEhdGhpcy5wYXJzZWRUb2tlbigpWydpbXBlcnNvbmF0b3InXSk7XG4gICAgcHJvdGVjdGVkIHNob3dJbXBlcnNvbmF0ZUJ1dHRvbiA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgdGhpcy5wYXJzZWRUb2tlbigpWydyZXNvdXJjZV9hY2Nlc3MnXVsncmVhbG0tbWFuYWdlbWVudCddPy5bJ3JvbGVzJ10/LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICdpbXBlcnNvbmF0aW9uJyxcbiAgICAgICAgICAgICkgJiYgIXRoaXMuaXNJbXBlcnNvbmF0aW5nKCksXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgbmFtZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFyc2VkVG9rZW4oKVsnZ2l2ZW5fbmFtZSddKTtcblxuICAgIC8vIEhvdXJzXG5cbiAgICAvLyBIb3Vyc1xuICAgIHByb3RlY3RlZCBsaWJyYXJ5SG91cnMgPSB0b1NpZ25hbCh0aGlzLmh0dHAuZ2V0PExpYnJhcnlIb3Vycz4oTElCUkFSWV9IT1VSU19BUElfVVJMKSk7XG4gICAgcHJvdGVjdGVkIGhvdXJzRXhjZXB0aW9ucyQgPSBvZihudWxsKS5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgLy8gR2V0IGV4Y2VwdGlvbnMgZnJvbSB0b2RheSB0byB0d28gbW9udGhzIG91dFxuICAgICAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZvcm1hdERhdGVGb3JIb3Vycyh0b2RheSk7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIG5ld0RhdGUuc2V0TW9udGgodG9kYXkuZ2V0TW9udGgoKSArIDIpO1xuICAgICAgICAgICAgY29uc3Qgc3RvcCA9IHRoaXMuZm9ybWF0RGF0ZUZvckhvdXJzKG5ld0RhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIFtzdGFydCwgc3RvcF07XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKFtzdGFydCwgc3RvcF06IHN0cmluZ1tdKSA9PlxuICAgICAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgICAgICAgLmdldDxMaWJyYXJ5SG91cnNbXT4oYCR7TElCUkFSWV9IT1VSU19BUElfVVJMfT9zdGFydD0ke3N0YXJ0fSZzdG9wPSR7c3RvcH1gKVxuICAgICAgICAgICAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuZmlsdGVyKChkYXkpID0+IGRheS5oYXNfZXhjZXB0aW9uKS5zbGljZSgwLCA1KSkpLFxuICAgICAgICApLFxuICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICApO1xuICAgIHByb3RlY3RlZCBzaG93QWNjb3VudERyb3Bkb3duID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIHNob3dMaWJyYXJ5SG91cnMgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgbW9iaWxlU2lkZWJhckhlaWdodCA9IDA7XG4gICAgcHJvdGVjdGVkIHNob3dOYXZCYXIgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgc2hvd0ltcGVyc29uYXRpb25Nb2RhbCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBpc1NjcmVlblNtYWxsID0gaXNTY3JlZW5TbWFsbFNpZ25hbCh0aGlzLmJvKTtcblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yMi5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFjY291bnRJbmZvRWwoKT8ubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkpXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QWNjb3VudERyb3Bkb3duID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaG91cnNFbCgpPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KSkgdGhpcy5zaG93TGlicmFyeUhvdXJzID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldE1vYmlsZVNpZGViYXJIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIG9uUmVzaXplKCkge1xuICAgICAgICB0aGlzLnNldE1vYmlsZVNpZGViYXJIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1vYmlsZVNpZGViYXJIZWlnaHQgPSAoKSA9PlxuICAgICAgICAodGhpcy5tb2JpbGVTaWRlYmFySGVpZ2h0ID1cbiAgICAgICAgICAgIHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuaGVhZGVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbn1cbiIsIjxoZWFkZXIgcm9sZT1cImJhbm5lclwiIGNsYXNzPVwid3JhcHBlclwiICNoZWFkZXIgW25nQ2xhc3NdPVwieyBkZXNrdG9wOiAhaXNTY3JlZW5TbWFsbCgpIH1cIj5cbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9saWIuYnl1LmVkdS9cIj5cbiAgICAgICAgPGgxPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vbWVkaWEubGliLmJ5dS5lZHUvd2ViLWFzc2V0cy9pbWFnZXMvMi4wLjAvYnl1LWhibGwtbG9nby1mdWxsLnN2Z1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiQllVIExpYnJhcnkgTG9nb1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2gxPlxuICAgIDwvYT5cbiAgICA8ZGl2IGlkPVwibGlicmFyeUluZm9cIiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgQGlmICghaXNTY3JlZW5TbWFsbCgpKSB7XG4gICAgICAgICAgICA8ZGl2ICNob3VycyBpZD1cIm1haW5MaWJyYXJ5SG91cnNcIiBkYXRhLXRlc3RpZD1cImRlc2t0b3BIb3Vyc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dMaWJyYXJ5SG91cnMgPSAhc2hvd0xpYnJhcnlIb3Vyc1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaG91cnNCdG5cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhvdXJzVGV4dEJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgQGlmICghaXNTY3JlZW5TbWFsbCgpICYmIHNob3dMaWJyYXJ5SG91cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgQGxpYkhibGxGYWRlSW5PdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibGlicmFyeUhvdXJzRHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJsaWJyYXJ5SG91cnNEcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImhlYWRlclwiPlJlZ3VsYXIgSG91cnM8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaXRlbVwiPk1vbmRheSAtIEZyaWRheTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIml0ZW1cIj5TYXR1cmRheTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIml0ZW1cIj5TdW5kYXk8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Vyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPjcgYS5tIC0gbWlkbmlnaHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj44IGEubSAtIG1pZG5pZ2h0PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCI+Q2xvc2VkKjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Vycy1ub3RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRmFtaWx5IGhpc3RvcnkgT05MWSA0IHAubS4gLSA4IHAubVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4+Tm8gY2hlY2tvdXRzIGFmdGVyIDExOjQ1IHAubS48L3NwYW4+PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BbGwgc2VydmljZXMgY2xvc2VkIDEwOjQ1IHRvIG5vb24gb24gVHVlc2RheXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGVyXCI+VXBjb21pbmcgRXhjZXB0aW9uczwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChob3Vyc0V4Y2VwdGlvbnMkIHwgYXN5bmM7IGFzIGV4Y2VwdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbFwiIGRhdGEtdGVzdGlkPVwiZXhjZXB0aW9uc0RldGFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZXhjZXB0aW9uIG9mIGV4Y2VwdGlvbnM7IHRyYWNrIGV4Y2VwdGlvbi5kYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBleGNlcHRpb24uZGF0ZSB8IGRhdGU6ICdNTU0uIGQsIFlZWVknIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyB1cGNvbWluZyBleGNlcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG91cnNcIiBkYXRhLXRlc3RpZD1cImV4Y2VwdGlvbnNIb3Vyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZXhjZXB0aW9uIG9mIGV4Y2VwdGlvbnM7IHRyYWNrIGV4Y2VwdGlvbi5kYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj57eyBleGNlcHRpb24uZXhjZXB0aW9uX3RpdGxlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGliLXNwaW5uZXJcIiBkYXRhLXRlc3RpZD1cImV4Y2VwdGlvbnNTcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGVyXCI+TGlicmFyeSBDYWZlPC9oMj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIml0ZW1cIj5CYWdlbCBCdWJibGU8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJpdGVtXCI+UHJvdmVjaG88L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Vyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPjcgYS5tIC0gMTEgcC5tLjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPjEwOjMwIGEubSAtIDIgcC5tLjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi9saWIuYnl1LmVkdS9hYm91dC9ob3Vyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlNlZSBhbGwgaG91cnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2hldnJvbl9yaWdodCA8L3NwYW4+PC9hXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgaWQ9XCJhY2NvdW50SW5mb1wiICNhY2NvdW50SW5mbz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNMb2dnZWRJbigpID8gKHNob3dBY2NvdW50RHJvcGRvd24gPSAhc2hvd0FjY291bnREcm9wZG93bikgOiBsb2dpbi5lbWl0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwid3JhcHBlclwiXG4gICAgICAgICAgICAgICAgaWQ9XCJhY2NvdW50QnRuXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFjY291bnRCdG5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IHBlcnNvbiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgQGlmICghaXNTY3JlZW5TbWFsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmFtZVwiIGRhdGEtdGVzdGlkPVwibmFtZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xvZ2dlZEluKCkgPyBuYW1lKCkgOiAnTG9naW4nXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGlzTG9nZ2VkSW4oKSkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBkYXRhLXRlc3RpZD1cImxvZ2luRHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFycm93X2Ryb3BfZG93blxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICBAaWYgKGlzTG9nZ2VkSW4oKSAmJiBzaG93QWNjb3VudERyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBAbGliSGJsbEZhZGVJbk91dCBpZD1cImFjY291bnREcm9wZG93blwiIGRhdGEtdGVzdGlkPVwiYWNjb3VudERyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2xpYi5ieXUuZWR1L2FjY291bnRcIj5NeSBBY2NvdW50PC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9saWIuYnl1LmVkdS9hY2NvdW50XCI+TXkgSXRlbXM8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2xpYi5ieXUuZWR1L2FjY291bnQvcmVxdWVzdFwiPlJlcXVlc3QgYW4gaXRlbTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vbGliLmJ5dS5lZHUvYWNjb3VudC9zYXZlZFwiPlNhdmVkPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9saWIuYnl1LmVkdS9hY2NvdW50L2NvdXJzZVwiPkNvdXJzZXM8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2xpYi5ieXUuZWR1L2FjY291bnQvcm9vbXNcIj5Sb29tczwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vbGliLmJ5dS5lZHUvYWNjb3VudC9wcmVmZXJlbmNlc1wiPlByZWZlcmVuY2VzPC9hPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dJbXBlcnNvbmF0ZUJ1dHRvbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vbGliLmJ5dS5lZHUvYWNjb3VudC9wcmVmZXJlbmNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dJbXBlcnNvbmF0aW9uTW9kYWwgPSB0cnVlOyBzaG93QWNjb3VudERyb3Bkb3duID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1wZXJzb25hdGUtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBlcnNvbmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9nb3V0LmVtaXQoKVwiIGRhdGEtdGVzdGlkPVwibG9nb3V0XCI+TG9nb3V0PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKGlzU2NyZWVuU21hbGwoKSkge1xuICAgICAgICAgICAgPGRpdiBpZD1cIm1vYmlsZU5hdlwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ3cmFwcGVyXCIgZGF0YS10ZXN0aWQ9XCJtb2JpbGVOYXZCdG5cIiAoY2xpY2spPVwic2hvd05hdkJhciA9IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gbWVudSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgQGlmIChzaG93TmF2QmFyKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJuYXZXcmFwcGVyXCIgZGF0YS10ZXN0aWQ9XCJtb2JpbGVOYXZcIiBAbGliSGJsbFNsaWRlSW5PdXRSaWdodExlZnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjbG9zZU1vYmlsZU5hdkJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNsb3NlTW9iaWxlTmF2QnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd05hdkJhciA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvblwiPiBjbG9zZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItbmF2LWJhciBbaGVpZ2h0XT1cIm1vYmlsZVNpZGViYXJIZWlnaHRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9oZWFkZXI+XG5cbkBpZiAoIWlzU2NyZWVuU21hbGwoKSkge1xuICAgIDxkaXYgaWQ9XCJtYWluTmF2XCI+XG4gICAgICAgIDxsaWItbmF2LWJhciAvPlxuICAgIDwvZGl2PlxufVxuQGlmIChpc1NjcmVlblNtYWxsKCkpIHtcbiAgICA8YVxuICAgICAgICBpZD1cIm1vYmlsZUxpYnJhcnlIb3Vyc1wiXG4gICAgICAgIGhyZWY9XCJodHRwczovbGliLmJ5dS5lZHUvYWJvdXQvaG91cnNcIlxuICAgICAgICBjbGFzcz1cIndyYXBwZXJcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vYmlsZUhvdXJzXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJob3Vyc1RleHRCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvYT5cbn1cblxuPG5nLXRlbXBsYXRlICNob3Vyc1RleHRCbG9jaz5cbiAgICBAaWYgKGxpYnJhcnlIb3VycygpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBsZWZ0LWljb25cIj4gc2NoZWR1bGUgPC9zcGFuPlxuICAgICAgICB7e1xuICAgICAgICAgICAgbGlicmFyeUhvdXJzKCk/LmlzX2Nsb3NlZFxuICAgICAgICAgICAgICAgID8gJ0NMT1NFRCdcbiAgICAgICAgICAgICAgICA6IFwiVG9kYXkncyBob3VyczogXCIgK1xuICAgICAgICAgICAgICAgICAgKGxpYnJhcnlIb3VycygpIS5kYXRlIHwgbGlicmFyeUhvdXJzOiBsaWJyYXJ5SG91cnMoKSEub3Blbl90aW1lKSArXG4gICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAobGlicmFyeUhvdXJzKCkhLmRhdGUgfCBsaWJyYXJ5SG91cnM6IGxpYnJhcnlIb3VycygpIS5jbG9zZV90aW1lKVxuICAgICAgICB9fVxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxsaWItaW1wZXJzb25hdGUtbW9kYWxcbiAgICBbc2hvd01vZGFsXT1cInNob3dJbXBlcnNvbmF0aW9uTW9kYWxcIlxuICAgIFtvaWRjQmFzZVVyaV09XCJvaWRjQmFzZVVyaSgpXCJcbiAgICBbb2lkY0RlZmF1bHRJZHBdPVwib2lkY0RlZmF1bHRJZHAoKVwiXG4gICAgW2FjY2Vzc1Rva2VuUGF5bG9hZF09XCJhY2Nlc3NUb2tlblBheWxvYWQoKVwiXG4gICAgKGRpc21pc3MpPVwic2hvd0ltcGVyc29uYXRpb25Nb2RhbCA9IGZhbHNlXCJcbiAgICAoaW5pdCk9XCJzaG93SW1wZXJzb25hdGlvbk1vZGFsID0gdHJ1ZVwiXG4+PC9saWItaW1wZXJzb25hdGUtbW9kYWw+XG4iXX0=
|
|
@@ -32,7 +32,8 @@ export class ImpersonateModalComponent {
|
|
|
32
32
|
this.eref = inject(ElementRef);
|
|
33
33
|
this.oidcBaseUri = input.required();
|
|
34
34
|
this.oidcDefaultIdp = input.required();
|
|
35
|
-
|
|
35
|
+
// Require an object here so that access tokens are not visible/extractable from the DOM in consuming applications. Instead they are only stored in memory.
|
|
36
|
+
this.accessTokenPayload = input.required();
|
|
36
37
|
this.dismiss = new EventEmitter();
|
|
37
38
|
this.init = new EventEmitter();
|
|
38
39
|
this.isOpen = false;
|
|
@@ -143,7 +144,7 @@ export class ImpersonateModalComponent {
|
|
|
143
144
|
});
|
|
144
145
|
return this.http.get(uri, {
|
|
145
146
|
headers: {
|
|
146
|
-
Authorization: `Bearer ${this.
|
|
147
|
+
Authorization: `Bearer ${this.accessTokenPayload().token}`,
|
|
147
148
|
},
|
|
148
149
|
});
|
|
149
150
|
};
|
|
@@ -166,7 +167,7 @@ export class ImpersonateModalComponent {
|
|
|
166
167
|
this.subs.unsubscribe();
|
|
167
168
|
}
|
|
168
169
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ImpersonateModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
169
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ImpersonateModalComponent, isStandalone: true, selector: "lib-impersonate-modal", inputs: { showModal: { classPropertyName: "showModal", publicName: "showModal", isSignal: false, isRequired: false, transformFunction: null }, oidcBaseUri: { classPropertyName: "oidcBaseUri", publicName: "oidcBaseUri", isSignal: true, isRequired: true, transformFunction: null }, oidcDefaultIdp: { classPropertyName: "oidcDefaultIdp", publicName: "oidcDefaultIdp", isSignal: true, isRequired: true, transformFunction: null }, accessToken: { classPropertyName: "accessToken", publicName: "accessToken", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { dismiss: "dismiss", init: "init" }, host: { listeners: { "document:mousedown": "outsideClick($event)", "document:keydown": "handleKeyDown($event)" } }, ngImport: i0, template: "@if (isOpen) {\n <div @libHbllFadeInOut class=\"modal-wrapper\" id=\"modalBackdrop\" data-testid=\"backdrop\">\n <div class=\"modal-container\" data-testid=\"modal\">\n <div class=\"modal-header\">\n <h2>Impersonate</h2>\n <button type=\"button\" (click)=\"close()\" aria-label=\"Close\" data-testid=\"close\">\n <span class=\"material-symbols-outlined icon-close\"> close </span>\n </button>\n </div>\n <form [formGroup]=\"form\" (submit)=\"handleFormSubmit($event)\" data-testid=\"searchForm\">\n <div class=\"search-header\">\n <div class=\"secondary\" [class.disabled]=\"!form.valid\">\n <span class=\"keyboard-key\">Enter</span> to search\n </div>\n </div>\n <label\n for=\"searchInput\"\n class=\"search-wrapper\"\n [class.invalid]=\"form.invalid && form.dirty\"\n >\n <span class=\"material-symbols-outlined icon-search\"> search </span>\n <input\n id=\"searchInput\"\n type=\"text\"\n autocomplete=\"off\"\n formControlName=\"search\"\n placeholder=\"Search patrons...\"\n (keydown)=\"handleSearchKeyPress($event)\"\n #searchBox\n data-testid=\"searchInput\"\n />\n @if (!!searchBox.value && form.valid) {\n <span class=\"material-symbols-outlined icon-checkmark\"> check </span>\n }\n @if (searchBox.value.length) {\n <span\n (click)=\"clearSearch()\"\n @libHbllFadeInOut\n class=\"material-symbols-outlined icon-close\"\n >\n close\n </span>\n }\n </label>\n </form>\n <fieldset\n class=\"search-results-wrapper\"\n id=\"resultsScrollContainer\"\n (change)=\"handleSelectUser($event)\"\n >\n @if (!loading && results()) {\n @for (user of results(); track user.netId; let idx = $index) {\n <div\n class=\"result-field result\"\n [class.focus]=\"user.username === selectedUsername\"\n data-testid=\"result\"\n >\n <label\n [for]=\"'result_' + idx\"\n [class.warning]=\"user.restricted\"\n (mouseover)=\"selectedUsername = user.username\"\n >\n @if (user.restricted) {\n <span class=\"material-symbols-outlined icon\"> warning </span>\n } @else {\n <span class=\"material-symbols-outlined icon\"> person </span>\n }\n \n <span [title]=\"user\" data-testid=\"resultText\">{{\n user | impersonateUser\n }}</span>\n <input\n type=\"radio\"\n [value]=\"user.username\"\n class=\"hidden\"\n [id]=\"'result_' + idx\"\n name=\"resultSelect\"\n (keydown)=\"handleResultKeyPress($event)\"\n />\n </label>\n <button\n class=\"impersonate-button\"\n data-testid=\"impersonateBtn\"\n (click)=\"startImpersonation(user.username)\"\n >\n Impersonate\n </button>\n </div>\n } @empty {\n <div class=\"result-field\">\n No results. Try searching by Net ID or BYU ID.\n </div>\n }\n }\n @if (loading) {\n <div class=\"result-field\">\n <div class=\"lib-spinner\"></div>\n </div>\n }\n @if (hasError) {\n <div class=\"result-field\">Something went wrong. We'll keep trying.</div>\n }\n </fieldset>\n </div>\n </div>\n}\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}h2{font-size:1.2em;font-weight:600;margin:0;color:#404040}.warning{color:#b04940}.modal-wrapper{position:fixed;inset:0;background-color:#0000007f;z-index:6001;display:grid;place-items:center}.modal-container{color:#404040;padding:1.2em 1.4em;width:90%;max-width:30em;border-radius:4px;border:1px solid #b7b7b7;box-shadow:0 3px 6px #002e5d20;background-color:#fff;display:grid;grid-template-columns:1fr;gap:1em}.modal-container .modal-header{display:flex;justify-content:space-between;border-bottom:1px solid #e6e6e6;padding-bottom:.8em}.modal-container .modal-header .icon-close{transition:opacity .15s;color:#707070;opacity:1;cursor:pointer}.modal-container .modal-header .icon-close:hover{opacity:.8}.modal-container .hidden{opacity:0;width:0;height:0}.modal-container .search-header{display:flex;align-items:center;justify-content:flex-end;margin-bottom:.8em}.modal-container .search-header .secondary{color:#70707095}.modal-container .search-header .keyboard-key{padding:.1em .4em;border:1px solid currentColor;border-radius:4px}.modal-container .search-wrapper{display:flex;align-items:center;border-radius:4px;border:solid 1px currentColor;color:#ca7ad1cc;background-color:#e6e6e655;padding:.1em .3em .1em .5em;transition:background-color .15s,color .15s}.modal-container .search-wrapper.invalid{background-color:#b0494022}.modal-container .search-wrapper .icon-search{font-size:1.2em}.modal-container .search-wrapper .icon-checkmark{color:#1dce7b}.modal-container .search-wrapper .icon-close{color:#ca7ad1cc;cursor:pointer}.modal-container .search-wrapper .icon-close:hover{color:#ca7ad1}.modal-container .search-wrapper input[type=text]{background:transparent;border:none;outline:none;width:100%;color:#404040;padding:.5em .4em;font-size:1em}.modal-container .search-wrapper input[type=text]:focus{background-color:transparent}.modal-container .search-results-wrapper{border:none;margin:0;padding:0;max-height:25em;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;display:flex;flex-direction:column;align-items:stretch;min-width:0}.modal-container .search-results-wrapper::-webkit-scrollbar{width:6px}.modal-container .search-results-wrapper::-webkit-scrollbar-track{background:#e6e6e6}.modal-container .search-results-wrapper::-webkit-scrollbar-thumb{background-color:#b3b3b3;border-radius:5px}.modal-container .search-results-wrapper::-webkit-scrollbar-thumb:hover{background-color:#888}.modal-container .search-results-wrapper .result-field{font-style:italic;display:flex;align-items:center;justify-content:space-between;padding:.8em}.modal-container .search-results-wrapper .result-field .lib-spinner{margin:auto;display:grid;place-items:center}.modal-container .search-results-wrapper .result-field.result{font-style:normal;padding:0}.modal-container .search-results-wrapper .result-field.result label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1;padding:.8em;display:flex;align-items:center}.modal-container .search-results-wrapper .result-field.result label .icon{font-size:1.2em;margin-right:.4em}.modal-container .search-results-wrapper .result-field.result .impersonate-button{cursor:pointer;display:none;color:#ca7ad1cc;padding:.1em .6em;border:1px solid currentColor;border-radius:4px;background-color:#fff;flex-shrink:0;margin-block:.6em;margin-right:.8em}.modal-container .search-results-wrapper .result-field.result .impersonate-button:hover{color:#ca7ad1;background-color:#fff8}.modal-container .search-results-wrapper .result-field.result:active,.modal-container .search-results-wrapper .result-field.result.focus{background:#f2f2f2}.modal-container .search-results-wrapper .result-field.result.focus .impersonate-button{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: ImpersonateUserPipe, name: "impersonateUser" }], animations: [libHbllFadeInOut] }); }
|
|
170
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ImpersonateModalComponent, isStandalone: true, selector: "lib-impersonate-modal", inputs: { showModal: { classPropertyName: "showModal", publicName: "showModal", isSignal: false, isRequired: false, transformFunction: null }, oidcBaseUri: { classPropertyName: "oidcBaseUri", publicName: "oidcBaseUri", isSignal: true, isRequired: true, transformFunction: null }, oidcDefaultIdp: { classPropertyName: "oidcDefaultIdp", publicName: "oidcDefaultIdp", isSignal: true, isRequired: true, transformFunction: null }, accessTokenPayload: { classPropertyName: "accessTokenPayload", publicName: "accessTokenPayload", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { dismiss: "dismiss", init: "init" }, host: { listeners: { "document:mousedown": "outsideClick($event)", "document:keydown": "handleKeyDown($event)" } }, ngImport: i0, template: "@if (isOpen) {\n <div @libHbllFadeInOut class=\"modal-wrapper\" id=\"modalBackdrop\" data-testid=\"backdrop\">\n <div class=\"modal-container\" data-testid=\"modal\">\n <div class=\"modal-header\">\n <h2>Impersonate</h2>\n <button type=\"button\" (click)=\"close()\" aria-label=\"Close\" data-testid=\"close\">\n <span class=\"material-symbols-outlined icon-close\"> close </span>\n </button>\n </div>\n <form [formGroup]=\"form\" (submit)=\"handleFormSubmit($event)\" data-testid=\"searchForm\">\n <div class=\"search-header\">\n <div class=\"secondary\" [class.disabled]=\"!form.valid\">\n <span class=\"keyboard-key\">Enter</span> to search\n </div>\n </div>\n <label\n for=\"searchInput\"\n class=\"search-wrapper\"\n [class.invalid]=\"form.invalid && form.dirty\"\n >\n <span class=\"material-symbols-outlined icon-search\"> search </span>\n <input\n id=\"searchInput\"\n type=\"text\"\n autocomplete=\"off\"\n formControlName=\"search\"\n placeholder=\"Search patrons...\"\n (keydown)=\"handleSearchKeyPress($event)\"\n #searchBox\n data-testid=\"searchInput\"\n />\n @if (!!searchBox.value && form.valid) {\n <span class=\"material-symbols-outlined icon-checkmark\"> check </span>\n }\n @if (searchBox.value.length) {\n <span\n (click)=\"clearSearch()\"\n @libHbllFadeInOut\n class=\"material-symbols-outlined icon-close\"\n >\n close\n </span>\n }\n </label>\n </form>\n <fieldset\n class=\"search-results-wrapper\"\n id=\"resultsScrollContainer\"\n (change)=\"handleSelectUser($event)\"\n >\n @if (!loading && results()) {\n @for (user of results(); track user.netId; let idx = $index) {\n <div\n class=\"result-field result\"\n [class.focus]=\"user.username === selectedUsername\"\n data-testid=\"result\"\n >\n <label\n [for]=\"'result_' + idx\"\n [class.warning]=\"user.restricted\"\n (mouseover)=\"selectedUsername = user.username\"\n >\n @if (user.restricted) {\n <span class=\"material-symbols-outlined icon\"> warning </span>\n } @else {\n <span class=\"material-symbols-outlined icon\"> person </span>\n }\n \n <span [title]=\"user\" data-testid=\"resultText\">{{\n user | impersonateUser\n }}</span>\n <input\n type=\"radio\"\n [value]=\"user.username\"\n class=\"hidden\"\n [id]=\"'result_' + idx\"\n name=\"resultSelect\"\n (keydown)=\"handleResultKeyPress($event)\"\n />\n </label>\n <button\n class=\"impersonate-button\"\n data-testid=\"impersonateBtn\"\n (click)=\"startImpersonation(user.username)\"\n >\n Impersonate\n </button>\n </div>\n } @empty {\n <div class=\"result-field\">\n No results. Try searching by Net ID or BYU ID.\n </div>\n }\n }\n @if (loading) {\n <div class=\"result-field\">\n <div class=\"lib-spinner\"></div>\n </div>\n }\n @if (hasError) {\n <div class=\"result-field\">Something went wrong. We'll keep trying.</div>\n }\n </fieldset>\n </div>\n </div>\n}\n", styles: [".lib-spinner{border:.3em solid #dfe9f7;border-top:.3em solid #4070b0;border-radius:100%;width:30px;height:30px;animation:loadingSpinnerAnimate 1s ease infinite;position:relative}@keyframes loadingSpinnerAnimate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}h2{font-size:1.2em;font-weight:600;margin:0;color:#404040}.warning{color:#b04940}.modal-wrapper{position:fixed;inset:0;background-color:#0000007f;z-index:6001;display:grid;place-items:center}.modal-container{color:#404040;padding:1.2em 1.4em;width:90%;max-width:30em;border-radius:4px;border:1px solid #b7b7b7;box-shadow:0 3px 6px #002e5d20;background-color:#fff;display:grid;grid-template-columns:1fr;gap:1em}.modal-container .modal-header{display:flex;justify-content:space-between;border-bottom:1px solid #e6e6e6;padding-bottom:.8em}.modal-container .modal-header .icon-close{transition:opacity .15s;color:#707070;opacity:1;cursor:pointer}.modal-container .modal-header .icon-close:hover{opacity:.8}.modal-container .hidden{opacity:0;width:0;height:0}.modal-container .search-header{display:flex;align-items:center;justify-content:flex-end;margin-bottom:.8em}.modal-container .search-header .secondary{color:#70707095}.modal-container .search-header .keyboard-key{padding:.1em .4em;border:1px solid currentColor;border-radius:4px}.modal-container .search-wrapper{display:flex;align-items:center;border-radius:4px;border:solid 1px currentColor;color:#ca7ad1cc;background-color:#e6e6e655;padding:.1em .3em .1em .5em;transition:background-color .15s,color .15s}.modal-container .search-wrapper.invalid{background-color:#b0494022}.modal-container .search-wrapper .icon-search{font-size:1.2em}.modal-container .search-wrapper .icon-checkmark{color:#1dce7b}.modal-container .search-wrapper .icon-close{color:#ca7ad1cc;cursor:pointer}.modal-container .search-wrapper .icon-close:hover{color:#ca7ad1}.modal-container .search-wrapper input[type=text]{background:transparent;border:none;outline:none;width:100%;color:#404040;padding:.5em .4em;font-size:1em}.modal-container .search-wrapper input[type=text]:focus{background-color:transparent}.modal-container .search-results-wrapper{border:none;margin:0;padding:0;max-height:25em;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;display:flex;flex-direction:column;align-items:stretch;min-width:0}.modal-container .search-results-wrapper::-webkit-scrollbar{width:6px}.modal-container .search-results-wrapper::-webkit-scrollbar-track{background:#e6e6e6}.modal-container .search-results-wrapper::-webkit-scrollbar-thumb{background-color:#b3b3b3;border-radius:5px}.modal-container .search-results-wrapper::-webkit-scrollbar-thumb:hover{background-color:#888}.modal-container .search-results-wrapper .result-field{font-style:italic;display:flex;align-items:center;justify-content:space-between;padding:.8em}.modal-container .search-results-wrapper .result-field .lib-spinner{margin:auto;display:grid;place-items:center}.modal-container .search-results-wrapper .result-field.result{font-style:normal;padding:0}.modal-container .search-results-wrapper .result-field.result label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1;padding:.8em;display:flex;align-items:center}.modal-container .search-results-wrapper .result-field.result label .icon{font-size:1.2em;margin-right:.4em}.modal-container .search-results-wrapper .result-field.result .impersonate-button{cursor:pointer;display:none;color:#ca7ad1cc;padding:.1em .6em;border:1px solid currentColor;border-radius:4px;background-color:#fff;flex-shrink:0;margin-block:.6em;margin-right:.8em}.modal-container .search-results-wrapper .result-field.result .impersonate-button:hover{color:#ca7ad1;background-color:#fff8}.modal-container .search-results-wrapper .result-field.result:active,.modal-container .search-results-wrapper .result-field.result.focus{background:#f2f2f2}.modal-container .search-results-wrapper .result-field.result.focus .impersonate-button{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: ImpersonateUserPipe, name: "impersonateUser" }], animations: [libHbllFadeInOut] }); }
|
|
170
171
|
}
|
|
171
172
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ImpersonateModalComponent, decorators: [{
|
|
172
173
|
type: Component,
|
|
@@ -184,4 +185,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
184
185
|
type: HostListener,
|
|
185
186
|
args: ['document:keydown', ['$event']]
|
|
186
187
|
}] } });
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2hibGwtaGVhZGVyL2ltcGVyc29uYXRlLW1vZGFsL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9pbXBlcnNvbmF0ZS1tb2RhbC9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sSUFBSSxFQUVKLE1BQU0sRUFDTixLQUFLLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBTXRELE1BQU0sT0FBTyxtQkFBbUI7SUFDNUIsU0FBUyxDQUFDLElBQTZCO1FBQ25D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QUFDO1lBQ1AseUVBQXlFO1lBQ3pFLDZCQUE2QjtZQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFGLENBQUM7SUFDTCxDQUFDO0lBa0QrQyxZQUFZLENBQUMsS0FBaUI7UUFDMUUsSUFBSyxLQUFLLENBQUMsTUFBc0IsRUFBRSxFQUFFLEtBQUssZUFBZSxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0lBMEJELFdBQVc7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7OEdBOUZRLHlCQUF5QjtrR0FBekIseUJBQXlCLHl5QkNyRHRDLDJnS0EwR0EsNjZIRDNEYyxZQUFZLDhCQUFFLG1CQUFtQix3OEJBckJsQyxtQkFBbUIsMENBeUJoQixDQUFDLGdCQUFnQixDQUFDOzsyRkFFckIseUJBQXlCO2tCQVJyQyxTQUFTO2lDQUNNLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxZQUN2RCx1QkFBdUIsY0FHckIsQ0FBQyxnQkFBZ0IsQ0FBQzs4QkFPakIsU0FBUztzQkFBckIsS0FBSztnQkFXSSxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkE2Q3lDLFlBQVk7c0JBQTNELFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTUEsYUFBYTtzQkFBMUQsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFBpcGUsXG4gICAgUGlwZVRyYW5zZm9ybSxcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbGliSGJsbEZhZGVJbk91dCB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMvYW5pbWF0aW9ucyc7XG5pbXBvcnQgdXJsY2F0IGZyb20gJ3VybGNhdCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ltcGVyc29uYXRlVXNlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGVVc2VyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybSh1c2VyOiBJbXBlcnNvbmF0ZVNlYXJjaFJlc3VsdCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt1c2VyLm5hbWV9ICgke3VzZXIubmV0SWQgfHwgJ1Vua25vd24nfSkke3VzZXIucmVzdHJpY3RlZCA/ICcg4oCUIFJlc3RyaWN0ZWQnIDogJyd9YDtcbiAgICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIEltcGVyc29uYXRlU2VhcmNoUmVzdWx0IHtcbiAgICBuZXRJZDogc3RyaW5nO1xuICAgIGluc3RpdHV0aW9uOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcHJlZmVycmVkTmFtZTogc3RyaW5nO1xuICAgIGdpdmVuTmFtZTogc3RyaW5nO1xuICAgIHN1cm5hbWU6IHN0cmluZztcbiAgICByZXN0cmljdGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBTRUFSQ0hfVVNFUlNfUEFUSCA9ICcvaW1wZXJzb25hdGUvYXBpL3NlYXJjaC8nO1xuY29uc3QgU1RBUlRfSU1QRVJTT05BVEVfUEFUSCA9ICcvaW1wZXJzb25hdGUvOnVzZXJuYW1lJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJbXBlcnNvbmF0ZVVzZXJQaXBlXSxcbiAgICBzZWxlY3RvcjogJ2xpYi1pbXBlcnNvbmF0ZS1tb2RhbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtsaWJIYmxsRmFkZUluT3V0XSxcbn0pXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIEBJbnB1dCgpIHNldCBzaG93TW9kYWwob3BlbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IG9wZW47XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICAvLyBTZXQgZm9jdXMgb24gc2VhcmNoIGlucHV0IHNob3J0bHkgYWZ0ZXIgb3BlbmVpbmcgbW9kYWwgc28gdXNlciBub3RpY2VzXG4gICAgICAgICAgICAvLyB0aGUgaW5wdXQgcmVjZWl2aW5nIGZvY3VzLlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmVyZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjc2VhcmNoSW5wdXQnKT8uZm9jdXMoKSwgMjUwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvaWRjQmFzZVVyaSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBvaWRjRGVmYXVsdElkcCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBhY2Nlc3NUb2tlbiA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgZGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgaW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHByb3RlY3RlZCBpc09wZW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgZm9ybSA9IHRoaXMuZmIubm9uTnVsbGFibGUuZ3JvdXAoe1xuICAgICAgICBzZWFyY2g6IHRoaXMuZmIuY29udHJvbCgnJywgeyB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSB9KSxcbiAgICB9KTtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRVc2VybmFtZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBsb2FkaW5nID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByb3RlY3RlZCByZXN1bHRzID0gdG9TaWduYWwoXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5zZWFyY2gudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHNlYXJjaCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNlYXJjaFN1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChoYW5kbGVTZWFyY2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VybmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2ggfHwgIWhhbmRsZVNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnNlYXJjaFVzZXJzKHNlYXJjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHByaXZhdGUgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pIG91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmlkID09PSAnbW9kYWxCYWNrZHJvcCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKSBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdFc2MnOlxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0knOlxuICAgICAgICAgICAgY2FzZSAnaSc6IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0LmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBSZWRpcmVjdCB0byBLZXljbG9hayBpbXBlcnNvbmF0ZSBwYWdlLCB3aGljaCB3aWxsIHJlZGlyZWN0IGJhY2tcbiAgICAgKiBhZnRlciBpbXBlcnNvbmF0aW9uIGJlZ2lucy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhcnRJbXBlcnNvbmF0aW9uID0gKHVzZXJuYW1lPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IF91c2VybmFtZSA9IHVzZXJuYW1lID8/IHRoaXMuc2VsZWN0ZWRVc2VybmFtZTtcbiAgICAgICAgaWYgKCFfdXNlcm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB1cmxjYXQodGhpcy5vaWRjQmFzZVVyaSgpLCBTVEFSVF9JTVBFUlNPTkFURV9QQVRILCB7XG4gICAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICAgIHJldHVyblVyaTogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAgICAgICBkZWZhdWx0SWRwOiB0aGlzLm9pZGNEZWZhdWx0SWRwKCksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlcGxhY2VVcmwodXJsKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlbGVjdFVzZXIgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VybmFtZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBjbGVhclNlYXJjaCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRm9ybVN1Ym1pdCA9IChldmVudDogU3VibWl0RXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaEtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghWydBcnJvd0Rvd24nLCAnRG93biddLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRzKCk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSB0aGlzLmVyZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjcmVzdWx0XzBgKTtcbiAgICAgICAgICAgIGZpcnN0UmVzdWx0Py5jbGljaygpO1xuICAgICAgICAgICAgZmlyc3RSZXN1bHQ/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVJlc3VsdEtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIFsnQXJyb3dVcCcsICdVcCddLmluY2x1ZGVzKGV2ZW50LmtleSkgJiZcbiAgICAgICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmlkID09PSAncmVzdWx0XzAnXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuZXJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2hJbnB1dCcpPy5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbXBlcnNvbmF0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIFNlYXJjaCBLZXljbG9hayB1c2VycyB1c2luZyBhIGdlbmVyaWMgc2VhcmNoIHF1ZXJ5LiAqL1xuICAgIHByaXZhdGUgc2VhcmNoVXNlcnMgPSAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB1cmkgPSB1cmxjYXQodGhpcy5vaWRjQmFzZVVyaSgpLCBTRUFSQ0hfVVNFUlNfUEFUSCwge1xuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEltcGVyc29uYXRlU2VhcmNoUmVzdWx0W10+KHVyaSwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VuKCl9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlcGxhY2VVcmwgPSAodXJsOiBzdHJpbmcpID0+IHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHVybCk7XG59XG4iLCJAaWYgKGlzT3Blbikge1xuICAgIDxkaXYgQGxpYkhibGxGYWRlSW5PdXQgY2xhc3M9XCJtb2RhbC13cmFwcGVyXCIgaWQ9XCJtb2RhbEJhY2tkcm9wXCIgZGF0YS10ZXN0aWQ9XCJiYWNrZHJvcFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGFpbmVyXCIgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxoMj5JbXBlcnNvbmF0ZTwvaDI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBkYXRhLXRlc3RpZD1cImNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLWNsb3NlXCI+IGNsb3NlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKHN1Ym1pdCk9XCJoYW5kbGVGb3JtU3VibWl0KCRldmVudClcIiBkYXRhLXRlc3RpZD1cInNlYXJjaEZvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Vjb25kYXJ5XCIgW2NsYXNzLmRpc2FibGVkXT1cIiFmb3JtLnZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImtleWJvYXJkLWtleVwiPkVudGVyPC9zcGFuPiB0byBzZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGZvcj1cInNlYXJjaElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pbnZhbGlkXT1cImZvcm0uaW52YWxpZCAmJiBmb3JtLmRpcnR5XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLXNlYXJjaFwiPiBzZWFyY2ggPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBwYXRyb25zLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVNlYXJjaEtleVByZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgI3NlYXJjaEJveFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoISFzZWFyY2hCb3gudmFsdWUgJiYgZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tY2hlY2ttYXJrXCI+IGNoZWNrIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNlYXJjaEJveC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsaWJIYmxsRmFkZUluT3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtcmVzdWx0cy13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICBpZD1cInJlc3VsdHNTY3JvbGxDb250YWluZXJcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlU2VsZWN0VXNlcigkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKCFsb2FkaW5nICYmIHJlc3VsdHMoKSkge1xuICAgICAgICAgICAgICAgICAgICBAZm9yICh1c2VyIG9mIHJlc3VsdHMoKTsgdHJhY2sgdXNlci5uZXRJZDsgbGV0IGlkeCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVzdWx0LWZpZWxkIHJlc3VsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZvY3VzXT1cInVzZXIudXNlcm5hbWUgPT09IHNlbGVjdGVkVXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicmVzdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCIncmVzdWx0XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mud2FybmluZ109XCJ1c2VyLnJlc3RyaWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cInNlbGVjdGVkVXNlcm5hbWUgPSB1c2VyLnVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodXNlci5yZXN0cmljdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvblwiPiB3YXJuaW5nIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvblwiPiBwZXJzb24gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cInVzZXJcIiBkYXRhLXRlc3RpZD1cInJlc3VsdFRleHRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciB8IGltcGVyc29uYXRlVXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInVzZXIudXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidyZXN1bHRfJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicmVzdWx0U2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVJlc3VsdEtleVByZXNzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImltcGVyc29uYXRlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaW1wZXJzb25hdGVCdG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RhcnRJbXBlcnNvbmF0aW9uKHVzZXIudXNlcm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcGVyc29uYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHJlc3VsdHMuIFRyeSBzZWFyY2hpbmcgYnkgTmV0IElEIG9yIEJZVSBJRC5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAobG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGliLXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1maWVsZFwiPlNvbWV0aGluZyB3ZW50IHdyb25nLiBXZSdsbCBrZWVwIHRyeWluZy48L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn1cbiJdfQ==
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2hibGwtaGVhZGVyL2ltcGVyc29uYXRlLW1vZGFsL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9pbXBlcnNvbmF0ZS1tb2RhbC9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sSUFBSSxFQUVKLE1BQU0sRUFDTixLQUFLLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBT3RELE1BQU0sT0FBTyxtQkFBbUI7SUFDNUIsU0FBUyxDQUFDLElBQTZCO1FBQ25D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Q0FBQztRQUNuQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AseUVBQXlFO1lBQ3pFLDZCQUE2QjtZQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFGLENBQUM7SUFDTCxDQUFDO0lBbUQrQyxZQUFZLENBQUMsS0FBaUI7UUFDMUUsSUFBSyxLQUFLLENBQUMsTUFBc0IsRUFBRSxFQUFFLEtBQUssZUFBZSxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0lBMEJELFdBQVc7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7OEdBL0ZRLHlCQUF5QjtrR0FBekIseUJBQXlCLDh6QkN0RHRDLDJnS0EwR0EsNjZIRDFEYyxZQUFZLDhCQUFFLG1CQUFtQix3OEJBckJsQyxtQkFBbUIsMENBeUJoQixDQUFDLGdCQUFnQixDQUFDOzsyRkFFckIseUJBQXlCO2tCQVJyQyxTQUFTO2lDQUNNLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxZQUN2RCx1QkFBdUIsY0FHckIsQ0FBQyxnQkFBZ0IsQ0FBQzs4QkFPakIsU0FBUztzQkFBckIsS0FBSztnQkFZSSxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkE2Q3lDLFlBQVk7c0JBQTNELFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTUEsYUFBYTtzQkFBMUQsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFBpcGUsXG4gICAgUGlwZVRyYW5zZm9ybSxcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbGliSGJsbEZhZGVJbk91dCB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMvYW5pbWF0aW9ucyc7XG5pbXBvcnQgdXJsY2F0IGZyb20gJ3VybGNhdCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVG9rZW5QYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL3Rva2VuLXBheWxvYWQnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ltcGVyc29uYXRlVXNlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGVVc2VyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybSh1c2VyOiBJbXBlcnNvbmF0ZVNlYXJjaFJlc3VsdCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt1c2VyLm5hbWV9ICgke3VzZXIubmV0SWQgfHwgJ1Vua25vd24nfSkke3VzZXIucmVzdHJpY3RlZCA/ICcg4oCUIFJlc3RyaWN0ZWQnIDogJyd9YDtcbiAgICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIEltcGVyc29uYXRlU2VhcmNoUmVzdWx0IHtcbiAgICBuZXRJZDogc3RyaW5nO1xuICAgIGluc3RpdHV0aW9uOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcHJlZmVycmVkTmFtZTogc3RyaW5nO1xuICAgIGdpdmVuTmFtZTogc3RyaW5nO1xuICAgIHN1cm5hbWU6IHN0cmluZztcbiAgICByZXN0cmljdGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBTRUFSQ0hfVVNFUlNfUEFUSCA9ICcvaW1wZXJzb25hdGUvYXBpL3NlYXJjaC8nO1xuY29uc3QgU1RBUlRfSU1QRVJTT05BVEVfUEFUSCA9ICcvaW1wZXJzb25hdGUvOnVzZXJuYW1lJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJbXBlcnNvbmF0ZVVzZXJQaXBlXSxcbiAgICBzZWxlY3RvcjogJ2xpYi1pbXBlcnNvbmF0ZS1tb2RhbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtsaWJIYmxsRmFkZUluT3V0XSxcbn0pXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIEBJbnB1dCgpIHNldCBzaG93TW9kYWwob3BlbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IG9wZW47XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICAvLyBTZXQgZm9jdXMgb24gc2VhcmNoIGlucHV0IHNob3J0bHkgYWZ0ZXIgb3BlbmVpbmcgbW9kYWwgc28gdXNlciBub3RpY2VzXG4gICAgICAgICAgICAvLyB0aGUgaW5wdXQgcmVjZWl2aW5nIGZvY3VzLlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmVyZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjc2VhcmNoSW5wdXQnKT8uZm9jdXMoKSwgMjUwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvaWRjQmFzZVVyaSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBvaWRjRGVmYXVsdElkcCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICAvLyBSZXF1aXJlIGFuIG9iamVjdCBoZXJlIHNvIHRoYXQgYWNjZXNzIHRva2VucyBhcmUgbm90IHZpc2libGUvZXh0cmFjdGFibGUgZnJvbSB0aGUgRE9NIGluIGNvbnN1bWluZyBhcHBsaWNhdGlvbnMuIEluc3RlYWQgdGhleSBhcmUgb25seSBzdG9yZWQgaW4gbWVtb3J5LlxuICAgIGFjY2Vzc1Rva2VuUGF5bG9hZCA9IGlucHV0LnJlcXVpcmVkPFRva2VuUGF5bG9hZD4oKTtcbiAgICBAT3V0cHV0KCkgZGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgaW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHByb3RlY3RlZCBpc09wZW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgZm9ybSA9IHRoaXMuZmIubm9uTnVsbGFibGUuZ3JvdXAoe1xuICAgICAgICBzZWFyY2g6IHRoaXMuZmIuY29udHJvbCgnJywgeyB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSB9KSxcbiAgICB9KTtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRVc2VybmFtZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBsb2FkaW5nID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByb3RlY3RlZCByZXN1bHRzID0gdG9TaWduYWwoXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5zZWFyY2gudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHNlYXJjaCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNlYXJjaFN1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChoYW5kbGVTZWFyY2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VybmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2ggfHwgIWhhbmRsZVNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnNlYXJjaFVzZXJzKHNlYXJjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHByaXZhdGUgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pIG91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmlkID09PSAnbW9kYWxCYWNrZHJvcCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKSBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdFc2MnOlxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0knOlxuICAgICAgICAgICAgY2FzZSAnaSc6IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0LmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBSZWRpcmVjdCB0byBLZXljbG9hayBpbXBlcnNvbmF0ZSBwYWdlLCB3aGljaCB3aWxsIHJlZGlyZWN0IGJhY2tcbiAgICAgKiBhZnRlciBpbXBlcnNvbmF0aW9uIGJlZ2lucy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhcnRJbXBlcnNvbmF0aW9uID0gKHVzZXJuYW1lPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IF91c2VybmFtZSA9IHVzZXJuYW1lID8/IHRoaXMuc2VsZWN0ZWRVc2VybmFtZTtcbiAgICAgICAgaWYgKCFfdXNlcm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB1cmxjYXQodGhpcy5vaWRjQmFzZVVyaSgpLCBTVEFSVF9JTVBFUlNPTkFURV9QQVRILCB7XG4gICAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICAgIHJldHVyblVyaTogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAgICAgICBkZWZhdWx0SWRwOiB0aGlzLm9pZGNEZWZhdWx0SWRwKCksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlcGxhY2VVcmwodXJsKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlbGVjdFVzZXIgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VybmFtZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBjbGVhclNlYXJjaCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRm9ybVN1Ym1pdCA9IChldmVudDogU3VibWl0RXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaEtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghWydBcnJvd0Rvd24nLCAnRG93biddLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRzKCk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSB0aGlzLmVyZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjcmVzdWx0XzBgKTtcbiAgICAgICAgICAgIGZpcnN0UmVzdWx0Py5jbGljaygpO1xuICAgICAgICAgICAgZmlyc3RSZXN1bHQ/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVJlc3VsdEtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIFsnQXJyb3dVcCcsICdVcCddLmluY2x1ZGVzKGV2ZW50LmtleSkgJiZcbiAgICAgICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmlkID09PSAncmVzdWx0XzAnXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuZXJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2hJbnB1dCcpPy5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbXBlcnNvbmF0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIFNlYXJjaCBLZXljbG9hayB1c2VycyB1c2luZyBhIGdlbmVyaWMgc2VhcmNoIHF1ZXJ5LiAqL1xuICAgIHByaXZhdGUgc2VhcmNoVXNlcnMgPSAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB1cmkgPSB1cmxjYXQodGhpcy5vaWRjQmFzZVVyaSgpLCBTRUFSQ0hfVVNFUlNfUEFUSCwge1xuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEltcGVyc29uYXRlU2VhcmNoUmVzdWx0W10+KHVyaSwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VuUGF5bG9hZCgpLnRva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZXBsYWNlVXJsID0gKHVybDogc3RyaW5nKSA9PiB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpO1xufVxuIiwiQGlmIChpc09wZW4pIHtcbiAgICA8ZGl2IEBsaWJIYmxsRmFkZUluT3V0IGNsYXNzPVwibW9kYWwtd3JhcHBlclwiIGlkPVwibW9kYWxCYWNrZHJvcFwiIGRhdGEtdGVzdGlkPVwiYmFja2Ryb3BcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRhaW5lclwiIGRhdGEtdGVzdGlkPVwibW9kYWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDI+SW1wZXJzb25hdGU8L2gyPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZSgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgZGF0YS10ZXN0aWQ9XCJjbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1jbG9zZVwiPiBjbG9zZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwiaGFuZGxlRm9ybVN1Ym1pdCgkZXZlbnQpXCIgZGF0YS10ZXN0aWQ9XCJzZWFyY2hGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY29uZGFyeVwiIFtjbGFzcy5kaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrZXlib2FyZC1rZXlcIj5FbnRlcjwvc3Bhbj4gdG8gc2VhcmNoXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaW52YWxpZF09XCJmb3JtLmludmFsaWQgJiYgZm9ybS5kaXJ0eVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1zZWFyY2hcIj4gc2VhcmNoIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNlYXJjaElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggcGF0cm9ucy4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVTZWFyY2hLZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNzZWFyY2hCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCEhc2VhcmNoQm94LnZhbHVlICYmIGZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLWNoZWNrbWFya1wiPiBjaGVjayA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzZWFyY2hCb3gudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGliSGJsbEZhZGVJbk91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLWNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLXJlc3VsdHMtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXN1bHRzU2Nyb2xsQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVNlbGVjdFVzZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmICghbG9hZGluZyAmJiByZXN1bHRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAodXNlciBvZiByZXN1bHRzKCk7IHRyYWNrIHVzZXIubmV0SWQ7IGxldCBpZHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc3VsdC1maWVsZCByZXN1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mb2N1c109XCJ1c2VyLnVzZXJuYW1lID09PSBzZWxlY3RlZFVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlc3VsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ3Jlc3VsdF8nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLndhcm5pbmddPVwidXNlci5yZXN0cmljdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJzZWxlY3RlZFVzZXJuYW1lID0gdXNlci51c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHVzZXIucmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gd2FybmluZyA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gcGVyc29uIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJ1c2VyXCIgZGF0YS10ZXN0aWQ9XCJyZXN1bHRUZXh0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgfCBpbXBlcnNvbmF0ZVVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ1c2VyLnVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCIncmVzdWx0XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlc3VsdFNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVSZXN1bHRLZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbXBlcnNvbmF0ZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImltcGVyc29uYXRlQnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0SW1wZXJzb25hdGlvbih1c2VyLnVzZXJuYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBlcnNvbmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZXN1bHRzLiBUcnkgc2VhcmNoaW5nIGJ5IE5ldCBJRCBvciBCWVUgSUQuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYi1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtZmllbGRcIj5Tb21ldGhpbmcgd2VudCB3cm9uZy4gV2UnbGwga2VlcCB0cnlpbmcuPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1ob3Vycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9tb2RlbHMvbGlicmFyeS1ob3Vycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBMaWJyYXJ5SG91cnMge1xuICAgIGRhdGU6IHN0cmluZztcbiAgICBpc19jbG9zZWQ6IGJvb2xlYW47XG4gICAgb3Blbl90aW1lOiBzdHJpbmc7XG4gICAgY2xvc2VfdGltZTogc3RyaW5nO1xuICAgIGhhc19leGNlcHRpb246IGJvb2xlYW47XG4gICAgZXhjZXB0aW9uX3RpdGxlOiBzdHJpbmc7XG4gICAgZXhjZXB0aW9uX21lc3NhZ2U6IHN0cmluZztcbiAgICBpc19jdXJyZW50bHlfb3BlbjogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9tb2RlbHMvdG9rZW4tcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUb2tlblBheWxvYWQge1xuICAgIHRva2VuOiBzdHJpbmc7XG59XG4iXX0=
|