@indice/ng-components 0.2.145-beta → 0.2.145

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.
Files changed (71) hide show
  1. package/README.md +4 -4
  2. package/_styles.css +3493 -3501
  3. package/bundles/indice-ng-components.umd.js +341 -242
  4. package/bundles/indice-ng-components.umd.js.map +1 -1
  5. package/esm2015/lib/controls/avatar-initials/avatar-initials.component.js +4 -4
  6. package/esm2015/lib/controls/collapsible-panel/collapsible-panel.component.js +4 -4
  7. package/esm2015/lib/controls/date-picker/date-picker.component.js +5 -5
  8. package/esm2015/lib/controls/drop-down-menu/drop-down-menu.component.js +4 -4
  9. package/esm2015/lib/controls/kpi-tile/kpi-tile.component.js +4 -4
  10. package/esm2015/lib/controls/list-view/list-column.component.js +4 -4
  11. package/esm2015/lib/controls/list-view/list-details-section.component.js +4 -4
  12. package/esm2015/lib/controls/list-view/list-tile.component.js +4 -4
  13. package/esm2015/lib/controls/list-view/list-view-empty-state.component.js +4 -4
  14. package/esm2015/lib/controls/list-view/list-view.component.js +4 -4
  15. package/esm2015/lib/controls/nav-links-list/nav-links-list.component.js +40 -0
  16. package/esm2015/lib/controls/notifications-indicator/notifications-indicator.component.js +80 -0
  17. package/esm2015/lib/controls/pager/pager.component.js +4 -4
  18. package/esm2015/lib/controls/side-pane/side-pane.component.js +4 -4
  19. package/esm2015/lib/controls/skeleton-loader/skeleton-loader.component.js +4 -4
  20. package/esm2015/lib/controls/toaster/toaster-container.component.js +4 -4
  21. package/esm2015/lib/controls/toaster/toaster.component.js +4 -4
  22. package/esm2015/lib/controls/toggle/toggle.component.js +5 -5
  23. package/esm2015/lib/directives/click-outside.directive.js +4 -4
  24. package/esm2015/lib/directives/dynamic-component-host.directive.js +4 -4
  25. package/esm2015/lib/helpers/base-list.component.js +4 -4
  26. package/esm2015/lib/icons.js +1 -1
  27. package/esm2015/lib/layouts/shell/shell-footer/shell-footer.component.js +4 -4
  28. package/esm2015/lib/layouts/shell/shell-header/shell-header.component.js +71 -77
  29. package/esm2015/lib/layouts/shell/shell-layout/shell-layout.component.js +12 -7
  30. package/esm2015/lib/layouts/views/form-layout/form-layout.component.js +8 -9
  31. package/esm2015/lib/layouts/views/model-view-layout/model-view-layout.component.js +4 -6
  32. package/esm2015/lib/layouts/views/side-view-layout/side-view-layout.component.js +4 -4
  33. package/esm2015/lib/layouts/views/view-layout/view-layout.component.js +4 -4
  34. package/esm2015/lib/ng-components.module.js +11 -10
  35. package/esm2015/lib/pages/auth/auth-callback/auth-callback.component.js +4 -4
  36. package/esm2015/lib/pages/auth/auth-renew/auth-renew.component.js +4 -4
  37. package/esm2015/lib/pages/auth/logged-out/logged-out.component.js +4 -4
  38. package/esm2015/lib/pages/http-status/error/error.component.js +4 -4
  39. package/esm2015/lib/pages/http-status/page-not-found/page-not-found.component.js +4 -4
  40. package/esm2015/lib/pages/http-status/unauthorized/unauthorized.component.js +4 -4
  41. package/esm2015/lib/pipes/address.pipe.js +4 -4
  42. package/esm2015/lib/pipes/duration-format.pipe.js +4 -4
  43. package/esm2015/lib/services/component-loader/component-loader-options.class.js +1 -1
  44. package/esm2015/lib/services/component-loader/component-loader.class.js +1 -1
  45. package/esm2015/lib/services/component-loader/component-loader.factory.js +4 -4
  46. package/esm2015/lib/services/component-loader/content-ref.class.js +1 -1
  47. package/esm2015/lib/services/modal-service/modal-backdrop-component.js +4 -4
  48. package/esm2015/lib/services/modal-service/modal-container-component.js +15 -15
  49. package/esm2015/lib/services/modal-service/modal-options.class.js +4 -4
  50. package/esm2015/lib/services/modal-service/modal-service.js +4 -4
  51. package/esm2015/lib/services/modal-service/modal-styles.class.js +1 -1
  52. package/esm2015/lib/services/modal-service/modal.class.js +4 -4
  53. package/esm2015/lib/services/toaster.service.js +4 -4
  54. package/esm2015/lib/tokens.js +2 -1
  55. package/esm2015/lib/types.js +10 -7
  56. package/esm2015/public-api.js +2 -2
  57. package/fesm2015/indice-ng-components.js +333 -248
  58. package/fesm2015/indice-ng-components.js.map +1 -1
  59. package/lib/controls/nav-links-list/nav-links-list.component.d.ts +15 -0
  60. package/lib/controls/notifications-indicator/notifications-indicator.component.d.ts +23 -0
  61. package/lib/layouts/shell/shell-header/shell-header.component.d.ts +21 -26
  62. package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +3 -2
  63. package/lib/layouts/views/form-layout/form-layout.component.d.ts +2 -3
  64. package/lib/ng-components.module.d.ts +10 -6
  65. package/lib/tokens.d.ts +1 -0
  66. package/lib/types.d.ts +28 -10
  67. package/modal.css +157 -157
  68. package/package.json +6 -6
  69. package/public-api.d.ts +1 -1
  70. package/esm2015/lib/pipes/obs-with-status.pipe.js +0 -26
  71. package/lib/pipes/obs-with-status.pipe.d.ts +0 -13
@@ -1,146 +1,140 @@
1
- import { Component, Inject, Input } from '@angular/core';
2
- import { NavigationStart, Router } from '@angular/router';
3
- import { filter, take } from 'rxjs/operators';
4
- import { APP_LINKS } from '../../../tokens';
5
- import { Observable, of } from 'rxjs';
6
1
  import { AuthService } from '@indice/ng-auth';
2
+ import { Component, Inject, Input } from '@angular/core';
3
+ import { ActivatedRoute, NavigationStart, Router } from '@angular/router';
4
+ import { filter, share } from 'rxjs/operators';
5
+ import { APP_LINKS, SHELL_CONFIG } from '../../../tokens';
6
+ import { of } from 'rxjs';
7
7
  import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/router";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "../../../directives/click-outside.directive";
11
- import * as i4 from "@indice/ng-auth";
8
+ import * as i1 from "../../../controls/nav-links-list/nav-links-list.component";
9
+ import * as i2 from "../../../controls/notifications-indicator/notifications-indicator.component";
10
+ import * as i3 from "@angular/router";
11
+ import * as i4 from "@angular/common";
12
+ import * as i5 from "../../../directives/click-outside.directive";
13
+ import * as i6 from "@indice/ng-auth";
12
14
  export class ShellHeaderComponent {
13
- constructor(authService, router, links) {
15
+ constructor(authService, router, route, config, links) {
14
16
  this.authService = authService;
15
17
  this.router = router;
18
+ this.route = route;
19
+ this.config = config;
16
20
  this.links = links;
17
21
  // tslint:disable-next-line:no-input-rename
18
22
  this.sectionLinksPath = 'main';
19
- this.notificationLinksPath = 'notifications';
20
- this.allNotificationsLinkPath = 'allNotifications';
21
- this.border = true;
22
- this.showNotifications = false;
23
- this.showUserNameOnHeader = false;
24
- this.notificationsMenuVisible = true;
23
+ // tslint:disable-next-line:no-input-rename
25
24
  this.profileMenuVisible = true;
25
+ // tslint:disable-next-line:no-input-rename
26
+ this.showUserNameOnHeader = false;
27
+ // tslint:disable-next-line:no-input-rename
28
+ this.showAlerts = false;
29
+ this.border = true;
26
30
  this.sectionLinks = of([]);
27
- this.notificationLinks = of([]);
28
- this.allNotificationsLink = of();
29
31
  this.mobileMenuExpanded = false;
30
32
  this.userMenuExpanded = false;
31
- this.notificationsMenuExpanded = false;
32
- this.routeSubject = new Observable();
33
33
  this.routerSub$ = null;
34
34
  this.userSub$ = null;
35
35
  this.statusSub$ = null;
36
36
  this.user = null;
37
37
  this.avatarName = null;
38
- this.notificationsCount = 0;
39
- }
40
- ngOnDestroy() {
41
- if (this.routerSub$) {
42
- this.routerSub$.unsubscribe();
43
- }
44
- // TODO: check authenticated user here before we start polling server status
45
- if (this.statusSub$) {
46
- this.statusSub$.unsubscribe();
47
- }
48
- if (this.userSub$) {
49
- this.userSub$.unsubscribe();
50
- }
38
+ this.activeFragment = null;
39
+ this.routeSubject = this.router.events.pipe(filter((event) => event instanceof NavigationStart));
51
40
  }
52
41
  ngOnInit() {
53
- var _a, _b;
54
- this.showNotifications = (_a = this.config) === null || _a === void 0 ? void 0 : _a.showNotifications;
55
- this.showUserNameOnHeader = (_b = this.config) === null || _b === void 0 ? void 0 : _b.showUserNameOnHeader;
42
+ this.activeFragment = this.route.fragment.pipe(share());
56
43
  this.sectionLinks = this.links[this.sectionLinksPath];
57
- this.allNotificationsLink = this.links[this.allNotificationsLinkPath];
58
- this.notificationLinks = this.links[this.notificationLinksPath];
59
- this.getNotificationsCount();
60
- this.routerSub$ = this.router.events.pipe(filter(event => event instanceof NavigationStart)).subscribe(event => {
44
+ this.routerSub$ = this.routeSubject.subscribe((event) => {
61
45
  this.mobileMenuExpanded = false;
62
46
  this.userMenuExpanded = false;
63
- this.notificationsMenuExpanded = false;
64
47
  });
65
48
  this.authService.loadUser().subscribe((user) => {
66
- console.log(user);
67
49
  this.setCurrentUser(user);
68
50
  }, error => {
69
- console.log(error);
51
+ console.error(error);
70
52
  });
71
53
  // Detect user changes and display / or not user info accordingly...
72
54
  this.userSub$ = this.authService.user$.subscribe((user) => {
73
55
  // console.log('ShellHeaderComponent user subscription');
74
56
  this.setCurrentUser(user);
75
57
  });
58
+ // set current lang if no current value from langs if any
59
+ if (!this.currentLang && this.langs && this.langs.length > 0) {
60
+ this.setCurrentLang(this.langs[0]);
61
+ }
76
62
  }
77
- setCurrentUser(user) {
78
- var _a, _b;
79
- this.user = user;
80
- if (this.user && this.user.profile) {
81
- this.avatarName = `${(_a = this.user.profile.given_name) === null || _a === void 0 ? void 0 : _a.charAt(0)}${(_b = this.user.profile.family_name) === null || _b === void 0 ? void 0 : _b.charAt(0)}`;
82
- console.log('load user', this.avatarName);
63
+ ngOnDestroy() {
64
+ if (this.routerSub$) {
65
+ this.routerSub$.unsubscribe();
66
+ }
67
+ // TODO: check authenticated user here before we start polling server status
68
+ if (this.statusSub$) {
69
+ this.statusSub$.unsubscribe();
70
+ }
71
+ if (this.userSub$) {
72
+ this.userSub$.unsubscribe();
83
73
  }
84
74
  }
85
75
  // tslint:disable-next-line:typedef
86
- onClickOutsideProfile($event) {
76
+ onClickOutside($event) {
87
77
  this.userMenuExpanded = false;
88
78
  }
89
- // tslint:disable-next-line:typedef
90
- onClickOutsideNotifications($event) {
91
- this.notificationsMenuExpanded = false;
92
- }
93
79
  signin(event) {
94
80
  if (event) {
95
81
  event.preventDefault();
96
82
  }
97
83
  this.authService.signinRedirect();
98
84
  }
99
- expandUserMenu() {
100
- this.userMenuExpanded = !this.userMenuExpanded;
101
- this.notificationsMenuExpanded = false;
85
+ setCurrentUser(user) {
86
+ var _a, _b;
87
+ this.user = user;
88
+ if (this.user && this.user.profile) {
89
+ this.avatarName = `${(_a = this.user.profile.given_name) === null || _a === void 0 ? void 0 : _a.charAt(0)}${(_b = this.user.profile.family_name) === null || _b === void 0 ? void 0 : _b.charAt(0)}`.toUpperCase();
90
+ }
102
91
  }
103
- expandNotificationsMenu() {
104
- this.notificationsMenuExpanded = !this.notificationsMenuExpanded;
105
- this.userMenuExpanded = false;
106
- this.getNotificationsCount();
107
- }
108
- getNotificationsCount() {
109
- this.notificationLinks.pipe(take(1)).subscribe(notifications => {
110
- this.notificationsCount = notifications.filter(x => !x.isRead).length;
111
- });
92
+ setCurrentLang(lang) {
93
+ this.currentLang = lang;
112
94
  }
113
95
  }
114
- ShellHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellHeaderComponent, deps: [{ token: AuthService }, { token: Router }, { token: APP_LINKS }], target: i0.ɵɵFactoryTarget.Component });
115
- ShellHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ShellHeaderComponent, selector: "lib-shell-header", inputs: { sectionLinksPath: ["section-links", "sectionLinksPath"], notificationLinksPath: ["notification-links", "notificationLinksPath"], allNotificationsLinkPath: ["all-notifications", "allNotificationsLinkPath"], config: "config", border: "border" }, ngImport: i0, template: "<nav>\r\n <div class=\"shell-header-paddings\">\r\n <div [class]=\"border ? 'shell-header-border' : ''\">\r\n <div class=\"shell-header-menu-container\">\r\n <div class=\"shell-header-links-no-grow-container\">\r\n <div>\r\n <a href=\"#\" [routerLink]=\"['/']\"><img class=\"app-logo\" [src]=\"config.appLogo\" [alt]=\"config.appLogoAlt\" /></a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"shell-header-link-container\">\r\n <ng-container *ngFor=\"let link of sectionLinks | async\">\r\n <a\r\n href=\"#\"\r\n (click)=\"getNotificationsCount()\"\r\n [routerLink]=\"[link.path]\"\r\n [attr.target]=\"link.external ? '_blank' : '_self'\"\r\n [routerLinkActive]=\"['nav-link-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link\"\r\n >\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"shell-header-md-visible\">\r\n <div class=\"shell-header-links-no-grow-container\">\r\n <ng-container *ngFor=\"let link of links.profileActions | async\">\r\n <a\r\n class=\"shell-header-menu-rounded-button\"\r\n (clickOutside)=\"onClickOutsideProfile($event)\"\r\n [attr.href]=\"link.path\"\r\n [attr.target]=\"link.external ? '_blank' : '_self'\"\r\n >\r\n <span class=\"sr-only\">{{ link.text }}</span>\r\n <i *ngIf=\"link.icon\" [class]=\"link.icon\"></i>\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Profile dropdown -->\r\n <div class=\"ml-2 relative\" (clickOutside)=\"onClickOutsideProfile($event)\" *ngIf=\"profileMenuVisible\">\r\n <div [ngClass]=\"{ 'shell-header-profile': showUserNameOnHeader }\">\r\n <div *ngIf=\"user && showUserNameOnHeader\" class=\"shell-header-profile-userName\">\r\n {{ user.profile.name }}\r\n </div>\r\n <button\r\n type=\"button\"\r\n *ngIf=\"user\"\r\n (click)=\"userMenuExpanded = !userMenuExpanded\"\r\n class=\"shell-header-profile-dropdown-button\"\r\n id=\"user-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\"\r\n >\r\n <span class=\"sr-only\">Open user menu</span>\r\n <span class=\"avatar-container\">\r\n <span class=\"avatar-text\">{{ this.avatarName }}</span>\r\n </span>\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n *ngIf=\"!user\"\r\n (click)=\"signin(null)\"\r\n class=\"shell-header-profile-dropdown-button\"\r\n id=\"user-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\"\r\n >\r\n <span class=\"sr-only\">sign in</span>\r\n <span class=\"avatar-container\">\r\n <span class=\"avatar-text\"><i class=\"ms-Icon ms-Icon--Signin\"></i></span>\r\n </span>\r\n </button>\r\n\r\n <div\r\n *ngIf=\"userMenuExpanded\"\r\n [ngClass]=\"showUserNameOnHeader ? 'shell-header-profile-dropdown-with-username' : 'shell-header-profile-dropdown'\"\r\n role=\"menu\"\r\n aria-orientation=\"vertical\"\r\n aria-labelledby=\"user-menu\"\r\n >\r\n <!-- <a href=\"#\" class=\"block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100\" role=\"menuitem\">\u0391\u03C0\u03BF\u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7</a> -->\r\n <ng-container *ngFor=\"let link of links.profile | async\">\r\n <!-- <a *ngIf=\"link.external\" [attr.href]=\"link.path\" [attr.target]=\"'_blank'\" class=\"nav-link-profile\">\r\n {{ link.text }}\r\n </a> -->\r\n <a\r\n [routerLink]=\"link.path\"\r\n [routerLinkActive]=\"['nav-link-profile-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link-profile\"\r\n >\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Notifications dropdown -->\r\n <div class=\"ml-2 relative\" (clickOutside)=\"onClickOutsideNotifications($event)\" *ngIf=\"notificationsMenuVisible\">\r\n <!-- Notifications Button -->\r\n <button\r\n type=\"button\"\r\n class=\"mobile-menu-rounded-button bg-transparent\"\r\n *ngIf=\"showNotifications\"\r\n (click)=\"expandNotificationsMenu()\"\r\n id=\"notifications-menu\"\r\n aria-expanded=\"false\"\r\n aria-haspopup=\"true\"\r\n >\r\n <span class=\"sr-only\">View notifications</span>\r\n <span class=\"relative inline-block\">\r\n <!-- Heroicon name: outline/bell -->\r\n <svg\r\n class=\"mobile-menu-rounded-button-icon-style\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\r\n />\r\n </svg>\r\n <span\r\n *ngIf=\"notificationsCount > 0\"\r\n class=\"absolute top-0 right-0 inline-flex items-center justify-center px-2 py-1 text-xs font-bold leading-none text-gray-100 transform translate-x-1/2 -translate-y-1/2 bg-gray-500 rounded-full\"\r\n >{{ notificationsCount }}</span\r\n >\r\n </span>\r\n </button>\r\n\r\n <div\r\n *ngIf=\"notificationsMenuExpanded\"\r\n [ngClass]=\"\r\n showUserNameOnHeader ? 'shell-header-notifications-dropdown-with-username' : 'shell-header-notifications-dropdown'\r\n \"\r\n role=\"menu\"\r\n aria-orientation=\"vertical\"\r\n aria-labelledby=\"notifications-menu\"\r\n >\r\n <div class=\"max-h-64 overflow-y-auto notification-messages min-h\">\r\n <ng-container *ngIf=\"!notificationLinks; else notificationsDropDown\" class=\"py-5\">\r\n <div class=\"nav-link-notifications hover:bg-transparent\">\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2</div>\r\n </ng-container>\r\n <ng-template #notificationsDropDown>\r\n <ul class=\"pr-1.5\">\r\n <ng-container *ngIf=\"notificationLinks | async as obs; else loading\">\r\n <ng-container *ngIf=\"obs.length <= 0\" class=\"py-5\">\r\n <div class=\"nav-link-notifications hover:bg-transparent\">\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2</div>\r\n </ng-container>\r\n <ng-container *ngFor=\"let link of obs\">\r\n <li class=\"mb-2\" [ngClass]=\"{ 'border-l-2 border-blue-500 bg-blue-50 hover:bg-blue-50': !link.isRead }\">\r\n <div class=\"flex justify-between\">\r\n <div class=\"flex-grow\">\r\n <a\r\n [routerLink]=\"link.path\"\r\n class=\"nav-link-notifications grid\"\r\n [ngClass]=\"!link.isRead ? ' hover:bg-blue-50' : 'border-b border-gray-100'\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <div class=\"font-thin tracking-tighter\">\r\n {{ link.creationDate | date: \"EEE, d MMMM\" }}\r\n </div>\r\n <div class=\"font-bold\">\r\n {{ link.text }}\r\n </div>\r\n </div>\r\n </a>\r\n </div>\r\n <!-- <div class=\"flex-none font-thin tracking-tighter\">\r\n <button type=\"button\"\r\n title=\"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE\"\r\n class=\"text-red-600 hover:text-red-900\">\r\n <span class=\"ms-Icon ms-Icon--Delete\"></span>\r\n </button>\r\n </div> -->\r\n </div>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #loading>\r\n <div class=\"h-32 flex items-center justify-center\">\r\n <div class=\"animate-pulse text-s text-gray-600\">Loading...</div>\r\n </div>\r\n </ng-template>\r\n </ul>\r\n </ng-template>\r\n </div>\r\n <div class=\"p-1 rounded-sm\">\r\n <a [routerLink]=\"(allNotificationsLink | async)?.path\">\r\n <button type=\"button\" class=\"shell-header-notifications-dropdown-view-all-button\">\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03CC\u03BB\u03C9\u03BD</button>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mobile-menu-button-container\">\r\n <!-- Mobile menu button -->\r\n <button\r\n type=\"button\"\r\n (click)=\"mobileMenuExpanded = !mobileMenuExpanded\"\r\n class=\"mobile-menu-button\"\r\n aria-controls=\"mobile-menu\"\r\n [attr.aria-expanded]=\"mobileMenuExpanded\"\r\n >\r\n <span class=\"sr-only\">Open main menu</span>\r\n <!--Heroicon name: outline/menu Menu open: \"hidden\", Menu closed: \"block\"-->\r\n <svg\r\n class=\"block h-6 w-6\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\"\r\n >\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\r\n </svg>\r\n <!--Heroicon name: outline/x Menu open: \"block\", Menu closed: \"hidden\"-->\r\n <svg\r\n class=\"hidden h-6 w-6\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\"\r\n >\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Mobile menu, show/hide based on menu state. -->\r\n <div class=\"mobile-menu-container\" *ngIf=\"mobileMenuExpanded\" id=\"mobile-menu\">\r\n <div class=\"mobile-menu-link-container\">\r\n <ng-container *ngFor=\"let link of sectionLinks | async\">\r\n <a *ngIf=\"link.external\" [attr.href]=\"link.path\" [attr.target]=\"'_blank'\" class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n <a\r\n *ngIf=\"!link.external\"\r\n [routerLink]=\"link.path\"\r\n [routerLinkActive]=\"['nav-link-mobile-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link-mobile\"\r\n >\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"!user\">\r\n <a href=\"#\" (click)=\"signin($event)\" class=\"nav-link-mobile\"> <i class=\"ms-Icon ms-Icon--Signin mr-2\"></i>\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7 </a>\r\n </ng-container>\r\n </div>\r\n <div class=\"mobile-menu-user-info-container\" *ngIf=\"user\">\r\n <div class=\"mobile-menu-user-info-container-inner\">\r\n <div class=\"flex-shrink-0\">\r\n <span class=\"mobile-menu-avatar-container\">\r\n <span class=\"mobile-menu-avatar-name\">{{ this.avatarName }}</span>\r\n </span>\r\n </div>\r\n <div class=\"ml-3\">\r\n <div class=\"mobile-menu-user-name\">{{ user.profile.name }}</div>\r\n <div class=\"mobile-menu-user-email\">{{ user.profile.email }}</div>\r\n </div>\r\n <a [routerLink]=\"(allNotificationsLink | async)?.path\">\r\n <button class=\"mobile-menu-rounded-button\">\r\n <span class=\"sr-only\">View notifications</span>\r\n <!-- Heroicon name: outline/bell -->\r\n <svg\r\n class=\"mobile-menu-rounded-button-icon-style\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"2\"\r\n d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\"\r\n />\r\n </svg>\r\n </button>\r\n </a>\r\n </div>\r\n <div class=\"mobile-menu-link-container\">\r\n <ng-container *ngFor=\"let link of links.profile | async\">\r\n <a *ngIf=\"link.external\" [attr.href]=\"link.path\" [attr.target]=\"'_blank'\" class=\"nav-link-mobile\">\r\n {{ link.text }}\r\n </a>\r\n <a\r\n [routerLink]=\"link.path\"\r\n [routerLinkActive]=\"['nav-link-mobile-active']\"\r\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\r\n class=\"nav-link-mobile\"\r\n >\r\n {{ link.text }}\r\n </a>\r\n </ng-container>\r\n <!-- <a href=\"#\" class=\"block px-3 py-2 rounded-sm text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700\">\u0391\u03C0\u03BF\u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7</a> -->\r\n </div>\r\n </div>\r\n </div>\r\n</nav>\r\n", directives: [{ type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i3.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i2.AsyncPipe, "date": i2.DatePipe } });
116
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellHeaderComponent, decorators: [{
96
+ ShellHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ShellHeaderComponent, deps: [{ token: AuthService }, { token: Router }, { token: ActivatedRoute }, { token: SHELL_CONFIG }, { token: APP_LINKS }], target: i0.ɵɵFactoryTarget.Component });
97
+ ShellHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ShellHeaderComponent, selector: "lib-shell-header", inputs: { sectionLinksPath: ["section-links", "sectionLinksPath"], profileMenuVisible: ["profile-menu", "profileMenuVisible"], showUserNameOnHeader: ["show-userName", "showUserNameOnHeader"], showAlerts: ["show-alerts", "showAlerts"], langs: "langs", currentLang: ["current-lang", "currentLang"], border: "border" }, ngImport: i0, template: "<nav>\n <div class=\"shell-header-paddings\">\n <div [class]=\"border ? 'shell-header-border' : ''\">\n <div class=\"shell-header-menu-container\">\n <div class=\"shell-header-logo-container\">\n <div>\n <a href=\"#\" [routerLink]=\"['/']\"><img class=\"app-logo\" [src]=\"config.appLogo\" [alt]=\"config.appLogoAlt\" /></a>\n </div>\n </div>\n\n <div class=\"shell-header-link-container\">\n <div class=\"shell-header-link-container-inner\">\n <lib-nav-links-list\n [links]=\"sectionLinks\"\n [active-fragment]=\"activeFragment\"\n [link-class]=\"'nav-link'\"\n [link-active-class]=\"'nav-link-active'\">\n </lib-nav-links-list>\n </div>\n </div>\n\n <div *ngIf=\"langs && langs.length > 1 && currentLang\" class=\"shell-header-links-far-container\">\n <button class=\"text-blue-300 hover:text-blue-500\">\n <span>{{currentLang}}</span>\n <i class=\"text-xs ml-1 ms-Icon ms-Icon--ChevronDown\"></i>\n </button>\n </div>\n\n <div class=\"shell-header-md-visible\">\n <div class=\"shell-header-links-far-container\" (clickOutside)=\"onClickOutside($event)\">\n\n <lib-nav-links-list\n [links]=\"links.profileActions\"\n [active-fragment]=\"activeFragment\"\n [link-class]=\"'shell-header-menu-rounded-button'\"\n [link-active-class]=\"'shell-header-menu-rounded-button-active'\">\n </lib-nav-links-list>\n\n <!-- <ng-container *ngFor=\"let link of links.profileActions | async\">\n <a class=\"shell-header-menu-rounded-button\"\n (clickOutside)=\"onClickOutside($event)\"\n [attr.href]=\"link.path\"\n [attr.target]=\"link.external ? '_blank' : '_self'\">\n <span class=\"sr-only\">{{ link.text }}</span>\n <i *ngIf=\"link.icon\" [class]=\"link.icon\"></i>\n </a>\n </ng-container> -->\n\n <!-- Username -->\n <div *ngIf=\"profileMenuVisible\" class=\"ml-2 relative\">\n <div [ngClass]=\"{'shell-header-profile': showUserNameOnHeader}\">\n <div *ngIf=\"user && showUserNameOnHeader\" class=\"shell-header-profile-userName\">\n {{ user.profile.name }}\n </div>\n </div>\n </div>\n\n <!-- Notifications dropdown -->\n <div *ngIf=\"showAlerts && user\" class=\"ml-2\">\n <lib-notifications-indicator></lib-notifications-indicator>\n </div>\n\n <!-- Profile dropdown -->\n <div *ngIf=\"profileMenuVisible\" class=\"ml-2 relative\" (clickOutside)=\"onClickOutside($event)\">\n <div [ngClass]=\"{'shell-header-profile': showUserNameOnHeader}\">\n <button type=\"button\" *ngIf=\"user\" (click)=\"userMenuExpanded = !userMenuExpanded\"\n class=\"shell-header-profile-dropdown-button\"\n id=\"user-menu\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\">\n <span class=\"sr-only\">Open user menu</span>\n <span class=\"avatar-container\">\n <span class=\"avatar-text\">{{this.avatarName}}</span>\n </span>\n </button>\n\n <button type=\"button\"\n *ngIf=\"!user\"\n (click)=\"signin(null)\"\n class=\"shell-header-profile-dropdown-button\"\n id=\"user-menu\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\">\n <span class=\"sr-only\">sign in</span>\n <span class=\"avatar-container\">\n <span class=\"avatar-text\"><i class=\"ms-Icon ms-Icon--Signin\"></i></span>\n </span>\n </button>\n\n <div *ngIf=\"userMenuExpanded\"\n [ngClass]=\"showUserNameOnHeader ? 'shell-header-profile-dropdown-with-username' : 'shell-header-profile-dropdown'\"\n role=\"menu\"\n aria-orientation=\"vertical\"\n aria-labelledby=\"user-menu\">\n <lib-nav-links-list\n [links]=\"links.profile\"\n [active-fragment]=\"activeFragment\"\n [link-class]=\"'nav-link-profile'\"\n [link-active-class]=\"'nav-link-profile-active'\">\n </lib-nav-links-list>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mobile-menu-button-container\">\n <!-- Mobile menu button -->\n <button type=\"button\"\n (click)=\"mobileMenuExpanded = !mobileMenuExpanded\"\n class=\"mobile-menu-button\"\n aria-controls=\"mobile-menu\"\n [attr.aria-expanded]=\"mobileMenuExpanded\">\n <span class=\"sr-only\">Open main menu</span>\n <!--Heroicon name: outline/menu Menu open: \"hidden\", Menu closed: \"block\"-->\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n [class]=\"mobileMenuExpanded ? 'hidden':'block h-6 w-6'\">\n <path stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n <!--Heroicon name: outline/x Menu open: \"block\", Menu closed: \"hidden\"-->\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n [class]=\"mobileMenuExpanded ? 'block h-6 w-6':'hidden'\">\n <path stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n </div>\n </div>\n </div>\n <!-- Mobile menu, show/hide based on menu state. -->\n <div class=\"mobile-menu-container\" *ngIf=\"mobileMenuExpanded\" id=\"mobile-menu\">\n <lib-nav-links-list\n [links]=\"sectionLinks\"\n [active-fragment]=\"activeFragment\"\n [link-class]=\"'nav-link-mobile'\"\n [link-active-class]=\"'nav-link-mobile-active'\"\n [container-class]=\"'mobile-menu-link-container'\">\n </lib-nav-links-list>\n\n <div *ngIf=\"!user\">\n <a href=\"#\" (click)=\"signin($event)\" class=\"nav-link-mobile\">\n <i class=\"ms-Icon ms-Icon--Signin mr-2\"></i>\u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7\n </a>\n </div>\n\n <div class=\"mobile-menu-user-info-container\" *ngIf=\"user\">\n <div class=\"mobile-menu-user-info-container-inner\">\n <div class=\"flex-shrink-0\">\n <span class=\"mobile-menu-avatar-container\">\n <span class=\"mobile-menu-avatar-name\">{{ this.avatarName }}</span>\n </span>\n </div>\n <div class=\"ml-3\">\n <div class=\"mobile-menu-user-name\">{{ user.profile.name }}</div>\n <div class=\"mobile-menu-user-email\">{{ user.profile.email }}</div>\n </div>\n <button class=\"mobile-menu-rounded-button\">\n <span class=\"sr-only\">View notifications</span>\n <!-- Heroicon name: outline/bell -->\n <svg class=\"mobile-menu-rounded-button-icon-style\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\">\n <path stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9\" />\n </svg>\n </button>\n </div>\n </div>\n\n <lib-nav-links-list\n [links]=\"links.profile\"\n [active-fragment]=\"activeFragment\"\n [link-class]=\"'nav-link-mobile'\"\n [link-active-class]=\"'nav-link-mobile-active'\"\n [container-class]=\"'mobile-menu-link-container'\">\n </lib-nav-links-list>\n </div>\n</nav>\n", components: [{ type: i1.NavLinksListComponent, selector: "lib-nav-links-list", inputs: ["links", "active-fragment", "link-class", "link-active-class", "container-class"] }, { type: i2.NotificationsIndicatorComponent, selector: "lib-notifications-indicator" }], directives: [{ type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ShellHeaderComponent, decorators: [{
117
99
  type: Component,
118
100
  args: [{
119
101
  // tslint:disable-next-line:component-selector
120
102
  selector: 'lib-shell-header',
121
103
  templateUrl: './shell-header.component.html',
122
104
  }]
123
- }], ctorParameters: function () { return [{ type: i4.AuthService, decorators: [{
105
+ }], ctorParameters: function () { return [{ type: i6.AuthService, decorators: [{
124
106
  type: Inject,
125
107
  args: [AuthService]
126
- }] }, { type: i1.Router, decorators: [{
108
+ }] }, { type: i3.Router, decorators: [{
127
109
  type: Inject,
128
110
  args: [Router]
111
+ }] }, { type: i3.ActivatedRoute, decorators: [{
112
+ type: Inject,
113
+ args: [ActivatedRoute]
114
+ }] }, { type: undefined, decorators: [{
115
+ type: Inject,
116
+ args: [SHELL_CONFIG]
129
117
  }] }, { type: undefined, decorators: [{
130
118
  type: Inject,
131
119
  args: [APP_LINKS]
132
120
  }] }]; }, propDecorators: { sectionLinksPath: [{
133
121
  type: Input,
134
122
  args: ['section-links']
135
- }], notificationLinksPath: [{
123
+ }], profileMenuVisible: [{
124
+ type: Input,
125
+ args: ['profile-menu']
126
+ }], showUserNameOnHeader: [{
136
127
  type: Input,
137
- args: ['notification-links']
138
- }], allNotificationsLinkPath: [{
128
+ args: ['show-userName']
129
+ }], showAlerts: [{
139
130
  type: Input,
140
- args: ['all-notifications']
141
- }], config: [{
131
+ args: ['show-alerts']
132
+ }], langs: [{
142
133
  type: Input
134
+ }], currentLang: [{
135
+ type: Input,
136
+ args: ['current-lang']
143
137
  }], border: [{
144
138
  type: Input
145
139
  }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9sYXlvdXRzL3NoZWxsL3NoZWxsLWhlYWRlci9zaGVsbC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2xheW91dHMvc2hlbGwvc2hlbGwtaGVhZGVyL3NoZWxsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBUyxJQUFJLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBTzlDLE1BQU0sT0FBTyxvQkFBb0I7SUEwQi9CLFlBQXlDLFdBQXdCLEVBQ3ZDLE1BQWMsRUFDWixLQUFVO1FBRkcsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNaLFVBQUssR0FBTCxLQUFLLENBQUs7UUEzQnRDLDJDQUEyQztRQUNuQixxQkFBZ0IsR0FBRyxNQUFNLENBQUM7UUFDckIsMEJBQXFCLEdBQUcsZUFBZSxDQUFDO1FBQ3pDLDZCQUF3QixHQUFHLGtCQUFrQixDQUFDO1FBR2pFLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDaEIsc0JB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QixJQUFJLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7UUFDakUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0scUJBQXFCO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7aUhBN0dVLG9CQUFvQixrQkEwQlgsV0FBVyxhQUNyQixNQUFNLGFBQ04sU0FBUztxR0E1QlIsb0JBQW9CLHNUQ2RqQywydWZBNlRBOzJGRC9TYSxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsK0JBQStCO2lCQUM3Qzs7MEJBMkJjLE1BQU07MkJBQUMsV0FBVzs7MEJBQzVCLE1BQU07MkJBQUMsTUFBTTs7MEJBQ2IsTUFBTTsyQkFBQyxTQUFTOzRDQTFCSyxnQkFBZ0I7c0JBQXZDLEtBQUs7dUJBQUMsZUFBZTtnQkFDTyxxQkFBcUI7c0JBQWpELEtBQUs7dUJBQUMsb0JBQW9CO2dCQUNDLHdCQUF3QjtzQkFBbkQsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBRWpCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdvaWRjLWNsaWVudCc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgZmlsdGVyLCBkZWxheSwgdGFrZSwgbWFwLCBjb3VudCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSVNoZWxsQ29uZmlnLCBOYXZMaW5rLCBOb3RpZmljYXRpb25OYXZMaW5rIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBBUFBfTElOS1MgfSBmcm9tICcuLi8uLi8uLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGluZGljZS9uZy1hdXRoJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ2xpYi1zaGVsbC1oZWFkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaGVsbC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2hlbGxIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxyXG4gIEBJbnB1dCgnc2VjdGlvbi1saW5rcycpIHNlY3Rpb25MaW5rc1BhdGggPSAnbWFpbic7XHJcbiAgQElucHV0KCdub3RpZmljYXRpb24tbGlua3MnKSBub3RpZmljYXRpb25MaW5rc1BhdGggPSAnbm90aWZpY2F0aW9ucyc7XHJcbiAgQElucHV0KCdhbGwtbm90aWZpY2F0aW9ucycpIGFsbE5vdGlmaWNhdGlvbnNMaW5rUGF0aCA9ICdhbGxOb3RpZmljYXRpb25zJztcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXHJcbiAgQElucHV0KCkgY29uZmlnITogSVNoZWxsQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGJvcmRlciA9IHRydWU7XHJcbiAgcHVibGljIHNob3dOb3RpZmljYXRpb25zOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dVc2VyTmFtZU9uSGVhZGVyOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XHJcbiAgcHVibGljIG5vdGlmaWNhdGlvbnNNZW51VmlzaWJsZSA9IHRydWU7XHJcbiAgcHVibGljIHByb2ZpbGVNZW51VmlzaWJsZSA9IHRydWU7XHJcbiAgcHVibGljIHNlY3Rpb25MaW5rczogT2JzZXJ2YWJsZTxOYXZMaW5rW10+ID0gb2YoW10pO1xyXG4gIHB1YmxpYyBub3RpZmljYXRpb25MaW5rczogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25OYXZMaW5rW10+ID0gb2YoW10pO1xyXG4gIHB1YmxpYyBhbGxOb3RpZmljYXRpb25zTGluazogT2JzZXJ2YWJsZTxOYXZMaW5rPiA9IG9mKCk7XHJcbiAgcHVibGljIG1vYmlsZU1lbnVFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VyTWVudUV4cGFuZGVkID0gZmFsc2U7XHJcbiAgcHVibGljIG5vdGlmaWNhdGlvbnNNZW51RXhwYW5kZWQgPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgcm91dGVTdWJqZWN0OiBPYnNlcnZhYmxlPEV2ZW50PiA9IG5ldyBPYnNlcnZhYmxlPEV2ZW50PigpO1xyXG4gIHByb3RlY3RlZCByb3V0ZXJTdWIkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgdXNlclN1YiQ6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBzdGF0dXNTdWIkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgdXNlcjogVXNlciB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBhdmF0YXJOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgbm90aWZpY2F0aW9uc0NvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEF1dGhTZXJ2aWNlKSBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIEBJbmplY3QoUm91dGVyKSBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgQEluamVjdChBUFBfTElOS1MpIHB1YmxpYyBsaW5rczogYW55KSB7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJvdXRlclN1YiQpIHtcclxuICAgICAgdGhpcy5yb3V0ZXJTdWIkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBjaGVjayBhdXRoZW50aWNhdGVkIHVzZXIgaGVyZSBiZWZvcmUgd2Ugc3RhcnQgcG9sbGluZyBzZXJ2ZXIgc3RhdHVzXHJcbiAgICBpZiAodGhpcy5zdGF0dXNTdWIkKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzU3ViJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudXNlclN1YiQpIHtcclxuICAgICAgdGhpcy51c2VyU3ViJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dOb3RpZmljYXRpb25zID0gdGhpcy5jb25maWc/LnNob3dOb3RpZmljYXRpb25zO1xyXG4gICAgdGhpcy5zaG93VXNlck5hbWVPbkhlYWRlciA9IHRoaXMuY29uZmlnPy5zaG93VXNlck5hbWVPbkhlYWRlcjtcclxuICAgIHRoaXMuc2VjdGlvbkxpbmtzID0gdGhpcy5saW5rc1t0aGlzLnNlY3Rpb25MaW5rc1BhdGhdIGFzIE9ic2VydmFibGU8TmF2TGlua1tdPjtcclxuICAgIHRoaXMuYWxsTm90aWZpY2F0aW9uc0xpbmsgPSB0aGlzLmxpbmtzW3RoaXMuYWxsTm90aWZpY2F0aW9uc0xpbmtQYXRoXSBhcyBPYnNlcnZhYmxlPE5hdkxpbms+O1xyXG4gICAgdGhpcy5ub3RpZmljYXRpb25MaW5rcyA9IHRoaXMubGlua3NbdGhpcy5ub3RpZmljYXRpb25MaW5rc1BhdGhdIGFzIE9ic2VydmFibGU8Tm90aWZpY2F0aW9uTmF2TGlua1tdPjtcclxuICAgIHRoaXMuZ2V0Tm90aWZpY2F0aW9uc0NvdW50KCk7XHJcbiAgICB0aGlzLnJvdXRlclN1YiQgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICB0aGlzLm1vYmlsZU1lbnVFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVzZXJNZW51RXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25zTWVudUV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubG9hZFVzZXIoKS5zdWJzY3JpYmUoKHVzZXIpID0+IHtcclxuICAgICAgY29uc29sZS5sb2codXNlcik7XHJcbiAgICAgIHRoaXMuc2V0Q3VycmVudFVzZXIodXNlcik7XHJcbiAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgIH0pO1xyXG4gICAgLy8gRGV0ZWN0IHVzZXIgY2hhbmdlcyBhbmQgZGlzcGxheSAvIG9yIG5vdCB1c2VyIGluZm8gYWNjb3JkaW5nbHkuLi5cclxuICAgIHRoaXMudXNlclN1YiQgPSB0aGlzLmF1dGhTZXJ2aWNlLnVzZXIkLnN1YnNjcmliZSgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdTaGVsbEhlYWRlckNvbXBvbmVudCB1c2VyIHN1YnNjcmlwdGlvbicpO1xyXG4gICAgICB0aGlzLnNldEN1cnJlbnRVc2VyKHVzZXIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEN1cnJlbnRVc2VyKHVzZXI6IGFueSkge1xyXG4gICAgdGhpcy51c2VyID0gdXNlcjtcclxuICAgIGlmICh0aGlzLnVzZXIgJiYgdGhpcy51c2VyLnByb2ZpbGUpIHtcclxuICAgICAgdGhpcy5hdmF0YXJOYW1lID0gYCR7dGhpcy51c2VyLnByb2ZpbGUuZ2l2ZW5fbmFtZT8uY2hhckF0KDApfSR7dGhpcy51c2VyLnByb2ZpbGUuZmFtaWx5X25hbWU/LmNoYXJBdCgwKX1gO1xyXG4gICAgICBjb25zb2xlLmxvZygnbG9hZCB1c2VyJywgdGhpcy5hdmF0YXJOYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0eXBlZGVmXHJcbiAgcHVibGljIG9uQ2xpY2tPdXRzaWRlUHJvZmlsZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy51c2VyTWVudUV4cGFuZGVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHlwZWRlZlxyXG4gIHB1YmxpYyBvbkNsaWNrT3V0c2lkZU5vdGlmaWNhdGlvbnMoJGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uc01lbnVFeHBhbmRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNpZ25pbihldmVudDogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25pblJlZGlyZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kVXNlck1lbnUoKSB7XHJcbiAgICB0aGlzLnVzZXJNZW51RXhwYW5kZWQgPSAhdGhpcy51c2VyTWVudUV4cGFuZGVkO1xyXG4gICAgdGhpcy5ub3RpZmljYXRpb25zTWVudUV4cGFuZGVkID0gZmFsc2VcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmROb3RpZmljYXRpb25zTWVudSgpIHtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uc01lbnVFeHBhbmRlZCA9ICF0aGlzLm5vdGlmaWNhdGlvbnNNZW51RXhwYW5kZWQ7XHJcbiAgICB0aGlzLnVzZXJNZW51RXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuZ2V0Tm90aWZpY2F0aW9uc0NvdW50KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9uc0NvdW50KCkge1xyXG4gICAgdGhpcy5ub3RpZmljYXRpb25MaW5rcy5waXBlKHRha2UoMSkpLnN1YnNjcmliZShub3RpZmljYXRpb25zID0+IHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25zQ291bnQgPSBub3RpZmljYXRpb25zLmZpbHRlcih4ID0+ICF4LmlzUmVhZCkubGVuZ3RoO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxuYXY+XHJcbiAgPGRpdiBjbGFzcz1cInNoZWxsLWhlYWRlci1wYWRkaW5nc1wiPlxyXG4gICAgPGRpdiBbY2xhc3NdPVwiYm9yZGVyID8gJ3NoZWxsLWhlYWRlci1ib3JkZXInIDogJydcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNoZWxsLWhlYWRlci1tZW51LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGVsbC1oZWFkZXItbGlua3Mtbm8tZ3Jvdy1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgW3JvdXRlckxpbmtdPVwiWycvJ11cIj48aW1nIGNsYXNzPVwiYXBwLWxvZ29cIiBbc3JjXT1cImNvbmZpZy5hcHBMb2dvXCIgW2FsdF09XCJjb25maWcuYXBwTG9nb0FsdFwiIC8+PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGVsbC1oZWFkZXItbGluay1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmsgb2Ygc2VjdGlvbkxpbmtzIHwgYXN5bmNcIj5cclxuICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICBocmVmPVwiI1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdldE5vdGlmaWNhdGlvbnNDb3VudCgpXCJcclxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbbGluay5wYXRoXVwiXHJcbiAgICAgICAgICAgICAgW2F0dHIudGFyZ2V0XT1cImxpbmsuZXh0ZXJuYWwgPyAnX2JsYW5rJyA6ICdfc2VsZidcIlxyXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnbmF2LWxpbmstYWN0aXZlJ11cIlxyXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7IGV4YWN0OiBsaW5rLmV4YWN0IH1cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmtcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgbGluay50ZXh0IH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hlbGwtaGVhZGVyLW1kLXZpc2libGVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGVsbC1oZWFkZXItbGlua3Mtbm8tZ3Jvdy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluayBvZiBsaW5rcy5wcm9maWxlQWN0aW9ucyB8IGFzeW5jXCI+XHJcbiAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2hlbGwtaGVhZGVyLW1lbnUtcm91bmRlZC1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrT3V0c2lkZSk9XCJvbkNsaWNrT3V0c2lkZVByb2ZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImxpbmsucGF0aFwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwibGluay5leHRlcm5hbCA/ICdfYmxhbmsnIDogJ19zZWxmJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgbGluay50ZXh0IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJsaW5rLmljb25cIiBbY2xhc3NdPVwibGluay5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFByb2ZpbGUgZHJvcGRvd24gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yIHJlbGF0aXZlXCIgKGNsaWNrT3V0c2lkZSk9XCJvbkNsaWNrT3V0c2lkZVByb2ZpbGUoJGV2ZW50KVwiICpuZ0lmPVwicHJvZmlsZU1lbnVWaXNpYmxlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdzaGVsbC1oZWFkZXItcHJvZmlsZSc6IHNob3dVc2VyTmFtZU9uSGVhZGVyIH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyICYmIHNob3dVc2VyTmFtZU9uSGVhZGVyXCIgY2xhc3M9XCJzaGVsbC1oZWFkZXItcHJvZmlsZS11c2VyTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyB1c2VyLnByb2ZpbGUubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInVzZXJcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXNlck1lbnVFeHBhbmRlZCA9ICF1c2VyTWVudUV4cGFuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGVsbC1oZWFkZXItcHJvZmlsZS1kcm9wZG93bi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICBpZD1cInVzZXItbWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+T3BlbiB1c2VyIG1lbnU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXZhdGFyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXZhdGFyLXRleHRcIj57eyB0aGlzLmF2YXRhck5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXVzZXJcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2lnbmluKG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGVsbC1oZWFkZXItcHJvZmlsZS1kcm9wZG93bi1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICBpZD1cInVzZXItbWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+c2lnbiBpbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdmF0YXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdmF0YXItdGV4dFwiPjxpIGNsYXNzPVwibXMtSWNvbiBtcy1JY29uLS1TaWduaW5cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXNlck1lbnVFeHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNob3dVc2VyTmFtZU9uSGVhZGVyID8gJ3NoZWxsLWhlYWRlci1wcm9maWxlLWRyb3Bkb3duLXdpdGgtdXNlcm5hbWUnIDogJ3NoZWxsLWhlYWRlci1wcm9maWxlLWRyb3Bkb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1vcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwidXNlci1tZW51XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYmxvY2sgcHgtNCBweS0yIHRleHQtc20gdGV4dC1ncmF5LTcwMCBob3ZlcjpiZy1ncmF5LTEwMFwiIHJvbGU9XCJtZW51aXRlbVwiPs6Rz4DOv8+Dz43Ovc60zrXPg863PC9hPiAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluayBvZiBsaW5rcy5wcm9maWxlIHwgYXN5bmNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxhICpuZ0lmPVwibGluay5leHRlcm5hbFwiIFthdHRyLmhyZWZdPVwibGluay5wYXRoXCIgW2F0dHIudGFyZ2V0XT1cIidfYmxhbmsnXCIgY2xhc3M9XCJuYXYtbGluay1wcm9maWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5rLnRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJsaW5rLnBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiWyduYXYtbGluay1wcm9maWxlLWFjdGl2ZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7IGV4YWN0OiBsaW5rLmV4YWN0IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluay1wcm9maWxlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5rLnRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBOb3RpZmljYXRpb25zIGRyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMiByZWxhdGl2ZVwiIChjbGlja091dHNpZGUpPVwib25DbGlja091dHNpZGVOb3RpZmljYXRpb25zKCRldmVudClcIiAqbmdJZj1cIm5vdGlmaWNhdGlvbnNNZW51VmlzaWJsZVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gTm90aWZpY2F0aW9ucyBCdXR0b24gLS0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vYmlsZS1tZW51LXJvdW5kZWQtYnV0dG9uIGJnLXRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd05vdGlmaWNhdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZE5vdGlmaWNhdGlvbnNNZW51KClcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJub3RpZmljYXRpb25zLW1lbnVcIlxyXG4gICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5WaWV3IG5vdGlmaWNhdGlvbnM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIEhlcm9pY29uIG5hbWU6IG91dGxpbmUvYmVsbCAtLT5cclxuICAgICAgICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9iaWxlLW1lbnUtcm91bmRlZC1idXR0b24taWNvbi1zdHlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub3RpZmljYXRpb25zQ291bnQgPiAwXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTIgcHktMSB0ZXh0LXhzIGZvbnQtYm9sZCBsZWFkaW5nLW5vbmUgdGV4dC1ncmF5LTEwMCB0cmFuc2Zvcm0gdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzIgYmctZ3JheS01MDAgcm91bmRlZC1mdWxsXCJcclxuICAgICAgICAgICAgICAgICAgICA+e3sgbm90aWZpY2F0aW9uc0NvdW50IH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJub3RpZmljYXRpb25zTWVudUV4cGFuZGVkXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICBzaG93VXNlck5hbWVPbkhlYWRlciA/ICdzaGVsbC1oZWFkZXItbm90aWZpY2F0aW9ucy1kcm9wZG93bi13aXRoLXVzZXJuYW1lJyA6ICdzaGVsbC1oZWFkZXItbm90aWZpY2F0aW9ucy1kcm9wZG93bidcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiXHJcbiAgICAgICAgICAgICAgICBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIlxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwibm90aWZpY2F0aW9ucy1tZW51XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LWgtNjQgb3ZlcmZsb3cteS1hdXRvIG5vdGlmaWNhdGlvbi1tZXNzYWdlcyBtaW4taFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vdGlmaWNhdGlvbkxpbmtzOyBlbHNlIG5vdGlmaWNhdGlvbnNEcm9wRG93blwiIGNsYXNzPVwicHktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtbGluay1ub3RpZmljYXRpb25zIGhvdmVyOmJnLXRyYW5zcGFyZW50XCI+zpTOtc69IM6tz4fOtc+EzrUgzr3Orc61z4IgzrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdGlmaWNhdGlvbnNEcm9wRG93bj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJwci0xLjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub3RpZmljYXRpb25MaW5rcyB8IGFzeW5jIGFzIG9iczsgZWxzZSBsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYnMubGVuZ3RoIDw9IDBcIiBjbGFzcz1cInB5LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWxpbmstbm90aWZpY2F0aW9ucyBob3ZlcjpiZy10cmFuc3BhcmVudFwiPs6UzrXOvSDOrc+HzrXPhM61IM69zq3Otc+CIM61zrnOtM6/z4DOv865zq7Pg861zrnPgjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluayBvZiBvYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJtYi0yXCIgW25nQ2xhc3NdPVwieyAnYm9yZGVyLWwtMiBib3JkZXItYmx1ZS01MDAgYmctYmx1ZS01MCBob3ZlcjpiZy1ibHVlLTUwJzogIWxpbmsuaXNSZWFkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImxpbmsucGF0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rLW5vdGlmaWNhdGlvbnMgZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIhbGluay5pc1JlYWQgPyAnIGhvdmVyOmJnLWJsdWUtNTAnIDogJ2JvcmRlci1iIGJvcmRlci1ncmF5LTEwMCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXRoaW4gdHJhY2tpbmctdGlnaHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxpbmsuY3JlYXRpb25EYXRlIHwgZGF0ZTogXCJFRUUsIGQgTU1NTVwiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluay50ZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleC1ub25lIGZvbnQtdGhpbiB0cmFja2luZy10aWdodGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIs6UzrnOsc6zz4HOsc+Gzq5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtcmVkLTYwMCBob3Zlcjp0ZXh0LXJlZC05MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy1JY29uIG1zLUljb24tLURlbGV0ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0zMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlLXB1bHNlIHRleHQtcyB0ZXh0LWdyYXktNjAwXCI+TG9hZGluZy4uLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMSByb3VuZGVkLXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIihhbGxOb3RpZmljYXRpb25zTGluayB8IGFzeW5jKT8ucGF0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2hlbGwtaGVhZGVyLW5vdGlmaWNhdGlvbnMtZHJvcGRvd24tdmlldy1hbGwtYnV0dG9uXCI+zqDPgc6/zrLOv867zq4gz4zOu8+Jzr08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtbWVudS1idXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8IS0tIE1vYmlsZSBtZW51IGJ1dHRvbiAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtb2JpbGVNZW51RXhwYW5kZWQgPSAhbW9iaWxlTWVudUV4cGFuZGVkXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtb2JpbGUtbWVudS1idXR0b25cIlxyXG4gICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwibW9iaWxlLW1lbnVcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm1vYmlsZU1lbnVFeHBhbmRlZFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPk9wZW4gbWFpbiBtZW51PC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tSGVyb2ljb24gbmFtZTogb3V0bGluZS9tZW51ICBNZW51IG9wZW46IFwiaGlkZGVuXCIsIE1lbnUgY2xvc2VkOiBcImJsb2NrXCItLT5cclxuICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYmxvY2sgaC02IHctNlwiXHJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjJcIiBkPVwiTTQgNmgxNk00IDEyaDE2TTQgMThoMTZcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPCEtLUhlcm9pY29uIG5hbWU6IG91dGxpbmUveCBNZW51IG9wZW46IFwiYmxvY2tcIiwgTWVudSBjbG9zZWQ6IFwiaGlkZGVuXCItLT5cclxuICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuIGgtNiB3LTZcIlxyXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tIE1vYmlsZSBtZW51LCBzaG93L2hpZGUgYmFzZWQgb24gbWVudSBzdGF0ZS4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cIm1vYmlsZS1tZW51LWNvbnRhaW5lclwiICpuZ0lmPVwibW9iaWxlTWVudUV4cGFuZGVkXCIgaWQ9XCJtb2JpbGUtbWVudVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1tZW51LWxpbmstY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmsgb2Ygc2VjdGlvbkxpbmtzIHwgYXN5bmNcIj5cclxuICAgICAgICA8YSAqbmdJZj1cImxpbmsuZXh0ZXJuYWxcIiBbYXR0ci5ocmVmXT1cImxpbmsucGF0aFwiIFthdHRyLnRhcmdldF09XCInX2JsYW5rJ1wiIGNsYXNzPVwibmF2LWxpbmstbW9iaWxlXCI+XHJcbiAgICAgICAgICB7eyBsaW5rLnRleHQgfX1cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPGFcclxuICAgICAgICAgICpuZ0lmPVwiIWxpbmsuZXh0ZXJuYWxcIlxyXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwibGluay5wYXRoXCJcclxuICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnbmF2LWxpbmstbW9iaWxlLWFjdGl2ZSddXCJcclxuICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7IGV4YWN0OiBsaW5rLmV4YWN0IH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJuYXYtbGluay1tb2JpbGVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGxpbmsudGV4dCB9fVxyXG4gICAgICAgIDwvYT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdXNlclwiPlxyXG4gICAgICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cInNpZ25pbigkZXZlbnQpXCIgY2xhc3M9XCJuYXYtbGluay1tb2JpbGVcIj4gPGkgY2xhc3M9XCJtcy1JY29uIG1zLUljb24tLVNpZ25pbiBtci0yXCI+PC9pPs6jz43Ovc60zrXPg863IDwvYT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtbWVudS11c2VyLWluZm8tY29udGFpbmVyXCIgKm5nSWY9XCJ1c2VyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtbWVudS11c2VyLWluZm8tY29udGFpbmVyLWlubmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtc2hyaW5rLTBcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9iaWxlLW1lbnUtYXZhdGFyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1vYmlsZS1tZW51LWF2YXRhci1uYW1lXCI+e3sgdGhpcy5hdmF0YXJOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLW1lbnUtdXNlci1uYW1lXCI+e3sgdXNlci5wcm9maWxlLm5hbWUgfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtbWVudS11c2VyLWVtYWlsXCI+e3sgdXNlci5wcm9maWxlLmVtYWlsIH19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiKGFsbE5vdGlmaWNhdGlvbnNMaW5rIHwgYXN5bmMpPy5wYXRoXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibW9iaWxlLW1lbnUtcm91bmRlZC1idXR0b25cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+VmlldyBub3RpZmljYXRpb25zPC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIEhlcm9pY29uIG5hbWU6IG91dGxpbmUvYmVsbCAtLT5cclxuICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgIGNsYXNzPVwibW9iaWxlLW1lbnUtcm91bmRlZC1idXR0b24taWNvbi1zdHlsZVwiXHJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgZD1cIk0xNSAxN2g1bC0xLjQwNS0xLjQwNUEyLjAzMiAyLjAzMiAwIDAxMTggMTQuMTU4VjExYTYuMDAyIDYuMDAyIDAgMDAtNC01LjY1OVY1YTIgMiAwIDEwLTQgMHYuMzQxQzcuNjcgNi4xNjUgNiA4LjM4OCA2IDExdjMuMTU5YzAgLjUzOC0uMjE0IDEuMDU1LS41OTUgMS40MzZMNCAxN2g1bTYgMHYxYTMgMyAwIDExLTYgMHYtMW02IDBIOVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLW1lbnUtbGluay1jb250YWluZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsaW5rIG9mIGxpbmtzLnByb2ZpbGUgfCBhc3luY1wiPlxyXG4gICAgICAgICAgPGEgKm5nSWY9XCJsaW5rLmV4dGVybmFsXCIgW2F0dHIuaHJlZl09XCJsaW5rLnBhdGhcIiBbYXR0ci50YXJnZXRdPVwiJ19ibGFuaydcIiBjbGFzcz1cIm5hdi1saW5rLW1vYmlsZVwiPlxyXG4gICAgICAgICAgICB7eyBsaW5rLnRleHQgfX1cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImxpbmsucGF0aFwiXHJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIlsnbmF2LWxpbmstbW9iaWxlLWFjdGl2ZSddXCJcclxuICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cInsgZXhhY3Q6IGxpbmsuZXhhY3QgfVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmstbW9iaWxlXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgbGluay50ZXh0IH19XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYmxvY2sgcHgtMyBweS0yIHJvdW5kZWQtc20gdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1ncmF5LTcwMFwiPs6Rz4DOv8+Dz43Ovc60zrXPg863PC9hPiAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uYXY+XHJcbiJdfQ==
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9sYXlvdXRzL3NoZWxsL3NoZWxsLWhlYWRlci9zaGVsbC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2xheW91dHMvc2hlbGwvc2hlbGwtaGVhZGVyL3NoZWxsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFTLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUF5RCxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBUWpGLE1BQU0sT0FBTyxvQkFBb0I7SUF3Qi9CLFlBQ2lDLFdBQXdCLEVBQzdCLE1BQWMsRUFDTixLQUFxQixFQUMxQixNQUFXLEVBQ2QsS0FBVTtRQUpMLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDTixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFLO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBSztRQTVCdEMsMkNBQTJDO1FBQ25CLHFCQUFnQixHQUFHLE1BQU0sQ0FBQztRQUNsRCwy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dUJBQUMsY0FBYztnQkFFRyxvQkFBb0I7c0JBQTNDLEtBQUs7dUJBQUMsZUFBZTtnQkFFQSxVQUFVO3NCQUEvQixLQUFLO3VCQUFDLGFBQWE7Z0JBQ1gsS0FBSztzQkFBYixLQUFLO2dCQUVpQixXQUFXO3NCQUFqQyxLQUFLO3VCQUFDLGNBQWM7Z0JBQ1osTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICdAaW5kaWNlL25nLWF1dGgnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJ29pZGMtY2xpZW50JztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBFdmVudCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyLCBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5hdkxpbmsgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBUFBfTElOS1MsIFNIRUxMX0NPTkZJRyB9IGZyb20gJy4uLy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGlzT2JzZXJ2YWJsZSwgb2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYi1zaGVsbC1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hlbGwtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgU2hlbGxIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdzZWN0aW9uLWxpbmtzJykgc2VjdGlvbkxpbmtzUGF0aCA9ICdtYWluJztcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3Byb2ZpbGUtbWVudScpIHByb2ZpbGVNZW51VmlzaWJsZSA9IHRydWU7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdzaG93LXVzZXJOYW1lJykgc2hvd1VzZXJOYW1lT25IZWFkZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3Nob3ctYWxlcnRzJykgc2hvd0FsZXJ0czogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICBASW5wdXQoKSBsYW5nczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdjdXJyZW50LWxhbmcnKSBjdXJyZW50TGFuZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBib3JkZXIgPSB0cnVlO1xuICBwdWJsaWMgc2VjdGlvbkxpbmtzOiBPYnNlcnZhYmxlPE5hdkxpbmtbXT4gPSBvZihbXSk7XG4gIHB1YmxpYyBtb2JpbGVNZW51RXhwYW5kZWQgPSBmYWxzZTtcbiAgcHVibGljIHVzZXJNZW51RXhwYW5kZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHJvdXRlU3ViamVjdDogT2JzZXJ2YWJsZTxFdmVudD47XG4gIHByb3RlY3RlZCByb3V0ZXJTdWIkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIHVzZXJTdWIkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIHN0YXR1c1N1YiQ6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdXNlcjogVXNlciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgYXZhdGFyTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBhY3RpdmVGcmFnbWVudDogYW55IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChBdXRoU2VydmljZSkgcHJvdGVjdGVkIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBASW5qZWN0KFJvdXRlcikgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoQWN0aXZhdGVkUm91dGUpIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgQEluamVjdChTSEVMTF9DT05GSUcpIHB1YmxpYyBjb25maWc6IGFueSxcbiAgICBASW5qZWN0KEFQUF9MSU5LUykgcHVibGljIGxpbmtzOiBhbnkpIHtcbiAgICB0aGlzLnJvdXRlU3ViamVjdCA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUZyYWdtZW50ID0gdGhpcy5yb3V0ZS5mcmFnbWVudC5waXBlKHNoYXJlKCkpO1xuICAgIHRoaXMuc2VjdGlvbkxpbmtzID0gdGhpcy5saW5rc1t0aGlzLnNlY3Rpb25MaW5rc1BhdGhdIGFzIE9ic2VydmFibGU8TmF2TGlua1tdPjtcbiAgICB0aGlzLnJvdXRlclN1YiQgPSB0aGlzLnJvdXRlU3ViamVjdC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLm1vYmlsZU1lbnVFeHBhbmRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy51c2VyTWVudUV4cGFuZGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgdGhpcy5hdXRoU2VydmljZS5sb2FkVXNlcigpLnN1YnNjcmliZSgodXNlcikgPT4ge1xuICAgICAgdGhpcy5zZXRDdXJyZW50VXNlcih1c2VyKTtcbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9KTtcbiAgICAvLyBEZXRlY3QgdXNlciBjaGFuZ2VzIGFuZCBkaXNwbGF5IC8gb3Igbm90IHVzZXIgaW5mbyBhY2NvcmRpbmdseS4uLlxuICAgIHRoaXMudXNlclN1YiQgPSB0aGlzLmF1dGhTZXJ2aWNlLnVzZXIkLnN1YnNjcmliZSgodXNlcjogYW55KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnU2hlbGxIZWFkZXJDb21wb25lbnQgdXNlciBzdWJzY3JpcHRpb24nKTtcbiAgICAgIHRoaXMuc2V0Q3VycmVudFVzZXIodXNlcik7XG4gICAgfSk7XG4gICAgLy8gc2V0IGN1cnJlbnQgbGFuZyBpZiBubyBjdXJyZW50IHZhbHVlIGZyb20gbGFuZ3MgaWYgYW55XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRMYW5nICYmIHRoaXMubGFuZ3MgJiYgdGhpcy5sYW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNldEN1cnJlbnRMYW5nKHRoaXMubGFuZ3NbMF0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXG4gICAgaWYgKHRoaXMucm91dGVyU3ViJCkge1xuICAgICAgdGhpcy5yb3V0ZXJTdWIkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8vIFRPRE86IGNoZWNrIGF1dGhlbnRpY2F0ZWQgdXNlciBoZXJlIGJlZm9yZSB3ZSBzdGFydCBwb2xsaW5nIHNlcnZlciBzdGF0dXNcbiAgICBpZiAodGhpcy5zdGF0dXNTdWIkKSB7XG4gICAgICB0aGlzLnN0YXR1c1N1YiQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlclN1YiQpIHtcbiAgICAgIHRoaXMudXNlclN1YiQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnR5cGVkZWZcbiAgcHVibGljIG9uQ2xpY2tPdXRzaWRlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy51c2VyTWVudUV4cGFuZGVkID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2lnbmluKGV2ZW50OiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25pblJlZGlyZWN0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnJlbnRVc2VyKHVzZXI6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgaWYgKHRoaXMudXNlciAmJiB0aGlzLnVzZXIucHJvZmlsZSkge1xuICAgICAgdGhpcy5hdmF0YXJOYW1lID0gYCR7dGhpcy51c2VyLnByb2ZpbGUuZ2l2ZW5fbmFtZT8uY2hhckF0KDApfSR7dGhpcy51c2VyLnByb2ZpbGUuZmFtaWx5X25hbWU/LmNoYXJBdCgwKX1gLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEN1cnJlbnRMYW5nKGxhbmc6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudExhbmcgPSBsYW5nO1xuICB9XG59XG5cbiIsIjxuYXY+XG4gIDxkaXYgY2xhc3M9XCJzaGVsbC1oZWFkZXItcGFkZGluZ3NcIj5cbiAgICA8ZGl2IFtjbGFzc109XCJib3JkZXIgPyAnc2hlbGwtaGVhZGVyLWJvcmRlcicgOiAnJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInNoZWxsLWhlYWRlci1tZW51LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hlbGwtaGVhZGVyLWxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgW3JvdXRlckxpbmtdPVwiWycvJ11cIj48aW1nIGNsYXNzPVwiYXBwLWxvZ29cIiBbc3JjXT1cImNvbmZpZy5hcHBMb2dvXCIgW2FsdF09XCJjb25maWcuYXBwTG9nb0FsdFwiIC8+PC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hlbGwtaGVhZGVyLWxpbmstY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNoZWxsLWhlYWRlci1saW5rLWNvbnRhaW5lci1pbm5lclwiPlxuICAgICAgICAgICAgPGxpYi1uYXYtbGlua3MtbGlzdFxuICAgICAgICAgICAgICBbbGlua3NdPVwic2VjdGlvbkxpbmtzXCJcbiAgICAgICAgICAgICAgW2FjdGl2ZS1mcmFnbWVudF09XCJhY3RpdmVGcmFnbWVudFwiXG4gICAgICAgICAgICAgIFtsaW5rLWNsYXNzXT1cIiduYXYtbGluaydcIlxuICAgICAgICAgICAgICBbbGluay1hY3RpdmUtY2xhc3NdPVwiJ25hdi1saW5rLWFjdGl2ZSdcIj5cbiAgICAgICAgICAgIDwvbGliLW5hdi1saW5rcy1saXN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwibGFuZ3MgJiYgbGFuZ3MubGVuZ3RoID4gMSAmJiBjdXJyZW50TGFuZ1wiIGNsYXNzPVwic2hlbGwtaGVhZGVyLWxpbmtzLWZhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0ZXh0LWJsdWUtMzAwIGhvdmVyOnRleHQtYmx1ZS01MDBcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e2N1cnJlbnRMYW5nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ0ZXh0LXhzIG1sLTEgbXMtSWNvbiBtcy1JY29uLS1DaGV2cm9uRG93blwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hlbGwtaGVhZGVyLW1kLXZpc2libGVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hlbGwtaGVhZGVyLWxpbmtzLWZhci1jb250YWluZXJcIiAoY2xpY2tPdXRzaWRlKT1cIm9uQ2xpY2tPdXRzaWRlKCRldmVudClcIj5cblxuICAgICAgICAgICAgPGxpYi1uYXYtbGlua3MtbGlzdFxuICAgICAgICAgICAgICBbbGlua3NdPVwibGlua3MucHJvZmlsZUFjdGlvbnNcIlxuICAgICAgICAgICAgICBbYWN0aXZlLWZyYWdtZW50XT1cImFjdGl2ZUZyYWdtZW50XCJcbiAgICAgICAgICAgICAgW2xpbmstY2xhc3NdPVwiJ3NoZWxsLWhlYWRlci1tZW51LXJvdW5kZWQtYnV0dG9uJ1wiXG4gICAgICAgICAgICAgIFtsaW5rLWFjdGl2ZS1jbGFzc109XCInc2hlbGwtaGVhZGVyLW1lbnUtcm91bmRlZC1idXR0b24tYWN0aXZlJ1wiPlxuICAgICAgICAgICAgPC9saWItbmF2LWxpbmtzLWxpc3Q+XG5cbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluayBvZiBsaW5rcy5wcm9maWxlQWN0aW9ucyB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwic2hlbGwtaGVhZGVyLW1lbnUtcm91bmRlZC1idXR0b25cIlxuICAgICAgICAgICAgICAgICAoY2xpY2tPdXRzaWRlKT1cIm9uQ2xpY2tPdXRzaWRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImxpbmsucGF0aFwiXG4gICAgICAgICAgICAgICAgIFthdHRyLnRhcmdldF09XCJsaW5rLmV4dGVybmFsID8gJ19ibGFuaycgOiAnX3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgbGluay50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibGluay5pY29uXCIgW2NsYXNzXT1cImxpbmsuaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuXG4gICAgICAgICAgICA8IS0tIFVzZXJuYW1lIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByb2ZpbGVNZW51VmlzaWJsZVwiIGNsYXNzPVwibWwtMiByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnc2hlbGwtaGVhZGVyLXByb2ZpbGUnOiBzaG93VXNlck5hbWVPbkhlYWRlcn1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlciAmJiBzaG93VXNlck5hbWVPbkhlYWRlclwiIGNsYXNzPVwic2hlbGwtaGVhZGVyLXByb2ZpbGUtdXNlck5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHVzZXIucHJvZmlsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gTm90aWZpY2F0aW9ucyBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWxlcnRzICYmIHVzZXJcIiBjbGFzcz1cIm1sLTJcIj5cbiAgICAgICAgICAgICAgPGxpYi1ub3RpZmljYXRpb25zLWluZGljYXRvcj48L2xpYi1ub3RpZmljYXRpb25zLWluZGljYXRvcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFByb2ZpbGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvZmlsZU1lbnVWaXNpYmxlXCIgY2xhc3M9XCJtbC0yIHJlbGF0aXZlXCIgKGNsaWNrT3V0c2lkZSk9XCJvbkNsaWNrT3V0c2lkZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydzaGVsbC1oZWFkZXItcHJvZmlsZSc6IHNob3dVc2VyTmFtZU9uSGVhZGVyfVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwidXNlclwiIChjbGljayk9XCJ1c2VyTWVudUV4cGFuZGVkID0gIXVzZXJNZW51RXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGVsbC1oZWFkZXItcHJvZmlsZS1kcm9wZG93bi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2VyLW1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5PcGVuIHVzZXIgbWVudTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXZhdGFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF2YXRhci10ZXh0XCI+e3t0aGlzLmF2YXRhck5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiF1c2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaWduaW4obnVsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGVsbC1oZWFkZXItcHJvZmlsZS1kcm9wZG93bi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2VyLW1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5zaWduIGluPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdmF0YXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXZhdGFyLXRleHRcIj48aSBjbGFzcz1cIm1zLUljb24gbXMtSWNvbi0tU2lnbmluXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyTWVudUV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNob3dVc2VyTmFtZU9uSGVhZGVyID8gJ3NoZWxsLWhlYWRlci1wcm9maWxlLWRyb3Bkb3duLXdpdGgtdXNlcm5hbWUnIDogJ3NoZWxsLWhlYWRlci1wcm9maWxlLWRyb3Bkb3duJ1wiXG4gICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIlxuICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwidXNlci1tZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICA8bGliLW5hdi1saW5rcy1saXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGlua3NdPVwibGlua3MucHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlLWZyYWdtZW50XT1cImFjdGl2ZUZyYWdtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rLWNsYXNzXT1cIiduYXYtbGluay1wcm9maWxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGluay1hY3RpdmUtY2xhc3NdPVwiJ25hdi1saW5rLXByb2ZpbGUtYWN0aXZlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8L2xpYi1uYXYtbGlua3MtbGlzdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLW1lbnUtYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDwhLS0gTW9iaWxlIG1lbnUgYnV0dG9uIC0tPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9iaWxlTWVudUV4cGFuZGVkID0gIW1vYmlsZU1lbnVFeHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1vYmlsZS1tZW51LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwibW9iaWxlLW1lbnVcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJtb2JpbGVNZW51RXhwYW5kZWRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPk9wZW4gbWFpbiBtZW51PC9zcGFuPlxuICAgICAgICAgICAgPCEtLUhlcm9pY29uIG5hbWU6IG91dGxpbmUvbWVudSAgTWVudSBvcGVuOiBcImhpZGRlblwiLCBNZW51IGNsb3NlZDogXCJibG9ja1wiLS0+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICBbY2xhc3NdPVwibW9iaWxlTWVudUV4cGFuZGVkID8gJ2hpZGRlbic6J2Jsb2NrIGgtNiB3LTYnXCI+XG4gICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICBkPVwiTTQgNmgxNk00IDEyaDE2TTQgMThoMTZcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8IS0tSGVyb2ljb24gbmFtZTogb3V0bGluZS94IE1lbnUgb3BlbjogXCJibG9ja1wiLCBNZW51IGNsb3NlZDogXCJoaWRkZW5cIi0tPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIm1vYmlsZU1lbnVFeHBhbmRlZCA/ICdibG9jayBoLTYgdy02JzonaGlkZGVuJ1wiPlxuICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk02IDE4TDE4IDZNNiA2bDEyIDEyXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIE1vYmlsZSBtZW51LCBzaG93L2hpZGUgYmFzZWQgb24gbWVudSBzdGF0ZS4gLS0+XG4gIDxkaXYgY2xhc3M9XCJtb2JpbGUtbWVudS1jb250YWluZXJcIiAqbmdJZj1cIm1vYmlsZU1lbnVFeHBhbmRlZFwiIGlkPVwibW9iaWxlLW1lbnVcIj5cbiAgICA8bGliLW5hdi1saW5rcy1saXN0XG4gICAgICBbbGlua3NdPVwic2VjdGlvbkxpbmtzXCJcbiAgICAgIFthY3RpdmUtZnJhZ21lbnRdPVwiYWN0aXZlRnJhZ21lbnRcIlxuICAgICAgW2xpbmstY2xhc3NdPVwiJ25hdi1saW5rLW1vYmlsZSdcIlxuICAgICAgW2xpbmstYWN0aXZlLWNsYXNzXT1cIiduYXYtbGluay1tb2JpbGUtYWN0aXZlJ1wiXG4gICAgICBbY29udGFpbmVyLWNsYXNzXT1cIidtb2JpbGUtbWVudS1saW5rLWNvbnRhaW5lcidcIj5cbiAgICA8L2xpYi1uYXYtbGlua3MtbGlzdD5cblxuICAgIDxkaXYgKm5nSWY9XCIhdXNlclwiPlxuICAgICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwic2lnbmluKCRldmVudClcIiBjbGFzcz1cIm5hdi1saW5rLW1vYmlsZVwiPlxuICAgICAgICA8aSBjbGFzcz1cIm1zLUljb24gbXMtSWNvbi0tU2lnbmluIG1yLTJcIj48L2k+zqPPjc69zrTOtc+DzrdcbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtbWVudS11c2VyLWluZm8tY29udGFpbmVyXCIgKm5nSWY9XCJ1c2VyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLW1lbnUtdXNlci1pbmZvLWNvbnRhaW5lci1pbm5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9iaWxlLW1lbnUtYXZhdGFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtb2JpbGUtbWVudS1hdmF0YXItbmFtZVwiPnt7IHRoaXMuYXZhdGFyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWwtM1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtbWVudS11c2VyLW5hbWVcIj57eyB1c2VyLnByb2ZpbGUubmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtbWVudS11c2VyLWVtYWlsXCI+e3sgdXNlci5wcm9maWxlLmVtYWlsIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibW9iaWxlLW1lbnUtcm91bmRlZC1idXR0b25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5WaWV3IG5vdGlmaWNhdGlvbnM8L3NwYW4+XG4gICAgICAgICAgPCEtLSBIZXJvaWNvbiBuYW1lOiBvdXRsaW5lL2JlbGwgLS0+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cIm1vYmlsZS1tZW51LXJvdW5kZWQtYnV0dG9uLWljb24tc3R5bGVcIlxuICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICBkPVwiTTE1IDE3aDVsLTEuNDA1LTEuNDA1QTIuMDMyIDIuMDMyIDAgMDExOCAxNC4xNThWMTFhNi4wMDIgNi4wMDIgMCAwMC00LTUuNjU5VjVhMiAyIDAgMTAtNCAwdi4zNDFDNy42NyA2LjE2NSA2IDguMzg4IDYgMTF2My4xNTljMCAuNTM4LS4yMTQgMS4wNTUtLjU5NSAxLjQzNkw0IDE3aDVtNiAwdjFhMyAzIDAgMTEtNiAwdi0xbTYgMEg5XCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxsaWItbmF2LWxpbmtzLWxpc3RcbiAgICAgICAgICBbbGlua3NdPVwibGlua3MucHJvZmlsZVwiXG4gICAgICAgICAgW2FjdGl2ZS1mcmFnbWVudF09XCJhY3RpdmVGcmFnbWVudFwiXG4gICAgICAgICAgW2xpbmstY2xhc3NdPVwiJ25hdi1saW5rLW1vYmlsZSdcIlxuICAgICAgICAgIFtsaW5rLWFjdGl2ZS1jbGFzc109XCInbmF2LWxpbmstbW9iaWxlLWFjdGl2ZSdcIlxuICAgICAgICAgIFtjb250YWluZXItY2xhc3NdPVwiJ21vYmlsZS1tZW51LWxpbmstY29udGFpbmVyJ1wiPlxuICAgICAgPC9saWItbmF2LWxpbmtzLWxpc3Q+XG4gIDwvZGl2PlxuPC9uYXY+XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  import { SHELL_CONFIG } from './../../../tokens';
2
2
  import { DefaultShellConfig } from './../../../types';
3
3
  import { Component, Inject, ViewChildren } from '@angular/core';
4
+ import { DOCUMENT } from '@angular/common';
4
5
  import { ActivationStart } from '@angular/router';
5
6
  import { filter } from 'rxjs/operators';
6
7
  import { DynamicComponentHostDirective } from '../../../directives/dynamic-component-host.directive';
@@ -14,14 +15,15 @@ import * as i6 from "../../../controls/side-pane/side-pane.component";
14
15
  import * as i7 from "../../../controls/toaster/toaster-container.component";
15
16
  import * as i8 from "../../../directives/dynamic-component-host.directive";
16
17
  export class ShellLayoutComponent {
17
- constructor(router, location, config, componentLoaderFactory) {
18
+ constructor(document, router, location, config, componentLoaderFactory) {
19
+ this.document = document;
18
20
  this.router = router;
19
21
  this.location = location;
20
22
  this.config = config;
21
23
  this.componentLoaderFactory = componentLoaderFactory;
22
24
  this.dynamicComponentHosts = null;
23
- this.routerSub$ = null;
24
25
  this.showRightPaneSM = false;
26
+ this.routerSub$ = null;
25
27
  this.activeConfig = new DefaultShellConfig();
26
28
  this.loaded = false;
27
29
  if (!config) {
@@ -82,20 +84,23 @@ export class ShellLayoutComponent {
82
84
  }
83
85
  }
84
86
  }
85
- ShellLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellLayoutComponent, deps: [{ token: i1.Router }, { token: i2.Location }, { token: SHELL_CONFIG }, { token: i3.ComponentLoaderFactory }], target: i0.ɵɵFactoryTarget.Component });
86
- ShellLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.1", type: ShellLayoutComponent, selector: "lib-shell-layout", viewQueries: [{ propertyName: "dynamicComponentHosts", predicate: DynamicComponentHostDirective, descendants: true }], ngImport: i0, template: "<div *ngIf=\"loaded\"\r\n [style.display]=\"!loaded ? 'none':'block'\"\r\n class=\"shell-container active-side-pane\">\r\n <div class=\"shell-header-container\"\r\n *ngIf=\"activeConfig.showHeader\">\r\n <div [class]=\"activeConfig.fluid ? 'shell-header-container-inner-fluid' : 'shell-header-container-inner'\">\r\n\r\n <ng-container *ngIf=\"activeConfig.customHeaderComponent\">\r\n <div appDynamicComponentHost=\"Header\"></div>\r\n </ng-container>\r\n\r\n <lib-shell-header *ngIf=\"!activeConfig.customHeaderComponent\"\r\n [config]=\"activeConfig\"></lib-shell-header>\r\n </div>\r\n </div>\r\n\r\n <main [class]=\"activeConfig.showHeader ? 'shell-content-container' : 'shell-content-container-no-header'\">\r\n <div [class]=\"activeConfig.fluid ? 'shell-content-container-inner-fluid' : 'shell-content-container-inner'\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n </main>\r\n\r\n <div class=\"shell-footer-container\"\r\n *ngIf=\"activeConfig.showFooter\">\r\n <div [class]=\"activeConfig.fluid ? 'shell-footer-container-inner-fluid' : 'shell-footer-container-inner'\">\r\n <ng-container *ngIf=\"activeConfig.customFooterComponent\">\r\n <div appDynamicComponentHost\r\n hostName=\"Footer\"></div>\r\n </ng-container>\r\n <lib-shell-footer *ngIf=\"!activeConfig.customFooterComponent\"></lib-shell-footer>\r\n </div>\r\n </div>\r\n\r\n <lib-side-pane #rightPane>\r\n <router-outlet name=\"rightpane\"\r\n (activate)=\"rightPane.onSidePaneActivated($event)\"\r\n (deactivate)=\"rightPane.onSidePaneDeactivated($event)\"></router-outlet>\r\n </lib-side-pane>\r\n\r\n <lib-toaster-container></lib-toaster-container>\r\n\r\n</div>\r\n", components: [{ type: i4.ShellHeaderComponent, selector: "lib-shell-header", inputs: ["section-links", "notification-links", "all-notifications", "config", "border"] }, { type: i5.ShellFooterComponent, selector: "lib-shell-footer" }, { type: i6.SidePaneComponent, selector: "lib-side-pane", inputs: ["visible"], outputs: ["onComplete"] }, { type: i7.ToasterContainerComponent, selector: "lib-toaster-container" }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DynamicComponentHostDirective, selector: "[appDynamicComponentHost]", inputs: ["hostName"] }, { type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }] });
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.1", ngImport: i0, type: ShellLayoutComponent, decorators: [{
87
+ ShellLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ShellLayoutComponent, deps: [{ token: DOCUMENT }, { token: i1.Router }, { token: i2.Location }, { token: SHELL_CONFIG }, { token: i3.ComponentLoaderFactory }], target: i0.ɵɵFactoryTarget.Component });
88
+ ShellLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ShellLayoutComponent, selector: "lib-shell-layout", viewQueries: [{ propertyName: "dynamicComponentHosts", predicate: DynamicComponentHostDirective, descendants: true }], ngImport: i0, template: "<div *ngIf=\"loaded\" [style.display]=\"!loaded ? 'none':'block'\" class=\"shell-container active-side-pane\">\n\n <div class=\"shell-header-container\" *ngIf=\"activeConfig.showHeader\">\n <div [class]=\"activeConfig.fluid ? 'shell-header-container-inner-fluid' : 'shell-header-container-inner'\">\n <ng-container *ngIf=\"activeConfig.customHeaderComponent\">\n <div appDynamicComponentHost =\"Header\"></div>\n </ng-container>\n <lib-shell-header *ngIf=\"!activeConfig.customHeaderComponent\"\n [langs]=\"activeConfig.langs\"\n [show-userName]=\"activeConfig.showUserNameOnHeader\"\n [show-alerts]=\"activeConfig.showAlertsOnHeader\"></lib-shell-header>\n </div>\n </div>\n\n <main [class]=\"activeConfig.showHeader ? 'shell-content-container' : 'shell-content-container-no-header'\">\n <div [class]=\"activeConfig.fluid ? 'shell-content-container-inner-fluid' : 'shell-content-container-inner'\">\n <router-outlet></router-outlet>\n </div>\n </main>\n\n <div class=\"shell-footer-container\" *ngIf=\"activeConfig.showFooter\">\n <div [class]=\"activeConfig.fluid ? 'shell-footer-container-inner-fluid' : 'shell-footer-container-inner'\">\n <ng-container *ngIf=\"activeConfig.customFooterComponent\">\n <div appDynamicComponentHost hostName=\"Footer\"></div>\n </ng-container>\n <lib-shell-footer *ngIf=\"!activeConfig.customFooterComponent\"></lib-shell-footer>\n </div>\n </div>\n\n <lib-side-pane #rightPane>\n <router-outlet name=\"rightpane\" (activate)=\"rightPane.onSidePaneActivated($event)\" (deactivate)=\"rightPane.onSidePaneDeactivated($event)\"></router-outlet>\n </lib-side-pane>\n\n <lib-toaster-container></lib-toaster-container>\n\n</div>\n", components: [{ type: i4.ShellHeaderComponent, selector: "lib-shell-header", inputs: ["section-links", "profile-menu", "show-userName", "show-alerts", "langs", "current-lang", "border"] }, { type: i5.ShellFooterComponent, selector: "lib-shell-footer" }, { type: i6.SidePaneComponent, selector: "lib-side-pane", inputs: ["visible"], outputs: ["onComplete"] }, { type: i7.ToasterContainerComponent, selector: "lib-toaster-container" }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DynamicComponentHostDirective, selector: "[appDynamicComponentHost]", inputs: ["hostName"] }, { type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }] });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ShellLayoutComponent, decorators: [{
88
90
  type: Component,
89
91
  args: [{
90
92
  // tslint:disable-next-line:component-selector
91
93
  selector: 'lib-shell-layout',
92
94
  templateUrl: './shell-layout.component.html',
93
95
  }]
94
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }, { type: undefined, decorators: [{
96
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
97
+ type: Inject,
98
+ args: [DOCUMENT]
99
+ }] }, { type: i1.Router }, { type: i2.Location }, { type: undefined, decorators: [{
95
100
  type: Inject,
96
101
  args: [SHELL_CONFIG]
97
102
  }] }, { type: i3.ComponentLoaderFactory }]; }, propDecorators: { dynamicComponentHosts: [{
98
103
  type: ViewChildren,
99
104
  args: [DynamicComponentHostDirective]
100
105
  }] } });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9sYXlvdXRzL3NoZWxsL3NoZWxsLWxheW91dC9zaGVsbC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2xheW91dHMvc2hlbGwvc2hlbGwtbGF5b3V0L3NoZWxsLWxheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BFLE9BQU8sRUFBaUIsU0FBUyxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUUvSCxPQUFPLEVBQUUsZUFBZSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7Ozs7Ozs7O0FBUXJHLE1BQU0sT0FBTyxvQkFBb0I7SUFPL0IsWUFBb0IsTUFBYyxFQUNkLFFBQWtCLEVBQ0ksTUFBMkIsRUFDakQsc0JBQThDO1FBSDlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ0ksV0FBTSxHQUFOLE1BQU0sQ0FBcUI7UUFDakQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQVJsRSwwQkFBcUIsR0FBb0QsSUFBSSxDQUFDO1FBQ3RFLGVBQVUsR0FBd0IsSUFBSSxDQUFDO1FBQ3hDLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGlCQUFZLEdBQWlCLElBQUksa0JB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LG9CQUFvQixnRUFTWCxZQUFZO3FHQVRyQixvQkFBb0Isa0dBQ2pCLDZCQUE2QixnRENoQjdDLHl4REEwQ0E7MkZEM0JhLG9CQUFvQjtrQkFMaEMsU0FBUzttQkFBQztvQkFDVCw4Q0FBOEM7b0JBQzlDLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFdBQVcsRUFBRSwrQkFBK0I7aUJBQzdDOzswQkFVYyxNQUFNOzJCQUFDLFlBQVk7aUZBUGhDLHFCQUFxQjtzQkFEcEIsWUFBWTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTSEVMTF9DT05GSUcgfSBmcm9tICcuLy4uLy4uLy4uL3Rva2Vucyc7XHJcbmltcG9ydCB7IElTaGVsbENvbmZpZywgRGVmYXVsdFNoZWxsQ29uZmlnIH0gZnJvbSAnLi8uLi8uLi8uLi90eXBlcyc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEluamVjdCwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyVmlld0NoZWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBY3RpdmF0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRIb3N0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWNvbXBvbmVudC1ob3N0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudExvYWRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQtbG9hZGVyL2NvbXBvbmVudC1sb2FkZXIuZmFjdG9yeSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdsaWItc2hlbGwtbGF5b3V0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2hlbGwtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNoZWxsTGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIEBWaWV3Q2hpbGRyZW4oRHluYW1pY0NvbXBvbmVudEhvc3REaXJlY3RpdmUpXHJcbiAgZHluYW1pY0NvbXBvbmVudEhvc3RzOiBRdWVyeUxpc3Q8RHluYW1pY0NvbXBvbmVudEhvc3REaXJlY3RpdmU+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByb3V0ZXJTdWIkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgc2hvd1JpZ2h0UGFuZVNNID0gZmFsc2U7XHJcbiAgcHVibGljIGFjdGl2ZUNvbmZpZzogSVNoZWxsQ29uZmlnID0gbmV3IERlZmF1bHRTaGVsbENvbmZpZygpO1xyXG4gIHB1YmxpYyBsb2FkZWQgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoU0hFTExfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogSVNoZWxsQ29uZmlnIHwgbnVsbCxcclxuICAgICAgICAgICAgICBwcml2YXRlIGNvbXBvbmVudExvYWRlckZhY3Rvcnk6IENvbXBvbmVudExvYWRlckZhY3RvcnkpIHtcclxuICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZyA9IG5ldyBEZWZhdWx0U2hlbGxDb25maWcoKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlQ29uZmlnID0gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMubG9hZGVkID0gdHJ1ZTsgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXJTdWIkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uU3RhcnQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ1NoZWxsTGF5b3V0Q29tcG9uZW50IEFjdGl2YXRpb25TdGFydCcsIGUpO1xyXG4gICAgICBpZiAoKGUgYXMgQWN0aXZhdGlvblN0YXJ0KT8uc25hcHNob3QpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnU2hlbGxMYXlvdXRDb21wb25lbnQgQWN0aXZhdGlvblN0YXJ0IHNuYXBzaG90JywgKGUgYXMgQWN0aXZhdGlvblN0YXJ0KT8uc25hcHNob3QpO1xyXG4gICAgICAgIGlmICgoZSBhcyBBY3RpdmF0aW9uU3RhcnQpPy5zbmFwc2hvdD8uZGF0YSkge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ1NoZWxsTGF5b3V0Q29tcG9uZW50IEFjdGl2YXRpb25TdGFydCBzbmFwc2hvdCBkYXRhJywgKGUgYXMgQWN0aXZhdGlvblN0YXJ0KT8uc25hcHNob3QuZGF0YSk7XHJcbiAgICAgICAgICBpZiAoKGUgYXMgQWN0aXZhdGlvblN0YXJ0KT8uc25hcHNob3Q/LmRhdGEuc2hlbGwpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1NoZWxsTGF5b3V0Q29tcG9uZW50IEFjdGl2YXRpb25TdGFydCBzbmFwc2hvdCBkYXRhIHNoZWxsIHBhcmFtcycsXHJcbiAgICAgICAgICAgIC8vIChlIGFzIEFjdGl2YXRpb25TdGFydCk/LnNuYXBzaG90LmRhdGEuc2hlbGwpO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZyA9IChlIGFzIEFjdGl2YXRpb25TdGFydCk/LnNuYXBzaG90LmRhdGEuc2hlbGwgYXMgSVNoZWxsQ29uZmlnO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnU2hlbGxMYXlvdXRDb21wb25lbnQgYWN0aXZlQ29uZmlnIGZyb20gcm91dGU6ICcsIHRoaXMuYWN0aXZlQ29uZmlnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnLmN1c3RvbUhlYWRlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5pdEN1c3RvbUNvbXBvbmVudHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDb25maWcgPSB0aGlzLmNvbmZpZyA/IHRoaXMuY29uZmlnIDogbmV3IERlZmF1bHRTaGVsbENvbmZpZygpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnU2hlbGxMYXlvdXRDb21wb25lbnQgZGVmYXVsdCBhY3RpdmVDb25maWc6ICcsIHRoaXMuYWN0aXZlQ29uZmlnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0Q3VzdG9tQ29tcG9uZW50cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q3VzdG9tQ29tcG9uZW50cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmR5bmFtaWNDb21wb25lbnRIb3N0cyAmJiB0aGlzLmR5bmFtaWNDb21wb25lbnRIb3N0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubG9hZEN1c3RvbUNvbXBvbmVudCh0aGlzLmR5bmFtaWNDb21wb25lbnRIb3N0cy5maW5kKChfKSA9PiBfLmhvc3ROYW1lID09PSAnSGVhZGVyJykpO1xyXG4gICAgICAvLyBzaW5jZSB5b3UncmUgbm90IHVzaW5nIGl0Li4uXHJcbiAgICAgIC8vIHRoaXMubG9hZEN1c3RvbUNvbXBvbmVudCh0aGlzLmR5bmFtaWNDb21wb25lbnRIb3N0cy5maW5kKF8gPT4gXy5ob3N0TmFtZSA9PT0gJ0Zvb3RlcicpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucm91dGVyU3ViJCkge1xyXG4gICAgICB0aGlzLnJvdXRlclN1YiQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZEN1c3RvbUNvbXBvbmVudChob3N0OiBEeW5hbWljQ29tcG9uZW50SG9zdERpcmVjdGl2ZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgaWYgKGhvc3QpIHtcclxuICAgICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IGhvc3Qudmlld0NvbnRhaW5lclJlZjtcclxuICAgICAgaWYgKHZpZXdDb250YWluZXJSZWYgJiYgdGhpcy5hY3RpdmVDb25maWcuY3VzdG9tSGVhZGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgY29uc3QgY2xmID0gdGhpcy5jb21wb25lbnRMb2FkZXJGYWN0b3J5LmNyZWF0ZUxvYWRlcih2aWV3Q29udGFpbmVyUmVmKTtcclxuICAgICAgICBjb25zdCBoZWFkZXJDb21wUmVmID0gY2xmLmF0dGFjaCh0aGlzLmFjdGl2ZUNvbmZpZy5jdXN0b21IZWFkZXJDb21wb25lbnQpLnRvKHZpZXdDb250YWluZXJSZWYuZWxlbWVudCkuc2hvdygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJsb2FkZWRcIlxyXG4gICAgIFtzdHlsZS5kaXNwbGF5XT1cIiFsb2FkZWQgPyAnbm9uZSc6J2Jsb2NrJ1wiXHJcbiAgICAgY2xhc3M9XCJzaGVsbC1jb250YWluZXIgYWN0aXZlLXNpZGUtcGFuZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzaGVsbC1oZWFkZXItY29udGFpbmVyXCJcclxuICAgICAgICpuZ0lmPVwiYWN0aXZlQ29uZmlnLnNob3dIZWFkZXJcIj5cclxuICAgIDxkaXYgW2NsYXNzXT1cImFjdGl2ZUNvbmZpZy5mbHVpZCA/ICdzaGVsbC1oZWFkZXItY29udGFpbmVyLWlubmVyLWZsdWlkJyA6ICdzaGVsbC1oZWFkZXItY29udGFpbmVyLWlubmVyJ1wiPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUNvbmZpZy5jdXN0b21IZWFkZXJDb21wb25lbnRcIj5cclxuICAgICAgICA8ZGl2IGFwcER5bmFtaWNDb21wb25lbnRIb3N0PVwiSGVhZGVyXCI+PC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGxpYi1zaGVsbC1oZWFkZXIgKm5nSWY9XCIhYWN0aXZlQ29uZmlnLmN1c3RvbUhlYWRlckNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiYWN0aXZlQ29uZmlnXCI+PC9saWItc2hlbGwtaGVhZGVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYWluIFtjbGFzc109XCJhY3RpdmVDb25maWcuc2hvd0hlYWRlciA/ICdzaGVsbC1jb250ZW50LWNvbnRhaW5lcicgOiAnc2hlbGwtY29udGVudC1jb250YWluZXItbm8taGVhZGVyJ1wiPlxyXG4gICAgPGRpdiBbY2xhc3NdPVwiYWN0aXZlQ29uZmlnLmZsdWlkID8gJ3NoZWxsLWNvbnRlbnQtY29udGFpbmVyLWlubmVyLWZsdWlkJyA6ICdzaGVsbC1jb250ZW50LWNvbnRhaW5lci1pbm5lcidcIj5cclxuICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYWluPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2hlbGwtZm9vdGVyLWNvbnRhaW5lclwiXHJcbiAgICAgICAqbmdJZj1cImFjdGl2ZUNvbmZpZy5zaG93Rm9vdGVyXCI+XHJcbiAgICA8ZGl2IFtjbGFzc109XCJhY3RpdmVDb25maWcuZmx1aWQgPyAnc2hlbGwtZm9vdGVyLWNvbnRhaW5lci1pbm5lci1mbHVpZCcgOiAnc2hlbGwtZm9vdGVyLWNvbnRhaW5lci1pbm5lcidcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUNvbmZpZy5jdXN0b21Gb290ZXJDb21wb25lbnRcIj5cclxuICAgICAgICA8ZGl2IGFwcER5bmFtaWNDb21wb25lbnRIb3N0XHJcbiAgICAgICAgICAgICBob3N0TmFtZT1cIkZvb3RlclwiPjwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPGxpYi1zaGVsbC1mb290ZXIgKm5nSWY9XCIhYWN0aXZlQ29uZmlnLmN1c3RvbUZvb3RlckNvbXBvbmVudFwiPjwvbGliLXNoZWxsLWZvb3Rlcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bGliLXNpZGUtcGFuZSAjcmlnaHRQYW5lPlxyXG4gICAgPHJvdXRlci1vdXRsZXQgbmFtZT1cInJpZ2h0cGFuZVwiXHJcbiAgICAgICAgICAgICAgICAgICAoYWN0aXZhdGUpPVwicmlnaHRQYW5lLm9uU2lkZVBhbmVBY3RpdmF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoZGVhY3RpdmF0ZSk9XCJyaWdodFBhbmUub25TaWRlUGFuZURlYWN0aXZhdGVkKCRldmVudClcIj48L3JvdXRlci1vdXRsZXQ+XHJcbiAgPC9saWItc2lkZS1wYW5lPlxyXG5cclxuICA8bGliLXRvYXN0ZXItY29udGFpbmVyPjwvbGliLXRvYXN0ZXItY29udGFpbmVyPlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9sYXlvdXRzL3NoZWxsL3NoZWxsLWxheW91dC9zaGVsbC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2xheW91dHMvc2hlbGwvc2hlbGwtbGF5b3V0L3NoZWxsLWxheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BFLE9BQU8sRUFBaUIsU0FBUyxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsUUFBUSxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7Ozs7OztBQVFyRyxNQUFNLE9BQU8sb0JBQW9CO0lBTy9CLFlBQzRCLFFBQWEsRUFDL0IsTUFBYyxFQUNkLFFBQWtCLEVBQ0ksTUFBMkIsRUFDakQsc0JBQThDO1FBSjVCLGFBQVEsR0FBUixRQUFRLENBQUs7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDSSxXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUNqRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBVnhELDBCQUFxQixHQUFvRCxJQUFJLENBQUM7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RUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQy9HO1NBQ0Y7SUFDSCxDQUFDOztrSEExRVUsb0JBQW9CLGtCQVFyQixRQUFRLDJEQUdSLFlBQVk7c0dBWFgsb0JBQW9CLGtHQUNqQiw2QkFBNkIsZ0RDaEI3QyxpdURBb0NBOzRGRHJCYSxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsK0JBQStCO2lCQUM3Qzs7MEJBU0ksTUFBTTsyQkFBQyxRQUFROzswQkFHZixNQUFNOzJCQUFDLFlBQVk7aUZBVHRCLHFCQUFxQjtzQkFEcEIsWUFBWTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTSEVMTF9DT05GSUcgfSBmcm9tICcuLy4uLy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBJU2hlbGxDb25maWcsIERlZmF1bHRTaGVsbENvbmZpZyB9IGZyb20gJy4vLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5qZWN0LCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFjdGl2YXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRIb3N0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWNvbXBvbmVudC1ob3N0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb21wb25lbnRMb2FkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29tcG9uZW50LWxvYWRlci9jb21wb25lbnQtbG9hZGVyLmZhY3RvcnknO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYi1zaGVsbC1sYXlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hlbGwtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgU2hlbGxMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIEBWaWV3Q2hpbGRyZW4oRHluYW1pY0NvbXBvbmVudEhvc3REaXJlY3RpdmUpXG4gIGR5bmFtaWNDb21wb25lbnRIb3N0czogUXVlcnlMaXN0PER5bmFtaWNDb21wb25lbnRIb3N0RGlyZWN0aXZlPiB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgc2hvd1JpZ2h0UGFuZVNNID0gZmFsc2U7XG4gIHByaXZhdGUgcm91dGVyU3ViJDogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBhY3RpdmVDb25maWc6IElTaGVsbENvbmZpZyA9IG5ldyBEZWZhdWx0U2hlbGxDb25maWcoKTtcbiAgcHVibGljIGxvYWRlZCA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBASW5qZWN0KFNIRUxMX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IElTaGVsbENvbmZpZyB8IG51bGwsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRMb2FkZXJGYWN0b3J5OiBDb21wb25lbnRMb2FkZXJGYWN0b3J5XG4gICkge1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25maWcgPSBuZXcgRGVmYXVsdFNoZWxsQ29uZmlnKCk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlQ29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmxvYWRlZCA9IHRydWU7IH0sIDIwMCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlclN1YiQgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIEFjdGl2YXRpb25TdGFydCkpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coJ1NoZWxsTGF5b3V0Q29tcG9uZW50IEFjdGl2YXRpb25TdGFydCcsIGUpO1xuICAgICAgaWYgKChlIGFzIEFjdGl2YXRpb25TdGFydCk/LnNuYXBzaG90KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTaGVsbExheW91dENvbXBvbmVudCBBY3RpdmF0aW9uU3RhcnQgc25hcHNob3QnLCAoZSBhcyBBY3RpdmF0aW9uU3RhcnQpPy5zbmFwc2hvdCk7XG4gICAgICAgIGlmICgoZSBhcyBBY3RpdmF0aW9uU3RhcnQpPy5zbmFwc2hvdD8uZGF0YSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdTaGVsbExheW91dENvbXBvbmVudCBBY3RpdmF0aW9uU3RhcnQgc25hcHNob3QgZGF0YScsIChlIGFzIEFjdGl2YXRpb25TdGFydCk/LnNuYXBzaG90LmRhdGEpO1xuICAgICAgICAgIGlmICgoZSBhcyBBY3RpdmF0aW9uU3RhcnQpPy5zbmFwc2hvdD8uZGF0YS5zaGVsbCkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1NoZWxsTGF5b3V0Q29tcG9uZW50IEFjdGl2YXRpb25TdGFydCBzbmFwc2hvdCBkYXRhIHNoZWxsIHBhcmFtcycsXG4gICAgICAgICAgICAvLyAoZSBhcyBBY3RpdmF0aW9uU3RhcnQpPy5zbmFwc2hvdC5kYXRhLnNoZWxsKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29uZmlnID0gKGUgYXMgQWN0aXZhdGlvblN0YXJ0KT8uc25hcHNob3QuZGF0YS5zaGVsbCBhcyBJU2hlbGxDb25maWc7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnU2hlbGxMYXlvdXRDb21wb25lbnQgYWN0aXZlQ29uZmlnIGZyb20gcm91dGU6ICcsIHRoaXMuYWN0aXZlQ29uZmlnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUNvbmZpZy5jdXN0b21IZWFkZXJDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbml0Q3VzdG9tQ29tcG9uZW50cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZyA9IHRoaXMuY29uZmlnID8gdGhpcy5jb25maWcgOiBuZXcgRGVmYXVsdFNoZWxsQ29uZmlnKCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnU2hlbGxMYXlvdXRDb21wb25lbnQgZGVmYXVsdCBhY3RpdmVDb25maWc6ICcsIHRoaXMuYWN0aXZlQ29uZmlnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRDdXN0b21Db21wb25lbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDdXN0b21Db21wb25lbnRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmR5bmFtaWNDb21wb25lbnRIb3N0cyAmJiB0aGlzLmR5bmFtaWNDb21wb25lbnRIb3N0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvYWRDdXN0b21Db21wb25lbnQodGhpcy5keW5hbWljQ29tcG9uZW50SG9zdHMuZmluZCgoXykgPT4gXy5ob3N0TmFtZSA9PT0gJ0hlYWRlcicpKTtcbiAgICAgIC8vIHNpbmNlIHlvdSdyZSBub3QgdXNpbmcgaXQuLi5cbiAgICAgIC8vIHRoaXMubG9hZEN1c3RvbUNvbXBvbmVudCh0aGlzLmR5bmFtaWNDb21wb25lbnRIb3N0cy5maW5kKF8gPT4gXy5ob3N0TmFtZSA9PT0gJ0Zvb3RlcicpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb3V0ZXJTdWIkKSB7XG4gICAgICB0aGlzLnJvdXRlclN1YiQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRDdXN0b21Db21wb25lbnQoaG9zdDogRHluYW1pY0NvbXBvbmVudEhvc3REaXJlY3RpdmUgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoaG9zdCkge1xuICAgICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IGhvc3Qudmlld0NvbnRhaW5lclJlZjtcbiAgICAgIGlmICh2aWV3Q29udGFpbmVyUmVmICYmIHRoaXMuYWN0aXZlQ29uZmlnLmN1c3RvbUhlYWRlckNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBjbGYgPSB0aGlzLmNvbXBvbmVudExvYWRlckZhY3RvcnkuY3JlYXRlTG9hZGVyKHZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICBjb25zdCBoZWFkZXJDb21wUmVmID0gY2xmLmF0dGFjaCh0aGlzLmFjdGl2ZUNvbmZpZy5jdXN0b21IZWFkZXJDb21wb25lbnQpLnRvKHZpZXdDb250YWluZXJSZWYuZWxlbWVudCkuc2hvdygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImxvYWRlZFwiIFtzdHlsZS5kaXNwbGF5XT1cIiFsb2FkZWQgPyAnbm9uZSc6J2Jsb2NrJ1wiIGNsYXNzPVwic2hlbGwtY29udGFpbmVyIGFjdGl2ZS1zaWRlLXBhbmVcIj5cblxuICA8ZGl2IGNsYXNzPVwic2hlbGwtaGVhZGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiYWN0aXZlQ29uZmlnLnNob3dIZWFkZXJcIj5cbiAgICA8ZGl2IFtjbGFzc109XCJhY3RpdmVDb25maWcuZmx1aWQgPyAnc2hlbGwtaGVhZGVyLWNvbnRhaW5lci1pbm5lci1mbHVpZCcgOiAnc2hlbGwtaGVhZGVyLWNvbnRhaW5lci1pbm5lcidcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVDb25maWcuY3VzdG9tSGVhZGVyQ29tcG9uZW50XCI+XG4gICAgICAgIDxkaXYgYXBwRHluYW1pY0NvbXBvbmVudEhvc3QgPVwiSGVhZGVyXCI+PC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxsaWItc2hlbGwtaGVhZGVyICpuZ0lmPVwiIWFjdGl2ZUNvbmZpZy5jdXN0b21IZWFkZXJDb21wb25lbnRcIlxuICAgICAgICBbbGFuZ3NdPVwiYWN0aXZlQ29uZmlnLmxhbmdzXCJcbiAgICAgICAgW3Nob3ctdXNlck5hbWVdPVwiYWN0aXZlQ29uZmlnLnNob3dVc2VyTmFtZU9uSGVhZGVyXCJcbiAgICAgICAgW3Nob3ctYWxlcnRzXT1cImFjdGl2ZUNvbmZpZy5zaG93QWxlcnRzT25IZWFkZXJcIj48L2xpYi1zaGVsbC1oZWFkZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxtYWluIFtjbGFzc109XCJhY3RpdmVDb25maWcuc2hvd0hlYWRlciA/ICdzaGVsbC1jb250ZW50LWNvbnRhaW5lcicgOiAnc2hlbGwtY29udGVudC1jb250YWluZXItbm8taGVhZGVyJ1wiPlxuICAgIDxkaXYgW2NsYXNzXT1cImFjdGl2ZUNvbmZpZy5mbHVpZCA/ICdzaGVsbC1jb250ZW50LWNvbnRhaW5lci1pbm5lci1mbHVpZCcgOiAnc2hlbGwtY29udGVudC1jb250YWluZXItaW5uZXInXCI+XG4gICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gICAgPC9kaXY+XG4gIDwvbWFpbj5cblxuICA8ZGl2IGNsYXNzPVwic2hlbGwtZm9vdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiYWN0aXZlQ29uZmlnLnNob3dGb290ZXJcIj5cbiAgICA8ZGl2IFtjbGFzc109XCJhY3RpdmVDb25maWcuZmx1aWQgPyAnc2hlbGwtZm9vdGVyLWNvbnRhaW5lci1pbm5lci1mbHVpZCcgOiAnc2hlbGwtZm9vdGVyLWNvbnRhaW5lci1pbm5lcidcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVDb25maWcuY3VzdG9tRm9vdGVyQ29tcG9uZW50XCI+XG4gICAgICAgIDxkaXYgYXBwRHluYW1pY0NvbXBvbmVudEhvc3QgaG9zdE5hbWU9XCJGb290ZXJcIj48L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGxpYi1zaGVsbC1mb290ZXIgKm5nSWY9XCIhYWN0aXZlQ29uZmlnLmN1c3RvbUZvb3RlckNvbXBvbmVudFwiPjwvbGliLXNoZWxsLWZvb3Rlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGxpYi1zaWRlLXBhbmUgI3JpZ2h0UGFuZT5cbiAgICA8cm91dGVyLW91dGxldCBuYW1lPVwicmlnaHRwYW5lXCIgKGFjdGl2YXRlKT1cInJpZ2h0UGFuZS5vblNpZGVQYW5lQWN0aXZhdGVkKCRldmVudClcIiAoZGVhY3RpdmF0ZSk9XCJyaWdodFBhbmUub25TaWRlUGFuZURlYWN0aXZhdGVkKCRldmVudClcIj48L3JvdXRlci1vdXRsZXQ+XG4gIDwvbGliLXNpZGUtcGFuZT5cblxuICA8bGliLXRvYXN0ZXItY29udGFpbmVyPjwvbGliLXRvYXN0ZXItY29udGFpbmVyPlxuXG48L2Rpdj5cbiJdfQ==