keevo-components 1.8.556 → 1.8.557

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.
@@ -290,11 +290,11 @@ export class KvLayoutComponent {
290
290
  }
291
291
  }
292
292
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvLayoutComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormBuilder }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
293
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvLayoutComponent, selector: "kv-layout", inputs: { apps: { classPropertyName: "apps", publicName: "apps", isSignal: false, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: false, isRequired: false, transformFunction: null }, useCard: { classPropertyName: "useCard", publicName: "useCard", isSignal: false, isRequired: false, transformFunction: null }, topMenusVisible: { classPropertyName: "topMenusVisible", publicName: "topMenusVisible", isSignal: true, isRequired: false, transformFunction: null }, profileImage: { classPropertyName: "profileImage", publicName: "profileImage", isSignal: true, isRequired: false, transformFunction: null }, breadCrumbItems: { classPropertyName: "breadCrumbItems", publicName: "breadCrumbItems", isSignal: false, isRequired: false, transformFunction: null }, masters: { classPropertyName: "masters", publicName: "masters", isSignal: false, isRequired: false, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null }, expandMenu: { classPropertyName: "expandMenu", publicName: "expandMenu", isSignal: true, isRequired: false, transformFunction: null }, logoMenuExpand: { classPropertyName: "logoMenuExpand", publicName: "logoMenuExpand", isSignal: false, isRequired: false, transformFunction: null }, logoMenuHide: { classPropertyName: "logoMenuHide", publicName: "logoMenuHide", isSignal: false, isRequired: false, transformFunction: null }, selectedApp: { classPropertyName: "selectedApp", publicName: "selectedApp", isSignal: false, isRequired: false, transformFunction: null }, selectedEmpresa: { classPropertyName: "selectedEmpresa", publicName: "selectedEmpresa", isSignal: false, isRequired: false, transformFunction: null }, selectedMaster: { classPropertyName: "selectedMaster", publicName: "selectedMaster", isSignal: false, isRequired: false, transformFunction: null }, showButtonApps: { classPropertyName: "showButtonApps", publicName: "showButtonApps", isSignal: false, isRequired: false, transformFunction: null }, showButtonUser: { classPropertyName: "showButtonUser", publicName: "showButtonUser", isSignal: false, isRequired: false, transformFunction: null }, showExpandMenu: { classPropertyName: "showExpandMenu", publicName: "showExpandMenu", isSignal: false, isRequired: false, transformFunction: null }, showDropdownLicenca: { classPropertyName: "showDropdownLicenca", publicName: "showDropdownLicenca", isSignal: false, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: false, isRequired: false, transformFunction: null }, showTrocaEmpresa: { classPropertyName: "showTrocaEmpresa", publicName: "showTrocaEmpresa", isSignal: false, isRequired: false, transformFunction: null }, showBreadcrumb: { classPropertyName: "showBreadcrumb", publicName: "showBreadcrumb", isSignal: false, isRequired: false, transformFunction: null }, userName: { classPropertyName: "userName", publicName: "userName", isSignal: false, isRequired: false, transformFunction: null }, userEmail: { classPropertyName: "userEmail", publicName: "userEmail", isSignal: false, isRequired: false, transformFunction: null }, masterName: { classPropertyName: "masterName", publicName: "masterName", isSignal: false, isRequired: false, transformFunction: null }, empresaName: { classPropertyName: "empresaName", publicName: "empresaName", isSignal: false, isRequired: false, transformFunction: null }, idsAplicativosMenuHide: { classPropertyName: "idsAplicativosMenuHide", publicName: "idsAplicativosMenuHide", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { menus: "menusChange", expandMenu: "expandMenuChange", accessKeePassEmit: "accessKeePassEmit", changeEmpresaEmit: "changeEmpresaEmit", changeLicenseEmit: "changeLicenseEmit", expandMenuEmit: "expandMenuEmit", logoutEmit: "logoutEmit", selectAppEmit: "selectAppEmit", navigateToDefaultRouteEmit: "navigateToDefaultRouteEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <span class=\"material-symbols-outlined side-menu-item\">menu</span>\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item troca-sistema-container mb-3 py-2\"\r\n [pTooltip]=\"'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div\r\n class=\"flex flex-column w-full\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span\r\n class=\"text-xs font-semibold mr-2 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span\r\n class=\"text-xs mt-1 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >{{ this.selectedEmpresa.cpfcnpj | cpfCnpj }}</span\r\n >\r\n }\r\n </div>\r\n\r\n }\r\n\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n </div>\r\n\r\n\r\n <!-- MENUS -->\r\n <div class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\">\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{expandMenu() ?'between':'center'}} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom:0.75rem;\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{menu.icone || 'lens_blur'}}</span>\r\n @if(expandMenu()){\r\n <label>{{menu.descricaomenu}}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div class=\"menu-parent\" id=\"menu-parent-{{$index}}\" (mouseenter)=\"exibirMenuChild($event, $index)\" (mouseleave)=\"menuVisivel.set(undefined)\" >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{expandMenu() ?'between':'center'}} gap-2 side-menu-item\" style=\"padding-top: 0.75rem; padding-bottom:0.75rem;\"\r\n \r\n \r\n >\r\n <span class=\"material-symbols-outlined\">{{menu.icone || 'lens_blur'}}</span>\r\n @if(expandMenu()){\r\n <label>{{menu.descricaomenu}}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n \r\n <div class=\"menu-childs\" id=\"menu-child-{{$index}}\" [style.opacity]=\"menuVisivel()===$index?'1':'0'\" [style.pointerEvents]=\"menuVisivel()===$index?'auto':'none'\">\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{menu.descricaomenu}}\r\n </p>\r\n </div>\r\n <p-divider class=\"p-0 m-0\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n \r\n <div \r\n class=\" side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{item.descricaomenu}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n }\r\n }\r\n </div>\r\n\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n }\r\n </div>\r\n\r\n <!-- MENUS -->\r\n <div\r\n class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\"\r\n >\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-parent-{{ $index }}\"\r\n (mouseenter)=\"exibirMenuChild($event, $index)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-child-{{ $index }}\"\r\n [style.opacity]=\"menuVisivel() === $index ? '1' : '0'\"\r\n [style.pointerEvents]=\"\r\n menuVisivel() === $index ? 'auto' : 'none'\r\n \"\r\n >\r\n <div class=\"h-2rem flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{ menu.descricaomenu }}\r\n </p>\r\n </div>\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n\r\n <div\r\n class=\"side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{ item.descricaomenu }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n } }\r\n </div>\r\n\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <!-- APPS E SAIR -->\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-2 flex flex-column gap-2\">\r\n <div class=\"flex flex-column gap-1 w-15rem\">\r\n <span\r\n class=\"text-semibold text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userName }}</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n ></kv-button>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-1\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n \r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-1\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.25rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-sistema-container{font-size:.75rem;opacity:.8;border:1px solid #0A3A78;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05)}.troca-sistema-container:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled"], outputs: ["onClick"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i8.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i9.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i10.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.TopIconsComponent, selector: "kv-top-icons", inputs: ["topActions"] }, { kind: "component", type: i12.DropdownMasterComponent, selector: "dropdown-master", inputs: ["formControlName", "masters"] }, { kind: "pipe", type: i13.CpfCnpjPipe, name: "cpfCnpj" }] }); }
293
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvLayoutComponent, selector: "kv-layout", inputs: { apps: { classPropertyName: "apps", publicName: "apps", isSignal: false, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: false, isRequired: false, transformFunction: null }, useCard: { classPropertyName: "useCard", publicName: "useCard", isSignal: false, isRequired: false, transformFunction: null }, topMenusVisible: { classPropertyName: "topMenusVisible", publicName: "topMenusVisible", isSignal: true, isRequired: false, transformFunction: null }, profileImage: { classPropertyName: "profileImage", publicName: "profileImage", isSignal: true, isRequired: false, transformFunction: null }, breadCrumbItems: { classPropertyName: "breadCrumbItems", publicName: "breadCrumbItems", isSignal: false, isRequired: false, transformFunction: null }, masters: { classPropertyName: "masters", publicName: "masters", isSignal: false, isRequired: false, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null }, expandMenu: { classPropertyName: "expandMenu", publicName: "expandMenu", isSignal: true, isRequired: false, transformFunction: null }, logoMenuExpand: { classPropertyName: "logoMenuExpand", publicName: "logoMenuExpand", isSignal: false, isRequired: false, transformFunction: null }, logoMenuHide: { classPropertyName: "logoMenuHide", publicName: "logoMenuHide", isSignal: false, isRequired: false, transformFunction: null }, selectedApp: { classPropertyName: "selectedApp", publicName: "selectedApp", isSignal: false, isRequired: false, transformFunction: null }, selectedEmpresa: { classPropertyName: "selectedEmpresa", publicName: "selectedEmpresa", isSignal: false, isRequired: false, transformFunction: null }, selectedMaster: { classPropertyName: "selectedMaster", publicName: "selectedMaster", isSignal: false, isRequired: false, transformFunction: null }, showButtonApps: { classPropertyName: "showButtonApps", publicName: "showButtonApps", isSignal: false, isRequired: false, transformFunction: null }, showButtonUser: { classPropertyName: "showButtonUser", publicName: "showButtonUser", isSignal: false, isRequired: false, transformFunction: null }, showExpandMenu: { classPropertyName: "showExpandMenu", publicName: "showExpandMenu", isSignal: false, isRequired: false, transformFunction: null }, showDropdownLicenca: { classPropertyName: "showDropdownLicenca", publicName: "showDropdownLicenca", isSignal: false, isRequired: false, transformFunction: null }, showMenu: { classPropertyName: "showMenu", publicName: "showMenu", isSignal: false, isRequired: false, transformFunction: null }, showTrocaEmpresa: { classPropertyName: "showTrocaEmpresa", publicName: "showTrocaEmpresa", isSignal: false, isRequired: false, transformFunction: null }, showBreadcrumb: { classPropertyName: "showBreadcrumb", publicName: "showBreadcrumb", isSignal: false, isRequired: false, transformFunction: null }, userName: { classPropertyName: "userName", publicName: "userName", isSignal: false, isRequired: false, transformFunction: null }, userEmail: { classPropertyName: "userEmail", publicName: "userEmail", isSignal: false, isRequired: false, transformFunction: null }, masterName: { classPropertyName: "masterName", publicName: "masterName", isSignal: false, isRequired: false, transformFunction: null }, empresaName: { classPropertyName: "empresaName", publicName: "empresaName", isSignal: false, isRequired: false, transformFunction: null }, idsAplicativosMenuHide: { classPropertyName: "idsAplicativosMenuHide", publicName: "idsAplicativosMenuHide", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { menus: "menusChange", expandMenu: "expandMenuChange", accessKeePassEmit: "accessKeePassEmit", changeEmpresaEmit: "changeEmpresaEmit", changeLicenseEmit: "changeLicenseEmit", expandMenuEmit: "expandMenuEmit", logoutEmit: "logoutEmit", selectAppEmit: "selectAppEmit", navigateToDefaultRouteEmit: "navigateToDefaultRouteEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <!-- <span class=\"material-symbols-outlined side-menu-item\" (click)=\"expandMenu.set(!expandMenu())\">menu</span> -->\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item troca-sistema-container mb-3 py-2\"\r\n [pTooltip]=\"'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div\r\n class=\"flex flex-column w-full\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span\r\n class=\"text-xs font-semibold mr-2 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span\r\n class=\"text-xs mt-1 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >{{ this.selectedEmpresa.cpfcnpj | cpfCnpj }}</span\r\n >\r\n }\r\n </div>\r\n\r\n }\r\n\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n </div>\r\n }\r\n </div>\r\n <!-- MENUS -->\r\n <div class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\">\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{expandMenu() ?'between':'center'}} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom:0.75rem;\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{menu.icone || 'lens_blur'}}</span>\r\n @if(expandMenu()){\r\n <label>{{menu.descricaomenu}}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div class=\"menu-parent\" id=\"menu-parent-{{$index}}\" (mouseenter)=\"exibirMenuChild($event, $index)\" (mouseleave)=\"menuVisivel.set(undefined)\" >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{expandMenu() ?'between':'center'}} gap-2 side-menu-item\" style=\"padding-top: 0.75rem; padding-bottom:0.75rem;\"\r\n \r\n \r\n >\r\n <span class=\"material-symbols-outlined\">{{menu.icone || 'lens_blur'}}</span>\r\n @if(expandMenu()){\r\n <label>{{menu.descricaomenu}}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div class=\"menu-childs\" id=\"menu-child-{{$index}}\" [style.opacity]=\"menuVisivel()===$index?'1':'0'\" [style.pointerEvents]=\"menuVisivel()===$index?'auto':'none'\">\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{menu.descricaomenu}}\r\n </p>\r\n </div>\r\n <p-divider class=\"p-0 m-0\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n \r\n <div \r\n class=\" side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{item.descricaomenu}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n }\r\n }\r\n </div>\r\n\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <!-- APPS E SAIR -->\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-2 flex flex-column gap-2\">\r\n <div class=\"flex flex-column gap-1 w-15rem\">\r\n <span\r\n class=\"text-semibold text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userName }}</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n ></kv-button>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-1\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n \r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-1\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.25rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-sistema-container{font-size:.75rem;opacity:.8;border:1px solid #0A3A78;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05)}.troca-sistema-container:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled"], outputs: ["onClick"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i8.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i9.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i10.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.TopIconsComponent, selector: "kv-top-icons", inputs: ["topActions"] }, { kind: "component", type: i12.DropdownMasterComponent, selector: "dropdown-master", inputs: ["formControlName", "masters"] }, { kind: "pipe", type: i13.CpfCnpjPipe, name: "cpfCnpj" }] }); }
294
294
  }
295
295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvLayoutComponent, decorators: [{
296
296
  type: Component,
297
- args: [{ selector: 'kv-layout', template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <span class=\"material-symbols-outlined side-menu-item\">menu</span>\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item troca-sistema-container mb-3 py-2\"\r\n [pTooltip]=\"'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div\r\n class=\"flex flex-column w-full\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span\r\n class=\"text-xs font-semibold mr-2 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span\r\n class=\"text-xs mt-1 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >{{ this.selectedEmpresa.cpfcnpj | cpfCnpj }}</span\r\n >\r\n }\r\n </div>\r\n\r\n }\r\n\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n </div>\r\n\r\n\r\n <!-- MENUS -->\r\n <div class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\">\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{expandMenu() ?'between':'center'}} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom:0.75rem;\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{menu.icone || 'lens_blur'}}</span>\r\n @if(expandMenu()){\r\n <label>{{menu.descricaomenu}}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div class=\"menu-parent\" id=\"menu-parent-{{$index}}\" (mouseenter)=\"exibirMenuChild($event, $index)\" (mouseleave)=\"menuVisivel.set(undefined)\" >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{expandMenu() ?'between':'center'}} gap-2 side-menu-item\" style=\"padding-top: 0.75rem; padding-bottom:0.75rem;\"\r\n \r\n \r\n >\r\n <span class=\"material-symbols-outlined\">{{menu.icone || 'lens_blur'}}</span>\r\n @if(expandMenu()){\r\n <label>{{menu.descricaomenu}}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n \r\n <div class=\"menu-childs\" id=\"menu-child-{{$index}}\" [style.opacity]=\"menuVisivel()===$index?'1':'0'\" [style.pointerEvents]=\"menuVisivel()===$index?'auto':'none'\">\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{menu.descricaomenu}}\r\n </p>\r\n </div>\r\n <p-divider class=\"p-0 m-0\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n \r\n <div \r\n class=\" side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{item.descricaomenu}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n }\r\n }\r\n </div>\r\n\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n }\r\n </div>\r\n\r\n <!-- MENUS -->\r\n <div\r\n class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\"\r\n >\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-parent-{{ $index }}\"\r\n (mouseenter)=\"exibirMenuChild($event, $index)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{\r\n menu.icone || \"lens_blur\"\r\n }}</span>\r\n @if(expandMenu()){\r\n <label>{{ menu.descricaomenu }}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-child-{{ $index }}\"\r\n [style.opacity]=\"menuVisivel() === $index ? '1' : '0'\"\r\n [style.pointerEvents]=\"\r\n menuVisivel() === $index ? 'auto' : 'none'\r\n \"\r\n >\r\n <div class=\"h-2rem flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{ menu.descricaomenu }}\r\n </p>\r\n </div>\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n\r\n <div\r\n class=\"side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{ item.descricaomenu }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n } }\r\n </div>\r\n\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <!-- APPS E SAIR -->\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-2 flex flex-column gap-2\">\r\n <div class=\"flex flex-column gap-1 w-15rem\">\r\n <span\r\n class=\"text-semibold text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userName }}</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n ></kv-button>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-1\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n \r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-1\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.25rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-sistema-container{font-size:.75rem;opacity:.8;border:1px solid #0A3A78;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05)}.troca-sistema-container:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}\n"] }]
297
+ args: [{ selector: 'kv-layout', template: "<div class=\"flex flex-row full-container\">\r\n @if(showMenu) {\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{ width: expandMenu() ? '17rem' : '3.65rem' }\"\r\n styleClass=\"transition-all\"\r\n >\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"h-full flex flex-column overflow-hidden p-2\">\r\n <div\r\n class=\"flex-none flex flex-column gap-3 justify-content-between flex-shrink-0 overflow-hidden\"\r\n >\r\n <!-- LOGO -->\r\n <div\r\n class=\"flex {{\r\n expandMenu() ? 'flex-row' : 'flex-column'\r\n }} align-items-center {{\r\n expandMenu()\r\n ? 'justify-content-between'\r\n : 'justify-content-center'\r\n }} p-2\"\r\n >\r\n <!-- Logo para o menu expandido -->\r\n @if(expandMenu() && logoMenuExpand){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuExpand\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-0\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Logo para o menu minimizado-->\r\n @if(!expandMenu() && logoMenuHide){\r\n <img\r\n alt=\"Card\"\r\n [src]=\"logoMenuHide\"\r\n [style.height]=\"'2.4rem'\"\r\n width=\"auto\"\r\n class=\"cursor-pointer p-1\"\r\n (click)=\"navigateToDefaultRoute()\"\r\n />\r\n }\r\n\r\n <!-- Toggle menu -->\r\n @if(showExpandMenu){\r\n <!-- <span class=\"material-symbols-outlined side-menu-item\" (click)=\"expandMenu.set(!expandMenu())\">menu</span> -->\r\n }\r\n </div>\r\n\r\n @if(showTrocaEmpresa){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item troca-sistema-container mb-3 py-2\"\r\n [pTooltip]=\"'Trocar de empresa'\"\r\n [tooltipPosition]=\"'right'\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(expandMenu() && selectedEmpresa){\r\n <div\r\n class=\"flex flex-column w-full\"\r\n (click)=\"changeEmpresa($event)\"\r\n >\r\n @if(this.selectedEmpresa.razaosocial){\r\n <span\r\n class=\"text-xs font-semibold mr-2 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >\r\n {{ nameEmpresa(this.selectedEmpresa.razaosocial) }}\r\n </span>\r\n } @if(this.selectedEmpresa.cpfcnpj){\r\n <span\r\n class=\"text-xs mt-1 color-system\"\r\n [style.fontSuze]=\"'.5rem'\"\r\n >{{ this.selectedEmpresa.cpfcnpj | cpfCnpj }}</span\r\n >\r\n }\r\n </div>\r\n\r\n }\r\n\r\n <span class=\"material-symbols-outlined\">swap_horiz</span>\r\n </div>\r\n }\r\n </div>\r\n <!-- MENUS -->\r\n <div class=\"flex-1 list-none m-0 overflow-y-auto max-h-full menus-container\">\r\n <!-- menus -->\r\n @for (menu of menus(); track $index) {\r\n @if(!idsAplicativosMenuHide.includes(menu.idaplicativo)){\r\n <li>\r\n <!-- menu que n\u00E3o tem filho -->\r\n @if( !menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)){\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{expandMenu() ?'between':'center'}} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom:0.75rem;\"\r\n (click)=\"callRoute(menu.link)\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{menu.icone || 'lens_blur'}}</span>\r\n @if(expandMenu()){\r\n <label>{{menu.descricaomenu}}</label>\r\n }\r\n </div>\r\n }\r\n <!-- menu com filho -->\r\n @if(menu.indmenupai){\r\n <div class=\"menu-parent\" id=\"menu-parent-{{$index}}\" (mouseenter)=\"exibirMenuChild($event, $index)\" (mouseleave)=\"menuVisivel.set(undefined)\" >\r\n <div\r\n class=\" flex flex-row align-items-center justify-content-{{expandMenu() ?'between':'center'}} gap-2 side-menu-item\" style=\"padding-top: 0.75rem; padding-bottom:0.75rem;\"\r\n \r\n \r\n >\r\n <span class=\"material-symbols-outlined\">{{menu.icone || 'lens_blur'}}</span>\r\n @if(expandMenu()){\r\n <label>{{menu.descricaomenu}}</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div class=\"menu-childs\" id=\"menu-child-{{$index}}\" [style.opacity]=\"menuVisivel()===$index?'1':'0'\" [style.pointerEvents]=\"menuVisivel()===$index?'auto':'none'\">\r\n <div class=\"flex align-items-center\">\r\n <p class=\"p-0 m-0 font-bold pt-2 px-2 text-xs\">\r\n {{menu.descricaomenu}}\r\n </p>\r\n </div>\r\n <p-divider class=\"p-0 m-0\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n <div class=\"menu-childs-content p-0 m-0\">\r\n\r\n @for (item of returnMenuChild(menu.idmenu); track $index) {\r\n \r\n <div \r\n class=\" side-menu-item py-2 px-2 text-sm\"\r\n (click)=\"callRoute(item.link)\"\r\n >\r\n {{item.descricaomenu}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </li>\r\n }\r\n }\r\n </div>\r\n\r\n <p-divider class=\"px-2\" [style.opacity]=\"1\" type=\"solid\"></p-divider>\r\n\r\n <!-- APPS E SAIR -->\r\n <div class=\"flex-none list-none m-0 overflow-y-auto max-h-full\">\r\n <li>\r\n <div\r\n class=\"menu-parent\"\r\n id=\"menu-sistemas-parent\"\r\n (mouseenter)=\"exibirMenuChild($event, -1)\"\r\n (mouseleave)=\"menuVisivel.set(undefined)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sistemas' : ''\"\r\n >\r\n <span class=\"material-symbols-outlined\">grid_view</span>\r\n @if(expandMenu()){\r\n <label>Sistemas</label>\r\n <span class=\"material-symbols-outlined\">chevron_right</span>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"menu-childs\"\r\n id=\"menu-sistemas-child\"\r\n [style.opacity]=\"menuVisivel() === -1 ? '1' : '0'\"\r\n [style.pointerEvents]=\"menuVisivel() === -1 ? 'auto' : 'none'\"\r\n >\r\n <p class=\"p-0 m-0 font-bold pt-2 pl-3 text-xs\">Sistemas</p>\r\n @for (item of apps; track $index) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item py-2 pl-3 pr-1\"\r\n (click)=\"\r\n callRoute(item.rotapadrao); selectApp(item.idaplicativo)\r\n \"\r\n >\r\n <img\r\n [src]=\"item.urlicone\"\r\n class=\"h-2rem w-2rem border-round-lg\"\r\n />\r\n <div class=\"text-sm\">\r\n {{ item.nomeaplicativo }}\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n <!-- <li>\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-{{\r\n expandMenu() ? 'between' : 'center'\r\n }} gap-2 side-menu-item\"\r\n style=\"padding-top: 0.75rem; padding-bottom: 0.75rem\"\r\n [pTooltip]=\"!expandMenu() ? 'Sair' : ''\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n </li> -->\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n }\r\n\r\n <!-- SE\u00C7\u00C3O CONTE\u00DADO -->\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden flex flex-column\"\r\n id=\"page-content\"\r\n style=\"width: 100vw !important\"\r\n >\r\n <!-- TOPO -->\r\n <div\r\n class=\"flex flex-row flex-wrap align-items-center justify-content-between my-2 mx-3 mb-0\"\r\n >\r\n @if(!showMenu) {\r\n <!-- Logo home -->\r\n <div>\r\n <img [src]=\"logoMenuExpand\" width=\"150\" />\r\n </div>\r\n } @else {\r\n <!-- Breadcrumbs -->\r\n @if(showBreadcrumb) {\r\n <div class=\"h-full\">\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem bg-transparent\"\r\n [model]=\"breadCrumbItems\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\r\n >\r\n <ng-template pTemplate=\"item\" let-item let-i=\"index\">\r\n @if(breadCrumbItems.indexOf(item) < breadCrumbItems.length - 1){\r\n <span class=\"font-normal\">{{ item.label }}</span>\r\n } @else {\r\n <span class=\"font-bold\">{{ item.label }}</span>\r\n }\r\n </ng-template>\r\n </p-breadcrumb>\r\n </div>\r\n } @else {\r\n <!-- GHOST DIV PARA OCPUAR ESPA\u00C7O NO SPACE BETWEEN -->\r\n <div></div>\r\n } } @if (exibirNomes) { @if(widthCard >= 517) {\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) {\r\n <span class=\"font-semibold system-color\">{{ masterName }}</span> } @if\r\n (empresaName) {<span class=\"empresa-name\"\r\n >Organiza\u00E7\u00E3o: {{ empresaName }}</span\r\n >\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n } @else {\r\n <div\r\n class=\"w-auto flex flex-row justify-content-center align-items-center gap-2\"\r\n >\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <!-- @for (topAction of topMenuActions(); track $index) {\r\n <ng-container *ngTemplateOutlet=\"topAction\" />\r\n } -->\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n\r\n <div\r\n class=\"w-auto flex flex-column justify-content-center align-items-center gap-2\"\r\n >\r\n @if (masterName) { <span class=\"master-name\">{{ masterName }}</span> }\r\n @if (empresaName) {<span class=\"empresa-name\">{{ empresaName }}</span> }\r\n </div>\r\n } } @else { @if(widthPage() > 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n class=\"max-w-25rem flex-1\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n >\r\n </dropdown-master>\r\n }\r\n\r\n <!-- Navega\u00E7\u00E3o de sistemas e usu\u00E1rios -->\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n <kv-top-icons [topActions]=\"topMenuOptions\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(widthPage() <= 992){\r\n <!-- dropdown para sele\u00E7\u00E3o de empresa/licenca -->\r\n <div class=\"h-2rem mx-3\">\r\n <dropdown-master\r\n *ngIf=\"showLicencas()\"\r\n formControlName=\"idmaster\"\r\n [formGroup]=\"formGroup\"\r\n [masters]=\"masters\"\r\n (onSelectionChange)=\"changeLicense($event)\"\r\n (onSelectionValue)=\"changeLicense($event)\"\r\n />\r\n </div>\r\n\r\n }\r\n\r\n <!-- Container -->\r\n <div class=\"overflow-hidden flex-1 p-0 m-0 mb-2 h-full\">\r\n <div\r\n class=\"overflow-y-auto h-full max-h-full {{\r\n !showMenu && 'sm:overflow-y-hidden'\r\n }} card-container\r\n \r\n {{ useCard ? 'use-card' : '' }}\r\n \"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Painel do usu\u00E1rio -->\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\"\r\n >\r\n <ng-template pTemplate=\"container\">\r\n <div class=\"p-2 flex flex-column gap-2\">\r\n <div class=\"flex flex-column gap-1 w-15rem\">\r\n <span\r\n class=\"text-semibold text-md overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userName }}</span\r\n >\r\n <span\r\n class=\"text-medium text-xs text-gray-500 overflow-hidden white-space-nowrap text-overflow-ellipsis\"\r\n >{{ userEmail }}</span\r\n >\r\n <kv-button\r\n severity=\"secondary\"\r\n label=\"Gerenciar KeePass\"\r\n (onClick)=\"accessKeePass($event)\"\r\n ></kv-button>\r\n </div>\r\n\r\n @if(actions.length > 0) {\r\n <p-divider></p-divider>\r\n\r\n <div class=\"flex flex-column text-sm\">\r\n @for (action of actions; track $index) {\r\n <ng-container>\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 side-menu-item p-1\"\r\n (click)=\"action.action()\"\r\n >\r\n <span class=\"material-symbols-outlined\">{{ action.icon }}</span>\r\n <span>{{ action.label }}</span>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n \r\n <p-divider></p-divider>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between gap-2 side-menu-item p-1\"\r\n [style.color]=\"'rgba(252, 3, 3, 0.6)'\"\r\n (click)=\"logout($event)\"\r\n >\r\n <span class=\"material-symbols-outlined\">exit_to_app</span>\r\n @if(expandMenu()){\r\n <label>Sair</label>\r\n }\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog .p-dialog-content{padding-top:1rem}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}.material-symbols-outlined{font-size:1.3rem}::ng-deep body{margin:0!important}.full-container{background:rgb(var(--kv-background-system),1);width:100vw;height:100vh;overflow-x:hidden;overflow-y:hidden}::ng-deep p-sidebar .p-sidebar{position:relative!important;background:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);margin-left:.5rem;margin-top:.5rem;border-radius:.5rem;height:calc(100vh - 1rem);z-index:1100!important}.page-content{background:none}.use-card{background-color:rgb(var(--kv-background-card),1);box-shadow:0 0 .8rem #0000001a;border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem}::ng-deep .card-container{margin:0rem .5rem;background-color:rgb(var(--kv-background-system),1);overflow-x:hidden}::ng-deep .card-container .p-card-body{padding:.5rem .5rem 0;margin:0;height:100%}::ng-deep .card-container .p-card-content{margin:0;padding:0;height:100%}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.side-menu-item{transition:all .2s ease-in-out;cursor:pointer;border-radius:.25rem;padding-left:.5rem;padding-right:.5rem}.side-menu-item:hover{background-color:rgb(var(--kv-color-system),.25);color:rgb(var(--kv-color-system),1)}.side-menu-item label{width:100%;cursor:pointer}::ng-deep .p-divider{margin:0;padding:0;margin-top:.5rem;margin-bottom:.5rem}::ng-deep .p-overlaypanel-content{padding:0}.menu-parent{display:inline-block;width:100%}.menu-childs{position:absolute;left:-500px;min-width:17rem;max-width:50rem;overflow:hidden;padding:.5rem;background:rgb(var(--kv-background-card),1);border:1px solid rgb(var(--kv-color-system),.1);border-radius:.5rem;z-index:9999;box-shadow:0 0 .8rem #0000001a;gap:0}.menu-childs p{color:rgb(var(--kv-color-system),1)!important;opacity:.7}.menu-childs .menu-childs-content{max-height:25rem;overflow:auto}.menu-childs .menu-childs-content::-webkit-scrollbar{width:8px}.menu-childs .menu-childs-content::-webkit-scrollbar:hover{background-color:#dededebf}.menu-childs .menu-childs-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}.menu-childs .menu-childs-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}.menu-childs .menu-childs-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-breadcrumb .p-breadcrumb-list span{color:rgba(var(--kv-color-text),.75)!important;font-size:.75rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator{color:rgba(var(--kv-color-text),.7)!important;margin:0;margin-left:.1rem;margin-right:.1rem}::ng-deep .p-breadcrumb .p-breadcrumb-list li.p-menuitem-separator svg{height:.5rem}.troca-sistema-container{font-size:.75rem;opacity:.8;border:1px solid #0A3A78;color:#0a3a78;background-color:rgb(var(--kv-color-system),.05)}.troca-sistema-container:hover{opacity:1;border:1px solid rgb(var(--kv-color-system),1)}.menus-container label{font-size:.875rem}\n"] }]
298
298
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FormBuilder }, { type: i2.Router }, { type: i2.ActivatedRoute }], propDecorators: { apps: [{
299
299
  type: Input
300
300
  }], actions: [{
@@ -360,4 +360,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
360
360
  type: HostListener,
361
361
  args: ['window:resize', ['$event']]
362
362
  }] } });
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFHTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQW1DdkIsTUFBTSxPQUFPLGlCQUFpQjtJQXVHNUIsWUFDVSxHQUFzQixFQUN0QixFQUFlLEVBQ2IsTUFBYyxFQUNkLGNBQThCO1FBSGhDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDYixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBMUdqQyxTQUFJLEdBVVAsRUFBRSxDQUFDO1FBRUEsWUFBTyxHQUEwRCxFQUFFLENBQUM7UUFFcEUsWUFBTyxHQUFHLElBQUksQ0FBQztRQUV4Qjs7Ozs7Ozs7Ozs7Ozs7O1dBZUc7UUFDSCxvQkFBZSxHQUFHLEtBQUssQ0FBbUUsRUFBRSxDQUFDLENBQUM7UUFFOUYsbUJBQWMsR0FBb0I7WUFDaEMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixF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QUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBjb250ZW50Q2hpbGRyZW4sXHJcbiAgZWZmZWN0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5wdXQsXHJcbiAgSW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAncHJpbWVuZy9zaWRlYmFyJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBhbmltYXRlLFxyXG4gIHN0YXRlLFxyXG4gIHN0eWxlLFxyXG4gIHRyYW5zaXRpb24sXHJcbiAgdHJpZ2dlcixcclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgVG9wQWN0aW9uc01vZGVsIH0gZnJvbSAnLi4vdG9wLWljb25zL3RvcC1pY29ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBsaW5rIH0gZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0TWVudUl0ZW0ge1xyXG4gIGlkbWVudTogbnVtYmVyO1xyXG4gIGlkbWVudXBhaTogbnVtYmVyIHwgbnVsbDtcclxuICBpZGFwbGljYXRpdm86IG51bWJlcjtcclxuICBkZXNjcmljYW9tZW51OiBzdHJpbmc7XHJcbiAgbGluazogc3RyaW5nIHwgbnVsbDtcclxuICBpY29uZTogc3RyaW5nIHwgbnVsbDtcclxuICBpbmRwdWJsaWNhZG86IGJvb2xlYW47XHJcbiAgaW5kbWVudXBhaTogYm9vbGVhbjtcclxuICBsaXN0YWlkdmlzYW9tZW51OiBudW1iZXJbXTtcclxuICBiZ0NvbG9yPzogc3RyaW5nO1xyXG4gIHRleHRDb2xvcj86IHN0cmluZztcclxufSBcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtbGF5b3V0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi1sYXlvdXQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2TGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGFwcHM6IHtcclxuICAgIGlkYXBsaWNhdGl2bzogbnVtYmVyO1xyXG4gICAgaWRzaXN0ZW1hOiBudW1iZXI7XHJcbiAgICBub21lYXBsaWNhdGl2bzogc3RyaW5nO1xyXG4gICAgZGVzY3JpY2FvYXBsaWNhdGl2bzogc3RyaW5nO1xyXG4gICAgcm90YXBhZHJhbzogc3RyaW5nO1xyXG4gICAgaW5kcHVibGljYWRvOiBib29sZWFuO1xyXG4gICAgaW5kcHVibGljYWNhb2dyYWRhdGl2YTogYm9vbGVhbjtcclxuICAgIGluZGV4aWdlZW1wcmVzYWVudHJhZGE6IGJvb2xlYW47XHJcbiAgICB1cmxpY29uZT86IHN0cmluZztcclxuICB9W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgYWN0aW9uczogeyBpY29uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGFjdGlvbjogKCkgPT4gdm9pZCB9W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgdXNlQ2FyZCA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBxdWFpcyBtZW51cyBzw6NvIHZpc8OtdmVpcyBubyB0b3BvLlxyXG4gICAqIFxyXG4gICAqIEB0eXBlIHtBcnJheTx7aWQ6IG51bWJlciwgbnVtTm90aWZpY2F0aW9ucz86IG51bWJlciwgYWN0aW9uPzogKGU6IGFueSkgPT4gdm9pZH0+fVxyXG4gICAqIFxyXG4gICAqIE9ww6fDtWVzIGRpc3BvbsOtdmVpczpcclxuICAgKiAtIDIgLSBLaWFyYSBcclxuICAgKiAtIDMgLSBOb3RpZmljYcOnw7Vlc1xyXG4gICAqIC0gNCAtIFRhcmVmYXNcclxuICAgKiAtIDUgLSBDb211bmljYWRvclxyXG4gICAqIFxyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZCAtIGlkZW50aWZpY2Fkb3IgZG8gbWVudS5cclxuICAgKiBAcHJvcGVydHkge251bWJlcn0gW251bU5vdGlmaWNhdGlvbnNdIC0gTsO6bWVybyBkZSBub3RpZmljYcOnw7VlcyAob3BjaW9uYWwpLlxyXG4gICAqIEBwcm9wZXJ0eSB7KGU6IGFueSkgPT4gdm9pZH0gW2FjdGlvbl0gLSBBw6fDo28gZG8gY2xpcXVlLCBxdWUgcmV0b3JuYSBvIGV2ZW50byBkbyBjbGlxdWUgKG9wdGlvbmFsKS5cclxuICAgKiBcclxuICAgKi9cclxuICB0b3BNZW51c1Zpc2libGUgPSBpbnB1dDx7aWQ6bnVtYmVyLCBudW1Ob3RpZmljYXRpb25zPzpudW1iZXIsIGFjdGlvbj86KGU6YW55KSA9PiB2b2lkfVtdPihbXSk7XHJcblxyXG4gIHRvcE1lbnVPcHRpb25zOiBUb3BBY3Rpb25zTW9kZWxbXT1bXHJcbiAgICB7aWQ6IDEsIHZpc2libGU6IHRydWUsIGljb246ICdwZXJzb24nLCB0b29sdGlwOiAnTWV1cyBEYWRvcycsIG51bU5vdGlmaWNhdGlvbnM6IDAsIGFjdGlvbjogKGU6YW55KSA9PiB7dGhpcy5tZXVzRGFkb3NQYW5lbC50b2dnbGUoZSl9fSxcclxuICAgIHtpZDogMiwgdmlzaWJsZTogZmFsc2UsIGljb246ICdraWFyYScsIHRvb2x0aXA6ICdLaWFyYScsIG51bU5vdGlmaWNhdGlvbnM6IDAsIGFjdGlvbjogKCkgPT4ge319LFxyXG4gICAge2lkOiAzLCB2aXNpYmxlOiBmYWxzZSwgaWNvbjogJ25vdGlmaWNhdGlvbnMnLCB0b29sdGlwOiAnTm90aWZpY2HDp8O1ZXMnLCBudW1Ob3RpZmljYXRpb25zOiAwLCBhY3Rpb246ICgpID0+IHt9fSxcclxuICAgIHtpZDogNCwgdmlzaWJsZTogZmFsc2UsIGljb246ICdjaGVja2xpc3QnLCB0b29sdGlwOiAnVGFyZWZhcycsIG51bU5vdGlmaWNhdGlvbnM6IDAsIGFjdGlvbjogKCkgPT4ge319LFxyXG4gICAge2lkOiA1LCB2aXNpYmxlOiBmYWxzZSwgaWNvbjogJ2NoYXQnLCB0b29sdGlwOiAnQ29tdW5pY2Fkb3InLCBudW1Ob3RpZmljYXRpb25zOiAwLCBhY3Rpb246ICgpID0+IHt9fSxcclxuICBdO1xyXG4gIFxyXG4gIHByb2ZpbGVJbWFnZSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cclxuICBASW5wdXQoKSBicmVhZENydW1iSXRlbXM6IHtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICByb3V0ZXJMaW5rOiBzdHJpbmc7XHJcbiAgfVtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIG1hc3RlcnM6IHtcclxuICAgIGlkbWFzdGVyOiBudW1iZXI7XHJcbiAgICBjcGZjbnBqOiBzdHJpbmc7XHJcbiAgICBub21lOiBzdHJpbmc7XHJcbiAgICBpZG1hc3Rlcm5vbWU6IHN0cmluZztcclxuICB9W10gPSBbXTtcclxuXHJcbiAgbWVudXMgPSBtb2RlbDxMYXlvdXRNZW51SXRlbVtdPihbXSk7XHJcbiAgbWVudVZpc2l2ZWwgPSBzaWduYWw8bnVtYmVyfHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBzaG93TWVudVNpc3RlbWFzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZXhwYW5kTWVudSA9IG1vZGVsPGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBASW5wdXQoKSBsb2dvTWVudUV4cGFuZCE6IGFueTtcclxuICBASW5wdXQoKSBsb2dvTWVudUhpZGUhOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQXBwITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRW1wcmVzYSE6IGFueTtcclxuICBASW5wdXQoKSBzZWxlY3RlZE1hc3RlciE6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgc2hvd0J1dHRvbkFwcHM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dCdXR0b25Vc2VyOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RXhwYW5kTWVudTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0Ryb3Bkb3duTGljZW5jYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd01lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dUcm9jYUVtcHJlc2E6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QnJlYWRjcnVtYjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdXNlck5hbWU6IHN0cmluZyA9ICdVc3XDoXJpbyc7XHJcbiAgQElucHV0KCkgdXNlckVtYWlsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtYXN0ZXJOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGVtcHJlc2FOYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkc0FwbGljYXRpdm9zTWVudUhpZGU6IG51bWJlcltdID0gW107XHJcblxyXG4gIEBPdXRwdXQoKSBhY2Nlc3NLZWVQYXNzRW1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNoYW5nZUVtcHJlc2FFbWl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNoYW5nZUxpY2Vuc2VFbWl0OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZXhwYW5kTWVudUVtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbG9nb3V0RW1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdEFwcEVtaXQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlRW1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21ldXNEYWRvc1BhbmVsJykgbWV1c0RhZG9zUGFuZWwhOiBPdmVybGF5UGFuZWw7XHJcblxyXG4gIC8vIHRvcE1lbnVBY3Rpb25zID0gY29udGVudENoaWxkcmVuPFRlbXBsYXRlUmVmPGFueT4+KCd0b3BNZW51QWN0aW9uJyk7XHJcblxyXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBoZWlnaHRDYXJkITogbnVtYmVyO1xyXG4gIG1vdXNlT3ZlckZpbGhvSW5kZXg6IGFueTtcclxuICBtb3VzZU92ZXJJbmRleDogYW55O1xyXG4gIHdpZHRoQ2FyZCE6IG51bWJlcjtcclxuXHJcbiAgd2lkdGhQYWdlID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBpZG1hc3RlcjogW3RoaXMuc2VsZWN0ZWRNYXN0ZXIsIFtdXSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHRoaXMucHJvY2Vzc2FyTWVudXMoKTtcclxuICAgIHRoaXMuYWRqdXN0V2lkdGhDYXJkKCk7XHJcbiAgICB0aGlzLnZlcmlmeU1lbnVCZWhhdmlvcigpO1xyXG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKTtcclxuICB9XHJcblxyXG4gIHRvcE1lbnVPcHRpb25zUmV2ZXJzZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJvY2Vzc2FyX21lbnVzID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGlmKHRoaXMucHJvZmlsZUltYWdlKCkpe1xyXG4gICAgICB0aGlzLnRvcE1lbnVPcHRpb25zWzBdLmltZyA9IHRoaXMucHJvZmlsZUltYWdlKCk7XHJcbiAgICB9XHJcbiAgICAvL2ludmVydGVyIG8gdG9wTWVudU9wdGlvbnNcclxuICAgIGlmICghdGhpcy50b3BNZW51T3B0aW9uc1JldmVyc2VkKSB7XHJcbiAgICAgIHRoaXMudG9wTWVudU9wdGlvbnMucmV2ZXJzZSgpO1xyXG4gICAgICB0aGlzLnRvcE1lbnVPcHRpb25zUmV2ZXJzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgdGhpcy50b3BNZW51c1Zpc2libGUoKS5mb3JFYWNoKChpdGVtOmFueSkgPT4ge1xyXG4gICAgICBsZXQgbWVudSA9IHRoaXMudG9wTWVudU9wdGlvbnMuZmluZCgoeCkgPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgIGlmKG1lbnUpe1xyXG4gICAgICAgIG1lbnUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgaWYoaXRlbS5hY3Rpb24pe1xyXG4gICAgICAgICAgbWVudS5hY3Rpb24gPSBpdGVtLmFjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaXRlbS5udW1Ob3RpZmljYXRpb25zKXtcclxuICAgICAgICAgIG1lbnUubnVtTm90aWZpY2F0aW9ucyA9IGl0ZW0ubnVtTm90aWZpY2F0aW9ucztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICAvLyBwcm9jZXNzYXJNZW51cygpIHtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhY2Nlc3NLZWVQYXNzKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuYWNjZXNzS2VlUGFzc0VtaXQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRqdXN0SGVpZ2h0Q2FyZCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMud2lkdGhDYXJkID4gNDAwKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZHRoUGFnZSgpIDwgOTkyICYmIHRoaXMuc2hvd0xpY2VuY2FzKCkpIHJldHVybiAxNDU7XHJcblxyXG4gICAgICBpZiAodGhpcy5icmVhZENydW1iSXRlbXMubGVuZ3RoID4gMCkgcmV0dXJuIDk1O1xyXG4gICAgICBlbHNlIHJldHVybiA4NTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gMTI1O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGp1c3RXaWR0aENhcmQoKSB7XHJcbiAgICB0aGlzLndpZHRoUGFnZS5zZXQod2luZG93LmlubmVyV2lkdGgpO1xyXG5cclxuICAgIHRoaXMuaGVpZ2h0Q2FyZCA9IE51bWJlcihcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtY29udGVudCcpPy5vZmZzZXRIZWlnaHRcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5zaG93TWVudSlcclxuICAgICAgdGhpcy53aWR0aENhcmQgPVxyXG4gICAgICAgIE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCkgLSAodGhpcy5leHBhbmRNZW51KCkgPyAzMzMgOiA5Myk7XHJcbiAgICBlbHNlIHRoaXMud2lkdGhDYXJkID0gTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxsUm91dGUocm90YTogYW55LCBleHBhbmQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWV4cGFuZCAmJiAhdGhpcy5leHBhbmRNZW51KCkgJiYgdGhpcy5zaG93RXhwYW5kTWVudSlcclxuICAgICAgdGhpcy5leHBhbmRNZW51LnVwZGF0ZSgoY3VycmVudFZhbHVlOiBib29sZWFuKSA9PiAhY3VycmVudFZhbHVlKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWR0aFBhZ2UoKSAhPSAwICYmIHRoaXMud2lkdGhQYWdlKCkgPCA4MDAgJiYgdGhpcy5leHBhbmRNZW51KCkgJiYgdGhpcy5zaG93RXhwYW5kTWVudSlcclxuICAgICAgdGhpcy5leHBhbmRNZW51LnNldChmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyb3RhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VFbXByZXNhKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY2hhbmdlRW1wcmVzYUVtaXQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hhbmdlTGljZW5zZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNoYW5nZUxpY2Vuc2VFbWl0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2ZXJpZnlNZW51QmVoYXZpb3IoKSB7XHJcbiAgICBpZiAodGhpcy53aWR0aFBhZ2UoKSA8IDgwMClcclxuICAgICAgdGhpcy5leHBhbmRNZW51LnNldChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZE1lbnVFdmVudCgpIHtcclxuICAgIHRoaXMuZXhwYW5kTWVudUVtaXQuZW1pdCh0aGlzLmV4cGFuZE1lbnUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMubG9nb3V0RW1pdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVudXNQZXJBcHAoKSB7XHJcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsICYmIHRoaXMubWVudXMoKSAmJiB0aGlzLm1lbnVzKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAodGhpcy5yb3V0ZXIudXJsID09PSAnLycpIHtcclxuICAgICAgICAvLyB0aGlzLm5hdmlnYXRlVG9GaXJzdE1lbnUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBtZW51U2VsZWNpb25hZG8gPSB0aGlzLm1lbnVzKCkuZmluZChcclxuICAgICAgICAgIChtZW51OiBhbnkpID0+XHJcbiAgICAgICAgICAgIG1lbnUubGluayAmJiBtZW51LmxpbmsuaW5jbHVkZXModGhpcy5yb3V0ZXIudXJsLnNsaWNlKDEpKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG1lbnVTZWxlY2lvbmFkbykge1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTWVudShtZW51U2VsZWNpb25hZG8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5hbWVFbXByZXNhKG5vbWVMaWNlbmNhOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKG5vbWVMaWNlbmNhKSB7XHJcbiAgICAgIGlmIChub21lTGljZW5jYS5sZW5ndGggPiAyMykgcmV0dXJuIG5vbWVMaWNlbmNhLnN1YnN0cmluZygwLCAyMykgKyAnLi4uJztcclxuICAgICAgZWxzZSByZXR1cm4gbm9tZUxpY2VuY2E7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvRmlyc3RNZW51KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlyc3RNZW51ID0gdGhpcy5tZW51cygpWzBdO1xyXG4gICAgaWYgKGZpcnN0TWVudS5pbmRtZW51cGFpKSB7XHJcbiAgICAgIGNvbnN0IGZpbGhvcyA9IHRoaXMucmV0dXJuTWVudUNoaWxkKGZpcnN0TWVudS5pZG1lbnUpO1xyXG4gICAgICBpZiAoZmlsaG9zKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsUm91dGUoZmlsaG9zWzBdLmxpbmssIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhbGxSb3V0ZShmaXJzdE1lbnUubGluaywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlVG9NZW51KG1lbnU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKG1lbnUubWVudXBhaSkge1xyXG4gICAgICBjb25zdCBmaWxob3MgPSB0aGlzLnJldHVybk1lbnVDaGlsZChtZW51LmlkbWVudSk7XHJcbiAgICAgIGlmIChmaWxob3MpIHtcclxuICAgICAgICB0aGlzLmNhbGxSb3V0ZShmaWxob3NbMF0ubGluaywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FsbFJvdXRlKG1lbnUubGluaywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZW51U2VsZWNpb25hZG8gPSBzaWduYWw8YW55PihudWxsKTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3QgbGF0ZXN0UmVxdWVzdCA9IGNoYW5nZXNbJ21lbnVzJ107XHJcbiAgICBpZiAobGF0ZXN0UmVxdWVzdD8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubWVudXNQZXJBcHAoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjaW9uYXJNZW51KCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25XaW5kb3dSZXNpemUoKSB7XHJcbiAgICB0aGlzLmFkanVzdFdpZHRoQ2FyZCgpO1xyXG4gICAgLy8gdGhpcy52ZXJpZnlNZW51QmVoYXZpb3IoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGlzU2VsZWN0ZWRNZW51UGFpKG1lbnU6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmV4cGFuZE1lbnUoKSAmJiBtZW51LmluZG1lbnVwYWkpXHJcbiAgICAgIHJldHVybiBtZW51LmlkbWVudSA9PT0gdGhpcy5tZW51U2VsZWNpb25hZG8oKT8uaWRtZW51cGFpO1xyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbGVjaW9uYXJNZW51KCkge1xyXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLnJvdXRlci51cmwsIHdpbmRvdy5vcmlnaW4pO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gdXJsLnBhdGhuYW1lO1xyXG4gICAgY29uc3QgcHVyZVBhdGggPSBjdXJyZW50UGF0aC5tYXRjaCgvXlteO10qL2kpO1xyXG5cclxuICAgIGNvbnN0IHBhdGhzID0gcHVyZVBhdGghWzBdO1xyXG5cclxuICAgIHRoaXMubWVudXMuc2V0KFxyXG4gICAgICB0aGlzLm1lbnVzKCkubWFwKChtZW51KSA9PiB7XHJcbiAgICAgICAgaWYgKG1lbnUubGluaykge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4ubWVudSxcclxuICAgICAgICAgICAgYmdDb2xvcjogcGF0aHMuaW5jbHVkZXMobWVudS5saW5rISkgPyAncmdiKDQxLCAxODUsIDQ1KScgOiAnJyxcclxuICAgICAgICAgICAgdGV4dENvbG9yOiBwYXRocy5pbmNsdWRlcyhtZW51LmxpbmshKSA/ICd0ZXh0LXdoaXRlJyA6ICcnLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1lbnU7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgbWVudSA9IHRoaXMubWVudXMoKS5maW5kKChtZW51OiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIG1lbnUubGluayAmJiBwYXRocy5pbmNsdWRlcyhtZW51LmxpbmshKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubWVudVNlbGVjaW9uYWRvLnNldChtZW51KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXR1cm5NZW51Q2hpbGQoaWRtZW51OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLm1lbnVzKCkuZmlsdGVyKCh4OiBhbnkpID0+IHguaWRtZW51cGFpID09IGlkbWVudSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIHNlbGVjdEFwcChpZGFwbGljYXRpdm86IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RBcHBFbWl0LmVtaXQoaWRhcGxpY2F0aXZvKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93TGljZW5jYXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zaG93RHJvcGRvd25MaWNlbmNhICYmICh0aGlzLm1hc3RlcnMgfHwgW10pLmxlbmd0aCA+IDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlTWVudSgpIHtcclxuICAgIHRoaXMuZXhwYW5kTWVudS51cGRhdGUoKGN1cnJlbnRWYWx1ZTogYm9vbGVhbikgPT4gIWN1cnJlbnRWYWx1ZSk7XHJcbiAgICB0aGlzLmV4cGFuZE1lbnVFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb0RlZmF1bHRSb3V0ZSgpIHtcclxuICAgIGlmICh0aGlzLndpZHRoUGFnZSgpIDwgODAwICYmIHRoaXMuZXhwYW5kTWVudSgpKVxyXG4gICAgICB0aGlzLmV4cGFuZE1lbnUuc2V0KGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRlVG9EZWZhdWx0Um91dGVFbWl0LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGdldCBleGliaXJOb21lcygpIHtcclxuICAgIHJldHVybiAhdGhpcy5zaG93TGljZW5jYXMoKSAmJiAodGhpcy5tYXN0ZXJOYW1lIHx8IHRoaXMuZW1wcmVzYU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZXhpYmlyTWVudUNoaWxkKGV2ZW50OmFueSwgaW5kZXg6bnVtYmVyKXtcclxuICAgIHRoaXMubWVudVZpc2l2ZWwuc2V0KGluZGV4KTtcclxuICAgICAgbGV0IG1lbnVQYXJlbnQgO1xyXG4gICAgICBsZXQgbWVudUNoaWxkIDtcclxuICAgICAgaWYoaW5kZXggPT09IC0xKXtcclxuICAgICAgICBtZW51UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1lbnUtc2lzdGVtYXMtcGFyZW50YCk7XHJcbiAgICAgICAgbWVudUNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYG1lbnUtc2lzdGVtYXMtY2hpbGRgKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIG1lbnVQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWVudS1wYXJlbnQtJHtpbmRleH1gKTtcclxuICAgICAgICBtZW51Q2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWVudS1jaGlsZC0ke2luZGV4fWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobWVudVBhcmVudCkge1xyXG4gICAgICAgIGNvbnN0IHJlY3RfcGFyZW50ID0gbWVudVBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBsZXQgeCA9IHJlY3RfcGFyZW50LnJpZ2h0IC0gMTA7XHJcbiAgICAgICAgbGV0IHkgPSByZWN0X3BhcmVudC50b3AgLTU7XHJcbiAgXHJcbiAgICAgICAgaWYgKG1lbnVDaGlsZCkge1xyXG4gICAgICAgICAgY29uc3QgcmVjdF9jaGlsZCA9IG1lbnVDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gIFxyXG4gICAgICAgICAgLy9WZXJpZmljYSBzZSBvIG1lbnUgZmlsaG8gdmFpIHV0cmFwYXNzYXIgbyBmaW5hbCBkbyB2aWV3cG9ydCBwcmEgYmFpeG9cclxuICAgICAgICAgIGlmIChyZWN0X3BhcmVudC5ib3R0b20gKyByZWN0X2NoaWxkLmhlaWdodCA+IHZpZXdwb3J0SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHkgPSByZWN0X3BhcmVudC5ib3R0b20gLSByZWN0X2NoaWxkLmhlaWdodCAtIDEwO1xyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgLy8gVmVyaWZpY2Egc2UgbyBtZW51IHBhaSBlc3TDoSBtdWl0byBlbSBjaW1hXHJcbiAgICAgICAgICBpZiAocmVjdF9wYXJlbnQudG9wIDw9IDApIHtcclxuICAgICAgICAgICAgeSA9IHJlY3RfcGFyZW50LmJvdHRvbSArIDU7XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICBtZW51Q2hpbGQuc3R5bGUudG9wID0gYCR7eX1weGA7XHJcbiAgICAgICAgICBtZW51Q2hpbGQuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZnVsbC1jb250YWluZXJcIj5cclxuICBAaWYoc2hvd01lbnUpIHtcclxuICA8cC1zaWRlYmFyXHJcbiAgICAjc2lkZWJhclJlZlxyXG4gICAgW3Zpc2libGVdPVwidHJ1ZVwiXHJcbiAgICBbc2hvd0Nsb3NlSWNvbl09XCJmYWxzZVwiXHJcbiAgICBbbW9kYWxdPVwiZmFsc2VcIlxyXG4gICAgW3N0eWxlXT1cInsgd2lkdGg6IGV4cGFuZE1lbnUoKSA/ICcxN3JlbScgOiAnMy42NXJlbScgfVwiXHJcbiAgICBzdHlsZUNsYXNzPVwidHJhbnNpdGlvbi1hbGxcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkbGVzc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZmxleC1jb2x1bW4gb3ZlcmZsb3ctaGlkZGVuIHAtMlwiPlxyXG4gICAgICAgIDwhLS0gTE9HTyAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXgtbm9uZSBmbGV4IGZsZXgtY29sdW1uIGdhcC0zIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtc2hyaW5rLTAgb3ZlcmZsb3ctaGlkZGVuXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCB7e1xyXG4gICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdmbGV4LXJvdycgOiAnZmxleC1jb2x1bW4nXHJcbiAgICAgICAgICAgIH19IGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgIGV4cGFuZE1lbnUoKVxyXG4gICAgICAgICAgICAgICAgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nXHJcbiAgICAgICAgICAgICAgICA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICB9fSBwLTJcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8IS0tIExvZ28gcGFyYSBvIG1lbnUgZXhwYW5kaWRvIC0tPlxyXG4gICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpICYmIGxvZ29NZW51RXhwYW5kKXtcclxuICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgIGFsdD1cIkNhcmRcIlxyXG4gICAgICAgICAgICAgIFtzcmNdPVwibG9nb01lbnVFeHBhbmRcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzIuNHJlbSdcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTBcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIExvZ28gcGFyYSBvIG1lbnUgbWluaW1pemFkby0tPlxyXG4gICAgICAgICAgICBAaWYoIWV4cGFuZE1lbnUoKSAmJiBsb2dvTWVudUhpZGUpe1xyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgYWx0PVwiQ2FyZFwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJsb2dvTWVudUhpZGVcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzIuNHJlbSdcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTFcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRvZ2dsZSBtZW51IC0tPlxyXG4gICAgICAgICAgICBAaWYoc2hvd0V4cGFuZE1lbnUpe1xyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgc2lkZS1tZW51LWl0ZW1cIj5tZW51PC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICBAaWYoc2hvd1Ryb2NhRW1wcmVzYSl7XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW0gdHJvY2Etc2lzdGVtYS1jb250YWluZXIgbWItMyBweS0yXCJcclxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIidUcm9jYXIgZGUgZW1wcmVzYSdcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlRW1wcmVzYSgkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSAmJiBzZWxlY3RlZEVtcHJlc2Epe1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHctZnVsbFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUVtcHJlc2EoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBAaWYodGhpcy5zZWxlY3RlZEVtcHJlc2EucmF6YW9zb2NpYWwpe1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgZm9udC1zZW1pYm9sZCBtci0yIGNvbG9yLXN5c3RlbVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN1emVdPVwiJy41cmVtJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgbmFtZUVtcHJlc2EodGhpcy5zZWxlY3RlZEVtcHJlc2EucmF6YW9zb2NpYWwpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH0gQGlmKHRoaXMuc2VsZWN0ZWRFbXByZXNhLmNwZmNucGope1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgbXQtMSBjb2xvci1zeXN0ZW1cIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRTdXplXT1cIicuNXJlbSdcIlxyXG4gICAgICAgICAgICAgICAgPnt7IHRoaXMuc2VsZWN0ZWRFbXByZXNhLmNwZmNucGogfCBjcGZDbnBqIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5zd2FwX2hvcml6PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgIDwhLS0gTUVOVVMgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGxpc3Qtbm9uZSBtLTAgb3ZlcmZsb3cteS1hdXRvIG1heC1oLWZ1bGwgbWVudXMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDwhLS0gbWVudXMgLS0+XHJcbiAgICAgICAgICAgIEBmb3IgKG1lbnUgb2YgbWVudXMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgQGlmKCFpZHNBcGxpY2F0aXZvc01lbnVIaWRlLmluY2x1ZGVzKG1lbnUuaWRhcGxpY2F0aXZvKSl7XHJcbiAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gbWVudSBxdWUgbsOjbyB0ZW0gZmlsaG8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmKCAhbWVudS5pbmRtZW51cGFpICYmICghbWVudS5pZG1lbnVwYWkgfHwgbWVudS5pZG1lbnVwYWkgPT0gMCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7ZXhwYW5kTWVudSgpID8nYmV0d2Vlbic6J2NlbnRlcid9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXRvcDogMC43NXJlbTsgcGFkZGluZy1ib3R0b206MC43NXJlbTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYWxsUm91dGUobWVudS5saW5rKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57e21lbnUuaWNvbmUgfHwgJ2xlbnNfYmx1cid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57e21lbnUuZGVzY3JpY2FvbWVudX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gbWVudSBjb20gZmlsaG8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmKG1lbnUuaW5kbWVudXBhaSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1wYXJlbnRcIiBpZD1cIm1lbnUtcGFyZW50LXt7JGluZGV4fX1cIiAobW91c2VlbnRlcik9XCJleGliaXJNZW51Q2hpbGQoJGV2ZW50LCAkaW5kZXgpXCIgKG1vdXNlbGVhdmUpPVwibWVudVZpc2l2ZWwuc2V0KHVuZGVmaW5lZClcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tleHBhbmRNZW51KCkgPydiZXR3ZWVuJzonY2VudGVyJ319IGdhcC0yIHNpZGUtbWVudS1pdGVtXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMC43NXJlbTsgcGFkZGluZy1ib3R0b206MC43NXJlbTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+e3ttZW51Lmljb25lIHx8ICdsZW5zX2JsdXInfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3ttZW51LmRlc2NyaWNhb21lbnV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5jaGV2cm9uX3JpZ2h0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWNoaWxkc1wiIGlkPVwibWVudS1jaGlsZC17eyRpbmRleH19XCIgW3N0eWxlLm9wYWNpdHldPVwibWVudVZpc2l2ZWwoKT09PSRpbmRleD8nMSc6JzAnXCIgW3N0eWxlLnBvaW50ZXJFdmVudHNdPVwibWVudVZpc2l2ZWwoKT09PSRpbmRleD8nYXV0byc6J25vbmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInAtMCBtLTAgZm9udC1ib2xkIHB0LTIgcHgtMiB0ZXh0LXhzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bWVudS5kZXNjcmljYW9tZW51fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1kaXZpZGVyIGNsYXNzPVwicC0wIG0tMFwiIFtzdHlsZS5vcGFjaXR5XT1cIjFcIiB0eXBlPVwic29saWRcIj48L3AtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1jaGlsZHMtY29udGVudCBwLTAgbS0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiByZXR1cm5NZW51Q2hpbGQobWVudS5pZG1lbnUpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIHNpZGUtbWVudS1pdGVtIHB5LTIgcHgtMiB0ZXh0LXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FsbFJvdXRlKGl0ZW0ubGluaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmRlc2NyaWNhb21lbnV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPHAtZGl2aWRlciBjbGFzcz1cInB4LTJcIiBbc3R5bGUub3BhY2l0eV09XCIxXCIgdHlwZT1cInNvbGlkXCI+PC9wLWRpdmlkZXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gTUVOVVMgLS0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4LTEgbGlzdC1ub25lIG0tMCBvdmVyZmxvdy15LWF1dG8gbWF4LWgtZnVsbCBtZW51cy1jb250YWluZXJcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDwhLS0gbWVudXMgLS0+XHJcbiAgICAgICAgICBAZm9yIChtZW51IG9mIG1lbnVzKCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgQGlmKCFpZHNBcGxpY2F0aXZvc01lbnVIaWRlLmluY2x1ZGVzKG1lbnUuaWRhcGxpY2F0aXZvKSl7XHJcbiAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDwhLS0gbWVudSBxdWUgbsOjbyB0ZW0gZmlsaG8gLS0+XHJcbiAgICAgICAgICAgIEBpZiggIW1lbnUuaW5kbWVudXBhaSAmJiAoIW1lbnUuaWRtZW51cGFpIHx8IG1lbnUuaWRtZW51cGFpID09IDApKXtcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgICBleHBhbmRNZW51KCkgPyAnYmV0d2VlbicgOiAnY2VudGVyJ1xyXG4gICAgICAgICAgICAgIH19IGdhcC0yIHNpZGUtbWVudS1pdGVtXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctdG9wOiAwLjc1cmVtOyBwYWRkaW5nLWJvdHRvbTogMC43NXJlbVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxSb3V0ZShtZW51LmxpbmspXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnt7XHJcbiAgICAgICAgICAgICAgICBtZW51Lmljb25lIHx8IFwibGVuc19ibHVyXCJcclxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpKXtcclxuICAgICAgICAgICAgICA8bGFiZWw+e3sgbWVudS5kZXNjcmljYW9tZW51IH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwhLS0gbWVudSBjb20gZmlsaG8gLS0+XHJcbiAgICAgICAgICAgIEBpZihtZW51LmluZG1lbnVwYWkpe1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LXBhcmVudFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJtZW51LXBhcmVudC17eyAkaW5kZXggfX1cIlxyXG4gICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImV4aWJpck1lbnVDaGlsZCgkZXZlbnQsICRpbmRleClcIlxyXG4gICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm1lbnVWaXNpdmVsLnNldCh1bmRlZmluZWQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC17e1xyXG4gICAgICAgICAgICAgICAgICBleHBhbmRNZW51KCkgPyAnYmV0d2VlbicgOiAnY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXRvcDogMC43NXJlbTsgcGFkZGluZy1ib3R0b206IDAuNzVyZW1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIG1lbnUuaWNvbmUgfHwgXCJsZW5zX2JsdXJcIlxyXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpKXtcclxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyBtZW51LmRlc2NyaWNhb21lbnUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+Y2hldnJvbl9yaWdodDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LWNoaWxkc1wiXHJcbiAgICAgICAgICAgICAgICBpZD1cIm1lbnUtY2hpbGQte3sgJGluZGV4IH19XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cIm1lbnVWaXNpdmVsKCkgPT09ICRpbmRleCA/ICcxJyA6ICcwJ1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUucG9pbnRlckV2ZW50c109XCJcclxuICAgICAgICAgICAgICAgICAgbWVudVZpc2l2ZWwoKSA9PT0gJGluZGV4ID8gJ2F1dG8nIDogJ25vbmUnXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTJyZW0gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwLTAgbS0wIGZvbnQtYm9sZCBwdC0yIHB4LTIgdGV4dC14c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgcmV0dXJuTWVudUNoaWxkKG1lbnUuaWRtZW51KTsgdHJhY2sgJGluZGV4KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNpZGUtbWVudS1pdGVtIHB5LTIgcHgtMiB0ZXh0LXNtXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxSb3V0ZShpdGVtLmxpbmspXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5kZXNjcmljYW9tZW51IH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICB9IH1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBjbGFzcz1cInB4LTJcIiBbc3R5bGUub3BhY2l0eV09XCIxXCIgdHlwZT1cInNvbGlkXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDwhLS0gQVBQUyBFIFNBSVIgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtbm9uZSBsaXN0LW5vbmUgbS0wIG92ZXJmbG93LXktYXV0byBtYXgtaC1mdWxsXCI+XHJcbiAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtcGFyZW50XCJcclxuICAgICAgICAgICAgICBpZD1cIm1lbnUtc2lzdGVtYXMtcGFyZW50XCJcclxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJleGliaXJNZW51Q2hpbGQoJGV2ZW50LCAtMSlcIlxyXG4gICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm1lbnVWaXNpdmVsLnNldCh1bmRlZmluZWQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdiZXR3ZWVuJyA6ICdjZW50ZXInXHJcbiAgICAgICAgICAgICAgICB9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctdG9wOiAwLjc1cmVtOyBwYWRkaW5nLWJvdHRvbTogMC43NXJlbVwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWV4cGFuZE1lbnUoKSA/ICdTaXN0ZW1hcycgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+Z3JpZF92aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSl7XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+U2lzdGVtYXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+Y2hldnJvbl9yaWdodDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LWNoaWxkc1wiXHJcbiAgICAgICAgICAgICAgICBpZD1cIm1lbnUtc2lzdGVtYXMtY2hpbGRcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLm9wYWNpdHldPVwibWVudVZpc2l2ZWwoKSA9PT0gLTEgPyAnMScgOiAnMCdcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBvaW50ZXJFdmVudHNdPVwibWVudVZpc2l2ZWwoKSA9PT0gLTEgPyAnYXV0bycgOiAnbm9uZSdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicC0wIG0tMCBmb250LWJvbGQgcHQtMiBwbC0zIHRleHQteHNcIj5TaXN0ZW1hczwvcD5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgYXBwczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgc2lkZS1tZW51LWl0ZW0gcHktMiBwbC0zIHByLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbFJvdXRlKGl0ZW0ucm90YXBhZHJhbyk7IHNlbGVjdEFwcChpdGVtLmlkYXBsaWNhdGl2bylcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbS51cmxpY29uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTJyZW0gdy0ycmVtIGJvcmRlci1yb3VuZC1sZ1wiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5ub21lYXBsaWNhdGl2byB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8IS0tIDxsaT5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgICBleHBhbmRNZW51KCkgPyAnYmV0d2VlbicgOiAnY2VudGVyJ1xyXG4gICAgICAgICAgICAgIH19IGdhcC0yIHNpZGUtbWVudS1pdGVtXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctdG9wOiAwLjc1cmVtOyBwYWRkaW5nLWJvdHRvbTogMC43NXJlbVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIiFleHBhbmRNZW51KCkgPyAnU2FpcicgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIidyZ2JhKDI1MiwgMywgMywgMC42KSdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJsb2dvdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5leGl0X3RvX2FwcDwvc3Bhbj5cclxuICAgICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpKXtcclxuICAgICAgICAgICAgICA8bGFiZWw+U2FpcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXNpZGViYXI+XHJcbiAgfVxyXG5cclxuICA8IS0tIFNFw4fDg08gQ09OVEXDmkRPICAtLT5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cInctYXV0byBoLXNjcmVlbiBwYWdlLWNvbnRlbnQgb3ZlcmZsb3cteS1oaWRkZW4gZmxleCBmbGV4LWNvbHVtblwiXHJcbiAgICBpZD1cInBhZ2UtY29udGVudFwiXHJcbiAgICBzdHlsZT1cIndpZHRoOiAxMDB2dyAhaW1wb3J0YW50XCJcclxuICA+XHJcbiAgICA8IS0tIFRPUE8gLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG15LTIgbXgtMyBtYi0wXCJcclxuICAgID5cclxuICAgICAgQGlmKCFzaG93TWVudSkge1xyXG4gICAgICA8IS0tIExvZ28gaG9tZSAtLT5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwibG9nb01lbnVFeHBhbmRcIiB3aWR0aD1cIjE1MFwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgPCEtLSBCcmVhZGNydW1icyAtLT5cclxuICAgICAgQGlmKHNob3dCcmVhZGNydW1iKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGxcIj5cclxuICAgICAgICA8cC1icmVhZGNydW1iXHJcbiAgICAgICAgICAqbmdJZj1cIndpZHRoQ2FyZCA+IDQwMFwiXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwiYm9yZGVyLW5vbmUgcC0wIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtMnJlbSBiZy10cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICBbbW9kZWxdPVwiYnJlYWRDcnVtYkl0ZW1zXCJcclxuICAgICAgICAgIChvbkl0ZW1DbGljayk9XCJjYWxsUm91dGUoJGV2ZW50Lml0ZW0ucm91dGVyTGluaywgdHJ1ZSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LWl0ZW0gbGV0LWk9XCJpbmRleFwiPlxyXG4gICAgICAgICAgICBAaWYoYnJlYWRDcnVtYkl0ZW1zLmluZGV4T2YoaXRlbSkgPCBicmVhZENydW1iSXRlbXMubGVuZ3RoIC0gMSl7XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ub3JtYWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC1icmVhZGNydW1iPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgIDwhLS0gR0hPU1QgRElWIFBBUkEgT0NQVUFSIEVTUEHDh08gTk8gU1BBQ0UgQkVUV0VFTiAtLT5cclxuICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgfSB9IEBpZiAoZXhpYmlyTm9tZXMpIHsgQGlmKHdpZHRoQ2FyZCA+PSA1MTcpIHtcclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwidy1hdXRvIGZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgQGlmIChtYXN0ZXJOYW1lKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHN5c3RlbS1jb2xvclwiPnt7IG1hc3Rlck5hbWUgfX08L3NwYW4+IH0gQGlmXHJcbiAgICAgICAgKGVtcHJlc2FOYW1lKSB7PHNwYW4gY2xhc3M9XCJlbXByZXNhLW5hbWVcIlxyXG4gICAgICAgICAgPk9yZ2FuaXphw6fDo286IHt7IGVtcHJlc2FOYW1lIH19PC9zcGFuXHJcbiAgICAgICAgPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgID5cclxuICAgICAgICA8IS0tIE5hdmVnYcOnw6NvIGRlIHNpc3RlbWFzIGUgdXN1w6FyaW9zIC0tPlxyXG4gICAgICAgIDwhLS0gQGZvciAodG9wQWN0aW9uIG9mIHRvcE1lbnVBY3Rpb25zKCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9wQWN0aW9uXCIgLz5cclxuICAgICAgICAgICAgfSAtLT5cclxuICAgICAgICA8a3YtdG9wLWljb25zIFt0b3BBY3Rpb25zXT1cInRvcE1lbnVPcHRpb25zXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgID5cclxuICAgICAgICA8IS0tIE5hdmVnYcOnw6NvIGRlIHNpc3RlbWFzIGUgdXN1w6FyaW9zIC0tPlxyXG4gICAgICAgIDwhLS0gQGZvciAodG9wQWN0aW9uIG9mIHRvcE1lbnVBY3Rpb25zKCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9wQWN0aW9uXCIgLz5cclxuICAgICAgICAgICAgfSAtLT5cclxuICAgICAgICA8a3YtdG9wLWljb25zIFt0b3BBY3Rpb25zXT1cInRvcE1lbnVPcHRpb25zXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgID5cclxuICAgICAgICBAaWYgKG1hc3Rlck5hbWUpIHsgPHNwYW4gY2xhc3M9XCJtYXN0ZXItbmFtZVwiPnt7IG1hc3Rlck5hbWUgfX08L3NwYW4+IH1cclxuICAgICAgICBAaWYgKGVtcHJlc2FOYW1lKSB7PHNwYW4gY2xhc3M9XCJlbXByZXNhLW5hbWVcIj57eyBlbXByZXNhTmFtZSB9fTwvc3Bhbj4gfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfSB9IEBlbHNlIHsgQGlmKHdpZHRoUGFnZSgpID4gOTkyKXtcclxuICAgICAgPCEtLSBkcm9wZG93biBwYXJhIHNlbGXDp8OjbyBkZSBlbXByZXNhL2xpY2VuY2EgLS0+XHJcbiAgICAgIDxkcm9wZG93bi1tYXN0ZXJcclxuICAgICAgICAqbmdJZj1cInNob3dMaWNlbmNhcygpXCJcclxuICAgICAgICBjbGFzcz1cIm1heC13LTI1cmVtIGZsZXgtMVwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaWRtYXN0ZXJcIlxyXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcclxuICAgICAgICBbbWFzdGVyc109XCJtYXN0ZXJzXCJcclxuICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlTGljZW5zZSgkZXZlbnQpXCJcclxuICAgICAgICAob25TZWxlY3Rpb25WYWx1ZSk9XCJjaGFuZ2VMaWNlbnNlKCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvZHJvcGRvd24tbWFzdGVyPlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tIE5hdmVnYcOnw6NvIGRlIHNpc3RlbWFzIGUgdXN1w6FyaW9zIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidy1hdXRvIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgPGt2LXRvcC1pY29ucyBbdG9wQWN0aW9uc109XCJ0b3BNZW51T3B0aW9uc1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYod2lkdGhQYWdlKCkgPD0gOTkyKXtcclxuICAgIDwhLS0gZHJvcGRvd24gcGFyYSBzZWxlw6fDo28gZGUgZW1wcmVzYS9saWNlbmNhIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImgtMnJlbSBteC0zXCI+XHJcbiAgICAgIDxkcm9wZG93bi1tYXN0ZXJcclxuICAgICAgICAqbmdJZj1cInNob3dMaWNlbmNhcygpXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpZG1hc3RlclwiXHJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgIFttYXN0ZXJzXT1cIm1hc3RlcnNcIlxyXG4gICAgICAgIChvblNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VMaWNlbnNlKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdGlvblZhbHVlKT1cImNoYW5nZUxpY2Vuc2UoJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgPCEtLSBDb250YWluZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuIGZsZXgtMSBwLTAgbS0wIG1iLTIgaC1mdWxsXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cIm92ZXJmbG93LXktYXV0byBoLWZ1bGwgbWF4LWgtZnVsbCB7e1xyXG4gICAgICAgICAgIXNob3dNZW51ICYmICdzbTpvdmVyZmxvdy15LWhpZGRlbidcclxuICAgICAgICB9fSBjYXJkLWNvbnRhaW5lclxyXG4gICAgICAgIFxyXG4gICAgICAgIHt7IHVzZUNhcmQgPyAndXNlLWNhcmQnIDogJycgfX1cclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFBhaW5lbCBkbyB1c3XDoXJpbyAtLT5cclxuICA8cC1vdmVybGF5UGFuZWxcclxuICAgICNtZXVzRGFkb3NQYW5lbFxyXG4gICAgW3Nob3dUcmFuc2l0aW9uT3B0aW9uc109XCInMzUwbXMgZWFzZS1vdXQnXCJcclxuICAgIFtoaWRlVHJhbnNpdGlvbk9wdGlvbnNdPVwiJzI1MG1zIGVhc2UtaW4nXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0xIHctMTVyZW1cIj5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zZW1pYm9sZCB0ZXh0LW1kIG92ZXJmbG93LWhpZGRlbiB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1vdmVyZmxvdy1lbGxpcHNpc1wiXHJcbiAgICAgICAgICAgID57eyB1c2VyTmFtZSB9fTwvc3BhblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW1lZGl1bSB0ZXh0LXhzIHRleHQtZ3JheS01MDAgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlLXNwYWNlLW5vd3JhcCB0ZXh0LW92ZXJmbG93LWVsbGlwc2lzXCJcclxuICAgICAgICAgICAgPnt7IHVzZXJFbWFpbCB9fTwvc3BhblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPGt2LWJ1dHRvblxyXG4gICAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIGxhYmVsPVwiR2VyZW5jaWFyIEtlZVBhc3NcIlxyXG4gICAgICAgICAgICAob25DbGljayk9XCJhY2Nlc3NLZWVQYXNzKCRldmVudClcIlxyXG4gICAgICAgICAgPjwva3YtYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYoYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICA8cC1kaXZpZGVyPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHRleHQtc21cIj5cclxuICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGFjdGlvbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgc2lkZS1tZW51LWl0ZW0gcC0xXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb24uYWN0aW9uKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPnt7IGFjdGlvbi5pY29uIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIDxwLWRpdmlkZXI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTIgc2lkZS1tZW51LWl0ZW0gcC0xXCJcclxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIncmdiYSgyNTIsIDMsIDMsIDAuNiknXCJcclxuICAgICAgICAgIChjbGljayk9XCJsb2dvdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+ZXhpdF90b19hcHA8L3NwYW4+XHJcbiAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpKXtcclxuICAgICAgICAgIDxsYWJlbD5TYWlyPC9sYWJlbD5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3Atb3ZlcmxheVBhbmVsPlxyXG48L2Rpdj5cclxuIl19
363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWxheW91dC9sYXlvdXQva3YtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFHTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQW1DdkIsTUFBTSxPQUFPLGlCQUFpQjtJQXVHNUIsWUFDVSxHQUFzQixFQUN0QixFQUFlLEVBQ2IsTUFBYyxFQUNkLGNBQThCO1FBSGhDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDYixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBMUdqQyxTQUFJLEdBVVAsRUFBRSxDQUFDO1FBRUEsWUFBTyxHQUEwRCxFQUFFLENBQUM7UUFFcEUsWUFBTyxHQUFHLElBQUksQ0FBQztRQUV4Qjs7Ozs7Ozs7Ozs7Ozs7O1dBZUc7UUFDSCxvQkFBZSxHQUFHLEtBQUssQ0FBbUUsRUFBRSxDQUFDLENBQUM7UUFFOUYsbUJBQWMsR0FBb0I7WUFDaEMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixF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QUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGNvbnRlbnRDaGlsZHJlbixcclxuICBlZmZlY3QsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbnB1dCxcclxuICBJbnB1dCxcclxuICBtb2RlbCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBzaWduYWwsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tICdwcmltZW5nL3NpZGViYXInO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIGFuaW1hdGUsXHJcbiAgc3RhdGUsXHJcbiAgc3R5bGUsXHJcbiAgdHJhbnNpdGlvbixcclxuICB0cmlnZ2VyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBUb3BBY3Rpb25zTW9kZWwgfSBmcm9tICcuLi90b3AtaWNvbnMvdG9wLWljb25zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGxpbmsgfSBmcm9tICdkMyc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMYXlvdXRNZW51SXRlbSB7XHJcbiAgaWRtZW51OiBudW1iZXI7XHJcbiAgaWRtZW51cGFpOiBudW1iZXIgfCBudWxsO1xyXG4gIGlkYXBsaWNhdGl2bzogbnVtYmVyO1xyXG4gIGRlc2NyaWNhb21lbnU6IHN0cmluZztcclxuICBsaW5rOiBzdHJpbmcgfCBudWxsO1xyXG4gIGljb25lOiBzdHJpbmcgfCBudWxsO1xyXG4gIGluZHB1YmxpY2FkbzogYm9vbGVhbjtcclxuICBpbmRtZW51cGFpOiBib29sZWFuO1xyXG4gIGxpc3RhaWR2aXNhb21lbnU6IG51bWJlcltdO1xyXG4gIGJnQ29sb3I/OiBzdHJpbmc7XHJcbiAgdGV4dENvbG9yPzogc3RyaW5nO1xyXG59IFxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi1sYXlvdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LWxheW91dC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgYXBwczoge1xyXG4gICAgaWRhcGxpY2F0aXZvOiBudW1iZXI7XHJcbiAgICBpZHNpc3RlbWE6IG51bWJlcjtcclxuICAgIG5vbWVhcGxpY2F0aXZvOiBzdHJpbmc7XHJcbiAgICBkZXNjcmljYW9hcGxpY2F0aXZvOiBzdHJpbmc7XHJcbiAgICByb3RhcGFkcmFvOiBzdHJpbmc7XHJcbiAgICBpbmRwdWJsaWNhZG86IGJvb2xlYW47XHJcbiAgICBpbmRwdWJsaWNhY2FvZ3JhZGF0aXZhOiBib29sZWFuO1xyXG4gICAgaW5kZXhpZ2VlbXByZXNhZW50cmFkYTogYm9vbGVhbjtcclxuICAgIHVybGljb25lPzogc3RyaW5nO1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBhY3Rpb25zOiB7IGljb246IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgYWN0aW9uOiAoKSA9PiB2b2lkIH1bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSB1c2VDYXJkID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHF1YWlzIG1lbnVzIHPDo28gdmlzw612ZWlzIG5vIHRvcG8uXHJcbiAgICogXHJcbiAgICogQHR5cGUge0FycmF5PHtpZDogbnVtYmVyLCBudW1Ob3RpZmljYXRpb25zPzogbnVtYmVyLCBhY3Rpb24/OiAoZTogYW55KSA9PiB2b2lkfT59XHJcbiAgICogXHJcbiAgICogT3DDp8O1ZXMgZGlzcG9uw612ZWlzOlxyXG4gICAqIC0gMiAtIEtpYXJhIFxyXG4gICAqIC0gMyAtIE5vdGlmaWNhw6fDtWVzXHJcbiAgICogLSA0IC0gVGFyZWZhc1xyXG4gICAqIC0gNSAtIENvbXVuaWNhZG9yXHJcbiAgICogXHJcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGlkIC0gaWRlbnRpZmljYWRvciBkbyBtZW51LlxyXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbnVtTm90aWZpY2F0aW9uc10gLSBOw7ptZXJvIGRlIG5vdGlmaWNhw6fDtWVzIChvcGNpb25hbCkuXHJcbiAgICogQHByb3BlcnR5IHsoZTogYW55KSA9PiB2b2lkfSBbYWN0aW9uXSAtIEHDp8OjbyBkbyBjbGlxdWUsIHF1ZSByZXRvcm5hIG8gZXZlbnRvIGRvIGNsaXF1ZSAob3B0aW9uYWwpLlxyXG4gICAqIFxyXG4gICAqL1xyXG4gIHRvcE1lbnVzVmlzaWJsZSA9IGlucHV0PHtpZDpudW1iZXIsIG51bU5vdGlmaWNhdGlvbnM/Om51bWJlciwgYWN0aW9uPzooZTphbnkpID0+IHZvaWR9W10+KFtdKTtcclxuXHJcbiAgdG9wTWVudU9wdGlvbnM6IFRvcEFjdGlvbnNNb2RlbFtdPVtcclxuICAgIHtpZDogMSwgdmlzaWJsZTogdHJ1ZSwgaWNvbjogJ3BlcnNvbicsIHRvb2x0aXA6ICdNZXVzIERhZG9zJywgbnVtTm90aWZpY2F0aW9uczogMCwgYWN0aW9uOiAoZTphbnkpID0+IHt0aGlzLm1ldXNEYWRvc1BhbmVsLnRvZ2dsZShlKX19LFxyXG4gICAge2lkOiAyLCB2aXNpYmxlOiBmYWxzZSwgaWNvbjogJ2tpYXJhJywgdG9vbHRpcDogJ0tpYXJhJywgbnVtTm90aWZpY2F0aW9uczogMCwgYWN0aW9uOiAoKSA9PiB7fX0sXHJcbiAgICB7aWQ6IDMsIHZpc2libGU6IGZhbHNlLCBpY29uOiAnbm90aWZpY2F0aW9ucycsIHRvb2x0aXA6ICdOb3RpZmljYcOnw7VlcycsIG51bU5vdGlmaWNhdGlvbnM6IDAsIGFjdGlvbjogKCkgPT4ge319LFxyXG4gICAge2lkOiA0LCB2aXNpYmxlOiBmYWxzZSwgaWNvbjogJ2NoZWNrbGlzdCcsIHRvb2x0aXA6ICdUYXJlZmFzJywgbnVtTm90aWZpY2F0aW9uczogMCwgYWN0aW9uOiAoKSA9PiB7fX0sXHJcbiAgICB7aWQ6IDUsIHZpc2libGU6IGZhbHNlLCBpY29uOiAnY2hhdCcsIHRvb2x0aXA6ICdDb211bmljYWRvcicsIG51bU5vdGlmaWNhdGlvbnM6IDAsIGFjdGlvbjogKCkgPT4ge319LFxyXG4gIF07XHJcbiAgXHJcbiAgcHJvZmlsZUltYWdlID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblxyXG4gIEBJbnB1dCgpIGJyZWFkQ3J1bWJJdGVtczoge1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHJvdXRlckxpbms6IHN0cmluZztcclxuICB9W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgbWFzdGVyczoge1xyXG4gICAgaWRtYXN0ZXI6IG51bWJlcjtcclxuICAgIGNwZmNucGo6IHN0cmluZztcclxuICAgIG5vbWU6IHN0cmluZztcclxuICAgIGlkbWFzdGVybm9tZTogc3RyaW5nO1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBtZW51cyA9IG1vZGVsPExheW91dE1lbnVJdGVtW10+KFtdKTtcclxuICBtZW51VmlzaXZlbCA9IHNpZ25hbDxudW1iZXJ8dW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHNob3dNZW51U2lzdGVtYXMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBleHBhbmRNZW51ID0gbW9kZWw8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIEBJbnB1dCgpIGxvZ29NZW51RXhwYW5kITogYW55O1xyXG4gIEBJbnB1dCgpIGxvZ29NZW51SGlkZSE6IGFueTtcclxuXHJcbiAgQElucHV0KCkgc2VsZWN0ZWRBcHAhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRFbXByZXNhITogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTWFzdGVyITogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKSBzaG93QnV0dG9uQXBwczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0J1dHRvblVzZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dFeHBhbmRNZW51OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RHJvcGRvd25MaWNlbmNhOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93TWVudTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd1Ryb2NhRW1wcmVzYTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dCcmVhZGNydW1iOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSB1c2VyTmFtZTogc3RyaW5nID0gJ1VzdcOhcmlvJztcclxuICBASW5wdXQoKSB1c2VyRW1haWw6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIG1hc3Rlck5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZW1wcmVzYU5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaWRzQXBsaWNhdGl2b3NNZW51SGlkZTogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgQE91dHB1dCgpIGFjY2Vzc0tlZVBhc3NFbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlRW1wcmVzYUVtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlTGljZW5zZUVtaXQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBleHBhbmRNZW51RW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBsb2dvdXRFbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0QXBwRW1pdDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG5hdmlnYXRlVG9EZWZhdWx0Um91dGVFbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWV1c0RhZG9zUGFuZWwnKSBtZXVzRGFkb3NQYW5lbCE6IE92ZXJsYXlQYW5lbDtcclxuXHJcbiAgLy8gdG9wTWVudUFjdGlvbnMgPSBjb250ZW50Q2hpbGRyZW48VGVtcGxhdGVSZWY8YW55Pj4oJ3RvcE1lbnVBY3Rpb24nKTtcclxuXHJcbiAgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG4gIGhlaWdodENhcmQhOiBudW1iZXI7XHJcbiAgbW91c2VPdmVyRmlsaG9JbmRleDogYW55O1xyXG4gIG1vdXNlT3ZlckluZGV4OiBhbnk7XHJcbiAgd2lkdGhDYXJkITogbnVtYmVyO1xyXG5cclxuICB3aWR0aFBhZ2UgPSBzaWduYWw8bnVtYmVyPigwKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByb3RlY3RlZCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICApIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGlkbWFzdGVyOiBbdGhpcy5zZWxlY3RlZE1hc3RlciwgW11dLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gdGhpcy5wcm9jZXNzYXJNZW51cygpO1xyXG4gICAgdGhpcy5hZGp1c3RXaWR0aENhcmQoKTtcclxuICAgIHRoaXMudmVyaWZ5TWVudUJlaGF2aW9yKCk7XHJcbiAgICB0aGlzLmV4cGFuZE1lbnVFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgdG9wTWVudU9wdGlvbnNSZXZlcnNlZCA9IGZhbHNlO1xyXG5cclxuICBwcm9jZXNzYXJfbWVudXMgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYodGhpcy5wcm9maWxlSW1hZ2UoKSl7XHJcbiAgICAgIHRoaXMudG9wTWVudU9wdGlvbnNbMF0uaW1nID0gdGhpcy5wcm9maWxlSW1hZ2UoKTtcclxuICAgIH1cclxuICAgIC8vaW52ZXJ0ZXIgbyB0b3BNZW51T3B0aW9uc1xyXG4gICAgaWYgKCF0aGlzLnRvcE1lbnVPcHRpb25zUmV2ZXJzZWQpIHtcclxuICAgICAgdGhpcy50b3BNZW51T3B0aW9ucy5yZXZlcnNlKCk7XHJcbiAgICAgIHRoaXMudG9wTWVudU9wdGlvbnNSZXZlcnNlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgXHJcbiAgICB0aGlzLnRvcE1lbnVzVmlzaWJsZSgpLmZvckVhY2goKGl0ZW06YW55KSA9PiB7XHJcbiAgICAgIGxldCBtZW51ID0gdGhpcy50b3BNZW51T3B0aW9ucy5maW5kKCh4KSA9PiB4LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgaWYobWVudSl7XHJcbiAgICAgICAgbWVudS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICBpZihpdGVtLmFjdGlvbil7XHJcbiAgICAgICAgICBtZW51LmFjdGlvbiA9IGl0ZW0uYWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpdGVtLm51bU5vdGlmaWNhdGlvbnMpe1xyXG4gICAgICAgICAgbWVudS5udW1Ob3RpZmljYXRpb25zID0gaXRlbS5udW1Ob3RpZmljYXRpb25zO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIC8vIHByb2Nlc3Nhck1lbnVzKCkge1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGFjY2Vzc0tlZVBhc3MoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5hY2Nlc3NLZWVQYXNzRW1pdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGp1c3RIZWlnaHRDYXJkKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy53aWR0aENhcmQgPiA0MDApIHtcclxuICAgICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgPCA5OTIgJiYgdGhpcy5zaG93TGljZW5jYXMoKSkgcmV0dXJuIDE0NTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmJyZWFkQ3J1bWJJdGVtcy5sZW5ndGggPiAwKSByZXR1cm4gOTU7XHJcbiAgICAgIGVsc2UgcmV0dXJuIDg1O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAxMjU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkanVzdFdpZHRoQ2FyZCgpIHtcclxuICAgIHRoaXMud2lkdGhQYWdlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCk7XHJcblxyXG4gICAgdGhpcy5oZWlnaHRDYXJkID0gTnVtYmVyKFxyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS1jb250ZW50Jyk/Lm9mZnNldEhlaWdodFxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLnNob3dNZW51KVxyXG4gICAgICB0aGlzLndpZHRoQ2FyZCA9XHJcbiAgICAgICAgTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKSAtICh0aGlzLmV4cGFuZE1lbnUoKSA/IDMzMyA6IDkzKTtcclxuICAgIGVsc2UgdGhpcy53aWR0aENhcmQgPSBOdW1iZXIod2luZG93LmlubmVyV2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbGxSb3V0ZShyb3RhOiBhbnksIGV4cGFuZD86IGJvb2xlYW4pIHtcclxuICAgIGlmICghZXhwYW5kICYmICF0aGlzLmV4cGFuZE1lbnUoKSAmJiB0aGlzLnNob3dFeHBhbmRNZW51KVxyXG4gICAgICB0aGlzLmV4cGFuZE1lbnUudXBkYXRlKChjdXJyZW50VmFsdWU6IGJvb2xlYW4pID0+ICFjdXJyZW50VmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZHRoUGFnZSgpICE9IDAgJiYgdGhpcy53aWR0aFBhZ2UoKSA8IDgwMCAmJiB0aGlzLmV4cGFuZE1lbnUoKSAmJiB0aGlzLnNob3dFeHBhbmRNZW51KVxyXG4gICAgICB0aGlzLmV4cGFuZE1lbnUuc2V0KGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZUVtcHJlc2EoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jaGFuZ2VFbXByZXNhRW1pdC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VMaWNlbnNlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY2hhbmdlTGljZW5zZUVtaXQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZlcmlmeU1lbnVCZWhhdmlvcigpIHtcclxuICAgIGlmICh0aGlzLndpZHRoUGFnZSgpIDwgODAwKVxyXG4gICAgICB0aGlzLmV4cGFuZE1lbnUuc2V0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwYW5kTWVudUV2ZW50KCkge1xyXG4gICAgdGhpcy5leHBhbmRNZW51RW1pdC5lbWl0KHRoaXMuZXhwYW5kTWVudSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5sb2dvdXRFbWl0LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZW51c1BlckFwcCgpIHtcclxuICAgIGlmICh0aGlzLnJvdXRlci51cmwgJiYgdGhpcy5tZW51cygpICYmIHRoaXMubWVudXMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgPT09ICcvJykge1xyXG4gICAgICAgIC8vIHRoaXMubmF2aWdhdGVUb0ZpcnN0TWVudSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG1lbnVTZWxlY2lvbmFkbyA9IHRoaXMubWVudXMoKS5maW5kKFxyXG4gICAgICAgICAgKG1lbnU6IGFueSkgPT5cclxuICAgICAgICAgICAgbWVudS5saW5rICYmIG1lbnUubGluay5pbmNsdWRlcyh0aGlzLnJvdXRlci51cmwuc2xpY2UoMSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAobWVudVNlbGVjaW9uYWRvKSB7XHJcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9NZW51KG1lbnVTZWxlY2lvbmFkbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmFtZUVtcHJlc2Eobm9tZUxpY2VuY2E6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAobm9tZUxpY2VuY2EpIHtcclxuICAgICAgaWYgKG5vbWVMaWNlbmNhLmxlbmd0aCA+IDIzKSByZXR1cm4gbm9tZUxpY2VuY2Euc3Vic3RyaW5nKDAsIDIzKSArICcuLi4nO1xyXG4gICAgICBlbHNlIHJldHVybiBub21lTGljZW5jYTtcclxuICAgIH0gZWxzZSByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlVG9GaXJzdE1lbnUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaXJzdE1lbnUgPSB0aGlzLm1lbnVzKClbMF07XHJcbiAgICBpZiAoZmlyc3RNZW51LmluZG1lbnVwYWkpIHtcclxuICAgICAgY29uc3QgZmlsaG9zID0gdGhpcy5yZXR1cm5NZW51Q2hpbGQoZmlyc3RNZW51LmlkbWVudSk7XHJcbiAgICAgIGlmIChmaWxob3MpIHtcclxuICAgICAgICB0aGlzLmNhbGxSb3V0ZShmaWxob3NbMF0ubGluaywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FsbFJvdXRlKGZpcnN0TWVudS5saW5rLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVUb01lbnUobWVudTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAobWVudS5tZW51cGFpKSB7XHJcbiAgICAgIGNvbnN0IGZpbGhvcyA9IHRoaXMucmV0dXJuTWVudUNoaWxkKG1lbnUuaWRtZW51KTtcclxuICAgICAgaWYgKGZpbGhvcykge1xyXG4gICAgICAgIHRoaXMuY2FsbFJvdXRlKGZpbGhvc1swXS5saW5rLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYWxsUm91dGUobWVudS5saW5rLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lbnVTZWxlY2lvbmFkbyA9IHNpZ25hbDxhbnk+KG51bGwpO1xyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCBsYXRlc3RSZXF1ZXN0ID0gY2hhbmdlc1snbWVudXMnXTtcclxuICAgIGlmIChsYXRlc3RSZXF1ZXN0Py5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5tZW51c1BlckFwcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWNpb25hck1lbnUoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMuYWRqdXN0V2lkdGhDYXJkKCk7XHJcbiAgICAvLyB0aGlzLnZlcmlmeU1lbnVCZWhhdmlvcigpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RlZE1lbnVQYWkobWVudTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuZXhwYW5kTWVudSgpICYmIG1lbnUuaW5kbWVudXBhaSlcclxuICAgICAgcmV0dXJuIG1lbnUuaWRtZW51ID09PSB0aGlzLm1lbnVTZWxlY2lvbmFkbygpPy5pZG1lbnVwYWk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2VsZWNpb25hck1lbnUoKSB7XHJcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMucm91dGVyLnVybCwgd2luZG93Lm9yaWdpbik7XHJcblxyXG4gICAgY29uc3QgY3VycmVudFBhdGggPSB1cmwucGF0aG5hbWU7XHJcbiAgICBjb25zdCBwdXJlUGF0aCA9IGN1cnJlbnRQYXRoLm1hdGNoKC9eW147XSovaSk7XHJcblxyXG4gICAgY29uc3QgcGF0aHMgPSBwdXJlUGF0aCFbMF07XHJcblxyXG4gICAgdGhpcy5tZW51cy5zZXQoXHJcbiAgICAgIHRoaXMubWVudXMoKS5tYXAoKG1lbnUpID0+IHtcclxuICAgICAgICBpZiAobWVudS5saW5rKSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5tZW51LFxyXG4gICAgICAgICAgICBiZ0NvbG9yOiBwYXRocy5pbmNsdWRlcyhtZW51LmxpbmshKSA/ICdyZ2IoNDEsIDE4NSwgNDUpJyA6ICcnLFxyXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IHBhdGhzLmluY2x1ZGVzKG1lbnUubGluayEpID8gJ3RleHQtd2hpdGUnIDogJycsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWVudTtcclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBtZW51ID0gdGhpcy5tZW51cygpLmZpbmQoKG1lbnU6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gbWVudS5saW5rICYmIHBhdGhzLmluY2x1ZGVzKG1lbnUubGluayEpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5tZW51U2VsZWNpb25hZG8uc2V0KG1lbnUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJldHVybk1lbnVDaGlsZChpZG1lbnU6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMubWVudXMoKS5maWx0ZXIoKHg6IGFueSkgPT4geC5pZG1lbnVwYWkgPT0gaWRtZW51KTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgc2VsZWN0QXBwKGlkYXBsaWNhdGl2bzogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdEFwcEVtaXQuZW1pdChpZGFwbGljYXRpdm8pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dMaWNlbmNhcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNob3dEcm9wZG93bkxpY2VuY2EgJiYgKHRoaXMubWFzdGVycyB8fCBbXSkubGVuZ3RoID4gMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVNZW51KCkge1xyXG4gICAgdGhpcy5leHBhbmRNZW51LnVwZGF0ZSgoY3VycmVudFZhbHVlOiBib29sZWFuKSA9PiAhY3VycmVudFZhbHVlKTtcclxuICAgIHRoaXMuZXhwYW5kTWVudUV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlKCkge1xyXG4gICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgPCA4MDAgJiYgdGhpcy5leHBhbmRNZW51KCkpXHJcbiAgICAgIHRoaXMuZXhwYW5kTWVudS5zZXQoZmFsc2UpO1xyXG5cclxuICAgIHRoaXMubmF2aWdhdGVUb0RlZmF1bHRSb3V0ZUVtaXQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGV4aWJpck5vbWVzKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnNob3dMaWNlbmNhcygpICYmICh0aGlzLm1hc3Rlck5hbWUgfHwgdGhpcy5lbXByZXNhTmFtZSk7XHJcbiAgfVxyXG5cclxuICBleGliaXJNZW51Q2hpbGQoZXZlbnQ6YW55LCBpbmRleDpudW1iZXIpe1xyXG4gICAgdGhpcy5tZW51VmlzaXZlbC5zZXQoaW5kZXgpO1xyXG4gICAgICBsZXQgbWVudVBhcmVudCA7XHJcbiAgICAgIGxldCBtZW51Q2hpbGQgO1xyXG4gICAgICBpZihpbmRleCA9PT0gLTEpe1xyXG4gICAgICAgIG1lbnVQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWVudS1zaXN0ZW1hcy1wYXJlbnRgKTtcclxuICAgICAgICBtZW51Q2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgbWVudS1zaXN0ZW1hcy1jaGlsZGApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgbWVudVBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBtZW51LXBhcmVudC0ke2luZGV4fWApO1xyXG4gICAgICAgIG1lbnVDaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBtZW51LWNoaWxkLSR7aW5kZXh9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChtZW51UGFyZW50KSB7XHJcbiAgICAgICAgY29uc3QgcmVjdF9wYXJlbnQgPSBtZW51UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGxldCB4ID0gcmVjdF9wYXJlbnQucmlnaHQgLSAxMDtcclxuICAgICAgICBsZXQgeSA9IHJlY3RfcGFyZW50LnRvcCAtNTtcclxuICBcclxuICAgICAgICBpZiAobWVudUNoaWxkKSB7XHJcbiAgICAgICAgICBjb25zdCByZWN0X2NoaWxkID0gbWVudUNoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgXHJcbiAgICAgICAgICAvL1ZlcmlmaWNhIHNlIG8gbWVudSBmaWxobyB2YWkgdXRyYXBhc3NhciBvIGZpbmFsIGRvIHZpZXdwb3J0IHByYSBiYWl4b1xyXG4gICAgICAgICAgaWYgKHJlY3RfcGFyZW50LmJvdHRvbSArIHJlY3RfY2hpbGQuaGVpZ2h0ID4gdmlld3BvcnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgeSA9IHJlY3RfcGFyZW50LmJvdHRvbSAtIHJlY3RfY2hpbGQuaGVpZ2h0IC0gMTA7XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICAvLyBWZXJpZmljYSBzZSBvIG1lbnUgcGFpIGVzdMOhIG11aXRvIGVtIGNpbWFcclxuICAgICAgICAgIGlmIChyZWN0X3BhcmVudC50b3AgPD0gMCkge1xyXG4gICAgICAgICAgICB5ID0gcmVjdF9wYXJlbnQuYm90dG9tICsgNTtcclxuICAgICAgICAgIH1cclxuICBcclxuICAgICAgICAgIG1lbnVDaGlsZC5zdHlsZS50b3AgPSBgJHt5fXB4YDtcclxuICAgICAgICAgIG1lbnVDaGlsZC5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmdWxsLWNvbnRhaW5lclwiPlxyXG4gIEBpZihzaG93TWVudSkge1xyXG4gIDxwLXNpZGViYXJcclxuICAgICNzaWRlYmFyUmVmXHJcbiAgICBbdmlzaWJsZV09XCJ0cnVlXCJcclxuICAgIFtzaG93Q2xvc2VJY29uXT1cImZhbHNlXCJcclxuICAgIFttb2RhbF09XCJmYWxzZVwiXHJcbiAgICBbc3R5bGVdPVwieyB3aWR0aDogZXhwYW5kTWVudSgpID8gJzE3cmVtJyA6ICczLjY1cmVtJyB9XCJcclxuICAgIHN0eWxlQ2xhc3M9XCJ0cmFuc2l0aW9uLWFsbFwiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRsZXNzXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbHVtbiBvdmVyZmxvdy1oaWRkZW4gcC0yXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleC1ub25lIGZsZXggZmxleC1jb2x1bW4gZ2FwLTMganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC1zaHJpbmstMCBvdmVyZmxvdy1oaWRkZW5cIlxyXG4gICAgICAgID5cclxuICAgICAgICA8IS0tIExPR08gLS0+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCB7e1xyXG4gICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdmbGV4LXJvdycgOiAnZmxleC1jb2x1bW4nXHJcbiAgICAgICAgICAgIH19IGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgIGV4cGFuZE1lbnUoKVxyXG4gICAgICAgICAgICAgICAgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nXHJcbiAgICAgICAgICAgICAgICA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICB9fSBwLTJcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8IS0tIExvZ28gcGFyYSBvIG1lbnUgZXhwYW5kaWRvIC0tPlxyXG4gICAgICAgICAgICBAaWYoZXhwYW5kTWVudSgpICYmIGxvZ29NZW51RXhwYW5kKXtcclxuICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgIGFsdD1cIkNhcmRcIlxyXG4gICAgICAgICAgICAgIFtzcmNdPVwibG9nb01lbnVFeHBhbmRcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzIuNHJlbSdcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTBcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIExvZ28gcGFyYSBvIG1lbnUgbWluaW1pemFkby0tPlxyXG4gICAgICAgICAgICBAaWYoIWV4cGFuZE1lbnUoKSAmJiBsb2dvTWVudUhpZGUpe1xyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgYWx0PVwiQ2FyZFwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJsb2dvTWVudUhpZGVcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiJzIuNHJlbSdcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTFcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvRGVmYXVsdFJvdXRlKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRvZ2dsZSBtZW51IC0tPlxyXG4gICAgICAgICAgICBAaWYoc2hvd0V4cGFuZE1lbnUpe1xyXG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBzaWRlLW1lbnUtaXRlbVwiIChjbGljayk9XCJleHBhbmRNZW51LnNldCghZXhwYW5kTWVudSgpKVwiPm1lbnU8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICBAaWYoc2hvd1Ryb2NhRW1wcmVzYSl7XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7XHJcbiAgICAgICAgICAgICAgZXhwYW5kTWVudSgpID8gJ2JldHdlZW4nIDogJ2NlbnRlcidcclxuICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW0gdHJvY2Etc2lzdGVtYS1jb250YWluZXIgbWItMyBweS0yXCJcclxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIidUcm9jYXIgZGUgZW1wcmVzYSdcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlRW1wcmVzYSgkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSAmJiBzZWxlY3RlZEVtcHJlc2Epe1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHctZnVsbFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUVtcHJlc2EoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBAaWYodGhpcy5zZWxlY3RlZEVtcHJlc2EucmF6YW9zb2NpYWwpe1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgZm9udC1zZW1pYm9sZCBtci0yIGNvbG9yLXN5c3RlbVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN1emVdPVwiJy41cmVtJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgbmFtZUVtcHJlc2EodGhpcy5zZWxlY3RlZEVtcHJlc2EucmF6YW9zb2NpYWwpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH0gQGlmKHRoaXMuc2VsZWN0ZWRFbXByZXNhLmNwZmNucGope1xyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgbXQtMSBjb2xvci1zeXN0ZW1cIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRTdXplXT1cIicuNXJlbSdcIlxyXG4gICAgICAgICAgICAgICAgPnt7IHRoaXMuc2VsZWN0ZWRFbXByZXNhLmNwZmNucGogfCBjcGZDbnBqIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5zd2FwX2hvcml6PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBNRU5VUyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGxpc3Qtbm9uZSBtLTAgb3ZlcmZsb3cteS1hdXRvIG1heC1oLWZ1bGwgbWVudXMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8IS0tIG1lbnVzIC0tPlxyXG4gICAgICAgICAgQGZvciAobWVudSBvZiBtZW51cygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgQGlmKCFpZHNBcGxpY2F0aXZvc01lbnVIaWRlLmluY2x1ZGVzKG1lbnUuaWRhcGxpY2F0aXZvKSl7XHJcbiAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBtZW51IHF1ZSBuw6NvIHRlbSBmaWxobyAtLT5cclxuICAgICAgICAgICAgICAgICAgQGlmKCAhbWVudS5pbmRtZW51cGFpICYmICghbWVudS5pZG1lbnVwYWkgfHwgbWVudS5pZG1lbnVwYWkgPT0gMCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tleHBhbmRNZW51KCkgPydiZXR3ZWVuJzonY2VudGVyJ319IGdhcC0yIHNpZGUtbWVudS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXRvcDogMC43NXJlbTsgcGFkZGluZy1ib3R0b206MC43NXJlbTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FsbFJvdXRlKG1lbnUubGluaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57e21lbnUuaWNvbmUgfHwgJ2xlbnNfYmx1cid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7bWVudS5kZXNjcmljYW9tZW51fX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwhLS0gbWVudSBjb20gZmlsaG8gLS0+XHJcbiAgICAgICAgICAgICAgICAgIEBpZihtZW51LmluZG1lbnVwYWkpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LXBhcmVudFwiIGlkPVwibWVudS1wYXJlbnQte3skaW5kZXh9fVwiIChtb3VzZWVudGVyKT1cImV4aWJpck1lbnVDaGlsZCgkZXZlbnQsICRpbmRleClcIiAobW91c2VsZWF2ZSk9XCJtZW51VmlzaXZlbC5zZXQodW5kZWZpbmVkKVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LXt7ZXhwYW5kTWVudSgpID8nYmV0d2Vlbic6J2NlbnRlcid9fSBnYXAtMiBzaWRlLW1lbnUtaXRlbVwiIHN0eWxlPVwicGFkZGluZy10b3A6IDAuNzVyZW07IHBhZGRpbmctYm90dG9tOjAuNzVyZW07XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57e21lbnUuaWNvbmUgfHwgJ2xlbnNfYmx1cid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGV4cGFuZE1lbnUoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7bWVudS5kZXNjcmljYW9tZW51fX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmNoZXZyb25fcmlnaHQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWNoaWxkc1wiIGlkPVwibWVudS1jaGlsZC17eyRpbmRleH19XCIgW3N0eWxlLm9wYWNpdHldPVwibWVudVZpc2l2ZWwoKT09PSRpbmRleD8nMSc6JzAnXCIgW3N0eWxlLnBvaW50ZXJFdmVudHNdPVwibWVudVZpc2l2ZWwoKT09PSRpbmRleD8nYXV0byc6J25vbmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicC0wIG0tMCBmb250LWJvbGQgcHQtMiBweC0yIHRleHQteHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bWVudS5kZXNjcmljYW9tZW51fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1kaXZpZGVyIGNsYXNzPVwicC0wIG0tMFwiIFtzdHlsZS5vcGFjaXR5XT1cIjFcIiB0eXBlPVwic29saWRcIj48L3AtZGl2aWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY2hpbGRzLWNvbnRlbnQgcC0wIG0tMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHJldHVybk1lbnVDaGlsZChtZW51LmlkbWVudSk7IHRyYWNrICRpbmRleCkge1xyXG4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgc2lkZS1tZW51LWl0ZW0gcHktMiBweC0yIHRleHQtc21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FsbFJvdXRlKGl0ZW0ubGluaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uZGVzY3JpY2FvbWVudX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgY2xhc3M9XCJweC0yXCIgW3N0eWxlLm9wYWNpdHldPVwiMVwiIHR5cGU9XCJzb2xpZFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8IS0tIEFQUFMgRSBTQUlSIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LW5vbmUgbGlzdC1ub25lIG0tMCBvdmVyZmxvdy15LWF1dG8gbWF4LWgtZnVsbFwiPlxyXG4gICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LXBhcmVudFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJtZW51LXNpc3RlbWFzLXBhcmVudFwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiZXhpYmlyTWVudUNoaWxkKCRldmVudCwgLTEpXCJcclxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtZW51VmlzaXZlbC5zZXQodW5kZWZpbmVkKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC17e1xyXG4gICAgICAgICAgICAgICAgICBleHBhbmRNZW51KCkgPyAnYmV0d2VlbicgOiAnY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXRvcDogMC43NXJlbTsgcGFkZGluZy1ib3R0b206IDAuNzVyZW1cIlxyXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIiFleHBhbmRNZW51KCkgPyAnU2lzdGVtYXMnIDogJydcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmdyaWRfdmlldzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpe1xyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlNpc3RlbWFzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmNoZXZyb25fcmlnaHQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1jaGlsZHNcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJtZW51LXNpc3RlbWFzLWNoaWxkXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cIm1lbnVWaXNpdmVsKCkgPT09IC0xID8gJzEnIDogJzAnXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5wb2ludGVyRXZlbnRzXT1cIm1lbnVWaXNpdmVsKCkgPT09IC0xID8gJ2F1dG8nIDogJ25vbmUnXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInAtMCBtLTAgZm9udC1ib2xkIHB0LTIgcGwtMyB0ZXh0LXhzXCI+U2lzdGVtYXM8L3A+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGFwcHM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBzaWRlLW1lbnUtaXRlbSBweS0yIHBsLTMgcHItMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbFJvdXRlKGl0ZW0ucm90YXBhZHJhbyk7IHNlbGVjdEFwcChpdGVtLmlkYXBsaWNhdGl2bylcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpdGVtLnVybGljb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0ycmVtIHctMnJlbSBib3JkZXItcm91bmQtbGdcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubm9tZWFwbGljYXRpdm8gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwhLS0gPGxpPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQte3tcclxuICAgICAgICAgICAgICAgIGV4cGFuZE1lbnUoKSA/ICdiZXR3ZWVuJyA6ICdjZW50ZXInXHJcbiAgICAgICAgICAgICAgfX0gZ2FwLTIgc2lkZS1tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy10b3A6IDAuNzVyZW07IHBhZGRpbmctYm90dG9tOiAwLjc1cmVtXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWV4cGFuZE1lbnUoKSA/ICdTYWlyJyA6ICcnXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3JnYmEoMjUyLCAzLCAzLCAwLjYpJ1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxvZ291dCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmV4aXRfdG9fYXBwPC9zcGFuPlxyXG4gICAgICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpe1xyXG4gICAgICAgICAgICAgIDxsYWJlbD5TYWlyPC9sYWJlbD5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9saT4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3Atc2lkZWJhcj5cclxuICB9XHJcblxyXG4gIDwhLS0gU0XDh8ODTyBDT05URcOaRE8gIC0tPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwidy1hdXRvIGgtc2NyZWVuIHBhZ2UtY29udGVudCBvdmVyZmxvdy15LWhpZGRlbiBmbGV4IGZsZXgtY29sdW1uXCJcclxuICAgIGlkPVwicGFnZS1jb250ZW50XCJcclxuICAgIHN0eWxlPVwid2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnRcIlxyXG4gID5cclxuICAgIDwhLS0gVE9QTyAtLT5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXktMiBteC0zIG1iLTBcIlxyXG4gICAgPlxyXG4gICAgICBAaWYoIXNob3dNZW51KSB7XHJcbiAgICAgIDwhLS0gTG9nbyBob21lIC0tPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJsb2dvTWVudUV4cGFuZFwiIHdpZHRoPVwiMTUwXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICA8IS0tIEJyZWFkY3J1bWJzIC0tPlxyXG4gICAgICBAaWYoc2hvd0JyZWFkY3J1bWIpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbFwiPlxyXG4gICAgICAgIDxwLWJyZWFkY3J1bWJcclxuICAgICAgICAgICpuZ0lmPVwid2lkdGhDYXJkID4gNDAwXCJcclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItbm9uZSBwLTAgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0ycmVtIGJnLXRyYW5zcGFyZW50XCJcclxuICAgICAgICAgIFttb2RlbF09XCJicmVhZENydW1iSXRlbXNcIlxyXG4gICAgICAgICAgKG9uSXRlbUNsaWNrKT1cImNhbGxSb3V0ZSgkZXZlbnQuaXRlbS5yb3V0ZXJMaW5rLCB0cnVlKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtaXRlbSBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgIEBpZihicmVhZENydW1iSXRlbXMuaW5kZXhPZihpdGVtKSA8IGJyZWFkQ3J1bWJJdGVtcy5sZW5ndGggLSAxKXtcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW5vcm1hbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLWJyZWFkY3J1bWI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgPCEtLSBHSE9TVCBESVYgUEFSQSBPQ1BVQVIgRVNQQcOHTyBOTyBTUEFDRSBCRVRXRUVOIC0tPlxyXG4gICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICB9IH0gQGlmIChleGliaXJOb21lcykgeyBAaWYod2lkdGhDYXJkID49IDUxNykge1xyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgID5cclxuICAgICAgICBAaWYgKG1hc3Rlck5hbWUpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgc3lzdGVtLWNvbG9yXCI+e3sgbWFzdGVyTmFtZSB9fTwvc3Bhbj4gfSBAaWZcclxuICAgICAgICAoZW1wcmVzYU5hbWUpIHs8c3BhbiBjbGFzcz1cImVtcHJlc2EtbmFtZVwiXHJcbiAgICAgICAgICA+T3JnYW5pemHDp8Ojbzoge3sgZW1wcmVzYU5hbWUgfX08L3NwYW5cclxuICAgICAgICA+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgICAgPlxyXG4gICAgICAgIDwhLS0gTmF2ZWdhw6fDo28gZGUgc2lzdGVtYXMgZSB1c3XDoXJpb3MgLS0+XHJcbiAgICAgICAgPCEtLSBAZm9yICh0b3BBY3Rpb24gb2YgdG9wTWVudUFjdGlvbnMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BBY3Rpb25cIiAvPlxyXG4gICAgICAgICAgICB9IC0tPlxyXG4gICAgICAgIDxrdi10b3AtaWNvbnMgW3RvcEFjdGlvbnNdPVwidG9wTWVudU9wdGlvbnNcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgICAgPlxyXG4gICAgICAgIDwhLS0gTmF2ZWdhw6fDo28gZGUgc2lzdGVtYXMgZSB1c3XDoXJpb3MgLS0+XHJcbiAgICAgICAgPCEtLSBAZm9yICh0b3BBY3Rpb24gb2YgdG9wTWVudUFjdGlvbnMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BBY3Rpb25cIiAvPlxyXG4gICAgICAgICAgICB9IC0tPlxyXG4gICAgICAgIDxrdi10b3AtaWNvbnMgW3RvcEFjdGlvbnNdPVwidG9wTWVudU9wdGlvbnNcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgICAgPlxyXG4gICAgICAgIEBpZiAobWFzdGVyTmFtZSkgeyA8c3BhbiBjbGFzcz1cIm1hc3Rlci1uYW1lXCI+e3sgbWFzdGVyTmFtZSB9fTwvc3Bhbj4gfVxyXG4gICAgICAgIEBpZiAoZW1wcmVzYU5hbWUpIHs8c3BhbiBjbGFzcz1cImVtcHJlc2EtbmFtZVwiPnt7IGVtcHJlc2FOYW1lIH19PC9zcGFuPiB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9IH0gQGVsc2UgeyBAaWYod2lkdGhQYWdlKCkgPiA5OTIpe1xyXG4gICAgICA8IS0tIGRyb3Bkb3duIHBhcmEgc2VsZcOnw6NvIGRlIGVtcHJlc2EvbGljZW5jYSAtLT5cclxuICAgICAgPGRyb3Bkb3duLW1hc3RlclxyXG4gICAgICAgICpuZ0lmPVwic2hvd0xpY2VuY2FzKClcIlxyXG4gICAgICAgIGNsYXNzPVwibWF4LXctMjVyZW0gZmxleC0xXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpZG1hc3RlclwiXHJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgIFttYXN0ZXJzXT1cIm1hc3RlcnNcIlxyXG4gICAgICAgIChvblNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VMaWNlbnNlKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdGlvblZhbHVlKT1cImNoYW5nZUxpY2Vuc2UoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9kcm9wZG93bi1tYXN0ZXI+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gTmF2ZWdhw6fDo28gZGUgc2lzdGVtYXMgZSB1c3XDoXJpb3MgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICA8a3YtdG9wLWljb25zIFt0b3BBY3Rpb25zXT1cInRvcE1lbnVPcHRpb25zXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIEBpZih3aWR0aFBhZ2UoKSA8PSA5OTIpe1xyXG4gICAgPCEtLSBkcm9wZG93biBwYXJhIHNlbGXDp8OjbyBkZSBlbXByZXNhL2xpY2VuY2EgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaC0ycmVtIG14LTNcIj5cclxuICAgICAgPGRyb3Bkb3duLW1hc3RlclxyXG4gICAgICAgICpuZ0lmPVwic2hvd0xpY2VuY2FzKClcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlkbWFzdGVyXCJcclxuICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgW21hc3RlcnNdPVwibWFzdGVyc1wiXHJcbiAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZUxpY2Vuc2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uU2VsZWN0aW9uVmFsdWUpPVwiY2hhbmdlTGljZW5zZSgkZXZlbnQpXCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIENvbnRhaW5lciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW4gZmxleC0xIHAtMCBtLTAgbWItMiBoLWZ1bGxcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwib3ZlcmZsb3cteS1hdXRvIGgtZnVsbCBtYXgtaC1mdWxsIHt7XHJcbiAgICAgICAgICAhc2hvd01lbnUgJiYgJ3NtOm92ZXJmbG93LXktaGlkZGVuJ1xyXG4gICAgICAgIH19IGNhcmQtY29udGFpbmVyXHJcbiAgICAgICAgXHJcbiAgICAgICAge3sgdXNlQ2FyZCA/ICd1c2UtY2FyZCcgOiAnJyB9fVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gUGFpbmVsIGRvIHVzdcOhcmlvIC0tPlxyXG4gIDxwLW92ZXJsYXlQYW5lbFxyXG4gICAgI21ldXNEYWRvc1BhbmVsXHJcbiAgICBbc2hvd1RyYW5zaXRpb25PcHRpb25zXT1cIiczNTBtcyBlYXNlLW91dCdcIlxyXG4gICAgW2hpZGVUcmFuc2l0aW9uT3B0aW9uc109XCInMjUwbXMgZWFzZS1pbidcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInAtMiBmbGV4IGZsZXgtY29sdW1uIGdhcC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTEgdy0xNXJlbVwiPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNlbWlib2xkIHRleHQtbWQgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlLXNwYWNlLW5vd3JhcCB0ZXh0LW92ZXJmbG93LWVsbGlwc2lzXCJcclxuICAgICAgICAgICAgPnt7IHVzZXJOYW1lIH19PC9zcGFuXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQteHMgdGV4dC1ncmF5LTUwMCBvdmVyZmxvdy1oaWRkZW4gd2hpdGUtc3BhY2Utbm93cmFwIHRleHQtb3ZlcmZsb3ctZWxsaXBzaXNcIlxyXG4gICAgICAgICAgICA+e3sgdXNlckVtYWlsIH19PC9zcGFuXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8a3YtYnV0dG9uXHJcbiAgICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgbGFiZWw9XCJHZXJlbmNpYXIgS2VlUGFzc1wiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImFjY2Vzc0tlZVBhc3MoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+PC9rdi1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIEBpZihhY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIDxwLWRpdmlkZXI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgYWN0aW9uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBzaWRlLW1lbnUtaXRlbSBwLTFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5hY3Rpb24oKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+e3sgYWN0aW9uLmljb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBhY3Rpb24ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMiBzaWRlLW1lbnUtaXRlbSBwLTFcIlxyXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIidyZ2JhKDI1MiwgMywgMywgMC42KSdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImxvZ291dCgkZXZlbnQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5leGl0X3RvX2FwcDwvc3Bhbj5cclxuICAgICAgICAgIEBpZihleHBhbmRNZW51KCkpe1xyXG4gICAgICAgICAgPGxhYmVsPlNhaXI8L2xhYmVsPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC1vdmVybGF5UGFuZWw+XHJcbjwvZGl2PlxyXG4iXX0=