@nova-design-system/nova-angular 3.19.0 → 3.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -26
- package/dist/nova-components/esm2022/lib/components/nv-datatable-cell.directive.mjs +1 -1
- package/dist/nova-components/esm2022/lib/components/nv-datatable.component.mjs +195 -50
- package/dist/nova-components/esm2022/lib/nova-components.module.mjs +2 -2
- package/dist/nova-components/esm2022/lib/providers/notification.service.mjs +33 -1
- package/dist/nova-components/esm2022/lib/stencil-generated/components.mjs +34 -7
- package/dist/nova-components/esm2022/lib/stencil-generated/index.mjs +2 -1
- package/dist/nova-components/fesm2022/nova-components.mjs +259 -56
- package/dist/nova-components/fesm2022/nova-components.mjs.map +1 -1
- package/dist/nova-components/lib/components/nv-datatable-cell.directive.d.ts +7 -7
- package/dist/nova-components/lib/components/nv-datatable.component.d.ts +153 -56
- package/dist/nova-components/lib/nova-components.module.d.ts +1 -1
- package/dist/nova-components/lib/providers/notification.service.d.ts +7 -0
- package/dist/nova-components/lib/stencil-generated/components.d.ts +17 -3
- package/dist/nova-components/lib/stencil-generated/index.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,32 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
**Nova Components Angular** allows you to integrate Nova's native UI elements into your Angular applications. It provides flexibility in usage with both standalone components and module-based setups. This guide will walk you through the necessary steps for setting up and using Nova Components in your Angular project.
|
|
6
6
|
|
|
7
|
-
- [Nova Components Angular (Angular 17 and below)](#nova-components-angular-angular-17-and-below)
|
|
8
|
-
- [Installation](#installation)
|
|
9
|
-
- [Setting up Tailwind](#setting-up-tailwind)
|
|
10
|
-
- [About Tailwind and the Nova Plugin](#about-tailwind-and-the-nova-plugin)
|
|
11
|
-
- [1. Install Tailwind CSS](#1-install-tailwind-css)
|
|
12
|
-
- [2. Configure PostCSS Plugins](#2-configure-postcss-plugins)
|
|
13
|
-
- [3. Create `tailwind.config.ts`](#3-create-tailwindconfigts)
|
|
14
|
-
- [4. Configure Tailwind and Nova Plugin in `styles.css`](#4-configure-tailwind-and-nova-plugin-in-stylescss)
|
|
15
|
-
- [5. Include the Nova Tokens (Spark or Ocean)](#5-include-the-nova-tokens-spark-or-ocean)
|
|
16
|
-
- [Nova Font Pro Integration](#nova-font-pro-integration)
|
|
17
|
-
- [Option 1: Angular.json Configuration (Recommended)](#option-1-angularjson-configuration-recommended)
|
|
18
|
-
- [Option 2: Import in Styles.css](#option-2-import-in-stylescss)
|
|
19
|
-
- [Option 3: HTML Integration](#option-3-html-integration)
|
|
20
|
-
- [Standalone Component Setup](#standalone-component-setup)
|
|
21
|
-
- [1. Provide Nova Components](#1-provide-nova-components)
|
|
22
|
-
- [2. Import Nova Components Module in Your Standalone Components](#2-import-nova-components-module-in-your-standalone-components)
|
|
23
|
-
- [Module-Based Setup](#module-based-setup)
|
|
24
|
-
- [1. Import Nova Components Module](#1-import-nova-components-module)
|
|
25
|
-
- [Usage Example](#usage-example)
|
|
26
|
-
- [Handling Angular Forms with Nova Components](#handling-angular-forms-with-nova-components)
|
|
27
|
-
- [Standalone Component Setup](#standalone-component-setup-1)
|
|
28
|
-
- [Module-Based Setup](#module-based-setup-1)
|
|
29
|
-
- [Usage Example with Angular Forms](#usage-example-with-angular-forms)
|
|
30
|
-
- [Conclusion](#conclusion)
|
|
31
|
-
|
|
32
|
-
|
|
33
7
|
## Installation
|
|
34
8
|
|
|
35
9
|
Install the necessary Nova packages using your package manager:
|
|
@@ -34,4 +34,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
34
34
|
type: Input,
|
|
35
35
|
args: [{ required: true }]
|
|
36
36
|
}] } });
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLWNlbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92YS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9udi1kYXRhdGFibGUtY2VsbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWUsTUFBTSxlQUFlLENBQUM7O0FBVzlEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILDhEQUE4RDtBQUM5RCxNQUFNLE9BQU8sd0JBQXdCO0lBT25DLFlBQW1CLFFBQW1EO1FBQW5ELGFBQVEsR0FBUixRQUFRLENBQTJDO0lBQUcsQ0FBQzs4R0FQL0Qsd0JBQXdCO2tHQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBTHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO2dGQU80QixlQUFlO3NCQUF6QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IENlbGxDb250ZXh0IH0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKipcbiAqIENvbnRleHQgdHlwZSBmb3IgY2VsbCB0ZW1wbGF0ZXMgLSB1c2VzIFRhblN0YWNrIFRhYmxlJ3MgQ2VsbENvbnRleHQgZGlyZWN0bHlcbiAqL1xuZXhwb3J0IHR5cGUgTnZEYXRhdGFibGVDZWxsQ29udGV4dDxULCBWPiA9IHtcbiAgLyoqIFRoZSBjZWxsJ3MgYWN0dWFsIHZhbHVlICovXG4gICRpbXBsaWNpdDogQ2VsbENvbnRleHQ8VCwgVj47XG59O1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBtYXJrIG5nLXRlbXBsYXRlcyBhcyBjZWxsIHRlbXBsYXRlcyBmb3Igc3BlY2lmaWMgZmllbGRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8bnYtZGF0YXRhYmxlIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbcm93c109XCJkYXRhXCI+XG4gKiAgIDxuZy10ZW1wbGF0ZSBudkRhdGF0YWJsZUNlbGw9XCJuYW1lXCIgbGV0LWNvbnRleHQ+XG4gKiAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyBjb250ZXh0LnZhbHVlIH19PC9kaXY+XG4gKiAgIDwvbmctdGVtcGxhdGU+XG4gKlxuICogICA8bmctdGVtcGxhdGUgbnZEYXRhdGFibGVDZWxsPVwicHJpY2VcIiBsZXQtY29udGV4dD5cbiAqICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbW9ub1wiPiR7eyBjb250ZXh0LnZhbHVlIH19PC9zcGFuPlxuICogICA8L25nLXRlbXBsYXRlPlxuICogPC9udi1kYXRhdGFibGU+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbnZEYXRhdGFibGVDZWxsXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmU8VCwgVj4ge1xuICAvKipcbiAgICogVGhlIGZpZWxkIG5hbWUgdGhpcyB0ZW1wbGF0ZSBzaG91bGQgcmVuZGVyLlxuICAgKiBTaG91bGQgbWF0Y2ggYSBmaWVsZCBpbiB5b3VyIGNvbHVtbiBkZWZpbml0aW9ucy5cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG52RGF0YXRhYmxlQ2VsbCE6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE52RGF0YXRhYmxlQ2VsbENvbnRleHQ8VCwgVj4+KSB7fVxufVxuIl19
|
|
@@ -1,20 +1,53 @@
|
|
|
1
1
|
/* eslint-disable jsdoc/require-jsdoc */
|
|
2
2
|
/* eslint-disable jsdoc/require-returns */
|
|
3
|
+
/* eslint-disable jsdoc/require-param */
|
|
3
4
|
import { Component, computed, input, TemplateRef, CUSTOM_ELEMENTS_SCHEMA, ContentChild, ContentChildren, effect, signal, viewChild, } from '@angular/core';
|
|
4
5
|
import { CommonModule } from '@angular/common';
|
|
5
6
|
import { NvDatatableCellDirective, } from './nv-datatable-cell.directive';
|
|
6
|
-
|
|
7
|
+
// local copy of @tanstack/angular-table (required for multi angular versions, the built version is not working)
|
|
8
|
+
import { createAngularTable, getCoreRowModel, getPaginationRowModel, getSortedRowModel, FlexRenderDirective, } from './datatable.utils';
|
|
7
9
|
import * as i0 from "@angular/core";
|
|
8
10
|
import * as i1 from "@angular/common";
|
|
9
|
-
export { flexRenderComponent as nvDatatableRenderComponent } from './datatable.utils';
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
+
* A powerful, flexible datatable component built on TanStack Table.
|
|
13
|
+
* Supports custom cell rendering, column configuration, pagination, and full TypeScript typing.
|
|
12
14
|
*/
|
|
13
15
|
export class NvDatatable {
|
|
14
16
|
/** Public getter for table instance. */
|
|
15
17
|
table() {
|
|
16
18
|
return this.tableInstance();
|
|
17
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Handle sort direction change from table header
|
|
22
|
+
* @param {Event} event The sort direction change event or direction string
|
|
23
|
+
* @param {object} header The table header object
|
|
24
|
+
*/
|
|
25
|
+
handleSortDirectionChanged(event, header) {
|
|
26
|
+
// Extract direction from event or use directly if string
|
|
27
|
+
let direction;
|
|
28
|
+
if (typeof event === 'string') {
|
|
29
|
+
direction = event;
|
|
30
|
+
}
|
|
31
|
+
else if ('detail' in event && typeof event.detail === 'string') {
|
|
32
|
+
direction = event.detail;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// Fallback - shouldn't happen but handle gracefully
|
|
36
|
+
console.warn('Unexpected event type in handleSortDirectionChanged:', event);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const sortingConfig = this.sorting();
|
|
40
|
+
// Check if multi-sort is enabled
|
|
41
|
+
const isMultiSort = sortingConfig?.enableMultiSort ?? false;
|
|
42
|
+
if (direction === 'none') {
|
|
43
|
+
// Clear this column's sort
|
|
44
|
+
header.column.clearSorting();
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Toggle sort - TanStack will handle the logic internally
|
|
48
|
+
header.column.toggleSorting(direction === 'desc', isMultiSort);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
18
51
|
constructor() {
|
|
19
52
|
/** Column definitions */
|
|
20
53
|
this.columns = input([]);
|
|
@@ -22,6 +55,8 @@ export class NvDatatable {
|
|
|
22
55
|
this.rows = input([]);
|
|
23
56
|
/** Optional pagination configuration */
|
|
24
57
|
this.pagination = input(undefined);
|
|
58
|
+
/** Optional sorting configuration */
|
|
59
|
+
this.sorting = input(undefined);
|
|
25
60
|
/** Should the header stick to the top of the table when scrolling? */
|
|
26
61
|
this.stickyHeader = input(false);
|
|
27
62
|
/** Signal to track cell templates array */
|
|
@@ -39,6 +74,8 @@ export class NvDatatable {
|
|
|
39
74
|
pageIndex: 0,
|
|
40
75
|
pageSize: this.pagination()?.initialPageSize || 10,
|
|
41
76
|
});
|
|
77
|
+
/** Sorting state for controlled sorting (server mode) */
|
|
78
|
+
this.sortingState = signal(this.sorting()?.sortState || []);
|
|
42
79
|
/** Reference to table rows for infinite scroll observer */
|
|
43
80
|
this.tableRows = viewChild('tableRow');
|
|
44
81
|
/** Intersection observer for infinite scroll */
|
|
@@ -50,45 +87,114 @@ export class NvDatatable {
|
|
|
50
87
|
const templateMap = this.cellTemplateMap();
|
|
51
88
|
return this.columns()
|
|
52
89
|
.filter((col) => !col.hidden)
|
|
53
|
-
.map((col) =>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
size: col.width,
|
|
57
|
-
enableResizing: col.resizable ?? true,
|
|
58
|
-
cell: (context) => {
|
|
90
|
+
.map((col) => {
|
|
91
|
+
// Shared cell renderer
|
|
92
|
+
const cellRenderer = (context) => {
|
|
59
93
|
const fieldName = String(col.field);
|
|
60
94
|
const cellTemplate = templateMap.get(fieldName);
|
|
61
95
|
// Priority: template > renderCell > default
|
|
62
96
|
if (cellTemplate) {
|
|
63
|
-
// Return TemplateRef directly -
|
|
97
|
+
// Return TemplateRef directly - getValue() returns formatted value
|
|
64
98
|
return cellTemplate;
|
|
65
99
|
}
|
|
66
100
|
// Fall back to renderCell if provided
|
|
67
101
|
if (col.renderCell) {
|
|
68
102
|
return col.renderCell(context);
|
|
69
103
|
}
|
|
70
|
-
// Default: just return the value
|
|
104
|
+
// Default: just return the value (formatted if valueFormatter was used)
|
|
71
105
|
return context.getValue();
|
|
72
|
-
}
|
|
73
|
-
|
|
106
|
+
};
|
|
107
|
+
const columnDef = {
|
|
108
|
+
accessorKey: col.field,
|
|
109
|
+
accessorFn: col.valueFormatter
|
|
110
|
+
? (row) => {
|
|
111
|
+
const rawValue = row[col.field];
|
|
112
|
+
return col.valueFormatter({
|
|
113
|
+
value: rawValue,
|
|
114
|
+
row,
|
|
115
|
+
field: col.field,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
: undefined,
|
|
119
|
+
header: col.headerName || String(col.field),
|
|
120
|
+
size: col.width,
|
|
121
|
+
enableResizing: col.resizable ?? true,
|
|
122
|
+
// Sorting configuration
|
|
123
|
+
enableSorting: this.sorting() ? col.sortable ?? true : false,
|
|
124
|
+
cell: cellRenderer,
|
|
125
|
+
};
|
|
126
|
+
// Add optional sorting properties only if defined
|
|
127
|
+
if (col.sortingFn !== undefined) {
|
|
128
|
+
// @ts-expect-error - TanStack typing is strict but this works at runtime
|
|
129
|
+
columnDef.sortingFn = col.sortingFn;
|
|
130
|
+
}
|
|
131
|
+
if (col.sortDescFirst !== undefined) {
|
|
132
|
+
columnDef.sortDescFirst = col.sortDescFirst;
|
|
133
|
+
}
|
|
134
|
+
if (col.invertSorting !== undefined) {
|
|
135
|
+
columnDef.invertSorting = col.invertSorting;
|
|
136
|
+
}
|
|
137
|
+
if (col.sortUndefined !== undefined) {
|
|
138
|
+
columnDef.sortUndefined = col.sortUndefined;
|
|
139
|
+
}
|
|
140
|
+
return columnDef;
|
|
141
|
+
});
|
|
74
142
|
});
|
|
75
143
|
/** TanStack table instance with Signals */
|
|
76
144
|
this.tableInstance = createAngularTable(() => {
|
|
77
145
|
const paginationConfig = this.pagination();
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
146
|
+
const sortingConfig = this.sorting();
|
|
147
|
+
// Determine base table configuration with sorting
|
|
148
|
+
const getBaseTableConfig = () => {
|
|
149
|
+
const baseConfig = {
|
|
81
150
|
data: this.rows(),
|
|
82
151
|
columns: this.tableColumns(),
|
|
83
152
|
getCoreRowModel: getCoreRowModel(),
|
|
153
|
+
// Sorting configuration
|
|
154
|
+
...(sortingConfig && {
|
|
155
|
+
state: {
|
|
156
|
+
sorting: sortingConfig.mode === 'server' && sortingConfig.sortState
|
|
157
|
+
? sortingConfig.sortState
|
|
158
|
+
: this.sortingState(),
|
|
159
|
+
},
|
|
160
|
+
onSortingChange: (updaterOrValue) => {
|
|
161
|
+
const currentSort = sortingConfig.mode === 'server' && sortingConfig.sortState
|
|
162
|
+
? sortingConfig.sortState
|
|
163
|
+
: this.sortingState();
|
|
164
|
+
const newSort = typeof updaterOrValue === 'function'
|
|
165
|
+
? updaterOrValue(currentSort)
|
|
166
|
+
: updaterOrValue;
|
|
167
|
+
// Always update internal state for reactivity
|
|
168
|
+
this.sortingState.set(newSort);
|
|
169
|
+
// For server-side sorting, also call the callback
|
|
170
|
+
if (sortingConfig?.mode === 'server' &&
|
|
171
|
+
sortingConfig.onSortingChange) {
|
|
172
|
+
sortingConfig.onSortingChange(newSort);
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
manualSorting: sortingConfig.mode === 'server',
|
|
176
|
+
enableSorting: true,
|
|
177
|
+
enableMultiSort: sortingConfig.enableMultiSort ?? false,
|
|
178
|
+
enableSortingRemoval: sortingConfig.enableSortingRemoval ?? true,
|
|
179
|
+
maxMultiSortColCount: sortingConfig.maxMultiSortColCount,
|
|
180
|
+
sortDescFirst: sortingConfig.sortDescFirst ?? false,
|
|
181
|
+
// When multi-sort is enabled, treat all clicks as multi-sort events
|
|
182
|
+
isMultiSortEvent: sortingConfig.enableMultiSort
|
|
183
|
+
? () => true
|
|
184
|
+
: undefined,
|
|
185
|
+
getSortedRowModel: sortingConfig.mode === 'client' ? getSortedRowModel() : undefined,
|
|
186
|
+
}),
|
|
84
187
|
};
|
|
188
|
+
return baseConfig;
|
|
189
|
+
};
|
|
190
|
+
if (!paginationConfig || paginationConfig.mode === 'infinite') {
|
|
191
|
+
// No pagination or infinite scroll - simple config
|
|
192
|
+
return getBaseTableConfig();
|
|
85
193
|
}
|
|
86
194
|
else if (paginationConfig.mode === 'client') {
|
|
87
195
|
// Client-side pagination
|
|
88
196
|
return {
|
|
89
|
-
|
|
90
|
-
columns: this.tableColumns(),
|
|
91
|
-
getCoreRowModel: getCoreRowModel(),
|
|
197
|
+
...getBaseTableConfig(),
|
|
92
198
|
getPaginationRowModel: getPaginationRowModel(),
|
|
93
199
|
initialState: {
|
|
94
200
|
pagination: {
|
|
@@ -99,12 +205,11 @@ export class NvDatatable {
|
|
|
99
205
|
};
|
|
100
206
|
}
|
|
101
207
|
else {
|
|
102
|
-
// Server-side pagination
|
|
208
|
+
// Server-side pagination - manual pagination with reactive state
|
|
209
|
+
const baseConfig = getBaseTableConfig();
|
|
103
210
|
const pageSize = this.paginationState().pageSize;
|
|
104
211
|
return {
|
|
105
|
-
|
|
106
|
-
columns: this.tableColumns(),
|
|
107
|
-
getCoreRowModel: getCoreRowModel(),
|
|
212
|
+
...baseConfig,
|
|
108
213
|
manualPagination: true,
|
|
109
214
|
pageCount: paginationConfig.totalPageCount !== undefined
|
|
110
215
|
? paginationConfig.totalPageCount
|
|
@@ -113,13 +218,19 @@ export class NvDatatable {
|
|
|
113
218
|
: -1,
|
|
114
219
|
state: {
|
|
115
220
|
pagination: this.paginationState(),
|
|
221
|
+
...(baseConfig.state && { sorting: baseConfig.state.sorting }),
|
|
116
222
|
},
|
|
117
223
|
onPaginationChange: (updaterOrValue) => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
224
|
+
const newState = typeof updaterOrValue === 'function'
|
|
225
|
+
? updaterOrValue(this.paginationState())
|
|
226
|
+
: updaterOrValue;
|
|
227
|
+
this.paginationState.set(newState);
|
|
228
|
+
// Call user's callback for server-side pagination
|
|
229
|
+
if (paginationConfig.onPaginationChange) {
|
|
230
|
+
paginationConfig.onPaginationChange({
|
|
231
|
+
pageIndex: newState.pageIndex,
|
|
232
|
+
pageSize: newState.pageSize,
|
|
233
|
+
});
|
|
123
234
|
}
|
|
124
235
|
},
|
|
125
236
|
};
|
|
@@ -158,18 +269,6 @@ export class NvDatatable {
|
|
|
158
269
|
: undefined,
|
|
159
270
|
};
|
|
160
271
|
});
|
|
161
|
-
// Watch pagination state changes for server mode
|
|
162
|
-
effect(() => {
|
|
163
|
-
const paginationConfig = this.pagination();
|
|
164
|
-
const state = this.paginationState();
|
|
165
|
-
if (paginationConfig?.mode === 'server' &&
|
|
166
|
-
paginationConfig.onPaginationChange) {
|
|
167
|
-
paginationConfig.onPaginationChange({
|
|
168
|
-
pageIndex: state.pageIndex,
|
|
169
|
-
pageSize: state.pageSize,
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}, { allowSignalWrites: true });
|
|
173
272
|
// Set up intersection observer for infinite scroll
|
|
174
273
|
effect(() => {
|
|
175
274
|
const paginationConfig = this.pagination();
|
|
@@ -228,7 +327,7 @@ export class NvDatatable {
|
|
|
228
327
|
}
|
|
229
328
|
}
|
|
230
329
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NvDatatable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
231
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.9", type: NvDatatable, isStandalone: true, selector: "nv-datatable", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "paginationTemplate", first: true, predicate: ["paginationTemplate"], descendants: true, read: TemplateRef }, { propertyName: "cellTemplates", predicate: NvDatatableCellDirective }], viewQueries: [{ propertyName: "tableRows", first: true, predicate: ["tableRow"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
330
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.9", type: NvDatatable, isStandalone: true, selector: "nv-datatable", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: false, transformFunction: null }, sorting: { classPropertyName: "sorting", publicName: "sorting", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "paginationTemplate", first: true, predicate: ["paginationTemplate"], descendants: true, read: TemplateRef }, { propertyName: "cellTemplates", predicate: NvDatatableCellDirective }], viewQueries: [{ propertyName: "tableRows", first: true, predicate: ["tableRow"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
232
331
|
<nv-table>
|
|
233
332
|
<table>
|
|
234
333
|
<thead [attr.data-sticky-top]="stickyHeader() ? 'true' : null">
|
|
@@ -247,9 +346,19 @@ export class NvDatatable {
|
|
|
247
346
|
!header.column.columnDef.enableResizing ? 'true' : null
|
|
248
347
|
"
|
|
249
348
|
>
|
|
250
|
-
@if (!header.isPlaceholder) {
|
|
349
|
+
@if (!header.isPlaceholder) { @if (header.column.getCanSort()) {
|
|
350
|
+
<nv-tableheader
|
|
351
|
+
[sortable]="true"
|
|
352
|
+
[sortDirection]="header.column.getIsSorted() || 'none'"
|
|
353
|
+
(sortDirectionChanged)="
|
|
354
|
+
handleSortDirectionChanged($event, header)
|
|
355
|
+
"
|
|
356
|
+
>
|
|
357
|
+
{{ header.column.columnDef.header }}
|
|
358
|
+
</nv-tableheader>
|
|
359
|
+
} @else {
|
|
251
360
|
{{ header.column.columnDef.header }}
|
|
252
|
-
}
|
|
361
|
+
} }
|
|
253
362
|
</th>
|
|
254
363
|
}
|
|
255
364
|
</tr>
|
|
@@ -260,7 +369,7 @@ export class NvDatatable {
|
|
|
260
369
|
@for (row of table().getRowModel().rows; track row.id; let i = $index)
|
|
261
370
|
{
|
|
262
371
|
<tr
|
|
263
|
-
[attr.data-testid]="'datatable-row-' +
|
|
372
|
+
[attr.data-testid]="'datatable-row-' + i"
|
|
264
373
|
#tableRow
|
|
265
374
|
[attr.data-is-last]="
|
|
266
375
|
isInfiniteScroll() && i === table().getRowModel().rows.length - 1
|
|
@@ -269,7 +378,7 @@ export class NvDatatable {
|
|
|
269
378
|
"
|
|
270
379
|
>
|
|
271
380
|
@for (cell of row.getVisibleCells(); track cell.id) {
|
|
272
|
-
<td [attr.data-testid]="'datatable-cell-' + cell.id">
|
|
381
|
+
<td [attr.data-testid]="'datatable-cell-' + cell.column.id">
|
|
273
382
|
<ng-container
|
|
274
383
|
*flexRender="
|
|
275
384
|
cell.column.columnDef.cell;
|
|
@@ -324,9 +433,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
324
433
|
!header.column.columnDef.enableResizing ? 'true' : null
|
|
325
434
|
"
|
|
326
435
|
>
|
|
327
|
-
@if (!header.isPlaceholder) {
|
|
436
|
+
@if (!header.isPlaceholder) { @if (header.column.getCanSort()) {
|
|
437
|
+
<nv-tableheader
|
|
438
|
+
[sortable]="true"
|
|
439
|
+
[sortDirection]="header.column.getIsSorted() || 'none'"
|
|
440
|
+
(sortDirectionChanged)="
|
|
441
|
+
handleSortDirectionChanged($event, header)
|
|
442
|
+
"
|
|
443
|
+
>
|
|
444
|
+
{{ header.column.columnDef.header }}
|
|
445
|
+
</nv-tableheader>
|
|
446
|
+
} @else {
|
|
328
447
|
{{ header.column.columnDef.header }}
|
|
329
|
-
}
|
|
448
|
+
} }
|
|
330
449
|
</th>
|
|
331
450
|
}
|
|
332
451
|
</tr>
|
|
@@ -337,7 +456,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
337
456
|
@for (row of table().getRowModel().rows; track row.id; let i = $index)
|
|
338
457
|
{
|
|
339
458
|
<tr
|
|
340
|
-
[attr.data-testid]="'datatable-row-' +
|
|
459
|
+
[attr.data-testid]="'datatable-row-' + i"
|
|
341
460
|
#tableRow
|
|
342
461
|
[attr.data-is-last]="
|
|
343
462
|
isInfiniteScroll() && i === table().getRowModel().rows.length - 1
|
|
@@ -346,7 +465,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
346
465
|
"
|
|
347
466
|
>
|
|
348
467
|
@for (cell of row.getVisibleCells(); track cell.id) {
|
|
349
|
-
<td [attr.data-testid]="'datatable-cell-' + cell.id">
|
|
468
|
+
<td [attr.data-testid]="'datatable-cell-' + cell.column.id">
|
|
350
469
|
<ng-container
|
|
351
470
|
*flexRender="
|
|
352
471
|
cell.column.columnDef.cell;
|
|
@@ -382,4 +501,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
382
501
|
type: ContentChildren,
|
|
383
502
|
args: [NvDatatableCellDirective]
|
|
384
503
|
}] } });
|
|
385
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbnYtZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBRTFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLFlBQVksRUFDWixlQUFlLEVBRWYsTUFBTSxFQUNOLE1BQU0sRUFFTixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsbUJBQW1CLEdBS3BCLE1BQU0sbUJBQW1CLENBQUMsQ0FBQyxtR0FBbUc7OztBQUkvSCxPQUFPLEVBQUUsbUJBQW1CLElBQUksMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXlHdEY7O0dBRUc7QUE0RUgsTUFBTSxPQUFPLFdBQVc7SUEwSXRCLHdDQUF3QztJQUN4QyxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQXlDRDtRQW5MQSx5QkFBeUI7UUFDekIsWUFBTyxHQUFHLEtBQUssQ0FBeUIsRUFBRSxDQUFDLENBQUM7UUFDNUMsZUFBZTtRQUNmLFNBQUksR0FBRyxLQUFLLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDdEIsd0NBQXdDO1FBQ3hDLGVBQVUsR0FBRyxLQUFLLENBQTBDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLHNFQUFzRTtRQUN0RSxpQkFBWSxHQUFHLEtBQUssQ0FBVSxL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SSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzs4R0F0UlUsV0FBVztrR0FBWCxXQUFXLDRyQkFhc0IsV0FBVyxnREFNdEMsd0JBQXdCLG9KQXpGL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0VULDJEQXRFUyxZQUFZLHNNQUFFLG1CQUFtQjs7MkZBd0VoQyxXQUFXO2tCQTNFdkIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztvQkFDNUMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvRVQ7aUJBQ0Y7d0RBZUMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPekQsYUFBYTtzQkFEWixlQUFlO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtcmV0dXJucyAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBFbGVtZW50UmVmLFxuICB2aWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlLFxuICB0eXBlIE52RGF0YXRhYmxlQ2VsbENvbnRleHQsXG59IGZyb20gJy4vbnYtZGF0YXRhYmxlLWNlbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIGNyZWF0ZUFuZ3VsYXJUYWJsZSxcbiAgZ2V0Q29yZVJvd01vZGVsLFxuICBnZXRQYWdpbmF0aW9uUm93TW9kZWwsXG4gIEZsZXhSZW5kZXJEaXJlY3RpdmUsXG4gIHR5cGUgRmxleFJlbmRlckNvbXBvbmVudCxcbiAgdHlwZSBDb2x1bW5EZWYsXG4gIHR5cGUgQ2VsbENvbnRleHQsXG4gIHR5cGUgUGFnaW5hdGlvblN0YXRlLFxufSBmcm9tICcuL2RhdGF0YWJsZS51dGlscyc7IC8vIGxvY2FsIGNvcHkgb2YgQHRhbnN0YWNrL2FuZ3VsYXItdGFibGUgKHJlcXVpcmVkIGZvciBzdG9yeWJvb2ssIHRoZSBidWlsdCB2ZXJzaW9uIGlzIG5vdCB3b3JraW5nKVxuXG5leHBvcnQgdHlwZSB7IENlbGxDb250ZXh0IGFzIE52RGF0YXRhYmxlQ2VsbENvbnRleHQgfTtcblxuZXhwb3J0IHsgZmxleFJlbmRlckNvbXBvbmVudCBhcyBudkRhdGF0YWJsZVJlbmRlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0YXRhYmxlLnV0aWxzJztcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBkYXRhdGFibGUgcm93LiAqL1xuZXhwb3J0IHR5cGUgTnZEYXRhdGFibGVSb3cgPSBSZWNvcmQ8XG4gIHN0cmluZyxcbiAgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgfCB0eXBlb2YgRGF0ZVxuPjtcblxuLyoqIFBhcmFtZXRlcnMgZm9yIGN1c3RvbSBjZWxsIHJlbmRlcmluZyBmdW5jdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZUYWJsZVJlbmRlckNlbGxQYXJhbXM8VCBleHRlbmRzIE52RGF0YXRhYmxlUm93LCBWPiB7XG4gIHZhbHVlOiBWO1xuICByb3c6IFQ7XG4gIGZpZWxkOiBrZXlvZiBUO1xuICByb3dJbmRleDogbnVtYmVyO1xufVxuXG4vKiogQ29sdW1uIGRlZmluaXRpb24gZm9yIE52RGF0YXRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZUNvbHVtbjxUIGV4dGVuZHMgTnZEYXRhdGFibGVSb3c+IHtcbiAgZmllbGQ6IGtleW9mIFQ7XG4gIGhlYWRlck5hbWU/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICByZXNpemFibGU/OiBib29sZWFuO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIGNlbGwgcmVuZGVyZXIgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGVpdGhlciBhIHN0cmluZyBvciBBbmd1bGFyIFRlbXBsYXRlUmVmLlxuICAgKiBVc2UgYCRpbXBsaWNpdGAgaW4geW91ciB0ZW1wbGF0ZSB0byByZWNlaXZlIHRoZSBDZWxsQ29udGV4dC5cbiAgICovXG4gIHJlbmRlckNlbGw/OiAoY29udGV4dDogQ2VsbENvbnRleHQ8VCwgdW5rbm93bj4pID0+XG4gICAgfCBzdHJpbmdcbiAgICB8IEZsZXhSZW5kZXJDb21wb25lbnRcbiAgICB8IFRlbXBsYXRlUmVmPHtcbiAgICAgICAgJGltcGxpY2l0OiBDZWxsQ29udGV4dDxULCB1bmtub3duPjtcbiAgICAgIH0+O1xufVxuXG4vKipcbiAqIFBhZ2luYXRpb24gY29uZmlndXJhdGlvbiBmb3IgTnZEYXRhdGFibGUuXG4gKiBTdXBwb3J0cyB0aHJlZSBtb2RlczogY2xpZW50LXNpZGUsIHNlcnZlci1zaWRlIHdpdGggYnV0dG9ucywgYW5kIGluZmluaXRlIHNjcm9sbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcge1xuICAvKiogUGFnaW5hdGlvbiBtb2RlICovXG4gIG1vZGU6ICdjbGllbnQnIHwgJ3NlcnZlcicgfCAnaW5maW5pdGUnO1xuICAvKiogSW5pdGlhbCBwYWdlIHNpemUgKGRlZmF1bHQ6IDEwKSAqL1xuICBpbml0aWFsUGFnZVNpemU/OiBudW1iZXI7XG4gIC8qKiBBdmFpbGFibGUgcGFnZSBzaXplIG9wdGlvbnMgKGRlZmF1bHQ6IFsxMCwgMjAsIDUwLCAxMDBdKSAqL1xuICBwYWdlU2l6ZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvLyBTZXJ2ZXItc2lkZSAoYnV0dG9ucykgc3BlY2lmaWMgcHJvcGVydGllc1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHJvd3MgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKSAqL1xuICB0b3RhbFJvd0NvdW50PzogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHBhZ2VzIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbikgKi9cbiAgdG90YWxQYWdlQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHBhZ2luYXRpb24gc3RhdGUgY2hhbmdlcyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pICovXG4gIG9uUGFnaW5hdGlvbkNoYW5nZT86IChzdGF0ZToge1xuICAgIC8qKiBDdXJyZW50IHBhZ2UgaW5kZXggKi9cbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICAvKiogQ3VycmVudCBwYWdlIHNpemUgKi9cbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICB9KSA9PiB2b2lkO1xuXG4gIC8vIEluZmluaXRlIHNjcm9sbCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gIC8qKiBXaGV0aGVyIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQgKGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBkYXRhIGlzIGN1cnJlbnRseSBsb2FkaW5nIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogRGlzdGFuY2UgZnJvbSBib3R0b20gaW4gcGl4ZWxzIHRvIHRyaWdnZXIgbG9hZCAoZGVmYXVsdDogNTAwKSAqL1xuICBsb2FkTW9yZVRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqIENhbGxiYWNrIHRvIGxvYWQgbW9yZSBkYXRhIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBvbkxvYWRNb3JlPzogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBBUEkgZXhwb3NlZCB0byBwYWdpbmF0aW9uIHRlbXBsYXRlIGZvciBidWlsZGluZyBjdXN0b20gcGFnaW5hdGlvbiBVSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkge1xuICAvKiogQ3VycmVudCBwYWdlIGluZGV4ICh6ZXJvLWJhc2VkKSAqL1xuICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2YgcGFnZXMgKi9cbiAgcGFnZUNvdW50OiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2Ygcm93cyAqL1xuICByb3dDb3VudDogbnVtYmVyO1xuICAvKiogTmF2aWdhdGUgdG8gZmlyc3QgcGFnZSAqL1xuICBmaXJzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBwYWdlICovXG4gIHByZXZpb3VzUGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIG5leHQgcGFnZSAqL1xuICBuZXh0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIGxhc3QgcGFnZSAqL1xuICBsYXN0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIHNwZWNpZmljIHBhZ2UgYnkgaW5kZXggKi9cbiAgc2V0UGFnZUluZGV4OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqIENoYW5nZSBwYWdlIHNpemUgKi9cbiAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHByZXZpb3VzIHBhZ2UgaXMgYXZhaWxhYmxlICovXG4gIGNhblByZXZpb3VzUGFnZTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbmV4dCBwYWdlIGlzIGF2YWlsYWJsZSAqL1xuICBjYW5OZXh0UGFnZTogYm9vbGVhbjtcbiAgLyoqIExvYWRpbmcgc3RhdGUgKG9ubHkgZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbW9yZSBpdGVtcyBhcmUgYXZhaWxhYmxlIChvbmx5IGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE5vdmEgRGF0YXRhYmxlIGJ1aWx0IG9uIFRhblN0YWNrIFRhYmxlIChBbmd1bGFyKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnYtZGF0YXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRmxleFJlbmRlckRpcmVjdGl2ZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnYtdGFibGU+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0aGVhZCBbYXR0ci5kYXRhLXN0aWNreS10b3BdPVwic3RpY2t5SGVhZGVyKCkgPyAndHJ1ZScgOiBudWxsXCI+XG4gICAgICAgICAgQGZvciAoaGVhZGVyR3JvdXAgb2YgdGFibGUoKS5nZXRIZWFkZXJHcm91cHMoKTsgdHJhY2sgaGVhZGVyR3JvdXAuaWQpXG4gICAgICAgICAge1xuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBoZWFkZXJHcm91cC5oZWFkZXJzOyB0cmFjayBoZWFkZXIuaWQpIHtcbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGF0YXRhYmxlLWhlYWRlci0nICsgaGVhZGVyLmlkXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgICAgICAgIGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLnNpemVcbiAgICAgICAgICAgICAgICAgID8gaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuc2l6ZSArICdweCdcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLW5vLXJlc2l6ZV09XCJcbiAgICAgICAgICAgICAgICAhaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuZW5hYmxlUmVzaXppbmcgPyAndHJ1ZScgOiBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoIWhlYWRlci5pc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgIHt7IGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmhlYWRlciB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICBAZm9yIChyb3cgb2YgdGFibGUoKS5nZXRSb3dNb2RlbCgpLnJvd3M7IHRyYWNrIHJvdy5pZDsgbGV0IGkgPSAkaW5kZXgpXG4gICAgICAgICAge1xuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2RhdGF0YWJsZS1yb3ctJyArIHJvdy5pZFwiXG4gICAgICAgICAgICAjdGFibGVSb3dcbiAgICAgICAgICAgIFthdHRyLmRhdGEtaXMtbGFzdF09XCJcbiAgICAgICAgICAgICAgaXNJbmZpbml0ZVNjcm9sbCgpICYmIGkgPT09IHRhYmxlKCkuZ2V0Um93TW9kZWwoKS5yb3dzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChjZWxsIG9mIHJvdy5nZXRWaXNpYmxlQ2VsbHMoKTsgdHJhY2sgY2VsbC5pZCkge1xuICAgICAgICAgICAgPHRkIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtY2VsbC0nICsgY2VsbC5pZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKmZsZXhSZW5kZXI9XCJcbiAgICAgICAgICAgICAgICAgIGNlbGwuY29sdW1uLmNvbHVtbkRlZi5jZWxsO1xuICAgICAgICAgICAgICAgICAgcHJvcHM6IGNlbGwuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgICAgbGV0IGNlbGxDb250ZW50XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGNlbGxDb250ZW50IH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9udi10YWJsZT5cblxuICAgIDwhLS0gUmVuZGVyIHBhZ2luYXRpb24gaWYgY29uZmlndXJlZCAtLT5cbiAgICBAaWYgKHBhZ2luYXRpb25BUEkoKSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHBhZ2luYXRpb25UZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcGFnaW5hdGlvbkFQSSgpIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTnZEYXRhdGFibGU8VCBleHRlbmRzIE52RGF0YXRhYmxlUm93ID0gTnZEYXRhdGFibGVSb3c+XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKiBDb2x1bW4gZGVmaW5pdGlvbnMgKi9cbiAgY29sdW1ucyA9IGlucHV0PE52RGF0YXRhYmxlQ29sdW1uPFQ+W10+KFtdKTtcbiAgLyoqIFJvdyBkYXRhICovXG4gIHJvd3MgPSBpbnB1dDxUW10+KFtdKTtcbiAgLyoqIE9wdGlvbmFsIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbiAqL1xuICBwYWdpbmF0aW9uID0gaW5wdXQ8TnZEYXRhdGFibGVQYWdpbmF0aW9uQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogU2hvdWxkIHRoZSBoZWFkZXIgc3RpY2sgdG8gdGhlIHRvcCBvZiB0aGUgdGFibGUgd2hlbiBzY3JvbGxpbmc/ICovXG4gIHN0aWNreUhlYWRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKiogVGVtcGxhdGUgZm9yIGN1c3RvbSBwYWdpbmF0aW9uIFVJICovXG4gIEBDb250ZW50Q2hpbGQoJ3BhZ2luYXRpb25UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcGFnaW5hdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8e1xuICAgICRpbXBsaWNpdDogTnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJO1xuICB9PjtcblxuICAvKiogQ2VsbCB0ZW1wbGF0ZXMgcHJvdmlkZWQgdmlhIG52RGF0YXRhYmxlQ2VsbCBkaXJlY3RpdmUgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmUpXG4gIGNlbGxUZW1wbGF0ZXM/OiBRdWVyeUxpc3Q8TnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlPFQ+PjtcblxuICAvKiogU2lnbmFsIHRvIHRyYWNrIGNlbGwgdGVtcGxhdGVzIGFycmF5ICovXG4gIHByaXZhdGUgY2VsbFRlbXBsYXRlc1NpZ25hbCA9IHNpZ25hbDxOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmU8VD5bXT4oW10pO1xuXG4gIC8qKiBNYXAgb2YgZmllbGQgbmFtZXMgdG8gY2VsbCB0ZW1wbGF0ZXMgKi9cbiAgcHJpdmF0ZSBjZWxsVGVtcGxhdGVNYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlUmVmPE52RGF0YXRhYmxlQ2VsbENvbnRleHQ8VD4+PigpO1xuICAgIHRoaXMuY2VsbFRlbXBsYXRlc1NpZ25hbCgpLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgbWFwLnNldChkaXJlY3RpdmUubnZEYXRhdGFibGVDZWxsLCBkaXJlY3RpdmUudGVtcGxhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXA7XG4gIH0pO1xuXG4gIC8qKiBQYWdpbmF0aW9uIHN0YXRlIGZvciBzZXJ2ZXIgbW9kZSAqL1xuICBwcml2YXRlIHBhZ2luYXRpb25TdGF0ZSA9IHNpZ25hbDxQYWdpbmF0aW9uU3RhdGU+KHtcbiAgICBwYWdlSW5kZXg6IDAsXG4gICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdGlvbigpPy5pbml0aWFsUGFnZVNpemUgfHwgMTAsXG4gIH0pO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGFibGUgcm93cyBmb3IgaW5maW5pdGUgc2Nyb2xsIG9ic2VydmVyICovXG4gIHByaXZhdGUgdGFibGVSb3dzID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0YWJsZVJvdycpO1xuXG4gIC8qKiBJbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgZm9yIGluZmluaXRlIHNjcm9sbCAqL1xuICBwcml2YXRlIG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBIZWxwZXIgdG8gY2hlY2sgaWYgdXNpbmcgaW5maW5pdGUgc2Nyb2xsICovXG4gIGlzSW5maW5pdGVTY3JvbGwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBhZ2luYXRpb24oKT8ubW9kZSA9PT0gJ2luZmluaXRlJyk7XG5cbiAgLyoqIENvbXB1dGVkIHRhYmxlIGNvbHVtbnMgd2l0aCBwcm9wZXIgdHlwaW5nIGFuZCBmaWx0ZXJpbmcuICovXG4gIHRhYmxlQ29sdW1ucyA9IGNvbXB1dGVkPENvbHVtbkRlZjxUPltdPigoKSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGVNYXAgPSB0aGlzLmNlbGxUZW1wbGF0ZU1hcCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucygpXG4gICAgICAuZmlsdGVyKChjb2wpID0+ICFjb2wuaGlkZGVuKVxuICAgICAgLm1hcCgoY29sKSA9PiAoe1xuICAgICAgICBhY2Nlc3NvcktleTogY29sLmZpZWxkIGFzIHN0cmluZyxcbiAgICAgICAgaGVhZGVyOiBjb2wuaGVhZGVyTmFtZSB8fCBTdHJpbmcoY29sLmZpZWxkKSxcbiAgICAgICAgc2l6ZTogY29sLndpZHRoLFxuICAgICAgICBlbmFibGVSZXNpemluZzogY29sLnJlc2l6YWJsZSA/PyB0cnVlLFxuICAgICAgICBjZWxsOiAoY29udGV4dDogQ2VsbENvbnRleHQ8VCwgdW5rbm93bj4pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBTdHJpbmcoY29sLmZpZWxkKTtcbiAgICAgICAgICBjb25zdCBjZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZU1hcC5nZXQoZmllbGROYW1lKTtcblxuICAgICAgICAgIC8vIFByaW9yaXR5OiB0ZW1wbGF0ZSA+IHJlbmRlckNlbGwgPiBkZWZhdWx0XG4gICAgICAgICAgaWYgKGNlbGxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgLy8gUmV0dXJuIFRlbXBsYXRlUmVmIGRpcmVjdGx5IC0gRmxleFJlbmRlciB3aWxsIGhhbmRsZSBpdFxuICAgICAgICAgICAgcmV0dXJuIGNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gcmVuZGVyQ2VsbCBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChjb2wucmVuZGVyQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbC5yZW5kZXJDZWxsKGNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERlZmF1bHQ6IGp1c3QgcmV0dXJuIHRoZSB2YWx1ZVxuICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gIH0pO1xuXG4gIC8qKiBUYW5TdGFjayB0YWJsZSBpbnN0YW5jZSB3aXRoIFNpZ25hbHMgKi9cbiAgcHJpdmF0ZSB0YWJsZUluc3RhbmNlID0gY3JlYXRlQW5ndWxhclRhYmxlKCgpID0+IHtcbiAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG5cbiAgICBpZiAoIXBhZ2luYXRpb25Db25maWcgfHwgcGFnaW5hdGlvbkNvbmZpZy5tb2RlID09PSAnaW5maW5pdGUnKSB7XG4gICAgICAvLyBObyBwYWdpbmF0aW9uIG9yIGluZmluaXRlIHNjcm9sbCAtIHNpbXBsZSBjb25maWdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHRoaXMucm93cygpLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlQ29sdW1ucygpLFxuICAgICAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIC8vIENsaWVudC1zaWRlIHBhZ2luYXRpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHRoaXMucm93cygpLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlQ29sdW1ucygpLFxuICAgICAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxuICAgICAgICBnZXRQYWdpbmF0aW9uUm93TW9kZWw6IGdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLFxuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbkNvbmZpZy5pbml0aWFsUGFnZVNpemUgfHwgMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb25cbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU3RhdGUoKS5wYWdlU2l6ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHRoaXMucm93cygpLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlQ29sdW1ucygpLFxuICAgICAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxuICAgICAgICBtYW51YWxQYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgICBwYWdlQ291bnQ6XG4gICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxQYWdlQ291bnRcbiAgICAgICAgICAgIDogcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJvd0NvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCAvIHBhZ2VTaXplKVxuICAgICAgICAgICAgOiAtMSxcbiAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB0aGlzLnBhZ2luYXRpb25TdGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICBvblBhZ2luYXRpb25DaGFuZ2U6IChcbiAgICAgICAgICB1cGRhdGVyT3JWYWx1ZTpcbiAgICAgICAgICAgIHwgUGFnaW5hdGlvblN0YXRlXG4gICAgICAgICAgICB8ICgob2xkOiBQYWdpbmF0aW9uU3RhdGUpID0+IFBhZ2luYXRpb25TdGF0ZSksXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdXBkYXRlck9yVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblN0YXRlLnNldCh1cGRhdGVyT3JWYWx1ZSh0aGlzLnBhZ2luYXRpb25TdGF0ZSgpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblN0YXRlLnNldCh1cGRhdGVyT3JWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKiBQdWJsaWMgZ2V0dGVyIGZvciB0YWJsZSBpbnN0YW5jZS4gKi9cbiAgdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVJbnN0YW5jZSgpO1xuICB9XG5cbiAgLyoqIEJ1aWxkIHBhZ2luYXRpb24gQVBJIGZvciB0ZW1wbGF0ZSAqL1xuICBwYWdpbmF0aW9uQVBJID0gY29tcHV0ZWQ8TnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICBpZiAoIXBhZ2luYXRpb25Db25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZSgpO1xuICAgIGNvbnN0IHRhYmxlUGFnaW5hdGlvblN0YXRlID0gdGFibGUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRhYmxlLmdldFBhZ2VDb3VudCgpO1xuICAgIGNvbnN0IHJvd0NvdW50ID1cbiAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ3NlcnZlcidcbiAgICAgICAgPyBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUm93Q291bnQgfHwgdGhpcy5yb3dzKCkubGVuZ3RoXG4gICAgICAgIDogdGhpcy5yb3dzKCkubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VJbmRleDogdGFibGVQYWdpbmF0aW9uU3RhdGUucGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHRhYmxlUGFnaW5hdGlvblN0YXRlLnBhZ2VTaXplLFxuICAgICAgcGFnZUNvdW50LFxuICAgICAgcm93Q291bnQsXG4gICAgICBmaXJzdFBhZ2U6ICgpID0+IHRhYmxlLnNldFBhZ2VJbmRleCgwKSxcbiAgICAgIHByZXZpb3VzUGFnZTogKCkgPT4gdGFibGUucHJldmlvdXNQYWdlKCksXG4gICAgICBuZXh0UGFnZTogKCkgPT4gdGFibGUubmV4dFBhZ2UoKSxcbiAgICAgIGxhc3RQYWdlOiAoKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgocGFnZUNvdW50IC0gMSksXG4gICAgICBzZXRQYWdlSW5kZXg6IChpbmRleDogbnVtYmVyKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgoaW5kZXgpLFxuICAgICAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHRhYmxlLnNldFBhZ2VTaXplKHNpemUpLFxuICAgICAgY2FuUHJldmlvdXNQYWdlOiB0YWJsZS5nZXRDYW5QcmV2aW91c1BhZ2UoKSxcbiAgICAgIGNhbk5leHRQYWdlOiB0YWJsZS5nZXRDYW5OZXh0UGFnZSgpLFxuICAgICAgaXNMb2FkaW5nOlxuICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdpbmZpbml0ZSdcbiAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcuaXNMb2FkaW5nXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBoYXNNb3JlOlxuICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdpbmZpbml0ZSdcbiAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcuaGFzTW9yZVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFdhdGNoIHBhZ2luYXRpb24gc3RhdGUgY2hhbmdlcyBmb3Igc2VydmVyIG1vZGVcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnBhZ2luYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnPy5tb2RlID09PSAnc2VydmVyJyAmJlxuICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25QYWdpbmF0aW9uQ2hhbmdlXG4gICAgICAgICkge1xuICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25QYWdpbmF0aW9uQ2hhbmdlKHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogc3RhdGUucGFnZUluZGV4LFxuICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlLnBhZ2VTaXplLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICAvLyBTZXQgdXAgaW50ZXJzZWN0aW9uIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGxcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMucm93cygpOyAvLyBUcmFjayByb3dzIGNoYW5nZXNcblxuICAgICAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBvYnNlcnZlclxuICAgICAgICBpZiAodGhpcy5vYnNlcnZlcikge1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBzZXQgdXAgb2JzZXJ2ZXIgZm9yIGluZmluaXRlIHNjcm9sbCBtb2RlXG4gICAgICAgIGlmIChwYWdpbmF0aW9uQ29uZmlnPy5tb2RlICE9PSAnaW5maW5pdGUnIHx8IHJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZW5zdXJlIERPTSBpcyB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IHBhZ2luYXRpb25Db25maWcubG9hZE1vcmVUaHJlc2hvbGQgfHwgNTAwO1xuXG4gICAgICAgICAgLy8gRmluZCB0aGUgbGFzdCByb3cgZWxlbWVudFxuICAgICAgICAgIGNvbnN0IHRhYmxlUm93RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgJ1tkYXRhLWlzLWxhc3Q9XCJ0cnVlXCJdJyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxhc3RSb3dFbGVtZW50ID0gdGFibGVSb3dFbGVtZW50c1t0YWJsZVJvd0VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgaWYgKCFsYXN0Um93RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbnRyeS5pc0ludGVyc2VjdGluZyAmJlxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2luZmluaXRlJyAmJlxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcuaGFzTW9yZSAmJlxuICAgICAgICAgICAgICAgICFwYWdpbmF0aW9uQ29uZmlnLmlzTG9hZGluZyAmJlxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25Mb2FkTW9yZVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uTG9hZE1vcmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcm9vdE1hcmdpbjogYCR7dGhyZXNob2xkfXB4YCxcbiAgICAgICAgICAgICAgcm9vdDogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShsYXN0Um93RWxlbWVudCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFN5bmMgY2VsbCB0ZW1wbGF0ZXMgUXVlcnlMaXN0IHRvIHNpZ25hbFxuICAgIGlmICh0aGlzLmNlbGxUZW1wbGF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbFRlbXBsYXRlc1NpZ25hbC5zZXQodGhpcy5jZWxsVGVtcGxhdGVzLnRvQXJyYXkoKSk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byBjaGFuZ2VzIGluIHRoZSBRdWVyeUxpc3RcbiAgICAgIHRoaXMuY2VsbFRlbXBsYXRlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxUZW1wbGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmNlbGxUZW1wbGF0ZXNTaWduYWwuc2V0KHRoaXMuY2VsbFRlbXBsYXRlcy50b0FycmF5KCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcikge1xuICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
504
|
+
/********************************* UTILS **************************************/
|
|
505
|
+
/**
|
|
506
|
+
* Creates a strongly-typed column factory for a given row type.
|
|
507
|
+
*
|
|
508
|
+
* @template Row The row data type (e.g., `Product`)
|
|
509
|
+
*
|
|
510
|
+
* @returns {function} A function that accepts a column definition and infers:
|
|
511
|
+
* - `K` as the field key (`keyof Row`)
|
|
512
|
+
* - `F` as the return type of `valueFormatter` (defaults to `Row[K]`)
|
|
513
|
+
*
|
|
514
|
+
* @example
|
|
515
|
+
* ```ts
|
|
516
|
+
* // Define your row type
|
|
517
|
+
* interface Product {
|
|
518
|
+
* name: string;
|
|
519
|
+
* price: number;
|
|
520
|
+
* }
|
|
521
|
+
*
|
|
522
|
+
* const col = makeColumn<Product>();
|
|
523
|
+
*/
|
|
524
|
+
export function makeColumn() {
|
|
525
|
+
return function define(col) {
|
|
526
|
+
return col;
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
export { flexRenderComponent as nvDatatableRenderComponent } from './datatable.utils';
|
|
530
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbnYtZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBQzFDLHdDQUF3QztBQUV4QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osZUFBZSxFQUVmLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsZ0hBQWdIO0FBQ2hILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBT3BCLE1BQU0sbUJBQW1CLENBQUM7OztBQUUzQjs7O0dBR0c7QUFzRkgsTUFBTSxPQUFPLFdBQVc7SUFrUHRCLHdDQUF3QztJQUN4QyxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwQkFBMEIsQ0FDeEIsS0FBMkMsRUFDM0MsTUFLQztRQUVELHlEQUF5RDtRQUN6RCxJQUFJLFNBQWtDLENBQUM7UUFFdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixTQUFTLEdBQUcsS0FBZ0MsQ0FBQztRQUMvQyxDQUFDO2FBQU0sSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqRSxT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c2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWpzZG9jICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLXJldHVybnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtcGFyYW0gKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBlZmZlY3QsXG4gIHNpZ25hbCxcbiAgRWxlbWVudFJlZixcbiAgdmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIE52RGF0YXRhYmxlQ2VsbERpcmVjdGl2ZSxcbiAgdHlwZSBOdkRhdGF0YWJsZUNlbGxDb250ZXh0LFxufSBmcm9tICcuL252LWRhdGF0YWJsZS1jZWxsLmRpcmVjdGl2ZSc7XG5cbi8vIGxvY2FsIGNvcHkgb2YgQHRhbnN0YWNrL2FuZ3VsYXItdGFibGUgKHJlcXVpcmVkIGZvciBtdWx0aSBhbmd1bGFyIHZlcnNpb25zLCB0aGUgYnVpbHQgdmVyc2lvbiBpcyBub3Qgd29ya2luZylcbmltcG9ydCB7XG4gIGNyZWF0ZUFuZ3VsYXJUYWJsZSxcbiAgZ2V0Q29yZVJvd01vZGVsLFxuICBnZXRQYWdpbmF0aW9uUm93TW9kZWwsXG4gIGdldFNvcnRlZFJvd01vZGVsLFxuICBGbGV4UmVuZGVyRGlyZWN0aXZlLFxuICB0eXBlIEZsZXhSZW5kZXJDb21wb25lbnQsXG4gIHR5cGUgQ29sdW1uRGVmLFxuICB0eXBlIENlbGxDb250ZXh0LFxuICB0eXBlIFBhZ2luYXRpb25TdGF0ZSxcbiAgdHlwZSBTb3J0aW5nU3RhdGUsXG4gIHR5cGUgTm9JbmZlcixcbn0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKipcbiAqIEEgcG93ZXJmdWwsIGZsZXhpYmxlIGRhdGF0YWJsZSBjb21wb25lbnQgYnVpbHQgb24gVGFuU3RhY2sgVGFibGUuXG4gKiBTdXBwb3J0cyBjdXN0b20gY2VsbCByZW5kZXJpbmcsIGNvbHVtbiBjb25maWd1cmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZnVsbCBUeXBlU2NyaXB0IHR5cGluZy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnYtZGF0YXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRmxleFJlbmRlckRpcmVjdGl2ZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnYtdGFibGU+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0aGVhZCBbYXR0ci5kYXRhLXN0aWNreS10b3BdPVwic3RpY2t5SGVhZGVyKCkgPyAndHJ1ZScgOiBudWxsXCI+XG4gICAgICAgICAgQGZvciAoaGVhZGVyR3JvdXAgb2YgdGFibGUoKS5nZXRIZWFkZXJHcm91cHMoKTsgdHJhY2sgaGVhZGVyR3JvdXAuaWQpXG4gICAgICAgICAge1xuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBoZWFkZXJHcm91cC5oZWFkZXJzOyB0cmFjayBoZWFkZXIuaWQpIHtcbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGF0YXRhYmxlLWhlYWRlci0nICsgaGVhZGVyLmlkXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgICAgICAgIGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLnNpemVcbiAgICAgICAgICAgICAgICAgID8gaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuc2l6ZSArICdweCdcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLW5vLXJlc2l6ZV09XCJcbiAgICAgICAgICAgICAgICAhaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuZW5hYmxlUmVzaXppbmcgPyAndHJ1ZScgOiBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoIWhlYWRlci5pc1BsYWNlaG9sZGVyKSB7IEBpZiAoaGVhZGVyLmNvbHVtbi5nZXRDYW5Tb3J0KCkpIHtcbiAgICAgICAgICAgICAgPG52LXRhYmxlaGVhZGVyXG4gICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzb3J0RGlyZWN0aW9uXT1cImhlYWRlci5jb2x1bW4uZ2V0SXNTb3J0ZWQoKSB8fCAnbm9uZSdcIlxuICAgICAgICAgICAgICAgIChzb3J0RGlyZWN0aW9uQ2hhbmdlZCk9XCJcbiAgICAgICAgICAgICAgICAgIGhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2VkKCRldmVudCwgaGVhZGVyKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgPC9udi10YWJsZWhlYWRlcj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIHt7IGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmhlYWRlciB9fVxuICAgICAgICAgICAgICB9IH1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIEBmb3IgKHJvdyBvZiB0YWJsZSgpLmdldFJvd01vZGVsKCkucm93czsgdHJhY2sgcm93LmlkOyBsZXQgaSA9ICRpbmRleClcbiAgICAgICAgICB7XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGF0YXRhYmxlLXJvdy0nICsgaVwiXG4gICAgICAgICAgICAjdGFibGVSb3dcbiAgICAgICAgICAgIFthdHRyLmRhdGEtaXMtbGFzdF09XCJcbiAgICAgICAgICAgICAgaXNJbmZpbml0ZVNjcm9sbCgpICYmIGkgPT09IHRhYmxlKCkuZ2V0Um93TW9kZWwoKS5yb3dzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChjZWxsIG9mIHJvdy5nZXRWaXNpYmxlQ2VsbHMoKTsgdHJhY2sgY2VsbC5pZCkge1xuICAgICAgICAgICAgPHRkIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtY2VsbC0nICsgY2VsbC5jb2x1bW4uaWRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpmbGV4UmVuZGVyPVwiXG4gICAgICAgICAgICAgICAgICBjZWxsLmNvbHVtbi5jb2x1bW5EZWYuY2VsbDtcbiAgICAgICAgICAgICAgICAgIHByb3BzOiBjZWxsLmdldENvbnRleHQoKTtcbiAgICAgICAgICAgICAgICAgIGxldCBjZWxsQ29udGVudFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjZWxsQ29udGVudCB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvbnYtdGFibGU+XG5cbiAgICA8IS0tIFJlbmRlciBwYWdpbmF0aW9uIGlmIGNvbmZpZ3VyZWQgLS0+XG4gICAgQGlmIChwYWdpbmF0aW9uQVBJKCkpIHtcbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBwYWdpbmF0aW9uVGVtcGxhdGUgfHwgbnVsbDtcbiAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHBhZ2luYXRpb25BUEkoKSB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE52RGF0YXRhYmxlPFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLyoqIENvbHVtbiBkZWZpbml0aW9ucyAqL1xuICBjb2x1bW5zID0gaW5wdXQ8TnZEYXRhdGFibGVDb2x1bW48VD5bXT4oW10pO1xuICAvKiogUm93IGRhdGEgKi9cbiAgcm93cyA9IGlucHV0PFRbXT4oW10pO1xuICAvKiogT3B0aW9uYWwgcGFnaW5hdGlvbiBjb25maWd1cmF0aW9uICovXG4gIHBhZ2luYXRpb24gPSBpbnB1dDxOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBPcHRpb25hbCBzb3J0aW5nIGNvbmZpZ3VyYXRpb24gKi9cbiAgc29ydGluZyA9IGlucHV0PE52RGF0YXRhYmxlU29ydGluZ0NvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIFNob3VsZCB0aGUgaGVhZGVyIHN0aWNrIHRvIHRoZSB0b3Agb2YgdGhlIHRhYmxlIHdoZW4gc2Nyb2xsaW5nPyAqL1xuICBzdGlja3lIZWFkZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqIFRlbXBsYXRlIGZvciBjdXN0b20gcGFnaW5hdGlvbiBVSSAqL1xuICBAQ29udGVudENoaWxkKCdwYWdpbmF0aW9uVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHBhZ2luYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICAkaW1wbGljaXQ6IE52RGF0YXRhYmxlUmVuZGVyUGFnaW5hdGlvbkFQSTtcbiAgfT47XG5cbiAgLyoqIENlbGwgdGVtcGxhdGVzIHByb3ZpZGVkIHZpYSBudkRhdGF0YWJsZUNlbGwgZGlyZWN0aXZlICovXG4gIEBDb250ZW50Q2hpbGRyZW4oTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlKVxuICBjZWxsVGVtcGxhdGVzPzogUXVlcnlMaXN0PE52RGF0YXRhYmxlQ2VsbERpcmVjdGl2ZTxULCBUW2tleW9mIFRdPj47XG5cbiAgLyoqIFNpZ25hbCB0byB0cmFjayBjZWxsIHRlbXBsYXRlcyBhcnJheSAqL1xuICBwcml2YXRlIGNlbGxUZW1wbGF0ZXNTaWduYWwgPSBzaWduYWw8XG4gICAgTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlPFQsIFRba2V5b2YgVF0+W11cbiAgPihbXSk7XG5cbiAgLyoqIE1hcCBvZiBmaWVsZCBuYW1lcyB0byBjZWxsIHRlbXBsYXRlcyAqL1xuICBwcml2YXRlIGNlbGxUZW1wbGF0ZU1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgVGVtcGxhdGVSZWY8TnZEYXRhdGFibGVDZWxsQ29udGV4dDxULCBUW2tleW9mIFRdPj5cbiAgICA+KCk7XG4gICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsKCkuZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICBtYXAuc2V0KGRpcmVjdGl2ZS5udkRhdGF0YWJsZUNlbGwsIGRpcmVjdGl2ZS50ZW1wbGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcDtcbiAgfSk7XG5cbiAgLyoqIFBhZ2luYXRpb24gc3RhdGUgZm9yIHNlcnZlciBtb2RlICovXG4gIHByaXZhdGUgcGFnaW5hdGlvblN0YXRlID0gc2lnbmFsPFBhZ2luYXRpb25TdGF0ZT4oe1xuICAgIHBhZ2VJbmRleDogMCxcbiAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0aW9uKCk/LmluaXRpYWxQYWdlU2l6ZSB8fCAxMCxcbiAgfSk7XG5cbiAgLyoqIFNvcnRpbmcgc3RhdGUgZm9yIGNvbnRyb2xsZWQgc29ydGluZyAoc2VydmVyIG1vZGUpICovXG4gIHByaXZhdGUgc29ydGluZ1N0YXRlID0gc2lnbmFsPFNvcnRpbmdTdGF0ZT4odGhpcy5zb3J0aW5nKCk/LnNvcnRTdGF0ZSB8fCBbXSk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0YWJsZSByb3dzIGZvciBpbmZpbml0ZSBzY3JvbGwgb2JzZXJ2ZXIgKi9cbiAgcHJpdmF0ZSB0YWJsZVJvd3MgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3RhYmxlUm93Jyk7XG5cbiAgLyoqIEludGVyc2VjdGlvbiBvYnNlcnZlciBmb3IgaW5maW5pdGUgc2Nyb2xsICovXG4gIHByaXZhdGUgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEhlbHBlciB0byBjaGVjayBpZiB1c2luZyBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgaXNJbmZpbml0ZVNjcm9sbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFnaW5hdGlvbigpPy5tb2RlID09PSAnaW5maW5pdGUnKTtcblxuICAvKiogQ29tcHV0ZWQgdGFibGUgY29sdW1ucyB3aXRoIHByb3BlciB0eXBpbmcgYW5kIGZpbHRlcmluZy4gKi9cbiAgdGFibGVDb2x1bW5zID0gY29tcHV0ZWQ8Q29sdW1uRGVmPFQsIFRba2V5b2YgVF0+W10+KCgpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZU1hcCA9IHRoaXMuY2VsbFRlbXBsYXRlTWFwKCk7XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zKClcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5oaWRkZW4pXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgLy8gU2hhcmVkIGNlbGwgcmVuZGVyZXJcbiAgICAgICAgY29uc3QgY2VsbFJlbmRlcmVyID0gKGNvbnRleHQ6IENlbGxDb250ZXh0PFQsIFRba2V5b2YgVF0+KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gU3RyaW5nKGNvbC5maWVsZCk7XG4gICAgICAgICAgY29uc3QgY2VsbFRlbXBsYXRlID0gdGVtcGxhdGVNYXAuZ2V0KGZpZWxkTmFtZSk7XG5cbiAgICAgICAgICAvLyBQcmlvcml0eTogdGVtcGxhdGUgPiByZW5kZXJDZWxsID4gZGVmYXVsdFxuICAgICAgICAgIGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIC8vIFJldHVybiBUZW1wbGF0ZVJlZiBkaXJlY3RseSAtIGdldFZhbHVlKCkgcmV0dXJucyBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBjZWxsVGVtcGxhdGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHJlbmRlckNlbGwgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAoY29sLnJlbmRlckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2wucmVuZGVyQ2VsbChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWZhdWx0OiBqdXN0IHJldHVybiB0aGUgdmFsdWUgKGZvcm1hdHRlZCBpZiB2YWx1ZUZvcm1hdHRlciB3YXMgdXNlZClcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbkRlZjogQ29sdW1uRGVmPFQsIFRba2V5b2YgVF0+ID0ge1xuICAgICAgICAgIGFjY2Vzc29yS2V5OiBjb2wuZmllbGQsXG4gICAgICAgICAgYWNjZXNzb3JGbjogY29sLnZhbHVlRm9ybWF0dGVyXG4gICAgICAgICAgICA/IChyb3c6IFQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvd1tjb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wudmFsdWVGb3JtYXR0ZXIhKHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiByYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGhlYWRlcjogY29sLmhlYWRlck5hbWUgfHwgU3RyaW5nKGNvbC5maWVsZCksXG4gICAgICAgICAgc2l6ZTogY29sLndpZHRoLFxuICAgICAgICAgIGVuYWJsZVJlc2l6aW5nOiBjb2wucmVzaXphYmxlID8/IHRydWUsXG4gICAgICAgICAgLy8gU29ydGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgZW5hYmxlU29ydGluZzogdGhpcy5zb3J0aW5nKCkgPyBjb2wuc29ydGFibGUgPz8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgIGNlbGw6IGNlbGxSZW5kZXJlcixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgb3B0aW9uYWwgc29ydGluZyBwcm9wZXJ0aWVzIG9ubHkgaWYgZGVmaW5lZFxuICAgICAgICBpZiAoY29sLnNvcnRpbmdGbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRhblN0YWNrIHR5cGluZyBpcyBzdHJpY3QgYnV0IHRoaXMgd29ya3MgYXQgcnVudGltZVxuICAgICAgICAgIGNvbHVtbkRlZi5zb3J0aW5nRm4gPSBjb2wuc29ydGluZ0ZuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuc29ydERlc2NGaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29sdW1uRGVmLnNvcnREZXNjRmlyc3QgPSBjb2wuc29ydERlc2NGaXJzdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLmludmVydFNvcnRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbHVtbkRlZi5pbnZlcnRTb3J0aW5nID0gY29sLmludmVydFNvcnRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5zb3J0VW5kZWZpbmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb2x1bW5EZWYuc29ydFVuZGVmaW5lZCA9IGNvbC5zb3J0VW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbkRlZjtcbiAgICAgIH0pO1xuICB9KTtcblxuICAvKiogVGFuU3RhY2sgdGFibGUgaW5zdGFuY2Ugd2l0aCBTaWduYWxzICovXG4gIHByaXZhdGUgdGFibGVJbnN0YW5jZSA9IGNyZWF0ZUFuZ3VsYXJUYWJsZSgoKSA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IHNvcnRpbmdDb25maWcgPSB0aGlzLnNvcnRpbmcoKTtcblxuICAgIC8vIERldGVybWluZSBiYXNlIHRhYmxlIGNvbmZpZ3VyYXRpb24gd2l0aCBzb3J0aW5nXG4gICAgY29uc3QgZ2V0QmFzZVRhYmxlQ29uZmlnID0gKCkgPT4ge1xuICAgICAgY29uc3QgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YTogdGhpcy5yb3dzKCksXG4gICAgICAgIGNvbHVtbnM6IHRoaXMudGFibGVDb2x1bW5zKCksXG4gICAgICAgIGdldENvcmVSb3dNb2RlbDogZ2V0Q29yZVJvd01vZGVsKCksXG4gICAgICAgIC8vIFNvcnRpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAuLi4oc29ydGluZ0NvbmZpZyAmJiB7XG4gICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgIHNvcnRpbmc6XG4gICAgICAgICAgICAgIHNvcnRpbmdDb25maWcubW9kZSA9PT0gJ3NlcnZlcicgJiYgc29ydGluZ0NvbmZpZy5zb3J0U3RhdGVcbiAgICAgICAgICAgICAgICA/IHNvcnRpbmdDb25maWcuc29ydFN0YXRlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNvcnRpbmdTdGF0ZSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Tb3J0aW5nQ2hhbmdlOiAoXG4gICAgICAgICAgICB1cGRhdGVyT3JWYWx1ZTpcbiAgICAgICAgICAgICAgfCBTb3J0aW5nU3RhdGVcbiAgICAgICAgICAgICAgfCAoKG9sZDogU29ydGluZ1N0YXRlKSA9PiBTb3J0aW5nU3RhdGUpLFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNvcnQgPVxuICAgICAgICAgICAgICBzb3J0aW5nQ29uZmlnLm1vZGUgPT09ICdzZXJ2ZXInICYmIHNvcnRpbmdDb25maWcuc29ydFN0YXRlXG4gICAgICAgICAgICAgICAgPyBzb3J0aW5nQ29uZmlnLnNvcnRTdGF0ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zb3J0aW5nU3RhdGUoKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3U29ydCA9XG4gICAgICAgICAgICAgIHR5cGVvZiB1cGRhdGVyT3JWYWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gdXBkYXRlck9yVmFsdWUoY3VycmVudFNvcnQpXG4gICAgICAgICAgICAgICAgOiB1cGRhdGVyT3JWYWx1ZTtcblxuICAgICAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBpbnRlcm5hbCBzdGF0ZSBmb3IgcmVhY3Rpdml0eVxuICAgICAgICAgICAgdGhpcy5zb3J0aW5nU3RhdGUuc2V0KG5ld1NvcnQpO1xuXG4gICAgICAgICAgICAvLyBGb3Igc2VydmVyLXNpZGUgc29ydGluZywgYWxzbyBjYWxsIHRoZSBjYWxsYmFja1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzb3J0aW5nQ29uZmlnPy5tb2RlID09PSAnc2VydmVyJyAmJlxuICAgICAgICAgICAgICBzb3J0aW5nQ29uZmlnLm9uU29ydGluZ0NoYW5nZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNvcnRpbmdDb25maWcub25Tb3J0aW5nQ2hhbmdlKG5ld1NvcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWFudWFsU29ydGluZzogc29ydGluZ0NvbmZpZy5tb2RlID09PSAnc2VydmVyJyxcbiAgICAgICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxuICAgICAgICAgIGVuYWJsZU11bHRpU29ydDogc29ydGluZ0NvbmZpZy5lbmFibGVNdWx0aVNvcnQgPz8gZmFsc2UsXG4gICAgICAgICAgZW5hYmxlU29ydGluZ1JlbW92YWw6IHNvcnRpbmdDb25maWcuZW5hYmxlU29ydGluZ1JlbW92YWwgPz8gdHJ1ZSxcbiAgICAgICAgICBtYXhNdWx0aVNvcnRDb2xDb3VudDogc29ydGluZ0NvbmZpZy5tYXhNdWx0aVNvcnRDb2xDb3VudCxcbiAgICAgICAgICBzb3J0RGVzY0ZpcnN0OiBzb3J0aW5nQ29uZmlnLnNvcnREZXNjRmlyc3QgPz8gZmFsc2UsXG4gICAgICAgICAgLy8gV2hlbiBtdWx0aS1zb3J0IGlzIGVuYWJsZWQsIHRyZWF0IGFsbCBjbGlja3MgYXMgbXVsdGktc29ydCBldmVudHNcbiAgICAgICAgICBpc011bHRpU29ydEV2ZW50OiBzb3J0aW5nQ29uZmlnLmVuYWJsZU11bHRpU29ydFxuICAgICAgICAgICAgPyAoKSA9PiB0cnVlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBnZXRTb3J0ZWRSb3dNb2RlbDpcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWcubW9kZSA9PT0gJ2NsaWVudCcgPyBnZXRTb3J0ZWRSb3dNb2RlbCgpIDogdW5kZWZpbmVkLFxuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBiYXNlQ29uZmlnO1xuICAgIH07XG5cbiAgICBpZiAoIXBhZ2luYXRpb25Db25maWcgfHwgcGFnaW5hdGlvbkNvbmZpZy5tb2RlID09PSAnaW5maW5pdGUnKSB7XG4gICAgICAvLyBObyBwYWdpbmF0aW9uIG9yIGluZmluaXRlIHNjcm9sbCAtIHNpbXBsZSBjb25maWdcbiAgICAgIHJldHVybiBnZXRCYXNlVGFibGVDb25maWcoKTtcbiAgICB9IGVsc2UgaWYgKHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIC8vIENsaWVudC1zaWRlIHBhZ2luYXRpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdldEJhc2VUYWJsZUNvbmZpZygpLFxuICAgICAgICBnZXRQYWdpbmF0aW9uUm93TW9kZWw6IGdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLFxuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbkNvbmZpZy5pbml0aWFsUGFnZVNpemUgfHwgMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb24gLSBtYW51YWwgcGFnaW5hdGlvbiB3aXRoIHJlYWN0aXZlIHN0YXRlXG4gICAgICBjb25zdCBiYXNlQ29uZmlnID0gZ2V0QmFzZVRhYmxlQ29uZmlnKCk7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvblN0YXRlKCkucGFnZVNpemU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlQ29uZmlnLFxuICAgICAgICBtYW51YWxQYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgICBwYWdlQ291bnQ6XG4gICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxQYWdlQ291bnRcbiAgICAgICAgICAgIDogcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJvd0NvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCAvIHBhZ2VTaXplKVxuICAgICAgICAgICAgOiAtMSxcbiAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB0aGlzLnBhZ2luYXRpb25TdGF0ZSgpLFxuICAgICAgICAgIC4uLihiYXNlQ29uZmlnLnN0YXRlICYmIHsgc29ydGluZzogYmFzZUNvbmZpZy5zdGF0ZS5zb3J0aW5nIH0pLFxuICAgICAgICB9LFxuICAgICAgICBvblBhZ2luYXRpb25DaGFuZ2U6IChcbiAgICAgICAgICB1cGRhdGVyT3JWYWx1ZTpcbiAgICAgICAgICAgIHwgUGFnaW5hdGlvblN0YXRlXG4gICAgICAgICAgICB8ICgob2xkOiBQYWdpbmF0aW9uU3RhdGUpID0+IFBhZ2luYXRpb25TdGF0ZSksXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID1cbiAgICAgICAgICAgIHR5cGVvZiB1cGRhdGVyT3JWYWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICA/IHVwZGF0ZXJPclZhbHVlKHRoaXMucGFnaW5hdGlvblN0YXRlKCkpXG4gICAgICAgICAgICAgIDogdXBkYXRlck9yVmFsdWU7XG5cbiAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TdGF0ZS5zZXQobmV3U3RhdGUpO1xuXG4gICAgICAgICAgLy8gQ2FsbCB1c2VyJ3MgY2FsbGJhY2sgZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb25cbiAgICAgICAgICBpZiAocGFnaW5hdGlvbkNvbmZpZy5vblBhZ2luYXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25QYWdpbmF0aW9uQ2hhbmdlKHtcbiAgICAgICAgICAgICAgcGFnZUluZGV4OiBuZXdTdGF0ZS5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgIHBhZ2VTaXplOiBuZXdTdGF0ZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvKiogUHVibGljIGdldHRlciBmb3IgdGFibGUgaW5zdGFuY2UuICovXG4gIHRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlSW5zdGFuY2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc29ydCBkaXJlY3Rpb24gY2hhbmdlIGZyb20gdGFibGUgaGVhZGVyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBzb3J0IGRpcmVjdGlvbiBjaGFuZ2UgZXZlbnQgb3IgZGlyZWN0aW9uIHN0cmluZ1xuICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyIFRoZSB0YWJsZSBoZWFkZXIgb2JqZWN0XG4gICAqL1xuICBoYW5kbGVTb3J0RGlyZWN0aW9uQ2hhbmdlZChcbiAgICBldmVudDogRXZlbnQgfCBDdXN0b21FdmVudDxzdHJpbmc+IHwgc3RyaW5nLFxuICAgIGhlYWRlcjoge1xuICAgICAgY29sdW1uOiB7XG4gICAgICAgIGNsZWFyU29ydGluZzogKCkgPT4gdm9pZDtcbiAgICAgICAgdG9nZ2xlU29ydGluZzogKGRlc2M/OiBib29sZWFuLCBtdWx0aT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgICB9O1xuICAgIH0sXG4gICkge1xuICAgIC8vIEV4dHJhY3QgZGlyZWN0aW9uIGZyb20gZXZlbnQgb3IgdXNlIGRpcmVjdGx5IGlmIHN0cmluZ1xuICAgIGxldCBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnO1xuXG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGV2ZW50IGFzICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnO1xuICAgIH0gZWxzZSBpZiAoJ2RldGFpbCcgaW4gZXZlbnQgJiYgdHlwZW9mIGV2ZW50LmRldGFpbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGV2ZW50LmRldGFpbCBhcyAnYXNjJyB8ICdkZXNjJyB8ICdub25lJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgLSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBoYW5kbGUgZ3JhY2VmdWxseVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnVW5leHBlY3RlZCBldmVudCB0eXBlIGluIGhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2VkOicsXG4gICAgICAgIGV2ZW50LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0aW5nQ29uZmlnID0gdGhpcy5zb3J0aW5nKCk7XG5cbiAgICAvLyBDaGVjayBpZiBtdWx0aS1zb3J0IGlzIGVuYWJsZWRcbiAgICBjb25zdCBpc011bHRpU29ydCA9IHNvcnRpbmdDb25maWc/LmVuYWJsZU11bHRpU29ydCA/PyBmYWxzZTtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdub25lJykge1xuICAgICAgLy8gQ2xlYXIgdGhpcyBjb2x1bW4ncyBzb3J0XG4gICAgICBoZWFkZXIuY29sdW1uLmNsZWFyU29ydGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUb2dnbGUgc29ydCAtIFRhblN0YWNrIHdpbGwgaGFuZGxlIHRoZSBsb2dpYyBpbnRlcm5hbGx5XG4gICAgICBoZWFkZXIuY29sdW1uLnRvZ2dsZVNvcnRpbmcoZGlyZWN0aW9uID09PSAnZGVzYycsIGlzTXVsdGlTb3J0KTtcbiAgICB9XG4gIH1cblxuICAvKiogQnVpbGQgcGFnaW5hdGlvbiBBUEkgZm9yIHRlbXBsYXRlICovXG4gIHBhZ2luYXRpb25BUEkgPSBjb21wdXRlZDxOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkgfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgIGlmICghcGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlKCk7XG4gICAgY29uc3QgdGFibGVQYWdpbmF0aW9uU3RhdGUgPSB0YWJsZS5nZXRTdGF0ZSgpLnBhZ2luYXRpb247XG4gICAgY29uc3QgcGFnZUNvdW50ID0gdGFibGUuZ2V0UGFnZUNvdW50KCk7XG4gICAgY29uc3Qgcm93Q291bnQgPVxuICAgICAgcGFnaW5hdGlvbkNvbmZpZy5tb2RlID09PSAnc2VydmVyJ1xuICAgICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCB8fCB0aGlzLnJvd3MoKS5sZW5ndGhcbiAgICAgICAgOiB0aGlzLnJvd3MoKS5sZW5ndGg7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUluZGV4OiB0YWJsZVBhZ2luYXRpb25TdGF0ZS5wYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogdGFibGVQYWdpbmF0aW9uU3RhdGUucGFnZVNpemUsXG4gICAgICBwYWdlQ291bnQsXG4gICAgICByb3dDb3VudCxcbiAgICAgIGZpcnN0UGFnZTogKCkgPT4gdGFibGUuc2V0UGFnZUluZGV4KDApLFxuICAgICAgcHJldmlvdXNQYWdlOiAoKSA9PiB0YWJsZS5wcmV2aW91c1BhZ2UoKSxcbiAgICAgIG5leHRQYWdlOiAoKSA9PiB0YWJsZS5uZXh0UGFnZSgpLFxuICAgICAgbGFzdFBhZ2U6ICgpID0+IHRhYmxlLnNldFBhZ2VJbmRleChwYWdlQ291bnQgLSAxKSxcbiAgICAgIHNldFBhZ2VJbmRleDogKGluZGV4OiBudW1iZXIpID0+IHRhYmxlLnNldFBhZ2VJbmRleChpbmRleCksXG4gICAgICBzZXRQYWdlU2l6ZTogKHNpemU6IG51bWJlcikgPT4gdGFibGUuc2V0UGFnZVNpemUoc2l6ZSksXG4gICAgICBjYW5QcmV2aW91c1BhZ2U6IHRhYmxlLmdldENhblByZXZpb3VzUGFnZSgpLFxuICAgICAgY2FuTmV4dFBhZ2U6IHRhYmxlLmdldENhbk5leHRQYWdlKCksXG4gICAgICBpc0xvYWRpbmc6XG4gICAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2luZmluaXRlJ1xuICAgICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy5pc0xvYWRpbmdcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGhhc01vcmU6XG4gICAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2luZmluaXRlJ1xuICAgICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy5oYXNNb3JlXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gU2V0IHVwIGludGVyc2VjdGlvbiBvYnNlcnZlciBmb3IgaW5maW5pdGUgc2Nyb2xsXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnJvd3MoKTsgLy8gVHJhY2sgcm93cyBjaGFuZ2VzXG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgZXhpc3Rpbmcgb2JzZXJ2ZXJcbiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgc2V0IHVwIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGwgbW9kZVxuICAgICAgICBpZiAocGFnaW5hdGlvbkNvbmZpZz8ubW9kZSAhPT0gJ2luZmluaXRlJyB8fCByb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSBwYWdpbmF0aW9uQ29uZmlnLmxvYWRNb3JlVGhyZXNob2xkIHx8IDUwMDtcblxuICAgICAgICAgIC8vIEZpbmQgdGhlIGxhc3Qgcm93IGVsZW1lbnRcbiAgICAgICAgICBjb25zdCB0YWJsZVJvd0VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICdbZGF0YS1pcy1sYXN0PVwidHJ1ZVwiXScsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBsYXN0Um93RWxlbWVudCA9IHRhYmxlUm93RWxlbWVudHNbdGFibGVSb3dFbGVtZW50cy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgIGlmICghbGFzdFJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZW50cnkuaXNJbnRlcnNlY3RpbmcgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdpbmZpbml0ZScgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLmhhc01vcmUgJiZcbiAgICAgICAgICAgICAgICAhcGFnaW5hdGlvbkNvbmZpZy5pc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uTG9hZE1vcmVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5vbkxvYWRNb3JlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJvb3RNYXJnaW46IGAke3RocmVzaG9sZH1weGAsXG4gICAgICAgICAgICAgIHJvb3Q6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUobGFzdFJvd0VsZW1lbnQpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTeW5jIGNlbGwgdGVtcGxhdGVzIFF1ZXJ5TGlzdCB0byBzaWduYWxcbiAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGVzKSB7XG4gICAgICB0aGlzLmNlbGxUZW1wbGF0ZXNTaWduYWwuc2V0KHRoaXMuY2VsbFRlbXBsYXRlcy50b0FycmF5KCkpO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiB0aGUgUXVlcnlMaXN0XG4gICAgICB0aGlzLmNlbGxUZW1wbGF0ZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsLnNldCh0aGlzLmNlbGxUZW1wbGF0ZXMudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5vYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVVRJTFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cm9uZ2x5LXR5cGVkIGNvbHVtbiBmYWN0b3J5IGZvciBhIGdpdmVuIHJvdyB0eXBlLlxuICpcbiAqIEB0ZW1wbGF0ZSBSb3cgVGhlIHJvdyBkYXRhIHR5cGUgKGUuZy4sIGBQcm9kdWN0YClcbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgY29sdW1uIGRlZmluaXRpb24gYW5kIGluZmVyczpcbiAqIC0gYEtgIGFzIHRoZSBmaWVsZCBrZXkgKGBrZXlvZiBSb3dgKVxuICogLSBgRmAgYXMgdGhlIHJldHVybiB0eXBlIG9mIGB2YWx1ZUZvcm1hdHRlcmAgKGRlZmF1bHRzIHRvIGBSb3dbS11gKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gRGVmaW5lIHlvdXIgcm93IHR5cGVcbiAqIGludGVyZmFjZSBQcm9kdWN0IHtcbiAqICAgbmFtZTogc3RyaW5nO1xuICogICBwcmljZTogbnVtYmVyO1xuICogfVxuICpcbiAqIGNvbnN0IGNvbCA9IG1ha2VDb2x1bW48UHJvZHVjdD4oKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VDb2x1bW48Um93PigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlZmluZTxLIGV4dGVuZHMga2V5b2YgUm93LCBGID0gUm93W0tdPihcbiAgICBjb2w6IE52RGF0YXRhYmxlQ29sdW1uPFJvdywgSywgRj4sXG4gICkge1xuICAgIHJldHVybiBjb2wgYXMgdW5rbm93biBhcyBOdkRhdGF0YWJsZUNvbHVtbjxSb3c+O1xuICB9O1xufVxuXG5leHBvcnQgeyBmbGV4UmVuZGVyQ29tcG9uZW50IGFzIG52RGF0YXRhYmxlUmVuZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHR5cGUgeyBDZWxsQ29udGV4dCBhcyBOdkRhdGF0YWJsZUNlbGxDb250ZXh0IH07XG5cbi8qKiBDb2x1bW4gZGVmaW5pdGlvbiBmb3IgTnZEYXRhdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIE52RGF0YXRhYmxlQ29sdW1uPFxuICBSb3csXG4gIEsgZXh0ZW5kcyBrZXlvZiBSb3cgPSBrZXlvZiBSb3csXG4gIEYgPSBSb3dbS10sXG4+IHtcbiAgLyoqIEZpZWxkIG5hbWUgZnJvbSByb3cgZGF0YSAqL1xuICBmaWVsZDogSztcbiAgLyoqIERpc3BsYXkgbmFtZSBmb3IgY29sdW1uIGhlYWRlciAqL1xuICBoZWFkZXJOYW1lPzogc3RyaW5nO1xuICAvKiogQ29sdW1uIHdpZHRoIGluIHBpeGVscyAqL1xuICB3aWR0aD86IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgY29sdW1uIGlzIHJlc2l6YWJsZSAqL1xuICByZXNpemFibGU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBjb2x1bW4gaXMgaGlkZGVuICovXG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhlIHJhdyB2YWx1ZSBiZWZvcmUgcmVuZGVyaW5nLiBSZWNlaXZlcyB0aGUgY2VsbCB2YWx1ZSBhbmQgZnVsbCByb3cgb2JqZWN0LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZm9ybWF0dGluZyBkYXRlcywgY29udmVydGluZyBhcnJheXMgdG8gc3RyaW5ncywgYWNjZXNzaW5nIG5lc3RlZCBvYmplY3RzLCBldGMuXG4gICAqIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBpcyB0aGVuIHBhc3NlZCB0byByZW5kZXJDZWxsIG9yIHRlbXBsYXRlcy5cbiAgICovXG4gIHZhbHVlRm9ybWF0dGVyPzogKHBhcmFtczogTnZUYWJsZVZhbHVlRm9ybWF0dGVyUGFyYW1zPFJvdywgUm93W0tdLCBLPikgPT4gRjtcbiAgLyoqXG4gICAqIEN1c3RvbSBjZWxsIHJlbmRlcmVyIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBlaXRoZXIgYSBzdHJpbmcgb3IgQW5ndWxhciBUZW1wbGF0ZVJlZi5cbiAgICogVXNlIGAkaW1wbGljaXRgIGluIHlvdXIgdGVtcGxhdGUgdG8gcmVjZWl2ZSB0aGUgQ2VsbENvbnRleHQuXG4gICAqIE5vdGU6IElmIHZhbHVlRm9ybWF0dGVyIGlzIHByb3ZpZGVkLCByZW5kZXJDZWxsIHJlY2VpdmVzIHRoZSBmb3JtYXR0ZWQgdmFsdWUuXG4gICAqL1xuICByZW5kZXJDZWxsPzogKGNvbnRleHQ6IENlbGxDb250ZXh0PFJvdywgRj4pID0+XG4gICAgfCBzdHJpbmdcbiAgICB8IEZsZXhSZW5kZXJDb21wb25lbnRcbiAgICB8IFRlbXBsYXRlUmVmPHtcbiAgICAgICAgJGltcGxpY2l0OiBDZWxsQ29udGV4dDxSb3csIEY+O1xuICAgICAgfT47XG4gIC8qKiBFbmFibGUvZGlzYWJsZSBzb3J0aW5nIGZvciB0aGlzIGNvbHVtbiAqL1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gc29ydGluZyBmdW5jdGlvbiBvciBidWlsdC1pbiBmdW5jdGlvbiBuYW1lICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHNvcnRpbmdGbj86ICgocm93QTogYW55LCByb3dCOiBhbnksIGNvbHVtbklkOiBzdHJpbmcpID0+IG51bWJlcikgfCBzdHJpbmc7XG4gIC8qKiBTdGFydCB3aXRoIGRlc2NlbmRpbmcgc29ydCBmb3IgdGhpcyBjb2x1bW4gKi9cbiAgc29ydERlc2NGaXJzdD86IGJvb2xlYW47XG4gIC8qKiBJbnZlcnQgdGhlIHNvcnQgb3JkZXIgKHVzZWZ1bCBmb3IgcmFua2luZ3MpICovXG4gIGludmVydFNvcnRpbmc/OiBib29sZWFuO1xuICAvKiogV2hlcmUgdG8gcGxhY2UgdW5kZWZpbmVkIHZhbHVlcyBpbiBzb3J0ICovXG4gIHNvcnRVbmRlZmluZWQ/OiAnZmlyc3QnIHwgJ2xhc3QnIHwgZmFsc2UgfCAtMSB8IDE7XG59XG5cbi8qKiBQYXJhbWV0ZXJzIGZvciBjdXN0b20gY2VsbCByZW5kZXJpbmcgZnVuY3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIE52VGFibGVSZW5kZXJDZWxsUGFyYW1zPFJvdywgVmFsdWUsIEZpZWxkPiB7XG4gIC8qKiBDZWxsIHZhbHVlICovXG4gIHZhbHVlOiBWYWx1ZSB8IE5vSW5mZXI8VmFsdWU+O1xuICAvKiogUm93IGRhdGEgKi9cbiAgcm93OiBSb3c7XG4gIC8qKiBGaWVsZCBuYW1lICovXG4gIGZpZWxkOiBGaWVsZDtcbiAgLyoqIFJvdyBpbmRleCAqL1xuICByb3dJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHZhbHVlRm9ybWF0dGVyIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE52VGFibGVWYWx1ZUZvcm1hdHRlclBhcmFtczxSb3csIFZhbHVlLCBGaWVsZD4ge1xuICAvKiogQ2VsbCBvcmlnaW5hbCB2YWx1ZSAqL1xuICB2YWx1ZTogVmFsdWU7XG4gIC8qKiBSb3cgZGF0YSAqL1xuICByb3c6IFJvdztcbiAgLyoqIEZpZWxkIG5hbWUgKi9cbiAgZmllbGQ6IEZpZWxkO1xufVxuXG4vKipcbiAqIFBhZ2luYXRpb24gY29uZmlndXJhdGlvbiBmb3IgTnZEYXRhdGFibGUuXG4gKiBTdXBwb3J0cyB0aHJlZSBtb2RlczogY2xpZW50LXNpZGUsIHNlcnZlci1zaWRlIHdpdGggYnV0dG9ucywgYW5kIGluZmluaXRlIHNjcm9sbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcge1xuICAvKiogUGFnaW5hdGlvbiBtb2RlICovXG4gIG1vZGU6ICdjbGllbnQnIHwgJ3NlcnZlcicgfCAnaW5maW5pdGUnO1xuICAvKiogSW5pdGlhbCBwYWdlIHNpemUgKGRlZmF1bHQ6IDEwKSAqL1xuICBpbml0aWFsUGFnZVNpemU/OiBudW1iZXI7XG4gIC8qKiBBdmFpbGFibGUgcGFnZSBzaXplIG9wdGlvbnMgKGRlZmF1bHQ6IFsxMCwgMjAsIDUwLCAxMDBdKSAqL1xuICBwYWdlU2l6ZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvLyBTZXJ2ZXItc2lkZSAoYnV0dG9ucykgc3BlY2lmaWMgcHJvcGVydGllc1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHJvd3MgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKSAqL1xuICB0b3RhbFJvd0NvdW50PzogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHBhZ2VzIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbikgKi9cbiAgdG90YWxQYWdlQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHBhZ2luYXRpb24gc3RhdGUgY2hhbmdlcyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pICovXG4gIG9uUGFnaW5hdGlvbkNoYW5nZT86IChzdGF0ZToge1xuICAgIC8qKiBDdXJyZW50IHBhZ2UgaW5kZXggKi9cbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICAvKiogQ3VycmVudCBwYWdlIHNpemUgKi9cbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICB9KSA9PiB2b2lkO1xuXG4gIC8vIEluZmluaXRlIHNjcm9sbCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gIC8qKiBXaGV0aGVyIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQgKGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBkYXRhIGlzIGN1cnJlbnRseSBsb2FkaW5nIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogRGlzdGFuY2UgZnJvbSBib3R0b20gaW4gcGl4ZWxzIHRvIHRyaWdnZXIgbG9hZCAoZGVmYXVsdDogNTAwKSAqL1xuICBsb2FkTW9yZVRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqIENhbGxiYWNrIHRvIGxvYWQgbW9yZSBkYXRhIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBvbkxvYWRNb3JlPzogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBBUEkgZXhwb3NlZCB0byBwYWdpbmF0aW9uIHRlbXBsYXRlIGZvciBidWlsZGluZyBjdXN0b20gcGFnaW5hdGlvbiBVSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkge1xuICAvKiogQ3VycmVudCBwYWdlIGluZGV4ICh6ZXJvLWJhc2VkKSAqL1xuICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2YgcGFnZXMgKi9cbiAgcGFnZUNvdW50OiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2Ygcm93cyAqL1xuICByb3dDb3VudDogbnVtYmVyO1xuICAvKiogTmF2aWdhdGUgdG8gZmlyc3QgcGFnZSAqL1xuICBmaXJzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBwYWdlICovXG4gIHByZXZpb3VzUGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIG5leHQgcGFnZSAqL1xuICBuZXh0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIGxhc3QgcGFnZSAqL1xuICBsYXN0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIHNwZWNpZmljIHBhZ2UgYnkgaW5kZXggKi9cbiAgc2V0UGFnZUluZGV4OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqIENoYW5nZSBwYWdlIHNpemUgKi9cbiAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHByZXZpb3VzIHBhZ2UgaXMgYXZhaWxhYmxlICovXG4gIGNhblByZXZpb3VzUGFnZTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbmV4dCBwYWdlIGlzIGF2YWlsYWJsZSAqL1xuICBjYW5OZXh0UGFnZTogYm9vbGVhbjtcbiAgLyoqIExvYWRpbmcgc3RhdGUgKG9ubHkgZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbW9yZSBpdGVtcyBhcmUgYXZhaWxhYmxlIChvbmx5IGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNvcnRpbmcgY29uZmlndXJhdGlvbiBmb3IgTnZEYXRhdGFibGUuXG4gKiBTdXBwb3J0cyBib3RoIGNsaWVudC1zaWRlIGFuZCBzZXJ2ZXItc2lkZSBzb3J0aW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE52RGF0YXRhYmxlU29ydGluZ0NvbmZpZyB7XG4gIC8qKiBTb3J0aW5nIG1vZGUgKi9cbiAgbW9kZTogJ2NsaWVudCcgfCAnc2VydmVyJztcbiAgLyoqIEVuYWJsZSBtdWx0aS1jb2x1bW4gc29ydGluZyB3aXRoIFNoaWZ0K0NsaWNrICovXG4gIGVuYWJsZU11bHRpU29ydD86IGJvb2xlYW47XG4gIC8qKiBBbGxvdyBjeWNsaW5nIHRocm91Z2ggdG8gXCJubyBzb3J0XCIgc3RhdGUgKi9cbiAgZW5hYmxlU29ydGluZ1JlbW92YWw/OiBib29sZWFuO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyBmb3IgbXVsdGktc29ydCAqL1xuICBtYXhNdWx0aVNvcnRDb2xDb3VudD86IG51bWJlcjtcbiAgLyoqIFN0YXJ0IHdpdGggZGVzY2VuZGluZyBzb3J0IGFzIGZpcnN0IHRvZ2dsZSBzdGF0ZSAqL1xuICBzb3J0RGVzY0ZpcnN0PzogYm9vbGVhbjtcbiAgLyoqIENvbnRyb2xsZWQgc29ydCBzdGF0ZSAoZm9yIHNlcnZlci1zaWRlIHNvcnRpbmcpICovXG4gIHNvcnRTdGF0ZT86IFNvcnRpbmdTdGF0ZTtcbiAgLyoqIENhbGxiYWNrIHdoZW4gc29ydGluZyBjaGFuZ2VzIChmb3Igc2VydmVyLXNpZGUgc29ydGluZykgKi9cbiAgb25Tb3J0aW5nQ2hhbmdlPzogKHNvcnRpbmc6IFNvcnRpbmdTdGF0ZSkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIHN0YXRlIHR5cGUgLSBhcnJheSBvZiBzb3J0IGRlc2NyaXB0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIE52RGF0YVRhYmxlU29ydGluZ1N0YXRlID0gU29ydGluZ1N0YXRlO1xuIl19
|