@sumaris-net/ngx-components 2.7.1-rc2 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/public_api.mjs +3 -2
- package/esm2022/src/app/core/form/entity/editor.class.mjs +3 -2
- package/esm2022/src/app/core/menu/menu.component.mjs +3 -3
- package/esm2022/src/app/core/services/account.service.mjs +4 -1
- package/esm2022/src/app/core/table/testing/table-validator.service.mjs +3 -2
- package/esm2022/src/app/core/table/testing/table.testing.mjs +63 -60
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
- package/esm2022/src/app/shared/material/boolean/material-boolean.mjs +2 -2
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +6 -20
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +12 -12
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +3 -3
- package/esm2022/src/app/shared/material/duration/duration.module.mjs +7 -12
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +1 -1
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +13 -13
- package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +6 -11
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +12 -12
- package/esm2022/src/app/shared/material/material.config.mjs +2 -0
- package/esm2022/src/app/shared/material/material.module.mjs +3 -3
- package/esm2022/src/app/shared/material/material.testing.module.mjs +8 -8
- package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +3 -3
- package/esm2022/src/environments/environment.loader.mjs +2 -8
- package/fesm2022/sumaris-net.ngx-components.mjs +1541 -1566
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +5 -2
- package/public_api.d.ts +2 -1
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/app/shared/material/datetime/material.datetime.d.ts +4 -4
- package/src/app/shared/material/duration/duration.module.d.ts +1 -1
- package/src/app/shared/material/latlong/material.latlong.d.ts +4 -4
- package/src/app/shared/material/latlong/material.latlong.module.d.ts +1 -1
- package/src/app/shared/material/material.config.d.ts +2 -0
- package/src/assets/manifest.json +1 -1
- package/src/environments/environment.loader.d.ts +0 -2
- package/src/theme/_material.scss +3 -0
- package/src/theme/_ngx-components.table.scss +2 -2
|
@@ -231,11 +231,11 @@ export class MenuComponent {
|
|
|
231
231
|
this.menuService.togglePinned(item);
|
|
232
232
|
}
|
|
233
233
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: MenuComponent, deps: [{ token: i1.PlatformService }, { token: i2.AccountService }, { token: i3.NavController }, { token: i3.MenuController }, { token: i3.ModalController }, { token: i3.AlertController }, { token: i4.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i5.MenuService }, { token: i6.Router }, { token: ENVIRONMENT }, { token: i6.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
234
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: MenuComponent, selector: "app-menu", inputs: { id: "id", menuId: "menuId", side: "side", contentId: "contentId", logo: "logo", appName: "appName", rxStrategy: "rxStrategy", appVersion: "appVersion" }, viewQueries: [{ propertyName: "splitPane", first: true, predicate: ["splitPane"], descendants: true, static: true }], ngImport: i0, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\"\n @fadeInSlowAnimation\n class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo; else noLogo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <ng-template #noLogo>\n <span style=\"width: 108px;\">{{appName}}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\" alt=\"logo\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: item, level: 0}\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '«' : '»'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n\n <!-- divider -->\n <ion-item-divider *ngIf=\"item.divider; else tappable\"\n class=\"{{item.cssClass}} {{item.color}}\"\n @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n </ion-label>\n </ion-item-divider>\n\n <ng-template #tappable>\n\n <!-- link -->\n <ion-item *ngIf=\"item.path && !item.action\"\n @fadeInSlowAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n [class.menu-item-sub]=\"level!==0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/' || level !== 0)}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: {$implicit: item, level: level}\"></ng-container>\n\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"item.action\"\n @fadeInSlowAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n [class.menu-item-sub]=\"level!==0\"\n tappable\n (click)=\"executeAction($event, item)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: {$implicit: item, level: level}\"></ng-container>\n </ion-item>\n </ng-template>\n\n\n\n <!-- children -->\n <div *ngIf=\"item?.$children\" class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children ; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: child, level: level+1}\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n <ion-button *ngIf=\"level && item.pinnable\"\n slot=\"end\"\n shape=\"round\" fill=\"clear\" size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\">\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: ["@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i3.IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i3.IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: i3.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i3.IonSplitPane, selector: "ion-split-pane", inputs: ["contentId", "disabled", "when"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i3.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i8.RxFor, selector: "[rxFor][rxForOf]", inputs: ["rxForOf", "rxForTemplate", "rxForStrategy", "rxForParent", "rxForPatchZone", "rxForTrackBy", "rxForRenderCallback"] }, { kind: "directive", type: i9.RxIf, selector: "[rxIf]", inputs: ["rxIf", "rxIfStrategy", "rxIfElse", "rxIfThen", "rxIfSuspense", "rxIfComplete", "rxIfError", "rxIfContextTrigger", "rxIfNextTrigger", "rxIfSuspenseTrigger", "rxIfErrorTrigger", "rxIfCompleteTrigger", "rxIfParent", "rxIfPatchZone", "rxIfRenderCallback"] }, { kind: "directive", type: i10.RxLet, selector: "[rxLet]", inputs: ["rxLet", "rxLetStrategy", "rxLetComplete", "rxLetError", "rxLetSuspense", "rxLetContextTrigger", "rxLetCompleteTrigger", "rxLetErrorTrigger", "rxLetSuspenseTrigger", "rxLetNextTrigger", "rxLetRenderCallback", "rxLetParent", "rxLetPatchZone"], outputs: ["rendered"] }, { kind: "component", type: i11.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], animations: [fadeInSlowAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
234
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: MenuComponent, selector: "app-menu", inputs: { id: "id", menuId: "menuId", side: "side", contentId: "contentId", logo: "logo", appName: "appName", rxStrategy: "rxStrategy", appVersion: "appVersion" }, viewQueries: [{ propertyName: "splitPane", first: true, predicate: ["splitPane"], descendants: true, static: true }], ngImport: i0, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\"\n @fadeInSlowAnimation\n class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo; else noLogo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <ng-template #noLogo>\n <span style=\"width: 108px;\">{{appName}}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\" alt=\"logo\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: item, level: 0}\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '«' : '»'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n\n <!-- divider -->\n <ion-item-divider *ngIf=\"item.divider; else tappable\"\n class=\"{{item.cssClass}} {{item.color}}\"\n @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label *ngIf=\"item.cssClass !== 'flex-spacer'\">\n <span *rxIf=\"item.$title; let title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n </ion-label>\n </ion-item-divider>\n\n <ng-template #tappable>\n\n <!-- link -->\n <ion-item *ngIf=\"item.path && !item.action\"\n @fadeInSlowAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n [class.menu-item-sub]=\"level!==0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/' || level !== 0)}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: {$implicit: item, level: level}\"></ng-container>\n\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"item.action\"\n @fadeInSlowAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n [class.menu-item-sub]=\"level!==0\"\n tappable\n (click)=\"executeAction($event, item)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: {$implicit: item, level: level}\"></ng-container>\n </ion-item>\n </ng-template>\n\n\n\n <!-- children -->\n <div *ngIf=\"item?.$children\" class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children ; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: child, level: level+1}\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n <ion-button *ngIf=\"level && item.pinnable\"\n slot=\"end\"\n shape=\"round\" fill=\"clear\" size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\">\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: ["@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i3.IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i3.IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: i3.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i3.IonSplitPane, selector: "ion-split-pane", inputs: ["contentId", "disabled", "when"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i3.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i8.RxFor, selector: "[rxFor][rxForOf]", inputs: ["rxForOf", "rxForTemplate", "rxForStrategy", "rxForParent", "rxForPatchZone", "rxForTrackBy", "rxForRenderCallback"] }, { kind: "directive", type: i9.RxIf, selector: "[rxIf]", inputs: ["rxIf", "rxIfStrategy", "rxIfElse", "rxIfThen", "rxIfSuspense", "rxIfComplete", "rxIfError", "rxIfContextTrigger", "rxIfNextTrigger", "rxIfSuspenseTrigger", "rxIfErrorTrigger", "rxIfCompleteTrigger", "rxIfParent", "rxIfPatchZone", "rxIfRenderCallback"] }, { kind: "directive", type: i10.RxLet, selector: "[rxLet]", inputs: ["rxLet", "rxLetStrategy", "rxLetComplete", "rxLetError", "rxLetSuspense", "rxLetContextTrigger", "rxLetCompleteTrigger", "rxLetErrorTrigger", "rxLetSuspenseTrigger", "rxLetNextTrigger", "rxLetRenderCallback", "rxLetParent", "rxLetPatchZone"], outputs: ["rendered"] }, { kind: "component", type: i11.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], animations: [fadeInSlowAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
235
235
|
}
|
|
236
236
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: MenuComponent, decorators: [{
|
|
237
237
|
type: Component,
|
|
238
|
-
args: [{ selector: 'app-menu', animations: [fadeInSlowAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\"\n @fadeInSlowAnimation\n class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo; else noLogo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <ng-template #noLogo>\n <span style=\"width: 108px;\">{{appName}}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\" alt=\"logo\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: item, level: 0}\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '«' : '»'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n\n <!-- divider -->\n <ion-item-divider *ngIf=\"item.divider; else tappable\"\n class=\"{{item.cssClass}} {{item.color}}\"\n @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n </ion-label>\n </ion-item-divider>\n\n <ng-template #tappable>\n\n <!-- link -->\n <ion-item *ngIf=\"item.path && !item.action\"\n @fadeInSlowAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n [class.menu-item-sub]=\"level!==0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/' || level !== 0)}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: {$implicit: item, level: level}\"></ng-container>\n\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"item.action\"\n @fadeInSlowAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n [class.menu-item-sub]=\"level!==0\"\n tappable\n (click)=\"executeAction($event, item)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: {$implicit: item, level: level}\"></ng-container>\n </ion-item>\n </ng-template>\n\n\n\n <!-- children -->\n <div *ngIf=\"item?.$children\" class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children ; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: child, level: level+1}\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n <ion-button *ngIf=\"level && item.pinnable\"\n slot=\"end\"\n shape=\"round\" fill=\"clear\" size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\">\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: ["@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"] }]
|
|
238
|
+
args: [{ selector: 'app-menu', animations: [fadeInSlowAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\"\n @fadeInSlowAnimation\n class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo; else noLogo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <ng-template #noLogo>\n <span style=\"width: 108px;\">{{appName}}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\" alt=\"logo\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: item, level: 0}\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '«' : '»'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n\n <!-- divider -->\n <ion-item-divider *ngIf=\"item.divider; else tappable\"\n class=\"{{item.cssClass}} {{item.color}}\"\n @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label *ngIf=\"item.cssClass !== 'flex-spacer'\">\n <span *rxIf=\"item.$title; let title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n </ion-label>\n </ion-item-divider>\n\n <ng-template #tappable>\n\n <!-- link -->\n <ion-item *ngIf=\"item.path && !item.action\"\n @fadeInSlowAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n [class.menu-item-sub]=\"level!==0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/' || level !== 0)}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: {$implicit: item, level: level}\"></ng-container>\n\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"item.action\"\n @fadeInSlowAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n [class.menu-item-sub]=\"level!==0\"\n tappable\n (click)=\"executeAction($event, item)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else skeletonText\" [innerHTML]=\"title|translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: {$implicit: item, level: level}\"></ng-container>\n </ion-item>\n </ng-template>\n\n\n\n <!-- children -->\n <div *ngIf=\"item?.$children\" class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children ; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: child, level: level+1}\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n <ion-button *ngIf=\"level && item.pinnable\"\n slot=\"end\"\n shape=\"round\" fill=\"clear\" size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\">\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: ["@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"] }]
|
|
239
239
|
}], ctorParameters: () => [{ type: i1.PlatformService }, { type: i2.AccountService }, { type: i3.NavController }, { type: i3.MenuController }, { type: i3.ModalController }, { type: i3.AlertController }, { type: i4.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i5.MenuService }, { type: i6.Router }, { type: i14.Environment, decorators: [{
|
|
240
240
|
type: Inject,
|
|
241
241
|
args: [ENVIRONMENT]
|
|
@@ -261,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImpor
|
|
|
261
261
|
type: ViewChild,
|
|
262
262
|
args: ['splitPane', { static: true }]
|
|
263
263
|
}] } });
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTWxJLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxzQkFBc0IsRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVc5RCxNQUFNLE9BQU8sYUFBYTtJQXNCWjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNxQjtJQUNUO0lBaENmLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDWixNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ2hCLElBQUksR0FBRyxNQUFNLENBQUM7SUFDZCxTQUFTLEdBQUcsY0FBYyxDQUFDO0lBQzNCLElBQUksQ0FBUztJQUNiLE9BQU8sQ0FBUztJQUNoQixVQUFVLEdBQW9CLFFBQVEsQ0FBQztJQUN2QyxVQUFVLENBQVM7SUFFYyxTQUFTLENBQWU7SUFFbEUsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNmLE9BQU8sR0FBRyxLQUFLLENB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LFFBQVE7eUNBaENGLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRW9DLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgSW9uU3BsaXRQYW5lLCBNZW51Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5cbmltcG9ydCB7IGZhZGVJblNsb3dBbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgREVGQVVMVF9NRU5VX1NIT1dfV0hFTiwgTWVudVNlcnZpY2UsIFNwbGl0UGFuZVNob3dXaGVuIH0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgSU1lbnVJdGVtLCBNZW51SXRlbSB9IGZyb20gJy4vbWVudS5tb2RlbCc7XG5pbXBvcnQgeyBmaXJzdE5vdE5pbFByb21pc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBSeFN0cmF0ZWd5TmFtZXMgfSBmcm9tICdAcngtYW5ndWxhci9jZGsvcmVuZGVyLXN0cmF0ZWdpZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW2ZhZGVJblNsb3dBbmltYXRpb25dLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlkID0gJ21lbnUnO1xuICBASW5wdXQoKSBtZW51SWQgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIHNpZGUgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIGNvbnRlbnRJZCA9ICdtZW51LWNvbnRlbnQnO1xuICBASW5wdXQoKSBsb2dvOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcnhTdHJhdGVneTogUnhTdHJhdGVneU5hbWVzID0gJ25vcm1hbCc7XG4gIEBJbnB1dCgpIGFwcFZlcnNpb246IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdzcGxpdFBhbmUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzcGxpdFBhbmU6IElvblNwbGl0UGFuZTtcblxuICBsb2FkaW5nID0gdHJ1ZTtcbiAgaXNMb2dpbiA9IGZhbHNlO1xuICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICBhY2NvdW50QXZhdGFyOiBzdHJpbmc7XG4gIGFjY291bnRFbWFpbDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlYnVnOiBib29sZWFuO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIG1lbnU6IE1lbnVDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSAvLyBNb2RhbCBlZGl0b3IgZ2l2ZSAnbnVsbCdcbiAgKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnUtY29tcG9uZW50XSBDcmVhdGUnKTtcbiAgICB0aGlzLmFwcFZlcnNpb24gPSBlbnZpcm9ubWVudC52ZXJzaW9uO1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNwbGl0UGFuZS53aGVuID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMubWVudVNlcnZpY2Uuc3BsaXRQYW5lV2hlbik7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5tZW51U2VydmljZS5hY2NvdW50Q2hhbmdlcy5zdWJzY3JpYmUoKGFjY291bnQpID0+IHtcbiAgICAgICAgaWYgKGFjY291bnQpIHRoaXMub25Mb2dpbihhY2NvdW50KTtcbiAgICAgICAgZWxzZSB0aGlzLm9uTG9nb3V0KHRydWUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIHRvIG1lbnUgc2VydmljZSBldmVudFxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5tZW51U2VydmljZS5zcGxpdFBhbmVXaGVuLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuc2V0U3BsaXRQYW5lV2hlbih2YWx1ZSkpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMubWVudVNlcnZpY2UuZW5hYmxlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLmVuYWJsZSh2YWx1ZSkpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5tZW51U2VydmljZS5vcGVuZWRcbiAgICAgICAgLy8gQXZvaWQgZHVwbGljYXRlZCBldmVudHNcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+ICh2YWx1ZSA/IHRoaXMub3Blbih7IGVtaXRFdmVudDogZmFsc2UgfSkgOiB0aGlzLmNsb3NlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KSkpXG4gICAgKTtcblxuICAgIC8vIFRPRE8gOiBGaW5kIGEgbW9yZSByZWxpYWJsZSB3YXkgdG8gZG8gdGhpcyA6XG4gICAgLy8gICAgTXVzdCBiZSBkb25uZSBhZnRlciBtZW51U2VydmljZSBzdWJzY3JpcHRpb24gOlxuICAgIC8vICAgIC0gSW4gTWVudVNlcnZpY2UubmdPblN0YXJ0IGFjY291bnRDaGFuZ2VzIGNoYW5nZSB3aWxsIGJlIGVtaXR0ZWQgYmVmb3JlIHRoZSBzZXJ2aWNlIGlzIHJlYWR5XG4gICAgLy8gICAgLSBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2Ugc3ViamVjdERhdGEgYmUgZmlsbGVkIGFmdGVyIGdldCBhY2NvdW50IGNoYW5nZVxuICAgIC8vICAgICAgYW5kIE1lbnVTZXJ2aWNlIGF3YWl0IGZvciBzdWJqZWN0RGF0YSBiZSBmaWxsZWQgdG8gYmUgcmVhZHlcbiAgICBhd2FpdCB0aGlzLm1lbnVTZXJ2aWNlLnJlYWR5KCk7XG4gIH1cblxuICBhc3luYyBvbkxvZ2luKGFjY291bnQ6IEFjY291bnQpIHtcbiAgICBjb25zb2xlLmluZm8oJ1ttZW51XSBVcGRhdGUgKG9uIGxvZ2luKScpO1xuICAgIHRoaXMuYWNjb3VudEF2YXRhciA9IGFjY291bnQuYXZhdGFyO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBhY2NvdW50LmRpc3BsYXlOYW1lO1xuICAgIHRoaXMuYWNjb3VudEVtYWlsID0gYWNjb3VudC5lbWFpbDtcbiAgICB0aGlzLmlzTG9naW4gPSB0cnVlO1xuICAgIHRoaXMubWFya0FzTG9hZGVkKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgb25Mb2dvdXQoc2tpcFJlZGlyZWN0PzogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5pc0xvZ2luKSB7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgcmV0dXJuOyAvLyBTa2lwIGlmIGFscmVhZHkgbG9nb3V0XG4gICAgfVxuXG4gICAgaWYgKCFza2lwUmVkaXJlY3QpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBMb2dvdXQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIFVwZGF0ZSAob24gbG9nb3V0KScpO1xuICAgIH1cbiAgICB0aGlzLmFjY291bnRBdmF0YXIgPSBudWxsO1xuICAgIHRoaXMuYWNjb3VudEVtYWlsID0gbnVsbDtcbiAgICB0aGlzLmFjY291bnROYW1lID0gbnVsbDtcblxuICAgIC8vIFdhaXQgdGhlIGVuZCBvZiBmYWRlb3V0LCB0byByZXNldCB0aGUgYWNjb3VudFxuICAgIGlmICghc2tpcFJlZGlyZWN0KSB7XG4gICAgICBhd2FpdCB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KCcvJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvZ2luID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogSU1lbnVJdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGVuYWJsZSh2YWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVuYWJsZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNFbmFibGVkKHRoaXMubWVudUlkKTtcbiAgICBpZiAoZW5hYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIGF3YWl0IHRoaXMubWVudS5lbmFibGUodmFsdWUsIHRoaXMubWVudUlkKTtcbiAgICAgIGlmICghdmFsdWUpIGF3YWl0IHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvcGVuKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDaGVja2luZyBvcGVuIGV2ZW50Li4uJyk7XG4gICAgY29uc3Qgb3BlbmVkID0gYXdhaXQgdGhpcy5tZW51LmlzT3Blbih0aGlzLm1lbnVJZCk7XG4gICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBPcGVuaW5nIG1lbnUnKTtcbiAgICAgIGF3YWl0IHRoaXMubWVudS5vcGVuKHRoaXMubWVudUlkKTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHNlcnZpY2VcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS5fbWFya0FzT3BlbmVkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgY2xvc2Uob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIGNsb3NlIGV2ZW50Li4uJyk7XG4gICAgY29uc3Qgb3BlbmVkID0gYXdhaXQgdGhpcy5tZW51LmlzT3Blbih0aGlzLm1lbnVJZCk7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENsb3NpbmcgbWVudScpO1xuICAgICAgYXdhaXQgdGhpcy5tZW51LmNsb3NlKHRoaXMubWVudUlkKTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHNlcnZpY2VcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS5fbWFya0FzQ2xvc2VkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2V0U3BsaXRQYW5lV2hlbih2YWx1ZTogU3BsaXRQYW5lU2hvd1doZW4pIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2hlY2tpbmcgc3BsaXRQYW5lIHdoZW4uLi4nKTtcbiAgICBpZiAodGhpcy5zcGxpdFBhbmUud2hlbiAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBTZXQgc3BsaXRQYW5lIHdoZW4gdG8gJyArIHZhbHVlKTtcbiAgICAgIHRoaXMuc3BsaXRQYW5lLndoZW4gPSB2YWx1ZTtcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBQcm9wYWdhdGUgdG8gdGhlIG1lbnUgc2VydmljZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm1lbnVTZXJ2aWNlLnNldFNwbGl0UGFuZVNob3dXaGVuKHZhbHVlKSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTcGxpdFBhbmVTaG93KGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLnNwbGl0UGFuZS53aGVuID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3BsaXRQYW5lV2hlbihERUZBVUxUX01FTlVfU0hPV19XSEVOKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3BsaXRQYW5lV2hlbihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZXhlY3V0ZUFjdGlvbihldmVudDogRXZlbnQsIGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuXG4gICAgLy8gRGVsZWdhdGUgZXhlY3V0aW9uIHRvIHNlcnZpY2VcbiAgICByZXR1cm4gdGhpcy5tZW51U2VydmljZS5leGVjdXRlQWN0aW9uKGV2ZW50LCBpdGVtKTtcbiAgfVxuXG4gIG9uU3dpcGVSaWdodChldmVudCkge1xuICAgIC8vIFNraXAsIGlmIG5vdCBhIHZhbGlkIHN3aXBlIGV2ZW50XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5wb2ludGVyVHlwZSAhPT0gJ3RvdWNoJyB8fCBldmVudC52ZWxvY2l0eSA8IDAuNCkge1xuICAgICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFdpbGwgb3BlbiB0aGUgbGVmdCBtZW51LCBzbyBjYW5jZWxsZWQgdGhpcyBzd2lwZSBldmVudFxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNlbnRlci54IC0gZXZlbnQuZGlzdGFuY2U7XG4gICAgaWYgKHN0YXJ0WCA8PSA1MCkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBDYW5jZWwgc3dpcGUgcmlnaHQsIGJlY2F1c2UgbmVhciB0aGUgbGVmdCBtZW51IHt4OiBcIiArIHN0YXJ0WCArIFwiLCB2ZWxvY2l0eTogXCIgKyBldmVudC52ZWxvY2l0eSArIFwifVwiKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT0s6IGNvbnRpbnVlXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBSZWNlaXZlZCBzd2lwZSByaWdodCB7eDogXCIgKyBzdGFydFggKyBcIiwgdmVsb2NpdHk6IFwiICsgZXZlbnQudmVsb2NpdHkgKyBcIn1cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0FzTG9hZGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgNDUwKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0FzTG9hZGluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMubG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgLy90aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVBpbm5lZChldmVudDogRXZlbnQsIGl0ZW06IElNZW51SXRlbSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5tZW51U2VydmljZS50b2dnbGVQaW5uZWQoaXRlbSk7XG4gIH1cbn1cbiIsIjxpb24tc3BsaXQtcGFuZSAjc3BsaXRQYW5lIFtjb250ZW50SWRdPVwiY29udGVudElkXCIgKHN3aXBlcmlnaHQpPVwib25Td2lwZVJpZ2h0KCRldmVudClcIj5cblxuICA8aW9uLW1lbnUgW2lkXT1cImlkXCIgW21lbnVJZF09XCJtZW51SWRcIiBbY29udGVudElkXT1cImNvbnRlbnRJZFwiPlxuICAgIDxpb24taGVhZGVyPlxuXG4gICAgICA8aW9uLXRvb2xiYXIgKm5nSWY9XCIhbG9hZGluZyAmJiBpc0xvZ2luOyBlbHNlIG5vdExvZ2luXCJcbiAgICAgICAgICAgICAgICAgICBAZmFkZUluU2xvd0FuaW1hdGlvblxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci10b29sYmFyXCI+XG4gICAgICAgIDxpb24tZ3JpZD5cbiAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1hdmF0YXJcIiBbY2xhc3MucHJpbWFyeV09XCIhYWNjb3VudEF2YXRhclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnKyhhY2NvdW50QXZhdGFyfHwnLi9hc3NldHMvaW1nL3BlcnNvbi5wbmcnKSsnKSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2FjY291bnQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImlvbi1jb2xvci1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidNRU5VLkJUTl9NWV9BQ0NPVU5UJ3x0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiOFwiIGNsYXNzPVwidXNlci1sb2dvXCI+XG4gICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJsb2dvOyBlbHNlIG5vTG9nb1wiIHNyYz1cInt7bG9nb319XCIgW3RpdGxlXT1cIidBUFBfTkFNRSd8dHJhbnNsYXRlOiB7YXBwTmFtZTogYXBwTmFtZX1cIiB3aWR0aD1cIjEwOHB4XCIvPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vTG9nbz5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiAxMDhweDtcIj57e2FwcE5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9hY2NvdW50J11cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJpb24tY29sb3ItcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInTUVOVS5CVE5fTVlfQUNDT1VOVCd8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImlvbi10ZXh0LXdyYXAgaW9uLXRleHQtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm5vLW1hcmdpbiB1c2VybmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8Yj57e2FjY291bnROYW1lfX08L2I+XG4gICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgPGg0Pnt7YWNjb3VudEVtYWlsfX08L2g0PlxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICAgICAgPCEtLSBJbnNlcnRpb24gaGVhZGVyQm90dG9tUmlnaHQgLS0+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQm90dG9tUmlnaHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgIDwvaW9uLWdyaWQ+XG5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG5cbiAgICAgIDwhLS0gVXNlciBub3QgbG9nZ2VkIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNub3RMb2dpbj5cbiAgICAgICAgPG1hdC10b29sYmFyIGNsYXNzPVwiaW9uLXBhZGRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogdW5zZXQ7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87IHRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICAgICAgICA8aW1nICpuZ0lmPVwibG9nb1wiIHNyYz1cInt7bG9nb319XCIgW3RpdGxlXT1cIidBUFBfTkFNRSd8dHJhbnNsYXRlOiB7YXBwTmFtZTogYXBwTmFtZX1cIiB3aWR0aD1cIjE1MHB4O1wiIGFsdD1cImxvZ29cIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHhcIj57e2FwcE5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtdG9vbGJhcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9pb24taGVhZGVyPlxuXG4gICAgPGlvbi1jb250ZW50IFtjbGFzcy5oYXMtdXNlci1oZWFkZXJdPVwiaXNMb2dpblwiPlxuICAgICAgPCEtLSB3aWxsIGNsb3NlIHRoZSBtZW51LCBhZnRlciBhIGNsaWNrLCBpbiBtb2JpbGUgLS0+XG4gICAgICA8aW9uLW1lbnUtdG9nZ2xlIGF1dG8taGlkZT1cImZhbHNlXCI+XG4gICAgICAgIDxpb24tbGlzdCBsaW5lcz1cIm5vbmVcIiAqbmdJZj1cIiFsb2FkaW5nXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcnhGb3I9XCJsZXQgaXRlbSBvZiBtZW51U2VydmljZS5kYXRhU3ViamVjdDsgc3RyYXRlZ3k6IHJ4U3RyYXRlZ3k7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVJdGVtOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBsZXZlbDogMH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG5cbiAgICA8aW9uLWZvb3RlciBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgIDxpb24tdG9vbGJhcj5cblxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cIm1lbnVTZXJ2aWNlLm9wZW5BYm91dE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCI+aGVscF9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICAgICAgPGlvbi10aXRsZSAoY2xpY2spPVwibWVudVNlcnZpY2Uub3BlbkFib3V0TW9kYWwoKVwiIGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAge3snTUVOVS5GT09URVJfVkVSU0lPTl9BQk9VVCd8IHRyYW5zbGF0ZToge3ZlcnNpb246IGFwcFZlcnNpb259IH19XG4gICAgICAgIDwvaW9uLXRpdGxlPlxuXG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwidG9nZ2xlU3BsaXRQYW5lU2hvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbWRcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihzcGxpdFBhbmUud2hlbiA/ICdDT01NT04uQlROX0hJREVfTUVOVScgOiAnQ09NTU9OLkJUTl9TSE9XX01FTlUnKSB8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+PHNwYW4+e3tzcGxpdFBhbmUud2hlbiA/ICcmI3hhYjsnIDogJyYjeGJiOyd9fTwvc3Bhbj48L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1mb290ZXI+XG5cbiAgPC9pb24tbWVudT5cblxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbjwvaW9uLXNwbGl0LXBhbmU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyQm90dG9tUmlnaHQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJCb3R0b21SaWdodF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21lbnVJdGVtIGxldC1pdGVtIGxldC1sZXZlbD1cImxldmVsXCI+XG5cbiAgPCEtLSBkaXZpZGVyIC0tPlxuICA8aW9uLWl0ZW0tZGl2aWRlciAqbmdJZj1cIml0ZW0uZGl2aWRlcjsgZWxzZSB0YXBwYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tpdGVtLmNzc0NsYXNzfX0ge3tpdGVtLmNvbG9yfX1cIlxuICAgICAgICAgICAgICAgICAgICBAZmFkZUluU2xvd0FuaW1hdGlvbj5cbiAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0ubWF0SWNvblwiPnt7aXRlbS5tYXRJY29ufX08L21hdC1pY29uPlxuICAgIDxpb24tbGFiZWw+XG4gICAgICA8c3BhbiAqcnhJZj1cIml0ZW0uJHRpdGxlOyBsZXQgdGl0bGU7IGVsc2Ugc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZXx0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgPC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0tZGl2aWRlcj5cblxuICA8bmctdGVtcGxhdGUgI3RhcHBhYmxlPlxuXG4gICAgPCEtLSBsaW5rIC0tPlxuICAgIDxpb24taXRlbSAqbmdJZj1cIml0ZW0ucGF0aCAmJiAhaXRlbS5hY3Rpb25cIlxuICAgICAgICAgICAgICBAZmFkZUluU2xvd0FuaW1hdGlvblxuICAgICAgICAgICAgICBjbGFzcz1cInt7aXRlbS5jc3NDbGFzc319IHt7aXRlbS5jb2xvcn19XCJcbiAgICAgICAgICAgICAgW2NsYXNzLm1lbnUtaXRlbS1zdWJdPVwibGV2ZWwhPT0wXCJcbiAgICAgICAgICAgICAgdGFwcGFibGVcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucGF0aFBhcmFtc1wiXG4gICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OiAoaXRlbS5wYXRoID09PSAnLycgfHwgbGV2ZWwgIT09IDApfVwiPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0ubWF0SWNvblwiPnt7aXRlbS5tYXRJY29ufX08L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbCAqcnhMZXQ9XCJpdGVtLiR0aXRsZTsgbGV0IHRpdGxlXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwidGl0bGU7IGVsc2Ugc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZXx0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgIDwhLS08c3BhbiAqbmdJZj1cIl9kZWJ1Z1wiPiB7e2l0ZW0uaWR9fTwvc3Bhbj4tLT5cbiAgICAgIDwvaW9uLWxhYmVsPlxuXG4gICAgICA8IS0tIHBpbiBidXR0b24gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGluQnV0dG9uOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBsZXZlbDogbGV2ZWx9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8L2lvbi1pdGVtPlxuXG4gICAgPCEtLSBhY3Rpb24gLS0+XG4gICAgPGlvbi1pdGVtICpuZ0lmPVwiaXRlbS5hY3Rpb25cIlxuICAgICAgICAgICAgICBAZmFkZUluU2xvd0FuaW1hdGlvblxuICAgICAgICAgICAgICBjbGFzcz1cInt7aXRlbS5jc3NDbGFzc319IHt7aXRlbS5jb2xvcn19IHRleHQtMXhcIlxuICAgICAgICAgICAgICBbY2xhc3MubWVudS1pdGVtLXN1Yl09XCJsZXZlbCE9PTBcIlxuICAgICAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZUFjdGlvbigkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5tYXRJY29uXCI+e3tpdGVtLm1hdEljb259fTwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsPlxuICAgICAgICA8c3BhbiAqcnhJZj1cIml0ZW0uJHRpdGxlOyBsZXQgdGl0bGU7IGVsc2Ugc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZXx0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgIDwhLS08c3BhbiAqbmdJZj1cIl9kZWJ1Z1wiPiB7e2l0ZW0uaWR9fTwvc3Bhbj4tLT5cbiAgICAgIDwvaW9uLWxhYmVsPlxuXG4gICAgICA8IS0tIHBpbiBidXR0b24gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGluQnV0dG9uOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBsZXZlbDogbGV2ZWx9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9pb24taXRlbT5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuXG5cbiAgPCEtLSBjaGlsZHJlbiAtLT5cbiAgPGRpdiAqbmdJZj1cIml0ZW0/LiRjaGlsZHJlblwiIGNsYXNzPVwic3ViLW1lbnUtY29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqcnhGb3I9XCJsZXQgY2hpbGQgb2YgaXRlbS4kY2hpbGRyZW4gOyBzdHJhdGVneTogcnhTdHJhdGVneTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudUl0ZW07IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNoaWxkLCBsZXZlbDogbGV2ZWwrMX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3BpbkJ1dHRvbiBsZXQtaXRlbSBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICA8IS0tIHBpbiBidXR0b24gLS0+XG4gIDxpb24tYnV0dG9uICpuZ0lmPVwibGV2ZWwgJiYgaXRlbS5waW5uYWJsZVwiXG4gICAgICAgICAgICAgIHNsb3Q9XCJlbmRcIlxuICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kXCIgZmlsbD1cImNsZWFyXCIgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnZpc2libGUtaG92ZXJdPVwiIWl0ZW0ucGlubmVkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBpbm5lZCgkZXZlbnQsIGl0ZW0pXCI+XG4gICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbbmFtZV09XCJpdGVtLnBpbm5lZCA/ICdwaW4nIDogJ3Bpbi1vdXRsaW5lJ1wiPjwvaW9uLWljb24+XG4gIDwvaW9uLWJ1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2tlbGV0b25UZXh0IGxldC13aWR0aCBsZXQtYW5pbWF0ZWQ+XG4gIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIiBbc3R5bGUud2lkdGguJV09XCJ3aWR0aCB8fCA2MFwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTWxJLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxzQkFBc0IsRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVc5RCxNQUFNLE9BQU8sYUFBYTtJQXNCWjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNxQjtJQUNUO0lBaENmLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDWixNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ2hCLElBQUksR0FBRyxNQUFNLENBQUM7SUFDZCxTQUFTLEdBQUcsY0FBYyxDQUFDO0lBQzNCLElBQUksQ0FBUztJQUNiLE9BQU8sQ0FBUztJQUNoQixVQUFVLEdBQW9CLFFBQVEsQ0FBQztJQUN2QyxVQUFVLENBQVM7SUFFYyxTQUFTLENBQWU7SUFFbEUsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNmLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsV0FBVyxDQUFTO0lBQ3BCLGFBQWEsQ0FBUztJQUN0QixZQUFZLENBQVM7SUFFSixNQUFNLENBQVU7SUFDekIsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFM0MsWUFDWSxlQUFnQyxFQUNoQyxjQUE4QixFQUM5QixhQUE0QixFQUM1QixJQUFvQixFQUNwQixTQUEwQixFQUMxQixlQUFnQyxFQUNoQyxTQUEyQixFQUMzQixFQUFxQixFQUNyQixXQUF3QixFQUN4QixNQUFjLEVBQ08sV0FBd0IsRUFDakMsS0FBcUIsQ0FBQywyQkFBMkI7O1FBWDdELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDTyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNqQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUUzQyxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUvRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxPQUFPO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7O2dCQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUNyQiwwQkFBMEI7YUFDekIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDNUIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUN0RyxDQUFDO1FBRUYsK0NBQStDO1FBQy9DLG9EQUFvRDtRQUNwRCxrR0FBa0c7UUFDbEcsK0VBQStFO1FBQy9FLG1FQUFtRTtRQUNuRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBZ0I7UUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBc0I7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLHlCQUF5QjtRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWEsRUFBRSxJQUFlO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFjO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELElBQUksT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsS0FBSztnQkFBRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBOEI7UUFDdkMsT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNyQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVsQyx1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUE4QjtRQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNyQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVuQyx1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQXdCO1FBQzdDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVyQixnQ0FBZ0M7WUFDaEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFhO1FBQy9CLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBQzVDLElBQUksS0FBSztZQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDdkQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFZLEVBQUUsSUFBYztRQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFYixnQ0FBZ0M7UUFDaEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFLO1FBQ2hCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDcEUseUJBQXlCO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9DLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLFFBQVE7WUFDUiwrSEFBK0g7WUFDL0gsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELGVBQWU7UUFFZixRQUFRO1FBQ1IscUdBQXFHO0lBQ3ZHLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBOEI7UUFDbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFFckIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7b0JBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdELENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO0lBRVMsYUFBYSxDQUFDLElBQThCO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFcEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7Z0JBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRVMsYUFBYTtRQUNyQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFUyxZQUFZO1FBQ3BCLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFUyxZQUFZLENBQUMsS0FBWSxFQUFFLElBQWU7UUFDbEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO3VHQXBPVSxhQUFhLDBUQWdDZCxXQUFXOzJGQWhDVixhQUFhLDBVQ3pCMUIsbzRQQThMQSxpdFdEeEtjLENBQUMsbUJBQW1CLENBQUM7OzJGQUd0QixhQUFhO2tCQVB6QixTQUFTOytCQUNFLFVBQVUsY0FHUixDQUFDLG1CQUFtQixDQUFDLG1CQUNoQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFrQzVDLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7eUNBaENGLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRW9DLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgSW9uU3BsaXRQYW5lLCBNZW51Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5cbmltcG9ydCB7IGZhZGVJblNsb3dBbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgREVGQVVMVF9NRU5VX1NIT1dfV0hFTiwgTWVudVNlcnZpY2UsIFNwbGl0UGFuZVNob3dXaGVuIH0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgSU1lbnVJdGVtLCBNZW51SXRlbSB9IGZyb20gJy4vbWVudS5tb2RlbCc7XG5pbXBvcnQgeyBmaXJzdE5vdE5pbFByb21pc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBSeFN0cmF0ZWd5TmFtZXMgfSBmcm9tICdAcngtYW5ndWxhci9jZGsvcmVuZGVyLXN0cmF0ZWdpZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW2ZhZGVJblNsb3dBbmltYXRpb25dLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlkID0gJ21lbnUnO1xuICBASW5wdXQoKSBtZW51SWQgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIHNpZGUgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIGNvbnRlbnRJZCA9ICdtZW51LWNvbnRlbnQnO1xuICBASW5wdXQoKSBsb2dvOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcnhTdHJhdGVneTogUnhTdHJhdGVneU5hbWVzID0gJ25vcm1hbCc7XG4gIEBJbnB1dCgpIGFwcFZlcnNpb246IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdzcGxpdFBhbmUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzcGxpdFBhbmU6IElvblNwbGl0UGFuZTtcblxuICBsb2FkaW5nID0gdHJ1ZTtcbiAgaXNMb2dpbiA9IGZhbHNlO1xuICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICBhY2NvdW50QXZhdGFyOiBzdHJpbmc7XG4gIGFjY291bnRFbWFpbDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlYnVnOiBib29sZWFuO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIG1lbnU6IE1lbnVDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSAvLyBNb2RhbCBlZGl0b3IgZ2l2ZSAnbnVsbCdcbiAgKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnUtY29tcG9uZW50XSBDcmVhdGUnKTtcbiAgICB0aGlzLmFwcFZlcnNpb24gPSBlbnZpcm9ubWVudC52ZXJzaW9uO1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNwbGl0UGFuZS53aGVuID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMubWVudVNlcnZpY2Uuc3BsaXRQYW5lV2hlbik7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5tZW51U2VydmljZS5hY2NvdW50Q2hhbmdlcy5zdWJzY3JpYmUoKGFjY291bnQpID0+IHtcbiAgICAgICAgaWYgKGFjY291bnQpIHRoaXMub25Mb2dpbihhY2NvdW50KTtcbiAgICAgICAgZWxzZSB0aGlzLm9uTG9nb3V0KHRydWUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIHRvIG1lbnUgc2VydmljZSBldmVudFxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5tZW51U2VydmljZS5zcGxpdFBhbmVXaGVuLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuc2V0U3BsaXRQYW5lV2hlbih2YWx1ZSkpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMubWVudVNlcnZpY2UuZW5hYmxlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLmVuYWJsZSh2YWx1ZSkpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5tZW51U2VydmljZS5vcGVuZWRcbiAgICAgICAgLy8gQXZvaWQgZHVwbGljYXRlZCBldmVudHNcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+ICh2YWx1ZSA/IHRoaXMub3Blbih7IGVtaXRFdmVudDogZmFsc2UgfSkgOiB0aGlzLmNsb3NlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KSkpXG4gICAgKTtcblxuICAgIC8vIFRPRE8gOiBGaW5kIGEgbW9yZSByZWxpYWJsZSB3YXkgdG8gZG8gdGhpcyA6XG4gICAgLy8gICAgTXVzdCBiZSBkb25uZSBhZnRlciBtZW51U2VydmljZSBzdWJzY3JpcHRpb24gOlxuICAgIC8vICAgIC0gSW4gTWVudVNlcnZpY2UubmdPblN0YXJ0IGFjY291bnRDaGFuZ2VzIGNoYW5nZSB3aWxsIGJlIGVtaXR0ZWQgYmVmb3JlIHRoZSBzZXJ2aWNlIGlzIHJlYWR5XG4gICAgLy8gICAgLSBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2Ugc3ViamVjdERhdGEgYmUgZmlsbGVkIGFmdGVyIGdldCBhY2NvdW50IGNoYW5nZVxuICAgIC8vICAgICAgYW5kIE1lbnVTZXJ2aWNlIGF3YWl0IGZvciBzdWJqZWN0RGF0YSBiZSBmaWxsZWQgdG8gYmUgcmVhZHlcbiAgICBhd2FpdCB0aGlzLm1lbnVTZXJ2aWNlLnJlYWR5KCk7XG4gIH1cblxuICBhc3luYyBvbkxvZ2luKGFjY291bnQ6IEFjY291bnQpIHtcbiAgICBjb25zb2xlLmluZm8oJ1ttZW51XSBVcGRhdGUgKG9uIGxvZ2luKScpO1xuICAgIHRoaXMuYWNjb3VudEF2YXRhciA9IGFjY291bnQuYXZhdGFyO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBhY2NvdW50LmRpc3BsYXlOYW1lO1xuICAgIHRoaXMuYWNjb3VudEVtYWlsID0gYWNjb3VudC5lbWFpbDtcbiAgICB0aGlzLmlzTG9naW4gPSB0cnVlO1xuICAgIHRoaXMubWFya0FzTG9hZGVkKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgb25Mb2dvdXQoc2tpcFJlZGlyZWN0PzogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5pc0xvZ2luKSB7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgICAgcmV0dXJuOyAvLyBTa2lwIGlmIGFscmVhZHkgbG9nb3V0XG4gICAgfVxuXG4gICAgaWYgKCFza2lwUmVkaXJlY3QpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBMb2dvdXQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIFVwZGF0ZSAob24gbG9nb3V0KScpO1xuICAgIH1cbiAgICB0aGlzLmFjY291bnRBdmF0YXIgPSBudWxsO1xuICAgIHRoaXMuYWNjb3VudEVtYWlsID0gbnVsbDtcbiAgICB0aGlzLmFjY291bnROYW1lID0gbnVsbDtcblxuICAgIC8vIFdhaXQgdGhlIGVuZCBvZiBmYWRlb3V0LCB0byByZXNldCB0aGUgYWNjb3VudFxuICAgIGlmICghc2tpcFJlZGlyZWN0KSB7XG4gICAgICBhd2FpdCB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KCcvJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvZ2luID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogSU1lbnVJdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGVuYWJsZSh2YWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVuYWJsZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNFbmFibGVkKHRoaXMubWVudUlkKTtcbiAgICBpZiAoZW5hYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIGF3YWl0IHRoaXMubWVudS5lbmFibGUodmFsdWUsIHRoaXMubWVudUlkKTtcbiAgICAgIGlmICghdmFsdWUpIGF3YWl0IHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvcGVuKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDaGVja2luZyBvcGVuIGV2ZW50Li4uJyk7XG4gICAgY29uc3Qgb3BlbmVkID0gYXdhaXQgdGhpcy5tZW51LmlzT3Blbih0aGlzLm1lbnVJZCk7XG4gICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBPcGVuaW5nIG1lbnUnKTtcbiAgICAgIGF3YWl0IHRoaXMubWVudS5vcGVuKHRoaXMubWVudUlkKTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHNlcnZpY2VcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS5fbWFya0FzT3BlbmVkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgY2xvc2Uob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIGNsb3NlIGV2ZW50Li4uJyk7XG4gICAgY29uc3Qgb3BlbmVkID0gYXdhaXQgdGhpcy5tZW51LmlzT3Blbih0aGlzLm1lbnVJZCk7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENsb3NpbmcgbWVudScpO1xuICAgICAgYXdhaXQgdGhpcy5tZW51LmNsb3NlKHRoaXMubWVudUlkKTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHNlcnZpY2VcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS5fbWFya0FzQ2xvc2VkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2V0U3BsaXRQYW5lV2hlbih2YWx1ZTogU3BsaXRQYW5lU2hvd1doZW4pIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2hlY2tpbmcgc3BsaXRQYW5lIHdoZW4uLi4nKTtcbiAgICBpZiAodGhpcy5zcGxpdFBhbmUud2hlbiAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBTZXQgc3BsaXRQYW5lIHdoZW4gdG8gJyArIHZhbHVlKTtcbiAgICAgIHRoaXMuc3BsaXRQYW5lLndoZW4gPSB2YWx1ZTtcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBQcm9wYWdhdGUgdG8gdGhlIG1lbnUgc2VydmljZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm1lbnVTZXJ2aWNlLnNldFNwbGl0UGFuZVNob3dXaGVuKHZhbHVlKSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTcGxpdFBhbmVTaG93KGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLnNwbGl0UGFuZS53aGVuID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3BsaXRQYW5lV2hlbihERUZBVUxUX01FTlVfU0hPV19XSEVOKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0U3BsaXRQYW5lV2hlbihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZXhlY3V0ZUFjdGlvbihldmVudDogRXZlbnQsIGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuXG4gICAgLy8gRGVsZWdhdGUgZXhlY3V0aW9uIHRvIHNlcnZpY2VcbiAgICByZXR1cm4gdGhpcy5tZW51U2VydmljZS5leGVjdXRlQWN0aW9uKGV2ZW50LCBpdGVtKTtcbiAgfVxuXG4gIG9uU3dpcGVSaWdodChldmVudCkge1xuICAgIC8vIFNraXAsIGlmIG5vdCBhIHZhbGlkIHN3aXBlIGV2ZW50XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5wb2ludGVyVHlwZSAhPT0gJ3RvdWNoJyB8fCBldmVudC52ZWxvY2l0eSA8IDAuNCkge1xuICAgICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFdpbGwgb3BlbiB0aGUgbGVmdCBtZW51LCBzbyBjYW5jZWxsZWQgdGhpcyBzd2lwZSBldmVudFxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNlbnRlci54IC0gZXZlbnQuZGlzdGFuY2U7XG4gICAgaWYgKHN0YXJ0WCA8PSA1MCkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBDYW5jZWwgc3dpcGUgcmlnaHQsIGJlY2F1c2UgbmVhciB0aGUgbGVmdCBtZW51IHt4OiBcIiArIHN0YXJ0WCArIFwiLCB2ZWxvY2l0eTogXCIgKyBldmVudC52ZWxvY2l0eSArIFwifVwiKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT0s6IGNvbnRpbnVlXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBSZWNlaXZlZCBzd2lwZSByaWdodCB7eDogXCIgKyBzdGFydFggKyBcIiwgdmVsb2NpdHk6IFwiICsgZXZlbnQudmVsb2NpdHkgKyBcIn1cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0FzTG9hZGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgNDUwKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0FzTG9hZGluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMubG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgLy90aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVBpbm5lZChldmVudDogRXZlbnQsIGl0ZW06IElNZW51SXRlbSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5tZW51U2VydmljZS50b2dnbGVQaW5uZWQoaXRlbSk7XG4gIH1cbn1cbiIsIjxpb24tc3BsaXQtcGFuZSAjc3BsaXRQYW5lIFtjb250ZW50SWRdPVwiY29udGVudElkXCIgKHN3aXBlcmlnaHQpPVwib25Td2lwZVJpZ2h0KCRldmVudClcIj5cblxuICA8aW9uLW1lbnUgW2lkXT1cImlkXCIgW21lbnVJZF09XCJtZW51SWRcIiBbY29udGVudElkXT1cImNvbnRlbnRJZFwiPlxuICAgIDxpb24taGVhZGVyPlxuXG4gICAgICA8aW9uLXRvb2xiYXIgKm5nSWY9XCIhbG9hZGluZyAmJiBpc0xvZ2luOyBlbHNlIG5vdExvZ2luXCJcbiAgICAgICAgICAgICAgICAgICBAZmFkZUluU2xvd0FuaW1hdGlvblxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci10b29sYmFyXCI+XG4gICAgICAgIDxpb24tZ3JpZD5cbiAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1hdmF0YXJcIiBbY2xhc3MucHJpbWFyeV09XCIhYWNjb3VudEF2YXRhclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnKyhhY2NvdW50QXZhdGFyfHwnLi9hc3NldHMvaW1nL3BlcnNvbi5wbmcnKSsnKSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2FjY291bnQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImlvbi1jb2xvci1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidNRU5VLkJUTl9NWV9BQ0NPVU5UJ3x0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiOFwiIGNsYXNzPVwidXNlci1sb2dvXCI+XG4gICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJsb2dvOyBlbHNlIG5vTG9nb1wiIHNyYz1cInt7bG9nb319XCIgW3RpdGxlXT1cIidBUFBfTkFNRSd8dHJhbnNsYXRlOiB7YXBwTmFtZTogYXBwTmFtZX1cIiB3aWR0aD1cIjEwOHB4XCIvPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vTG9nbz5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiAxMDhweDtcIj57e2FwcE5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9hY2NvdW50J11cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJpb24tY29sb3ItcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInTUVOVS5CVE5fTVlfQUNDT1VOVCd8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImlvbi10ZXh0LXdyYXAgaW9uLXRleHQtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm5vLW1hcmdpbiB1c2VybmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8Yj57e2FjY291bnROYW1lfX08L2I+XG4gICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgPGg0Pnt7YWNjb3VudEVtYWlsfX08L2g0PlxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICAgICAgPCEtLSBJbnNlcnRpb24gaGVhZGVyQm90dG9tUmlnaHQgLS0+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQm90dG9tUmlnaHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgIDwvaW9uLWdyaWQ+XG5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG5cbiAgICAgIDwhLS0gVXNlciBub3QgbG9nZ2VkIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNub3RMb2dpbj5cbiAgICAgICAgPG1hdC10b29sYmFyIGNsYXNzPVwiaW9uLXBhZGRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogdW5zZXQ7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87IHRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICAgICAgICA8aW1nICpuZ0lmPVwibG9nb1wiIHNyYz1cInt7bG9nb319XCIgW3RpdGxlXT1cIidBUFBfTkFNRSd8dHJhbnNsYXRlOiB7YXBwTmFtZTogYXBwTmFtZX1cIiB3aWR0aD1cIjE1MHB4O1wiIGFsdD1cImxvZ29cIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHhcIj57e2FwcE5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtdG9vbGJhcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9pb24taGVhZGVyPlxuXG4gICAgPGlvbi1jb250ZW50IFtjbGFzcy5oYXMtdXNlci1oZWFkZXJdPVwiaXNMb2dpblwiPlxuICAgICAgPCEtLSB3aWxsIGNsb3NlIHRoZSBtZW51LCBhZnRlciBhIGNsaWNrLCBpbiBtb2JpbGUgLS0+XG4gICAgICA8aW9uLW1lbnUtdG9nZ2xlIGF1dG8taGlkZT1cImZhbHNlXCI+XG4gICAgICAgIDxpb24tbGlzdCBsaW5lcz1cIm5vbmVcIiAqbmdJZj1cIiFsb2FkaW5nXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqcnhGb3I9XCJsZXQgaXRlbSBvZiBtZW51U2VydmljZS5kYXRhU3ViamVjdDsgc3RyYXRlZ3k6IHJ4U3RyYXRlZ3k7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVJdGVtOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBsZXZlbDogMH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG5cbiAgICA8aW9uLWZvb3RlciBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgIDxpb24tdG9vbGJhcj5cblxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cIm1lbnVTZXJ2aWNlLm9wZW5BYm91dE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCI+aGVscF9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICAgICAgPGlvbi10aXRsZSAoY2xpY2spPVwibWVudVNlcnZpY2Uub3BlbkFib3V0TW9kYWwoKVwiIGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAge3snTUVOVS5GT09URVJfVkVSU0lPTl9BQk9VVCd8IHRyYW5zbGF0ZToge3ZlcnNpb246IGFwcFZlcnNpb259IH19XG4gICAgICAgIDwvaW9uLXRpdGxlPlxuXG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwidG9nZ2xlU3BsaXRQYW5lU2hvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbWRcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihzcGxpdFBhbmUud2hlbiA/ICdDT01NT04uQlROX0hJREVfTUVOVScgOiAnQ09NTU9OLkJUTl9TSE9XX01FTlUnKSB8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+PHNwYW4+e3tzcGxpdFBhbmUud2hlbiA/ICcmI3hhYjsnIDogJyYjeGJiOyd9fTwvc3Bhbj48L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1mb290ZXI+XG5cbiAgPC9pb24tbWVudT5cblxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbjwvaW9uLXNwbGl0LXBhbmU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyQm90dG9tUmlnaHQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJCb3R0b21SaWdodF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21lbnVJdGVtIGxldC1pdGVtIGxldC1sZXZlbD1cImxldmVsXCI+XG5cbiAgPCEtLSBkaXZpZGVyIC0tPlxuICA8aW9uLWl0ZW0tZGl2aWRlciAqbmdJZj1cIml0ZW0uZGl2aWRlcjsgZWxzZSB0YXBwYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tpdGVtLmNzc0NsYXNzfX0ge3tpdGVtLmNvbG9yfX1cIlxuICAgICAgICAgICAgICAgICAgICBAZmFkZUluU2xvd0FuaW1hdGlvbj5cbiAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0ubWF0SWNvblwiPnt7aXRlbS5tYXRJY29ufX08L21hdC1pY29uPlxuICAgIDxpb24tbGFiZWwgKm5nSWY9XCJpdGVtLmNzc0NsYXNzICE9PSAnZmxleC1zcGFjZXInXCI+XG4gICAgICA8c3BhbiAqcnhJZj1cIml0ZW0uJHRpdGxlOyBsZXQgdGl0bGU7IGVsc2Ugc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZXx0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgPC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0tZGl2aWRlcj5cblxuICA8bmctdGVtcGxhdGUgI3RhcHBhYmxlPlxuXG4gICAgPCEtLSBsaW5rIC0tPlxuICAgIDxpb24taXRlbSAqbmdJZj1cIml0ZW0ucGF0aCAmJiAhaXRlbS5hY3Rpb25cIlxuICAgICAgICAgICAgICBAZmFkZUluU2xvd0FuaW1hdGlvblxuICAgICAgICAgICAgICBjbGFzcz1cInt7aXRlbS5jc3NDbGFzc319IHt7aXRlbS5jb2xvcn19XCJcbiAgICAgICAgICAgICAgW2NsYXNzLm1lbnUtaXRlbS1zdWJdPVwibGV2ZWwhPT0wXCJcbiAgICAgICAgICAgICAgdGFwcGFibGVcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucGF0aFBhcmFtc1wiXG4gICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OiAoaXRlbS5wYXRoID09PSAnLycgfHwgbGV2ZWwgIT09IDApfVwiPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0ubWF0SWNvblwiPnt7aXRlbS5tYXRJY29ufX08L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbCAqcnhMZXQ9XCJpdGVtLiR0aXRsZTsgbGV0IHRpdGxlXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwidGl0bGU7IGVsc2Ugc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZXx0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgIDwhLS08c3BhbiAqbmdJZj1cIl9kZWJ1Z1wiPiB7e2l0ZW0uaWR9fTwvc3Bhbj4tLT5cbiAgICAgIDwvaW9uLWxhYmVsPlxuXG4gICAgICA8IS0tIHBpbiBidXR0b24gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGluQnV0dG9uOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBsZXZlbDogbGV2ZWx9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8L2lvbi1pdGVtPlxuXG4gICAgPCEtLSBhY3Rpb24gLS0+XG4gICAgPGlvbi1pdGVtICpuZ0lmPVwiaXRlbS5hY3Rpb25cIlxuICAgICAgICAgICAgICBAZmFkZUluU2xvd0FuaW1hdGlvblxuICAgICAgICAgICAgICBjbGFzcz1cInt7aXRlbS5jc3NDbGFzc319IHt7aXRlbS5jb2xvcn19IHRleHQtMXhcIlxuICAgICAgICAgICAgICBbY2xhc3MubWVudS1pdGVtLXN1Yl09XCJsZXZlbCE9PTBcIlxuICAgICAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZUFjdGlvbigkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5tYXRJY29uXCI+e3tpdGVtLm1hdEljb259fTwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsPlxuICAgICAgICA8c3BhbiAqcnhJZj1cIml0ZW0uJHRpdGxlOyBsZXQgdGl0bGU7IGVsc2Ugc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZXx0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgIDwhLS08c3BhbiAqbmdJZj1cIl9kZWJ1Z1wiPiB7e2l0ZW0uaWR9fTwvc3Bhbj4tLT5cbiAgICAgIDwvaW9uLWxhYmVsPlxuXG4gICAgICA8IS0tIHBpbiBidXR0b24gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGluQnV0dG9uOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBsZXZlbDogbGV2ZWx9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9pb24taXRlbT5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuXG5cbiAgPCEtLSBjaGlsZHJlbiAtLT5cbiAgPGRpdiAqbmdJZj1cIml0ZW0/LiRjaGlsZHJlblwiIGNsYXNzPVwic3ViLW1lbnUtY29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqcnhGb3I9XCJsZXQgY2hpbGQgb2YgaXRlbS4kY2hpbGRyZW4gOyBzdHJhdGVneTogcnhTdHJhdGVneTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudUl0ZW07IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNoaWxkLCBsZXZlbDogbGV2ZWwrMX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3BpbkJ1dHRvbiBsZXQtaXRlbSBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICA8IS0tIHBpbiBidXR0b24gLS0+XG4gIDxpb24tYnV0dG9uICpuZ0lmPVwibGV2ZWwgJiYgaXRlbS5waW5uYWJsZVwiXG4gICAgICAgICAgICAgIHNsb3Q9XCJlbmRcIlxuICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kXCIgZmlsbD1cImNsZWFyXCIgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnZpc2libGUtaG92ZXJdPVwiIWl0ZW0ucGlubmVkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBpbm5lZCgkZXZlbnQsIGl0ZW0pXCI+XG4gICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbbmFtZV09XCJpdGVtLnBpbm5lZCA/ICdwaW4nIDogJ3Bpbi1vdXRsaW5lJ1wiPjwvaW9uLWljb24+XG4gIDwvaW9uLWJ1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2tlbGV0b25UZXh0IGxldC13aWR0aCBsZXQtYW5pbWF0ZWQ+XG4gIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIiBbc3R5bGUud2lkdGguJV09XCJ3aWR0aCB8fCA2MFwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|