@cqa-lib/cqa-ui 1.1.557 → 1.1.558

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 (29) hide show
  1. package/esm2020/lib/sidebar/nav-item.component.mjs +171 -0
  2. package/esm2020/lib/sidebar/nav-menu.component.mjs +56 -0
  3. package/esm2020/lib/sidebar/nav-sub-item.component.mjs +27 -0
  4. package/esm2020/lib/sidebar/profile-menu/profile-menu.component.mjs +122 -0
  5. package/esm2020/lib/sidebar/profile-menu/profile-menu.models.mjs +4 -0
  6. package/esm2020/lib/sidebar/sidebar.component.mjs +286 -0
  7. package/esm2020/lib/sidebar/sidebar.models.mjs +5 -0
  8. package/esm2020/lib/sidebar/workspace-menu/workspace-menu.component.mjs +120 -0
  9. package/esm2020/lib/sidebar/workspace-menu/workspace-menu.models.mjs +2 -0
  10. package/esm2020/lib/templates/modular-table-template/modular-table-template.component.mjs +3 -3
  11. package/esm2020/lib/ui-kit.module.mjs +31 -1
  12. package/esm2020/lib/utils/tw-overlay-container.mjs +3 -1
  13. package/esm2020/public-api.mjs +10 -1
  14. package/fesm2015/cqa-lib-cqa-ui.mjs +818 -20
  15. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  16. package/fesm2020/cqa-lib-cqa-ui.mjs +801 -20
  17. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  18. package/lib/sidebar/nav-item.component.d.ts +48 -0
  19. package/lib/sidebar/nav-menu.component.d.ts +19 -0
  20. package/lib/sidebar/nav-sub-item.component.d.ts +11 -0
  21. package/lib/sidebar/profile-menu/profile-menu.component.d.ts +35 -0
  22. package/lib/sidebar/profile-menu/profile-menu.models.d.ts +35 -0
  23. package/lib/sidebar/sidebar.component.d.ts +97 -0
  24. package/lib/sidebar/sidebar.models.d.ts +63 -0
  25. package/lib/sidebar/workspace-menu/workspace-menu.component.d.ts +34 -0
  26. package/lib/sidebar/workspace-menu/workspace-menu.models.d.ts +12 -0
  27. package/lib/ui-kit.module.d.ts +164 -158
  28. package/package.json +1 -1
  29. package/public-api.d.ts +9 -0
@@ -0,0 +1,286 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild, } from '@angular/core';
2
+ import { isNavSection } from './sidebar.models';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/platform-browser";
5
+ import * as i2 from "./nav-menu.component";
6
+ import * as i3 from "./profile-menu/profile-menu.component";
7
+ import * as i4 from "./workspace-menu/workspace-menu.component";
8
+ import * as i5 from "@angular/common";
9
+ import * as i6 from "@angular/material/tooltip";
10
+ export class SidebarComponent {
11
+ constructor(sanitizer) {
12
+ this.sanitizer = sanitizer;
13
+ this.config = {};
14
+ this.navItems = [];
15
+ this.activeNavId = '';
16
+ /** Parent item IDs to open by default (in addition to the one containing the active item). */
17
+ this.initialOpenParentIds = [];
18
+ /**
19
+ * Menu entries shown inside the profile-menu popover. Provide at least one entry to
20
+ * enable the popover; an empty array preserves the legacy `logoutClick` behavior.
21
+ */
22
+ this.profileMenuEntries = [];
23
+ /**
24
+ * Workspaces shown inside the workspace-switcher popover. Provide at least one entry
25
+ * to enable the popover; an empty array preserves the legacy `workspaceSwitchClick`
26
+ * behavior (single emit on click, no UI).
27
+ */
28
+ this.workspaces = [];
29
+ this.navItemClick = new EventEmitter();
30
+ this.ctaClick = new EventEmitter();
31
+ this.searchClick = new EventEmitter();
32
+ this.workspaceSwitchClick = new EventEmitter();
33
+ this.logoutClick = new EventEmitter();
34
+ this.notificationsClick = new EventEmitter();
35
+ this.helpDocsClick = new EventEmitter();
36
+ this.speakerClick = new EventEmitter();
37
+ this.liveChatClick = new EventEmitter();
38
+ this.expandedChange = new EventEmitter();
39
+ /** Emits `ProfileMenuItem.id` when the user activates an entry in the profile popover. */
40
+ this.profileMenuItemClick = new EventEmitter();
41
+ /** Emits the workspace id when the user picks one from the workspace popover. */
42
+ this.workspaceSelected = new EventEmitter();
43
+ /** Emits when the user clicks the "Workspace Management" footer row. */
44
+ this.manageWorkspacesClick = new EventEmitter();
45
+ this.isExpanded = false;
46
+ this.isPinned = false;
47
+ this.openParents = [];
48
+ this.isProfileMenuOpen = false;
49
+ this.isWorkspaceMenuOpen = false;
50
+ this.leaveCollapseTimer = null;
51
+ }
52
+ /**
53
+ * Sanitizer bypass so `data:image/svg+xml;base64,…` URIs render in the workspace
54
+ * avatar — Angular 13's default URL sanitizer rewrites them to `unsafe:…`.
55
+ */
56
+ get workspaceLogoSafe() {
57
+ const url = this.config?.workspaceLogo;
58
+ return url ? this.sanitizer.bypassSecurityTrustUrl(url) : null;
59
+ }
60
+ ngOnInit() {
61
+ if (this.config?.defaultPinned) {
62
+ this.isPinned = true;
63
+ this.isExpanded = true;
64
+ }
65
+ if (this.initialOpenParentIds?.length) {
66
+ this.openParents = [...this.initialOpenParentIds];
67
+ }
68
+ this.ensureActiveParentOpen();
69
+ }
70
+ ngOnDestroy() {
71
+ this.clearLeaveCollapseTimer();
72
+ }
73
+ ngOnChanges(changes) {
74
+ if (changes['activeNavId'] && this.activeNavId) {
75
+ this.ensureActiveParentOpen();
76
+ }
77
+ }
78
+ onProfileClick() {
79
+ if (this.profileUser && this.profileMenuEntries?.length) {
80
+ this.isProfileMenuOpen = !this.isProfileMenuOpen;
81
+ return;
82
+ }
83
+ // Legacy single-action behaviour preserved for consumers that haven't migrated.
84
+ this.logoutClick.emit();
85
+ }
86
+ onProfileMenuItemClick(id) {
87
+ this.isProfileMenuOpen = false;
88
+ this.profileMenuItemClick.emit(id);
89
+ }
90
+ onProfileMenuDismissed() {
91
+ this.isProfileMenuOpen = false;
92
+ }
93
+ onWorkspaceClick() {
94
+ if (this.workspaces?.length) {
95
+ this.isWorkspaceMenuOpen = !this.isWorkspaceMenuOpen;
96
+ return;
97
+ }
98
+ // Legacy single-emit behavior preserved for consumers that haven't migrated.
99
+ this.workspaceSwitchClick.emit();
100
+ }
101
+ onWorkspaceMenuItemClick(id) {
102
+ this.isWorkspaceMenuOpen = false;
103
+ this.workspaceSelected.emit(id);
104
+ }
105
+ onWorkspaceMenuDismissed() {
106
+ this.isWorkspaceMenuOpen = false;
107
+ }
108
+ onManageWorkspacesClick() {
109
+ this.isWorkspaceMenuOpen = false;
110
+ this.manageWorkspacesClick.emit();
111
+ }
112
+ /** Burger: wide sidebar without pinning — collapses on mouse leave. */
113
+ openSidebar() {
114
+ this.clearLeaveCollapseTimer();
115
+ this.isExpanded = true;
116
+ this.isPinned = false;
117
+ this.expandedChange.emit(true);
118
+ }
119
+ /** Header collapse control: always closes and clears pin. */
120
+ closeSidebar() {
121
+ this.isExpanded = false;
122
+ this.isPinned = false;
123
+ this.clearLeaveCollapseTimer();
124
+ this.expandedChange.emit(false);
125
+ }
126
+ pinSidebar() {
127
+ this.isPinned = true;
128
+ this.clearLeaveCollapseTimer();
129
+ }
130
+ /** Cancel delayed collapse when the pointer returns to the sidebar. */
131
+ onAsideMouseEnter() {
132
+ this.clearLeaveCollapseTimer();
133
+ }
134
+ /**
135
+ * When expanded but not pinned, collapse after the pointer leaves the rail.
136
+ * Skips scheduling if the pointer is moving into our CDK flyout / rail tooltip overlays.
137
+ */
138
+ onAsideMouseLeave(ev) {
139
+ if (this.isPinned || !this.isExpanded)
140
+ return;
141
+ const related = ev.relatedTarget;
142
+ if (this.isPointerEnteringSidebarOverlay(related))
143
+ return;
144
+ this.clearLeaveCollapseTimer();
145
+ this.leaveCollapseTimer = setTimeout(() => {
146
+ this.leaveCollapseTimer = null;
147
+ if (!this.isPinned && this.isExpanded) {
148
+ this.isExpanded = false;
149
+ this.expandedChange.emit(false);
150
+ }
151
+ }, SidebarComponent.LEAVE_COLLAPSE_MS);
152
+ }
153
+ isPointerEnteringSidebarOverlay(node) {
154
+ if (!(node instanceof Element))
155
+ return false;
156
+ return !!(node.closest('.cqa-nav-flyout-overlay') ||
157
+ node.closest('.cqa-nav-flyout-overlay-pane') ||
158
+ node.closest('.mat-tooltip.cqa-nav-rail-tooltip') ||
159
+ node.closest('.mat-tooltip'));
160
+ }
161
+ clearLeaveCollapseTimer() {
162
+ if (this.leaveCollapseTimer) {
163
+ clearTimeout(this.leaveCollapseTimer);
164
+ this.leaveCollapseTimer = null;
165
+ }
166
+ }
167
+ onNavItemClick(id) {
168
+ // Submenu leaf: always emit navigation (child id was wrongly treated as a parent for toggle).
169
+ if (this.isChildNavId(id)) {
170
+ this.navItemClick.emit(id);
171
+ return;
172
+ }
173
+ const item = this.findTopLevelNavItem(id);
174
+ if (!item) {
175
+ this.navItemClick.emit(id);
176
+ return;
177
+ }
178
+ if (item.children?.length) {
179
+ // Parent item with children: toggle sub-menu when expanded, navigate when collapsed
180
+ if (this.isExpanded) {
181
+ this.toggleParent(id);
182
+ }
183
+ else {
184
+ this.navItemClick.emit(id);
185
+ }
186
+ }
187
+ else {
188
+ this.navItemClick.emit(id);
189
+ }
190
+ }
191
+ get workspaceInitial() {
192
+ return this.config?.workspaceName?.charAt(0)?.toUpperCase() || 'W';
193
+ }
194
+ toggleParent(id) {
195
+ const idx = this.openParents.indexOf(id);
196
+ if (idx > -1) {
197
+ this.openParents = this.openParents.filter(p => p !== id);
198
+ }
199
+ else {
200
+ this.openParents = [...this.openParents, id];
201
+ }
202
+ }
203
+ /** True if `id` matches a submenu row under some top-level nav item. */
204
+ isChildNavId(id) {
205
+ for (const item of this.navItems) {
206
+ if (isNavSection(item))
207
+ continue;
208
+ if (item.children?.some((c) => c.id === id))
209
+ return true;
210
+ }
211
+ return false;
212
+ }
213
+ findTopLevelNavItem(id) {
214
+ for (const item of this.navItems) {
215
+ if (!isNavSection(item) && item.id === id)
216
+ return item;
217
+ }
218
+ return null;
219
+ }
220
+ ensureActiveParentOpen() {
221
+ for (const item of this.navItems) {
222
+ if (!isNavSection(item) && item.children) {
223
+ const hasActiveChild = item.children.some(c => c.id === this.activeNavId);
224
+ if (hasActiveChild && !this.openParents.includes(item.id)) {
225
+ this.openParents = [...this.openParents, item.id];
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+ SidebarComponent.LEAVE_COLLAPSE_MS = 220;
232
+ SidebarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SidebarComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
233
+ SidebarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SidebarComponent, selector: "cqa-sidebar", inputs: { config: "config", navItems: "navItems", activeNavId: "activeNavId", initialOpenParentIds: "initialOpenParentIds", profileUser: "profileUser", profileMenuEntries: "profileMenuEntries", workspaces: "workspaces", currentWorkspaceId: "currentWorkspaceId" }, outputs: { navItemClick: "navItemClick", ctaClick: "ctaClick", searchClick: "searchClick", workspaceSwitchClick: "workspaceSwitchClick", logoutClick: "logoutClick", notificationsClick: "notificationsClick", helpDocsClick: "helpDocsClick", speakerClick: "speakerClick", liveChatClick: "liveChatClick", expandedChange: "expandedChange", profileMenuItemClick: "profileMenuItemClick", workspaceSelected: "workspaceSelected", manageWorkspacesClick: "manageWorkspacesClick" }, viewQueries: [{ propertyName: "profileAnchorRef", first: true, predicate: ["profileAnchor"], descendants: true }, { propertyName: "workspaceAnchorRef", first: true, predicate: ["workspaceAnchor"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div id=\"cqa-ui-root\" class=\"cqa-sb-root\">\n <aside\n class=\"cqa-sb\"\n [class.cqa-sb--expanded]=\"isExpanded\"\n (mouseenter)=\"onAsideMouseEnter()\"\n (mouseleave)=\"onAsideMouseLeave($event)\">\n\n <!-- ===== 1. Workspace header ===== -->\n <div #workspaceAnchor class=\"cqa-sb-header\" [class.cqa-sb-header--expanded]=\"isExpanded\">\n <!-- Collapsed: hamburger chip -->\n <button\n *ngIf=\"!isExpanded\"\n class=\"cqa-sb-burger\"\n (click)=\"openSidebar()\"\n type=\"button\"\n aria-label=\"Open sidebar\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1.33\" stroke-linecap=\"round\"\n width=\"16\" height=\"16\">\n <line x1=\"2\" y1=\"4\" x2=\"14\" y2=\"4\"/>\n <line x1=\"2\" y1=\"8\" x2=\"14\" y2=\"8\"/>\n <line x1=\"2\" y1=\"12\" x2=\"14\" y2=\"12\"/>\n </svg>\n </button>\n\n <!-- Expanded: workspace selector + pin (unpinned) or close (pinned) -->\n <ng-container *ngIf=\"isExpanded\">\n <button class=\"cqa-sb-ws\" type=\"button\" (click)=\"onWorkspaceClick()\">\n <span class=\"cqa-sb-ws-main\">\n <span class=\"cqa-sb-ws-avatar\">\n <img *ngIf=\"workspaceLogoSafe; else defaultLogoTpl\"\n class=\"cqa-sb-ws-logo\"\n [src]=\"workspaceLogoSafe\"\n [alt]=\"config?.workspaceName || 'Workspace logo'\" />\n <ng-template #defaultLogoTpl>\n <svg class=\"cqa-sb-ws-default\" width=\"36\" height=\"36\" viewBox=\"0 0 40 40\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"9\" fill=\"url(#cqa-sb-ws-grad)\"/>\n <g filter=\"url(#cqa-sb-ws-shadow)\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"9\" fill=\"white\" fill-opacity=\"0.01\" shape-rendering=\"crispEdges\"/>\n </g>\n <rect width=\"8.07969\" height=\"2.59969\" rx=\"1.29985\" transform=\"matrix(0.0555427 -0.998456 0.998194 0.0600698 10.3188 28.9912)\" fill=\"#97AFC5\"/>\n <rect width=\"8.0708\" height=\"2.60278\" rx=\"1.30139\" transform=\"matrix(-0.173269 -0.984874 0.982367 -0.186964 27.3413 29.4043)\" fill=\"#97AFC5\"/>\n <path d=\"M11.1884 23.5958C11.4549 23.7473 11.7865 23.6502 11.9291 23.3789L13.3623 20.6523C13.5049 20.381 13.4045 20.0382 13.1381 19.8867C12.2055 19.3564 11.0448 19.6964 10.5457 20.646L10.4037 20.9162C9.90451 21.8658 10.2559 23.0655 11.1884 23.5958Z\" fill=\"#C2DBF2\"/>\n <path d=\"M11.6714 22.4677C11.6714 20.1863 13.5208 18.3369 15.8022 18.3369H23.9505C26.2319 18.3369 28.0813 20.1863 28.0813 22.4677V23.7953C28.0813 28.3268 24.4078 32.0003 19.8764 32.0003C15.3449 32.0003 11.6714 28.3268 11.6714 23.7953V22.4677Z\" fill=\"#D7E7F9\"/>\n <path d=\"M28.8116 23.7315C28.5451 23.883 28.2135 23.7859 28.0709 23.5146L26.6377 20.7881C26.4951 20.5167 26.5955 20.174 26.8619 20.0225C27.7945 19.4922 28.9552 19.8321 29.4543 20.7817L29.5963 21.0519C30.0955 22.0015 29.7441 23.2012 28.8116 23.7315Z\" fill=\"#C2DBF2\"/>\n <path d=\"M26.3774 19.1758C26.3774 19.8026 23.4762 20.3107 19.8974 20.3107C16.3186 20.3107 13.4175 19.8026 13.4175 19.1758C13.4175 18.5491 16.3186 18.041 19.8974 18.041C23.4762 18.041 26.3774 18.5491 26.3774 19.1758Z\" fill=\"#C2DBF2\"/>\n <path d=\"M21.7507 26.7785L21.6221 26.6448C22.1471 25.7868 22.0506 24.6335 21.3329 23.8869C20.5026 23.0234 19.1473 23.0234 18.317 23.8869C17.4868 24.7505 17.4868 26.1601 18.317 27.0236C19.0348 27.7702 20.1437 27.8705 20.9686 27.3245L21.0972 27.4582L21.2686 27.6365C21.4507 27.8259 21.7453 27.8259 21.9221 27.6365C22.1042 27.4471 22.1042 27.1406 21.9221 26.9568L21.7507 26.7785ZM18.9706 26.3439C18.4992 25.8536 18.4992 25.0569 18.9706 24.5722C19.4419 24.0819 20.208 24.0819 20.674 24.5722C21.0275 24.9399 21.1132 25.4804 20.9365 25.9372C20.8775 26.0876 20.7918 26.2269 20.674 26.3439C20.5561 26.4665 20.4222 26.5556 20.2829 26.6169C19.8491 26.8008 19.3241 26.7116 18.9706 26.3439Z\" fill=\"#6366F1\"/>\n <rect width=\"17.4575\" height=\"10.8035\" rx=\"5.40176\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 11.1401 6.9248)\" fill=\"#D7E7F9\"/>\n <path d=\"M11.9068 9.74961C12.2603 9.75414 12.5435 10.0444 12.5393 10.3979L12.4926 14.3376C12.4884 14.6911 12.1985 14.974 11.845 14.9694C10.6078 14.9536 9.61668 13.9377 9.63133 12.7005L9.64009 11.9611C9.65475 10.7239 10.6696 9.73376 11.9068 9.74961Z\" fill=\"#C2DBF2\"/>\n <path d=\"M27.7011 15.1723C27.3476 15.1677 27.0644 14.8775 27.0686 14.524L27.1153 10.5843C27.1195 10.2308 27.4094 9.94792 27.7629 9.95245C29.0001 9.9683 29.9912 10.9841 29.9766 12.2214L29.9678 12.9607C29.9532 14.198 28.9383 15.1881 27.7011 15.1723Z\" fill=\"#C2DBF2\"/>\n <rect width=\"13.0931\" height=\"6.80894\" rx=\"3.40447\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 13.2988 8.9502)\" fill=\"#2F445B\"/>\n <ellipse cx=\"0.872874\" cy=\"0.907858\" rx=\"0.872874\" ry=\"0.907858\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 22.2153 11.5605)\" fill=\"#6366F1\"/>\n <ellipse cx=\"0.872874\" cy=\"0.907858\" rx=\"0.872874\" ry=\"0.907858\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 15.6255 11.4766)\" fill=\"#6366F1\"/>\n <path d=\"M16.9047 6.66572C16.9091 6.29805 17.2106 6.00382 17.5783 6.00853L22.1819 6.06752C22.5496 6.07223 22.8441 6.3741 22.8398 6.74177C22.8245 8.02859 21.769 9.05841 20.4822 9.04192L19.2071 9.02558C17.9203 9.00909 16.8895 7.95254 16.9047 6.66572Z\" fill=\"#C2DBF2\"/>\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"9\" fill=\"url(#cqa-sb-ws-gloss)\"/>\n <defs>\n <filter id=\"cqa-sb-ws-shadow\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n <feOffset dy=\"1\"/>\n <feGaussianBlur stdDeviation=\"1\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0\"/>\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\"/>\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n <feMorphology radius=\"1\" operator=\"erode\" in=\"SourceAlpha\" result=\"effect2_innerShadow\"/>\n <feOffset/>\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"/>\n <feBlend mode=\"normal\" in2=\"effect1_dropShadow\" result=\"effect2_innerShadow\"/>\n </filter>\n <linearGradient id=\"cqa-sb-ws-grad\" x1=\"2\" y1=\"1\" x2=\"38\" y2=\"37\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#CCE1F4\"/>\n <stop offset=\"1\" stop-color=\"#D7E7F9\"/>\n </linearGradient>\n <linearGradient id=\"cqa-sb-ws-gloss\" x1=\"20\" y1=\"1\" x2=\"20\" y2=\"37\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"white\" stop-opacity=\"0.5\"/>\n <stop offset=\"0.5\" stop-color=\"white\" stop-opacity=\"0\"/>\n </linearGradient>\n </defs>\n </svg>\n </ng-template>\n <span *ngIf=\"config?.workspaceStatus === 'live'\" class=\"cqa-sb-ws-status\"></span>\n </span>\n <span class=\"cqa-sb-ws-info\">\n <span class=\"cqa-sb-ws-name-row\">\n <span class=\"cqa-sb-ws-name\">{{ config?.workspaceName || 'Workspace' }}</span>\n </span>\n </span>\n </span>\n <span class=\"cqa-sb-ws-switch\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1.17\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n width=\"14\" height=\"14\">\n <polyline points=\"3,9 7,12 11,9\"/>\n <polyline points=\"3,5 7,2 11,5\"/>\n </svg>\n </span>\n </button>\n\n <button\n *ngIf=\"isPinned || config?.showSidebarPin !== false\"\n class=\"cqa-sb-pin-or-close\"\n type=\"button\"\n (click)=\"isPinned ? closeSidebar() : pinSidebar()\"\n [matTooltip]=\"isPinned ? 'Close sidebar' : 'Pin sidebar'\"\n [matTooltipPosition]=\"isPinned ? 'right' : 'left'\"\n [attr.aria-label]=\"isPinned ? 'Close sidebar' : 'Pin sidebar'\">\n <svg\n *ngIf=\"isPinned\"\n viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <rect x=\"1.5\" y=\"1.5\" width=\"15\" height=\"15\" rx=\"2.5\"/>\n <line x1=\"6.5\" y1=\"1.5\" x2=\"6.5\" y2=\"16.5\"/>\n <polyline points=\"10.5,12 8.5,9 10.5,6\"/>\n </svg>\n <svg\n *ngIf=\"!isPinned\"\n viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <path d=\"M9 3v4M7 3h4v4l2 3H5l2-3V3z\"/>\n <line x1=\"9\" y1=\"10\" x2=\"9\" y2=\"15\"/>\n </svg>\n </button>\n </ng-container>\n </div>\n\n <!-- ===== 2. Search ===== -->\n <div *ngIf=\"config?.showSearch !== false\" class=\"cqa-sb-search-wrap\">\n <button class=\"cqa-sb-search\" type=\"button\"\n [matTooltip]=\"!isExpanded ? 'Search' : ''\" matTooltipPosition=\"right\"\n (click)=\"searchClick.emit()\">\n <svg class=\"cqa-sb-search-icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"16\" height=\"16\">\n <circle cx=\"7\" cy=\"7\" r=\"4.5\"/>\n <line x1=\"10.5\" y1=\"10.5\" x2=\"13.5\" y2=\"13.5\"/>\n </svg>\n <span class=\"cqa-sb-search-text\" [class.cqa-sb-search-text--visible]=\"isExpanded\">\n {{ config?.searchPlaceholder || 'Search Anything...' }}\n </span>\n <span\n *ngIf=\"config?.showSearchShortcut !== false && isExpanded\"\n class=\"cqa-sb-search-kbd\">\u2318K</span>\n </button>\n </div>\n\n <!-- ===== 3. CTA ===== -->\n <div *ngIf=\"config?.showCta !== false\" class=\"cqa-sb-cta-wrap\">\n <button class=\"cqa-sb-cta\" type=\"button\"\n [matTooltip]=\"!isExpanded ? (config?.ctaLabel || 'New') : ''\" matTooltipPosition=\"right\"\n (click)=\"ctaClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"\n stroke-linecap=\"round\" width=\"18\" height=\"18\">\n <line x1=\"9\" y1=\"3.75\" x2=\"9\" y2=\"14.25\"/>\n <line x1=\"3.75\" y1=\"9\" x2=\"14.25\" y2=\"9\"/>\n </svg>\n <span class=\"cqa-sb-cta-text\" [class.cqa-sb-cta-text--visible]=\"isExpanded\">\n {{ config?.ctaLabel || 'New Test Cases' }}\n </span>\n </button>\n </div>\n\n <!-- ===== 4. Nav menu ===== -->\n <cqa-nav-menu\n [items]=\"navItems\"\n [activeId]=\"activeNavId\"\n [isExpanded]=\"isExpanded\"\n [openParents]=\"openParents\"\n (itemClick)=\"onNavItemClick($event)\">\n </cqa-nav-menu>\n\n <!-- ===== 5. Utility bar ===== -->\n <div class=\"cqa-sb-utility\" [class.cqa-sb-utility--expanded]=\"isExpanded\">\n <!-- Expanded: 2 wide tiles (Help & docs + Live chat) -->\n <ng-container *ngIf=\"isExpanded\">\n <button\n *ngIf=\"config?.showHelpDocs !== false\"\n class=\"cqa-sb-util-tile\"\n type=\"button\"\n (click)=\"helpDocsClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <circle cx=\"9\" cy=\"9\" r=\"7.25\"/>\n <path d=\"M6.85 7a2.15 2.15 0 0 1 4.18.75c0 1.4-2.15 1.8-2.15 3.05\"/>\n <line x1=\"9\" y1=\"13.4\" x2=\"9.01\" y2=\"13.4\"/>\n </svg>\n <span class=\"cqa-sb-util-tile-label\">{{ config?.helpDocsLabel || 'Help & docs' }}</span>\n </button>\n\n <button\n *ngIf=\"config?.showLiveChat !== false\"\n class=\"cqa-sb-util-tile\"\n type=\"button\"\n (click)=\"liveChatClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <path d=\"M16 2H2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h3v3l4.5-3H16a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1z\"/>\n </svg>\n <span class=\"cqa-sb-util-tile-label\">Live chat</span>\n </button>\n </ng-container>\n\n <!-- Collapsed: help + live chat only (notifications / speaker are not shown on the rail) -->\n <ng-container *ngIf=\"!isExpanded\">\n <button\n *ngIf=\"config?.showHelpDocs !== false\"\n class=\"cqa-sb-util-compact\"\n type=\"button\"\n [matTooltip]=\"config?.helpDocsLabel || 'Help & docs'\" matTooltipPosition=\"right\"\n (click)=\"helpDocsClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <circle cx=\"9\" cy=\"9\" r=\"7.25\"/>\n <path d=\"M6.85 7a2.15 2.15 0 0 1 4.18.75c0 1.4-2.15 1.8-2.15 3.05\"/>\n <line x1=\"9\" y1=\"13.4\" x2=\"9.01\" y2=\"13.4\"/>\n </svg>\n </button>\n\n <button\n *ngIf=\"config?.showLiveChat !== false\"\n class=\"cqa-sb-util-compact\"\n type=\"button\"\n matTooltip=\"Live chat\" matTooltipPosition=\"right\"\n (click)=\"liveChatClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <path d=\"M16 2H2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h3v3l4.5-3H16a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1z\"/>\n </svg>\n </button>\n </ng-container>\n </div>\n\n <!-- ===== 6. Profile card ===== -->\n <div class=\"cqa-sb-profile\" #profileAnchor>\n <button class=\"cqa-sb-profile-main\" type=\"button\"\n [matTooltip]=\"!isExpanded ? (config?.userName || profileUser?.name || '') : ''\" matTooltipPosition=\"right\"\n [attr.aria-haspopup]=\"(profileUser && profileMenuEntries?.length) ? 'menu' : null\"\n [attr.aria-expanded]=\"(profileUser && profileMenuEntries?.length) ? isProfileMenuOpen : null\"\n (click)=\"onProfileClick()\">\n <div class=\"cqa-sb-profile-avatar\">{{ config?.userInitials || '?' }}</div>\n <div class=\"cqa-sb-profile-info\" [class.cqa-sb-profile-info--visible]=\"isExpanded\">\n <span class=\"cqa-sb-profile-name\">{{ config?.userName }}</span>\n <span *ngIf=\"config?.userRole\" class=\"cqa-sb-profile-role\">{{ config.userRole }}</span>\n </div>\n </button>\n <button *ngIf=\"isExpanded\" class=\"cqa-sb-profile-logout\" type=\"button\"\n aria-label=\"Logout\" (click)=\"logoutClick.emit()\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"16\" height=\"16\">\n <path d=\"M6 14H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h3\"/>\n <polyline points=\"11,11 14,8 11,5\"/>\n <line x1=\"14\" y1=\"8\" x2=\"6\" y2=\"8\"/>\n </svg>\n </button>\n </div>\n\n <cqa-profile-menu\n *ngIf=\"isProfileMenuOpen && profileUser && profileMenuEntries?.length\"\n [user]=\"profileUser\"\n [entries]=\"profileMenuEntries\"\n [anchor]=\"profileAnchorRef?.nativeElement || null\"\n (itemClick)=\"onProfileMenuItemClick($event)\"\n (dismissed)=\"onProfileMenuDismissed()\">\n </cqa-profile-menu>\n\n <cqa-workspace-menu\n *ngIf=\"isWorkspaceMenuOpen && workspaces?.length\"\n [workspaces]=\"workspaces\"\n [currentWorkspaceId]=\"currentWorkspaceId\"\n [workspaceName]=\"config?.workspaceName\"\n [anchor]=\"workspaceAnchorRef?.nativeElement || null\"\n (workspaceSelected)=\"onWorkspaceMenuItemClick($event)\"\n (manageWorkspacesClick)=\"onManageWorkspacesClick()\"\n (dismissed)=\"onWorkspaceMenuDismissed()\">\n </cqa-workspace-menu>\n\n </aside>\n</div>\n", styles: ["*{box-sizing:border-box}:host{display:flex;flex-direction:column;flex:1;align-self:stretch;min-height:0;max-height:100%;height:100%;flex-shrink:0}.cqa-sb-root{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;max-height:100%;width:100%}.cqa-sb{background:#3f43ee;color:#fff;flex:1 1 auto;min-height:0;max-height:100%;height:100%;display:flex;flex-direction:column;flex-shrink:0;width:60px;transition:width .24s cubic-bezier(.32,.72,0,1);position:relative;z-index:50;overflow-x:visible;overflow-y:hidden}.cqa-sb--expanded{width:264px;overflow-x:hidden}.cqa-sb>cqa-nav-menu{flex:1 1 0;min-height:0;min-width:0;display:flex;flex-direction:column}.cqa-sb-header{padding:10px;position:relative;border-bottom:1px solid rgba(255,255,255,.08);min-height:51px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cqa-sb-header--expanded{justify-content:flex-start;padding:12px 40px 10px 12px;height:71px;max-height:71px;gap:0}.cqa-sb-burger{width:28px;height:28px;border-radius:7px;background:rgba(216,217,252,.18);display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;color:#d8d9fc;flex-shrink:0;transition:background .15s,color .15s}.cqa-sb-burger:hover{background:rgba(216,217,252,.28);color:#fff}.cqa-sb-pin-or-close{position:absolute;right:10px;top:50%;transform:translateY(calc(-50% + 1px));width:28px;height:28px;border-radius:7px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:#d8d9fc;flex-shrink:0;transition:background .15s,color .15s}.cqa-sb-pin-or-close:hover{background:rgba(255,255,255,.1);color:#fff}.cqa-sb-ws{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 14px 6px 6px;border-radius:10px;line-height:1;height:48px;transition:background .12s;flex:1;min-width:0;text-align:left;background:transparent;border:none;cursor:pointer;color:#fff;overflow:hidden}.cqa-sb-ws:hover{background:rgba(255,255,255,.08)}.cqa-sb-ws-main{display:flex;align-items:center;gap:10px;min-width:0}.cqa-sb-ws-avatar{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;overflow:hidden}.cqa-sb-ws-logo{position:relative;z-index:1;width:100%;height:100%;object-fit:contain;display:block}.cqa-sb-ws-default{position:relative;z-index:1;display:block;pointer-events:none}.cqa-sb-ws-status{position:absolute;bottom:-3px;right:-3px;width:12px;height:12px;background:#0dbd7d;border-radius:50%;border:2.5px solid #3f43ee;box-shadow:0 0 6px #0dbd7d}.cqa-sb-ws-info{flex:1;min-width:0;overflow:hidden}.cqa-sb-ws-name-row{display:flex;align-items:center;gap:6px}.cqa-sb-ws-name{font-weight:600;font-size:14px;line-height:16.8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}.cqa-sb-ws-badge{background:rgba(13,189,125,.18);color:#5ed3a8;font-size:9.5px;font-weight:700;padding:1px 6px 1px 4px;border-radius:4px;display:inline-flex;align-items:center;gap:3px;flex-shrink:0;text-transform:uppercase;letter-spacing:.04em}.cqa-sb-ws-badge:before{content:\"\";width:4px;height:4px;background:#0dbd7d;border-radius:50%;box-shadow:0 0 6px #0dbd7d}.cqa-sb-ws-switch{color:#ffffff8c;flex-shrink:0;padding:4px 0 7px;border-radius:6px;display:flex;align-items:center}.cqa-sb-search-wrap{padding:8px 12px;flex-shrink:0}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search-wrap{padding:8px 10px 6px;display:flex;justify-content:center}.cqa-sb-search{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:8px;height:38px;padding:0 12px;font-size:12px;line-height:1;letter-spacing:-.31px;color:#ffffff80;display:flex;align-items:center;gap:8px;width:100%;cursor:pointer;transition:all .15s;overflow:hidden;font-family:inherit}.cqa-sb-search:hover{background:rgba(255,255,255,.08);color:#ffffffbf;border-color:#ffffff29}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search{padding:0;width:40px;max-width:40px;height:40px;min-height:40px;margin:0 auto;justify-content:center;align-items:center;gap:0;background:transparent;border-color:#d8d9fc;border-radius:9px}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search .cqa-sb-search-text,.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search .cqa-sb-search-kbd{flex:0 0 0;width:0;min-width:0;height:0;margin:0;padding:0;overflow:hidden;opacity:0;border:0;pointer-events:none}.cqa-sb-search-icon{flex-shrink:0;width:14px;height:14px}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search-icon{width:16px;height:16px}.cqa-sb-search-text{flex:1;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-weight:400;font-size:12px;line-height:1;letter-spacing:-.31px;color:#ffffff80;opacity:0;transition:opacity .16s 80ms}.cqa-sb-search-text--visible{opacity:1}.cqa-sb-search-kbd{display:inline-flex;align-items:center;justify-content:center;height:16px;font-size:10.5px;line-height:1;letter-spacing:normal;text-align:center;background:rgba(255,255,255,.15);padding:2px 6px;border-radius:4px;color:#ffffffd9;font-family:Menlo,ui-monospace,monospace;flex-shrink:0}.cqa-sb-cta-wrap{padding:8px 12px;flex-shrink:0}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta-wrap{padding:0 10px 12px;display:flex;justify-content:center}.cqa-sb-cta{background:#5256f0;color:#fbfcff;border:none;border-radius:8px;height:38px;padding:10px 24px 10px 16px;font-size:14px;font-weight:600;line-height:14px;letter-spacing:0;width:100%;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;transition:background .15s,transform .15s;overflow:hidden;font-family:inherit}.cqa-sb-cta:hover{background:#5b5ff2;transform:translateY(-1px)}.cqa-sb-cta:active{transform:translateY(0)}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta{padding:0;width:40px;height:40px;min-height:40px;margin:0 auto;position:relative;background:transparent;color:#fff}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta:before{content:\"\";position:absolute;inset:0;border-radius:9px;background:rgba(177,178,248,.22);pointer-events:none}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta svg{position:relative;z-index:1;width:16px;height:16px}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta{box-shadow:inset 0 0 0 1px #d8d9fc38}.cqa-sb-cta-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-weight:600;font-size:14px;line-height:1;letter-spacing:0;color:#fbfcff;opacity:0;transition:opacity .16s 80ms;position:relative;z-index:1}.cqa-sb-cta-text--visible{opacity:1}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta-text{display:none}.cqa-sb-utility{border-top:none;box-shadow:inset 0 1px #ffffff1a;flex-shrink:0}.cqa-sb-utility--expanded{display:flex;align-items:center;justify-content:space-between;height:68px;gap:0;padding:8px 10px}.cqa-sb-utility:not(.cqa-sb-utility--expanded){display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:1px;padding:6px 10px}.cqa-sb-util-tile{width:110px;max-width:110px;border-radius:9px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:8px 6px 6px;color:#ffffffd9;background:rgba(255,255,255,.06);border:none;cursor:pointer;transition:background .12s,color .12s;font-family:inherit}.cqa-sb-util-tile:hover{background:rgba(177,178,248,.22);color:#fff}.cqa-sb-util-tile-label{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:10.5px;font-weight:600;line-height:10.5px;letter-spacing:.1px;color:#ffffffd9;text-align:center;white-space:nowrap}.cqa-sb-util-compact{position:relative;width:36px;height:34px;border-radius:8px;display:flex;align-items:center;justify-content:center;color:#ffffffe0;background:transparent;border:none;cursor:pointer;transition:background .12s,color .12s;padding:0;flex-shrink:0}.cqa-sb-util-compact:hover{background:rgba(255,255,255,.08);color:#fff}.cqa-sb-util-compact-dot{position:absolute;top:6px;right:6px;width:8px;height:8px;background:#ee3f3f;border-radius:4px;border:2px solid #3f43ee;pointer-events:none}.cqa-sb-profile{border-top:1px solid rgba(255,255,255,.1);padding:12px 14px;height:62px;display:flex;align-items:center;gap:12px;background:rgba(0,0,0,.16);overflow:hidden;position:relative;width:100%;flex-shrink:0;color:#fff}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-profile{justify-content:center;padding:12px 0;height:auto;gap:0;background:rgba(0,0,0,.12);border-top-color:#ffffff1f}.cqa-sb-profile-main{flex:1;min-width:0;display:flex;align-items:center;gap:12px;padding:0;background:transparent;border:none;border-radius:8px;cursor:pointer;color:inherit;font-family:inherit;text-align:left;transition:background .15s}.cqa-sb-profile-main:hover{background:rgba(0,0,0,.1)}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-profile-main{justify-content:center;flex:0 0 auto}.cqa-sb-profile-avatar{width:34px;height:34px;border-radius:17px;background:linear-gradient(135deg,#f472b6,#db2777);display:flex;align-items:center;justify-content:center;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:12px;font-weight:700;line-height:1;letter-spacing:0;color:#fff;flex-shrink:0;box-shadow:0 0 0 2px #ffffff26}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-profile-avatar{width:32px;height:32px;border-radius:16px;font-size:11.5px}.cqa-sb-profile-info{flex:1;min-width:0;overflow:hidden;opacity:0;transition:opacity .16s 80ms;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px}.cqa-sb-profile-info--visible{opacity:1}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-profile-info{display:none}.cqa-sb-profile-name{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-weight:600;font-size:12.5px;line-height:13.75px;letter-spacing:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}.cqa-sb-profile-role{display:inline-block;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:9px;font-weight:700;line-height:12.6px;letter-spacing:0;background:rgba(216,217,252,.22);padding:2px 7px;border-radius:999px;color:#fff;border:1px solid rgba(216,217,252,.2);white-space:nowrap;align-self:flex-start}.cqa-sb-profile-logout{color:#ffffff8c;padding:6px 6px 9px;border-radius:6px;background:transparent;border:none;cursor:pointer;flex-shrink:0;transition:background .12s,color .12s;display:flex;align-items:center;justify-content:center}.cqa-sb-profile-logout:hover{background:rgba(255,255,255,.12);color:#fff}\n"], components: [{ type: i2.NavMenuComponent, selector: "cqa-nav-menu", inputs: ["items", "activeId", "isExpanded", "openParents"], outputs: ["itemClick"] }, { type: i3.ProfileMenuComponent, selector: "cqa-profile-menu", inputs: ["user", "entries", "anchor", "popoverId"], outputs: ["itemClick", "dismissed"] }, { type: i4.WorkspaceMenuComponent, selector: "cqa-workspace-menu", inputs: ["workspaces", "currentWorkspaceId", "workspaceName", "anchor", "popoverId"], outputs: ["workspaceSelected", "manageWorkspacesClick", "dismissed"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
234
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SidebarComponent, decorators: [{
235
+ type: Component,
236
+ args: [{ selector: 'cqa-sidebar', template: "<div id=\"cqa-ui-root\" class=\"cqa-sb-root\">\n <aside\n class=\"cqa-sb\"\n [class.cqa-sb--expanded]=\"isExpanded\"\n (mouseenter)=\"onAsideMouseEnter()\"\n (mouseleave)=\"onAsideMouseLeave($event)\">\n\n <!-- ===== 1. Workspace header ===== -->\n <div #workspaceAnchor class=\"cqa-sb-header\" [class.cqa-sb-header--expanded]=\"isExpanded\">\n <!-- Collapsed: hamburger chip -->\n <button\n *ngIf=\"!isExpanded\"\n class=\"cqa-sb-burger\"\n (click)=\"openSidebar()\"\n type=\"button\"\n aria-label=\"Open sidebar\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1.33\" stroke-linecap=\"round\"\n width=\"16\" height=\"16\">\n <line x1=\"2\" y1=\"4\" x2=\"14\" y2=\"4\"/>\n <line x1=\"2\" y1=\"8\" x2=\"14\" y2=\"8\"/>\n <line x1=\"2\" y1=\"12\" x2=\"14\" y2=\"12\"/>\n </svg>\n </button>\n\n <!-- Expanded: workspace selector + pin (unpinned) or close (pinned) -->\n <ng-container *ngIf=\"isExpanded\">\n <button class=\"cqa-sb-ws\" type=\"button\" (click)=\"onWorkspaceClick()\">\n <span class=\"cqa-sb-ws-main\">\n <span class=\"cqa-sb-ws-avatar\">\n <img *ngIf=\"workspaceLogoSafe; else defaultLogoTpl\"\n class=\"cqa-sb-ws-logo\"\n [src]=\"workspaceLogoSafe\"\n [alt]=\"config?.workspaceName || 'Workspace logo'\" />\n <ng-template #defaultLogoTpl>\n <svg class=\"cqa-sb-ws-default\" width=\"36\" height=\"36\" viewBox=\"0 0 40 40\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"9\" fill=\"url(#cqa-sb-ws-grad)\"/>\n <g filter=\"url(#cqa-sb-ws-shadow)\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"9\" fill=\"white\" fill-opacity=\"0.01\" shape-rendering=\"crispEdges\"/>\n </g>\n <rect width=\"8.07969\" height=\"2.59969\" rx=\"1.29985\" transform=\"matrix(0.0555427 -0.998456 0.998194 0.0600698 10.3188 28.9912)\" fill=\"#97AFC5\"/>\n <rect width=\"8.0708\" height=\"2.60278\" rx=\"1.30139\" transform=\"matrix(-0.173269 -0.984874 0.982367 -0.186964 27.3413 29.4043)\" fill=\"#97AFC5\"/>\n <path d=\"M11.1884 23.5958C11.4549 23.7473 11.7865 23.6502 11.9291 23.3789L13.3623 20.6523C13.5049 20.381 13.4045 20.0382 13.1381 19.8867C12.2055 19.3564 11.0448 19.6964 10.5457 20.646L10.4037 20.9162C9.90451 21.8658 10.2559 23.0655 11.1884 23.5958Z\" fill=\"#C2DBF2\"/>\n <path d=\"M11.6714 22.4677C11.6714 20.1863 13.5208 18.3369 15.8022 18.3369H23.9505C26.2319 18.3369 28.0813 20.1863 28.0813 22.4677V23.7953C28.0813 28.3268 24.4078 32.0003 19.8764 32.0003C15.3449 32.0003 11.6714 28.3268 11.6714 23.7953V22.4677Z\" fill=\"#D7E7F9\"/>\n <path d=\"M28.8116 23.7315C28.5451 23.883 28.2135 23.7859 28.0709 23.5146L26.6377 20.7881C26.4951 20.5167 26.5955 20.174 26.8619 20.0225C27.7945 19.4922 28.9552 19.8321 29.4543 20.7817L29.5963 21.0519C30.0955 22.0015 29.7441 23.2012 28.8116 23.7315Z\" fill=\"#C2DBF2\"/>\n <path d=\"M26.3774 19.1758C26.3774 19.8026 23.4762 20.3107 19.8974 20.3107C16.3186 20.3107 13.4175 19.8026 13.4175 19.1758C13.4175 18.5491 16.3186 18.041 19.8974 18.041C23.4762 18.041 26.3774 18.5491 26.3774 19.1758Z\" fill=\"#C2DBF2\"/>\n <path d=\"M21.7507 26.7785L21.6221 26.6448C22.1471 25.7868 22.0506 24.6335 21.3329 23.8869C20.5026 23.0234 19.1473 23.0234 18.317 23.8869C17.4868 24.7505 17.4868 26.1601 18.317 27.0236C19.0348 27.7702 20.1437 27.8705 20.9686 27.3245L21.0972 27.4582L21.2686 27.6365C21.4507 27.8259 21.7453 27.8259 21.9221 27.6365C22.1042 27.4471 22.1042 27.1406 21.9221 26.9568L21.7507 26.7785ZM18.9706 26.3439C18.4992 25.8536 18.4992 25.0569 18.9706 24.5722C19.4419 24.0819 20.208 24.0819 20.674 24.5722C21.0275 24.9399 21.1132 25.4804 20.9365 25.9372C20.8775 26.0876 20.7918 26.2269 20.674 26.3439C20.5561 26.4665 20.4222 26.5556 20.2829 26.6169C19.8491 26.8008 19.3241 26.7116 18.9706 26.3439Z\" fill=\"#6366F1\"/>\n <rect width=\"17.4575\" height=\"10.8035\" rx=\"5.40176\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 11.1401 6.9248)\" fill=\"#D7E7F9\"/>\n <path d=\"M11.9068 9.74961C12.2603 9.75414 12.5435 10.0444 12.5393 10.3979L12.4926 14.3376C12.4884 14.6911 12.1985 14.974 11.845 14.9694C10.6078 14.9536 9.61668 13.9377 9.63133 12.7005L9.64009 11.9611C9.65475 10.7239 10.6696 9.73376 11.9068 9.74961Z\" fill=\"#C2DBF2\"/>\n <path d=\"M27.7011 15.1723C27.3476 15.1677 27.0644 14.8775 27.0686 14.524L27.1153 10.5843C27.1195 10.2308 27.4094 9.94792 27.7629 9.95245C29.0001 9.9683 29.9912 10.9841 29.9766 12.2214L29.9678 12.9607C29.9532 14.198 28.9383 15.1881 27.7011 15.1723Z\" fill=\"#C2DBF2\"/>\n <rect width=\"13.0931\" height=\"6.80894\" rx=\"3.40447\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 13.2988 8.9502)\" fill=\"#2F445B\"/>\n <ellipse cx=\"0.872874\" cy=\"0.907858\" rx=\"0.872874\" ry=\"0.907858\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 22.2153 11.5605)\" fill=\"#6366F1\"/>\n <ellipse cx=\"0.872874\" cy=\"0.907858\" rx=\"0.872874\" ry=\"0.907858\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 15.6255 11.4766)\" fill=\"#6366F1\"/>\n <path d=\"M16.9047 6.66572C16.9091 6.29805 17.2106 6.00382 17.5783 6.00853L22.1819 6.06752C22.5496 6.07223 22.8441 6.3741 22.8398 6.74177C22.8245 8.02859 21.769 9.05841 20.4822 9.04192L19.2071 9.02558C17.9203 9.00909 16.8895 7.95254 16.9047 6.66572Z\" fill=\"#C2DBF2\"/>\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"9\" fill=\"url(#cqa-sb-ws-gloss)\"/>\n <defs>\n <filter id=\"cqa-sb-ws-shadow\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n <feOffset dy=\"1\"/>\n <feGaussianBlur stdDeviation=\"1\"/>\n <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0\"/>\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\"/>\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n <feMorphology radius=\"1\" operator=\"erode\" in=\"SourceAlpha\" result=\"effect2_innerShadow\"/>\n <feOffset/>\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"/>\n <feBlend mode=\"normal\" in2=\"effect1_dropShadow\" result=\"effect2_innerShadow\"/>\n </filter>\n <linearGradient id=\"cqa-sb-ws-grad\" x1=\"2\" y1=\"1\" x2=\"38\" y2=\"37\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#CCE1F4\"/>\n <stop offset=\"1\" stop-color=\"#D7E7F9\"/>\n </linearGradient>\n <linearGradient id=\"cqa-sb-ws-gloss\" x1=\"20\" y1=\"1\" x2=\"20\" y2=\"37\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"white\" stop-opacity=\"0.5\"/>\n <stop offset=\"0.5\" stop-color=\"white\" stop-opacity=\"0\"/>\n </linearGradient>\n </defs>\n </svg>\n </ng-template>\n <span *ngIf=\"config?.workspaceStatus === 'live'\" class=\"cqa-sb-ws-status\"></span>\n </span>\n <span class=\"cqa-sb-ws-info\">\n <span class=\"cqa-sb-ws-name-row\">\n <span class=\"cqa-sb-ws-name\">{{ config?.workspaceName || 'Workspace' }}</span>\n </span>\n </span>\n </span>\n <span class=\"cqa-sb-ws-switch\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1.17\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n width=\"14\" height=\"14\">\n <polyline points=\"3,9 7,12 11,9\"/>\n <polyline points=\"3,5 7,2 11,5\"/>\n </svg>\n </span>\n </button>\n\n <button\n *ngIf=\"isPinned || config?.showSidebarPin !== false\"\n class=\"cqa-sb-pin-or-close\"\n type=\"button\"\n (click)=\"isPinned ? closeSidebar() : pinSidebar()\"\n [matTooltip]=\"isPinned ? 'Close sidebar' : 'Pin sidebar'\"\n [matTooltipPosition]=\"isPinned ? 'right' : 'left'\"\n [attr.aria-label]=\"isPinned ? 'Close sidebar' : 'Pin sidebar'\">\n <svg\n *ngIf=\"isPinned\"\n viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <rect x=\"1.5\" y=\"1.5\" width=\"15\" height=\"15\" rx=\"2.5\"/>\n <line x1=\"6.5\" y1=\"1.5\" x2=\"6.5\" y2=\"16.5\"/>\n <polyline points=\"10.5,12 8.5,9 10.5,6\"/>\n </svg>\n <svg\n *ngIf=\"!isPinned\"\n viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <path d=\"M9 3v4M7 3h4v4l2 3H5l2-3V3z\"/>\n <line x1=\"9\" y1=\"10\" x2=\"9\" y2=\"15\"/>\n </svg>\n </button>\n </ng-container>\n </div>\n\n <!-- ===== 2. Search ===== -->\n <div *ngIf=\"config?.showSearch !== false\" class=\"cqa-sb-search-wrap\">\n <button class=\"cqa-sb-search\" type=\"button\"\n [matTooltip]=\"!isExpanded ? 'Search' : ''\" matTooltipPosition=\"right\"\n (click)=\"searchClick.emit()\">\n <svg class=\"cqa-sb-search-icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"16\" height=\"16\">\n <circle cx=\"7\" cy=\"7\" r=\"4.5\"/>\n <line x1=\"10.5\" y1=\"10.5\" x2=\"13.5\" y2=\"13.5\"/>\n </svg>\n <span class=\"cqa-sb-search-text\" [class.cqa-sb-search-text--visible]=\"isExpanded\">\n {{ config?.searchPlaceholder || 'Search Anything...' }}\n </span>\n <span\n *ngIf=\"config?.showSearchShortcut !== false && isExpanded\"\n class=\"cqa-sb-search-kbd\">\u2318K</span>\n </button>\n </div>\n\n <!-- ===== 3. CTA ===== -->\n <div *ngIf=\"config?.showCta !== false\" class=\"cqa-sb-cta-wrap\">\n <button class=\"cqa-sb-cta\" type=\"button\"\n [matTooltip]=\"!isExpanded ? (config?.ctaLabel || 'New') : ''\" matTooltipPosition=\"right\"\n (click)=\"ctaClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"\n stroke-linecap=\"round\" width=\"18\" height=\"18\">\n <line x1=\"9\" y1=\"3.75\" x2=\"9\" y2=\"14.25\"/>\n <line x1=\"3.75\" y1=\"9\" x2=\"14.25\" y2=\"9\"/>\n </svg>\n <span class=\"cqa-sb-cta-text\" [class.cqa-sb-cta-text--visible]=\"isExpanded\">\n {{ config?.ctaLabel || 'New Test Cases' }}\n </span>\n </button>\n </div>\n\n <!-- ===== 4. Nav menu ===== -->\n <cqa-nav-menu\n [items]=\"navItems\"\n [activeId]=\"activeNavId\"\n [isExpanded]=\"isExpanded\"\n [openParents]=\"openParents\"\n (itemClick)=\"onNavItemClick($event)\">\n </cqa-nav-menu>\n\n <!-- ===== 5. Utility bar ===== -->\n <div class=\"cqa-sb-utility\" [class.cqa-sb-utility--expanded]=\"isExpanded\">\n <!-- Expanded: 2 wide tiles (Help & docs + Live chat) -->\n <ng-container *ngIf=\"isExpanded\">\n <button\n *ngIf=\"config?.showHelpDocs !== false\"\n class=\"cqa-sb-util-tile\"\n type=\"button\"\n (click)=\"helpDocsClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <circle cx=\"9\" cy=\"9\" r=\"7.25\"/>\n <path d=\"M6.85 7a2.15 2.15 0 0 1 4.18.75c0 1.4-2.15 1.8-2.15 3.05\"/>\n <line x1=\"9\" y1=\"13.4\" x2=\"9.01\" y2=\"13.4\"/>\n </svg>\n <span class=\"cqa-sb-util-tile-label\">{{ config?.helpDocsLabel || 'Help & docs' }}</span>\n </button>\n\n <button\n *ngIf=\"config?.showLiveChat !== false\"\n class=\"cqa-sb-util-tile\"\n type=\"button\"\n (click)=\"liveChatClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <path d=\"M16 2H2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h3v3l4.5-3H16a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1z\"/>\n </svg>\n <span class=\"cqa-sb-util-tile-label\">Live chat</span>\n </button>\n </ng-container>\n\n <!-- Collapsed: help + live chat only (notifications / speaker are not shown on the rail) -->\n <ng-container *ngIf=\"!isExpanded\">\n <button\n *ngIf=\"config?.showHelpDocs !== false\"\n class=\"cqa-sb-util-compact\"\n type=\"button\"\n [matTooltip]=\"config?.helpDocsLabel || 'Help & docs'\" matTooltipPosition=\"right\"\n (click)=\"helpDocsClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <circle cx=\"9\" cy=\"9\" r=\"7.25\"/>\n <path d=\"M6.85 7a2.15 2.15 0 0 1 4.18.75c0 1.4-2.15 1.8-2.15 3.05\"/>\n <line x1=\"9\" y1=\"13.4\" x2=\"9.01\" y2=\"13.4\"/>\n </svg>\n </button>\n\n <button\n *ngIf=\"config?.showLiveChat !== false\"\n class=\"cqa-sb-util-compact\"\n type=\"button\"\n matTooltip=\"Live chat\" matTooltipPosition=\"right\"\n (click)=\"liveChatClick.emit()\">\n <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n <path d=\"M16 2H2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h3v3l4.5-3H16a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1z\"/>\n </svg>\n </button>\n </ng-container>\n </div>\n\n <!-- ===== 6. Profile card ===== -->\n <div class=\"cqa-sb-profile\" #profileAnchor>\n <button class=\"cqa-sb-profile-main\" type=\"button\"\n [matTooltip]=\"!isExpanded ? (config?.userName || profileUser?.name || '') : ''\" matTooltipPosition=\"right\"\n [attr.aria-haspopup]=\"(profileUser && profileMenuEntries?.length) ? 'menu' : null\"\n [attr.aria-expanded]=\"(profileUser && profileMenuEntries?.length) ? isProfileMenuOpen : null\"\n (click)=\"onProfileClick()\">\n <div class=\"cqa-sb-profile-avatar\">{{ config?.userInitials || '?' }}</div>\n <div class=\"cqa-sb-profile-info\" [class.cqa-sb-profile-info--visible]=\"isExpanded\">\n <span class=\"cqa-sb-profile-name\">{{ config?.userName }}</span>\n <span *ngIf=\"config?.userRole\" class=\"cqa-sb-profile-role\">{{ config.userRole }}</span>\n </div>\n </button>\n <button *ngIf=\"isExpanded\" class=\"cqa-sb-profile-logout\" type=\"button\"\n aria-label=\"Logout\" (click)=\"logoutClick.emit()\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"16\" height=\"16\">\n <path d=\"M6 14H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h3\"/>\n <polyline points=\"11,11 14,8 11,5\"/>\n <line x1=\"14\" y1=\"8\" x2=\"6\" y2=\"8\"/>\n </svg>\n </button>\n </div>\n\n <cqa-profile-menu\n *ngIf=\"isProfileMenuOpen && profileUser && profileMenuEntries?.length\"\n [user]=\"profileUser\"\n [entries]=\"profileMenuEntries\"\n [anchor]=\"profileAnchorRef?.nativeElement || null\"\n (itemClick)=\"onProfileMenuItemClick($event)\"\n (dismissed)=\"onProfileMenuDismissed()\">\n </cqa-profile-menu>\n\n <cqa-workspace-menu\n *ngIf=\"isWorkspaceMenuOpen && workspaces?.length\"\n [workspaces]=\"workspaces\"\n [currentWorkspaceId]=\"currentWorkspaceId\"\n [workspaceName]=\"config?.workspaceName\"\n [anchor]=\"workspaceAnchorRef?.nativeElement || null\"\n (workspaceSelected)=\"onWorkspaceMenuItemClick($event)\"\n (manageWorkspacesClick)=\"onManageWorkspacesClick()\"\n (dismissed)=\"onWorkspaceMenuDismissed()\">\n </cqa-workspace-menu>\n\n </aside>\n</div>\n", styles: ["*{box-sizing:border-box}:host{display:flex;flex-direction:column;flex:1;align-self:stretch;min-height:0;max-height:100%;height:100%;flex-shrink:0}.cqa-sb-root{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;max-height:100%;width:100%}.cqa-sb{background:#3f43ee;color:#fff;flex:1 1 auto;min-height:0;max-height:100%;height:100%;display:flex;flex-direction:column;flex-shrink:0;width:60px;transition:width .24s cubic-bezier(.32,.72,0,1);position:relative;z-index:50;overflow-x:visible;overflow-y:hidden}.cqa-sb--expanded{width:264px;overflow-x:hidden}.cqa-sb>cqa-nav-menu{flex:1 1 0;min-height:0;min-width:0;display:flex;flex-direction:column}.cqa-sb-header{padding:10px;position:relative;border-bottom:1px solid rgba(255,255,255,.08);min-height:51px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cqa-sb-header--expanded{justify-content:flex-start;padding:12px 40px 10px 12px;height:71px;max-height:71px;gap:0}.cqa-sb-burger{width:28px;height:28px;border-radius:7px;background:rgba(216,217,252,.18);display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;color:#d8d9fc;flex-shrink:0;transition:background .15s,color .15s}.cqa-sb-burger:hover{background:rgba(216,217,252,.28);color:#fff}.cqa-sb-pin-or-close{position:absolute;right:10px;top:50%;transform:translateY(calc(-50% + 1px));width:28px;height:28px;border-radius:7px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;color:#d8d9fc;flex-shrink:0;transition:background .15s,color .15s}.cqa-sb-pin-or-close:hover{background:rgba(255,255,255,.1);color:#fff}.cqa-sb-ws{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 14px 6px 6px;border-radius:10px;line-height:1;height:48px;transition:background .12s;flex:1;min-width:0;text-align:left;background:transparent;border:none;cursor:pointer;color:#fff;overflow:hidden}.cqa-sb-ws:hover{background:rgba(255,255,255,.08)}.cqa-sb-ws-main{display:flex;align-items:center;gap:10px;min-width:0}.cqa-sb-ws-avatar{width:36px;height:36px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;overflow:hidden}.cqa-sb-ws-logo{position:relative;z-index:1;width:100%;height:100%;object-fit:contain;display:block}.cqa-sb-ws-default{position:relative;z-index:1;display:block;pointer-events:none}.cqa-sb-ws-status{position:absolute;bottom:-3px;right:-3px;width:12px;height:12px;background:#0dbd7d;border-radius:50%;border:2.5px solid #3f43ee;box-shadow:0 0 6px #0dbd7d}.cqa-sb-ws-info{flex:1;min-width:0;overflow:hidden}.cqa-sb-ws-name-row{display:flex;align-items:center;gap:6px}.cqa-sb-ws-name{font-weight:600;font-size:14px;line-height:16.8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}.cqa-sb-ws-badge{background:rgba(13,189,125,.18);color:#5ed3a8;font-size:9.5px;font-weight:700;padding:1px 6px 1px 4px;border-radius:4px;display:inline-flex;align-items:center;gap:3px;flex-shrink:0;text-transform:uppercase;letter-spacing:.04em}.cqa-sb-ws-badge:before{content:\"\";width:4px;height:4px;background:#0dbd7d;border-radius:50%;box-shadow:0 0 6px #0dbd7d}.cqa-sb-ws-switch{color:#ffffff8c;flex-shrink:0;padding:4px 0 7px;border-radius:6px;display:flex;align-items:center}.cqa-sb-search-wrap{padding:8px 12px;flex-shrink:0}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search-wrap{padding:8px 10px 6px;display:flex;justify-content:center}.cqa-sb-search{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:8px;height:38px;padding:0 12px;font-size:12px;line-height:1;letter-spacing:-.31px;color:#ffffff80;display:flex;align-items:center;gap:8px;width:100%;cursor:pointer;transition:all .15s;overflow:hidden;font-family:inherit}.cqa-sb-search:hover{background:rgba(255,255,255,.08);color:#ffffffbf;border-color:#ffffff29}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search{padding:0;width:40px;max-width:40px;height:40px;min-height:40px;margin:0 auto;justify-content:center;align-items:center;gap:0;background:transparent;border-color:#d8d9fc;border-radius:9px}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search .cqa-sb-search-text,.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search .cqa-sb-search-kbd{flex:0 0 0;width:0;min-width:0;height:0;margin:0;padding:0;overflow:hidden;opacity:0;border:0;pointer-events:none}.cqa-sb-search-icon{flex-shrink:0;width:14px;height:14px}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-search-icon{width:16px;height:16px}.cqa-sb-search-text{flex:1;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-weight:400;font-size:12px;line-height:1;letter-spacing:-.31px;color:#ffffff80;opacity:0;transition:opacity .16s 80ms}.cqa-sb-search-text--visible{opacity:1}.cqa-sb-search-kbd{display:inline-flex;align-items:center;justify-content:center;height:16px;font-size:10.5px;line-height:1;letter-spacing:normal;text-align:center;background:rgba(255,255,255,.15);padding:2px 6px;border-radius:4px;color:#ffffffd9;font-family:Menlo,ui-monospace,monospace;flex-shrink:0}.cqa-sb-cta-wrap{padding:8px 12px;flex-shrink:0}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta-wrap{padding:0 10px 12px;display:flex;justify-content:center}.cqa-sb-cta{background:#5256f0;color:#fbfcff;border:none;border-radius:8px;height:38px;padding:10px 24px 10px 16px;font-size:14px;font-weight:600;line-height:14px;letter-spacing:0;width:100%;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;transition:background .15s,transform .15s;overflow:hidden;font-family:inherit}.cqa-sb-cta:hover{background:#5b5ff2;transform:translateY(-1px)}.cqa-sb-cta:active{transform:translateY(0)}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta{padding:0;width:40px;height:40px;min-height:40px;margin:0 auto;position:relative;background:transparent;color:#fff}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta:before{content:\"\";position:absolute;inset:0;border-radius:9px;background:rgba(177,178,248,.22);pointer-events:none}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta svg{position:relative;z-index:1;width:16px;height:16px}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta{box-shadow:inset 0 0 0 1px #d8d9fc38}.cqa-sb-cta-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-weight:600;font-size:14px;line-height:1;letter-spacing:0;color:#fbfcff;opacity:0;transition:opacity .16s 80ms;position:relative;z-index:1}.cqa-sb-cta-text--visible{opacity:1}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-cta-text{display:none}.cqa-sb-utility{border-top:none;box-shadow:inset 0 1px #ffffff1a;flex-shrink:0}.cqa-sb-utility--expanded{display:flex;align-items:center;justify-content:space-between;height:68px;gap:0;padding:8px 10px}.cqa-sb-utility:not(.cqa-sb-utility--expanded){display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:1px;padding:6px 10px}.cqa-sb-util-tile{width:110px;max-width:110px;border-radius:9px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:8px 6px 6px;color:#ffffffd9;background:rgba(255,255,255,.06);border:none;cursor:pointer;transition:background .12s,color .12s;font-family:inherit}.cqa-sb-util-tile:hover{background:rgba(177,178,248,.22);color:#fff}.cqa-sb-util-tile-label{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:10.5px;font-weight:600;line-height:10.5px;letter-spacing:.1px;color:#ffffffd9;text-align:center;white-space:nowrap}.cqa-sb-util-compact{position:relative;width:36px;height:34px;border-radius:8px;display:flex;align-items:center;justify-content:center;color:#ffffffe0;background:transparent;border:none;cursor:pointer;transition:background .12s,color .12s;padding:0;flex-shrink:0}.cqa-sb-util-compact:hover{background:rgba(255,255,255,.08);color:#fff}.cqa-sb-util-compact-dot{position:absolute;top:6px;right:6px;width:8px;height:8px;background:#ee3f3f;border-radius:4px;border:2px solid #3f43ee;pointer-events:none}.cqa-sb-profile{border-top:1px solid rgba(255,255,255,.1);padding:12px 14px;height:62px;display:flex;align-items:center;gap:12px;background:rgba(0,0,0,.16);overflow:hidden;position:relative;width:100%;flex-shrink:0;color:#fff}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-profile{justify-content:center;padding:12px 0;height:auto;gap:0;background:rgba(0,0,0,.12);border-top-color:#ffffff1f}.cqa-sb-profile-main{flex:1;min-width:0;display:flex;align-items:center;gap:12px;padding:0;background:transparent;border:none;border-radius:8px;cursor:pointer;color:inherit;font-family:inherit;text-align:left;transition:background .15s}.cqa-sb-profile-main:hover{background:rgba(0,0,0,.1)}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-profile-main{justify-content:center;flex:0 0 auto}.cqa-sb-profile-avatar{width:34px;height:34px;border-radius:17px;background:linear-gradient(135deg,#f472b6,#db2777);display:flex;align-items:center;justify-content:center;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:12px;font-weight:700;line-height:1;letter-spacing:0;color:#fff;flex-shrink:0;box-shadow:0 0 0 2px #ffffff26}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-profile-avatar{width:32px;height:32px;border-radius:16px;font-size:11.5px}.cqa-sb-profile-info{flex:1;min-width:0;overflow:hidden;opacity:0;transition:opacity .16s 80ms;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px}.cqa-sb-profile-info--visible{opacity:1}.cqa-sb:not(.cqa-sb--expanded) .cqa-sb-profile-info{display:none}.cqa-sb-profile-name{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-weight:600;font-size:12.5px;line-height:13.75px;letter-spacing:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}.cqa-sb-profile-role{display:inline-block;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:9px;font-weight:700;line-height:12.6px;letter-spacing:0;background:rgba(216,217,252,.22);padding:2px 7px;border-radius:999px;color:#fff;border:1px solid rgba(216,217,252,.2);white-space:nowrap;align-self:flex-start}.cqa-sb-profile-logout{color:#ffffff8c;padding:6px 6px 9px;border-radius:6px;background:transparent;border:none;cursor:pointer;flex-shrink:0;transition:background .12s,color .12s;display:flex;align-items:center;justify-content:center}.cqa-sb-profile-logout:hover{background:rgba(255,255,255,.12);color:#fff}\n"] }]
237
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { config: [{
238
+ type: Input
239
+ }], navItems: [{
240
+ type: Input
241
+ }], activeNavId: [{
242
+ type: Input
243
+ }], initialOpenParentIds: [{
244
+ type: Input
245
+ }], profileUser: [{
246
+ type: Input
247
+ }], profileMenuEntries: [{
248
+ type: Input
249
+ }], workspaces: [{
250
+ type: Input
251
+ }], currentWorkspaceId: [{
252
+ type: Input
253
+ }], navItemClick: [{
254
+ type: Output
255
+ }], ctaClick: [{
256
+ type: Output
257
+ }], searchClick: [{
258
+ type: Output
259
+ }], workspaceSwitchClick: [{
260
+ type: Output
261
+ }], logoutClick: [{
262
+ type: Output
263
+ }], notificationsClick: [{
264
+ type: Output
265
+ }], helpDocsClick: [{
266
+ type: Output
267
+ }], speakerClick: [{
268
+ type: Output
269
+ }], liveChatClick: [{
270
+ type: Output
271
+ }], expandedChange: [{
272
+ type: Output
273
+ }], profileMenuItemClick: [{
274
+ type: Output
275
+ }], workspaceSelected: [{
276
+ type: Output
277
+ }], manageWorkspacesClick: [{
278
+ type: Output
279
+ }], profileAnchorRef: [{
280
+ type: ViewChild,
281
+ args: ['profileAnchor', { static: false }]
282
+ }], workspaceAnchorRef: [{
283
+ type: ViewChild,
284
+ args: ['workspaceAnchor', { static: false }]
285
+ }] } });
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUlaLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQXVDLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7OztBQVNyRixNQUFNLE9BQU8sZ0JBQWdCO0lBdUQzQixZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBdERsQyxXQUFNLEdBQWtCLEVBQUUsQ0FBQztRQUMzQixhQUFRLEdBQWtCLEVBQUUsQ0FBQztRQUM3QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUNsQyw4RkFBOEY7UUFDckYseUJBQW9CLEdBQWEsRUFBRSxDQUFDO1FBTzdDOzs7V0FHRztRQUNNLHVCQUFrQixHQUF1QixFQUFFLENBQUM7UUFDckQ7Ozs7V0FJRztRQUNNLGVBQVUsR0FBd0IsRUFBRSxDQUFDO1FBSXBDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMxQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdkMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNoRCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdkMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUM5QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDekMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN6QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDdkQsMEZBQTBGO1FBQ2hGLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDNUQsaUZBQWlGO1FBQ3ZFLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBQ2xFLHdFQUF3RTtRQUM5RCwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBSzNELGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBRTdCLHVCQUFrQixHQUF5QyxJQUFJLENBQUM7SUFHMUIsQ0FBQztJQUUvQzs7O09BR0c7SUFDSCxJQUFJLGlCQUFpQjtRQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQztRQUN2QyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRTtZQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QjtRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRTtZQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzlDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUdELGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRTtZQUN2RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDakQsT0FBTztTQUNSO1FBQ0QsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHNCQUFzQixDQUFDLEVBQVU7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRTtZQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDckQsT0FBTztTQUNSO1FBQ0QsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsd0JBQXdCLENBQUMsRUFBbUI7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsV0FBVztRQUNULElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsWUFBWTtRQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSxpQkFBaUI7UUFDZixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsRUFBYztRQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDOUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQTRCLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsK0JBQStCLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTztRQUUxRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNqQztRQUNILENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTywrQkFBK0IsQ0FBQyxJQUFpQjtRQUN2RCxJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0MsT0FBTyxDQUFDLENBQUMsQ0FDUCxJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUM7WUFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsRUFBVTtRQUN2Qiw4RkFBOEY7UUFDOUYsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLE9BQU87U0FDUjtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsT0FBTztTQUNSO1FBRUQsSUFBSyxJQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7WUFDdEMsb0ZBQW9GO1lBQ3BGLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN2QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM1QjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDckUsQ0FBQztJQUVPLFlBQVksQ0FBQyxFQUFVO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMzRDthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFRCx3RUFBd0U7SUFDaEUsWUFBWSxDQUFDLEVBQVU7UUFDN0IsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQztnQkFBRSxTQUFTO1lBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1NBQzFEO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sbUJBQW1CLENBQUMsRUFBVTtRQUNwQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7U0FDeEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDeEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNuRDthQUNGO1NBQ0Y7SUFDSCxDQUFDOztBQXpNdUIsa0NBQWlCLEdBQUcsR0FBSSxDQUFBOzZHQXJEckMsZ0JBQWdCO2lHQUFoQixnQkFBZ0Isa2dDQ3RCN0Isa3VpQkF1UkE7MkZEalFhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhO21HQUtkLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQUV3QyxnQkFBZ0I7c0JBQTlELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDSSxrQkFBa0I7c0JBQWxFLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE5hdk1lbnVJdGVtLCBOYXZJdGVtLCBTaWRlYmFyQ29uZmlnLCBpc05hdlNlY3Rpb24gfSBmcm9tICcuL3NpZGViYXIubW9kZWxzJztcbmltcG9ydCB7IFByb2ZpbGVNZW51RW50cnksIFByb2ZpbGVNZW51VXNlciB9IGZyb20gJy4vcHJvZmlsZS1tZW51L3Byb2ZpbGUtbWVudS5tb2RlbHMnO1xuaW1wb3J0IHsgV29ya3NwYWNlTWVudUl0ZW0gfSBmcm9tICcuL3dvcmtzcGFjZS1tZW51L3dvcmtzcGFjZS1tZW51Lm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1zaWRlYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpZGViYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaWRlYmFyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjb25maWc6IFNpZGViYXJDb25maWcgPSB7fTtcbiAgQElucHV0KCkgbmF2SXRlbXM6IE5hdk1lbnVJdGVtW10gPSBbXTtcbiAgQElucHV0KCkgYWN0aXZlTmF2SWQ6IHN0cmluZyA9ICcnO1xuICAvKiogUGFyZW50IGl0ZW0gSURzIHRvIG9wZW4gYnkgZGVmYXVsdCAoaW4gYWRkaXRpb24gdG8gdGhlIG9uZSBjb250YWluaW5nIHRoZSBhY3RpdmUgaXRlbSkuICovXG4gIEBJbnB1dCgpIGluaXRpYWxPcGVuUGFyZW50SWRzOiBzdHJpbmdbXSA9IFtdO1xuICAvKipcbiAgICogVXNlciBkZXRhaWxzIHJlbmRlcmVkIGluIHRoZSBwcm9maWxlLW1lbnUgcG9wb3ZlciBoZWFkZXIuIFJlcXVpcmVkIGZvciB0aGUgcG9wb3ZlclxuICAgKiB0byBvcGVuOyB3aGVuIHVuZGVmaW5lZCB0aGUgcHJvZmlsZSBjYXJkIHJldGFpbnMgaXRzIGxlZ2FjeSBzaW5nbGUtYWN0aW9uIGJlaGF2aW9yXG4gICAqIChjbGlja2luZyBpdCBkaXJlY3RseSBmaXJlcyBgbG9nb3V0Q2xpY2tgKS5cbiAgICovXG4gIEBJbnB1dCgpIHByb2ZpbGVVc2VyPzogUHJvZmlsZU1lbnVVc2VyO1xuICAvKipcbiAgICogTWVudSBlbnRyaWVzIHNob3duIGluc2lkZSB0aGUgcHJvZmlsZS1tZW51IHBvcG92ZXIuIFByb3ZpZGUgYXQgbGVhc3Qgb25lIGVudHJ5IHRvXG4gICAqIGVuYWJsZSB0aGUgcG9wb3ZlcjsgYW4gZW1wdHkgYXJyYXkgcHJlc2VydmVzIHRoZSBsZWdhY3kgYGxvZ291dENsaWNrYCBiZWhhdmlvci5cbiAgICovXG4gIEBJbnB1dCgpIHByb2ZpbGVNZW51RW50cmllczogUHJvZmlsZU1lbnVFbnRyeVtdID0gW107XG4gIC8qKlxuICAgKiBXb3Jrc3BhY2VzIHNob3duIGluc2lkZSB0aGUgd29ya3NwYWNlLXN3aXRjaGVyIHBvcG92ZXIuIFByb3ZpZGUgYXQgbGVhc3Qgb25lIGVudHJ5XG4gICAqIHRvIGVuYWJsZSB0aGUgcG9wb3ZlcjsgYW4gZW1wdHkgYXJyYXkgcHJlc2VydmVzIHRoZSBsZWdhY3kgYHdvcmtzcGFjZVN3aXRjaENsaWNrYFxuICAgKiBiZWhhdmlvciAoc2luZ2xlIGVtaXQgb24gY2xpY2ssIG5vIFVJKS5cbiAgICovXG4gIEBJbnB1dCgpIHdvcmtzcGFjZXM6IFdvcmtzcGFjZU1lbnVJdGVtW10gPSBbXTtcbiAgLyoqIElkIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHdvcmtzcGFjZSDigJQgZHJpdmVzIHRoZSBjaGVja21hcmsgYW5kIGFjdGl2ZS1yb3cgdGludC4gKi9cbiAgQElucHV0KCkgY3VycmVudFdvcmtzcGFjZUlkPzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIEBPdXRwdXQoKSBuYXZJdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGN0YUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VhcmNoQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB3b3Jrc3BhY2VTd2l0Y2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGxvZ291dENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbm90aWZpY2F0aW9uc0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgaGVscERvY3NDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNwZWFrZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGxpdmVDaGF0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgLyoqIEVtaXRzIGBQcm9maWxlTWVudUl0ZW0uaWRgIHdoZW4gdGhlIHVzZXIgYWN0aXZhdGVzIGFuIGVudHJ5IGluIHRoZSBwcm9maWxlIHBvcG92ZXIuICovXG4gIEBPdXRwdXQoKSBwcm9maWxlTWVudUl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdHMgdGhlIHdvcmtzcGFjZSBpZCB3aGVuIHRoZSB1c2VyIHBpY2tzIG9uZSBmcm9tIHRoZSB3b3Jrc3BhY2UgcG9wb3Zlci4gKi9cbiAgQE91dHB1dCgpIHdvcmtzcGFjZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBudW1iZXI+KCk7XG4gIC8qKiBFbWl0cyB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgXCJXb3Jrc3BhY2UgTWFuYWdlbWVudFwiIGZvb3RlciByb3cuICovXG4gIEBPdXRwdXQoKSBtYW5hZ2VXb3Jrc3BhY2VzQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgncHJvZmlsZUFuY2hvcicsIHsgc3RhdGljOiBmYWxzZSB9KSBwcm9maWxlQW5jaG9yUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3dvcmtzcGFjZUFuY2hvcicsIHsgc3RhdGljOiBmYWxzZSB9KSB3b3Jrc3BhY2VBbmNob3JSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBpc0V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUGlubmVkOiBib29sZWFuID0gZmFsc2U7XG4gIG9wZW5QYXJlbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBpc1Byb2ZpbGVNZW51T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1dvcmtzcGFjZU1lbnVPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBsZWF2ZUNvbGxhcHNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExFQVZFX0NPTExBUFNFX01TID0gMjIwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplciBieXBhc3Mgc28gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQs4oCmYCBVUklzIHJlbmRlciBpbiB0aGUgd29ya3NwYWNlXG4gICAqIGF2YXRhciDigJQgQW5ndWxhciAxMydzIGRlZmF1bHQgVVJMIHNhbml0aXplciByZXdyaXRlcyB0aGVtIHRvIGB1bnNhZmU64oCmYC5cbiAgICovXG4gIGdldCB3b3Jrc3BhY2VMb2dvU2FmZSgpOiBTYWZlVXJsIHwgbnVsbCB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5jb25maWc/LndvcmtzcGFjZUxvZ287XG4gICAgcmV0dXJuIHVybCA/IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodXJsKSA6IG51bGw7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWc/LmRlZmF1bHRQaW5uZWQpIHtcbiAgICAgIHRoaXMuaXNQaW5uZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5pdGlhbE9wZW5QYXJlbnRJZHM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGVuUGFyZW50cyA9IFsuLi50aGlzLmluaXRpYWxPcGVuUGFyZW50SWRzXTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVBY3RpdmVQYXJlbnRPcGVuKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyTGVhdmVDb2xsYXBzZVRpbWVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2FjdGl2ZU5hdklkJ10gJiYgdGhpcy5hY3RpdmVOYXZJZCkge1xuICAgICAgdGhpcy5lbnN1cmVBY3RpdmVQYXJlbnRPcGVuKCk7XG4gICAgfVxuICB9XG5cblxuICBvblByb2ZpbGVDbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9maWxlVXNlciAmJiB0aGlzLnByb2ZpbGVNZW51RW50cmllcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlzUHJvZmlsZU1lbnVPcGVuID0gIXRoaXMuaXNQcm9maWxlTWVudU9wZW47XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIExlZ2FjeSBzaW5nbGUtYWN0aW9uIGJlaGF2aW91ciBwcmVzZXJ2ZWQgZm9yIGNvbnN1bWVycyB0aGF0IGhhdmVuJ3QgbWlncmF0ZWQuXG4gICAgdGhpcy5sb2dvdXRDbGljay5lbWl0KCk7XG4gIH1cblxuICBvblByb2ZpbGVNZW51SXRlbUNsaWNrKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzUHJvZmlsZU1lbnVPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5wcm9maWxlTWVudUl0ZW1DbGljay5lbWl0KGlkKTtcbiAgfVxuXG4gIG9uUHJvZmlsZU1lbnVEaXNtaXNzZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Byb2ZpbGVNZW51T3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgb25Xb3Jrc3BhY2VDbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53b3Jrc3BhY2VzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXNXb3Jrc3BhY2VNZW51T3BlbiA9ICF0aGlzLmlzV29ya3NwYWNlTWVudU9wZW47XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIExlZ2FjeSBzaW5nbGUtZW1pdCBiZWhhdmlvciBwcmVzZXJ2ZWQgZm9yIGNvbnN1bWVycyB0aGF0IGhhdmVuJ3QgbWlncmF0ZWQuXG4gICAgdGhpcy53b3Jrc3BhY2VTd2l0Y2hDbGljay5lbWl0KCk7XG4gIH1cblxuICBvbldvcmtzcGFjZU1lbnVJdGVtQ2xpY2soaWQ6IHN0cmluZyB8IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaXNXb3Jrc3BhY2VNZW51T3BlbiA9IGZhbHNlO1xuICAgIHRoaXMud29ya3NwYWNlU2VsZWN0ZWQuZW1pdChpZCk7XG4gIH1cblxuICBvbldvcmtzcGFjZU1lbnVEaXNtaXNzZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1dvcmtzcGFjZU1lbnVPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvbk1hbmFnZVdvcmtzcGFjZXNDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmlzV29ya3NwYWNlTWVudU9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm1hbmFnZVdvcmtzcGFjZXNDbGljay5lbWl0KCk7XG4gIH1cblxuICAvKiogQnVyZ2VyOiB3aWRlIHNpZGViYXIgd2l0aG91dCBwaW5uaW5nIOKAlCBjb2xsYXBzZXMgb24gbW91c2UgbGVhdmUuICovXG4gIG9wZW5TaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJMZWF2ZUNvbGxhcHNlVGltZXIoKTtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xuICAgIHRoaXMuaXNQaW5uZWQgPSBmYWxzZTtcbiAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gIH1cblxuICAvKiogSGVhZGVyIGNvbGxhcHNlIGNvbnRyb2w6IGFsd2F5cyBjbG9zZXMgYW5kIGNsZWFycyBwaW4uICovXG4gIGNsb3NlU2lkZWJhcigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzUGlubmVkID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckxlYXZlQ29sbGFwc2VUaW1lcigpO1xuICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChmYWxzZSk7XG4gIH1cblxuICBwaW5TaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNQaW5uZWQgPSB0cnVlO1xuICAgIHRoaXMuY2xlYXJMZWF2ZUNvbGxhcHNlVGltZXIoKTtcbiAgfVxuXG4gIC8qKiBDYW5jZWwgZGVsYXllZCBjb2xsYXBzZSB3aGVuIHRoZSBwb2ludGVyIHJldHVybnMgdG8gdGhlIHNpZGViYXIuICovXG4gIG9uQXNpZGVNb3VzZUVudGVyKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJMZWF2ZUNvbGxhcHNlVGltZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGV4cGFuZGVkIGJ1dCBub3QgcGlubmVkLCBjb2xsYXBzZSBhZnRlciB0aGUgcG9pbnRlciBsZWF2ZXMgdGhlIHJhaWwuXG4gICAqIFNraXBzIHNjaGVkdWxpbmcgaWYgdGhlIHBvaW50ZXIgaXMgbW92aW5nIGludG8gb3VyIENESyBmbHlvdXQgLyByYWlsIHRvb2x0aXAgb3ZlcmxheXMuXG4gICAqL1xuICBvbkFzaWRlTW91c2VMZWF2ZShldjogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUGlubmVkIHx8ICF0aGlzLmlzRXhwYW5kZWQpIHJldHVybjtcbiAgICBjb25zdCByZWxhdGVkID0gZXYucmVsYXRlZFRhcmdldCBhcyBOb2RlIHwgbnVsbDtcbiAgICBpZiAodGhpcy5pc1BvaW50ZXJFbnRlcmluZ1NpZGViYXJPdmVybGF5KHJlbGF0ZWQpKSByZXR1cm47XG5cbiAgICB0aGlzLmNsZWFyTGVhdmVDb2xsYXBzZVRpbWVyKCk7XG4gICAgdGhpcy5sZWF2ZUNvbGxhcHNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubGVhdmVDb2xsYXBzZVRpbWVyID0gbnVsbDtcbiAgICAgIGlmICghdGhpcy5pc1Bpbm5lZCAmJiB0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICB9XG4gICAgfSwgU2lkZWJhckNvbXBvbmVudC5MRUFWRV9DT0xMQVBTRV9NUyk7XG4gIH1cblxuICBwcml2YXRlIGlzUG9pbnRlckVudGVyaW5nU2lkZWJhck92ZXJsYXkobm9kZTogTm9kZSB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISEoXG4gICAgICBub2RlLmNsb3Nlc3QoJy5jcWEtbmF2LWZseW91dC1vdmVybGF5JykgfHxcbiAgICAgIG5vZGUuY2xvc2VzdCgnLmNxYS1uYXYtZmx5b3V0LW92ZXJsYXktcGFuZScpIHx8XG4gICAgICBub2RlLmNsb3Nlc3QoJy5tYXQtdG9vbHRpcC5jcWEtbmF2LXJhaWwtdG9vbHRpcCcpIHx8XG4gICAgICBub2RlLmNsb3Nlc3QoJy5tYXQtdG9vbHRpcCcpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJMZWF2ZUNvbGxhcHNlVGltZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGVhdmVDb2xsYXBzZVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5sZWF2ZUNvbGxhcHNlVGltZXIpO1xuICAgICAgdGhpcy5sZWF2ZUNvbGxhcHNlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG9uTmF2SXRlbUNsaWNrKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBTdWJtZW51IGxlYWY6IGFsd2F5cyBlbWl0IG5hdmlnYXRpb24gKGNoaWxkIGlkIHdhcyB3cm9uZ2x5IHRyZWF0ZWQgYXMgYSBwYXJlbnQgZm9yIHRvZ2dsZSkuXG4gICAgaWYgKHRoaXMuaXNDaGlsZE5hdklkKGlkKSkge1xuICAgICAgdGhpcy5uYXZJdGVtQ2xpY2suZW1pdChpZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmluZFRvcExldmVsTmF2SXRlbShpZCk7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICB0aGlzLm5hdkl0ZW1DbGljay5lbWl0KGlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKGl0ZW0gYXMgTmF2SXRlbSkuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgLy8gUGFyZW50IGl0ZW0gd2l0aCBjaGlsZHJlbjogdG9nZ2xlIHN1Yi1tZW51IHdoZW4gZXhwYW5kZWQsIG5hdmlnYXRlIHdoZW4gY29sbGFwc2VkXG4gICAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUGFyZW50KGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmF2SXRlbUNsaWNrLmVtaXQoaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdkl0ZW1DbGljay5lbWl0KGlkKTtcbiAgICB9XG4gIH1cblxuICBnZXQgd29ya3NwYWNlSW5pdGlhbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8ud29ya3NwYWNlTmFtZT8uY2hhckF0KDApPy50b1VwcGVyQ2FzZSgpIHx8ICdXJztcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlUGFyZW50KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLm9wZW5QYXJlbnRzLmluZGV4T2YoaWQpO1xuICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgdGhpcy5vcGVuUGFyZW50cyA9IHRoaXMub3BlblBhcmVudHMuZmlsdGVyKHAgPT4gcCAhPT0gaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5QYXJlbnRzID0gWy4uLnRoaXMub3BlblBhcmVudHMsIGlkXTtcbiAgICB9XG4gIH1cblxuICAvKiogVHJ1ZSBpZiBgaWRgIG1hdGNoZXMgYSBzdWJtZW51IHJvdyB1bmRlciBzb21lIHRvcC1sZXZlbCBuYXYgaXRlbS4gKi9cbiAgcHJpdmF0ZSBpc0NoaWxkTmF2SWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm5hdkl0ZW1zKSB7XG4gICAgICBpZiAoaXNOYXZTZWN0aW9uKGl0ZW0pKSBjb250aW51ZTtcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuPy5zb21lKChjKSA9PiBjLmlkID09PSBpZCkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGZpbmRUb3BMZXZlbE5hdkl0ZW0oaWQ6IHN0cmluZyk6IE5hdk1lbnVJdGVtIHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubmF2SXRlbXMpIHtcbiAgICAgIGlmICghaXNOYXZTZWN0aW9uKGl0ZW0pICYmIGl0ZW0uaWQgPT09IGlkKSByZXR1cm4gaXRlbTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZUFjdGl2ZVBhcmVudE9wZW4oKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubmF2SXRlbXMpIHtcbiAgICAgIGlmICghaXNOYXZTZWN0aW9uKGl0ZW0pICYmIGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgaGFzQWN0aXZlQ2hpbGQgPSBpdGVtLmNoaWxkcmVuLnNvbWUoYyA9PiBjLmlkID09PSB0aGlzLmFjdGl2ZU5hdklkKTtcbiAgICAgICAgaWYgKGhhc0FjdGl2ZUNoaWxkICYmICF0aGlzLm9wZW5QYXJlbnRzLmluY2x1ZGVzKGl0ZW0uaWQpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuUGFyZW50cyA9IFsuLi50aGlzLm9wZW5QYXJlbnRzLCBpdGVtLmlkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBpZD1cImNxYS11aS1yb290XCIgY2xhc3M9XCJjcWEtc2Itcm9vdFwiPlxuICA8YXNpZGVcbiAgICBjbGFzcz1cImNxYS1zYlwiXG4gICAgW2NsYXNzLmNxYS1zYi0tZXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXG4gICAgKG1vdXNlZW50ZXIpPVwib25Bc2lkZU1vdXNlRW50ZXIoKVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25Bc2lkZU1vdXNlTGVhdmUoJGV2ZW50KVwiPlxuXG4gICAgPCEtLSA9PT09PSAxLiBXb3Jrc3BhY2UgaGVhZGVyID09PT09IC0tPlxuICAgIDxkaXYgI3dvcmtzcGFjZUFuY2hvciBjbGFzcz1cImNxYS1zYi1oZWFkZXJcIiBbY2xhc3MuY3FhLXNiLWhlYWRlci0tZXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiPlxuICAgICAgPCEtLSBDb2xsYXBzZWQ6IGhhbWJ1cmdlciBjaGlwIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFpc0V4cGFuZGVkXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtc2ItYnVyZ2VyXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5TaWRlYmFyKClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIk9wZW4gc2lkZWJhclwiPlxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiPlxuICAgICAgICAgIDxsaW5lIHgxPVwiMlwiIHkxPVwiNFwiIHgyPVwiMTRcIiB5Mj1cIjRcIi8+XG4gICAgICAgICAgPGxpbmUgeDE9XCIyXCIgeTE9XCI4XCIgeDI9XCIxNFwiIHkyPVwiOFwiLz5cbiAgICAgICAgICA8bGluZSB4MT1cIjJcIiB5MT1cIjEyXCIgeDI9XCIxNFwiIHkyPVwiMTJcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDwhLS0gRXhwYW5kZWQ6IHdvcmtzcGFjZSBzZWxlY3RvciArIHBpbiAodW5waW5uZWQpIG9yIGNsb3NlIChwaW5uZWQpIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRXhwYW5kZWRcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNxYS1zYi13c1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25Xb3Jrc3BhY2VDbGljaygpXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtc2Itd3MtbWFpblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtc2Itd3MtYXZhdGFyXCI+XG4gICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJ3b3Jrc3BhY2VMb2dvU2FmZTsgZWxzZSBkZWZhdWx0TG9nb1RwbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc2Itd3MtbG9nb1wiXG4gICAgICAgICAgICAgICAgW3NyY109XCJ3b3Jrc3BhY2VMb2dvU2FmZVwiXG4gICAgICAgICAgICAgICAgW2FsdF09XCJjb25maWc/LndvcmtzcGFjZU5hbWUgfHwgJ1dvcmtzcGFjZSBsb2dvJ1wiIC8+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExvZ29UcGw+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS1zYi13cy1kZWZhdWx0XCIgd2lkdGg9XCIzNlwiIGhlaWdodD1cIjM2XCIgdmlld0JveD1cIjAgMCA0MCA0MFwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjlcIiBmaWxsPVwidXJsKCNjcWEtc2Itd3MtZ3JhZClcIi8+XG4gICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2NxYS1zYi13cy1zaGFkb3cpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjlcIiBmaWxsPVwid2hpdGVcIiBmaWxsLW9wYWNpdHk9XCIwLjAxXCIgc2hhcGUtcmVuZGVyaW5nPVwiY3Jpc3BFZGdlc1wiLz5cbiAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiOC4wNzk2OVwiIGhlaWdodD1cIjIuNTk5NjlcIiByeD1cIjEuMjk5ODVcIiB0cmFuc2Zvcm09XCJtYXRyaXgoMC4wNTU1NDI3IC0wLjk5ODQ1NiAwLjk5ODE5NCAwLjA2MDA2OTggMTAuMzE4OCAyOC45OTEyKVwiIGZpbGw9XCIjOTdBRkM1XCIvPlxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI4LjA3MDhcIiBoZWlnaHQ9XCIyLjYwMjc4XCIgcng9XCIxLjMwMTM5XCIgdHJhbnNmb3JtPVwibWF0cml4KC0wLjE3MzI2OSAtMC45ODQ4NzQgMC45ODIzNjcgLTAuMTg2OTY0IDI3LjM0MTMgMjkuNDA0MylcIiBmaWxsPVwiIzk3QUZDNVwiLz5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuMTg4NCAyMy41OTU4QzExLjQ1NDkgMjMuNzQ3MyAxMS43ODY1IDIzLjY1MDIgMTEuOTI5MSAyMy4zNzg5TDEzLjM2MjMgMjAuNjUyM0MxMy41MDQ5IDIwLjM4MSAxMy40MDQ1IDIwLjAzODIgMTMuMTM4MSAxOS44ODY3QzEyLjIwNTUgMTkuMzU2NCAxMS4wNDQ4IDE5LjY5NjQgMTAuNTQ1NyAyMC42NDZMMTAuNDAzNyAyMC45MTYyQzkuOTA0NTEgMjEuODY1OCAxMC4yNTU5IDIzLjA2NTUgMTEuMTg4NCAyMy41OTU4WlwiIGZpbGw9XCIjQzJEQkYyXCIvPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS42NzE0IDIyLjQ2NzdDMTEuNjcxNCAyMC4xODYzIDEzLjUyMDggMTguMzM2OSAxNS44MDIyIDE4LjMzNjlIMjMuOTUwNUMyNi4yMzE5IDE4LjMzNjkgMjguMDgxMyAyMC4xODYzIDI4LjA4MTMgMjIuNDY3N1YyMy43OTUzQzI4LjA4MTMgMjguMzI2OCAyNC40MDc4IDMyLjAwMDMgMTkuODc2NCAzMi4wMDAzQzE1LjM0NDkgMzIuMDAwMyAxMS42NzE0IDI4LjMyNjggMTEuNjcxNCAyMy43OTUzVjIyLjQ2NzdaXCIgZmlsbD1cIiNEN0U3RjlcIi8+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI4LjgxMTYgMjMuNzMxNUMyOC41NDUxIDIzLjg4MyAyOC4yMTM1IDIzLjc4NTkgMjguMDcwOSAyMy41MTQ2TDI2LjYzNzcgMjAuNzg4MUMyNi40OTUxIDIwLjUxNjcgMjYuNTk1NSAyMC4xNzQgMjYuODYxOSAyMC4wMjI1QzI3Ljc5NDUgMTkuNDkyMiAyOC45NTUyIDE5LjgzMjEgMjkuNDU0MyAyMC43ODE3TDI5LjU5NjMgMjEuMDUxOUMzMC4wOTU1IDIyLjAwMTUgMjkuNzQ0MSAyMy4yMDEyIDI4LjgxMTYgMjMuNzMxNVpcIiBmaWxsPVwiI0MyREJGMlwiLz5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjYuMzc3NCAxOS4xNzU4QzI2LjM3NzQgMTkuODAyNiAyMy40NzYyIDIwLjMxMDcgMTkuODk3NCAyMC4zMTA3QzE2LjMxODYgMjAuMzEwNyAxMy40MTc1IDE5LjgwMjYgMTMuNDE3NSAxOS4xNzU4QzEzLjQxNzUgMTguNTQ5MSAxNi4zMTg2IDE4LjA0MSAxOS44OTc0IDE4LjA0MUMyMy40NzYyIDE4LjA0MSAyNi4zNzc0IDE4LjU0OTEgMjYuMzc3NCAxOS4xNzU4WlwiIGZpbGw9XCIjQzJEQkYyXCIvPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMS43NTA3IDI2Ljc3ODVMMjEuNjIyMSAyNi42NDQ4QzIyLjE0NzEgMjUuNzg2OCAyMi4wNTA2IDI0LjYzMzUgMjEuMzMyOSAyMy44ODY5QzIwLjUwMjYgMjMuMDIzNCAxOS4xNDczIDIzLjAyMzQgMTguMzE3IDIzLjg4NjlDMTcuNDg2OCAyNC43NTA1IDE3LjQ4NjggMjYuMTYwMSAxOC4zMTcgMjcuMDIzNkMxOS4wMzQ4IDI3Ljc3MDIgMjAuMTQzNyAyNy44NzA1IDIwLjk2ODYgMjcuMzI0NUwyMS4wOTcyIDI3LjQ1ODJMMjEuMjY4NiAyNy42MzY1QzIxLjQ1MDcgMjcuODI1OSAyMS43NDUzIDI3LjgyNTkgMjEuOTIyMSAyNy42MzY1QzIyLjEwNDIgMjcuNDQ3MSAyMi4xMDQyIDI3LjE0MDYgMjEuOTIyMSAyNi45NTY4TDIxLjc1MDcgMjYuNzc4NVpNMTguOTcwNiAyNi4zNDM5QzE4LjQ5OTIgMjUuODUzNiAxOC40OTkyIDI1LjA1NjkgMTguOTcwNiAyNC41NzIyQzE5LjQ0MTkgMjQuMDgxOSAyMC4yMDggMjQuMDgxOSAyMC42NzQgMjQuNTcyMkMyMS4wMjc1IDI0LjkzOTkgMjEuMTEzMiAyNS40ODA0IDIwLjkzNjUgMjUuOTM3MkMyMC44Nzc1IDI2LjA4NzYgMjAuNzkxOCAyNi4yMjY5IDIwLjY3NCAyNi4zNDM5QzIwLjU1NjEgMjYuNDY2NSAyMC40MjIyIDI2LjU1NTYgMjAuMjgyOSAyNi42MTY5QzE5Ljg0OTEgMjYuODAwOCAxOS4zMjQxIDI2LjcxMTYgMTguOTcwNiAyNi4zNDM5WlwiIGZpbGw9XCIjNjM2NkYxXCIvPlxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNy40NTc1XCIgaGVpZ2h0PVwiMTAuODAzNVwiIHJ4PVwiNS40MDE3NlwiIHRyYW5zZm9ybT1cIm1hdHJpeCgwLjk5OTkxOCAwLjAxMjgxMjkgLTAuMDExODQ0MyAwLjk5OTkzIDExLjE0MDEgNi45MjQ4KVwiIGZpbGw9XCIjRDdFN0Y5XCIvPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS45MDY4IDkuNzQ5NjFDMTIuMjYwMyA5Ljc1NDE0IDEyLjU0MzUgMTAuMDQ0NCAxMi41MzkzIDEwLjM5NzlMMTIuNDkyNiAxNC4zMzc2QzEyLjQ4ODQgMTQuNjkxMSAxMi4xOTg1IDE0Ljk3NCAxMS44NDUgMTQuOTY5NEMxMC42MDc4IDE0Ljk1MzYgOS42MTY2OCAxMy45Mzc3IDkuNjMxMzMgMTIuNzAwNUw5LjY0MDA5IDExLjk2MTFDOS42NTQ3NSAxMC43MjM5IDEwLjY2OTYgOS43MzM3NiAxMS45MDY4IDkuNzQ5NjFaXCIgZmlsbD1cIiNDMkRCRjJcIi8+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI3LjcwMTEgMTUuMTcyM0MyNy4zNDc2IDE1LjE2NzcgMjcuMDY0NCAxNC44Nzc1IDI3LjA2ODYgMTQuNTI0TDI3LjExNTMgMTAuNTg0M0MyNy4xMTk1IDEwLjIzMDggMjcuNDA5NCA5Ljk0NzkyIDI3Ljc2MjkgOS45NTI0NUMyOS4wMDAxIDkuOTY4MyAyOS45OTEyIDEwLjk4NDEgMjkuOTc2NiAxMi4yMjE0TDI5Ljk2NzggMTIuOTYwN0MyOS45NTMyIDE0LjE5OCAyOC45MzgzIDE1LjE4ODEgMjcuNzAxMSAxNS4xNzIzWlwiIGZpbGw9XCIjQzJEQkYyXCIvPlxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMy4wOTMxXCIgaGVpZ2h0PVwiNi44MDg5NFwiIHJ4PVwiMy40MDQ0N1wiIHRyYW5zZm9ybT1cIm1hdHJpeCgwLjk5OTkxOCAwLjAxMjgxMjkgLTAuMDExODQ0MyAwLjk5OTkzIDEzLjI5ODggOC45NTAyKVwiIGZpbGw9XCIjMkY0NDVCXCIvPlxuICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgY3g9XCIwLjg3Mjg3NFwiIGN5PVwiMC45MDc4NThcIiByeD1cIjAuODcyODc0XCIgcnk9XCIwLjkwNzg1OFwiIHRyYW5zZm9ybT1cIm1hdHJpeCgwLjk5OTkxOCAwLjAxMjgxMjkgLTAuMDExODQ0MyAwLjk5OTkzIDIyLjIxNTMgMTEuNTYwNSlcIiBmaWxsPVwiIzYzNjZGMVwiLz5cbiAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIGN4PVwiMC44NzI4NzRcIiBjeT1cIjAuOTA3ODU4XCIgcng9XCIwLjg3Mjg3NFwiIHJ5PVwiMC45MDc4NThcIiB0cmFuc2Zvcm09XCJtYXRyaXgoMC45OTk5MTggMC4wMTI4MTI5IC0wLjAxMTg0NDMgMC45OTk5MyAxNS42MjU1IDExLjQ3NjYpXCIgZmlsbD1cIiM2MzY2RjFcIi8+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2LjkwNDcgNi42NjU3MkMxNi45MDkxIDYuMjk4MDUgMTcuMjEwNiA2LjAwMzgyIDE3LjU3ODMgNi4wMDg1M0wyMi4xODE5IDYuMDY3NTJDMjIuNTQ5NiA2LjA3MjIzIDIyLjg0NDEgNi4zNzQxIDIyLjgzOTggNi43NDE3N0MyMi44MjQ1IDguMDI4NTkgMjEuNzY5IDkuMDU4NDEgMjAuNDgyMiA5LjA0MTkyTDE5LjIwNzEgOS4wMjU1OEMxNy45MjAzIDkuMDA5MDkgMTYuODg5NSA3Ljk1MjU0IDE2LjkwNDcgNi42NjU3MlpcIiBmaWxsPVwiI0MyREJGMlwiLz5cbiAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjlcIiBmaWxsPVwidXJsKCNjcWEtc2Itd3MtZ2xvc3MpXCIvPlxuICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJjcWEtc2Itd3Mtc2hhZG93XCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIiB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiIHJlc3VsdD1cImhhcmRBbHBoYVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9XCJoYXJkQWxwaGFcIiBvcGVyYXRvcj1cIm91dFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xMiAwXCIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIiB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiIHJlc3VsdD1cImhhcmRBbHBoYVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz1cIjFcIiBvcGVyYXRvcj1cImVyb2RlXCIgaW49XCJTb3VyY2VBbHBoYVwiIHJlc3VsdD1cImVmZmVjdDJfaW5uZXJTaGFkb3dcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0Lz5cbiAgICAgICAgICAgICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW4yPVwiaGFyZEFscGhhXCIgb3BlcmF0b3I9XCJhcml0aG1ldGljXCIgazI9XCItMVwiIGszPVwiMVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAxIDAgMCAwIDAgMSAwIDAgMCAwIDEgMCAwIDAgMC40IDBcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd1wiIHJlc3VsdD1cImVmZmVjdDJfaW5uZXJTaGFkb3dcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJjcWEtc2Itd3MtZ3JhZFwiIHgxPVwiMlwiIHkxPVwiMVwiIHgyPVwiMzhcIiB5Mj1cIjM3XCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj1cIiNDQ0UxRjRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMVwiIHN0b3AtY29sb3I9XCIjRDdFN0Y5XCIvPlxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJjcWEtc2Itd3MtZ2xvc3NcIiB4MT1cIjIwXCIgeTE9XCIxXCIgeDI9XCIyMFwiIHkyPVwiMzdcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPVwid2hpdGVcIiBzdG9wLW9wYWNpdHk9XCIwLjVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMC41XCIgc3RvcC1jb2xvcj1cIndoaXRlXCIgc3RvcC1vcGFjaXR5PVwiMFwiLz5cbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWc/LndvcmtzcGFjZVN0YXR1cyA9PT0gJ2xpdmUnXCIgY2xhc3M9XCJjcWEtc2Itd3Mtc3RhdHVzXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtc2Itd3MtaW5mb1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1zYi13cy1uYW1lLXJvd1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXNiLXdzLW5hbWVcIj57eyBjb25maWc/LndvcmtzcGFjZU5hbWUgfHwgJ1dvcmtzcGFjZScgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtc2Itd3Mtc3dpdGNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMTdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIj5cbiAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjMsOSA3LDEyIDExLDlcIi8+XG4gICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIzLDUgNywyIDExLDVcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cImlzUGlubmVkIHx8IGNvbmZpZz8uc2hvd1NpZGViYXJQaW4gIT09IGZhbHNlXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1zYi1waW4tb3ItY2xvc2VcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJpc1Bpbm5lZCA/IGNsb3NlU2lkZWJhcigpIDogcGluU2lkZWJhcigpXCJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpc1Bpbm5lZCA/ICdDbG9zZSBzaWRlYmFyJyA6ICdQaW4gc2lkZWJhcidcIlxuICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiaXNQaW5uZWQgPyAncmlnaHQnIDogJ2xlZnQnXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzUGlubmVkID8gJ0Nsb3NlIHNpZGViYXInIDogJ1BpbiBzaWRlYmFyJ1wiPlxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICpuZ0lmPVwiaXNQaW5uZWRcIlxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4zNVwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIj5cbiAgICAgICAgICAgIDxyZWN0IHg9XCIxLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE1XCIgcng9XCIyLjVcIi8+XG4gICAgICAgICAgICA8bGluZSB4MT1cIjYuNVwiIHkxPVwiMS41XCIgeDI9XCI2LjVcIiB5Mj1cIjE2LjVcIi8+XG4gICAgICAgICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMTAuNSwxMiA4LjUsOSAxMC41LDZcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgKm5nSWY9XCIhaXNQaW5uZWRcIlxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4zNVwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAzdjRNNyAzaDR2NGwyIDNINWwyLTNWM3pcIi8+XG4gICAgICAgICAgICA8bGluZSB4MT1cIjlcIiB5MT1cIjEwXCIgeDI9XCI5XCIgeTI9XCIxNVwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gPT09PT0gMi4gU2VhcmNoID09PT09IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb25maWc/LnNob3dTZWFyY2ggIT09IGZhbHNlXCIgY2xhc3M9XCJjcWEtc2Itc2VhcmNoLXdyYXBcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjcWEtc2Itc2VhcmNoXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cIiFpc0V4cGFuZGVkID8gJ1NlYXJjaCcgOiAnJ1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cInNlYXJjaENsaWNrLmVtaXQoKVwiPlxuICAgICAgICA8c3ZnIGNsYXNzPVwiY3FhLXNiLXNlYXJjaC1pY29uXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCI+XG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjdcIiBjeT1cIjdcIiByPVwiNC41XCIvPlxuICAgICAgICAgIDxsaW5lIHgxPVwiMTAuNVwiIHkxPVwiMTAuNVwiIHgyPVwiMTMuNVwiIHkyPVwiMTMuNVwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXNiLXNlYXJjaC10ZXh0XCIgW2NsYXNzLmNxYS1zYi1zZWFyY2gtdGV4dC0tdmlzaWJsZV09XCJpc0V4cGFuZGVkXCI+XG4gICAgICAgICAge3sgY29uZmlnPy5zZWFyY2hQbGFjZWhvbGRlciB8fCAnU2VhcmNoIEFueXRoaW5nLi4uJyB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJjb25maWc/LnNob3dTZWFyY2hTaG9ydGN1dCAhPT0gZmFsc2UgJiYgaXNFeHBhbmRlZFwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtc2Itc2VhcmNoLWtiZFwiPuKMmEs8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gPT09PT0gMy4gQ1RBID09PT09IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb25maWc/LnNob3dDdGEgIT09IGZhbHNlXCIgY2xhc3M9XCJjcWEtc2ItY3RhLXdyYXBcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjcWEtc2ItY3RhXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cIiFpc0V4cGFuZGVkID8gKGNvbmZpZz8uY3RhTGFiZWwgfHwgJ05ldycpIDogJydcIiBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgIChjbGljayk9XCJjdGFDbGljay5lbWl0KClcIj5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjZcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIj5cbiAgICAgICAgICA8bGluZSB4MT1cIjlcIiB5MT1cIjMuNzVcIiB4Mj1cIjlcIiB5Mj1cIjE0LjI1XCIvPlxuICAgICAgICAgIDxsaW5lIHgxPVwiMy43NVwiIHkxPVwiOVwiIHgyPVwiMTQuMjVcIiB5Mj1cIjlcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1zYi1jdGEtdGV4dFwiIFtjbGFzcy5jcWEtc2ItY3RhLXRleHQtLXZpc2libGVdPVwiaXNFeHBhbmRlZFwiPlxuICAgICAgICAgIHt7IGNvbmZpZz8uY3RhTGFiZWwgfHwgJ05ldyBUZXN0IENhc2VzJyB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gPT09PT0gNC4gTmF2IG1lbnUgPT09PT0gLS0+XG4gICAgPGNxYS1uYXYtbWVudVxuICAgICAgW2l0ZW1zXT1cIm5hdkl0ZW1zXCJcbiAgICAgIFthY3RpdmVJZF09XCJhY3RpdmVOYXZJZFwiXG4gICAgICBbaXNFeHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcbiAgICAgIFtvcGVuUGFyZW50c109XCJvcGVuUGFyZW50c1wiXG4gICAgICAoaXRlbUNsaWNrKT1cIm9uTmF2SXRlbUNsaWNrKCRldmVudClcIj5cbiAgICA8L2NxYS1uYXYtbWVudT5cblxuICAgIDwhLS0gPT09PT0gNS4gVXRpbGl0eSBiYXIgPT09PT0gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1zYi11dGlsaXR5XCIgW2NsYXNzLmNxYS1zYi11dGlsaXR5LS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCI+XG4gICAgICA8IS0tIEV4cGFuZGVkOiAyIHdpZGUgdGlsZXMgKEhlbHAgJiBkb2NzICsgTGl2ZSBjaGF0KSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0V4cGFuZGVkXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cImNvbmZpZz8uc2hvd0hlbHBEb2NzICE9PSBmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtc2ItdXRpbC10aWxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGVscERvY3NDbGljay5lbWl0KClcIj5cbiAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMzVcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCI+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiOVwiIHI9XCI3LjI1XCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg1IDdhMi4xNSAyLjE1IDAgMCAxIDQuMTguNzVjMCAxLjQtMi4xNSAxLjgtMi4xNSAzLjA1XCIvPlxuICAgICAgICAgICAgPGxpbmUgeDE9XCI5XCIgeTE9XCIxMy40XCIgeDI9XCI5LjAxXCIgeTI9XCIxMy40XCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXNiLXV0aWwtdGlsZS1sYWJlbFwiPnt7IGNvbmZpZz8uaGVscERvY3NMYWJlbCB8fCAnSGVscCAmIGRvY3MnIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJjb25maWc/LnNob3dMaXZlQ2hhdCAhPT0gZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXNiLXV0aWwtdGlsZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImxpdmVDaGF0Q2xpY2suZW1pdCgpXCI+XG4gICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjM1XCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNiAySDJhMSAxIDAgMCAwLTEgMXY5YTEgMSAwIDAgMCAxIDFoM3YzbDQuNS0zSDE2YTEgMSAwIDAgMCAxLTFWM2ExIDEgMCAwIDAtMS0xelwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1zYi11dGlsLXRpbGUtbGFiZWxcIj5MaXZlIGNoYXQ8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gQ29sbGFwc2VkOiBoZWxwICsgbGl2ZSBjaGF0IG9ubHkgKG5vdGlmaWNhdGlvbnMgLyBzcGVha2VyIGFyZSBub3Qgc2hvd24gb24gdGhlIHJhaWwpIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0V4cGFuZGVkXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cImNvbmZpZz8uc2hvd0hlbHBEb2NzICE9PSBmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtc2ItdXRpbC1jb21wYWN0XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjb25maWc/LmhlbHBEb2NzTGFiZWwgfHwgJ0hlbHAgJiBkb2NzJ1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGVscERvY3NDbGljay5lbWl0KClcIj5cbiAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMzVcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCI+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOVwiIGN5PVwiOVwiIHI9XCI3LjI1XCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg1IDdhMi4xNSAyLjE1IDAgMCAxIDQuMTguNzVjMCAxLjQtMi4xNSAxLjgtMi4xNSAzLjA1XCIvPlxuICAgICAgICAgICAgPGxpbmUgeDE9XCI5XCIgeTE9XCIxMy40XCIgeDI9XCI5LjAxXCIgeTI9XCIxMy40XCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJjb25maWc/LnNob3dMaXZlQ2hhdCAhPT0gZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXNiLXV0aWwtY29tcGFjdFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIkxpdmUgY2hhdFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICAoY2xpY2spPVwibGl2ZUNoYXRDbGljay5lbWl0KClcIj5cbiAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMzVcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTE2IDJIMmExIDEgMCAwIDAtMSAxdjlhMSAxIDAgMCAwIDEgMWgzdjNsNC41LTNIMTZhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTF6XCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSA9PT09PSA2LiBQcm9maWxlIGNhcmQgPT09PT0gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1zYi1wcm9maWxlXCIgI3Byb2ZpbGVBbmNob3I+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY3FhLXNiLXByb2ZpbGUtbWFpblwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCIhaXNFeHBhbmRlZCA/IChjb25maWc/LnVzZXJOYW1lIHx8IHByb2ZpbGVVc2VyPy5uYW1lIHx8ICcnKSA6ICcnXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIihwcm9maWxlVXNlciAmJiBwcm9maWxlTWVudUVudHJpZXM/Lmxlbmd0aCkgPyAnbWVudScgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIocHJvZmlsZVVzZXIgJiYgcHJvZmlsZU1lbnVFbnRyaWVzPy5sZW5ndGgpID8gaXNQcm9maWxlTWVudU9wZW4gOiBudWxsXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uUHJvZmlsZUNsaWNrKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1zYi1wcm9maWxlLWF2YXRhclwiPnt7IGNvbmZpZz8udXNlckluaXRpYWxzIHx8ICc/JyB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXNiLXByb2ZpbGUtaW5mb1wiIFtjbGFzcy5jcWEtc2ItcHJvZmlsZS1pbmZvLS12aXNpYmxlXT1cImlzRXhwYW5kZWRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1zYi1wcm9maWxlLW5hbWVcIj57eyBjb25maWc/LnVzZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlnPy51c2VyUm9sZVwiIGNsYXNzPVwiY3FhLXNiLXByb2ZpbGUtcm9sZVwiPnt7IGNvbmZpZy51c2VyUm9sZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKm5nSWY9XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtc2ItcHJvZmlsZS1sb2dvdXRcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkxvZ291dFwiIChjbGljayk9XCJsb2dvdXRDbGljay5lbWl0KClcIj5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjJcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNiAxNEgzYTEgMSAwIDAgMS0xLTFWM2ExIDEgMCAwIDEgMS0xaDNcIi8+XG4gICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjExLDExIDE0LDggMTEsNVwiLz5cbiAgICAgICAgICA8bGluZSB4MT1cIjE0XCIgeTE9XCI4XCIgeDI9XCI2XCIgeTI9XCI4XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGNxYS1wcm9maWxlLW1lbnVcbiAgICAgICpuZ0lmPVwiaXNQcm9maWxlTWVudU9wZW4gJiYgcHJvZmlsZVVzZXIgJiYgcHJvZmlsZU1lbnVFbnRyaWVzPy5sZW5ndGhcIlxuICAgICAgW3VzZXJdPVwicHJvZmlsZVVzZXJcIlxuICAgICAgW2VudHJpZXNdPVwicHJvZmlsZU1lbnVFbnRyaWVzXCJcbiAgICAgIFthbmNob3JdPVwicHJvZmlsZUFuY2hvclJlZj8ubmF0aXZlRWxlbWVudCB8fCBudWxsXCJcbiAgICAgIChpdGVtQ2xpY2spPVwib25Qcm9maWxlTWVudUl0ZW1DbGljaygkZXZlbnQpXCJcbiAgICAgIChkaXNtaXNzZWQpPVwib25Qcm9maWxlTWVudURpc21pc3NlZCgpXCI+XG4gICAgPC9jcWEtcHJvZmlsZS1tZW51PlxuXG4gICAgPGNxYS13b3Jrc3BhY2UtbWVudVxuICAgICAgKm5nSWY9XCJpc1dvcmtzcGFjZU1lbnVPcGVuICYmIHdvcmtzcGFjZXM/Lmxlbmd0aFwiXG4gICAgICBbd29ya3NwYWNlc109XCJ3b3Jrc3BhY2VzXCJcbiAgICAgIFtjdXJyZW50V29ya3NwYWNlSWRdPVwiY3VycmVudFdvcmtzcGFjZUlkXCJcbiAgICAgIFt3b3Jrc3BhY2VOYW1lXT1cImNvbmZpZz8ud29ya3NwYWNlTmFtZVwiXG4gICAgICBbYW5jaG9yXT1cIndvcmtzcGFjZUFuY2hvclJlZj8ubmF0aXZlRWxlbWVudCB8fCBudWxsXCJcbiAgICAgICh3b3Jrc3BhY2VTZWxlY3RlZCk9XCJvbldvcmtzcGFjZU1lbnVJdGVtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAobWFuYWdlV29ya3NwYWNlc0NsaWNrKT1cIm9uTWFuYWdlV29ya3NwYWNlc0NsaWNrKClcIlxuICAgICAgKGRpc21pc3NlZCk9XCJvbldvcmtzcGFjZU1lbnVEaXNtaXNzZWQoKVwiPlxuICAgIDwvY3FhLXdvcmtzcGFjZS1tZW51PlxuXG4gIDwvYXNpZGU+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export function isNavSection(item) {
2
+ return item.type === 'section';
3
+ }
4
+ export { isProfileMenuDivider, } from './profile-menu/profile-menu.models';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NpZGViYXIvc2lkZWJhci5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0NBLE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBaUI7SUFDNUMsT0FBUSxJQUFtQixDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7QUFDakQsQ0FBQztBQUVELE9BQU8sRUFLTCxvQkFBb0IsR0FDckIsTUFBTSxvQ0FBb0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTmF2SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBDU1MgaWNvbiBjbGFzcyByZW5kZXJlZCBhcyA8aSBjbGFzcz1cImljb25DbGFzc1wiPiAqL1xuICBpY29uQ2xhc3M/OiBzdHJpbmc7XG4gIC8qKiBSb3V0ZSBwYXRoIOKAlCBjb25zdW1pbmcgY29tcG9uZW50IG5hdmlnYXRlcyBvbiBuYXZJdGVtQ2xpY2sgKi9cbiAgcm91dGVyTGluaz86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBOYXZDaGlsZEl0ZW1bXTtcbiAgLyoqIEJhZGdlIGNvdW50IG9yIGxhYmVsLCBlLmcuIFwiM1wiICovXG4gIGJhZGdlPzogc3RyaW5nO1xuICBzdGF0dXM/OiAnbGl2ZScgfCAnZGFuZ2VyJztcbiAgaXNOZXc/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkVG9vbHRpcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYXZDaGlsZEl0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uQ2xhc3M/OiBzdHJpbmc7XG4gIHJvdXRlckxpbms/OiBzdHJpbmc7XG4gIGlzTmV3PzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdlNlY3Rpb24ge1xuICB0eXBlOiAnc2VjdGlvbic7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE5hdk1lbnVJdGVtID0gTmF2SXRlbSB8IE5hdlNlY3Rpb247XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05hdlNlY3Rpb24oaXRlbTogTmF2TWVudUl0ZW0pOiBpdGVtIGlzIE5hdlNlY3Rpb24ge1xuICByZXR1cm4gKGl0ZW0gYXMgTmF2U2VjdGlvbikudHlwZSA9PT0gJ3NlY3Rpb24nO1xufVxuXG5leHBvcnQge1xuICBQcm9maWxlTWVudVVzZXIsXG4gIFByb2ZpbGVNZW51SXRlbSxcbiAgUHJvZmlsZU1lbnVEaXZpZGVyLFxuICBQcm9maWxlTWVudUVudHJ5LFxuICBpc1Byb2ZpbGVNZW51RGl2aWRlcixcbn0gZnJvbSAnLi9wcm9maWxlLW1lbnUvcHJvZmlsZS1tZW51Lm1vZGVscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lkZWJhckNvbmZpZyB7XG4gIHdvcmtzcGFjZU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBsb2dvIGltYWdlIFVSTC9kYXRhLVVSSSBzaG93biBpbnNpZGUgdGhlIHdvcmtzcGFjZSBhdmF0YXIuIEZhbGxzIGJhY2sgdG8gdGhlIHdvcmtzcGFjZSBpbml0aWFsIHdoZW4gbm90IHByb3ZpZGVkLiAqL1xuICB3b3Jrc3BhY2VMb2dvPzogc3RyaW5nO1xuICAvKiogZS5nLiAnTGl2ZScgKi9cbiAgd29ya3NwYWNlQmFkZ2U/OiBzdHJpbmc7XG4gIHdvcmtzcGFjZVN0YXR1cz86ICdsaXZlJyB8ICd3YXJuaW5nJyB8ICdvZmZsaW5lJztcbiAgdXNlck5hbWU/OiBzdHJpbmc7XG4gIHVzZXJJbml0aWFscz86IHN0cmluZztcbiAgdXNlclJvbGU/OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBmb3IgdGhlIENUQSBidXR0b24sIGUuZy4gJ05ldyBUZXN0IENhc2UnICovXG4gIGN0YUxhYmVsPzogc3RyaW5nO1xuICBzZWFyY2hQbGFjZWhvbGRlcj86IHN0cmluZztcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHNob3dzIGEg4oyYSyBoaW50IGluIHRoZSBleHBhbmRlZCBzZWFyY2ggcm93ICovXG4gIHNob3dTZWFyY2hTaG9ydGN1dD86IGJvb2xlYW47XG4gIHNob3dDdGE/OiBib29sZWFuO1xuICAvKiogUmVzZXJ2ZWQ7IG5vdGlmaWNhdGlvbnMgYXJlIG5vdCBzaG93biBvbiB0aGUgY29sbGFwc2VkIHJhaWwuICovXG4gIHNob3dOb3RpZmljYXRpb25zPzogYm9vbGVhbjtcbiAgLyoqIFJlc2VydmVkOyBiYWRnZSBpcyBub3Qgc2hvd24gb24gdGhlIGNvbGxhcHNlZCByYWlsLiAqL1xuICBub3RpZmljYXRpb25Db3VudD86IG51bWJlcjtcbiAgc2hvd0xpdmVDaGF0PzogYm9vbGVhbjtcbiAgLyoqIEhlbHAgJiBkb2NzIGVudHJ5IChleHBhbmRlZCBmb290ZXIgKyBjb2xsYXBzZWQgdXRpbGl0eSBzdGFjaykuIERlZmF1bHQgdHJ1ZSAqL1xuICBzaG93SGVscERvY3M/OiBib29sZWFuO1xuICAvKiogUmVzZXJ2ZWQ7IHNwZWFrZXIgLyDigJx3aGF04oCZcyBuZXfigJ0gaXMgbm90IHNob3duIG9uIHRoZSBjb2xsYXBzZWQgcmFpbC4gKi9cbiAgc2hvd1NwZWFrZXI/OiBib29sZWFuO1xuICAvKiogTGFiZWwgZm9yIHRoZSBoZWxwIHV0aWxpdHkgd2hlbiB0aGUgc2lkZWJhciBpcyBleHBhbmRlZCAqL1xuICBoZWxwRG9jc0xhYmVsPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCB0aGUgc2lkZWJhciBzdGFydHMgZXhwYW5kZWQgYW5kIHBpbm5lZCAobW91c2UgbGVhdmUgZG9lcyBub3QgY29sbGFwc2UpLiAqL1xuICBkZWZhdWx0UGlubmVkPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gZmFsc2UsIGhpZGVzIHRoZSBoZWFkZXIgcGluIGNvbnRyb2wgKGV4cGFuZGVkIHNpZGViYXIgYWx3YXlzIGF1dG8tY29sbGFwc2VzIG9uIG1vdXNlIGxlYXZlIHVubGVzcyBkZWZhdWx0UGlubmVkKS4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgc2hvd1NpZGViYXJQaW4/OiBib29sZWFuO1xufVxuIl19