@esfaenza/core 15.2.294 → 15.2.296
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/components/sidebar/sidebar.component.d.ts +5 -3
- package/esm2020/components/sidebar/sidebar.component.mjs +15 -11
- package/esm2020/directives/es-routerLink/es-routerLink.directive.mjs +2 -2
- package/esm2020/lib/app.component.mjs +2 -2
- package/fesm2015/esfaenza-core-components.mjs +34 -30
- package/fesm2015/esfaenza-core-components.mjs.map +1 -1
- package/fesm2015/esfaenza-core-directives.mjs +1 -1
- package/fesm2015/esfaenza-core-directives.mjs.map +1 -1
- package/fesm2015/esfaenza-core.mjs +2 -2
- package/fesm2015/esfaenza-core.mjs.map +1 -1
- package/fesm2020/esfaenza-core-components.mjs +34 -30
- package/fesm2020/esfaenza-core-components.mjs.map +1 -1
- package/fesm2020/esfaenza-core-directives.mjs +1 -1
- package/fesm2020/esfaenza-core-directives.mjs.map +1 -1
- package/fesm2020/esfaenza-core.mjs +2 -2
- package/fesm2020/esfaenza-core.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -3,13 +3,14 @@ import { Router } from "@angular/router";
|
|
|
3
3
|
import { LocalizationService } from "@esfaenza/localizations";
|
|
4
4
|
import { ApplicationMenu, SearchResult, SearchResultContainer } from "@esfaenza/core/domain";
|
|
5
5
|
import { AppState, GlobalSearchService, MenuFilteringService, TokenService, UserPreferencesService } from "@esfaenza/core/services";
|
|
6
|
-
import { MessageService, UtilityService } from "@esfaenza/extensions";
|
|
6
|
+
import { AppEmbeddingExtensions, MessageService, UtilityService } from "@esfaenza/extensions";
|
|
7
7
|
import { AccessControlService } from "@esfaenza/access-control";
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export declare class Sidebar {
|
|
10
10
|
lc: LocalizationService;
|
|
11
11
|
private cdr;
|
|
12
12
|
private _elementRef;
|
|
13
|
+
private emb;
|
|
13
14
|
private _router;
|
|
14
15
|
_state: AppState;
|
|
15
16
|
private zone;
|
|
@@ -33,10 +34,11 @@ export declare class Sidebar {
|
|
|
33
34
|
user: string;
|
|
34
35
|
tenant: string;
|
|
35
36
|
sidebar: ElementRef;
|
|
36
|
-
constructor(lc: LocalizationService, lcMenu: Type<LocalizationService>, cdr: ChangeDetectorRef, _elementRef: ElementRef, _router: Router, _state: AppState, zone: NgZone, utiExts: UtilityService, aac: AccessControlService, menuItemsRaw: ApplicationMenu[], menuFilteringService: MenuFilteringService, sr: TokenService, globalSearchService: GlobalSearchService, profile: UserPreferencesService, msgExts: MessageService);
|
|
37
|
+
constructor(lc: LocalizationService, lcMenu: Type<LocalizationService>, cdr: ChangeDetectorRef, _elementRef: ElementRef, emb: AppEmbeddingExtensions, _router: Router, _state: AppState, zone: NgZone, utiExts: UtilityService, aac: AccessControlService, menuItemsRaw: ApplicationMenu[], menuFilteringService: MenuFilteringService, sr: TokenService, globalSearchService: GlobalSearchService, profile: UserPreferencesService, msgExts: MessageService);
|
|
37
38
|
ngOnInit(): Promise<void>;
|
|
38
39
|
private getMenuItems;
|
|
39
40
|
private checkSubMenuOverClaims;
|
|
41
|
+
onMenuNavigation(item: ApplicationMenu): void;
|
|
40
42
|
onWindowResize(): void;
|
|
41
43
|
private _shouldMenuCollapse;
|
|
42
44
|
menuCollapse(): void;
|
|
@@ -59,6 +61,6 @@ export declare class Sidebar {
|
|
|
59
61
|
onSearchModelChanged(): void;
|
|
60
62
|
closeSearch(): void;
|
|
61
63
|
FilterSearchResults(item?: SearchResult): void;
|
|
62
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<Sidebar, [null, { optional: true; }, null, null, null, null, null, null, null, null, null, null, null, null, null]>;
|
|
64
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<Sidebar, [null, { optional: true; }, null, null, null, null, null, null, null, null, null, null, null, null, null, null]>;
|
|
63
65
|
static ɵcmp: i0.ɵɵComponentDeclaration<Sidebar, "sidebar", never, {}, {}, never, never, true, never>;
|
|
64
66
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Angular
|
|
2
2
|
import { ChangeDetectionStrategy, Component, HostListener, Inject, Optional, ViewChild, ViewEncapsulation } from "@angular/core";
|
|
3
3
|
import { NavigationEnd, RouterLinkActive, RouterLink } from "@angular/router";
|
|
4
|
-
import {
|
|
4
|
+
import { NgFor, NgTemplateOutlet, NgIf } from "@angular/common";
|
|
5
5
|
// Configurazioni
|
|
6
6
|
import { LocalizationService, LocalizationModule } from "@esfaenza/localizations";
|
|
7
7
|
// EsFaenza
|
|
@@ -14,17 +14,18 @@ import { FormsModule } from "@angular/forms";
|
|
|
14
14
|
import { SideBarLoc } from "./sidebar.component.loc";
|
|
15
15
|
import * as i0 from "@angular/core";
|
|
16
16
|
import * as i1 from "@esfaenza/localizations";
|
|
17
|
-
import * as i2 from "@
|
|
18
|
-
import * as i3 from "@
|
|
19
|
-
import * as i4 from "@esfaenza/
|
|
17
|
+
import * as i2 from "@esfaenza/extensions";
|
|
18
|
+
import * as i3 from "@angular/router";
|
|
19
|
+
import * as i4 from "@esfaenza/core/services";
|
|
20
20
|
import * as i5 from "@esfaenza/access-control";
|
|
21
21
|
import * as i6 from "@angular/forms";
|
|
22
22
|
import * as i7 from "@esfaenza/es-table";
|
|
23
23
|
export class Sidebar {
|
|
24
|
-
constructor(lc, lcMenu, cdr, _elementRef, _router, _state, zone, utiExts, aac, menuItemsRaw, menuFilteringService, sr, globalSearchService, profile, msgExts) {
|
|
24
|
+
constructor(lc, lcMenu, cdr, _elementRef, emb, _router, _state, zone, utiExts, aac, menuItemsRaw, menuFilteringService, sr, globalSearchService, profile, msgExts) {
|
|
25
25
|
this.lc = lc;
|
|
26
26
|
this.cdr = cdr;
|
|
27
27
|
this._elementRef = _elementRef;
|
|
28
|
+
this.emb = emb;
|
|
28
29
|
this._router = _router;
|
|
29
30
|
this._state = _state;
|
|
30
31
|
this.zone = zone;
|
|
@@ -99,6 +100,9 @@ export class Sidebar {
|
|
|
99
100
|
this.checkSubMenuOverClaims(t, level + 1);
|
|
100
101
|
}
|
|
101
102
|
}
|
|
103
|
+
onMenuNavigation(item) {
|
|
104
|
+
this.emb.MessageObserver.next({ event: "menu-navigation", data: item });
|
|
105
|
+
}
|
|
102
106
|
//#region JQuery
|
|
103
107
|
onWindowResize() {
|
|
104
108
|
var isMenuShouldCollapsed = this._shouldMenuCollapse();
|
|
@@ -263,24 +267,24 @@ export class Sidebar {
|
|
|
263
267
|
});
|
|
264
268
|
}
|
|
265
269
|
}
|
|
266
|
-
Sidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Sidebar, deps: [{ token: i1.LocalizationService }, { token: MENU_LOCALIZATION, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i2.
|
|
267
|
-
Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: Sidebar, isStandalone: true, selector: "sidebar", host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "sidebar", first: true, predicate: ["sidebar"], descendants: true, static: true }], ngImport: i0, template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <ng-container *ngIf=\"!isMenuCollapsed\">\r\n <img class=\"app-logo-img\" src=\"assets/img/logo/headlogo_small.png\" alt=\"\">\r\n <div class=\"app-logo-font-container\">\r\n <span class=\"app-logo-font\">{{applicationName}}</span>\r\n </div>\r\n </ng-container>\r\n \r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/headlogo_small.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <!--Ricerca globale-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight + (isMenuCollapsed ? 55 : 0)}\">\r\n <ng-container *ngFor=\"let item of menuItems; let last = last;\">\r\n <li *ngIf=\"item.visible\" class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\"\r\n [class.has-sub-menu]=\"item.subMenu\" \r\n [class.sidebar-item-expanded]=\"item.expanded\"\r\n [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: item }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer *ngIf=\"!isMenuCollapsed\"-->\r\n <div class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div [style.padding.px]=\"isMenuCollapsed ? 5 : 15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\" [style.display]=\"isMenuCollapsed ? 'inline' : 'flex'\">\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\" [style.margin-top.px]=\"isMenuCollapsed ? 10 : 0\"><i class=\"far fa-right-left\"></i><span *ngIf=\"!isMenuCollapsed\"> Cambia Tenant</span></div>\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\" [style.margin-top.px]=\"isMenuCollapsed ? 10 : 0\"><i class=\"far fa-right-from-bracket\"></i><span *ngIf=\"!isMenuCollapsed\"> Logout</span></div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link || '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <ng-container *ngFor=\"let subitem of item.subMenu\" >\r\n <li *ngIf=\"subitem.visible\" class=\"sidebar-sublist-item level-{{item.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: [".app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#3e4d64}.sidebar-sublist .level-1{background-color:#364357}.sidebar-sublist .level-2{background-color:#2e3a4b}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:\"Font Awesome 6 Pro\";content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#024a88;position:absolute;top:-90px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#677ea1!important}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff;padding:10px 0 0 15px}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-font{color:#fffac2;font-family:Work Sans;font-size:15px;line-height:1;text-transform:uppercase;font-weight:700;padding-left:5px;padding-bottom:2px;overflow:hidden}.app-logo-font-container{display:inline-block;vertical-align:bottom;width:calc(var(--sidebar-width) - 70px);margin:0;height:auto;overflow:hidden}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fff;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}.app-sidebar.menu-collapsed .app-sidebar-footer-op{display:block;padding-left:12px;padding-top:5px;margin:0;width:16px}\n"], dependencies: [{ kind: "directive", type: SlimScroll, selector: "[slim-scroll]", inputs: ["slimScrollOptions"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: EsTableModule }, { kind: "component", type: i7.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: SideBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
270
|
+
Sidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Sidebar, deps: [{ token: i1.LocalizationService }, { token: MENU_LOCALIZATION, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i2.AppEmbeddingExtensions }, { token: i3.Router }, { token: i4.AppState }, { token: i0.NgZone }, { token: i2.UtilityService }, { token: i5.AccessControlService }, { token: MENU }, { token: i4.MenuFilteringService }, { token: i4.TokenService }, { token: i4.GlobalSearchService }, { token: i4.UserPreferencesService }, { token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
271
|
+
Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: Sidebar, isStandalone: true, selector: "sidebar", host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "sidebar", first: true, predicate: ["sidebar"], descendants: true, static: true }], ngImport: i0, template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <ng-container *ngIf=\"!isMenuCollapsed\">\r\n <img class=\"app-logo-img\" src=\"assets/img/logo/headlogo_small.png\" alt=\"\">\r\n <div class=\"app-logo-font-container\">\r\n <span class=\"app-logo-font\">{{applicationName}}</span>\r\n </div>\r\n </ng-container>\r\n \r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/headlogo_small.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <!--Ricerca globale-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight + (isMenuCollapsed ? 55 : 0)}\">\r\n <ng-container *ngFor=\"let item of menuItems; let last = last;\">\r\n <li *ngIf=\"item.visible\" class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\"\r\n [class.has-sub-menu]=\"item.subMenu\" \r\n [class.sidebar-item-expanded]=\"item.expanded\"\r\n [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: item }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer *ngIf=\"!isMenuCollapsed\"-->\r\n <div class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div [style.padding.px]=\"isMenuCollapsed ? 5 : 15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\" [style.display]=\"isMenuCollapsed ? 'inline' : 'flex'\">\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\" [style.margin-top.px]=\"isMenuCollapsed ? 10 : 0\"><i class=\"far fa-right-left\"></i><span *ngIf=\"!isMenuCollapsed\"> Cambia Tenant</span></div>\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\" [style.margin-top.px]=\"isMenuCollapsed ? 10 : 0\"><i class=\"far fa-right-from-bracket\"></i><span *ngIf=\"!isMenuCollapsed\"> Logout</span></div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link || '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item); onMenuNavigation(item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <ng-container *ngFor=\"let subitem of item.subMenu\" >\r\n <li *ngIf=\"subitem.visible\" class=\"sidebar-sublist-item level-{{item.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: [".app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#3e4d64}.sidebar-sublist .level-1{background-color:#364357}.sidebar-sublist .level-2{background-color:#2e3a4b}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:\"Font Awesome 6 Pro\";content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#024a88;position:absolute;top:-90px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#677ea1!important}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff;padding:10px 0 0 15px}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-font{color:#fffac2;font-family:Work Sans;font-size:15px;line-height:1;text-transform:uppercase;font-weight:700;padding-left:5px;padding-bottom:2px;overflow:hidden}.app-logo-font-container{display:inline-block;vertical-align:bottom;width:calc(var(--sidebar-width) - 70px);margin:0;height:auto;overflow:hidden}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fff;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}.app-sidebar.menu-collapsed .app-sidebar-footer-op{display:block;padding-left:12px;padding-top:5px;margin:0;width:16px}\n"], dependencies: [{ kind: "directive", type: SlimScroll, selector: "[slim-scroll]", inputs: ["slimScrollOptions"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: EsTableModule }, { kind: "component", type: i7.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: SideBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
268
272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Sidebar, decorators: [{
|
|
269
273
|
type: Component,
|
|
270
|
-
args: [{ selector: "sidebar", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: LocalizationService, useClass: SideBarLoc }], standalone: true, imports: [NgClass, SlimScroll, NgFor, NgTemplateOutlet, NgIf, RouterLinkActive, RouterLink, FormsModule, EsTableModule, LocalizationModule], template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <ng-container *ngIf=\"!isMenuCollapsed\">\r\n <img class=\"app-logo-img\" src=\"assets/img/logo/headlogo_small.png\" alt=\"\">\r\n <div class=\"app-logo-font-container\">\r\n <span class=\"app-logo-font\">{{applicationName}}</span>\r\n </div>\r\n </ng-container>\r\n \r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/headlogo_small.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <!--Ricerca globale-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight + (isMenuCollapsed ? 55 : 0)}\">\r\n <ng-container *ngFor=\"let item of menuItems; let last = last;\">\r\n <li *ngIf=\"item.visible\" class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\"\r\n [class.has-sub-menu]=\"item.subMenu\" \r\n [class.sidebar-item-expanded]=\"item.expanded\"\r\n [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: item }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer *ngIf=\"!isMenuCollapsed\"-->\r\n <div class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div [style.padding.px]=\"isMenuCollapsed ? 5 : 15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\" [style.display]=\"isMenuCollapsed ? 'inline' : 'flex'\">\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\" [style.margin-top.px]=\"isMenuCollapsed ? 10 : 0\"><i class=\"far fa-right-left\"></i><span *ngIf=\"!isMenuCollapsed\"> Cambia Tenant</span></div>\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\" [style.margin-top.px]=\"isMenuCollapsed ? 10 : 0\"><i class=\"far fa-right-from-bracket\"></i><span *ngIf=\"!isMenuCollapsed\"> Logout</span></div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link || '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <ng-container *ngFor=\"let subitem of item.subMenu\" >\r\n <li *ngIf=\"subitem.visible\" class=\"sidebar-sublist-item level-{{item.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: [".app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#3e4d64}.sidebar-sublist .level-1{background-color:#364357}.sidebar-sublist .level-2{background-color:#2e3a4b}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:\"Font Awesome 6 Pro\";content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#024a88;position:absolute;top:-90px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#677ea1!important}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff;padding:10px 0 0 15px}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-font{color:#fffac2;font-family:Work Sans;font-size:15px;line-height:1;text-transform:uppercase;font-weight:700;padding-left:5px;padding-bottom:2px;overflow:hidden}.app-logo-font-container{display:inline-block;vertical-align:bottom;width:calc(var(--sidebar-width) - 70px);margin:0;height:auto;overflow:hidden}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fff;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}.app-sidebar.menu-collapsed .app-sidebar-footer-op{display:block;padding-left:12px;padding-top:5px;margin:0;width:16px}\n"] }]
|
|
274
|
+
args: [{ selector: "sidebar", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: LocalizationService, useClass: SideBarLoc }], standalone: true, imports: [SlimScroll, NgFor, NgTemplateOutlet, NgIf, RouterLinkActive, RouterLink, FormsModule, EsTableModule, LocalizationModule], template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <ng-container *ngIf=\"!isMenuCollapsed\">\r\n <img class=\"app-logo-img\" src=\"assets/img/logo/headlogo_small.png\" alt=\"\">\r\n <div class=\"app-logo-font-container\">\r\n <span class=\"app-logo-font\">{{applicationName}}</span>\r\n </div>\r\n </ng-container>\r\n \r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/headlogo_small.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <!--Ricerca globale-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight + (isMenuCollapsed ? 55 : 0)}\">\r\n <ng-container *ngFor=\"let item of menuItems; let last = last;\">\r\n <li *ngIf=\"item.visible\" class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\"\r\n [class.has-sub-menu]=\"item.subMenu\" \r\n [class.sidebar-item-expanded]=\"item.expanded\"\r\n [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: item }\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer *ngIf=\"!isMenuCollapsed\"-->\r\n <div class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div [style.padding.px]=\"isMenuCollapsed ? 5 : 15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\" [style.display]=\"isMenuCollapsed ? 'inline' : 'flex'\">\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\" [style.margin-top.px]=\"isMenuCollapsed ? 10 : 0\"><i class=\"far fa-right-left\"></i><span *ngIf=\"!isMenuCollapsed\"> Cambia Tenant</span></div>\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\" [style.margin-top.px]=\"isMenuCollapsed ? 10 : 0\"><i class=\"far fa-right-from-bracket\"></i><span *ngIf=\"!isMenuCollapsed\"> Logout</span></div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link || '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item); onMenuNavigation(item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <ng-container *ngFor=\"let subitem of item.subMenu\" >\r\n <li *ngIf=\"subitem.visible\" class=\"sidebar-sublist-item level-{{item.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: [".app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#3e4d64}.sidebar-sublist .level-1{background-color:#364357}.sidebar-sublist .level-2{background-color:#2e3a4b}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:\"Font Awesome 6 Pro\";content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#024a88;position:absolute;top:-90px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#677ea1!important}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff;padding:10px 0 0 15px}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-font{color:#fffac2;font-family:Work Sans;font-size:15px;line-height:1;text-transform:uppercase;font-weight:700;padding-left:5px;padding-bottom:2px;overflow:hidden}.app-logo-font-container{display:inline-block;vertical-align:bottom;width:calc(var(--sidebar-width) - 70px);margin:0;height:auto;overflow:hidden}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fff;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}.app-sidebar.menu-collapsed .app-sidebar-footer-op{display:block;padding-left:12px;padding-top:5px;margin:0;width:16px}\n"] }]
|
|
271
275
|
}], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Type, decorators: [{
|
|
272
276
|
type: Optional
|
|
273
277
|
}, {
|
|
274
278
|
type: Inject,
|
|
275
279
|
args: [MENU_LOCALIZATION]
|
|
276
|
-
}] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i2.
|
|
280
|
+
}] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i2.AppEmbeddingExtensions }, { type: i3.Router }, { type: i4.AppState }, { type: i0.NgZone }, { type: i2.UtilityService }, { type: i5.AccessControlService }, { type: undefined, decorators: [{
|
|
277
281
|
type: Inject,
|
|
278
282
|
args: [MENU]
|
|
279
|
-
}] }, { type:
|
|
283
|
+
}] }, { type: i4.MenuFilteringService }, { type: i4.TokenService }, { type: i4.GlobalSearchService }, { type: i4.UserPreferencesService }, { type: i2.MessageService }]; }, propDecorators: { sidebar: [{
|
|
280
284
|
type: ViewChild,
|
|
281
285
|
args: ["sidebar", { static: true }]
|
|
282
286
|
}], onWindowResize: [{
|
|
283
287
|
type: HostListener,
|
|
284
288
|
args: ["window:resize"]
|
|
285
289
|
}] } });
|
|
286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQVEsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlLLE9BQU8sRUFBRSxhQUFhLEVBQVUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekUsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxGLFdBQVc7QUFDWCxPQUFPLEVBQStCLElBQUksRUFBRSxpQkFBaUIsRUFBdUMsTUFBTSx1QkFBdUIsQ0FBQztBQUlsSSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsV0FBVztBQUNYLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7OztBQWVyRCxNQUFNLE9BQU8sT0FB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QkEwRS9CLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBOZ1pvbmUsIE9wdGlvbmFsLCBUeXBlLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJMaW5rQWN0aXZlLCBSb3V0ZXJMaW5rIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ0ZvciwgTmdUZW1wbGF0ZU91dGxldCwgTmdJZiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UsIExvY2FsaXphdGlvbk1vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gRXNGYWVuemFcclxuaW1wb3J0IHsgQXBwbGljYXRpb25NZW51LCBFbnZPcHRpb25zLCBNRU5VLCBNRU5VX0xPQ0FMSVpBVElPTiwgU2VhcmNoUmVzdWx0LCBTZWFyY2hSZXN1bHRDb250YWluZXIgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCI7XHJcbmltcG9ydCB7IEFwcFN0YXRlLCBHbG9iYWxTZWFyY2hTZXJ2aWNlLCBNZW51RmlsdGVyaW5nU2VydmljZSwgVG9rZW5TZXJ2aWNlLCBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL3NlcnZpY2VzXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvYWNjZXNzLWNvbnRyb2xcIjtcclxuaW1wb3J0IHsgU2xpbVNjcm9sbCB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kaXJlY3RpdmVzXCI7XHJcblxyXG4vLyBMaWJyZXJpZVxyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbiwgRXNUYWJsZU1vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvZXMtdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU2lkZUJhckxvYyB9IGZyb20gXCIuL3NpZGViYXIuY29tcG9uZW50LmxvY1wiO1xyXG5cclxuZGVjbGFyZSB2YXIgbXljb25maWc6IEVudk9wdGlvbnM7XHJcbmRlY2xhcmUgdmFyIGpRdWVyeTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwic2lkZWJhclwiLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL3NpZGViYXIuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3NpZGViYXIuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBTaWRlQmFyTG9jIH1dLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0NsYXNzLCBTbGltU2Nyb2xsLCBOZ0ZvciwgTmdUZW1wbGF0ZU91dGxldCwgTmdJZiwgUm91dGVyTGlua0FjdGl2ZSwgUm91dGVyTGluaywgRm9ybXNNb2R1bGUsIEVzVGFibGVNb2R1bGUsIExvY2FsaXphdGlvbk1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNpZGViYXIge1xyXG4gICAgcHVibGljIG1lbnVJdGVtczogQXJyYXk8YW55PjtcclxuICAgIHB1YmxpYyBtZW51SGVpZ2h0OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgaXNNZW51Q29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNNZW51U2hvdWxkQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHNob3dIb3ZlckVsZW06IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaG92ZXJFbGVtSGVpZ2h0OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgaG92ZXJFbGVtVG9wOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGFwcGxpY2F0aW9uVmVyc2lvbiA9IG15Y29uZmlnLkFwcERhdGEuQ29tcG9uZW50VmVyc2lvbjtcclxuICAgIHB1YmxpYyBhcHBsaWNhdGlvbk5hbWUgPSBteWNvbmZpZy5BcHBEYXRhLk1vZHVsZURlc2NyaXB0aW9uO1xyXG4gICAgcHVibGljIHVzZXIgPSBcIlwiO1xyXG4gICAgcHVibGljIHRlbmFudCA9IFwiXCI7XHJcblxyXG4gICAgQFZpZXdDaGlsZChcInNpZGViYXJcIiwgeyBzdGF0aWM6IHRydWUgfSkgc2lkZWJhcjogRWxlbWVudFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIEBPcHRpb25hbCgpIEBJbmplY3QoTUVOVV9MT0NBTElaQVRJT04pIGxjTWVudTogVHlwZTxMb2NhbGl6YXRpb25TZXJ2aWNlPiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLCBwdWJsaWMgX3N0YXRlOiBBcHBTdGF0ZSwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsIHByaXZhdGUgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgYWFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQEluamVjdChNRU5VKSBwcml2YXRlIG1lbnVJdGVtc1JhdzogQXBwbGljYXRpb25NZW51W10sXHJcbiAgICAgICAgcHJpdmF0ZSBtZW51RmlsdGVyaW5nU2VydmljZTogTWVudUZpbHRlcmluZ1NlcnZpY2UsIHB1YmxpYyBzcjogVG9rZW5TZXJ2aWNlLCBwdWJsaWMgZ2xvYmFsU2VhcmNoU2VydmljZTogR2xvYmFsU2VhcmNoU2VydmljZSwgcHVibGljIHByb2ZpbGU6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsIHByaXZhdGUgbXNnRXh0czogTWVzc2FnZVNlcnZpY2UpIHtcclxuXHJcbiAgICAgICAgdGhpcy5sYyA9IHRoaXMubGMuZ2VuZXJhdGVGcm9tVHlwZShsY01lbnUpO1xyXG5cclxuICAgICAgICB0aGlzLl9zdGF0ZS5zdWJzY3JpYmUoXCJtZW51LmlzQ29sbGFwc2VkXCIsIChpc0NvbGxhcHNlZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzTWVudUNvbGxhcHNlZCA9IGlzQ29sbGFwc2VkO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhdGUuc3Vic2NyaWJlKFwiYXBwbGljYXRpb24uRGVwbG95QXZhaWxhYmxlXCIsIChhdmFpbGFibGU6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSlcclxuICAgICAgICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgd2lkdGggPSAod2luZG93LmlubmVyV2lkdGggPiAwKSA/IHdpbmRvdy5pbm5lcldpZHRoIDogc2NyZWVuLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgaWYgKHdpZHRoIDw9IDc2OClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5ub3RpZnlEYXRhQ2hhbmdlZChcIm1lbnUuaXNDb2xsYXBzZWRcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRVc2VyUHJvZmlsZURhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgbGV0IHRtcE1lbnVJdGVtcyA9IHRoaXMuZ2V0TWVudUl0ZW1zKCk7XHJcbiAgICAgICAgdGhpcy5tZW51SXRlbXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm1lbnVGaWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcih0bXBNZW51SXRlbXMpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZE1lbnVDb2xsYXBzZSgpKVxyXG4gICAgICAgICAgICB0aGlzLm1lbnVDb2xsYXBzZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNpZGViYXJIZWlnaHQoKTtcclxuICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTaWRlYmFyV2lkdGgodGhpcy5zaWRlYmFyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TWVudUl0ZW1zKCk6IEFwcGxpY2F0aW9uTWVudVtdIHtcclxuICAgICAgICBsZXQgbWVudXMgPSB0aGlzLnV0aUV4dHMuZGVlcENsb25lKHRoaXMubWVudUl0ZW1zUmF3KTtcclxuXHJcbiAgICAgICAgLy8gR2lybyAxIGFzc2Vnbm8gaWwgbGl2ZWxsbyBhaSByb290XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW51cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdCA9IG1lbnVzW2ldIGFzIGFueTtcclxuICAgICAgICAgICAgdC5sZXZlbCA9IDE7XHJcbiAgICAgICAgICAgIHQucGFkZGluZ19sZWZ0ID0gMTg7XHJcbiAgICAgICAgICAgIHQudmlzaWJsZSA9ICF0LmFjIHx8IHRoaXMuYWFjLmhhcyh0LmFjKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdpcm8gcmljb3JzaXZvXHJcbiAgICAgICAgICAgIGlmICh0LnN1Yk1lbnUgJiYgdC5zdWJNZW51Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrU3ViTWVudU92ZXJDbGFpbXModCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWVudXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1N1Yk1lbnVPdmVyQ2xhaW1zKG1lbnVJdGVtOiBBcHBsaWNhdGlvbk1lbnUsIGxldmVsOiBudW1iZXIpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtLnN1Yk1lbnUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHQgPSBtZW51SXRlbS5zdWJNZW51W2ldIGFzIGFueTtcclxuICAgICAgICAgICAgdC5sZXZlbCA9IGxldmVsICsgMTtcclxuICAgICAgICAgICAgdC52aXNpYmxlID0gIXQuYWMgfHwgdGhpcy5hYWMuaGFzKHQuYWMpO1xyXG4gICAgICAgICAgICB0LnBhZGRpbmdfbGVmdCA9IHQubGV2ZWwgKiAxODtcclxuICAgICAgICAgICAgaWYgKHQuc3ViTWVudSAmJiB0LnN1Yk1lbnUubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTdWJNZW51T3ZlckNsYWltcyh0LCBsZXZlbCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyNyZWdpb24gSlF1ZXJ5XHJcbiAgICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxyXG4gICAgcHVibGljIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xyXG4gICAgICAgIHZhciBpc01lbnVTaG91bGRDb2xsYXBzZWQgPSB0aGlzLl9zaG91bGRNZW51Q29sbGFwc2UoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNNZW51U2hvdWxkQ29sbGFwc2VkICE9PSBpc01lbnVTaG91bGRDb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51Q29sbGFwc2VTdGF0ZUNoYW5nZShpc01lbnVTaG91bGRDb2xsYXBzZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTWVudVNob3VsZENvbGxhcHNlZCA9IGlzTWVudVNob3VsZENvbGxhcHNlZDtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNpZGViYXJIZWlnaHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zaG91bGRNZW51Q29sbGFwc2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDc2ODtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWVudUNvbGxhcHNlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWVudUNvbGxhcHNlU3RhdGVDaGFuZ2UodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fc3RhdGUuc2V0U2lkZWJhcldpZHRoKHRoaXMuc2lkZWJhci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWVudUNvbGxhcHNlU3RhdGVDaGFuZ2UoaXNDb2xsYXBzZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTWVudUNvbGxhcHNlZCA9IGlzQ29sbGFwc2VkO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlLm5vdGlmeURhdGFDaGFuZ2VkKFwibWVudS5pc0NvbGxhcHNlZFwiLCB0aGlzLmlzTWVudUNvbGxhcHNlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1lbnVFeHBhbmQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tZW51Q29sbGFwc2VTdGF0ZUNoYW5nZShmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5fc3RhdGUuc2V0U2lkZWJhcldpZHRoKHRoaXMuc2lkZWJhci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaG92ZXJJdGVtKGpRdWVyeWV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTWVudUNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dIb3ZlckVsZW0gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmhvdmVyRWxlbUhlaWdodCA9IGpRdWVyeWV2ZW50LmN1cnJlbnRUYXJnZXQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICB0aGlzLmhvdmVyRWxlbVRvcCA9IGpRdWVyeWV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG5cclxuICAgICAgICAgICAgalF1ZXJ5KFwiLnNpZGViYXItaG92ZXItZWxlbVwiKS5jc3MoXCJ0b3BcIiwgdGhpcy5ob3ZlckVsZW1Ub3AgKyBcInB4XCIpO1xyXG4gICAgICAgICAgICBqUXVlcnkoXCIuc2lkZWJhci1ob3Zlci1lbGVtXCIpLmNzcyhcImhlaWdodFwiLCB0aGlzLmhvdmVyRWxlbUhlaWdodCArIFwicHhcIik7XHJcbiAgICAgICAgICAgIGpRdWVyeShcIi5zaWRlYmFyLWhvdmVyLWVsZW1cIikuYWRkQ2xhc3MoXCJzaG93LWhvdmVyLWVsZW1cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZW5kQXdheUhvdmVyRWxlbWVudCgpIHtcclxuICAgICAgICB0aGlzLmhvdmVyRWxlbVRvcCA9IC0yMDA7XHJcblxyXG4gICAgICAgIGpRdWVyeShcIi5zaWRlYmFyLWhvdmVyLWVsZW1cIikuY3NzKFwidG9wXCIsIHRoaXMuaG92ZXJFbGVtVG9wICsgXCJweFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlU2lkZWJhckhlaWdodCgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgbWFyZ2luVG9wID0gNjAgKyA0MDtcclxuICAgICAgICBsZXQgZm9vdGVySGVpZ2h0ID0gMTUwO1xyXG5cclxuICAgICAgICB0aGlzLm1lbnVIZWlnaHQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uY2xpZW50SGVpZ2h0IC0gbWFyZ2luVG9wIC0gZm9vdGVySGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vTm9ub3N0YW50ZSBxdWVzdGEgZnVuemlvbmUgc2lhIGNvbGxlZ2F0YSBjb24gKGNsaWNrLm91dC16b25lKSBwZXIgcXVhbGNoZSBtb3Rpdm8gYW5ndWxhciBsZSBlc2VndWUgY29tdW5xdWUgbmVsbGEgc3VhIHpvbmVcclxuICAgIC8vZ2VuZXJhbmRvIHVuIHBvJyBkaSBpcnJlc3BvbnNpdml0w6AgaW5pemlhbGUuLi4gc3VjY2VkZSBzb2xvIGNvbCBjbGljay4uLiBib2hcclxuICAgIHB1YmxpYyBjb2xsYXBzZU1lbnUoalF1ZXJ5ZXZlbnQsIGl0ZW0pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc01lbnVDb2xsYXBzZWQpXHJcbiAgICAgICAgICAgIHRoaXMubWVudUV4cGFuZCgpO1xyXG5cclxuICAgICAgICBpZiAoIWl0ZW0ubGV2ZWwpXHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkxpdmVsbG8gbm9uIHByZXNlbnRlIGluIHVuIG9nZ2V0dG8gZGVsIG1lbnUhXCIpO1xyXG5cclxuICAgICAgICAvL04uQjogVHV0dGUgbGUgZnVuemlvbmkgZGkgSlF1ZXJ5IGxlIGVzZ3VvIGZ1b3JpIGRhIEFuZ3VsYXIgZGF0byBjaGUgYyfvv70gdW5hIGJ1b25hIHByb2JhYmlsaXTvv70gY2hlIHNpYW5vIGV2ZW50aSBhc2luY3JvbmlcclxuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4geyB0aGlzLm91dHNpZGVBbmd1bGFyQ2xpY2tIYW5kbGVyKGpRdWVyeWV2ZW50LCBpdGVtKTsgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG91dHNpZGVBbmd1bGFyQ2xpY2tIYW5kbGVyKGpRdWVyeWV2ZW50LCBpdGVtKSB7XHJcbiAgICAgICAgbGV0IGxldmVsQ2xhc3MgPSBpdGVtLmxldmVsID8gXCJsZXZlbC1cIiArIChpdGVtLmxldmVsKSA6IFwiXCI7XHJcbiAgICAgICAgbGV0IGxldmVsQ2xhc3NQbHVzT25lID0gaXRlbS5sZXZlbCA/IFwibGV2ZWwtXCIgKyAoaXRlbS5sZXZlbCArIDEpIDogXCJcIjtcclxuICAgICAgICBsZXQgc2xpZGVQZXJpb2QgPSA0MDA7XHJcblxyXG4gICAgICAgIHZhciBsaW5rID0galF1ZXJ5KGpRdWVyeWV2ZW50LmN1cnJlbnRUYXJnZXQpO1xyXG5cclxuICAgICAgICAvL1NlIGwnZWxlbWVudG8gbm9uIMOoIGVzcGFuc29cclxuICAgICAgICBpZiAoIWxpbmsuY2xvc2VzdChcIi5zaWRlYmFyLWl0ZW0tZXhwYW5kZWRcIiArIFwiX1wiICsgbGV2ZWxDbGFzcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vVGlybyBzdSB0dXR0aSBnbGkgZWxlbWVudGkgZGVsbG8gc3Rlc3NvIGxpdmVsbG8gZXNwYW5zaSBlIGxpIGNoaXVkb1xyXG5cclxuICAgICAgICAgICAgLy9TZSBobyBjb21wcmVzc28gdW4gbWVudSB2YWRvIGEgdmVkZXJlIHNlIGMnw6ggYW5jaGUgdW4gYWx0cm8gbWVudSBkaSBsaXZlbGxvIHBp77+9IGJhc3NvIGRhIHJpY2hpdWRlcmVcclxuICAgICAgICAgICAgalF1ZXJ5KFwidWwubmF2LXNpZGViYXIgbGlcIiArIFwiLlwiICsgKGxldmVsQ2xhc3NQbHVzT25lKSkuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2xvc2VzdExpID0galF1ZXJ5KHRoaXMpLmNsb3Nlc3QoXCJsaVwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0TGkuY2hpbGRyZW4oXCJ1bFwiKS5sZW5ndGggJiYgY2xvc2VzdExpLmhhc0NsYXNzKFwic2lkZWJhci1pdGVtLWV4cGFuZGVkXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdExpLmNoaWxkcmVuKFwidWxcIikuc2xpZGVVcChzbGlkZVBlcmlvZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9MZSB1c28gc2VtcHJlIGVudHJhbWJlIGluc2llbWUuIExhIHByaW1hIMOoIGxhIGNsYXNzZSBwZXIgbGEgbG9naWNhLCBsYSBzZWNvbmRhIHBlciBsZSBhbmltYXppb25pXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdExpLnJlbW92ZUNsYXNzKFwic2lkZWJhci1pdGVtLWV4cGFuZGVkXCIgKyBcIl9cIiArIChsZXZlbENsYXNzUGx1c09uZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RMaS5yZW1vdmVDbGFzcyhcInNpZGViYXItaXRlbS1leHBhbmRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvL0RvcG9kaWNo77+9IHJpY2hpdWRvIHR1dHRpIHF1ZWxsaSBkZWwgbWlvIGxpdmVsbG8gYXR0dWFsZVxyXG4gICAgICAgICAgICBqUXVlcnkoXCJ1bC5uYXYtc2lkZWJhciBsaVwiICsgXCIuXCIgKyBsZXZlbENsYXNzKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjbG9zZXN0TGkgPSBqUXVlcnkodGhpcykuY2xvc2VzdChcImxpXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RMaS5jaGlsZHJlbihcInVsXCIpLmxlbmd0aCAmJiBjbG9zZXN0TGkuaGFzQ2xhc3MoXCJzaWRlYmFyLWl0ZW0tZXhwYW5kZWRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0TGkuY2hpbGRyZW4oXCJ1bFwiKS5zbGlkZVVwKHNsaWRlUGVyaW9kKTtcclxuICAgICAgICAgICAgICAgICAgICAvL0xlIHVzbyBzZW1wcmUgZW50cmFtYmUgaW5zaWVtZS4gTGEgcHJpbWEgw6ggbGEgY2xhc3NlIHBlciBsYSBsb2dpY2EsIGxhIHNlY29uZGEgcGVyIGxlIGFuaW1hemlvbmlcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0TGkucmVtb3ZlQ2xhc3MoXCJzaWRlYmFyLWl0ZW0tZXhwYW5kZWRcIiArIFwiX1wiICsgbGV2ZWxDbGFzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdExpLnJlbW92ZUNsYXNzKFwic2lkZWJhci1pdGVtLWV4cGFuZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vRG9wb2RpY2jvv70gZXNwYW5kbyBxdWVsbG8gYXR0dWFsZVxyXG4gICAgICAgICAgICBsaW5rLm5leHQoKS5zbGlkZURvd24oc2xpZGVQZXJpb2QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0uc3ViTWVudSkge1xyXG4gICAgICAgICAgICAgICAgLy9MZSB1c28gc2VtcHJlIGVudHJhbWJlIGluc2llbWUuIExhIHByaW1hIMOoIGxhIGNsYXNzZSBwZXIgbGEgbG9naWNhLCBsYSBzZWNvbmRhIHBlciBsZSBhbmltYXppb25pXHJcbiAgICAgICAgICAgICAgICBsaW5rLmNsb3Nlc3QoXCJsaVwiKS5hZGRDbGFzcyhcInNpZGViYXItaXRlbS1leHBhbmRlZFwiICsgXCJfXCIgKyBsZXZlbENsYXNzKTtcclxuICAgICAgICAgICAgICAgIGxpbmsuY2xvc2VzdChcImxpXCIpLmFkZENsYXNzKFwic2lkZWJhci1pdGVtLWV4cGFuZGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy9BbHRyaW1lbnRpLCBzZSBsJ2VsZW1lbnRvIMOoIGdpw6AgZXNwYW5zbyBsbyBjaGl1ZG9cclxuICAgICAgICAgICAgaWYgKGl0ZW0uc3ViTWVudSkge1xyXG4gICAgICAgICAgICAgICAgLy9MZSB1c28gc2VtcHJlIGVudHJhbWJlIGluc2llbWUuIExhIHByaW1hIMOoIGxhIGNsYXNzZSBwZXIgbGEgbG9naWNhLCBsYSBzZWNvbmRhIHBlciBsZSBhbmltYXppb25pXHJcbiAgICAgICAgICAgICAgICBsaW5rLmNsb3Nlc3QoXCJsaVwiKS5yZW1vdmVDbGFzcyhcInNpZGViYXItaXRlbS1leHBhbmRlZFwiICsgXCJfXCIgKyBsZXZlbENsYXNzKTtcclxuICAgICAgICAgICAgICAgIGxpbmsuY2xvc2VzdChcImxpXCIpLnJlbW92ZUNsYXNzKFwic2lkZWJhci1pdGVtLWV4cGFuZGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsaW5rLm5leHQoKS5zbGlkZVVwKHNsaWRlUGVyaW9kKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gRm9vdGVyXHJcbiAgICBwdWJsaWMgb25DaGFuZ2VUZW5hbnQoKSB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgJHtteWNvbmZpZy5BdXRoVXJsfS8jL2xvZ2luO2NsaWVudD0ke215Y29uZmlnLkNsaWVudH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkxvZ291dCgpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAke215Y29uZmlnLkF1dGhVcmx9LyMvbG9nb3V0O2NsaWVudD0ke215Y29uZmlnLkNsaWVudH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0VXNlclByb2ZpbGVEYXRhKCkge1xyXG4gICAgICAgIHZhciBpZGVudGl0eSA9IHRoaXMuc3IuZ2V0SmFjZUlkZW50aXR5KCk7XHJcblxyXG4gICAgICAgIGlmIChpZGVudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIgPSBpZGVudGl0eS5GdWxsTmFtZTtcclxuICAgICAgICAgICAgdGhpcy50ZW5hbnQgPSBpZGVudGl0eS5UZW5hbnROYW1lO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGUuZG9SZWxvYWRQcm9maWxlUGljdHVyZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gR2VzdGlvbmUgUmljZXJjYSBHbG9iYWxlXHJcbiAgICBwdWJsaWMgU2VsZWN0ZWRSZXN1bHQ6IFNlYXJjaFJlc3VsdCA9IG51bGw7XHJcbiAgICBwdWJsaWMgU2hvd1NpbmdsZVRhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2VhcmNoVGVybTogc3RyaW5nO1xyXG4gICAgc2VhcmNoaW5nVGVybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgc2VhcmNoUmVzdWx0OiBTZWFyY2hSZXN1bHRDb250YWluZXI7XHJcblxyXG4gICAgb25TZWFyY2hSZXF1ZXN0KCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoaW5nVGVybSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHQgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZ2xvYmFsU2VhcmNoU2VydmljZS5FbmFibGVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA8IDMpIHtcclxuICAgICAgICAgICAgdGhpcy5tc2dFeHRzLnNpbXBsZVdhcm5pbmcodGhpcy5sYy5sb2MoXCJTY3JpdmVyZSBhbG1lbm8gMyBjYXJhdHRlcmkgcGVyIHV0aWxpenphcmUgbGEgcmljZXJjYSBnbG9iYWxlXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2hTZXJ2aWNlLnNlYXJjaCh0aGlzLnNlYXJjaFRlcm0pLnN1YnNjcmliZSh0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hpbmdUZXJtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gdDtcclxuXHJcbiAgICAgICAgICAgIC8vIFNob3J0LWNpcmN1aXQgaW4gYXNzZW56YSBkaSByaXN1bHRhdGlcclxuICAgICAgICAgICAgaWYgKCh0aGlzLnNlYXJjaFJlc3VsdC5yZXN1bHRzLmxlbmd0aCB8fCAwKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0LnJlc3VsdHMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIHQuZXN0X2NvbHMgPSB0LmNvbHVtbnMubWFwKGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xMaW5rID0gdGhpcy5nbG9iYWxTZWFyY2hTZXJ2aWNlLmdlbmVyYXRlQ29sdW1uTGluayhjKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbihjLmRlc2NyaXB0aW9uLCBjLmlkLCBjb2xMaW5rPy5yb3V0ZVBhdGgsIGNvbExpbms/LnJvdXRlUHJvcGVydGllcyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlYXJjaE1vZGVsQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoaW5nVGVybSlcclxuICAgICAgICAgICAgdGhpcy5jbG9zZVNlYXJjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlU2VhcmNoKCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoaW5nVGVybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBGaWx0ZXJTZWFyY2hSZXN1bHRzKGl0ZW06IFNlYXJjaFJlc3VsdCA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkUmVzdWx0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLlNob3dTaW5nbGVUYWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5TZWxlY3RlZFJlc3VsdCA9IHRoaXMuc2VhcmNoUmVzdWx0Py5yZXN1bHRzPy5maW5kKGYgPT4gZi5kZXNjcmlwdGlvbiA9PSBpdGVtLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5TaG93U2luZ2xlVGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxufSIsIjxkaXYgI3NpZGViYXIgY2xhc3M9XCJhcHAtc2lkZWJhclwiIFtjbGFzcy5tZW51LWNvbGxhcHNlZF09XCJpc01lbnVDb2xsYXBzZWRcIiAobW91c2VsZWF2ZS5vdXQtem9uZSk9XCJzZW5kQXdheUhvdmVyRWxlbWVudCgpO1wiPlxyXG4gICAgPCEtLUphY2UgTG9nby0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImFwcC1sb2dvLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtcG9pbnRlclwiIFtyb3V0ZXJMaW5rXT1cIlsnL3BhZ2VzL2Rhc2hib2FyZCddXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxMHB4OyBvdmVyZmxvdzogaGlkZGVuXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNNZW51Q29sbGFwc2VkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXBwLWxvZ28taW1nXCIgc3JjPVwiYXNzZXRzL2ltZy9sb2dvL2hlYWRsb2dvX3NtYWxsLnBuZ1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1sb2dvLWZvbnQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtbG9nby1mb250XCI+e3thcHBsaWNhdGlvbk5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzTWVudUNvbGxhcHNlZFwiIGNsYXNzPVwiYXBwLWxvZ28taW1nLXNtXCIgc3JjPVwiYXNzZXRzL2ltZy9sb2dvL2hlYWRsb2dvX3NtYWxsLnBuZ1wiIGFsdD1cIlwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tUmljZXJjYSBnbG9iYWxlLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWlzTWVudUNvbGxhcHNlZFwiIGNsYXNzPVwiYXBwLXNpZGViYXItc2VhcmNoXCI+XHJcbiAgICAgICAgPGZvcm0gbm92YWxpZGF0ZSByb2xlPVwic2VhcmNoXCIgY2xhc3M9XCJhcHAtc2VhcmNoXCIgKG5nU3VibWl0KT1cIm9uU2VhcmNoUmVxdWVzdCgpXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiUmljZXJjYS4uLlwiIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoTW9kZWxDaGFuZ2VkKClcIiBuYW1lPVwic2VhcmNoXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgPGE+PGkgY2xhc3M9XCJmYXIgZmEtbWFnbmlmeWluZy1nbGFzc1wiPjwvaT48L2E+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tQmFycmEgbGF0ZXJhbGUgY29uIHR1dHRlIGxlIHZvY2kgZGkgTWVudS0tPlxyXG4gICAgPHVsIGNsYXNzPVwibmF2IG5hdi1zaWRlYmFyIGZsZXgtY29sdW1uIGZsZXgtbm93cmFwXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IHpvb206IDFcIiBzbGltLXNjcm9sbCBbc2xpbVNjcm9sbE9wdGlvbnNdPVwie2hlaWdodDogbWVudUhlaWdodCArIChpc01lbnVDb2xsYXBzZWQgPyA1NSA6IDApfVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudUl0ZW1zOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XHJcbiAgICAgICAgICAgIDxsaSAqbmdJZj1cIml0ZW0udmlzaWJsZVwiIGNsYXNzPVwic2lkZWJhci1saXN0LWl0ZW0gbGV2ZWwte3tpdGVtLmxldmVsfX1cIiBcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW4tYm90dG9tXT1cImxhc3QgPyAnNDJweCcgOiAnMHB4J1wiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLXN1Yi1tZW51XT1cIml0ZW0uc3ViTWVudVwiIFxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNpZGViYXItaXRlbS1leHBhbmRlZF09XCJpdGVtLmV4cGFuZGVkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5zaWRlYmFyLWl0ZW0td2lwXT1cIml0ZW0ud2lwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudUl0ZW07IGNvbnRleHQgOiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3VsPlxyXG4gICAgPCEtLVNlbGV0dG9yZSBCYXJyYSBkZWkgTWVudS0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInNpZGViYXItaG92ZXItZWxlbVwiPjwvZGl2PlxyXG4gICAgPCEtLUZvb3RlciAqbmdJZj1cIiFpc01lbnVDb2xsYXBzZWRcIi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3RlclwiPlxyXG4gICAgICAgIDwhLS1NaW51c2NvbG8gZmFkZSB0cmEgc2lkZWJhciBlIGluaXppbyBmb290ZXItLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNpZGViYXItZm9vdGVyLWZhZGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IFtzdHlsZS5wYWRkaW5nLnB4XT1cImlzTWVudUNvbGxhcHNlZCA/IDUgOiAxNVwiPlxyXG4gICAgICAgICAgICA8IS0tSW5mb3JtYXppb25pIHV0ZW50ZSBjb2xsZWdhdG8tLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3Rlci11c2VyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLU1lbnRyZSBzdG8gYW5jb3JhIGNhcmljYW5kbyBsYSBQcm9maWxlUGljIG1pIGFzc2ljdXJvIGRpIG1vc3RyYXJlIHVuIHBsYWNlaG9sZGVyLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXByb2ZpbGUuUHJvZmlsZVBpY3R1cmVcIiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3Rlci11c2VyLWltZy1wbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLTJ4IGZhLXNwaW5uZXIgZmEtc3Bpbi1wdWxzZVwiIHN0eWxlPVwiY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA1cHg7XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tVW5hIHZvbHRhIGNhcmljYXRhIGxhIFByb2ZpbGVQaWMgbmFzY29uZG8gaWwgcGxhY2Vob2xkZXIgZSBsYSBtb3N0cm8tLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9maWxlLlByb2ZpbGVQaWN0dXJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInByb2ZpbGUuUHJvZmlsZVBpY3R1cmVcIiBhbHQ9XCJcIiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3Rlci11c2VyLWltZyBhcHAtcG9pbnRlclwiIFtyb3V0ZXJMaW5rXT1cIlsnL3BhZ2VzL3Byb2ZpbGUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtc2lkZWJhci1mb290ZXItdXNlci1zdGF0dXNcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPCEtLVVzZXJuYW1lIGFuaW1hdG8gcXVhbmRvIHN1cGVyYSBpIDE1IGNhcmF0dGVyaS0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3Rlci11c2VyLW5hbWUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXJuYW1lLXRleHRcIiBbY2xhc3MudXNlcm5hbWUtdGV4dC1hbmltYXRvcl09XCJ1c2VyPy5sZW5ndGggPiAxNVwiPnt7dXNlcn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRlbmFudG5hbWUtdGV4dFwiPnt7dGVuYW50fX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLU9wZXJhemlvbmkgcmFwaWRlIChMb2dvdXQsIENhbWJpYSB0ZW5hbnQsIEd1aWRhLCBTdXBwb3J0bywuLi4pLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtc2lkZWJhci1mb290ZXItcXVpY2stb3BzXCIgW3N0eWxlLmRpc3BsYXldPVwiaXNNZW51Q29sbGFwc2VkID8gJ2lubGluZScgOiAnZmxleCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uQ2hhbmdlVGVuYW50KCk7XCIgY2xhc3M9XCJhcHAtc2lkZWJhci1mb290ZXItb3AgYXBwLW5vLXNlbGVjdGlvblwiIFtzdHlsZS5tYXJnaW4tdG9wLnB4XT1cImlzTWVudUNvbGxhcHNlZCA/IDEwIDogMFwiPjxpIGNsYXNzPVwiZmFyIGZhLXJpZ2h0LWxlZnRcIj48L2k+PHNwYW4gKm5nSWY9XCIhaXNNZW51Q29sbGFwc2VkXCI+Jm5ic3A7Q2FtYmlhIFRlbmFudDwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uTG9nb3V0KCk7XCIgY2xhc3M9XCJhcHAtc2lkZWJhci1mb290ZXItb3AgYXBwLW5vLXNlbGVjdGlvblwiIFtzdHlsZS5tYXJnaW4tdG9wLnB4XT1cImlzTWVudUNvbGxhcHNlZCA/IDEwIDogMFwiPjxpIGNsYXNzPVwiZmFyIGZhLXJpZ2h0LWZyb20tYnJhY2tldFwiPjwvaT48c3BhbiAqbmdJZj1cIiFpc01lbnVDb2xsYXBzZWRcIj4mbmJzcDtMb2dvdXQ8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tVmVyc2lvbmUgY29ycmVudGUgYXBwbGljYXppb25lLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNNZW51Q29sbGFwc2VkXCIgY2xhc3M9XCJhcHAtc2lkZWJhci1mb290ZXItdmVyXCI+XHJcbiAgICAgICAgICAgICAgICB2e3thcHBsaWNhdGlvblZlcnNpb259fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbWVudUl0ZW0gbGV0LWl0ZW0+XHJcbiAgICA8YSBbc3R5bGUucGFkZGluZy1sZWZ0LnB4XT1cIml0ZW0ucGFkZGluZ19sZWZ0XCIgKm5nSWY9XCIoIWl0ZW0ucm91dGVyTGluayAmJiAhaXRlbS5zdWJNZW51KSB8fCBpdGVtLndpcFwiIFtocmVmXT1cIml0ZW0ubGluayB8fCAnIydcIiAoY2xpY2spPVwiaXRlbS53aXAgJiYgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cInNpZGViYXItbGlzdC1saW5rIHt7aXRlbS5jc3NDbGFzcyB8fCAnJ319XCIgKG1vdXNlZW50ZXIub3V0LXpvbmUpPVwiaG92ZXJJdGVtKCRldmVudClcIj5cclxuICAgICAgICA8aSAqbmdJZj1cIml0ZW0uaWNvblwiIGNsYXNzPVwie3sgaXRlbS5pY29uIH19XCI+PC9pPjxzcGFuPnt7IGl0ZW0udGl0bGUgfCBsb2NhbGl6ZSA6IGxjIH19PC9zcGFuPlxyXG4gICAgPC9hPlxyXG5cclxuICAgIDxhIFtzdHlsZS5wYWRkaW5nLWxlZnQucHhdPVwiaXRlbS5wYWRkaW5nX2xlZnRcIiAqbmdJZj1cIml0ZW0ucm91dGVyTGluayAmJiAhaXRlbS5zdWJNZW51ICYmICFpdGVtLndpcFwiIGNsYXNzPVwic2lkZWJhci1saXN0LWxpbmsge3tpdGVtLmNzc0NsYXNzIHx8ICcnfX1cIiBbcm91dGVyTGlua109XCJbaXRlbS5yb3V0ZXJMaW5rXVwiIFtxdWVyeVBhcmFtc109XCJpdGVtLnF1ZXJ5UGFyYW1zXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZS1saW5rXCIgKGNsaWNrLm91dC16b25lKT1cImNvbGxhcHNlTWVudSgkZXZlbnQsIGl0ZW0pXCIgKG1vdXNlZW50ZXIub3V0LXpvbmUpPVwiaG92ZXJJdGVtKCRldmVudClcIj5cclxuICAgICAgICA8aSAqbmdJZj1cIml0ZW0uaWNvblwiIGNsYXNzPVwie3sgaXRlbS5pY29uIH19XCI+PC9pPjxzcGFuPnt7IGl0ZW0udGl0bGUgfCBsb2NhbGl6ZSA6IGxjIH19PC9zcGFuPlxyXG4gICAgPC9hPlxyXG5cclxuICAgIDxhIFtzdHlsZS5wYWRkaW5nLWxlZnQucHhdPVwiaXRlbS5wYWRkaW5nX2xlZnRcIiAqbmdJZj1cIml0ZW0uc3ViTWVudSAmJiAhaXRlbS53aXBcIiAoY2xpY2sub3V0LXpvbmUpPVwiY29sbGFwc2VNZW51KCRldmVudCwgaXRlbSlcIiBbYXR0ci5ocmVmXT1cIicnXCIgY2xhc3M9XCJzaWRlYmFyLWxpc3QtbGluayB7e2l0ZW0uY3NzQ2xhc3MgfHwgJyd9fVwiIChtb3VzZWVudGVyLm91dC16b25lKT1cImhvdmVySXRlbSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPGkgKm5nSWY9XCJpdGVtLmljb25cIiBjbGFzcz1cInt7IGl0ZW0uaWNvbiB9fVwiPjwvaT48c3Bhbj57eyBpdGVtLnRpdGxlIHwgbG9jYWxpemUgOiBsYyB9fTwvc3Bhbj5cclxuICAgICAgICA8YiBjbGFzcz1cImZhIGZhLWFuZ2xlLWRvd25cIj48L2I+XHJcbiAgICA8L2E+XHJcblxyXG4gICAgPHVsICpuZ0lmPVwiaXRlbS5zdWJNZW51XCIgY2xhc3M9XCJzaWRlYmFyLXN1Ymxpc3RcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJpdGVtIG9mIGl0ZW0uc3ViTWVudVwiID5cclxuICAgICAgICAgICAgPGxpICpuZ0lmPVwic3ViaXRlbS52aXNpYmxlXCIgY2xhc3M9XCJzaWRlYmFyLXN1Ymxpc3QtaXRlbSBsZXZlbC17e2l0ZW0ubGV2ZWx9fVwiIFtjbGFzcy5zaWRlYmFyLWl0ZW0td2lwXT1cInN1Yml0ZW0ud2lwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudUl0ZW07IGNvbnRleHQgOiB7JGltcGxpY2l0OiBzdWJpdGVtfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC91bD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gT3ZlcmxheSBwZXIgbGEgcmljZXJjYSBnbG9iYWxlIC0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoaW5nVGVybSB8fCBzZWFyY2hSZXN1bHRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhcHAtYWJzb2x1dGUgYXBwLXNlYXJjaC1iYWNrZ3JvdW5kXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWFyY2gtcmVzdWx0LWJveFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoaW5nVGVybVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWFyY2gtY2FyZFwiPjxpIGNsYXNzPVwiZmEgZmEtc3Bpbm5lciBmYS1zcGluXCI+PC9pPlN0byBlZmZldHR1YW5kbyBsYSByaWNlcmNhLi4uPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoUmVzdWx0ICYmICFzZWFyY2hpbmdUZXJtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTcGF6aW8gYSBzaW5pc3RyYSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIEJsb2NjbyBjb24gbGUgY2F0ZWdvcmllIGRlaSByaXN1bHRhdGkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtc2VhcmNoLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtcmVsYXRpdmVcIj48YSBjbGFzcz1cImZhIGZhLXRpbWVzIHRleHQtZGFuZ2VyIGFwcC1hYnNvbHV0ZSBhcHAtcmlnaHQtMCBhcHAtZnMtMjAgYXBwLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VTZWFyY2goKTtcIj48L2E+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Q2F0ZWdvcmllIGRpIFJpY2VyY2E8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1wb2ludGVyIGFwcC1saW5rXCIgW2NsYXNzLmFwcC1ib2xkXT1cIiFTZWxlY3RlZFJlc3VsdCAmJiAhU2hvd1NpbmdsZVRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIkZpbHRlclNlYXJjaFJlc3VsdHMoKVwiPnt7U2VsZWN0ZWRSZXN1bHQgPyAnLScgOiAnPid9fSBNb3N0cmEgVHV0dG88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VhcmNoUmVzdWx0LnJlc3VsdHNcIiBjbGFzcz1cImFwcC1wb2ludGVyIGFwcC1saW5rXCIgW2NsYXNzLmFwcC1ib2xkXT1cIlNlbGVjdGVkUmVzdWx0Py5kZXNjcmlwdGlvbiA9PSBpdGVtLmRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIkZpbHRlclNlYXJjaFJlc3VsdHMoaXRlbSlcIj57e1NlbGVjdGVkUmVzdWx0Py5kZXNjcmlwdGlvbiA9PSBpdGVtLmRlc2NyaXB0aW9uID8gJz4nIDogJy0nfX0gTW9zdHJhIHt7aXRlbS5kZXNjcmlwdGlvbn19ICh7e2l0ZW0uaXRlbXM/Lmxlbmd0aH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIERldHRhZ2xpbyByaXN1bHRhdGkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03XCIgc3R5bGU9XCJvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIVNlbGVjdGVkUmVzdWx0ICYmICFTaG93U2luZ2xlVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJlcyBvZiBzZWFyY2hSZXN1bHQucmVzdWx0czsgbGV0IGkgPSBpbmRleDtcIiBjbGFzcz1cImFwcC1zZWFyY2gtY2FyZFwiIFtzdHlsZS5tYXJnaW4tYm90dG9tLnB4XT1cImkgPT0gKHNlYXJjaFJlc3VsdC5yZXN1bHRzPy5sZW5ndGggLSAxKSA/IDIgOiAxMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND57e3Jlcy5kZXNjcmlwdGlvbn19PC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXMtdGFibGUgWyhuZ01vZGVsKV09XCJyZXMuaXRlbXNcIiBbRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uXT1cInJlcy5lc3RfY29sc1wiIFtBcnJheW1vZGVJdGVtc1BlclBhZ2VdPVwiMTBcIj48L2VzLXRhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiU2VsZWN0ZWRSZXN1bHQgJiYgU2hvd1NpbmdsZVRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlYXJjaC1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0Pnt7U2VsZWN0ZWRSZXN1bHQuZGVzY3JpcHRpb259fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVzLXRhYmxlIFsobmdNb2RlbCldPVwiU2VsZWN0ZWRSZXN1bHQuaXRlbXNcIiBbRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uXT1cIlNlbGVjdGVkUmVzdWx0LmVzdF9jb2xzXCIgW0FycmF5bW9kZUl0ZW1zUGVyUGFnZV09XCIxMFwiPjwvZXMtdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTcGF6aW8gYSBkZXN0cmEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+Il19
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQVEsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlLLE9BQU8sRUFBRSxhQUFhLEVBQVUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRSxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEYsV0FBVztBQUNYLE9BQU8sRUFBK0IsSUFBSSxFQUFFLGlCQUFpQixFQUF1QyxNQUFNLHVCQUF1QixDQUFDO0FBSWxJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxXQUFXO0FBQ1gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7O0FBZXJELE1BQU0sT0FBTyxPQUFPO0lBaUJoQixZ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QUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDOzswQkFvQjdGLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDd0UsTUFBTTsyQkFBQyxJQUFJOzhNQUpwSCxPQUFPO3NCQUE5QyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBOEUvQixjQUFjO3NCQURwQixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgTmdab25lLCBPcHRpb25hbCwgVHlwZSwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyTGlua0FjdGl2ZSwgUm91dGVyTGluayB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTmdGb3IsIE5nVGVtcGxhdGVPdXRsZXQsIE5nSWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMb2NhbGl6YXRpb25Nb2R1bGUgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuXHJcbi8vIEVzRmFlbnphXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uTWVudSwgRW52T3B0aW9ucywgTUVOVSwgTUVOVV9MT0NBTElaQVRJT04sIFNlYXJjaFJlc3VsdCwgU2VhcmNoUmVzdWx0Q29udGFpbmVyIH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL2RvbWFpblwiO1xyXG5pbXBvcnQgeyBBcHBTdGF0ZSwgR2xvYmFsU2VhcmNoU2VydmljZSwgTWVudUZpbHRlcmluZ1NlcnZpY2UsIFRva2VuU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBBcHBFbWJlZGRpbmdFeHRlbnNpb25zLCBNZXNzYWdlU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXCI7XHJcbmltcG9ydCB7IFNsaW1TY3JvbGwgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZGlyZWN0aXZlc1wiO1xyXG5cclxuLy8gTGlicmVyaWVcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24sIEVzVGFibGVNb2R1bGUgfSBmcm9tIFwiQGVzZmFlbnphL2VzLXRhYmxlXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFNpZGVCYXJMb2MgfSBmcm9tIFwiLi9zaWRlYmFyLmNvbXBvbmVudC5sb2NcIjtcclxuXHJcbmRlY2xhcmUgdmFyIG15Y29uZmlnOiBFbnZPcHRpb25zO1xyXG5kZWNsYXJlIHZhciBqUXVlcnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInNpZGViYXJcIixcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0eWxlVXJsczogW1wiLi9zaWRlYmFyLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9zaWRlYmFyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogU2lkZUJhckxvYyB9XSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbU2xpbVNjcm9sbCwgTmdGb3IsIE5nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIFJvdXRlckxpbmtBY3RpdmUsIFJvdXRlckxpbmssIEZvcm1zTW9kdWxlLCBFc1RhYmxlTW9kdWxlLCBMb2NhbGl6YXRpb25Nb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWRlYmFyIHtcclxuICAgIHB1YmxpYyBtZW51SXRlbXM6IEFycmF5PGFueT47XHJcbiAgICBwdWJsaWMgbWVudUhlaWdodDogbnVtYmVyO1xyXG4gICAgcHVibGljIGlzTWVudUNvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzTWVudVNob3VsZENvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzaG93SG92ZXJFbGVtOiBib29sZWFuO1xyXG4gICAgcHVibGljIGhvdmVyRWxlbUhlaWdodDogbnVtYmVyO1xyXG4gICAgcHVibGljIGhvdmVyRWxlbVRvcDogbnVtYmVyO1xyXG5cclxuICAgIHB1YmxpYyBhcHBsaWNhdGlvblZlcnNpb24gPSBteWNvbmZpZy5BcHBEYXRhLkNvbXBvbmVudFZlcnNpb247XHJcbiAgICBwdWJsaWMgYXBwbGljYXRpb25OYW1lID0gbXljb25maWcuQXBwRGF0YS5Nb2R1bGVEZXNjcmlwdGlvbjtcclxuICAgIHB1YmxpYyB1c2VyID0gXCJcIjtcclxuICAgIHB1YmxpYyB0ZW5hbnQgPSBcIlwiO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJzaWRlYmFyXCIsIHsgc3RhdGljOiB0cnVlIH0pIHNpZGViYXI6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBAT3B0aW9uYWwoKSBASW5qZWN0KE1FTlVfTE9DQUxJWkFUSU9OKSBsY01lbnU6IFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT4sIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBlbWI6IEFwcEVtYmVkZGluZ0V4dGVuc2lvbnMsXHJcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsIHB1YmxpYyBfc3RhdGU6IEFwcFN0YXRlLCBwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBhYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBASW5qZWN0KE1FTlUpIHByaXZhdGUgbWVudUl0ZW1zUmF3OiBBcHBsaWNhdGlvbk1lbnVbXSxcclxuICAgICAgICBwcml2YXRlIG1lbnVGaWx0ZXJpbmdTZXJ2aWNlOiBNZW51RmlsdGVyaW5nU2VydmljZSwgcHVibGljIHNyOiBUb2tlblNlcnZpY2UsIHB1YmxpYyBnbG9iYWxTZWFyY2hTZXJ2aWNlOiBHbG9iYWxTZWFyY2hTZXJ2aWNlLCBwdWJsaWMgcHJvZmlsZTogVXNlclByZWZlcmVuY2VzU2VydmljZSwgcHJpdmF0ZSBtc2dFeHRzOiBNZXNzYWdlU2VydmljZSkge1xyXG5cclxuICAgICAgICB0aGlzLmxjID0gdGhpcy5sYy5nZW5lcmF0ZUZyb21UeXBlKGxjTWVudSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlLnN1YnNjcmliZShcIm1lbnUuaXNDb2xsYXBzZWRcIiwgKGlzQ29sbGFwc2VkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNNZW51Q29sbGFwc2VkID0gaXNDb2xsYXBzZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9zdGF0ZS5zdWJzY3JpYmUoXCJhcHBsaWNhdGlvbi5EZXBsb3lBdmFpbGFibGVcIiwgKGF2YWlsYWJsZTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYXZhaWxhYmxlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICAgICAgICAgIGxldCB3aWR0aCA9ICh3aW5kb3cuaW5uZXJXaWR0aCA+IDApID8gd2luZG93LmlubmVyV2lkdGggOiBzY3JlZW4ud2lkdGg7XHJcbiAgICAgICAgICAgICAgICBpZiAod2lkdGggPD0gNzY4KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLm5vdGlmeURhdGFDaGFuZ2VkKFwibWVudS5pc0NvbGxhcHNlZFwiLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdldFVzZXJQcm9maWxlRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICBsZXQgdG1wTWVudUl0ZW1zID0gdGhpcy5nZXRNZW51SXRlbXMoKTtcclxuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubWVudUZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyKHRtcE1lbnVJdGVtcykpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fc2hvdWxkTWVudUNvbGxhcHNlKCkpXHJcbiAgICAgICAgICAgIHRoaXMubWVudUNvbGxhcHNlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU2lkZWJhckhlaWdodCgpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlLnNldFNpZGViYXJXaWR0aCh0aGlzLnNpZGViYXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRNZW51SXRlbXMoKTogQXBwbGljYXRpb25NZW51W10ge1xyXG4gICAgICAgIGxldCBtZW51cyA9IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUodGhpcy5tZW51SXRlbXNSYXcpO1xyXG5cclxuICAgICAgICAvLyBHaXJvIDEgYXNzZWdubyBpbCBsaXZlbGxvIGFpIHJvb3RcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ID0gbWVudXNbaV0gYXMgYW55O1xyXG4gICAgICAgICAgICB0LmxldmVsID0gMTtcclxuICAgICAgICAgICAgdC5wYWRkaW5nX2xlZnQgPSAxODtcclxuICAgICAgICAgICAgdC52aXNpYmxlID0gIXQuYWMgfHwgdGhpcy5hYWMuaGFzKHQuYWMpO1xyXG5cclxuICAgICAgICAgICAgLy8gR2lybyByaWNvcnNpdm9cclxuICAgICAgICAgICAgaWYgKHQuc3ViTWVudSAmJiB0LnN1Yk1lbnUubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTdWJNZW51T3ZlckNsYWltcyh0LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtZW51cztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrU3ViTWVudU92ZXJDbGFpbXMobWVudUl0ZW06IEFwcGxpY2F0aW9uTWVudSwgbGV2ZWw6IG51bWJlcikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVudUl0ZW0uc3ViTWVudS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdCA9IG1lbnVJdGVtLnN1Yk1lbnVbaV0gYXMgYW55O1xyXG4gICAgICAgICAgICB0LmxldmVsID0gbGV2ZWwgKyAxO1xyXG4gICAgICAgICAgICB0LnZpc2libGUgPSAhdC5hYyB8fCB0aGlzLmFhYy5oYXModC5hYyk7XHJcbiAgICAgICAgICAgIHQucGFkZGluZ19sZWZ0ID0gdC5sZXZlbCAqIDE4O1xyXG4gICAgICAgICAgICBpZiAodC5zdWJNZW51ICYmIHQuc3ViTWVudS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1N1Yk1lbnVPdmVyQ2xhaW1zKHQsIGxldmVsICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTWVudU5hdmlnYXRpb24oaXRlbTogQXBwbGljYXRpb25NZW51KSB7XHJcbiAgICAgICAgdGhpcy5lbWIuTWVzc2FnZU9ic2VydmVyLm5leHQoeyBldmVudDogXCJtZW51LW5hdmlnYXRpb25cIiwgZGF0YTogaXRlbSB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vI3JlZ2lvbiBKUXVlcnlcclxuICAgIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXHJcbiAgICBwdWJsaWMgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIGlzTWVudVNob3VsZENvbGxhcHNlZCA9IHRoaXMuX3Nob3VsZE1lbnVDb2xsYXBzZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc01lbnVTaG91bGRDb2xsYXBzZWQgIT09IGlzTWVudVNob3VsZENvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVDb2xsYXBzZVN0YXRlQ2hhbmdlKGlzTWVudVNob3VsZENvbGxhcHNlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNNZW51U2hvdWxkQ29sbGFwc2VkID0gaXNNZW51U2hvdWxkQ29sbGFwc2VkO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2lkZWJhckhlaWdodCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3Nob3VsZE1lbnVDb2xsYXBzZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNzY4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtZW51Q29sbGFwc2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tZW51Q29sbGFwc2VTdGF0ZUNoYW5nZSh0cnVlKTtcclxuICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTaWRlYmFyV2lkdGgodGhpcy5zaWRlYmFyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtZW51Q29sbGFwc2VTdGF0ZUNoYW5nZShpc0NvbGxhcHNlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNNZW51Q29sbGFwc2VkID0gaXNDb2xsYXBzZWQ7XHJcbiAgICAgICAgdGhpcy5fc3RhdGUubm90aWZ5RGF0YUNoYW5nZWQoXCJtZW51LmlzQ29sbGFwc2VkXCIsIHRoaXMuaXNNZW51Q29sbGFwc2VkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWVudUV4cGFuZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1lbnVDb2xsYXBzZVN0YXRlQ2hhbmdlKGZhbHNlKTtcclxuICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTaWRlYmFyV2lkdGgodGhpcy5zaWRlYmFyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBob3Zlckl0ZW0oalF1ZXJ5ZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNNZW51Q29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0hvdmVyRWxlbSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaG92ZXJFbGVtSGVpZ2h0ID0galF1ZXJ5ZXZlbnQuY3VycmVudFRhcmdldC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIHRoaXMuaG92ZXJFbGVtVG9wID0galF1ZXJ5ZXZlbnQuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcblxyXG4gICAgICAgICAgICBqUXVlcnkoXCIuc2lkZWJhci1ob3Zlci1lbGVtXCIpLmNzcyhcInRvcFwiLCB0aGlzLmhvdmVyRWxlbVRvcCArIFwicHhcIik7XHJcbiAgICAgICAgICAgIGpRdWVyeShcIi5zaWRlYmFyLWhvdmVyLWVsZW1cIikuY3NzKFwiaGVpZ2h0XCIsIHRoaXMuaG92ZXJFbGVtSGVpZ2h0ICsgXCJweFwiKTtcclxuICAgICAgICAgICAgalF1ZXJ5KFwiLnNpZGViYXItaG92ZXItZWxlbVwiKS5hZGRDbGFzcyhcInNob3ctaG92ZXItZWxlbVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbmRBd2F5SG92ZXJFbGVtZW50KCkge1xyXG4gICAgICAgIHRoaXMuaG92ZXJFbGVtVG9wID0gLTIwMDtcclxuXHJcbiAgICAgICAgalF1ZXJ5KFwiLnNpZGViYXItaG92ZXItZWxlbVwiKS5jc3MoXCJ0b3BcIiwgdGhpcy5ob3ZlckVsZW1Ub3AgKyBcInB4XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVTaWRlYmFySGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBtYXJnaW5Ub3AgPSA2MCArIDQwO1xyXG4gICAgICAgIGxldCBmb290ZXJIZWlnaHQgPSAxNTA7XHJcblxyXG4gICAgICAgIHRoaXMubWVudUhlaWdodCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5jbGllbnRIZWlnaHQgLSBtYXJnaW5Ub3AgLSBmb290ZXJIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy9Ob25vc3RhbnRlIHF1ZXN0YSBmdW56aW9uZSBzaWEgY29sbGVnYXRhIGNvbiAoY2xpY2sub3V0LXpvbmUpIHBlciBxdWFsY2hlIG1vdGl2byBhbmd1bGFyIGxlIGVzZWd1ZSBjb211bnF1ZSBuZWxsYSBzdWEgem9uZVxyXG4gICAgLy9nZW5lcmFuZG8gdW4gcG8nIGRpIGlycmVzcG9uc2l2aXTDoCBpbml6aWFsZS4uLiBzdWNjZWRlIHNvbG8gY29sIGNsaWNrLi4uIGJvaFxyXG4gICAgcHVibGljIGNvbGxhcHNlTWVudShqUXVlcnlldmVudCwgaXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTWVudUNvbGxhcHNlZClcclxuICAgICAgICAgICAgdGhpcy5tZW51RXhwYW5kKCk7XHJcblxyXG4gICAgICAgIGlmICghaXRlbS5sZXZlbClcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTGl2ZWxsbyBub24gcHJlc2VudGUgaW4gdW4gb2dnZXR0byBkZWwgbWVudSFcIik7XHJcblxyXG4gICAgICAgIC8vTi5COiBUdXR0ZSBsZSBmdW56aW9uaSBkaSBKUXVlcnkgbGUgZXNndW8gZnVvcmkgZGEgQW5ndWxhciBkYXRvIGNoZSBjJ++/vSB1bmEgYnVvbmEgcHJvYmFiaWxpdO+/vSBjaGUgc2lhbm8gZXZlbnRpIGFzaW5jcm9uaVxyXG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7IHRoaXMub3V0c2lkZUFuZ3VsYXJDbGlja0hhbmRsZXIoalF1ZXJ5ZXZlbnQsIGl0ZW0pOyB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb3V0c2lkZUFuZ3VsYXJDbGlja0hhbmRsZXIoalF1ZXJ5ZXZlbnQsIGl0ZW0pIHtcclxuICAgICAgICBsZXQgbGV2ZWxDbGFzcyA9IGl0ZW0ubGV2ZWwgPyBcImxldmVsLVwiICsgKGl0ZW0ubGV2ZWwpIDogXCJcIjtcclxuICAgICAgICBsZXQgbGV2ZWxDbGFzc1BsdXNPbmUgPSBpdGVtLmxldmVsID8gXCJsZXZlbC1cIiArIChpdGVtLmxldmVsICsgMSkgOiBcIlwiO1xyXG4gICAgICAgIGxldCBzbGlkZVBlcmlvZCA9IDQwMDtcclxuXHJcbiAgICAgICAgdmFyIGxpbmsgPSBqUXVlcnkoalF1ZXJ5ZXZlbnQuY3VycmVudFRhcmdldCk7XHJcblxyXG4gICAgICAgIC8vU2UgbCdlbGVtZW50byBub24gw6ggZXNwYW5zb1xyXG4gICAgICAgIGlmICghbGluay5jbG9zZXN0KFwiLnNpZGViYXItaXRlbS1leHBhbmRlZFwiICsgXCJfXCIgKyBsZXZlbENsYXNzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgLy9UaXJvIHN1IHR1dHRpIGdsaSBlbGVtZW50aSBkZWxsbyBzdGVzc28gbGl2ZWxsbyBlc3BhbnNpIGUgbGkgY2hpdWRvXHJcblxyXG4gICAgICAgICAgICAvL1NlIGhvIGNvbXByZXNzbyB1biBtZW51IHZhZG8gYSB2ZWRlcmUgc2UgYyfDqCBhbmNoZSB1biBhbHRybyBtZW51IGRpIGxpdmVsbG8gcGnvv70gYmFzc28gZGEgcmljaGl1ZGVyZVxyXG4gICAgICAgICAgICBqUXVlcnkoXCJ1bC5uYXYtc2lkZWJhciBsaVwiICsgXCIuXCIgKyAobGV2ZWxDbGFzc1BsdXNPbmUpKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjbG9zZXN0TGkgPSBqUXVlcnkodGhpcykuY2xvc2VzdChcImxpXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RMaS5jaGlsZHJlbihcInVsXCIpLmxlbmd0aCAmJiBjbG9zZXN0TGkuaGFzQ2xhc3MoXCJzaWRlYmFyLWl0ZW0tZXhwYW5kZWRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0TGkuY2hpbGRyZW4oXCJ1bFwiKS5zbGlkZVVwKHNsaWRlUGVyaW9kKTtcclxuICAgICAgICAgICAgICAgICAgICAvL0xlIHVzbyBzZW1wcmUgZW50cmFtYmUgaW5zaWVtZS4gTGEgcHJpbWEgw6ggbGEgY2xhc3NlIHBlciBsYSBsb2dpY2EsIGxhIHNlY29uZGEgcGVyIGxlIGFuaW1hemlvbmlcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0TGkucmVtb3ZlQ2xhc3MoXCJzaWRlYmFyLWl0ZW0tZXhwYW5kZWRcIiArIFwiX1wiICsgKGxldmVsQ2xhc3NQbHVzT25lKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdExpLnJlbW92ZUNsYXNzKFwic2lkZWJhci1pdGVtLWV4cGFuZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vRG9wb2RpY2jvv70gcmljaGl1ZG8gdHV0dGkgcXVlbGxpIGRlbCBtaW8gbGl2ZWxsbyBhdHR1YWxlXHJcbiAgICAgICAgICAgIGpRdWVyeShcInVsLm5hdi1zaWRlYmFyIGxpXCIgKyBcIi5cIiArIGxldmVsQ2xhc3MpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNsb3Nlc3RMaSA9IGpRdWVyeSh0aGlzKS5jbG9zZXN0KFwibGlcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdExpLmNoaWxkcmVuKFwidWxcIikubGVuZ3RoICYmIGNsb3Nlc3RMaS5oYXNDbGFzcyhcInNpZGViYXItaXRlbS1leHBhbmRlZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RMaS5jaGlsZHJlbihcInVsXCIpLnNsaWRlVXAoc2xpZGVQZXJpb2QpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vTGUgdXNvIHNlbXByZSBlbnRyYW1iZSBpbnNpZW1lLiBMYSBwcmltYSDDqCBsYSBjbGFzc2UgcGVyIGxhIGxvZ2ljYSwgbGEgc2Vjb25kYSBwZXIgbGUgYW5pbWF6aW9uaVxyXG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RMaS5yZW1vdmVDbGFzcyhcInNpZGViYXItaXRlbS1leHBhbmRlZFwiICsgXCJfXCIgKyBsZXZlbENsYXNzKTtcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0TGkucmVtb3ZlQ2xhc3MoXCJzaWRlYmFyLWl0ZW0tZXhwYW5kZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy9Eb3BvZGljaO+/vSBlc3BhbmRvIHF1ZWxsbyBhdHR1YWxlXHJcbiAgICAgICAgICAgIGxpbmsubmV4dCgpLnNsaWRlRG93bihzbGlkZVBlcmlvZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbS5zdWJNZW51KSB7XHJcbiAgICAgICAgICAgICAgICAvL0xlIHVzbyBzZW1wcmUgZW50cmFtYmUgaW5zaWVtZS4gTGEgcHJpbWEgw6ggbGEgY2xhc3NlIHBlciBsYSBsb2dpY2EsIGxhIHNlY29uZGEgcGVyIGxlIGFuaW1hemlvbmlcclxuICAgICAgICAgICAgICAgIGxpbmsuY2xvc2VzdChcImxpXCIpLmFkZENsYXNzKFwic2lkZWJhci1pdGVtLWV4cGFuZGVkXCIgKyBcIl9cIiArIGxldmVsQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgbGluay5jbG9zZXN0KFwibGlcIikuYWRkQ2xhc3MoXCJzaWRlYmFyLWl0ZW0tZXhwYW5kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvL0FsdHJpbWVudGksIHNlIGwnZWxlbWVudG8gw6ggZ2nDoCBlc3BhbnNvIGxvIGNoaXVkb1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5zdWJNZW51KSB7XHJcbiAgICAgICAgICAgICAgICAvL0xlIHVzbyBzZW1wcmUgZW50cmFtYmUgaW5zaWVtZS4gTGEgcHJpbWEgw6ggbGEgY2xhc3NlIHBlciBsYSBsb2dpY2EsIGxhIHNlY29uZGEgcGVyIGxlIGFuaW1hemlvbmlcclxuICAgICAgICAgICAgICAgIGxpbmsuY2xvc2VzdChcImxpXCIpLnJlbW92ZUNsYXNzKFwic2lkZWJhci1pdGVtLWV4cGFuZGVkXCIgKyBcIl9cIiArIGxldmVsQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgbGluay5jbG9zZXN0KFwibGlcIikucmVtb3ZlQ2xhc3MoXCJzaWRlYmFyLWl0ZW0tZXhwYW5kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxpbmsubmV4dCgpLnNsaWRlVXAoc2xpZGVQZXJpb2QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBGb290ZXJcclxuICAgIHB1YmxpYyBvbkNoYW5nZVRlbmFudCgpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAke215Y29uZmlnLkF1dGhVcmx9LyMvbG9naW47Y2xpZW50PSR7bXljb25maWcuQ2xpZW50fWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uTG9nb3V0KCkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYCR7bXljb25maWcuQXV0aFVybH0vIy9sb2dvdXQ7Y2xpZW50PSR7bXljb25maWcuQ2xpZW50fWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRVc2VyUHJvZmlsZURhdGEoKSB7XHJcbiAgICAgICAgdmFyIGlkZW50aXR5ID0gdGhpcy5zci5nZXRKYWNlSWRlbnRpdHkoKTtcclxuXHJcbiAgICAgICAgaWYgKGlkZW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlciA9IGlkZW50aXR5LkZ1bGxOYW1lO1xyXG4gICAgICAgICAgICB0aGlzLnRlbmFudCA9IGlkZW50aXR5LlRlbmFudE5hbWU7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZS5kb1JlbG9hZFByb2ZpbGVQaWN0dXJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBHZXN0aW9uZSBSaWNlcmNhIEdsb2JhbGVcclxuICAgIHB1YmxpYyBTZWxlY3RlZFJlc3VsdDogU2VhcmNoUmVzdWx0ID0gbnVsbDtcclxuICAgIHB1YmxpYyBTaG93U2luZ2xlVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzZWFyY2hUZXJtOiBzdHJpbmc7XHJcbiAgICBzZWFyY2hpbmdUZXJtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBzZWFyY2hSZXN1bHQ6IFNlYXJjaFJlc3VsdENvbnRhaW5lcjtcclxuXHJcbiAgICBvblNlYXJjaFJlcXVlc3QoKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hpbmdUZXJtID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5nbG9iYWxTZWFyY2hTZXJ2aWNlLkVuYWJsZWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGVybS50cmltKCkubGVuZ3RoIDwgMykge1xyXG4gICAgICAgICAgICB0aGlzLm1zZ0V4dHMuc2ltcGxlV2FybmluZyh0aGlzLmxjLmxvYyhcIlNjcml2ZXJlIGFsbWVubyAzIGNhcmF0dGVyaSBwZXIgdXRpbGl6emFyZSBsYSByaWNlcmNhIGdsb2JhbGVcIikpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFNlcnZpY2Uuc2VhcmNoKHRoaXMuc2VhcmNoVGVybSkuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaGluZ1Rlcm0gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHQgPSB0O1xyXG5cclxuICAgICAgICAgICAgLy8gU2hvcnQtY2lyY3VpdCBpbiBhc3NlbnphIGRpIHJpc3VsdGF0aVxyXG4gICAgICAgICAgICBpZiAoKHRoaXMuc2VhcmNoUmVzdWx0LnJlc3VsdHMubGVuZ3RoIHx8IDApID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHQucmVzdWx0cy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdC5lc3RfY29scyA9IHQuY29sdW1ucy5tYXAoYyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbExpbmsgPSB0aGlzLmdsb2JhbFNlYXJjaFNlcnZpY2UuZ2VuZXJhdGVDb2x1bW5MaW5rKGMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uKGMuZGVzY3JpcHRpb24sIGMuaWQsIGNvbExpbms/LnJvdXRlUGF0aCwgY29sTGluaz8ucm91dGVQcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VhcmNoTW9kZWxDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hpbmdUZXJtKVxyXG4gICAgICAgICAgICB0aGlzLmNsb3NlU2VhcmNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hpbmdUZXJtID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIEZpbHRlclNlYXJjaFJlc3VsdHMoaXRlbTogU2VhcmNoUmVzdWx0ID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRSZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuU2hvd1NpbmdsZVRhYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlbGVjdGVkUmVzdWx0ID0gdGhpcy5zZWFyY2hSZXN1bHQ/LnJlc3VsdHM/LmZpbmQoZiA9PiBmLmRlc2NyaXB0aW9uID09IGl0ZW0uZGVzY3JpcHRpb24pO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLlNob3dTaW5nbGVUYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG59IiwiPGRpdiAjc2lkZWJhciBjbGFzcz1cImFwcC1zaWRlYmFyXCIgW2NsYXNzLm1lbnUtY29sbGFwc2VkXT1cImlzTWVudUNvbGxhcHNlZFwiIChtb3VzZWxlYXZlLm91dC16b25lKT1cInNlbmRBd2F5SG92ZXJFbGVtZW50KCk7XCI+XHJcbiAgICA8IS0tSmFjZSBMb2dvLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXBwLWxvZ28tY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1wb2ludGVyXCIgW3JvdXRlckxpbmtdPVwiWycvcGFnZXMvZGFzaGJvYXJkJ11cIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDEwcHg7IG92ZXJmbG93OiBoaWRkZW5cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc01lbnVDb2xsYXBzZWRcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhcHAtbG9nby1pbWdcIiBzcmM9XCJhc3NldHMvaW1nL2xvZ28vaGVhZGxvZ29fc21hbGwucG5nXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLWxvZ28tZm9udC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcC1sb2dvLWZvbnRcIj57e2FwcGxpY2F0aW9uTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiaXNNZW51Q29sbGFwc2VkXCIgY2xhc3M9XCJhcHAtbG9nby1pbWctc21cIiBzcmM9XCJhc3NldHMvaW1nL2xvZ28vaGVhZGxvZ29fc21hbGwucG5nXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1SaWNlcmNhIGdsb2JhbGUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCIhaXNNZW51Q29sbGFwc2VkXCIgY2xhc3M9XCJhcHAtc2lkZWJhci1zZWFyY2hcIj5cclxuICAgICAgICA8Zm9ybSBub3ZhbGlkYXRlIHJvbGU9XCJzZWFyY2hcIiBjbGFzcz1cImFwcC1zZWFyY2hcIiAobmdTdWJtaXQpPVwib25TZWFyY2hSZXF1ZXN0KClcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJSaWNlcmNhLi4uXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hNb2RlbENoYW5nZWQoKVwiIG5hbWU9XCJzZWFyY2hcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgICAgICAgICA8YT48aSBjbGFzcz1cImZhciBmYS1tYWduaWZ5aW5nLWdsYXNzXCI+PC9pPjwvYT5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1CYXJyYSBsYXRlcmFsZSBjb24gdHV0dGUgbGUgdm9jaSBkaSBNZW51LS0+XHJcbiAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXNpZGViYXIgZmxleC1jb2x1bW4gZmxleC1ub3dyYXBcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgem9vbTogMVwiIHNsaW0tc2Nyb2xsIFtzbGltU2Nyb2xsT3B0aW9uc109XCJ7aGVpZ2h0OiBtZW51SGVpZ2h0ICsgKGlzTWVudUNvbGxhcHNlZCA/IDU1IDogMCl9XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBtZW51SXRlbXM7IGxldCBsYXN0ID0gbGFzdDtcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiaXRlbS52aXNpYmxlXCIgY2xhc3M9XCJzaWRlYmFyLWxpc3QtaXRlbSBsZXZlbC17e2l0ZW0ubGV2ZWx9fVwiIFxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbi1ib3R0b21dPVwibGFzdCA/ICc0MnB4JyA6ICcwcHgnXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5oYXMtc3ViLW1lbnVdPVwiaXRlbS5zdWJNZW51XCIgXHJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2lkZWJhci1pdGVtLWV4cGFuZGVkXT1cIml0ZW0uZXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNpZGViYXItaXRlbS13aXBdPVwiaXRlbS53aXBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbTsgY29udGV4dCA6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdWw+XHJcbiAgICA8IS0tU2VsZXR0b3JlIEJhcnJhIGRlaSBNZW51LS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1ob3Zlci1lbGVtXCI+PC9kaXY+XHJcbiAgICA8IS0tRm9vdGVyICpuZ0lmPVwiIWlzTWVudUNvbGxhcHNlZFwiLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXBwLXNpZGViYXItZm9vdGVyXCI+XHJcbiAgICAgICAgPCEtLU1pbnVzY29sbyBmYWRlIHRyYSBzaWRlYmFyIGUgaW5pemlvIGZvb3Rlci0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtc2lkZWJhci1mb290ZXItZmFkZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgW3N0eWxlLnBhZGRpbmcucHhdPVwiaXNNZW51Q29sbGFwc2VkID8gNSA6IDE1XCI+XHJcbiAgICAgICAgICAgIDwhLS1JbmZvcm1hemlvbmkgdXRlbnRlIGNvbGxlZ2F0by0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNpZGViYXItZm9vdGVyLXVzZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tTWVudHJlIHN0byBhbmNvcmEgY2FyaWNhbmRvIGxhIFByb2ZpbGVQaWMgbWkgYXNzaWN1cm8gZGkgbW9zdHJhcmUgdW4gcGxhY2Vob2xkZXItLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcHJvZmlsZS5Qcm9maWxlUGljdHVyZVwiIGNsYXNzPVwiYXBwLXNpZGViYXItZm9vdGVyLXVzZXItaW1nLXBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtMnggZmEtc3Bpbm5lciBmYS1zcGluLXB1bHNlXCIgc3R5bGU9XCJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDVweDtcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1VbmEgdm9sdGEgY2FyaWNhdGEgbGEgUHJvZmlsZVBpYyBuYXNjb25kbyBpbCBwbGFjZWhvbGRlciBlIGxhIG1vc3Ryby0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2ZpbGUuUHJvZmlsZVBpY3R1cmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicHJvZmlsZS5Qcm9maWxlUGljdHVyZVwiIGFsdD1cIlwiIGNsYXNzPVwiYXBwLXNpZGViYXItZm9vdGVyLXVzZXItaW1nIGFwcC1wb2ludGVyXCIgW3JvdXRlckxpbmtdPVwiWycvcGFnZXMvcHJvZmlsZSddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3Rlci11c2VyLXN0YXR1c1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8IS0tVXNlcm5hbWUgYW5pbWF0byBxdWFuZG8gc3VwZXJhIGkgMTUgY2FyYXR0ZXJpLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNpZGViYXItZm9vdGVyLXVzZXItbmFtZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlcm5hbWUtdGV4dFwiIFtjbGFzcy51c2VybmFtZS10ZXh0LWFuaW1hdG9yXT1cInVzZXI/Lmxlbmd0aCA+IDE1XCI+e3t1c2VyfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVuYW50bmFtZS10ZXh0XCI+e3t0ZW5hbnR9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tT3BlcmF6aW9uaSByYXBpZGUgKExvZ291dCwgQ2FtYmlhIHRlbmFudCwgR3VpZGEsIFN1cHBvcnRvLC4uLiktLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3Rlci1xdWljay1vcHNcIiBbc3R5bGUuZGlzcGxheV09XCJpc01lbnVDb2xsYXBzZWQgPyAnaW5saW5lJyA6ICdmbGV4J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DaGFuZ2VUZW5hbnQoKTtcIiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3Rlci1vcCBhcHAtbm8tc2VsZWN0aW9uXCIgW3N0eWxlLm1hcmdpbi10b3AucHhdPVwiaXNNZW51Q29sbGFwc2VkID8gMTAgOiAwXCI+PGkgY2xhc3M9XCJmYXIgZmEtcmlnaHQtbGVmdFwiPjwvaT48c3BhbiAqbmdJZj1cIiFpc01lbnVDb2xsYXBzZWRcIj4mbmJzcDtDYW1iaWEgVGVuYW50PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25Mb2dvdXQoKTtcIiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3Rlci1vcCBhcHAtbm8tc2VsZWN0aW9uXCIgW3N0eWxlLm1hcmdpbi10b3AucHhdPVwiaXNNZW51Q29sbGFwc2VkID8gMTAgOiAwXCI+PGkgY2xhc3M9XCJmYXIgZmEtcmlnaHQtZnJvbS1icmFja2V0XCI+PC9pPjxzcGFuICpuZ0lmPVwiIWlzTWVudUNvbGxhcHNlZFwiPiZuYnNwO0xvZ291dDwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS1WZXJzaW9uZSBjb3JyZW50ZSBhcHBsaWNhemlvbmUtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc01lbnVDb2xsYXBzZWRcIiBjbGFzcz1cImFwcC1zaWRlYmFyLWZvb3Rlci12ZXJcIj5cclxuICAgICAgICAgICAgICAgIHZ7e2FwcGxpY2F0aW9uVmVyc2lvbn19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNtZW51SXRlbSBsZXQtaXRlbT5cclxuICAgIDxhIFtzdHlsZS5wYWRkaW5nLWxlZnQucHhdPVwiaXRlbS5wYWRkaW5nX2xlZnRcIiAqbmdJZj1cIighaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLnN1Yk1lbnUpIHx8IGl0ZW0ud2lwXCIgW2hyZWZdPVwiaXRlbS5saW5rIHx8ICcjJ1wiIChjbGljayk9XCJpdGVtLndpcCAmJiAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwic2lkZWJhci1saXN0LWxpbmsge3tpdGVtLmNzc0NsYXNzIHx8ICcnfX1cIiAobW91c2VlbnRlci5vdXQtem9uZSk9XCJob3Zlckl0ZW0oJGV2ZW50KVwiPlxyXG4gICAgICAgIDxpICpuZ0lmPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJ7eyBpdGVtLmljb24gfX1cIj48L2k+PHNwYW4+e3sgaXRlbS50aXRsZSB8IGxvY2FsaXplIDogbGMgfX08L3NwYW4+XHJcbiAgICA8L2E+XHJcblxyXG4gICAgPGEgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCJpdGVtLnBhZGRpbmdfbGVmdFwiICpuZ0lmPVwiaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLnN1Yk1lbnUgJiYgIWl0ZW0ud2lwXCIgY2xhc3M9XCJzaWRlYmFyLWxpc3QtbGluayB7e2l0ZW0uY3NzQ2xhc3MgfHwgJyd9fVwiIFtyb3V0ZXJMaW5rXT1cIltpdGVtLnJvdXRlckxpbmtdXCIgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlLWxpbmtcIiAoY2xpY2sub3V0LXpvbmUpPVwiY29sbGFwc2VNZW51KCRldmVudCwgaXRlbSk7IG9uTWVudU5hdmlnYXRpb24oaXRlbSlcIiAobW91c2VlbnRlci5vdXQtem9uZSk9XCJob3Zlckl0ZW0oJGV2ZW50KVwiPlxyXG4gICAgICAgIDxpICpuZ0lmPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJ7eyBpdGVtLmljb24gfX1cIj48L2k+PHNwYW4+e3sgaXRlbS50aXRsZSB8IGxvY2FsaXplIDogbGMgfX08L3NwYW4+XHJcbiAgICA8L2E+XHJcblxyXG4gICAgPGEgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCJpdGVtLnBhZGRpbmdfbGVmdFwiICpuZ0lmPVwiaXRlbS5zdWJNZW51ICYmICFpdGVtLndpcFwiIChjbGljay5vdXQtem9uZSk9XCJjb2xsYXBzZU1lbnUoJGV2ZW50LCBpdGVtKVwiIFthdHRyLmhyZWZdPVwiJydcIiBjbGFzcz1cInNpZGViYXItbGlzdC1saW5rIHt7aXRlbS5jc3NDbGFzcyB8fCAnJ319XCIgKG1vdXNlZW50ZXIub3V0LXpvbmUpPVwiaG92ZXJJdGVtKCRldmVudClcIj5cclxuICAgICAgICA8aSAqbmdJZj1cIml0ZW0uaWNvblwiIGNsYXNzPVwie3sgaXRlbS5pY29uIH19XCI+PC9pPjxzcGFuPnt7IGl0ZW0udGl0bGUgfCBsb2NhbGl6ZSA6IGxjIH19PC9zcGFuPlxyXG4gICAgICAgIDxiIGNsYXNzPVwiZmEgZmEtYW5nbGUtZG93blwiPjwvYj5cclxuICAgIDwvYT5cclxuXHJcbiAgICA8dWwgKm5nSWY9XCJpdGVtLnN1Yk1lbnVcIiBjbGFzcz1cInNpZGViYXItc3VibGlzdFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1Yml0ZW0gb2YgaXRlbS5zdWJNZW51XCIgPlxyXG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJzdWJpdGVtLnZpc2libGVcIiBjbGFzcz1cInNpZGViYXItc3VibGlzdC1pdGVtIGxldmVsLXt7aXRlbS5sZXZlbH19XCIgW2NsYXNzLnNpZGViYXItaXRlbS13aXBdPVwic3ViaXRlbS53aXBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbTsgY29udGV4dCA6IHskaW1wbGljaXQ6IHN1Yml0ZW19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3VsPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBPdmVybGF5IHBlciBsYSByaWNlcmNhIGdsb2JhbGUgLS0+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hpbmdUZXJtIHx8IHNlYXJjaFJlc3VsdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFwcC1hYnNvbHV0ZSBhcHAtc2VhcmNoLWJhY2tncm91bmRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlYXJjaC1yZXN1bHQtYm94XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hpbmdUZXJtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlYXJjaC1jYXJkXCI+PGkgY2xhc3M9XCJmYSBmYS1zcGlubmVyIGZhLXNwaW5cIj48L2k+U3RvIGVmZmV0dHVhbmRvIGxhIHJpY2VyY2EuLi48L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hSZXN1bHQgJiYgIXNlYXJjaGluZ1Rlcm1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFNwYXppbyBhIHNpbmlzdHJhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQmxvY2NvIGNvbiBsZSBjYXRlZ29yaWUgZGVpIHJpc3VsdGF0aSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWFyY2gtY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1yZWxhdGl2ZVwiPjxhIGNsYXNzPVwiZmEgZmEtdGltZXMgdGV4dC1kYW5nZXIgYXBwLWFic29sdXRlIGFwcC1yaWdodC0wIGFwcC1mcy0yMCBhcHAtcG9pbnRlclwiIChjbGljayk9XCJjbG9zZVNlYXJjaCgpO1wiPjwvYT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5DYXRlZ29yaWUgZGkgUmljZXJjYTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXBvaW50ZXIgYXBwLWxpbmtcIiBbY2xhc3MuYXBwLWJvbGRdPVwiIVNlbGVjdGVkUmVzdWx0ICYmICFTaG93U2luZ2xlVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiRmlsdGVyU2VhcmNoUmVzdWx0cygpXCI+e3tTZWxlY3RlZFJlc3VsdCA/ICctJyA6ICc+J319IE1vc3RyYSBUdXR0bzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWFyY2hSZXN1bHQucmVzdWx0c1wiIGNsYXNzPVwiYXBwLXBvaW50ZXIgYXBwLWxpbmtcIiBbY2xhc3MuYXBwLWJvbGRdPVwiU2VsZWN0ZWRSZXN1bHQ/LmRlc2NyaXB0aW9uID09IGl0ZW0uZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiRmlsdGVyU2VhcmNoUmVzdWx0cyhpdGVtKVwiPnt7U2VsZWN0ZWRSZXN1bHQ/LmRlc2NyaXB0aW9uID09IGl0ZW0uZGVzY3JpcHRpb24gPyAnPicgOiAnLSd9fSBNb3N0cmEge3tpdGVtLmRlc2NyaXB0aW9ufX0gKHt7aXRlbS5pdGVtcz8ubGVuZ3RofX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRGV0dGFnbGlvIHJpc3VsdGF0aSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIiBzdHlsZT1cIm92ZXJmbG93OiBhdXRvOyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhU2VsZWN0ZWRSZXN1bHQgJiYgIVNob3dTaW5nbGVUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcmVzIG9mIHNlYXJjaFJlc3VsdC5yZXN1bHRzOyBsZXQgaSA9IGluZGV4O1wiIGNsYXNzPVwiYXBwLXNlYXJjaC1jYXJkXCIgW3N0eWxlLm1hcmdpbi1ib3R0b20ucHhdPVwiaSA9PSAoc2VhcmNoUmVzdWx0LnJlc3VsdHM/Lmxlbmd0aCAtIDEpID8gMiA6IDEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0Pnt7cmVzLmRlc2NyaXB0aW9ufX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlcy10YWJsZSBbKG5nTW9kZWwpXT1cInJlcy5pdGVtc1wiIFtEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb25dPVwicmVzLmVzdF9jb2xzXCIgW0FycmF5bW9kZUl0ZW1zUGVyUGFnZV09XCIxMFwiPjwvZXMtdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTZWxlY3RlZFJlc3VsdCAmJiBTaG93U2luZ2xlVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtc2VhcmNoLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+e3tTZWxlY3RlZFJlc3VsdC5kZXNjcmlwdGlvbn19PC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXMtdGFibGUgWyhuZ01vZGVsKV09XCJTZWxlY3RlZFJlc3VsdC5pdGVtc1wiIFtEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb25dPVwiU2VsZWN0ZWRSZXN1bHQuZXN0X2NvbHNcIiBbQXJyYXltb2RlSXRlbXNQZXJQYWdlXT1cIjEwXCI+PC9lcy10YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFNwYXppbyBhIGRlc3RyYSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj4iXX0=
|
|
@@ -25,7 +25,7 @@ export class esRouterLinkWithHref extends RouterLinkWithHref {
|
|
|
25
25
|
onClick(button, ctrlKey, shiftKey, altKey, metaKey) {
|
|
26
26
|
if (this.emb.Embedded) {
|
|
27
27
|
let url = this.urlTree.toString().replace(EMBEDDED_ROUTE, ROUTE + "/embed/" + myconfig.AppData.ModuleId);
|
|
28
|
-
this.emb.MainWindow.postMessage({ type: "navigate", url, newTab: ctrlKey, replaceState: !ctrlKey }, "*");
|
|
28
|
+
this.emb.MainWindow.postMessage({ type: "navigate", url, newTab: ctrlKey, replaceState: !ctrlKey, current: this.router.url }, "*");
|
|
29
29
|
if (!ctrlKey)
|
|
30
30
|
return super.onClick(button, ctrlKey, shiftKey, altKey, metaKey);
|
|
31
31
|
else
|
|
@@ -52,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
52
52
|
type: HostListener,
|
|
53
53
|
args: ['click', ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey']]
|
|
54
54
|
}] } });
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtcm91dGVyTGluay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2RpcmVjdGl2ZXMvc3JjL2VzLXJvdXRlckxpbmsvZXMtcm91dGVyTGluay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQTBCLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBYyxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7QUFTMUUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGtCQUFrQjtJQUV4RCxZQUNZLEdBQTJCLEVBQ25DLE1BQWMsRUFBRSxLQUFxQixFQUNkLGlCQUE0QyxFQUNuRSxRQUFtQixFQUFFLEVBQWMsRUFDbkMsZ0JBQW1DO1FBRW5DLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQU4vRCxRQUFHLEdBQUgsR0FBRyxDQUF3QjtJQU92QyxDQUFDO0lBRUQsSUFDSSxZQUFZLENBQUMsUUFBMkM7UUFDeEQsSUFBSSxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEUsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ2pCLElBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pFLElBQUksS0FBSyxHQUFLLElBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFZLENBQUM7WUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO2dCQUN4RSxJQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBSSxJQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO2FBQU07WUFDRixJQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUNqQztJQUNMLENBQUM7SUFHUSxPQUFPLENBQUMsTUFBYyxFQUFFLE9BQWdCLEVBQUUsUUFBaUIsRUFBRSxNQUFlLEVBQUUsT0FBZ0I7UUFDbkcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNuQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsS0FBSyxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRyxJQUFrQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVsSyxJQUFJLENBQUMsT0FBTztnQkFDUixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztnQkFFakUsT0FBTyxLQUFLLENBQUM7U0FDcEI7O1lBRUcsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RSxDQUFDOztrSEF2Q1Esb0JBQW9CLDRHQUtkLFVBQVU7c0dBTGhCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQ0FBb0M7b0JBQzlDLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7MEJBTVEsU0FBUzsyQkFBQyxVQUFVOzRIQVFyQixZQUFZO3NCQURmLEtBQUs7Z0JBZUcsT0FBTztzQkFEZixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IExvY2F0aW9uU3RyYXRlZ3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IEF0dHJpYnV0ZSwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBSZW5kZXJlcjIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBSb3V0ZXJMaW5rV2l0aEhyZWYgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEVNQkVEREVEX1JPVVRFLCBFbnZPcHRpb25zLCBST1VURSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIjtcclxuaW1wb3J0IHsgQXBwRW1iZWRkaW5nRXh0ZW5zaW9ucyB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5cclxuZGVjbGFyZSB2YXIgbXljb25maWc6IEVudk9wdGlvbnM7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnYVtlc1JvdXRlckxpbmtdLGFyZWFbZXNSb3V0ZXJMaW5rXScsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBlc1JvdXRlckxpbmtXaXRoSHJlZiBleHRlbmRzIFJvdXRlckxpbmtXaXRoSHJlZiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBlbWI6IEFwcEVtYmVkZGluZ0V4dGVuc2lvbnMsXHJcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBAQXR0cmlidXRlKCd0YWJpbmRleCcpIHRhYkluZGV4QXR0cmlidXRlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIGxvY2F0aW9uU3RyYXRlZ3k/OiBMb2NhdGlvblN0cmF0ZWd5KSB7XHJcblxyXG4gICAgICAgIHN1cGVyKHJvdXRlciwgcm91dGUsIHRhYkluZGV4QXR0cmlidXRlLCByZW5kZXJlciwgZWwsIGxvY2F0aW9uU3RyYXRlZ3kpXHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBlc1JvdXRlckxpbmsoY29tbWFuZHM6IGFueVtdIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGxldCBCYXNlUGF0aCA9IFwiL1wiICsgKHRoaXMuZW1iLkVtYmVkZGVkID8gRU1CRURERURfUk9VVEUgOiBST1VURSk7XHJcblxyXG4gICAgICAgIGlmIChjb21tYW5kcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICh0aGlzIGFzIGFueSkuY29tbWFuZHMgPSBBcnJheS5pc0FycmF5KGNvbW1hbmRzKSA/IGNvbW1hbmRzIDogW2NvbW1hbmRzXTtcclxuICAgICAgICAgICAgbGV0IHJvdXRlID0gKCh0aGlzIGFzIGFueSkuY29tbWFuZHNbMF0gYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgaWYgKCFyb3V0ZS5zdGFydHNXaXRoKFwiL1wiICsgRU1CRURERURfUk9VVEUpICYmICFyb3V0ZS5zdGFydHNXaXRoKFwiL1wiICsgUk9VVEUpKVxyXG4gICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS5jb21tYW5kc1swXSA9IEJhc2VQYXRoICsgKHRoaXMgYXMgYW55KS5jb21tYW5kc1swXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAodGhpcyBhcyBhbnkpLmNvbW1hbmRzID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudC5idXR0b24nLCAnJGV2ZW50LmN0cmxLZXknLCAnJGV2ZW50LnNoaWZ0S2V5JywgJyRldmVudC5hbHRLZXknLCAnJGV2ZW50Lm1ldGFLZXknXSlcclxuICAgIG92ZXJyaWRlIG9uQ2xpY2soYnV0dG9uOiBudW1iZXIsIGN0cmxLZXk6IGJvb2xlYW4sIHNoaWZ0S2V5OiBib29sZWFuLCBhbHRLZXk6IGJvb2xlYW4sIG1ldGFLZXk6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5lbWIuRW1iZWRkZWQpIHtcclxuICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsVHJlZS50b1N0cmluZygpLnJlcGxhY2UoRU1CRURERURfUk9VVEUsIFJPVVRFICsgXCIvZW1iZWQvXCIgKyBteWNvbmZpZy5BcHBEYXRhLk1vZHVsZUlkKTtcclxuICAgICAgICAgICAgdGhpcy5lbWIuTWFpbldpbmRvdy5wb3N0TWVzc2FnZSh7IHR5cGU6IFwibmF2aWdhdGVcIiwgdXJsLCBuZXdUYWI6IGN0cmxLZXksIHJlcGxhY2VTdGF0ZTogIWN0cmxLZXksIGN1cnJlbnQ6ICh0aGlzIGFzIGFueSBhcyB7IHJvdXRlcjogUm91dGVyIH0pLnJvdXRlci51cmwgfSwgXCIqXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdHJsS2V5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLm9uQ2xpY2soYnV0dG9uLCBjdHJsS2V5LCBzaGlmdEtleSwgYWx0S2V5LCBtZXRhS2V5KTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5vbkNsaWNrKGJ1dHRvbiwgY3RybEtleSwgc2hpZnRLZXksIGFsdEtleSwgbWV0YUtleSk7XHJcbiAgICB9XHJcbn0iXX0=
|