@aquera/ngx-smart-table 0.0.17-alpha → 0.0.19-alpha

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 (170) hide show
  1. package/{fesm2020 → fesm2022}/aquera-ngx-smart-table.mjs +1579 -2101
  2. package/fesm2022/aquera-ngx-smart-table.mjs.map +1 -0
  3. package/package.json +8 -16
  4. package/types/aquera-ngx-smart-table.d.ts +5909 -0
  5. package/aquera-ngx-smart-table.d.ts +0 -5
  6. package/esm2020/aquera-ngx-smart-table.mjs +0 -5
  7. package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +0 -63
  8. package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +0 -115
  9. package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +0 -206
  10. package/esm2020/lib/builder/components/column-list/column-list.component.mjs +0 -125
  11. package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +0 -105
  12. package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +0 -132
  13. package/esm2020/lib/builder/definition-builder.module.mjs +0 -70
  14. package/esm2020/lib/builder/models/builder-state.interface.mjs +0 -5
  15. package/esm2020/lib/builder/services/definition-builder.service.mjs +0 -251
  16. package/esm2020/lib/builder/services/definition-export.service.mjs +0 -167
  17. package/esm2020/lib/builder/services/definition-import.service.mjs +0 -193
  18. package/esm2020/lib/builder/services/sample-data-generator.service.mjs +0 -126
  19. package/esm2020/lib/builder/utils/config-validator.util.mjs +0 -165
  20. package/esm2020/lib/builder/utils/typescript-generator.util.mjs +0 -206
  21. package/esm2020/lib/editors/index.mjs +0 -9
  22. package/esm2020/lib/editors/nile-autocomplete-editor.mjs +0 -228
  23. package/esm2020/lib/editors/nile-calendar-editor.mjs +0 -211
  24. package/esm2020/lib/editors/nile-date-picker-editor.mjs +0 -188
  25. package/esm2020/lib/editors/nile-input-editor.mjs +0 -235
  26. package/esm2020/lib/editors/nile-select-editor.mjs +0 -498
  27. package/esm2020/lib/factories/column-config.factory.mjs +0 -231
  28. package/esm2020/lib/models/autosave-config.interface.mjs +0 -8
  29. package/esm2020/lib/models/base-column-config.class.mjs +0 -253
  30. package/esm2020/lib/models/cell-strategies.interface.mjs +0 -6
  31. package/esm2020/lib/models/cell-types.mjs +0 -147
  32. package/esm2020/lib/models/column-action.interface.mjs +0 -6
  33. package/esm2020/lib/models/column-config.interface.mjs +0 -43
  34. package/esm2020/lib/models/column-config.utils.mjs +0 -101
  35. package/esm2020/lib/models/row-action.interface.mjs +0 -5
  36. package/esm2020/lib/models/row-validator.interface.mjs +0 -2
  37. package/esm2020/lib/models/schema-validation.interface.mjs +0 -2
  38. package/esm2020/lib/models/sheet-action.interface.mjs +0 -5
  39. package/esm2020/lib/models/sheet-config.interface.mjs +0 -5
  40. package/esm2020/lib/models/table-config.interface.mjs +0 -107
  41. package/esm2020/lib/models/table-validator.interface.mjs +0 -2
  42. package/esm2020/lib/models/workbook-action.interface.mjs +0 -5
  43. package/esm2020/lib/models/workbook-config.interface.mjs +0 -5
  44. package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +0 -24
  45. package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +0 -397
  46. package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +0 -103
  47. package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +0 -383
  48. package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +0 -232
  49. package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +0 -97
  50. package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +0 -157
  51. package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +0 -87
  52. package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +0 -167
  53. package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +0 -165
  54. package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +0 -112
  55. package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +0 -1453
  56. package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +0 -169
  57. package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +0 -581
  58. package/esm2020/lib/renderer/directives/click-outside.directive.mjs +0 -28
  59. package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +0 -108
  60. package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +0 -83
  61. package/esm2020/lib/renderer/models/cell-state.interface.mjs +0 -66
  62. package/esm2020/lib/renderer/models/cell.class.mjs +0 -389
  63. package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +0 -7
  64. package/esm2020/lib/renderer/models/sheet-state.class.mjs +0 -90
  65. package/esm2020/lib/renderer/models/sheet-state.interface.mjs +0 -5
  66. package/esm2020/lib/renderer/models/table-state.class.mjs +0 -871
  67. package/esm2020/lib/renderer/models/table-state.interface.mjs +0 -5
  68. package/esm2020/lib/renderer/models/table-types.mjs +0 -29
  69. package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +0 -7
  70. package/esm2020/lib/renderer/models/workbook-state.class.mjs +0 -174
  71. package/esm2020/lib/renderer/models/workbook-state.interface.mjs +0 -5
  72. package/esm2020/lib/renderer/models/z-index.enum.mjs +0 -55
  73. package/esm2020/lib/schemas/table-config.schema.mjs +0 -472
  74. package/esm2020/lib/services/autosave.service.mjs +0 -92
  75. package/esm2020/lib/services/custom-validation-rules.util.mjs +0 -124
  76. package/esm2020/lib/services/json-schema-validator.service.mjs +0 -216
  77. package/esm2020/lib/services/row-validation.service.mjs +0 -42
  78. package/esm2020/lib/services/validation-logger.service.mjs +0 -177
  79. package/esm2020/lib/services/virtual-scroll.service.mjs +0 -52
  80. package/esm2020/lib/shared/shared-table-components.module.mjs +0 -35
  81. package/esm2020/lib/smart-table.module.mjs +0 -124
  82. package/esm2020/lib/strategies/default-editors.mjs +0 -433
  83. package/esm2020/lib/strategies/default-formatters.mjs +0 -238
  84. package/esm2020/lib/strategies/default-validators.mjs +0 -327
  85. package/esm2020/public-api.mjs +0 -146
  86. package/fesm2015/aquera-ngx-smart-table.mjs +0 -12347
  87. package/fesm2015/aquera-ngx-smart-table.mjs.map +0 -1
  88. package/fesm2020/aquera-ngx-smart-table.mjs.map +0 -1
  89. package/lib/builder/components/builder-preview/builder-preview.component.d.ts +0 -31
  90. package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +0 -53
  91. package/lib/builder/components/column-editor/column-editor.component.d.ts +0 -69
  92. package/lib/builder/components/column-list/column-list.component.d.ts +0 -65
  93. package/lib/builder/components/definition-builder/definition-builder.component.d.ts +0 -58
  94. package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +0 -32
  95. package/lib/builder/definition-builder.module.d.ts +0 -15
  96. package/lib/builder/models/builder-state.interface.d.ts +0 -93
  97. package/lib/builder/services/definition-builder.service.d.ts +0 -80
  98. package/lib/builder/services/definition-export.service.d.ts +0 -59
  99. package/lib/builder/services/definition-import.service.d.ts +0 -31
  100. package/lib/builder/services/sample-data-generator.service.d.ts +0 -41
  101. package/lib/builder/utils/config-validator.util.d.ts +0 -32
  102. package/lib/builder/utils/typescript-generator.util.d.ts +0 -29
  103. package/lib/editors/index.d.ts +0 -8
  104. package/lib/editors/nile-autocomplete-editor.d.ts +0 -102
  105. package/lib/editors/nile-calendar-editor.d.ts +0 -88
  106. package/lib/editors/nile-date-picker-editor.d.ts +0 -97
  107. package/lib/editors/nile-input-editor.d.ts +0 -67
  108. package/lib/editors/nile-select-editor.d.ts +0 -113
  109. package/lib/factories/column-config.factory.d.ts +0 -73
  110. package/lib/models/autosave-config.interface.d.ts +0 -23
  111. package/lib/models/base-column-config.class.d.ts +0 -115
  112. package/lib/models/cell-strategies.interface.d.ts +0 -188
  113. package/lib/models/cell-types.d.ts +0 -337
  114. package/lib/models/column-action.interface.d.ts +0 -86
  115. package/lib/models/column-config.interface.d.ts +0 -272
  116. package/lib/models/column-config.utils.d.ts +0 -37
  117. package/lib/models/row-action.interface.d.ts +0 -86
  118. package/lib/models/row-validator.interface.d.ts +0 -37
  119. package/lib/models/schema-validation.interface.d.ts +0 -42
  120. package/lib/models/sheet-action.interface.d.ts +0 -59
  121. package/lib/models/sheet-config.interface.d.ts +0 -41
  122. package/lib/models/table-config.interface.d.ts +0 -251
  123. package/lib/models/table-validator.interface.d.ts +0 -40
  124. package/lib/models/workbook-action.interface.d.ts +0 -95
  125. package/lib/models/workbook-config.interface.d.ts +0 -107
  126. package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +0 -9
  127. package/lib/renderer/components/st-cell/st-cell.component.d.ts +0 -69
  128. package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +0 -39
  129. package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +0 -139
  130. package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +0 -81
  131. package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +0 -44
  132. package/lib/renderer/components/st-header/st-header.component.d.ts +0 -93
  133. package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +0 -42
  134. package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +0 -67
  135. package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +0 -98
  136. package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +0 -58
  137. package/lib/renderer/components/st-table/st-table.component.d.ts +0 -380
  138. package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +0 -77
  139. package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +0 -275
  140. package/lib/renderer/directives/click-outside.directive.d.ts +0 -10
  141. package/lib/renderer/directives/st-column-resize.directive.d.ts +0 -44
  142. package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +0 -19
  143. package/lib/renderer/models/cell-state.interface.d.ts +0 -118
  144. package/lib/renderer/models/cell.class.d.ts +0 -174
  145. package/lib/renderer/models/row-validation-state.interface.d.ts +0 -27
  146. package/lib/renderer/models/sheet-state.class.d.ts +0 -67
  147. package/lib/renderer/models/sheet-state.interface.d.ts +0 -55
  148. package/lib/renderer/models/table-state.class.d.ts +0 -320
  149. package/lib/renderer/models/table-state.interface.d.ts +0 -18
  150. package/lib/renderer/models/table-types.d.ts +0 -228
  151. package/lib/renderer/models/table-validation-state.interface.d.ts +0 -34
  152. package/lib/renderer/models/workbook-state.class.d.ts +0 -117
  153. package/lib/renderer/models/workbook-state.interface.d.ts +0 -71
  154. package/lib/renderer/models/z-index.enum.d.ts +0 -44
  155. package/lib/schemas/table-config.schema.d.ts +0 -455
  156. package/lib/services/autosave.service.d.ts +0 -73
  157. package/lib/services/custom-validation-rules.util.d.ts +0 -12
  158. package/lib/services/json-schema-validator.service.d.ts +0 -49
  159. package/lib/services/row-validation.service.d.ts +0 -17
  160. package/lib/services/validation-logger.service.d.ts +0 -87
  161. package/lib/services/virtual-scroll.service.d.ts +0 -44
  162. package/lib/shared/shared-table-components.module.d.ts +0 -9
  163. package/lib/smart-table.module.d.ts +0 -26
  164. package/lib/strategies/default-editors.d.ts +0 -109
  165. package/lib/strategies/default-formatters.d.ts +0 -116
  166. package/lib/strategies/default-validators.d.ts +0 -113
  167. package/public-api.d.ts +0 -70
  168. package/src/lib/builder/README.md +0 -30
  169. package/src/lib/editors/README.md +0 -303
  170. package/src/lib/renderer/components/st-column-filter/README.md +0 -286
@@ -1,206 +0,0 @@
1
- /**
2
- * TypeScript code generator utility
3
- * Converts TableConfig to TypeScript code using ColumnConfigFactory
4
- */
5
- import { CellDataType } from '../../models/cell-types';
6
- /**
7
- * Generate TypeScript code from TableConfig
8
- * @param config Table configuration
9
- * @param options Generation options
10
- * @returns TypeScript code string
11
- */
12
- export function generateTypeScriptCode(config, options = {}) {
13
- const { variableName = 'tableConfig', includeComments = true, indent = ' ' } = options;
14
- const lines = [];
15
- // Add imports
16
- lines.push("import { ColumnConfigFactory, TableConfig } from 'ngx-smart-table';");
17
- lines.push('');
18
- // Add comment if requested
19
- if (includeComments) {
20
- lines.push('/**');
21
- lines.push(' * Table configuration generated by Smart Table Builder');
22
- lines.push(' * @generated');
23
- lines.push(' */');
24
- }
25
- // Start config object
26
- lines.push(`export const ${variableName}: TableConfig = {`);
27
- // Generate columns array
28
- lines.push(`${indent}columns: [`);
29
- config.columns.forEach((column, index) => {
30
- const columnCode = generateColumnCode(column, indent + indent, includeComments);
31
- const isLast = index === config.columns.length - 1;
32
- lines.push(`${indent}${indent}${columnCode}${isLast ? '' : ','}`);
33
- });
34
- lines.push(`${indent}],`);
35
- // Generate pagination config
36
- if (config.pagination) {
37
- lines.push(`${indent}pagination: {`);
38
- if (config.pagination.enabled !== undefined) {
39
- lines.push(`${indent}${indent}enabled: ${config.pagination.enabled},`);
40
- }
41
- if (config.pagination.pageSize !== undefined) {
42
- lines.push(`${indent}${indent}pageSize: ${config.pagination.pageSize},`);
43
- }
44
- if (config.pagination.pageSizeOptions) {
45
- lines.push(`${indent}${indent}pageSizeOptions: [${config.pagination.pageSizeOptions.join(', ')}],`);
46
- }
47
- if (config.pagination.showTopControls !== undefined) {
48
- lines.push(`${indent}${indent}showTopControls: ${config.pagination.showTopControls},`);
49
- }
50
- if (config.pagination.showBottomControls !== undefined) {
51
- lines.push(`${indent}${indent}showBottomControls: ${config.pagination.showBottomControls},`);
52
- }
53
- if (config.pagination.totalItems !== undefined) {
54
- lines.push(`${indent}${indent}totalItems: ${config.pagination.totalItems},`);
55
- }
56
- if (config.pagination.variant !== undefined) {
57
- lines.push(`${indent}${indent}variant: '${config.pagination.variant}',`);
58
- }
59
- lines.push(`${indent}},`);
60
- }
61
- // Generate sorting config
62
- if (config.sorting) {
63
- lines.push(`${indent}sorting: {`);
64
- if (config.sorting.enabled !== undefined) {
65
- lines.push(`${indent}${indent}enabled: ${config.sorting.enabled},`);
66
- }
67
- if (config.sorting.multiColumn !== undefined) {
68
- lines.push(`${indent}${indent}multiColumn: ${config.sorting.multiColumn},`);
69
- }
70
- if (config.sorting.mode) {
71
- lines.push(`${indent}${indent}mode: '${config.sorting.mode}',`);
72
- }
73
- lines.push(`${indent}},`);
74
- }
75
- // Generate filtering config
76
- if (config.filtering) {
77
- lines.push(`${indent}filtering: {`);
78
- if (config.filtering.enabled !== undefined) {
79
- lines.push(`${indent}${indent}enabled: ${config.filtering.enabled},`);
80
- }
81
- if (config.filtering.mode) {
82
- lines.push(`${indent}${indent}mode: '${config.filtering.mode}',`);
83
- }
84
- lines.push(`${indent}},`);
85
- }
86
- // Generate display config
87
- if (config.display) {
88
- lines.push(`${indent}display: {`);
89
- if (config.display.stickyHeader !== undefined) {
90
- lines.push(`${indent}${indent}stickyHeader: ${config.display.stickyHeader},`);
91
- }
92
- if (config.display.maxHeight !== undefined) {
93
- lines.push(`${indent}${indent}maxHeight: ${config.display.maxHeight},`);
94
- }
95
- lines.push(`${indent}},`);
96
- }
97
- // Close config object
98
- lines.push('};');
99
- return lines.join('\n');
100
- }
101
- /**
102
- * Generate TypeScript code for a single column
103
- * @param column Column configuration
104
- * @param indent Indentation string
105
- * @param includeComments Whether to include comments
106
- * @returns TypeScript code string
107
- */
108
- function generateColumnCode(column, indent, includeComments) {
109
- const factoryMethod = getFactoryMethod(column);
110
- const options = generateColumnOptions(column, indent);
111
- if (options) {
112
- return `ColumnConfigFactory.${factoryMethod}('${column.key}', ${options})`;
113
- }
114
- else {
115
- return `ColumnConfigFactory.${factoryMethod}('${column.key}')`;
116
- }
117
- }
118
- /**
119
- * Get the appropriate factory method name for a column
120
- * @param column Column configuration
121
- * @returns Factory method name
122
- */
123
- function getFactoryMethod(column) {
124
- // Check if readonly
125
- if (column.editable === false) {
126
- return 'readonly';
127
- }
128
- // Check dataType
129
- switch (column.dataType) {
130
- case CellDataType.STRING:
131
- // Check if email validator exists
132
- if (column.validator && column.validator.toString().includes('email')) {
133
- return 'email';
134
- }
135
- return 'text';
136
- case CellDataType.NUMBER:
137
- // Check if currency formatter exists
138
- if (column.formatter && column.formatter.toString().includes('Currency')) {
139
- return 'currency';
140
- }
141
- return 'number';
142
- case CellDataType.DATE:
143
- return 'date';
144
- case CellDataType.BOOLEAN:
145
- return 'boolean';
146
- default:
147
- return 'custom';
148
- }
149
- }
150
- /**
151
- * Generate options object for column factory method
152
- * @param column Column configuration
153
- * @param indent Indentation string
154
- * @returns Options object string or null
155
- */
156
- function generateColumnOptions(column, indent) {
157
- const options = [];
158
- if (column.header && column.header !== column.key) {
159
- options.push(`header: '${escapeString(column.header)}'`);
160
- }
161
- if (column.width !== undefined) {
162
- if (typeof column.width === 'number') {
163
- options.push(`width: ${column.width}`);
164
- }
165
- else {
166
- options.push(`width: '${column.width}'`);
167
- }
168
- }
169
- if (column.minWidth !== undefined) {
170
- options.push(`minWidth: ${column.minWidth}`);
171
- }
172
- if (column.maxWidth !== undefined) {
173
- options.push(`maxWidth: ${column.maxWidth}`);
174
- }
175
- if (column.sticky) {
176
- options.push(`sticky: '${column.sticky}'`);
177
- }
178
- if (column.editable !== undefined) {
179
- options.push(`editable: ${column.editable}`);
180
- }
181
- if (column.sortable !== undefined) {
182
- options.push(`sortable: ${column.sortable}`);
183
- }
184
- if (column.filterable !== undefined) {
185
- options.push(`filterable: ${column.filterable}`);
186
- }
187
- if (column.resizable !== undefined) {
188
- options.push(`resizable: ${column.resizable}`);
189
- }
190
- // For custom columns, we'd need to include more complex options
191
- // This is a simplified version - full implementation would handle
192
- // formatters, validators, editors, etc.
193
- if (options.length === 0) {
194
- return null;
195
- }
196
- return `{\n${indent}${indent}${options.join(`,\n${indent}${indent}`)}\n${indent}}`;
197
- }
198
- /**
199
- * Escape string for use in TypeScript code
200
- * @param str String to escape
201
- * @returns Escaped string
202
- */
203
- function escapeString(str) {
204
- return str.replace(/'/g, "\\'").replace(/\n/g, '\\n');
205
- }
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1nZW5lcmF0b3IudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvYnVpbGRlci91dGlscy90eXBlc2NyaXB0LWdlbmVyYXRvci51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXNCdkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQW1CLEVBQ25CLFVBQXNDLEVBQUU7SUFFeEMsTUFBTSxFQUNKLFlBQVksR0FBRyxhQUFhLEVBQzVCLGVBQWUsR0FBRyxJQUFJLEVBQ3RCLE1BQU0sR0FBRyxJQUFJLEVBQ2QsR0FBRyxPQUFPLENBQUM7SUFFWixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFFM0IsY0FBYztJQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMscUVBQXFFLENBQUMsQ0FBQztJQUNsRixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWYsMkJBQTJCO0lBQzNCLElBQUksZUFBZSxFQUFFO1FBQ25CLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQ3RFLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNuQjtJQUVELHNCQUFzQjtJQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixZQUFZLG1CQUFtQixDQUFDLENBQUM7SUFFNUQseUJBQXlCO0lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxD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LE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUM7QUFDckYsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQy9CLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlU2NyaXB0IGNvZGUgZ2VuZXJhdG9yIHV0aWxpdHlcbiAqIENvbnZlcnRzIFRhYmxlQ29uZmlnIHRvIFR5cGVTY3JpcHQgY29kZSB1c2luZyBDb2x1bW5Db25maWdGYWN0b3J5XG4gKi9cblxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5Db25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29sdW1uLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NlbGwtdHlwZXMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIFR5cGVTY3JpcHQgY29kZSBnZW5lcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNjcmlwdEdlbmVyYXRvck9wdGlvbnMge1xuICAvKipcbiAgICogVmFyaWFibGUgbmFtZSBmb3IgdGhlIGV4cG9ydGVkIGNvbmZpZ1xuICAgKi9cbiAgdmFyaWFibGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNvbW1lbnRzIGluIGdlbmVyYXRlZCBjb2RlXG4gICAqL1xuICBpbmNsdWRlQ29tbWVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRlbnRhdGlvbiBzdHJpbmcgKGRlZmF1bHQ6IDIgc3BhY2VzKVxuICAgKi9cbiAgaW5kZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIFR5cGVTY3JpcHQgY29kZSBmcm9tIFRhYmxlQ29uZmlnXG4gKiBAcGFyYW0gY29uZmlnIFRhYmxlIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zIEdlbmVyYXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVHlwZVNjcmlwdCBjb2RlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlU2NyaXB0Q29kZShcbiAgY29uZmlnOiBUYWJsZUNvbmZpZyxcbiAgb3B0aW9uczogVHlwZVNjcmlwdEdlbmVyYXRvck9wdGlvbnMgPSB7fVxuKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIHZhcmlhYmxlTmFtZSA9ICd0YWJsZUNvbmZpZycsXG4gICAgaW5jbHVkZUNvbW1lbnRzID0gdHJ1ZSxcbiAgICBpbmRlbnQgPSAnICAnXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEFkZCBpbXBvcnRzXG4gIGxpbmVzLnB1c2goXCJpbXBvcnQgeyBDb2x1bW5Db25maWdGYWN0b3J5LCBUYWJsZUNvbmZpZyB9IGZyb20gJ25neC1zbWFydC10YWJsZSc7XCIpO1xuICBsaW5lcy5wdXNoKCcnKTtcblxuICAvLyBBZGQgY29tbWVudCBpZiByZXF1ZXN0ZWRcbiAgaWYgKGluY2x1ZGVDb21tZW50cykge1xuICAgIGxpbmVzLnB1c2goJy8qKicpO1xuICAgIGxpbmVzLnB1c2goJyAqIFRhYmxlIGNvbmZpZ3VyYXRpb24gZ2VuZXJhdGVkIGJ5IFNtYXJ0IFRhYmxlIEJ1aWxkZXInKTtcbiAgICBsaW5lcy5wdXNoKCcgKiBAZ2VuZXJhdGVkJyk7XG4gICAgbGluZXMucHVzaCgnICovJyk7XG4gIH1cblxuICAvLyBTdGFydCBjb25maWcgb2JqZWN0XG4gIGxpbmVzLnB1c2goYGV4cG9ydCBjb25zdCAke3ZhcmlhYmxlTmFtZX06IFRhYmxlQ29uZmlnID0ge2ApO1xuXG4gIC8vIEdlbmVyYXRlIGNvbHVtbnMgYXJyYXlcbiAgbGluZXMucHVzaChgJHtpbmRlbnR9Y29sdW1uczogW2ApO1xuICBjb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY29sdW1uQ29kZSA9IGdlbmVyYXRlQ29sdW1uQ29kZShjb2x1bW4sIGluZGVudCArIGluZGVudCwgaW5jbHVkZUNvbW1lbnRzKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA9PT0gY29uZmlnLmNvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH0ke2NvbHVtbkNvZGV9JHtpc0xhc3QgPyAnJyA6ICcsJ31gKTtcbiAgfSk7XG4gIGxpbmVzLnB1c2goYCR7aW5kZW50fV0sYCk7XG5cbiAgLy8gR2VuZXJhdGUgcGFnaW5hdGlvbiBjb25maWdcbiAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uKSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9cGFnaW5hdGlvbjoge2ApO1xuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fWVuYWJsZWQ6ICR7Y29uZmlnLnBhZ2luYXRpb24uZW5hYmxlZH0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1wYWdlU2l6ZTogJHtjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZX0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fXBhZ2VTaXplT3B0aW9uczogWyR7Y29uZmlnLnBhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zLmpvaW4oJywgJyl9XSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnNob3dUb3BDb250cm9scyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1zaG93VG9wQ29udHJvbHM6ICR7Y29uZmlnLnBhZ2luYXRpb24uc2hvd1RvcENvbnRyb2xzfSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnNob3dCb3R0b21Db250cm9scyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1zaG93Qm90dG9tQ29udHJvbHM6ICR7Y29uZmlnLnBhZ2luYXRpb24uc2hvd0JvdHRvbUNvbnRyb2xzfSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnRvdGFsSXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9dG90YWxJdGVtczogJHtjb25maWcucGFnaW5hdGlvbi50b3RhbEl0ZW1zfSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnZhcmlhbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9dmFyaWFudDogJyR7Y29uZmlnLnBhZ2luYXRpb24udmFyaWFudH0nLGApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKGAke2luZGVudH19LGApO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgc29ydGluZyBjb25maWdcbiAgaWYgKGNvbmZpZy5zb3J0aW5nKSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9c29ydGluZzoge2ApO1xuICAgIGlmIChjb25maWcuc29ydGluZy5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fWVuYWJsZWQ6ICR7Y29uZmlnLnNvcnRpbmcuZW5hYmxlZH0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuc29ydGluZy5tdWx0aUNvbHVtbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1tdWx0aUNvbHVtbjogJHtjb25maWcuc29ydGluZy5tdWx0aUNvbHVtbn0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuc29ydGluZy5tb2RlKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1tb2RlOiAnJHtjb25maWcuc29ydGluZy5tb2RlfScsYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fX0sYCk7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBmaWx0ZXJpbmcgY29uZmlnXG4gIGlmIChjb25maWcuZmlsdGVyaW5nKSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9ZmlsdGVyaW5nOiB7YCk7XG4gICAgaWYgKGNvbmZpZy5maWx0ZXJpbmcuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1lbmFibGVkOiAke2NvbmZpZy5maWx0ZXJpbmcuZW5hYmxlZH0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZmlsdGVyaW5nLm1vZGUpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fW1vZGU6ICcke2NvbmZpZy5maWx0ZXJpbmcubW9kZX0nLGApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKGAke2luZGVudH19LGApO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgZGlzcGxheSBjb25maWdcbiAgaWYgKGNvbmZpZy5kaXNwbGF5KSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9ZGlzcGxheToge2ApO1xuICAgIGlmIChjb25maWcuZGlzcGxheS5zdGlja3lIZWFkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9c3RpY2t5SGVhZGVyOiAke2NvbmZpZy5kaXNwbGF5LnN0aWNreUhlYWRlcn0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZGlzcGxheS5tYXhIZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9bWF4SGVpZ2h0OiAke2NvbmZpZy5kaXNwbGF5Lm1heEhlaWdodH0sYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fX0sYCk7XG4gIH1cblxuICAvLyBDbG9zZSBjb25maWcgb2JqZWN0XG4gIGxpbmVzLnB1c2goJ307Jyk7XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIFR5cGVTY3JpcHQgY29kZSBmb3IgYSBzaW5nbGUgY29sdW1uXG4gKiBAcGFyYW0gY29sdW1uIENvbHVtbiBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gaW5kZW50IEluZGVudGF0aW9uIHN0cmluZ1xuICogQHBhcmFtIGluY2x1ZGVDb21tZW50cyBXaGV0aGVyIHRvIGluY2x1ZGUgY29tbWVudHNcbiAqIEByZXR1cm5zIFR5cGVTY3JpcHQgY29kZSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVDb2x1bW5Db2RlKFxuICBjb2x1bW46IENvbHVtbkNvbmZpZyxcbiAgaW5kZW50OiBzdHJpbmcsXG4gIGluY2x1ZGVDb21tZW50czogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3QgZmFjdG9yeU1ldGhvZCA9IGdldEZhY3RvcnlNZXRob2QoY29sdW1uKTtcbiAgY29uc3Qgb3B0aW9ucyA9IGdlbmVyYXRlQ29sdW1uT3B0aW9ucyhjb2x1bW4sIGluZGVudCk7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYENvbHVtbkNvbmZpZ0ZhY3RvcnkuJHtmYWN0b3J5TWV0aG9kfSgnJHtjb2x1bW4ua2V5fScsICR7b3B0aW9uc30pYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYENvbHVtbkNvbmZpZ0ZhY3RvcnkuJHtmYWN0b3J5TWV0aG9kfSgnJHtjb2x1bW4ua2V5fScpYDtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgYXBwcm9wcmlhdGUgZmFjdG9yeSBtZXRob2QgbmFtZSBmb3IgYSBjb2x1bW5cbiAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIEZhY3RvcnkgbWV0aG9kIG5hbWVcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjdG9yeU1ldGhvZChjb2x1bW46IENvbHVtbkNvbmZpZyk6IHN0cmluZyB7XG4gIC8vIENoZWNrIGlmIHJlYWRvbmx5XG4gIGlmIChjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICdyZWFkb25seSc7XG4gIH1cblxuICAvLyBDaGVjayBkYXRhVHlwZVxuICBzd2l0Y2ggKGNvbHVtbi5kYXRhVHlwZSkge1xuICAgIGNhc2UgQ2VsbERhdGFUeXBlLlNUUklORzpcbiAgICAgIC8vIENoZWNrIGlmIGVtYWlsIHZhbGlkYXRvciBleGlzdHNcbiAgICAgIGlmIChjb2x1bW4udmFsaWRhdG9yICYmIGNvbHVtbi52YWxpZGF0b3IudG9TdHJpbmcoKS5pbmNsdWRlcygnZW1haWwnKSkge1xuICAgICAgICByZXR1cm4gJ2VtYWlsJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAndGV4dCc7XG4gICAgY2FzZSBDZWxsRGF0YVR5cGUuTlVNQkVSOlxuICAgICAgLy8gQ2hlY2sgaWYgY3VycmVuY3kgZm9ybWF0dGVyIGV4aXN0c1xuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLmZvcm1hdHRlci50b1N0cmluZygpLmluY2x1ZGVzKCdDdXJyZW5jeScpKSB7XG4gICAgICAgIHJldHVybiAnY3VycmVuY3knO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIGNhc2UgQ2VsbERhdGFUeXBlLkRBVEU6XG4gICAgICByZXR1cm4gJ2RhdGUnO1xuICAgIGNhc2UgQ2VsbERhdGFUeXBlLkJPT0xFQU46XG4gICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ2N1c3RvbSc7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBvcHRpb25zIG9iamVjdCBmb3IgY29sdW1uIGZhY3RvcnkgbWV0aG9kXG4gKiBAcGFyYW0gY29sdW1uIENvbHVtbiBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gaW5kZW50IEluZGVudGF0aW9uIHN0cmluZ1xuICogQHJldHVybnMgT3B0aW9ucyBvYmplY3Qgc3RyaW5nIG9yIG51bGxcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVDb2x1bW5PcHRpb25zKGNvbHVtbjogQ29sdW1uQ29uZmlnLCBpbmRlbnQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChjb2x1bW4uaGVhZGVyICYmIGNvbHVtbi5oZWFkZXIgIT09IGNvbHVtbi5rZXkpIHtcbiAgICBvcHRpb25zLnB1c2goYGhlYWRlcjogJyR7ZXNjYXBlU3RyaW5nKGNvbHVtbi5oZWFkZXIpfSdgKTtcbiAgfVxuXG4gIGlmIChjb2x1bW4ud2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgY29sdW1uLndpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgb3B0aW9ucy5wdXNoKGB3aWR0aDogJHtjb2x1bW4ud2lkdGh9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucHVzaChgd2lkdGg6ICcke2NvbHVtbi53aWR0aH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbHVtbi5taW5XaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wdXNoKGBtaW5XaWR0aDogJHtjb2x1bW4ubWluV2lkdGh9YCk7XG4gIH1cblxuICBpZiAoY29sdW1uLm1heFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zLnB1c2goYG1heFdpZHRoOiAke2NvbHVtbi5tYXhXaWR0aH1gKTtcbiAgfVxuXG4gIGlmIChjb2x1bW4uc3RpY2t5KSB7XG4gICAgb3B0aW9ucy5wdXNoKGBzdGlja3k6ICcke2NvbHVtbi5zdGlja3l9J2ApO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5lZGl0YWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wdXNoKGBlZGl0YWJsZTogJHtjb2x1bW4uZWRpdGFibGV9YCk7XG4gIH1cblxuICBpZiAoY29sdW1uLnNvcnRhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zLnB1c2goYHNvcnRhYmxlOiAke2NvbHVtbi5zb3J0YWJsZX1gKTtcbiAgfVxuXG4gIGlmIChjb2x1bW4uZmlsdGVyYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wdXNoKGBmaWx0ZXJhYmxlOiAke2NvbHVtbi5maWx0ZXJhYmxlfWApO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5yZXNpemFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMucHVzaChgcmVzaXphYmxlOiAke2NvbHVtbi5yZXNpemFibGV9YCk7XG4gIH1cblxuICAvLyBGb3IgY3VzdG9tIGNvbHVtbnMsIHdlJ2QgbmVlZCB0byBpbmNsdWRlIG1vcmUgY29tcGxleCBvcHRpb25zXG4gIC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gLSBmdWxsIGltcGxlbWVudGF0aW9uIHdvdWxkIGhhbmRsZVxuICAvLyBmb3JtYXR0ZXJzLCB2YWxpZGF0b3JzLCBlZGl0b3JzLCBldGMuXG5cbiAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYHtcXG4ke2luZGVudH0ke2luZGVudH0ke29wdGlvbnMuam9pbihgLFxcbiR7aW5kZW50fSR7aW5kZW50fWApfVxcbiR7aW5kZW50fX1gO1xufVxuXG4vKipcbiAqIEVzY2FwZSBzdHJpbmcgZm9yIHVzZSBpbiBUeXBlU2NyaXB0IGNvZGVcbiAqIEBwYXJhbSBzdHIgU3RyaW5nIHRvIGVzY2FwZVxuICogQHJldHVybnMgRXNjYXBlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIikucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xufVxuXG4iXX0=
@@ -1,9 +0,0 @@
1
- /**
2
- * Custom cell editors for ngx-smart-table
3
- */
4
- export { NileInputEditor } from './nile-input-editor';
5
- export { NileSelectEditor } from './nile-select-editor';
6
- export { NileAutoCompleteEditor } from './nile-autocomplete-editor';
7
- export { NileCalendarEditor } from './nile-calendar-editor';
8
- export { NileDatePickerEditor } from './nile-date-picker-editor';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL2VkaXRvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLHFCQUFxQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsc0JBQXNCLEVBQXFELE1BQU0sNEJBQTRCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGtCQUFrQixFQUFnRCxNQUFNLHdCQUF3QixDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBMEMsTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3VzdG9tIGNlbGwgZWRpdG9ycyBmb3Igbmd4LXNtYXJ0LXRhYmxlXG4gKi9cblxuZXhwb3J0IHsgTmlsZUlucHV0RWRpdG9yLCBOaWxlSW5wdXRFZGl0b3JPcHRpb25zIH0gZnJvbSAnLi9uaWxlLWlucHV0LWVkaXRvcic7XG5leHBvcnQgeyBOaWxlU2VsZWN0RWRpdG9yLCBOaWxlU2VsZWN0RWRpdG9yT3B0aW9ucywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9uaWxlLXNlbGVjdC1lZGl0b3InO1xuZXhwb3J0IHsgTmlsZUF1dG9Db21wbGV0ZUVkaXRvciwgTmlsZUF1dG9Db21wbGV0ZUVkaXRvck9wdGlvbnMsIEF1dG9Db21wbGV0ZU9wdGlvbiB9IGZyb20gJy4vbmlsZS1hdXRvY29tcGxldGUtZWRpdG9yJztcbmV4cG9ydCB7IE5pbGVDYWxlbmRhckVkaXRvciwgTmlsZUNhbGVuZGFyRWRpdG9yT3B0aW9ucywgQWxsb3dlZERhdGVzUmFuZ2UgfSBmcm9tICcuL25pbGUtY2FsZW5kYXItZWRpdG9yJztcbmV4cG9ydCB7IE5pbGVEYXRlUGlja2VyRWRpdG9yLCBOaWxlRGF0ZVBpY2tlckVkaXRvck9wdGlvbnMsIERhdGVSYW5nZSB9IGZyb20gJy4vbmlsZS1kYXRlLXBpY2tlci1lZGl0b3InO1xuIl19
@@ -1,228 +0,0 @@
1
- /**
2
- * Custom editor using NileAutoComplete from @aquera/nile-elements
3
- * Provides real-time suggestions as users type in table cells
4
- */
5
- /**
6
- * Custom editor that uses NileAutoComplete component
7
- * @template T The value type (string by default)
8
- */
9
- export class NileAutoCompleteEditor {
10
- constructor(options) {
11
- this.options = options;
12
- this.eventListeners = [];
13
- if (!options.options || options.options.length === 0) {
14
- console.warn('NileAutoCompleteEditor requires options array to be provided');
15
- }
16
- }
17
- edit(context) {
18
- if (!context.container) {
19
- console.warn('NileAutoCompleteEditor requires a container element');
20
- return;
21
- }
22
- // Create NileAutoComplete custom element using document.createElement
23
- this.autocomplete = document.createElement('nile-autocomplete');
24
- this.autocomplete.value = String(context.value ?? '');
25
- this.autocomplete.className = 'st-cell-editor st-nile-autocomplete-editor';
26
- // Apply inline styles for proper cell fitting
27
- this.autocomplete.style.width = 'inherit';
28
- this.autocomplete.style.height = 'inherit';
29
- this.autocomplete.style.boxSizing = 'border-box';
30
- // Apply all configuration options
31
- this.applyOptions();
32
- // Set allMenuItems property for autocomplete suggestions
33
- this.setMenuItems();
34
- // Set up event listeners
35
- this.setupEventListeners(context);
36
- // Clear container and append autocomplete
37
- context.container.innerHTML = '';
38
- context.container.appendChild(this.autocomplete);
39
- // Auto focus
40
- if (this.options?.autoFocus !== false) {
41
- setTimeout(() => {
42
- this.autocomplete?.focus();
43
- }, 0);
44
- }
45
- }
46
- /**
47
- * Set allMenuItems property for autocomplete suggestions
48
- * NileAutoComplete requires allMenuItems to be set as a property, not child elements
49
- */
50
- setMenuItems() {
51
- if (!this.autocomplete)
52
- return;
53
- const options = this.options.options || [];
54
- // Convert options to string array for allMenuItems
55
- const menuItems = options.map(opt => {
56
- if (typeof opt === 'string') {
57
- return opt;
58
- }
59
- else {
60
- // For AutoCompleteOption objects, use the label for display
61
- return opt.label;
62
- }
63
- });
64
- // Set the allMenuItems property directly on the element
65
- this.autocomplete.allMenuItems = menuItems;
66
- }
67
- /**
68
- * Apply all configuration options to the NileAutoComplete element
69
- */
70
- applyOptions() {
71
- if (!this.autocomplete)
72
- return;
73
- // Basic properties
74
- if (this.options?.placeholder) {
75
- this.autocomplete.placeholder = this.options.placeholder;
76
- }
77
- if (this.options?.disabled) {
78
- this.autocomplete.disabled = this.options.disabled;
79
- }
80
- // Note: Some properties may not be available on NileAutoComplete
81
- // Setting via attributes as fallback
82
- if (this.options?.helpText) {
83
- this.autocomplete.setAttribute('help-text', this.options.helpText);
84
- }
85
- // Size (if supported by NileAutoComplete)
86
- if (this.options?.size) {
87
- this.autocomplete.setAttribute('size', this.options.size);
88
- }
89
- // Behavior options - using attributes for properties that may not exist
90
- if (this.options?.clearable) {
91
- this.autocomplete.setAttribute('clearable', String(this.options.clearable));
92
- }
93
- if (this.options?.required) {
94
- this.autocomplete.setAttribute('required', String(this.options.required));
95
- }
96
- // Styling options
97
- if (this.options?.filled !== undefined) {
98
- this.autocomplete.setAttribute('filled', String(this.options.filled));
99
- }
100
- if (this.options?.pill) {
101
- this.autocomplete.setAttribute('pill', String(this.options.pill));
102
- }
103
- // Visual states - using attributes for properties that may not exist
104
- if (this.options?.warning) {
105
- this.autocomplete.setAttribute('warning', String(this.options.warning));
106
- }
107
- if (this.options?.error) {
108
- this.autocomplete.setAttribute('error', String(this.options.error));
109
- }
110
- if (this.options?.success) {
111
- this.autocomplete.setAttribute('success', String(this.options.success));
112
- }
113
- if (this.options?.errorMessage) {
114
- this.autocomplete.setAttribute('error-message', this.options.errorMessage);
115
- }
116
- // Autocomplete specific options
117
- if (this.options?.minSearchLength !== undefined) {
118
- this.autocomplete.setAttribute('min-search-length', String(this.options.minSearchLength));
119
- }
120
- if (this.options?.maxSuggestions !== undefined) {
121
- this.autocomplete.setAttribute('max-suggestions', String(this.options.maxSuggestions));
122
- }
123
- if (this.options?.caseSensitive !== undefined) {
124
- this.autocomplete.setAttribute('case-sensitive', String(this.options.caseSensitive));
125
- }
126
- // Advanced options
127
- if (this.options?.hoist) {
128
- this.autocomplete.setAttribute('hoist', String(this.options.hoist));
129
- }
130
- if (this.options?.placement) {
131
- this.autocomplete.setAttribute('placement', this.options.placement);
132
- }
133
- // Set portal attribute for proper dropdown rendering
134
- this.autocomplete.setAttribute('portal', 'true');
135
- }
136
- /**
137
- * Set up all event listeners with proper cleanup tracking
138
- */
139
- setupEventListeners(context) {
140
- if (!this.autocomplete)
141
- return;
142
- const validateOnSave = this.options?.validateOnSave !== false;
143
- // Handle keyboard events (keydown is not replaced by custom events)
144
- const keydownHandler = (e) => {
145
- const keyEvent = e;
146
- if (keyEvent.key === 'Enter') {
147
- keyEvent.preventDefault();
148
- keyEvent.stopPropagation();
149
- this.saveValue(context, validateOnSave);
150
- }
151
- else if (keyEvent.key === 'Escape') {
152
- keyEvent.preventDefault();
153
- keyEvent.stopPropagation();
154
- context.onCancel();
155
- }
156
- else if (keyEvent.key === 'Tab') {
157
- keyEvent.preventDefault();
158
- keyEvent.stopPropagation();
159
- this.saveValue(context, validateOnSave);
160
- }
161
- };
162
- this.autocomplete.addEventListener('keydown', keydownHandler);
163
- this.eventListeners.push({ event: 'keydown', handler: keydownHandler });
164
- // Use nile-complete custom event for when user selects an autocomplete suggestion
165
- const completeHandler = (e) => {
166
- const customEvent = e;
167
- // Save the selected value from autocomplete
168
- if (customEvent.detail && customEvent.detail.value !== undefined) {
169
- context.onSave(this.parseValue(customEvent.detail.value));
170
- }
171
- };
172
- this.autocomplete.addEventListener('nile-complete', completeHandler);
173
- this.eventListeners.push({ event: 'nile-complete', handler: completeHandler });
174
- // Use native blur event (NileAutoComplete doesn't have nile-blur)
175
- const blurHandler = (e) => {
176
- const customEvent = e;
177
- // Get current value directly from the component
178
- const currentValue = customEvent.detail?.value ?? '';
179
- // Save on blur - TableState coordination ensures only one cell is editing at a time
180
- context.onSave(this.parseValue(currentValue));
181
- };
182
- this.autocomplete.addEventListener('blur', blurHandler);
183
- this.eventListeners.push({ event: 'blur', handler: blurHandler });
184
- // Use native input event for real-time value updates (NileAutoComplete doesn't have nile-input)
185
- const inputHandler = () => {
186
- const currentValue = this.autocomplete?.value ?? '';
187
- context.onChange(this.parseValue(currentValue));
188
- };
189
- this.autocomplete.addEventListener('input', inputHandler);
190
- this.eventListeners.push({ event: 'input', handler: inputHandler });
191
- }
192
- /**
193
- * Save value with optional validation
194
- */
195
- saveValue(context, validate) {
196
- if (!this.autocomplete)
197
- return;
198
- // Note: NileAutoComplete may not have validation methods
199
- // Validation should be handled by the validator strategy instead
200
- context.onSave(this.getCurrentValue());
201
- }
202
- /**
203
- * Parse value to appropriate type
204
- */
205
- parseValue(value) {
206
- return value;
207
- }
208
- destroy() {
209
- // Remove all event listeners
210
- if (this.autocomplete) {
211
- this.eventListeners.forEach(({ event, handler }) => {
212
- this.autocomplete?.removeEventListener(event, handler);
213
- });
214
- this.eventListeners = [];
215
- this.autocomplete.remove();
216
- this.autocomplete = undefined;
217
- }
218
- }
219
- focus() {
220
- this.autocomplete?.focus();
221
- }
222
- getCurrentValue() {
223
- if (!this.autocomplete)
224
- return '';
225
- return (this.autocomplete.value ?? '');
226
- }
227
- }
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1hdXRvY29tcGxldGUtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtYXV0b2NvbXBsZXRlLWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFtRkg7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUlqQyxZQUE2QixPQUFzQztRQUF0QyxZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUYzRCxtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFHNUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztTQUM5RTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsT0FBNkI7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3BFLE9BQU87U0FDUjtRQUVELHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyw0Q0FBNEMsQ0FBQztRQUUzRSw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZ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SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVBdXRvQ29tcGxldGUgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFByb3ZpZGVzIHJlYWwtdGltZSBzdWdnZXN0aW9ucyBhcyB1c2VycyB0eXBlIGluIHRhYmxlIGNlbGxzXG4gKi9cblxuaW1wb3J0IHsgQ2VsbEVkaXRvciwgQ2VsbEVkaXRvckNvbnRleHQgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1zdHJhdGVnaWVzLmludGVyZmFjZSc7XG5cbi8qKlxuICogQXV0b2NvbXBsZXRlIG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0NvbXBsZXRlT3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGludGVyZmFjZSBmb3IgTmlsZUF1dG9Db21wbGV0ZUVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbGVBdXRvQ29tcGxldGVFZGl0b3JPcHRpb25zIHtcbiAgLy8gT3B0aW9ucyBjb25maWd1cmF0aW9uIChSRVFVSVJFRClcbiAgLyoqIEFycmF5IG9mIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9ucyAtIHN1cHBvcnRzIGJvdGggc2ltcGxlIHN0cmluZyBhcnJheSBvciBkZXRhaWxlZCBBdXRvQ29tcGxldGVPcHRpb24gb2JqZWN0cyAqL1xuICBvcHRpb25zOiBBdXRvQ29tcGxldGVPcHRpb25bXSB8IHN0cmluZ1tdO1xuICBcbiAgLy8gQmFzaWMgcHJvcGVydGllc1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dCB0byBzaG93IGFzIGEgaGludCB3aGVuIHRoZSBzZWFyY2ggaXMgZW1wdHkgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlIHRoZSBhdXRvY29tcGxldGUgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBIZWxwIHRleHQgdG8gZGlzcGxheSBiZWxvdyB0aGUgY29udHJvbCAqL1xuICBoZWxwVGV4dD86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIGF1dG9jb21wbGV0ZSBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICBcbiAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAvKiogQWRkcyBjbGVhciBidXR0b24gd2hlbiB2YWx1ZSBpcyBub3QgZW1wdHkgKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcbiAgLyoqIE1ha2UgdGhlIGF1dG9jb21wbGV0ZSByZXF1aXJlZCAqL1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKiBBdXRvLWZvY3VzIHRoZSBpbnB1dCB3aGVuIGVkaXRvciBvcGVucyAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICAvKiogU2VsZWN0IGFsbCB0ZXh0IHdoZW4gZm9jdXNlZCAqL1xuICBzZWxlY3RPbkZvY3VzPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZpc3VhbCBzdGF0ZXNcbiAgLyoqIFdhcm5pbmcgc3RhdGUgc3R5bGluZyAqL1xuICB3YXJuaW5nPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIHN0YXRlIHN0eWxpbmcgKi9cbiAgZXJyb3I/OiBib29sZWFuO1xuICAvKiogU3VjY2VzcyBzdGF0ZSBzdHlsaW5nICovXG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICAvKiogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5ICovXG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgXG4gIC8vIEF1dG9jb21wbGV0ZSBzcGVjaWZpYyBvcHRpb25zXG4gIC8qKiBNaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSBzaG93aW5nIHN1Z2dlc3Rpb25zICovXG4gIG1pblNlYXJjaExlbmd0aD86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIHN1Z2dlc3Rpb25zIHRvIHNob3cgKi9cbiAgbWF4U3VnZ2VzdGlvbnM/OiBudW1iZXI7XG4gIC8qKiBDYXNlLXNlbnNpdGl2ZSBtYXRjaGluZyAqL1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgLyoqIEZpbHRlciBtb2RlIGZvciBtYXRjaGluZyBzdWdnZXN0aW9ucyAqL1xuICBmaWx0ZXJNb2RlPzogJ3N0YXJ0c1dpdGgnIHwgJ2NvbnRhaW5zJyB8ICdjdXN0b20nO1xuICAvKiogQ3VzdG9tIGZpbHRlciBmdW5jdGlvbiBmb3IgbWF0Y2hpbmcgKi9cbiAgY3VzdG9tRmlsdGVyPzogKGlucHV0OiBzdHJpbmcsIG9wdGlvbjogQXV0b0NvbXBsZXRlT3B0aW9uKSA9PiBib29sZWFuO1xuICBcbiAgLy8gU3R5bGluZyBvcHRpb25zXG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBhdXRvY29tcGxldGUgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICBcbiAgLy8gQWR2YW5jZWQgb3B0aW9uc1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBzdWdnZXN0aW9ucyBkcm9wZG93biAqL1xuICBwbGFjZW1lbnQ/OiAndG9wJyB8ICdib3R0b20nO1xuICBcbiAgLy8gVmFsaWRhdGlvblxuICAvKiogVmFsaWRhdGUgYmVmb3JlIHNhdmluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVPblNhdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVBdXRvQ29tcGxldGUgY29tcG9uZW50XG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIGJ5IGRlZmF1bHQpXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlQXV0b0NvbXBsZXRlRWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlPzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE5pbGVBdXRvQ29tcGxldGVFZGl0b3JPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLm9wdGlvbnMgfHwgb3B0aW9ucy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlQXV0b0NvbXBsZXRlRWRpdG9yIHJlcXVpcmVzIG9wdGlvbnMgYXJyYXkgdG8gYmUgcHJvdmlkZWQnKTtcbiAgICB9XG4gIH1cblxuICBlZGl0KGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlQXV0b0NvbXBsZXRlRWRpdG9yIHJlcXVpcmVzIGEgY29udGFpbmVyIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgTmlsZUF1dG9Db21wbGV0ZSBjdXN0b20gZWxlbWVudCB1c2luZyBkb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWF1dG9jb21wbGV0ZScpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLnZhbHVlID0gU3RyaW5nKGNvbnRleHQudmFsdWUgPz8gJycpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmNsYXNzTmFtZSA9ICdzdC1jZWxsLWVkaXRvciBzdC1uaWxlLWF1dG9jb21wbGV0ZS1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5zdHlsZS53aWR0aCA9ICdpbmhlcml0JztcbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5hdXRvY29tcGxldGUuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICB0aGlzLmFwcGx5T3B0aW9ucygpO1xuXG4gICAgLy8gU2V0IGFsbE1lbnVJdGVtcyBwcm9wZXJ0eSBmb3IgYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRNZW51SXRlbXMoKTtcblxuICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dCk7XG5cbiAgICAvLyBDbGVhciBjb250YWluZXIgYW5kIGFwcGVuZCBhdXRvY29tcGxldGVcbiAgICBjb250ZXh0LmNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICBjb250ZXh0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmF1dG9jb21wbGV0ZSk7XG5cbiAgICAvLyBBdXRvIGZvY3VzXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYXV0b0ZvY3VzICE9PSBmYWxzZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbGxNZW51SXRlbXMgcHJvcGVydHkgZm9yIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xuICAgKiBOaWxlQXV0b0NvbXBsZXRlIHJlcXVpcmVzIGFsbE1lbnVJdGVtcyB0byBiZSBzZXQgYXMgYSBwcm9wZXJ0eSwgbm90IGNoaWxkIGVsZW1lbnRzXG4gICAqL1xuICBwcml2YXRlIHNldE1lbnVJdGVtcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLm9wdGlvbnMgfHwgW107XG4gICAgXG4gICAgLy8gQ29udmVydCBvcHRpb25zIHRvIHN0cmluZyBhcnJheSBmb3IgYWxsTWVudUl0ZW1zXG4gICAgY29uc3QgbWVudUl0ZW1zOiBzdHJpbmdbXSA9IG9wdGlvbnMubWFwKG9wdCA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBBdXRvQ29tcGxldGVPcHRpb24gb2JqZWN0cywgdXNlIHRoZSBsYWJlbCBmb3IgZGlzcGxheVxuICAgICAgICByZXR1cm4gb3B0LmxhYmVsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRoZSBhbGxNZW51SXRlbXMgcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIGVsZW1lbnRcbiAgICAodGhpcy5hdXRvY29tcGxldGUgYXMgYW55KS5hbGxNZW51SXRlbXMgPSBtZW51SXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUgTmlsZUF1dG9Db21wbGV0ZSBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGFwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICAvLyBCYXNpYyBwcm9wZXJ0aWVzXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5kaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBTb21lIHByb3BlcnRpZXMgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gTmlsZUF1dG9Db21wbGV0ZVxuICAgIC8vIFNldHRpbmcgdmlhIGF0dHJpYnV0ZXMgYXMgZmFsbGJhY2tcbiAgICBpZiAodGhpcy5vcHRpb25zPy5oZWxwVGV4dCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdoZWxwLXRleHQnLCB0aGlzLm9wdGlvbnMuaGVscFRleHQpO1xuICAgIH1cblxuICAgIC8vIFNpemUgKGlmIHN1cHBvcnRlZCBieSBOaWxlQXV0b0NvbXBsZXRlKVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnNpemUpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnc2l6ZScsIHRoaXMub3B0aW9ucy5zaXplKTtcbiAgICB9XG5cbiAgICAvLyBCZWhhdmlvciBvcHRpb25zIC0gdXNpbmcgYXR0cmlidXRlcyBmb3IgcHJvcGVydGllcyB0aGF0IG1heSBub3QgZXhpc3RcbiAgICBpZiAodGhpcy5vcHRpb25zPy5jbGVhcmFibGUpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnY2xlYXJhYmxlJywgU3RyaW5nKHRoaXMub3B0aW9ucy5jbGVhcmFibGUpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsIFN0cmluZyh0aGlzLm9wdGlvbnMucmVxdWlyZWQpKTtcbiAgICB9XG5cbiAgICAvLyBTdHlsaW5nIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdmaWxsZWQnLCBTdHJpbmcodGhpcy5vcHRpb25zLmZpbGxlZCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnBpbGwpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgncGlsbCcsIFN0cmluZyh0aGlzLm9wdGlvbnMucGlsbCkpO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXMgLSB1c2luZyBhdHRyaWJ1dGVzIGZvciBwcm9wZXJ0aWVzIHRoYXQgbWF5IG5vdCBleGlzdFxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lndhcm5pbmcpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnd2FybmluZycsIFN0cmluZyh0aGlzLm9wdGlvbnMud2FybmluZykpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5zZXRBdHRyaWJ1dGUoJ2Vycm9yJywgU3RyaW5nKHRoaXMub3B0aW9ucy5lcnJvcikpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnc3VjY2VzcycsIFN0cmluZyh0aGlzLm9wdGlvbnMuc3VjY2VzcykpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdlcnJvci1tZXNzYWdlJywgdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLy8gQXV0b2NvbXBsZXRlIHNwZWNpZmljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5taW5TZWFyY2hMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdtaW4tc2VhcmNoLWxlbmd0aCcsIFN0cmluZyh0aGlzLm9wdGlvbnMubWluU2VhcmNoTGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubWF4U3VnZ2VzdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdtYXgtc3VnZ2VzdGlvbnMnLCBTdHJpbmcodGhpcy5vcHRpb25zLm1heFN1Z2dlc3Rpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY2FzZVNlbnNpdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5zZXRBdHRyaWJ1dGUoJ2Nhc2Utc2Vuc2l0aXZlJywgU3RyaW5nKHRoaXMub3B0aW9ucy5jYXNlU2Vuc2l0aXZlKSk7XG4gICAgfVxuXG4gICAgLy8gQWR2YW5jZWQgb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnM/LmhvaXN0KSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5zZXRBdHRyaWJ1dGUoJ2hvaXN0JywgU3RyaW5nKHRoaXMub3B0aW9ucy5ob2lzdCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnBsYWNlbWVudCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdwbGFjZW1lbnQnLCB0aGlzLm9wdGlvbnMucGxhY2VtZW50KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgcG9ydGFsIGF0dHJpYnV0ZSBmb3IgcHJvcGVyIGRyb3Bkb3duIHJlbmRlcmluZ1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgncG9ydGFsJywgJ3RydWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucz8udmFsaWRhdGVPblNhdmUgIT09IGZhbHNlO1xuXG4gICAgLy8gSGFuZGxlIGtleWJvYXJkIGV2ZW50cyAoa2V5ZG93biBpcyBub3QgcmVwbGFjZWQgYnkgY3VzdG9tIGV2ZW50cylcbiAgICBjb25zdCBrZXlkb3duSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBlIGFzIEtleWJvYXJkRXZlbnQ7XG4gICAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNhdmVWYWx1ZShjb250ZXh0LCB2YWxpZGF0ZU9uU2F2ZSk7XG4gICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25DYW5jZWwoKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5RXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zYXZlVmFsdWUoY29udGV4dCwgdmFsaWRhdGVPblNhdmUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25IYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2tleWRvd24nLCBoYW5kbGVyOiBrZXlkb3duSGFuZGxlciB9KTtcblxuICAgIC8vIFVzZSBuaWxlLWNvbXBsZXRlIGN1c3RvbSBldmVudCBmb3Igd2hlbiB1c2VyIHNlbGVjdHMgYW4gYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25cbiAgICBjb25zdCBjb21wbGV0ZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGVkIHZhbHVlIGZyb20gYXV0b2NvbXBsZXRlXG4gICAgICBpZiAoY3VzdG9tRXZlbnQuZGV0YWlsICYmIGN1c3RvbUV2ZW50LmRldGFpbC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZShjdXN0b21FdmVudC5kZXRhaWwudmFsdWUpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY29tcGxldGUnLCBjb21wbGV0ZUhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jb21wbGV0ZScsIGhhbmRsZXI6IGNvbXBsZXRlSGFuZGxlciB9KTtcblxuICAgIC8vIFVzZSBuYXRpdmUgYmx1ciBldmVudCAoTmlsZUF1dG9Db21wbGV0ZSBkb2Vzbid0IGhhdmUgbmlsZS1ibHVyKVxuICAgIGNvbnN0IGJsdXJIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICAvLyBHZXQgY3VycmVudCB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSBjb21wb25lbnRcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1c3RvbUV2ZW50LmRldGFpbD8udmFsdWUgPz8gJyc7XG4gICAgICAvLyBTYXZlIG9uIGJsdXIgLSBUYWJsZVN0YXRlIGNvb3JkaW5hdGlvbiBlbnN1cmVzIG9ubHkgb25lIGNlbGwgaXMgZWRpdGluZyBhdCBhIHRpbWVcbiAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZShjdXJyZW50VmFsdWUpKTtcbiAgICB9O1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBibHVySGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICdibHVyJywgaGFuZGxlcjogYmx1ckhhbmRsZXIgfSk7XG5cbiAgICAvLyBVc2UgbmF0aXZlIGlucHV0IGV2ZW50IGZvciByZWFsLXRpbWUgdmFsdWUgdXBkYXRlcyAoTmlsZUF1dG9Db21wbGV0ZSBkb2Vzbid0IGhhdmUgbmlsZS1pbnB1dClcbiAgICBjb25zdCBpbnB1dEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmF1dG9jb21wbGV0ZT8udmFsdWUgPz8gJyc7XG4gICAgICBjb250ZXh0Lm9uQ2hhbmdlKHRoaXMucGFyc2VWYWx1ZShjdXJyZW50VmFsdWUpKTtcbiAgICB9O1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgaW5wdXRIYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2lucHV0JywgaGFuZGxlcjogaW5wdXRIYW5kbGVyIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdmFsdWUgd2l0aCBvcHRpb25hbCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHNhdmVWYWx1ZShjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPiwgdmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICAvLyBOb3RlOiBOaWxlQXV0b0NvbXBsZXRlIG1heSBub3QgaGF2ZSB2YWxpZGF0aW9uIG1ldGhvZHNcbiAgICAvLyBWYWxpZGF0aW9uIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSB2YWxpZGF0b3Igc3RyYXRlZ3kgaW5zdGVhZFxuICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIHRvIGFwcHJvcHJpYXRlIHR5cGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nKTogVCB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIHVua25vd24gYXMgVDtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGUpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5yZW1vdmUoKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5mb2N1cygpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5hdXRvY29tcGxldGUpIHJldHVybiAnJyBhcyB1bmtub3duIGFzIFQ7XG4gICAgcmV0dXJuICh0aGlzLmF1dG9jb21wbGV0ZS52YWx1ZSA/PyAnJykgYXMgdW5rbm93biBhcyBUO1xuICB9XG59XG4iXX0=