valtech-components 2.0.529 → 2.0.531

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 (34) hide show
  1. package/esm2022/lib/components/molecules/docs-api-table/docs-api-table.component.mjs +218 -0
  2. package/esm2022/lib/components/molecules/docs-api-table/types.mjs +11 -0
  3. package/esm2022/lib/components/molecules/docs-code-example/docs-code-example.component.mjs +217 -0
  4. package/esm2022/lib/components/molecules/docs-code-example/types.mjs +2 -0
  5. package/esm2022/lib/components/molecules/docs-nav-links/docs-nav-links.component.mjs +133 -0
  6. package/esm2022/lib/components/molecules/docs-nav-links/types.mjs +2 -0
  7. package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +15 -10
  8. package/esm2022/lib/components/organisms/docs-sidebar/docs-sidebar.component.mjs +276 -0
  9. package/esm2022/lib/components/organisms/docs-sidebar/types.mjs +2 -0
  10. package/esm2022/lib/components/organisms/docs-toc/docs-toc.component.mjs +255 -0
  11. package/esm2022/lib/components/organisms/docs-toc/types.mjs +2 -0
  12. package/esm2022/lib/components/organisms/infinite-list/infinite-list.component.mjs +20 -18
  13. package/esm2022/lib/components/templates/docs-layout/docs-layout.component.mjs +203 -0
  14. package/esm2022/lib/components/templates/docs-layout/types.mjs +2 -0
  15. package/esm2022/lib/services/i18n/default-content.mjs +5 -1
  16. package/esm2022/public-api.mjs +15 -1
  17. package/fesm2022/valtech-components.mjs +1313 -27
  18. package/fesm2022/valtech-components.mjs.map +1 -1
  19. package/lib/components/molecules/docs-api-table/docs-api-table.component.d.ts +41 -0
  20. package/lib/components/molecules/docs-api-table/types.d.ts +62 -0
  21. package/lib/components/molecules/docs-code-example/docs-code-example.component.d.ts +35 -0
  22. package/lib/components/molecules/docs-code-example/types.d.ts +63 -0
  23. package/lib/components/molecules/docs-nav-links/docs-nav-links.component.d.ts +29 -0
  24. package/lib/components/molecules/docs-nav-links/types.d.ts +31 -0
  25. package/lib/components/organisms/comment-section/comment-section.component.d.ts +2 -0
  26. package/lib/components/organisms/docs-sidebar/docs-sidebar.component.d.ts +51 -0
  27. package/lib/components/organisms/docs-sidebar/types.d.ts +93 -0
  28. package/lib/components/organisms/docs-toc/docs-toc.component.d.ts +58 -0
  29. package/lib/components/organisms/docs-toc/types.d.ts +62 -0
  30. package/lib/components/organisms/infinite-list/infinite-list.component.d.ts +2 -0
  31. package/lib/components/templates/docs-layout/docs-layout.component.d.ts +41 -0
  32. package/lib/components/templates/docs-layout/types.d.ts +39 -0
  33. package/package.json +1 -1
  34. package/public-api.d.ts +12 -0
@@ -0,0 +1,276 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
3
+ import { NavigationEnd } from '@angular/router';
4
+ import { IonIcon } from '@ionic/angular/standalone';
5
+ import { addIcons } from 'ionicons';
6
+ import { chevronDownOutline, chevronForwardOutline } from 'ionicons/icons';
7
+ import { filter } from 'rxjs/operators';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/router";
10
+ addIcons({ chevronDownOutline, chevronForwardOutline });
11
+ /**
12
+ * val-docs-sidebar
13
+ *
14
+ * A hierarchical navigation sidebar for documentation sites.
15
+ * Supports collapsible sections, active route highlighting, and badges.
16
+ *
17
+ * @example Basic usage
18
+ * ```html
19
+ * <val-docs-sidebar
20
+ * [props]="{
21
+ * logo: { src: '/assets/logo.svg', alt: 'Docs', title: 'DOCS' },
22
+ * sections: [
23
+ * { title: 'Getting Started', route: ['/docs', 'getting-started'] },
24
+ * {
25
+ * title: 'Components',
26
+ * expanded: true,
27
+ * children: [
28
+ * { label: 'Button', route: ['/docs', 'components', 'button'] },
29
+ * { label: 'Card', route: ['/docs', 'components', 'card'], badge: 'New' }
30
+ * ]
31
+ * }
32
+ * ]
33
+ * }"
34
+ * (navigate)="onNavigate($event)"
35
+ * ></val-docs-sidebar>
36
+ * ```
37
+ */
38
+ export class DocsSidebarComponent {
39
+ constructor(router) {
40
+ this.router = router;
41
+ this.props = { sections: [] };
42
+ this.navigate = new EventEmitter();
43
+ this.expandedSections = {};
44
+ this.currentRoute = [];
45
+ }
46
+ ngOnInit() {
47
+ this.initializeExpandedSections();
48
+ this.updateCurrentRoute();
49
+ // Listen for route changes
50
+ this.router.events
51
+ .pipe(filter(event => event instanceof NavigationEnd))
52
+ .subscribe(() => {
53
+ this.updateCurrentRoute();
54
+ this.autoExpandActiveSection();
55
+ });
56
+ }
57
+ ngOnChanges(changes) {
58
+ if (changes['props']) {
59
+ this.initializeExpandedSections();
60
+ }
61
+ }
62
+ initializeExpandedSections() {
63
+ this.props.sections.forEach(section => {
64
+ if (this.expandedSections[section.title] === undefined) {
65
+ this.expandedSections[section.title] = section.expanded ?? false;
66
+ }
67
+ });
68
+ }
69
+ updateCurrentRoute() {
70
+ this.currentRoute = this.router.url.split('/').filter(Boolean);
71
+ // Use activeRoute from props if provided
72
+ if (this.props.activeRoute) {
73
+ this.currentRoute = this.props.activeRoute;
74
+ }
75
+ }
76
+ autoExpandActiveSection() {
77
+ this.props.sections.forEach(section => {
78
+ if (section.children?.some(link => this.isLinkActive(link))) {
79
+ this.expandedSections[section.title] = true;
80
+ }
81
+ });
82
+ }
83
+ onSectionClick(section) {
84
+ if (section.route) {
85
+ this.onNavigate(section.route);
86
+ }
87
+ else if (section.children?.length) {
88
+ this.expandedSections[section.title] = !this.expandedSections[section.title];
89
+ }
90
+ }
91
+ onNavigate(route) {
92
+ this.navigate.emit(route);
93
+ this.router.navigate(route);
94
+ }
95
+ isSectionActive(section) {
96
+ if (section.route) {
97
+ return this.routesMatch(section.route, this.currentRoute);
98
+ }
99
+ return section.children?.some(link => this.isLinkActive(link)) ?? false;
100
+ }
101
+ isLinkActive(link) {
102
+ return this.routesMatch(link.route, this.currentRoute);
103
+ }
104
+ routesMatch(route, current) {
105
+ const routePath = route.join('/').replace(/^\//, '');
106
+ const currentPath = current.join('/');
107
+ return currentPath === routePath || currentPath.startsWith(routePath + '/');
108
+ }
109
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsSidebarComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
110
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DocsSidebarComponent, isStandalone: true, selector: "val-docs-sidebar", inputs: { props: "props" }, outputs: { navigate: "navigate" }, usesOnChanges: true, ngImport: i0, template: `
111
+ <nav
112
+ class="docs-sidebar"
113
+ [class]="props.cssClass"
114
+ [style.background]="props.backgroundColor"
115
+ >
116
+ <!-- Logo -->
117
+ @if (props.logo) {
118
+ <div
119
+ class="docs-sidebar__logo"
120
+ [class.docs-sidebar__logo--clickable]="props.logo.route"
121
+ (click)="props.logo.route ? onNavigate(props.logo.route) : null"
122
+ >
123
+ <img
124
+ [src]="props.logo.src"
125
+ [alt]="props.logo.alt"
126
+ [style.height]="props.logo.height || '32px'"
127
+ />
128
+ @if (props.logo.title) {
129
+ <span class="docs-sidebar__logo-title">{{ props.logo.title }}</span>
130
+ }
131
+ </div>
132
+ }
133
+
134
+ <!-- Navigation sections -->
135
+ <div class="docs-sidebar__nav">
136
+ @for (section of props.sections; track section.title) {
137
+ <div class="docs-sidebar__section">
138
+ <!-- Section header -->
139
+ <div
140
+ class="docs-sidebar__section-header"
141
+ [class.docs-sidebar__section-header--active]="isSectionActive(section)"
142
+ [class.docs-sidebar__section-header--expanded]="expandedSections[section.title]"
143
+ [class.docs-sidebar__section-header--clickable]="section.route || section.children?.length"
144
+ (click)="onSectionClick(section)"
145
+ >
146
+ @if (section.icon) {
147
+ <ion-icon [name]="section.icon" class="docs-sidebar__section-icon"></ion-icon>
148
+ }
149
+ <span class="docs-sidebar__section-title">{{ section.title }}</span>
150
+ @if (section.badge) {
151
+ <span class="docs-sidebar__badge docs-sidebar__badge--section">{{ section.badge }}</span>
152
+ }
153
+ @if (section.children?.length) {
154
+ <ion-icon
155
+ class="docs-sidebar__chevron"
156
+ [name]="expandedSections[section.title] ? 'chevron-down-outline' : 'chevron-forward-outline'"
157
+ ></ion-icon>
158
+ }
159
+ </div>
160
+
161
+ <!-- Section children -->
162
+ @if (section.children?.length && expandedSections[section.title]) {
163
+ <div class="docs-sidebar__children">
164
+ @for (link of section.children; track link.label) {
165
+ <div
166
+ class="docs-sidebar__link"
167
+ [class.docs-sidebar__link--active]="isLinkActive(link)"
168
+ (click)="onNavigate(link.route)"
169
+ >
170
+ <span class="docs-sidebar__link-label">{{ link.label }}</span>
171
+ @if (link.badge) {
172
+ <span
173
+ class="docs-sidebar__badge"
174
+ [class.docs-sidebar__badge--primary]="link.badgeColor === 'primary'"
175
+ [class.docs-sidebar__badge--success]="link.badgeColor === 'success'"
176
+ [class.docs-sidebar__badge--warning]="link.badgeColor === 'warning'"
177
+ [class.docs-sidebar__badge--danger]="link.badgeColor === 'danger'"
178
+ >{{ link.badge }}</span>
179
+ }
180
+ </div>
181
+ }
182
+ </div>
183
+ }
184
+ </div>
185
+ }
186
+ </div>
187
+ </nav>
188
+ `, isInline: true, styles: [".docs-sidebar{--sidebar-text-color: var(--ion-text-color, #1a1a1a);--sidebar-text-secondary: var(--ion-color-medium, #666);--sidebar-active-color: var(--ion-color-primary, #3880ff);--sidebar-active-bg: var(--ion-color-primary-tint, rgba(56, 128, 255, .1));--sidebar-hover-bg: var(--ion-color-light, #f4f5f8);--sidebar-border-color: var(--ion-border-color, #e0e0e0);font-family:var(--ion-font-family, system-ui, sans-serif)}.docs-sidebar__logo{display:flex;align-items:center;gap:.75rem;padding:1rem 0;margin-bottom:1rem;border-bottom:1px solid var(--sidebar-border-color)}.docs-sidebar__logo--clickable{cursor:pointer;transition:opacity .2s ease}.docs-sidebar__logo--clickable:hover{opacity:.8}.docs-sidebar__logo img{height:32px;width:auto}.docs-sidebar__logo-title{font-size:1.25rem;font-weight:600;color:var(--sidebar-text-color);letter-spacing:.5px}.docs-sidebar__nav{display:flex;flex-direction:column;gap:.25rem}.docs-sidebar__section{margin-bottom:.25rem}.docs-sidebar__section-header{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem;border-radius:6px;font-size:.875rem;font-weight:600;color:var(--sidebar-text-color);transition:all .15s ease}.docs-sidebar__section-header--clickable{cursor:pointer}.docs-sidebar__section-header--clickable:hover{background:var(--sidebar-hover-bg)}.docs-sidebar__section-header--active{color:var(--sidebar-active-color)}.docs-sidebar__section-header--expanded .docs-sidebar__chevron{transform:rotate(0)}.docs-sidebar__section-icon{font-size:1.125rem;color:var(--sidebar-text-secondary)}.docs-sidebar__section-title{flex:1}.docs-sidebar__chevron{font-size:.875rem;color:var(--sidebar-text-secondary);transition:transform .2s ease}.docs-sidebar__children{padding-left:1rem;margin-top:.25rem;border-left:1px solid var(--sidebar-border-color);margin-left:.75rem}.docs-sidebar__link{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:6px;font-size:.8125rem;color:var(--sidebar-text-secondary);cursor:pointer;transition:all .15s ease}.docs-sidebar__link:hover{background:var(--sidebar-hover-bg);color:var(--sidebar-text-color)}.docs-sidebar__link--active{background:var(--sidebar-active-bg);color:var(--sidebar-active-color);font-weight:500}.docs-sidebar__link--active:hover{background:var(--sidebar-active-bg);color:var(--sidebar-active-color)}.docs-sidebar__link-label{flex:1}.docs-sidebar__badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:10px;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;background:var(--ion-color-primary-tint, rgba(56, 128, 255, .15));color:var(--ion-color-primary, #3880ff)}.docs-sidebar__badge--section{margin-left:auto}.docs-sidebar__badge--primary{background:var(--ion-color-primary-tint, rgba(56, 128, 255, .15));color:var(--ion-color-primary, #3880ff)}.docs-sidebar__badge--success{background:var(--ion-color-success-tint, rgba(45, 211, 111, .15));color:var(--ion-color-success, #2dd36f)}.docs-sidebar__badge--warning{background:var(--ion-color-warning-tint, rgba(255, 196, 9, .15));color:var(--ion-color-warning-shade, #e0ac08)}.docs-sidebar__badge--danger{background:var(--ion-color-danger-tint, rgba(235, 68, 90, .15));color:var(--ion-color-danger, #eb445a)}:host-context(.dark) .docs-sidebar,:host-context([color-scheme=dark]) .docs-sidebar{--sidebar-text-color: #f4f5f8;--sidebar-text-secondary: #a0a0a0;--sidebar-hover-bg: rgba(255, 255, 255, .05);--sidebar-border-color: #3a3a3a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
189
+ }
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsSidebarComponent, decorators: [{
191
+ type: Component,
192
+ args: [{ selector: 'val-docs-sidebar', standalone: true, imports: [CommonModule, IonIcon], template: `
193
+ <nav
194
+ class="docs-sidebar"
195
+ [class]="props.cssClass"
196
+ [style.background]="props.backgroundColor"
197
+ >
198
+ <!-- Logo -->
199
+ @if (props.logo) {
200
+ <div
201
+ class="docs-sidebar__logo"
202
+ [class.docs-sidebar__logo--clickable]="props.logo.route"
203
+ (click)="props.logo.route ? onNavigate(props.logo.route) : null"
204
+ >
205
+ <img
206
+ [src]="props.logo.src"
207
+ [alt]="props.logo.alt"
208
+ [style.height]="props.logo.height || '32px'"
209
+ />
210
+ @if (props.logo.title) {
211
+ <span class="docs-sidebar__logo-title">{{ props.logo.title }}</span>
212
+ }
213
+ </div>
214
+ }
215
+
216
+ <!-- Navigation sections -->
217
+ <div class="docs-sidebar__nav">
218
+ @for (section of props.sections; track section.title) {
219
+ <div class="docs-sidebar__section">
220
+ <!-- Section header -->
221
+ <div
222
+ class="docs-sidebar__section-header"
223
+ [class.docs-sidebar__section-header--active]="isSectionActive(section)"
224
+ [class.docs-sidebar__section-header--expanded]="expandedSections[section.title]"
225
+ [class.docs-sidebar__section-header--clickable]="section.route || section.children?.length"
226
+ (click)="onSectionClick(section)"
227
+ >
228
+ @if (section.icon) {
229
+ <ion-icon [name]="section.icon" class="docs-sidebar__section-icon"></ion-icon>
230
+ }
231
+ <span class="docs-sidebar__section-title">{{ section.title }}</span>
232
+ @if (section.badge) {
233
+ <span class="docs-sidebar__badge docs-sidebar__badge--section">{{ section.badge }}</span>
234
+ }
235
+ @if (section.children?.length) {
236
+ <ion-icon
237
+ class="docs-sidebar__chevron"
238
+ [name]="expandedSections[section.title] ? 'chevron-down-outline' : 'chevron-forward-outline'"
239
+ ></ion-icon>
240
+ }
241
+ </div>
242
+
243
+ <!-- Section children -->
244
+ @if (section.children?.length && expandedSections[section.title]) {
245
+ <div class="docs-sidebar__children">
246
+ @for (link of section.children; track link.label) {
247
+ <div
248
+ class="docs-sidebar__link"
249
+ [class.docs-sidebar__link--active]="isLinkActive(link)"
250
+ (click)="onNavigate(link.route)"
251
+ >
252
+ <span class="docs-sidebar__link-label">{{ link.label }}</span>
253
+ @if (link.badge) {
254
+ <span
255
+ class="docs-sidebar__badge"
256
+ [class.docs-sidebar__badge--primary]="link.badgeColor === 'primary'"
257
+ [class.docs-sidebar__badge--success]="link.badgeColor === 'success'"
258
+ [class.docs-sidebar__badge--warning]="link.badgeColor === 'warning'"
259
+ [class.docs-sidebar__badge--danger]="link.badgeColor === 'danger'"
260
+ >{{ link.badge }}</span>
261
+ }
262
+ </div>
263
+ }
264
+ </div>
265
+ }
266
+ </div>
267
+ }
268
+ </div>
269
+ </nav>
270
+ `, styles: [".docs-sidebar{--sidebar-text-color: var(--ion-text-color, #1a1a1a);--sidebar-text-secondary: var(--ion-color-medium, #666);--sidebar-active-color: var(--ion-color-primary, #3880ff);--sidebar-active-bg: var(--ion-color-primary-tint, rgba(56, 128, 255, .1));--sidebar-hover-bg: var(--ion-color-light, #f4f5f8);--sidebar-border-color: var(--ion-border-color, #e0e0e0);font-family:var(--ion-font-family, system-ui, sans-serif)}.docs-sidebar__logo{display:flex;align-items:center;gap:.75rem;padding:1rem 0;margin-bottom:1rem;border-bottom:1px solid var(--sidebar-border-color)}.docs-sidebar__logo--clickable{cursor:pointer;transition:opacity .2s ease}.docs-sidebar__logo--clickable:hover{opacity:.8}.docs-sidebar__logo img{height:32px;width:auto}.docs-sidebar__logo-title{font-size:1.25rem;font-weight:600;color:var(--sidebar-text-color);letter-spacing:.5px}.docs-sidebar__nav{display:flex;flex-direction:column;gap:.25rem}.docs-sidebar__section{margin-bottom:.25rem}.docs-sidebar__section-header{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem;border-radius:6px;font-size:.875rem;font-weight:600;color:var(--sidebar-text-color);transition:all .15s ease}.docs-sidebar__section-header--clickable{cursor:pointer}.docs-sidebar__section-header--clickable:hover{background:var(--sidebar-hover-bg)}.docs-sidebar__section-header--active{color:var(--sidebar-active-color)}.docs-sidebar__section-header--expanded .docs-sidebar__chevron{transform:rotate(0)}.docs-sidebar__section-icon{font-size:1.125rem;color:var(--sidebar-text-secondary)}.docs-sidebar__section-title{flex:1}.docs-sidebar__chevron{font-size:.875rem;color:var(--sidebar-text-secondary);transition:transform .2s ease}.docs-sidebar__children{padding-left:1rem;margin-top:.25rem;border-left:1px solid var(--sidebar-border-color);margin-left:.75rem}.docs-sidebar__link{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:6px;font-size:.8125rem;color:var(--sidebar-text-secondary);cursor:pointer;transition:all .15s ease}.docs-sidebar__link:hover{background:var(--sidebar-hover-bg);color:var(--sidebar-text-color)}.docs-sidebar__link--active{background:var(--sidebar-active-bg);color:var(--sidebar-active-color);font-weight:500}.docs-sidebar__link--active:hover{background:var(--sidebar-active-bg);color:var(--sidebar-active-color)}.docs-sidebar__link-label{flex:1}.docs-sidebar__badge{display:inline-flex;align-items:center;padding:.125rem .5rem;border-radius:10px;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;background:var(--ion-color-primary-tint, rgba(56, 128, 255, .15));color:var(--ion-color-primary, #3880ff)}.docs-sidebar__badge--section{margin-left:auto}.docs-sidebar__badge--primary{background:var(--ion-color-primary-tint, rgba(56, 128, 255, .15));color:var(--ion-color-primary, #3880ff)}.docs-sidebar__badge--success{background:var(--ion-color-success-tint, rgba(45, 211, 111, .15));color:var(--ion-color-success, #2dd36f)}.docs-sidebar__badge--warning{background:var(--ion-color-warning-tint, rgba(255, 196, 9, .15));color:var(--ion-color-warning-shade, #e0ac08)}.docs-sidebar__badge--danger{background:var(--ion-color-danger-tint, rgba(235, 68, 90, .15));color:var(--ion-color-danger, #eb445a)}:host-context(.dark) .docs-sidebar,:host-context([color-scheme=dark]) .docs-sidebar{--sidebar-text-color: #f4f5f8;--sidebar-text-secondary: #a0a0a0;--sidebar-hover-bg: rgba(255, 255, 255, .05);--sidebar-border-color: #3a3a3a}\n"] }]
271
+ }], ctorParameters: () => [{ type: i1.Router }], propDecorators: { props: [{
272
+ type: Input
273
+ }], navigate: [{
274
+ type: Output
275
+ }] } });
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy1zaWRlYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvZG9jcy1zaWRlYmFyL2RvY3Mtc2lkZWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBVSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUd4QyxRQUFRLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUFFeEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBc0ZILE1BQU0sT0FBTyxvQkFBb0I7SUFRL0IsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFQekIsVUFBSyxHQUF3QixFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUU3QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUVsRCxxQkFBZ0IsR0FBNEIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQWEsRUFBRSxDQUFDO0lBRUMsQ0FBQztJQUV0QyxRQUFRO1FBQ04sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGtC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QUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUMxRSxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQXFCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQWUsRUFBRSxPQUFpQjtRQUNwRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxPQUFPLFdBQVcsS0FBSyxTQUFTLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQzsrR0FqRlUsb0JBQW9CO21HQUFwQixvQkFBb0IsZ0tBakZyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEVULDQ4R0EvRVMsWUFBWSwrQkFBRSxPQUFPOzs0RkFrRnBCLG9CQUFvQjtrQkFyRmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFDdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThFVDsyRUFJUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoZXZyb25Eb3duT3V0bGluZSwgY2hldnJvbkZvcndhcmRPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRG9jc1NpZGViYXJNZXRhZGF0YSwgRG9jc1NpZGViYXJTZWN0aW9uLCBEb2NzU2lkZWJhckxpbmsgfSBmcm9tICcuL3R5cGVzJztcblxuYWRkSWNvbnMoeyBjaGV2cm9uRG93bk91dGxpbmUsIGNoZXZyb25Gb3J3YXJkT3V0bGluZSB9KTtcblxuLyoqXG4gKiB2YWwtZG9jcy1zaWRlYmFyXG4gKlxuICogQSBoaWVyYXJjaGljYWwgbmF2aWdhdGlvbiBzaWRlYmFyIGZvciBkb2N1bWVudGF0aW9uIHNpdGVzLlxuICogU3VwcG9ydHMgY29sbGFwc2libGUgc2VjdGlvbnMsIGFjdGl2ZSByb3V0ZSBoaWdobGlnaHRpbmcsIGFuZCBiYWRnZXMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYGh0bWxcbiAqIDx2YWwtZG9jcy1zaWRlYmFyXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgbG9nbzogeyBzcmM6ICcvYXNzZXRzL2xvZ28uc3ZnJywgYWx0OiAnRG9jcycsIHRpdGxlOiAnRE9DUycgfSxcbiAqICAgICBzZWN0aW9uczogW1xuICogICAgICAgeyB0aXRsZTogJ0dldHRpbmcgU3RhcnRlZCcsIHJvdXRlOiBbJy9kb2NzJywgJ2dldHRpbmctc3RhcnRlZCddIH0sXG4gKiAgICAgICB7XG4gKiAgICAgICAgIHRpdGxlOiAnQ29tcG9uZW50cycsXG4gKiAgICAgICAgIGV4cGFuZGVkOiB0cnVlLFxuICogICAgICAgICBjaGlsZHJlbjogW1xuICogICAgICAgICAgIHsgbGFiZWw6ICdCdXR0b24nLCByb3V0ZTogWycvZG9jcycsICdjb21wb25lbnRzJywgJ2J1dHRvbiddIH0sXG4gKiAgICAgICAgICAgeyBsYWJlbDogJ0NhcmQnLCByb3V0ZTogWycvZG9jcycsICdjb21wb25lbnRzJywgJ2NhcmQnXSwgYmFkZ2U6ICdOZXcnIH1cbiAqICAgICAgICAgXVxuICogICAgICAgfVxuICogICAgIF1cbiAqICAgfVwiXG4gKiAgIChuYXZpZ2F0ZSk9XCJvbk5hdmlnYXRlKCRldmVudClcIlxuICogPjwvdmFsLWRvY3Mtc2lkZWJhcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZG9jcy1zaWRlYmFyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uSWNvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5hdlxuICAgICAgY2xhc3M9XCJkb2NzLXNpZGViYXJcIlxuICAgICAgW2NsYXNzXT1cInByb3BzLmNzc0NsYXNzXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInByb3BzLmJhY2tncm91bmRDb2xvclwiXG4gICAgPlxuICAgICAgPCEtLSBMb2dvIC0tPlxuICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRvY3Mtc2lkZWJhcl9fbG9nb1wiXG4gICAgICAgICAgW2NsYXNzLmRvY3Mtc2lkZWJhcl9fbG9nby0tY2xpY2thYmxlXT1cInByb3BzLmxvZ28ucm91dGVcIlxuICAgICAgICAgIChjbGljayk9XCJwcm9wcy5sb2dvLnJvdXRlID8gb25OYXZpZ2F0ZShwcm9wcy5sb2dvLnJvdXRlKSA6IG51bGxcIlxuICAgICAgICA+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgW3NyY109XCJwcm9wcy5sb2dvLnNyY1wiXG4gICAgICAgICAgICBbYWx0XT1cInByb3BzLmxvZ28uYWx0XCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwicHJvcHMubG9nby5oZWlnaHQgfHwgJzMycHgnXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIEBpZiAocHJvcHMubG9nby50aXRsZSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb2NzLXNpZGViYXJfX2xvZ28tdGl0bGVcIj57eyBwcm9wcy5sb2dvLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gTmF2aWdhdGlvbiBzZWN0aW9ucyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkb2NzLXNpZGViYXJfX25hdlwiPlxuICAgICAgICBAZm9yIChzZWN0aW9uIG9mIHByb3BzLnNlY3Rpb25zOyB0cmFjayBzZWN0aW9uLnRpdGxlKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRvY3Mtc2lkZWJhcl9fc2VjdGlvblwiPlxuICAgICAgICAgICAgPCEtLSBTZWN0aW9uIGhlYWRlciAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkb2NzLXNpZGViYXJfX3NlY3Rpb24taGVhZGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRvY3Mtc2lkZWJhcl9fc2VjdGlvbi1oZWFkZXItLWFjdGl2ZV09XCJpc1NlY3Rpb25BY3RpdmUoc2VjdGlvbilcIlxuICAgICAgICAgICAgICBbY2xhc3MuZG9jcy1zaWRlYmFyX19zZWN0aW9uLWhlYWRlci0tZXhwYW5kZWRdPVwiZXhwYW5kZWRTZWN0aW9uc1tzZWN0aW9uLnRpdGxlXVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kb2NzLXNpZGViYXJfX3NlY3Rpb24taGVhZGVyLS1jbGlja2FibGVdPVwic2VjdGlvbi5yb3V0ZSB8fCBzZWN0aW9uLmNoaWxkcmVuPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWN0aW9uQ2xpY2soc2VjdGlvbilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24uaWNvbikge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJzZWN0aW9uLmljb25cIiBjbGFzcz1cImRvY3Mtc2lkZWJhcl9fc2VjdGlvbi1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvY3Mtc2lkZWJhcl9fc2VjdGlvbi10aXRsZVwiPnt7IHNlY3Rpb24udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5iYWRnZSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZG9jcy1zaWRlYmFyX19iYWRnZSBkb2NzLXNpZGViYXJfX2JhZGdlLS1zZWN0aW9uXCI+e3sgc2VjdGlvbi5iYWRnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNlY3Rpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIDxpb24taWNvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb2NzLXNpZGViYXJfX2NoZXZyb25cIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZXhwYW5kZWRTZWN0aW9uc1tzZWN0aW9uLnRpdGxlXSA/ICdjaGV2cm9uLWRvd24tb3V0bGluZScgOiAnY2hldnJvbi1mb3J3YXJkLW91dGxpbmUnXCJcbiAgICAgICAgICAgICAgICA+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gU2VjdGlvbiBjaGlsZHJlbiAtLT5cbiAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5jaGlsZHJlbj8ubGVuZ3RoICYmIGV4cGFuZGVkU2VjdGlvbnNbc2VjdGlvbi50aXRsZV0pIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvY3Mtc2lkZWJhcl9fY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICBAZm9yIChsaW5rIG9mIHNlY3Rpb24uY2hpbGRyZW47IHRyYWNrIGxpbmsubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb2NzLXNpZGViYXJfX2xpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZG9jcy1zaWRlYmFyX19saW5rLS1hY3RpdmVdPVwiaXNMaW5rQWN0aXZlKGxpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTmF2aWdhdGUobGluay5yb3V0ZSlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvY3Mtc2lkZWJhcl9fbGluay1sYWJlbFwiPnt7IGxpbmsubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobGluay5iYWRnZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRvY3Mtc2lkZWJhcl9fYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRvY3Mtc2lkZWJhcl9fYmFkZ2UtLXByaW1hcnldPVwibGluay5iYWRnZUNvbG9yID09PSAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRvY3Mtc2lkZWJhcl9fYmFkZ2UtLXN1Y2Nlc3NdPVwibGluay5iYWRnZUNvbG9yID09PSAnc3VjY2VzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRvY3Mtc2lkZWJhcl9fYmFkZ2UtLXdhcm5pbmddPVwibGluay5iYWRnZUNvbG9yID09PSAnd2FybmluZydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRvY3Mtc2lkZWJhcl9fYmFkZ2UtLWRhbmdlcl09XCJsaW5rLmJhZGdlQ29sb3IgPT09ICdkYW5nZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICA+e3sgbGluay5iYWRnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9uYXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2RvY3Mtc2lkZWJhci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb2NzU2lkZWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcHJvcHM6IERvY3NTaWRlYmFyTWV0YWRhdGEgPSB7IHNlY3Rpb25zOiBbXSB9O1xuXG4gIEBPdXRwdXQoKSBuYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgZXhwYW5kZWRTZWN0aW9uczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgcHJpdmF0ZSBjdXJyZW50Um91dGU6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVFeHBhbmRlZFNlY3Rpb25zKCk7XG4gICAgdGhpcy51cGRhdGVDdXJyZW50Um91dGUoKTtcblxuICAgIC8vIExpc3RlbiBmb3Igcm91dGUgY2hhbmdlc1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50Um91dGUoKTtcbiAgICAgICAgdGhpcy5hdXRvRXhwYW5kQWN0aXZlU2VjdGlvbigpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3Byb3BzJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUV4cGFuZGVkU2VjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVFeHBhbmRlZFNlY3Rpb25zKCk6IHZvaWQge1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkU2VjdGlvbnNbc2VjdGlvbi50aXRsZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkU2VjdGlvbnNbc2VjdGlvbi50aXRsZV0gPSBzZWN0aW9uLmV4cGFuZGVkID8/IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDdXJyZW50Um91dGUoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgLy8gVXNlIGFjdGl2ZVJvdXRlIGZyb20gcHJvcHMgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5wcm9wcy5hY3RpdmVSb3V0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSB0aGlzLnByb3BzLmFjdGl2ZVJvdXRlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXV0b0V4cGFuZEFjdGl2ZVNlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5wcm9wcy5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgaWYgKHNlY3Rpb24uY2hpbGRyZW4/LnNvbWUobGluayA9PiB0aGlzLmlzTGlua0FjdGl2ZShsaW5rKSkpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZFNlY3Rpb25zW3NlY3Rpb24udGl0bGVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VjdGlvbkNsaWNrKHNlY3Rpb246IERvY3NTaWRlYmFyU2VjdGlvbik6IHZvaWQge1xuICAgIGlmIChzZWN0aW9uLnJvdXRlKSB7XG4gICAgICB0aGlzLm9uTmF2aWdhdGUoc2VjdGlvbi5yb3V0ZSk7XG4gICAgfSBlbHNlIGlmIChzZWN0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRTZWN0aW9uc1tzZWN0aW9uLnRpdGxlXSA9ICF0aGlzLmV4cGFuZGVkU2VjdGlvbnNbc2VjdGlvbi50aXRsZV07XG4gICAgfVxuICB9XG5cbiAgb25OYXZpZ2F0ZShyb3V0ZTogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLm5hdmlnYXRlLmVtaXQocm91dGUpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHJvdXRlKTtcbiAgfVxuXG4gIGlzU2VjdGlvbkFjdGl2ZShzZWN0aW9uOiBEb2NzU2lkZWJhclNlY3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoc2VjdGlvbi5yb3V0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVzTWF0Y2goc2VjdGlvbi5yb3V0ZSwgdGhpcy5jdXJyZW50Um91dGUpO1xuICAgIH1cbiAgICByZXR1cm4gc2VjdGlvbi5jaGlsZHJlbj8uc29tZShsaW5rID0+IHRoaXMuaXNMaW5rQWN0aXZlKGxpbmspKSA/PyBmYWxzZTtcbiAgfVxuXG4gIGlzTGlua0FjdGl2ZShsaW5rOiBEb2NzU2lkZWJhckxpbmspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXNNYXRjaChsaW5rLnJvdXRlLCB0aGlzLmN1cnJlbnRSb3V0ZSk7XG4gIH1cblxuICBwcml2YXRlIHJvdXRlc01hdGNoKHJvdXRlOiBzdHJpbmdbXSwgY3VycmVudDogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCByb3V0ZVBhdGggPSByb3V0ZS5qb2luKCcvJykucmVwbGFjZSgvXlxcLy8sICcnKTtcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IGN1cnJlbnQuam9pbignLycpO1xuICAgIHJldHVybiBjdXJyZW50UGF0aCA9PT0gcm91dGVQYXRoIHx8IGN1cnJlbnRQYXRoLnN0YXJ0c1dpdGgocm91dGVQYXRoICsgJy8nKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2RvY3Mtc2lkZWJhci90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgZG9jcy1zaWRlYmFyIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NzU2lkZWJhck1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIE5hdmlnYXRpb24gc2VjdGlvbnMgdG8gZGlzcGxheS5cbiAgICovXG4gIHNlY3Rpb25zOiBEb2NzU2lkZWJhclNlY3Rpb25bXTtcblxuICAvKipcbiAgICogQ3VycmVudGx5IGFjdGl2ZSByb3V0ZSBmb3IgaGlnaGxpZ2h0aW5nLlxuICAgKi9cbiAgYWN0aXZlUm91dGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTG9nbyBjb25maWd1cmF0aW9uIGZvciB0aGUgc2lkZWJhciBoZWFkZXIuXG4gICAqL1xuICBsb2dvPzogRG9jc1NpZGViYXJMb2dvO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gQ1NTIGNsYXNzLlxuICAgKi9cbiAgY3NzQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJhY2tncm91bmQgY29sb3Igb3ZlcnJpZGUuXG4gICAqL1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jc1NpZGViYXJMb2dvIHtcbiAgLyoqXG4gICAqIExvZ28gaW1hZ2Ugc291cmNlLlxuICAgKi9cbiAgc3JjOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsdCB0ZXh0IGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgKi9cbiAgYWx0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRpdGxlL3RleHQgbmV4dCB0byBsb2dvLlxuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJvdXRlIHRvIG5hdmlnYXRlIHdoZW4gbG9nbyBpcyBjbGlja2VkLlxuICAgKi9cbiAgcm91dGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTG9nbyBoZWlnaHQgKHdpZHRoIGF1dG8tY2FsY3VsYXRlZCkuXG4gICAqIEBkZWZhdWx0ICczMnB4J1xuICAgKi9cbiAgaGVpZ2h0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvY3NTaWRlYmFyU2VjdGlvbiB7XG4gIC8qKlxuICAgKiBTZWN0aW9uIHRpdGxlIGRpc3BsYXllZCBpbiB0aGUgc2lkZWJhci5cbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJvdXRlIGZvciBkaXJlY3QgbmF2aWdhdGlvbiAoaWYgbm8gY2hpbGRyZW4pLlxuICAgKi9cbiAgcm91dGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ2hpbGQgbGlua3MgdW5kZXIgdGhpcyBzZWN0aW9uLlxuICAgKi9cbiAgY2hpbGRyZW4/OiBEb2NzU2lkZWJhckxpbmtbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VjdGlvbiBpcyBleHBhbmRlZCBieSBkZWZhdWx0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXhwYW5kZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBpY29uIG5hbWUgKElvbmljb25zKS5cbiAgICovXG4gIGljb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJhZGdlIHRleHQgKGUuZy4sIFwiTmV3XCIsIFwiQmV0YVwiKS5cbiAgICovXG4gIGJhZGdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvY3NTaWRlYmFyTGluayB7XG4gIC8qKlxuICAgKiBMaW5rIGRpc3BsYXkgdGV4dC5cbiAgICovXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJvdXRlIHRvIG5hdmlnYXRlIHRvLlxuICAgKi9cbiAgcm91dGU6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBCYWRnZSB0ZXh0IChlLmcuLCBcIk5ld1wiLCBcIkRlcHJlY2F0ZWRcIikuXG4gICAqL1xuICBiYWRnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQmFkZ2UgY29sb3IgdmFyaWFudC5cbiAgICovXG4gIGJhZGdlQ29sb3I/OiAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdkYW5nZXInO1xufVxuIl19
@@ -0,0 +1,255 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, Input, Output, EventEmitter, signal, } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * val-docs-toc
6
+ *
7
+ * A table of contents component with scroll spy functionality.
8
+ * Automatically highlights the current section based on scroll position.
9
+ *
10
+ * @example Manual items
11
+ * ```html
12
+ * <val-docs-toc
13
+ * [props]="{
14
+ * title: 'On this page',
15
+ * items: [
16
+ * { id: 'overview', label: 'Overview', level: 1 },
17
+ * { id: 'installation', label: 'Installation', level: 1 },
18
+ * { id: 'npm', label: 'Using npm', level: 2 },
19
+ * { id: 'yarn', label: 'Using yarn', level: 2 }
20
+ * ]
21
+ * }"
22
+ * ></val-docs-toc>
23
+ * ```
24
+ *
25
+ * @example Auto-generated from headings
26
+ * ```html
27
+ * <val-docs-toc
28
+ * [props]="{
29
+ * autoGenerate: true,
30
+ * containerSelector: '.article-content',
31
+ * headingLevels: [2, 3]
32
+ * }"
33
+ * ></val-docs-toc>
34
+ * ```
35
+ */
36
+ export class DocsTocComponent {
37
+ constructor(ngZone) {
38
+ this.ngZone = ngZone;
39
+ this.props = {};
40
+ this.sectionChange = new EventEmitter();
41
+ // Reactive state
42
+ this.activeId = signal('');
43
+ this.flatItems = signal([]);
44
+ this.observer = null;
45
+ this.headingElements = [];
46
+ }
47
+ ngOnInit() {
48
+ this.updateFlatItems();
49
+ }
50
+ ngAfterViewInit() {
51
+ // Delay to ensure DOM is ready
52
+ setTimeout(() => {
53
+ if (this.props.autoGenerate) {
54
+ this.generateTocFromHeadings();
55
+ }
56
+ this.setupScrollSpy();
57
+ }, 100);
58
+ }
59
+ ngOnChanges(changes) {
60
+ if (changes['props']) {
61
+ this.updateFlatItems();
62
+ if (this.props.autoGenerate) {
63
+ setTimeout(() => this.generateTocFromHeadings(), 100);
64
+ }
65
+ }
66
+ }
67
+ ngOnDestroy() {
68
+ this.destroyScrollSpy();
69
+ }
70
+ updateFlatItems() {
71
+ if (this.props.items) {
72
+ this.flatItems.set(this.flattenItems(this.props.items));
73
+ }
74
+ }
75
+ flattenItems(items) {
76
+ const result = [];
77
+ const flatten = (itemList) => {
78
+ itemList.forEach(item => {
79
+ result.push(item);
80
+ if (item.children?.length) {
81
+ flatten(item.children);
82
+ }
83
+ });
84
+ };
85
+ flatten(items);
86
+ return result;
87
+ }
88
+ generateTocFromHeadings() {
89
+ const selector = this.props.containerSelector || '.docs-layout__content';
90
+ const container = document.querySelector(selector);
91
+ if (!container) {
92
+ console.warn(`[docs-toc] Container not found: ${selector}`);
93
+ return;
94
+ }
95
+ const levels = this.props.headingLevels || [2, 3];
96
+ const headingSelector = levels.map(l => `h${l}`).join(', ');
97
+ const headings = container.querySelectorAll(headingSelector);
98
+ const items = [];
99
+ headings.forEach((heading) => {
100
+ const el = heading;
101
+ // Generate ID if not present
102
+ if (!el.id) {
103
+ el.id = this.generateId(el.textContent || '');
104
+ }
105
+ const level = parseInt(el.tagName[1], 10);
106
+ items.push({
107
+ id: el.id,
108
+ label: el.textContent?.trim() || '',
109
+ level: level - 1, // h2 = level 1, h3 = level 2
110
+ });
111
+ });
112
+ this.flatItems.set(items);
113
+ // Re-setup scroll spy with new items
114
+ this.setupScrollSpy();
115
+ }
116
+ generateId(text) {
117
+ return text
118
+ .toLowerCase()
119
+ .trim()
120
+ .replace(/[^\w\s-]/g, '')
121
+ .replace(/\s+/g, '-')
122
+ .substring(0, 50);
123
+ }
124
+ setupScrollSpy() {
125
+ this.destroyScrollSpy();
126
+ const items = this.flatItems();
127
+ if (items.length === 0)
128
+ return;
129
+ // Collect heading elements
130
+ this.headingElements = items
131
+ .map(item => document.getElementById(item.id))
132
+ .filter((el) => el !== null);
133
+ if (this.headingElements.length === 0)
134
+ return;
135
+ const offsetTop = this.props.offsetTop ?? 100;
136
+ // Use IntersectionObserver for scroll spy
137
+ this.ngZone.runOutsideAngular(() => {
138
+ this.observer = new IntersectionObserver(entries => {
139
+ // Find the first visible heading
140
+ const visibleEntries = entries
141
+ .filter(entry => entry.isIntersecting)
142
+ .sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);
143
+ if (visibleEntries.length > 0) {
144
+ const activeEntry = visibleEntries[0];
145
+ this.ngZone.run(() => {
146
+ this.activeId.set(activeEntry.target.id);
147
+ this.sectionChange.emit(activeEntry.target.id);
148
+ });
149
+ }
150
+ }, {
151
+ rootMargin: `-${offsetTop}px 0px -70% 0px`,
152
+ threshold: 0,
153
+ });
154
+ this.headingElements.forEach(el => {
155
+ this.observer?.observe(el);
156
+ });
157
+ });
158
+ }
159
+ destroyScrollSpy() {
160
+ if (this.observer) {
161
+ this.observer.disconnect();
162
+ this.observer = null;
163
+ }
164
+ this.headingElements = [];
165
+ }
166
+ scrollToSection(event, id) {
167
+ event.preventDefault();
168
+ const element = document.getElementById(id);
169
+ if (!element)
170
+ return;
171
+ const offsetTop = this.props.offsetTop ?? 100;
172
+ const top = element.getBoundingClientRect().top + window.scrollY - offsetTop;
173
+ window.scrollTo({
174
+ top,
175
+ behavior: 'smooth',
176
+ });
177
+ // Update active immediately for better UX
178
+ this.activeId.set(id);
179
+ // Update URL hash without jumping
180
+ history.pushState(null, '', `#${id}`);
181
+ }
182
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsTocComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DocsTocComponent, isStandalone: true, selector: "val-docs-toc", inputs: { props: "props" }, outputs: { sectionChange: "sectionChange" }, usesOnChanges: true, ngImport: i0, template: `
184
+ <nav
185
+ class="docs-toc"
186
+ [class]="props.cssClass"
187
+ role="navigation"
188
+ aria-label="Table of contents"
189
+ >
190
+ @if (!props.hideTitle) {
191
+ <h4 class="docs-toc__title">{{ props.title || 'Contents' }}</h4>
192
+ }
193
+
194
+ <ul class="docs-toc__list">
195
+ @for (item of flatItems(); track item.id) {
196
+ <li
197
+ class="docs-toc__item"
198
+ [class.docs-toc__item--level-1]="item.level === 1"
199
+ [class.docs-toc__item--level-2]="item.level === 2"
200
+ [class.docs-toc__item--level-3]="item.level === 3"
201
+ [class.docs-toc__item--active]="activeId() === item.id"
202
+ >
203
+ <a
204
+ class="docs-toc__link"
205
+ [href]="'#' + item.id"
206
+ (click)="scrollToSection($event, item.id)"
207
+ >
208
+ {{ item.label }}
209
+ </a>
210
+ </li>
211
+ }
212
+ </ul>
213
+ </nav>
214
+ `, isInline: true, styles: [".docs-toc{--toc-text-color: var(--ion-color-medium, #666);--toc-active-color: var(--ion-color-primary, #3880ff);--toc-hover-color: var(--ion-text-color, #1a1a1a);--toc-border-color: var(--ion-border-color, #e0e0e0);font-family:var(--ion-font-family, system-ui, sans-serif)}.docs-toc__title{font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:1px;color:var(--toc-text-color);margin:0 0 1rem}.docs-toc__list{list-style:none;margin:0;padding:0;border-left:1px solid var(--toc-border-color)}.docs-toc__item{position:relative;margin:0}.docs-toc__item:before{content:\"\";position:absolute;left:-1px;top:0;bottom:0;width:2px;background:transparent;transition:background .2s ease}.docs-toc__item--active:before{background:var(--toc-active-color)}.docs-toc__item--active .docs-toc__link{color:var(--toc-active-color);font-weight:500}.docs-toc__item--level-1 .docs-toc__link{padding-left:.75rem}.docs-toc__item--level-2 .docs-toc__link{padding-left:1.5rem;font-size:.75rem}.docs-toc__item--level-3 .docs-toc__link{padding-left:2.25rem;font-size:.6875rem}.docs-toc__link{display:block;padding:.375rem .75rem;font-size:.8125rem;line-height:1.4;color:var(--toc-text-color);text-decoration:none;transition:color .15s ease;word-break:break-word}.docs-toc__link:hover{color:var(--toc-hover-color)}:host-context(.dark) .docs-toc,:host-context([color-scheme=dark]) .docs-toc{--toc-text-color: #a0a0a0;--toc-hover-color: #f4f5f8;--toc-border-color: #3a3a3a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
215
+ }
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsTocComponent, decorators: [{
217
+ type: Component,
218
+ args: [{ selector: 'val-docs-toc', standalone: true, imports: [CommonModule], template: `
219
+ <nav
220
+ class="docs-toc"
221
+ [class]="props.cssClass"
222
+ role="navigation"
223
+ aria-label="Table of contents"
224
+ >
225
+ @if (!props.hideTitle) {
226
+ <h4 class="docs-toc__title">{{ props.title || 'Contents' }}</h4>
227
+ }
228
+
229
+ <ul class="docs-toc__list">
230
+ @for (item of flatItems(); track item.id) {
231
+ <li
232
+ class="docs-toc__item"
233
+ [class.docs-toc__item--level-1]="item.level === 1"
234
+ [class.docs-toc__item--level-2]="item.level === 2"
235
+ [class.docs-toc__item--level-3]="item.level === 3"
236
+ [class.docs-toc__item--active]="activeId() === item.id"
237
+ >
238
+ <a
239
+ class="docs-toc__link"
240
+ [href]="'#' + item.id"
241
+ (click)="scrollToSection($event, item.id)"
242
+ >
243
+ {{ item.label }}
244
+ </a>
245
+ </li>
246
+ }
247
+ </ul>
248
+ </nav>
249
+ `, styles: [".docs-toc{--toc-text-color: var(--ion-color-medium, #666);--toc-active-color: var(--ion-color-primary, #3880ff);--toc-hover-color: var(--ion-text-color, #1a1a1a);--toc-border-color: var(--ion-border-color, #e0e0e0);font-family:var(--ion-font-family, system-ui, sans-serif)}.docs-toc__title{font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:1px;color:var(--toc-text-color);margin:0 0 1rem}.docs-toc__list{list-style:none;margin:0;padding:0;border-left:1px solid var(--toc-border-color)}.docs-toc__item{position:relative;margin:0}.docs-toc__item:before{content:\"\";position:absolute;left:-1px;top:0;bottom:0;width:2px;background:transparent;transition:background .2s ease}.docs-toc__item--active:before{background:var(--toc-active-color)}.docs-toc__item--active .docs-toc__link{color:var(--toc-active-color);font-weight:500}.docs-toc__item--level-1 .docs-toc__link{padding-left:.75rem}.docs-toc__item--level-2 .docs-toc__link{padding-left:1.5rem;font-size:.75rem}.docs-toc__item--level-3 .docs-toc__link{padding-left:2.25rem;font-size:.6875rem}.docs-toc__link{display:block;padding:.375rem .75rem;font-size:.8125rem;line-height:1.4;color:var(--toc-text-color);text-decoration:none;transition:color .15s ease;word-break:break-word}.docs-toc__link:hover{color:var(--toc-hover-color)}:host-context(.dark) .docs-toc,:host-context([color-scheme=dark]) .docs-toc{--toc-text-color: #a0a0a0;--toc-hover-color: #f4f5f8;--toc-border-color: #3a3a3a}\n"] }]
250
+ }], ctorParameters: () => [{ type: i0.NgZone }], propDecorators: { props: [{
251
+ type: Input
252
+ }], sectionChange: [{
253
+ type: Output
254
+ }] } });
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jcy10b2MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9kb2NzLXRvYy9kb2NzLXRvYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBT1osTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDOztBQUd2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQXVDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBWTNCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBWHpCLFVBQUssR0FBb0IsRUFBRSxDQUFDO1FBRTNCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVyRCxpQkFBaUI7UUFDUCxhQUFRLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxNQUFNLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRXhDLGFBQVEsR0FBZ0MsSUFBSSxDQUFDO1FBQzdDLG9CQUFlLEdBQWtCLEVBQUUsQ0FBQztJQUVQLENBQUM7SUFFdEMsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZUFBZTtRQUNiLCtCQUErQjtRQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxX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bic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgTmdab25lLFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvY3NUb2NNZXRhZGF0YSwgRG9jc1RvY0l0ZW0gfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiB2YWwtZG9jcy10b2NcbiAqXG4gKiBBIHRhYmxlIG9mIGNvbnRlbnRzIGNvbXBvbmVudCB3aXRoIHNjcm9sbCBzcHkgZnVuY3Rpb25hbGl0eS5cbiAqIEF1dG9tYXRpY2FsbHkgaGlnaGxpZ2h0cyB0aGUgY3VycmVudCBzZWN0aW9uIGJhc2VkIG9uIHNjcm9sbCBwb3NpdGlvbi5cbiAqXG4gKiBAZXhhbXBsZSBNYW51YWwgaXRlbXNcbiAqIGBgYGh0bWxcbiAqIDx2YWwtZG9jcy10b2NcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICB0aXRsZTogJ09uIHRoaXMgcGFnZScsXG4gKiAgICAgaXRlbXM6IFtcbiAqICAgICAgIHsgaWQ6ICdvdmVydmlldycsIGxhYmVsOiAnT3ZlcnZpZXcnLCBsZXZlbDogMSB9LFxuICogICAgICAgeyBpZDogJ2luc3RhbGxhdGlvbicsIGxhYmVsOiAnSW5zdGFsbGF0aW9uJywgbGV2ZWw6IDEgfSxcbiAqICAgICAgIHsgaWQ6ICducG0nLCBsYWJlbDogJ1VzaW5nIG5wbScsIGxldmVsOiAyIH0sXG4gKiAgICAgICB7IGlkOiAneWFybicsIGxhYmVsOiAnVXNpbmcgeWFybicsIGxldmVsOiAyIH1cbiAqICAgICBdXG4gKiAgIH1cIlxuICogPjwvdmFsLWRvY3MtdG9jPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQXV0by1nZW5lcmF0ZWQgZnJvbSBoZWFkaW5nc1xuICogYGBgaHRtbFxuICogPHZhbC1kb2NzLXRvY1xuICogICBbcHJvcHNdPVwie1xuICogICAgIGF1dG9HZW5lcmF0ZTogdHJ1ZSxcbiAqICAgICBjb250YWluZXJTZWxlY3RvcjogJy5hcnRpY2xlLWNvbnRlbnQnLFxuICogICAgIGhlYWRpbmdMZXZlbHM6IFsyLCAzXVxuICogICB9XCJcbiAqID48L3ZhbC1kb2NzLXRvYz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZG9jcy10b2MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmF2XG4gICAgICBjbGFzcz1cImRvY3MtdG9jXCJcbiAgICAgIFtjbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiXG4gICAgICByb2xlPVwibmF2aWdhdGlvblwiXG4gICAgICBhcmlhLWxhYmVsPVwiVGFibGUgb2YgY29udGVudHNcIlxuICAgID5cbiAgICAgIEBpZiAoIXByb3BzLmhpZGVUaXRsZSkge1xuICAgICAgICA8aDQgY2xhc3M9XCJkb2NzLXRvY19fdGl0bGVcIj57eyBwcm9wcy50aXRsZSB8fCAnQ29udGVudHMnIH19PC9oND5cbiAgICAgIH1cblxuICAgICAgPHVsIGNsYXNzPVwiZG9jcy10b2NfX2xpc3RcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBmbGF0SXRlbXMoKTsgdHJhY2sgaXRlbS5pZCkge1xuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgY2xhc3M9XCJkb2NzLXRvY19faXRlbVwiXG4gICAgICAgICAgICBbY2xhc3MuZG9jcy10b2NfX2l0ZW0tLWxldmVsLTFdPVwiaXRlbS5sZXZlbCA9PT0gMVwiXG4gICAgICAgICAgICBbY2xhc3MuZG9jcy10b2NfX2l0ZW0tLWxldmVsLTJdPVwiaXRlbS5sZXZlbCA9PT0gMlwiXG4gICAgICAgICAgICBbY2xhc3MuZG9jcy10b2NfX2l0ZW0tLWxldmVsLTNdPVwiaXRlbS5sZXZlbCA9PT0gM1wiXG4gICAgICAgICAgICBbY2xhc3MuZG9jcy10b2NfX2l0ZW0tLWFjdGl2ZV09XCJhY3RpdmVJZCgpID09PSBpdGVtLmlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjbGFzcz1cImRvY3MtdG9jX19saW5rXCJcbiAgICAgICAgICAgICAgW2hyZWZdPVwiJyMnICsgaXRlbS5pZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxUb1NlY3Rpb24oJGV2ZW50LCBpdGVtLmlkKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgICA8L3VsPlxuICAgIDwvbmF2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9kb2NzLXRvYy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEb2NzVG9jQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHByb3BzOiBEb2NzVG9jTWV0YWRhdGEgPSB7fTtcblxuICBAT3V0cHV0KCkgc2VjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8vIFJlYWN0aXZlIHN0YXRlXG4gIHByb3RlY3RlZCBhY3RpdmVJZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGZsYXRJdGVtcyA9IHNpZ25hbDxEb2NzVG9jSXRlbVtdPihbXSk7XG5cbiAgcHJpdmF0ZSBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBoZWFkaW5nRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRmxhdEl0ZW1zKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gRGVsYXkgdG8gZW5zdXJlIERPTSBpcyByZWFkeVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVUb2NGcm9tSGVhZGluZ3MoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0dXBTY3JvbGxTcHkoKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydwcm9wcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXRJdGVtcygpO1xuICAgICAgaWYgKHRoaXMucHJvcHMuYXV0b0dlbmVyYXRlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5nZW5lcmF0ZVRvY0Zyb21IZWFkaW5ncygpLCAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveVNjcm9sbFNweSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGbGF0SXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaXRlbXMpIHtcbiAgICAgIHRoaXMuZmxhdEl0ZW1zLnNldCh0aGlzLmZsYXR0ZW5JdGVtcyh0aGlzLnByb3BzLml0ZW1zKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmbGF0dGVuSXRlbXMoaXRlbXM6IERvY3NUb2NJdGVtW10pOiBEb2NzVG9jSXRlbVtdIHtcbiAgICBjb25zdCByZXN1bHQ6IERvY3NUb2NJdGVtW10gPSBbXTtcbiAgICBjb25zdCBmbGF0dGVuID0gKGl0ZW1MaXN0OiBEb2NzVG9jSXRlbVtdKSA9PiB7XG4gICAgICBpdGVtTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGZsYXR0ZW4oaXRlbS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgZmxhdHRlbihpdGVtcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVUb2NGcm9tSGVhZGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLnByb3BzLmNvbnRhaW5lclNlbGVjdG9yIHx8ICcuZG9jcy1sYXlvdXRfX2NvbnRlbnQnO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2RvY3MtdG9jXSBDb250YWluZXIgbm90IGZvdW5kOiAke3NlbGVjdG9yfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxldmVscyA9IHRoaXMucHJvcHMuaGVhZGluZ0xldmVscyB8fCBbMiwgM107XG4gICAgY29uc3QgaGVhZGluZ1NlbGVjdG9yID0gbGV2ZWxzLm1hcChsID0+IGBoJHtsfWApLmpvaW4oJywgJyk7XG4gICAgY29uc3QgaGVhZGluZ3MgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChoZWFkaW5nU2VsZWN0b3IpO1xuXG4gICAgY29uc3QgaXRlbXM6IERvY3NUb2NJdGVtW10gPSBbXTtcbiAgICBoZWFkaW5ncy5mb3JFYWNoKChoZWFkaW5nOiBFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGhlYWRpbmcgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAvLyBHZW5lcmF0ZSBJRCBpZiBub3QgcHJlc2VudFxuICAgICAgaWYgKCFlbC5pZCkge1xuICAgICAgICBlbC5pZCA9IHRoaXMuZ2VuZXJhdGVJZChlbC50ZXh0Q29udGVudCB8fCAnJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQoZWwudGFnTmFtZVsxXSwgMTApO1xuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIGlkOiBlbC5pZCxcbiAgICAgICAgbGFiZWw6IGVsLnRleHRDb250ZW50Py50cmltKCkgfHwgJycsXG4gICAgICAgIGxldmVsOiBsZXZlbCAtIDEsIC8vIGgyID0gbGV2ZWwgMSwgaDMgPSBsZXZlbCAyXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmxhdEl0ZW1zLnNldChpdGVtcyk7XG4gICAgLy8gUmUtc2V0dXAgc2Nyb2xsIHNweSB3aXRoIG5ldyBpdGVtc1xuICAgIHRoaXMuc2V0dXBTY3JvbGxTcHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVJZCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcGxhY2UoL1teXFx3XFxzLV0vZywgJycpXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpXG4gICAgICAuc3Vic3RyaW5nKDAsIDUwKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTY3JvbGxTcHkoKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95U2Nyb2xsU3B5KCk7XG5cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmxhdEl0ZW1zKCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gQ29sbGVjdCBoZWFkaW5nIGVsZW1lbnRzXG4gICAgdGhpcy5oZWFkaW5nRWxlbWVudHMgPSBpdGVtc1xuICAgICAgLm1hcChpdGVtID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGl0ZW0uaWQpKVxuICAgICAgLmZpbHRlcigoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCAhPT0gbnVsbCk7XG5cbiAgICBpZiAodGhpcy5oZWFkaW5nRWxlbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBvZmZzZXRUb3AgPSB0aGlzLnByb3BzLm9mZnNldFRvcCA/PyAxMDA7XG5cbiAgICAvLyBVc2UgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgZm9yIHNjcm9sbCBzcHlcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICBlbnRyaWVzID0+IHtcbiAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCB2aXNpYmxlIGhlYWRpbmdcbiAgICAgICAgICBjb25zdCB2aXNpYmxlRW50cmllcyA9IGVudHJpZXNcbiAgICAgICAgICAgIC5maWx0ZXIoZW50cnkgPT4gZW50cnkuaXNJbnRlcnNlY3RpbmcpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5ib3VuZGluZ0NsaWVudFJlY3QudG9wIC0gYi5ib3VuZGluZ0NsaWVudFJlY3QudG9wKTtcblxuICAgICAgICAgIGlmICh2aXNpYmxlRW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVFbnRyeSA9IHZpc2libGVFbnRyaWVzWzBdO1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJZC5zZXQoYWN0aXZlRW50cnkudGFyZ2V0LmlkKTtcbiAgICAgICAgICAgICAgdGhpcy5zZWN0aW9uQ2hhbmdlLmVtaXQoYWN0aXZlRW50cnkudGFyZ2V0LmlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHJvb3RNYXJnaW46IGAtJHtvZmZzZXRUb3B9cHggMHB4IC03MCUgMHB4YCxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaGVhZGluZ0VsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKGVsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95U2Nyb2xsU3B5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9ic2VydmVyKSB7XG4gICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmhlYWRpbmdFbGVtZW50cyA9IFtdO1xuICB9XG5cbiAgc2Nyb2xsVG9TZWN0aW9uKGV2ZW50OiBFdmVudCwgaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb2Zmc2V0VG9wID0gdGhpcy5wcm9wcy5vZmZzZXRUb3AgPz8gMTAwO1xuXG4gICAgY29uc3QgdG9wID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIG9mZnNldFRvcDtcblxuICAgIHdpbmRvdy5zY3JvbGxUbyh7XG4gICAgICB0b3AsXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgYWN0aXZlIGltbWVkaWF0ZWx5IGZvciBiZXR0ZXIgVVhcbiAgICB0aGlzLmFjdGl2ZUlkLnNldChpZCk7XG5cbiAgICAvLyBVcGRhdGUgVVJMIGhhc2ggd2l0aG91dCBqdW1waW5nXG4gICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgJycsIGAjJHtpZH1gKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2RvY3MtdG9jL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBkb2NzLXRvYyBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9jc1RvY01ldGFkYXRhIHtcbiAgLyoqXG4gICAqIE1hbnVhbCBUT0MgaXRlbXMgKHVzZWQgd2hlbiBhdXRvR2VuZXJhdGUgaXMgZmFsc2UpLlxuICAgKi9cbiAgaXRlbXM/OiBEb2NzVG9jSXRlbVtdO1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlIFRPQyBmcm9tIGhlYWRpbmdzIGluIHRoZSBjb250ZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0dlbmVyYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ1NTIHNlbGVjdG9yIGZvciB0aGUgY29udGVudCBjb250YWluZXIgdG8gc2NhbiBmb3IgaGVhZGluZ3MuXG4gICAqIFJlcXVpcmVkIHdoZW4gYXV0b0dlbmVyYXRlIGlzIHRydWUuXG4gICAqIEBkZWZhdWx0ICcuZG9jcy1sYXlvdXRfX2NvbnRlbnQnXG4gICAqL1xuICBjb250YWluZXJTZWxlY3Rvcj86IHN0cmluZztcblxuICAvKipcbiAgICogSGVhZGluZyBsZXZlbHMgdG8gaW5jbHVkZSBpbiBhdXRvLWdlbmVyYXRlZCBUT0MuXG4gICAqIEBkZWZhdWx0IFsyLCAzXVxuICAgKi9cbiAgaGVhZGluZ0xldmVscz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBUaXRsZSBkaXNwbGF5ZWQgYWJvdmUgdGhlIFRPQy5cbiAgICogQGRlZmF1bHQgJ0NvbnRlbnRzJ1xuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9mZnNldCBmcm9tIHRvcCBmb3Igc2Nyb2xsIHNweSBjYWxjdWxhdGlvbnMgKGUuZy4sIGZvciBzdGlja3kgaGVhZGVycykuXG4gICAqIEBkZWZhdWx0IDEwMFxuICAgKi9cbiAgb2Zmc2V0VG9wPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gQ1NTIGNsYXNzLlxuICAgKi9cbiAgY3NzQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhpZGUgdGhlIHRpdGxlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZVRpdGxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb2NzVG9jSXRlbSB7XG4gIC8qKlxuICAgKiBJRCBvZiB0aGUgRE9NIGVsZW1lbnQgKHdpdGhvdXQgIykuXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbCB0byBkaXNwbGF5IGluIHRoZSBUT0MuXG4gICAqL1xuICBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIZWFkaW5nIGxldmVsIGZvciBpbmRlbnRhdGlvbiAoMSwgMiwgMykuXG4gICAqL1xuICBsZXZlbDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOZXN0ZWQgY2hpbGRyZW4gaXRlbXMuXG4gICAqL1xuICBjaGlsZHJlbj86IERvY3NUb2NJdGVtW107XG59XG4iXX0=