@seniorsistemas/data-seniorx-core 2.1.0 → 2.2.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.
Files changed (97) hide show
  1. package/core/constants/chips.const.d.ts +1 -0
  2. package/core/constants/combobox.const.d.ts +1 -1
  3. package/core/constants/fileupload.const.d.ts +9 -0
  4. package/core/constants/icon-picker.const.d.ts +1 -0
  5. package/core/constants/picklist.const.d.ts +1 -0
  6. package/core/constants/table.const.d.ts +43 -0
  7. package/core/types/button.type.d.ts +18 -2
  8. package/core/types/fileupload.type.d.ts +17 -0
  9. package/core/types/filters.type.d.ts +4 -0
  10. package/core/types/table-column.type.d.ts +31 -0
  11. package/core/types/table-options.type.d.ts +90 -0
  12. package/core/types/table-shared.type.d.ts +13 -0
  13. package/core/types/table-visual.type.d.ts +23 -0
  14. package/core/types/table.type.d.ts +4 -113
  15. package/core/utils/layout.util.d.ts +4 -0
  16. package/esm2022/core/constants/chips.const.mjs +2 -1
  17. package/esm2022/core/constants/combobox.const.mjs +2 -2
  18. package/esm2022/core/constants/fileupload.const.mjs +10 -0
  19. package/esm2022/core/constants/icon-picker.const.mjs +76 -1
  20. package/esm2022/core/constants/picklist.const.mjs +2 -1
  21. package/esm2022/core/constants/table.const.mjs +53 -6
  22. package/esm2022/core/types/button.type.mjs +1 -1
  23. package/esm2022/core/types/fileupload.type.mjs +2 -0
  24. package/esm2022/core/types/filters.type.mjs +1 -1
  25. package/esm2022/core/types/table-column.type.mjs +2 -0
  26. package/esm2022/core/types/table-options.type.mjs +2 -0
  27. package/esm2022/core/types/table-shared.type.mjs +2 -0
  28. package/esm2022/core/types/table-visual.type.mjs +2 -0
  29. package/esm2022/core/types/table.type.mjs +1 -1
  30. package/esm2022/core/utils/combobox.util.mjs +2 -2
  31. package/esm2022/core/utils/layout.util.mjs +21 -5
  32. package/esm2022/features/accordion/accordion-item.component.mjs +1 -1
  33. package/esm2022/features/badge/badge.component.mjs +1 -1
  34. package/esm2022/features/button/button.component.mjs +76 -11
  35. package/esm2022/features/button/components/button-menu.component.mjs +81 -0
  36. package/esm2022/features/card-list/card/card.component.mjs +3 -3
  37. package/esm2022/features/checkbox/checkbox.component.mjs +3 -3
  38. package/esm2022/features/chips/chips.component.mjs +8 -5
  39. package/esm2022/features/color-picker/color-picker.component.mjs +1 -1
  40. package/esm2022/features/combobox/combobox.component.mjs +17 -4
  41. package/esm2022/features/fileupload/fileupload.component.mjs +311 -0
  42. package/esm2022/features/filters/filters.component.mjs +3 -3
  43. package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
  44. package/esm2022/features/icon-picker/icon-picker.component.mjs +34 -7
  45. package/esm2022/features/info-sign/info-sign.component.mjs +1 -1
  46. package/esm2022/features/mask/mask.component.mjs +1 -1
  47. package/esm2022/features/modal/modal.component.mjs +1 -1
  48. package/esm2022/features/number-input/number-input.component.mjs +1 -1
  49. package/esm2022/features/paginator/paginator.component.mjs +3 -3
  50. package/esm2022/features/picklist/picklist.component.mjs +33 -6
  51. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +3 -3
  52. package/esm2022/features/searchbox/searchbox.component.mjs +3 -3
  53. package/esm2022/features/stats-card/stats-card.component.mjs +1 -1
  54. package/esm2022/features/switch/switch.component.mjs +3 -2
  55. package/esm2022/features/table/components/table-actions-menu.component.mjs +86 -0
  56. package/esm2022/features/table/components/table-cell-content.component.mjs +124 -0
  57. package/esm2022/features/table/components/table-sort-indicator.component.mjs +65 -0
  58. package/esm2022/features/table/table.component.mjs +116 -319
  59. package/esm2022/features/table/utils/table-config.util.mjs +35 -0
  60. package/esm2022/features/table/utils/table-data.util.mjs +96 -0
  61. package/esm2022/features/table/utils/table-layout.util.mjs +25 -0
  62. package/esm2022/features/table/utils/table-truncate.pipe.mjs +19 -0
  63. package/esm2022/features/table/utils/table-visual.util.mjs +221 -0
  64. package/esm2022/features/textarea/textarea.component.mjs +1 -1
  65. package/esm2022/features/textbox/textbox.component.mjs +1 -1
  66. package/esm2022/features/tooltip/tooltip.component.mjs +12 -3
  67. package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
  68. package/esm2022/locales/en.json +194 -0
  69. package/esm2022/locales/es-CO.json +187 -1
  70. package/esm2022/locales/pt.json +194 -0
  71. package/esm2022/providers/features.provider.mjs +3 -1
  72. package/esm2022/public-api.mjs +3 -1
  73. package/features/button/button.component.d.ts +14 -7
  74. package/features/button/components/button-menu.component.d.ts +25 -0
  75. package/features/chips/chips.component.d.ts +1 -0
  76. package/features/combobox/combobox.component.d.ts +4 -1
  77. package/features/fileupload/fileupload.component.d.ts +66 -0
  78. package/features/icon-picker/icon-picker.component.d.ts +3 -0
  79. package/features/modal/modal.component.d.ts +1 -1
  80. package/features/picklist/picklist.component.d.ts +6 -1
  81. package/features/table/components/table-actions-menu.component.d.ts +12 -0
  82. package/features/table/components/table-cell-content.component.d.ts +41 -0
  83. package/features/table/components/table-sort-indicator.component.d.ts +11 -0
  84. package/features/table/table.component.d.ts +28 -44
  85. package/features/table/utils/table-config.util.d.ts +3 -0
  86. package/features/table/utils/table-data.util.d.ts +10 -0
  87. package/features/table/utils/table-layout.util.d.ts +4 -0
  88. package/features/table/utils/table-truncate.pipe.d.ts +12 -0
  89. package/features/table/utils/table-visual.util.d.ts +21 -0
  90. package/features/tooltip/tooltip.component.d.ts +3 -1
  91. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +3525 -1848
  92. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  93. package/package.json +1 -1
  94. package/public-api.d.ts +5 -2
  95. package/src/locales/en.json +194 -0
  96. package/src/locales/es-CO.json +187 -1
  97. package/src/locales/pt.json +194 -0
@@ -0,0 +1,311 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TranslateModule } from '@ngx-translate/core';
4
+ import { nextSequentialId } from '../../core/utils/id.util';
5
+ import { ModalComponent } from '../modal/modal.component';
6
+ import { FILEUPLOAD_DEFAULT_ACCEPT, FILEUPLOAD_DEFAULT_MAX_SIZE, FILEUPLOAD_ERROR_MESSAGES, FILEUPLOAD_ID_PREFIX, FILEUPLOAD_IMAGE_TYPES, } from '../../core/constants/fileupload.const';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ngx-translate/core";
9
+ let _idCounter = 0;
10
+ function generateFileId() {
11
+ _idCounter += 1;
12
+ return `${FILEUPLOAD_ID_PREFIX}-file-${_idCounter}`;
13
+ }
14
+ export class FileUploadComponent {
15
+ nativeInput;
16
+ label = false;
17
+ required = false;
18
+ disabled = false;
19
+ multiple = false;
20
+ accept = FILEUPLOAD_DEFAULT_ACCEPT;
21
+ maxFileSize = FILEUPLOAD_DEFAULT_MAX_SIZE;
22
+ helperText = false;
23
+ errorMessage = false;
24
+ mode = 'dropzone';
25
+ showPreview = true;
26
+ allowDownload = true;
27
+ allowRemove = true;
28
+ allowImageModal = true;
29
+ invalid = false;
30
+ placeholder = 'platform.datacore.fileupload.placeholder';
31
+ set files(val) {
32
+ this._files = val ?? [];
33
+ this.cdr.markForCheck();
34
+ }
35
+ get files() {
36
+ return this._files;
37
+ }
38
+ filesChange = new EventEmitter();
39
+ fileSelected = new EventEmitter();
40
+ fileRemoved = new EventEmitter();
41
+ fileDownload = new EventEmitter();
42
+ filePreview = new EventEmitter();
43
+ validationError = new EventEmitter();
44
+ componentId = nextSequentialId(FILEUPLOAD_ID_PREFIX);
45
+ inputId = `${this.componentId}-input`;
46
+ helperId = `${this.componentId}-helper`;
47
+ errorId = `${this.componentId}-error`;
48
+ isDragOver = false;
49
+ previewModalVisible = false;
50
+ previewFile = null;
51
+ _files = [];
52
+ cdr = inject(ChangeDetectorRef);
53
+ objectUrls = [];
54
+ get hasFiles() {
55
+ return this._files.length > 0;
56
+ }
57
+ get labelText() {
58
+ return typeof this.label === 'string' ? this.label : '';
59
+ }
60
+ get helperTextValue() {
61
+ return typeof this.helperText === 'string' ? this.helperText : '';
62
+ }
63
+ get errorMessageValue() {
64
+ return typeof this.errorMessage === 'string' ? this.errorMessage : '';
65
+ }
66
+ get isInvalid() {
67
+ return this.invalid;
68
+ }
69
+ get ariaDescribedBy() {
70
+ const ids = [];
71
+ if (this.helperTextValue) {
72
+ ids.push(this.helperId);
73
+ }
74
+ if (this.isInvalid && this.errorMessageValue) {
75
+ ids.push(this.errorId);
76
+ }
77
+ return ids.length ? ids.join(' ') : null;
78
+ }
79
+ get isDropzoneMode() {
80
+ return this.mode === 'dropzone';
81
+ }
82
+ get isButtonMode() {
83
+ return this.mode === 'button';
84
+ }
85
+ get isCompactMode() {
86
+ return this.mode === 'compact';
87
+ }
88
+ ngOnDestroy() {
89
+ this.objectUrls.forEach(url => URL.revokeObjectURL(url));
90
+ }
91
+ openFilePicker() {
92
+ if (this.disabled) {
93
+ return;
94
+ }
95
+ this.nativeInput?.nativeElement.click();
96
+ }
97
+ onNativeChange(event) {
98
+ const input = event.target;
99
+ if (!input.files?.length) {
100
+ return;
101
+ }
102
+ this.processFiles(Array.from(input.files));
103
+ input.value = '';
104
+ }
105
+ onDragOver(event) {
106
+ event.preventDefault();
107
+ event.stopPropagation();
108
+ if (!this.disabled) {
109
+ this.isDragOver = true;
110
+ }
111
+ }
112
+ onDragLeave(event) {
113
+ event.preventDefault();
114
+ event.stopPropagation();
115
+ this.isDragOver = false;
116
+ }
117
+ onDrop(event) {
118
+ event.preventDefault();
119
+ event.stopPropagation();
120
+ this.isDragOver = false;
121
+ if (this.disabled) {
122
+ return;
123
+ }
124
+ const files = event.dataTransfer?.files;
125
+ if (files?.length) {
126
+ this.processFiles(Array.from(files));
127
+ }
128
+ }
129
+ onDropzoneKeydown(event) {
130
+ if (event.key === 'Enter' || event.key === ' ') {
131
+ event.preventDefault();
132
+ this.openFilePicker();
133
+ }
134
+ }
135
+ removeFile(file, event) {
136
+ event.stopPropagation();
137
+ if (this.disabled) {
138
+ return;
139
+ }
140
+ if (file.previewUrl && this.objectUrls.includes(file.previewUrl)) {
141
+ URL.revokeObjectURL(file.previewUrl);
142
+ this.objectUrls = this.objectUrls.filter(u => u !== file.previewUrl);
143
+ }
144
+ this._files = this._files.filter(f => f.id !== file.id);
145
+ this.filesChange.emit([...this._files]);
146
+ this.fileRemoved.emit(file);
147
+ this.cdr.markForCheck();
148
+ }
149
+ downloadFile(file, event) {
150
+ event.stopPropagation();
151
+ this.fileDownload.emit(file);
152
+ if (file.url || file.previewUrl) {
153
+ const a = document.createElement('a');
154
+ a.href = file.url ?? file.previewUrl ?? '';
155
+ a.download = file.name;
156
+ a.click();
157
+ }
158
+ }
159
+ openPreviewModal(file, event) {
160
+ event.stopPropagation();
161
+ if (!file.isImage || !this.allowImageModal) {
162
+ return;
163
+ }
164
+ this.previewFile = file;
165
+ this.previewModalVisible = true;
166
+ this.filePreview.emit(file);
167
+ this.cdr.markForCheck();
168
+ }
169
+ closePreviewModal() {
170
+ this.previewModalVisible = false;
171
+ this.previewFile = null;
172
+ this.cdr.markForCheck();
173
+ }
174
+ formatFileSize(bytes) {
175
+ if (bytes < 1024) {
176
+ return `${bytes} B`;
177
+ }
178
+ if (bytes < 1024 * 1024) {
179
+ return `${(bytes / 1024).toFixed(1)} KB`;
180
+ }
181
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
182
+ }
183
+ processFiles(rawFiles) {
184
+ if (this.disabled) {
185
+ return;
186
+ }
187
+ const toAdd = this.multiple ? rawFiles : rawFiles.slice(0, 1);
188
+ toAdd.forEach((raw) => this.processSingleFile(raw));
189
+ this.cdr.markForCheck();
190
+ }
191
+ processSingleFile(raw) {
192
+ const typeError = this.validateType(raw);
193
+ if (typeError) {
194
+ this.validationError.emit(typeError);
195
+ return;
196
+ }
197
+ const sizeError = this.validateSize(raw);
198
+ if (sizeError) {
199
+ this.validationError.emit(sizeError);
200
+ return;
201
+ }
202
+ const isImage = FILEUPLOAD_IMAGE_TYPES.includes(raw.type);
203
+ let previewUrl;
204
+ if (isImage && this.showPreview) {
205
+ previewUrl = URL.createObjectURL(raw);
206
+ this.objectUrls.push(previewUrl);
207
+ }
208
+ const sdcFile = {
209
+ id: generateFileId(),
210
+ name: raw.name,
211
+ size: raw.size,
212
+ type: raw.type,
213
+ file: raw,
214
+ previewUrl,
215
+ isImage,
216
+ };
217
+ this._files = this.multiple ? [...this._files, sdcFile] : [sdcFile];
218
+ this.filesChange.emit([...this._files]);
219
+ this.fileSelected.emit(sdcFile);
220
+ }
221
+ validateType(file) {
222
+ if (!this.accept || this.accept === '*/*') {
223
+ return null;
224
+ }
225
+ const accepted = this.accept.split(',').map(t => t.trim());
226
+ const matches = accepted.some(pattern => {
227
+ if (pattern === '*/*') {
228
+ return true;
229
+ }
230
+ if (pattern.endsWith('/*')) {
231
+ return file.type.startsWith(pattern.replace('/*', '/'));
232
+ }
233
+ if (pattern.startsWith('.')) {
234
+ return file.name.toLowerCase().endsWith(pattern.toLowerCase());
235
+ }
236
+ return file.type === pattern;
237
+ });
238
+ if (matches) {
239
+ return null;
240
+ }
241
+ return {
242
+ type: 'fileType',
243
+ message: FILEUPLOAD_ERROR_MESSAGES.fileType,
244
+ file,
245
+ };
246
+ }
247
+ validateSize(file) {
248
+ if (!this.maxFileSize || file.size <= this.maxFileSize) {
249
+ return null;
250
+ }
251
+ return {
252
+ type: 'fileSize',
253
+ message: FILEUPLOAD_ERROR_MESSAGES.fileSize,
254
+ file,
255
+ };
256
+ }
257
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
258
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FileUploadComponent, isStandalone: true, selector: "sdc-fileupload", inputs: { label: "label", required: "required", disabled: "disabled", multiple: "multiple", accept: "accept", maxFileSize: "maxFileSize", helperText: "helperText", errorMessage: "errorMessage", mode: "mode", showPreview: "showPreview", allowDownload: "allowDownload", allowRemove: "allowRemove", allowImageModal: "allowImageModal", invalid: "invalid", placeholder: "placeholder", files: "files" }, outputs: { filesChange: "filesChange", fileSelected: "fileSelected", fileRemoved: "fileRemoved", fileDownload: "fileDownload", filePreview: "filePreview", validationError: "validationError" }, viewQueries: [{ propertyName: "nativeInput", first: true, predicate: ["nativeInput"], descendants: true }], ngImport: i0, template: "<div\n class=\"sdc-fileupload\"\n [class.sdc-fileupload--dropzone]=\"isDropzoneMode\"\n [class.sdc-fileupload--button]=\"isButtonMode\"\n [class.sdc-fileupload--compact]=\"isCompactMode\"\n [class.sdc-fileupload--disabled]=\"disabled\"\n [class.sdc-fileupload--invalid]=\"isInvalid\"\n [class.sdc-fileupload--has-files]=\"hasFiles\"\n>\n <!-- Label row -->\n @if (label) {\n <div class=\"sdc-fileupload__label-row\">\n <label [for]=\"inputId\" class=\"sdc-fileupload__label\">\n {{ labelText | translate }}\n @if (required) {\n <span class=\"sdc-fileupload__required\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility.required_field' | translate }}</span>\n }\n </label>\n </div>\n }\n\n <!-- Hidden native file input -->\n <input\n #nativeInput\n class=\"sdc-fileupload__native-input\"\n type=\"file\"\n [id]=\"inputId\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n [accept]=\"accept\"\n [attr.aria-label]=\"labelText ? (labelText | translate) : ('platform.datacore.fileupload.select_file' | translate)\"\n [attr.aria-required]=\"required ? 'true' : null\"\n [attr.aria-invalid]=\"isInvalid ? 'true' : null\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n (change)=\"onNativeChange($event)\"\n />\n\n <!-- Dropzone area -->\n @if (isDropzoneMode) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__dropzone\"\n [class.sdc-fileupload__dropzone--drag-over]=\"isDragOver\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'platform.datacore.fileupload.dropzone_label' | translate\"\n (click)=\"openFilePicker()\"\n (keydown)=\"onDropzoneKeydown($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <i class=\"fas fa-cloud-upload-alt sdc-fileupload__dropzone-icon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-fileupload__dropzone-text\">{{ placeholder | translate }}</span>\n <span class=\"sdc-fileupload__dropzone-hint\">\n {{ 'platform.datacore.fileupload.dropzone_hint' | translate }}\n </span>\n </button>\n }\n\n <!-- Button-only mode -->\n @if (isButtonMode || isCompactMode) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__btn\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'platform.datacore.fileupload.attach_file' | translate\"\n (click)=\"openFilePicker()\"\n >\n <i class=\"fas fa-paperclip sdc-fileupload__btn-icon\" aria-hidden=\"true\"></i>\n {{ 'platform.datacore.fileupload.attach_file' | translate }}\n </button>\n }\n\n <!-- File list -->\n @if (hasFiles) {\n <ul\n class=\"sdc-fileupload__file-list\"\n [attr.aria-label]=\"'platform.datacore.fileupload.file_list' | translate\"\n >\n @for (file of files; track file.id) {\n <li class=\"sdc-fileupload__file-item\">\n\n <!-- Image preview thumbnail -->\n @if (file.isImage && showPreview && file.previewUrl) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__thumb-btn\"\n [attr.aria-label]=\"'platform.datacore.fileupload.preview_image' | translate\"\n (click)=\"openPreviewModal(file, $event)\"\n >\n <img\n class=\"sdc-fileupload__thumb\"\n [src]=\"file.previewUrl\"\n [alt]=\"file.name\"\n width=\"40\"\n height=\"40\"\n loading=\"lazy\"\n />\n </button>\n }\n\n <!-- File type icon (non-image) -->\n @if (!file.isImage || !showPreview) {\n <div class=\"sdc-fileupload__file-icon\" aria-hidden=\"true\">\n <i class=\"fas fa-file-alt\"></i>\n </div>\n }\n\n <!-- File info -->\n <div class=\"sdc-fileupload__file-info\">\n <span class=\"sdc-fileupload__file-name\" [title]=\"file.name\">{{ file.name }}</span>\n <span class=\"sdc-fileupload__file-size\">{{ formatFileSize(file.size) }}</span>\n </div>\n\n <!-- File actions -->\n <div class=\"sdc-fileupload__file-actions\">\n @if (file.isImage && allowImageModal && showPreview && file.previewUrl) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__action-btn\"\n [attr.aria-label]=\"'platform.datacore.fileupload.preview_image' | translate\"\n (click)=\"openPreviewModal(file, $event)\"\n >\n <i class=\"fas fa-eye\" aria-hidden=\"true\"></i>\n </button>\n }\n\n @if (allowDownload && (file.url || file.previewUrl)) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__action-btn\"\n [attr.aria-label]=\"'platform.datacore.fileupload.download_file' | translate\"\n (click)=\"downloadFile(file, $event)\"\n >\n <i class=\"fas fa-download\" aria-hidden=\"true\"></i>\n </button>\n }\n\n @if (allowRemove && !disabled) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__action-btn sdc-fileupload__action-btn--remove\"\n [attr.aria-label]=\"('platform.datacore.fileupload.remove_file' | translate) + ' ' + file.name\"\n (click)=\"removeFile(file, $event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </li>\n }\n </ul>\n }\n\n <!-- Helper text -->\n @if (helperText && !isInvalid) {\n <small [id]=\"helperId\" class=\"sdc-fileupload__helper\">\n {{ helperTextValue | translate }}\n </small>\n }\n\n <!-- Error message -->\n @if (isInvalid && errorMessage) {\n <small\n [id]=\"errorId\"\n class=\"sdc-fileupload__error\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ errorMessageValue | translate }}\n </small>\n }\n</div>\n\n<!-- Image preview modal -->\n@if (previewFile) {\n <sdc-modal\n [visible]=\"previewModalVisible\"\n [header]=\"previewFile.name\"\n [closable]=\"true\"\n [appendToBody]=\"true\"\n width=\"auto\"\n (visibleChange)=\"!$event && closePreviewModal()\"\n (hidden)=\"closePreviewModal()\"\n >\n <img\n class=\"sdc-fileupload__preview-img\"\n [src]=\"previewFile.previewUrl\"\n [alt]=\"previewFile.name\"\n width=\"800\"\n height=\"600\"\n />\n </sdc-modal>\n}\n", styles: [":host{display:block}.sdc-fileupload{display:flex;flex-direction:column;gap:.35rem}.sdc-fileupload__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-fileupload__label{display:inline-flex;align-items:center;gap:var(--sdc-form-required-ml);padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);font-size:14px;font-weight:500;line-height:var(--sdc-form-label-lh);color:var(--sdc-text-default);cursor:pointer}.sdc-fileupload__required{color:var(--sdc-form-required-color, var(--sdc-error-color, #d98888));font-weight:400}.sdc-fileupload__native-input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;clip:rect(0 0 0 0);pointer-events:none}.sdc-fileupload__dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;min-height:120px;padding:1.5rem 1rem;border:2px dashed var(--sdc-formfield-default-border, #cccccc);border-radius:var(--sdc-formfield-border-radius, 4px);background-color:var(--sdc-formfield-default-bg, #ffffff);color:var(--sdc-text-muted, #6b7280);cursor:pointer;font-family:inherit;text-align:center;transition:border-color var(--sdc-transition-fast, .18s ease),background-color var(--sdc-transition-fast, .18s ease);outline:none;width:100%}.sdc-fileupload__dropzone--drag-over{border-color:var(--sdc-formfield-focus-color, #428bca);background-color:#428bca17}.sdc-fileupload__dropzone:focus-visible{box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 3px rgba(0, 123, 255, .15))}.sdc-fileupload--disabled .sdc-fileupload__dropzone{cursor:not-allowed;background-color:var(--sdc-formfield-disabled-bg, transparent);opacity:.6;pointer-events:none}.sdc-fileupload--invalid .sdc-fileupload__dropzone{border-color:var(--sdc-formfield-invalid-border, #d98888)}.sdc-fileupload__dropzone:hover:not(:disabled),.sdc-fileupload__dropzone:focus-visible:not(:disabled){border-color:var(--sdc-formfield-focus-color, #428bca);background-color:#428bca0d}.sdc-fileupload--invalid .sdc-fileupload__dropzone:focus-visible{box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-fileupload__dropzone-icon{font-size:2rem;color:var(--sdc-formfield-default-border, #cccccc);transition:color var(--sdc-transition-fast, .18s ease)}.sdc-fileupload__dropzone--drag-over .sdc-fileupload__dropzone-icon,.sdc-fileupload__dropzone:hover .sdc-fileupload__dropzone-icon{color:var(--sdc-formfield-focus-color, #428bca)}.sdc-fileupload__dropzone-text{font-size:14px;font-weight:500;color:var(--sdc-text-default)}.sdc-fileupload__dropzone-hint{font-size:12px;color:var(--sdc-text-muted, #6b7280)}.sdc-fileupload__btn{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .85rem;height:var(--sdc-formfield-default-height, 34px);border:1px solid var(--sdc-formfield-default-border, #cccccc);border-radius:var(--sdc-formfield-border-radius, 4px);background-color:var(--sdc-button-bg, #eceeef);color:var(--sdc-text-default);font-size:14px;font-family:inherit;cursor:pointer;transition:var(--sdc-button-bg-hover-transition, background-color .2s ease-out);outline:none}.sdc-fileupload__btn:focus-visible{box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 3px rgba(0, 123, 255, .15));border-color:var(--sdc-formfield-focus-color, #428bca)}.sdc-fileupload__btn:disabled{cursor:not-allowed;opacity:.6}.sdc-fileupload__btn:hover:not(:disabled){background-color:var(--sdc-button-bg-hover, #e6e6e6)}.sdc-fileupload__btn-icon{font-size:13px;color:var(--sdc-button-icon-default, #333333)}.sdc-fileupload__file-list{list-style:none;margin:.25rem 0 0;padding:0;display:flex;flex-direction:column;gap:.4rem}.sdc-fileupload__file-item{display:flex;align-items:center;gap:.65rem;padding:.4rem .65rem;border:1px solid var(--sdc-surface-border-color, #dedce5);border-radius:var(--sdc-formfield-border-radius, 4px);background-color:var(--sdc-surface-bg, #ffffff);transition:box-shadow var(--sdc-transition-fast, .18s ease)}.sdc-fileupload__file-item:hover{box-shadow:var(--sdc-shadow-sm, 0 2px 8px rgba(0, 0, 0, .08))}.sdc-fileupload__thumb-btn{padding:0;border:none;background:transparent;cursor:pointer;border-radius:var(--sdc-formfield-border-radius, 4px);overflow:hidden;flex:0 0 auto;outline:none}.sdc-fileupload__thumb-btn:focus-visible{box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 3px rgba(0, 123, 255, .15))}.sdc-fileupload__thumb{width:40px;height:40px;object-fit:cover;display:block;border-radius:var(--sdc-formfield-border-radius, 4px)}.sdc-fileupload__file-icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background-color:var(--sdc-button-bg, #eceeef);border-radius:var(--sdc-formfield-border-radius, 4px);color:var(--sdc-text-muted, #6b7280);font-size:16px;flex:0 0 auto}.sdc-fileupload__file-info{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}.sdc-fileupload__file-name{font-size:13px;font-weight:500;color:var(--sdc-text-default);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-fileupload__file-size{font-size:12px;color:var(--sdc-text-muted, #6b7280)}.sdc-fileupload__file-actions{display:flex;align-items:center;gap:.2rem;flex:0 0 auto}.sdc-fileupload__action-btn{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid transparent;border-radius:var(--sdc-formfield-border-radius, 4px);background:transparent;color:var(--sdc-text-muted, #6b7280);font-size:13px;cursor:pointer;transition:background-color var(--sdc-transition-fast, .18s ease),color var(--sdc-transition-fast, .18s ease);outline:none}.sdc-fileupload__action-btn:focus-visible{box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 3px rgba(0, 123, 255, .15));border-color:var(--sdc-formfield-focus-color, #428bca)}.sdc-fileupload__action-btn:hover{background-color:var(--sdc-button-bg, #eceeef);color:var(--sdc-text-default)}.sdc-fileupload__action-btn--remove:hover{background-color:#d988881f;color:var(--sdc-error-color, #d98888)}.sdc-fileupload__helper{font-size:12px;color:var(--sdc-text-muted, #6b7280);margin-top:.1rem}.sdc-fileupload__error{font-size:12px;color:var(--sdc-error-color, #d98888);margin-top:.1rem}.sdc-fileupload__preview-img{max-width:100%;max-height:70vh;display:block;margin:0 auto;border-radius:var(--sdc-formfield-border-radius, 4px)}.sdc-fileupload--disabled .sdc-fileupload__label{cursor:not-allowed;opacity:.7}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ModalComponent, selector: "sdc-modal", inputs: ["footerButtons", "header", "height", "maximizable", "maximize", "resizable", "responsive", "width", "zIndex", "closable", "styleClass", "appendToBody", "visible"], outputs: ["hidden", "visibleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
259
+ }
260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileUploadComponent, decorators: [{
261
+ type: Component,
262
+ args: [{ selector: 'sdc-fileupload', standalone: true, imports: [CommonModule, TranslateModule, ModalComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div\n class=\"sdc-fileupload\"\n [class.sdc-fileupload--dropzone]=\"isDropzoneMode\"\n [class.sdc-fileupload--button]=\"isButtonMode\"\n [class.sdc-fileupload--compact]=\"isCompactMode\"\n [class.sdc-fileupload--disabled]=\"disabled\"\n [class.sdc-fileupload--invalid]=\"isInvalid\"\n [class.sdc-fileupload--has-files]=\"hasFiles\"\n>\n <!-- Label row -->\n @if (label) {\n <div class=\"sdc-fileupload__label-row\">\n <label [for]=\"inputId\" class=\"sdc-fileupload__label\">\n {{ labelText | translate }}\n @if (required) {\n <span class=\"sdc-fileupload__required\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility.required_field' | translate }}</span>\n }\n </label>\n </div>\n }\n\n <!-- Hidden native file input -->\n <input\n #nativeInput\n class=\"sdc-fileupload__native-input\"\n type=\"file\"\n [id]=\"inputId\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n [accept]=\"accept\"\n [attr.aria-label]=\"labelText ? (labelText | translate) : ('platform.datacore.fileupload.select_file' | translate)\"\n [attr.aria-required]=\"required ? 'true' : null\"\n [attr.aria-invalid]=\"isInvalid ? 'true' : null\"\n [attr.aria-describedby]=\"ariaDescribedBy\"\n (change)=\"onNativeChange($event)\"\n />\n\n <!-- Dropzone area -->\n @if (isDropzoneMode) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__dropzone\"\n [class.sdc-fileupload__dropzone--drag-over]=\"isDragOver\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'platform.datacore.fileupload.dropzone_label' | translate\"\n (click)=\"openFilePicker()\"\n (keydown)=\"onDropzoneKeydown($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <i class=\"fas fa-cloud-upload-alt sdc-fileupload__dropzone-icon\" aria-hidden=\"true\"></i>\n <span class=\"sdc-fileupload__dropzone-text\">{{ placeholder | translate }}</span>\n <span class=\"sdc-fileupload__dropzone-hint\">\n {{ 'platform.datacore.fileupload.dropzone_hint' | translate }}\n </span>\n </button>\n }\n\n <!-- Button-only mode -->\n @if (isButtonMode || isCompactMode) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__btn\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'platform.datacore.fileupload.attach_file' | translate\"\n (click)=\"openFilePicker()\"\n >\n <i class=\"fas fa-paperclip sdc-fileupload__btn-icon\" aria-hidden=\"true\"></i>\n {{ 'platform.datacore.fileupload.attach_file' | translate }}\n </button>\n }\n\n <!-- File list -->\n @if (hasFiles) {\n <ul\n class=\"sdc-fileupload__file-list\"\n [attr.aria-label]=\"'platform.datacore.fileupload.file_list' | translate\"\n >\n @for (file of files; track file.id) {\n <li class=\"sdc-fileupload__file-item\">\n\n <!-- Image preview thumbnail -->\n @if (file.isImage && showPreview && file.previewUrl) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__thumb-btn\"\n [attr.aria-label]=\"'platform.datacore.fileupload.preview_image' | translate\"\n (click)=\"openPreviewModal(file, $event)\"\n >\n <img\n class=\"sdc-fileupload__thumb\"\n [src]=\"file.previewUrl\"\n [alt]=\"file.name\"\n width=\"40\"\n height=\"40\"\n loading=\"lazy\"\n />\n </button>\n }\n\n <!-- File type icon (non-image) -->\n @if (!file.isImage || !showPreview) {\n <div class=\"sdc-fileupload__file-icon\" aria-hidden=\"true\">\n <i class=\"fas fa-file-alt\"></i>\n </div>\n }\n\n <!-- File info -->\n <div class=\"sdc-fileupload__file-info\">\n <span class=\"sdc-fileupload__file-name\" [title]=\"file.name\">{{ file.name }}</span>\n <span class=\"sdc-fileupload__file-size\">{{ formatFileSize(file.size) }}</span>\n </div>\n\n <!-- File actions -->\n <div class=\"sdc-fileupload__file-actions\">\n @if (file.isImage && allowImageModal && showPreview && file.previewUrl) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__action-btn\"\n [attr.aria-label]=\"'platform.datacore.fileupload.preview_image' | translate\"\n (click)=\"openPreviewModal(file, $event)\"\n >\n <i class=\"fas fa-eye\" aria-hidden=\"true\"></i>\n </button>\n }\n\n @if (allowDownload && (file.url || file.previewUrl)) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__action-btn\"\n [attr.aria-label]=\"'platform.datacore.fileupload.download_file' | translate\"\n (click)=\"downloadFile(file, $event)\"\n >\n <i class=\"fas fa-download\" aria-hidden=\"true\"></i>\n </button>\n }\n\n @if (allowRemove && !disabled) {\n <button\n type=\"button\"\n class=\"sdc-fileupload__action-btn sdc-fileupload__action-btn--remove\"\n [attr.aria-label]=\"('platform.datacore.fileupload.remove_file' | translate) + ' ' + file.name\"\n (click)=\"removeFile(file, $event)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n </li>\n }\n </ul>\n }\n\n <!-- Helper text -->\n @if (helperText && !isInvalid) {\n <small [id]=\"helperId\" class=\"sdc-fileupload__helper\">\n {{ helperTextValue | translate }}\n </small>\n }\n\n <!-- Error message -->\n @if (isInvalid && errorMessage) {\n <small\n [id]=\"errorId\"\n class=\"sdc-fileupload__error\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ errorMessageValue | translate }}\n </small>\n }\n</div>\n\n<!-- Image preview modal -->\n@if (previewFile) {\n <sdc-modal\n [visible]=\"previewModalVisible\"\n [header]=\"previewFile.name\"\n [closable]=\"true\"\n [appendToBody]=\"true\"\n width=\"auto\"\n (visibleChange)=\"!$event && closePreviewModal()\"\n (hidden)=\"closePreviewModal()\"\n >\n <img\n class=\"sdc-fileupload__preview-img\"\n [src]=\"previewFile.previewUrl\"\n [alt]=\"previewFile.name\"\n width=\"800\"\n height=\"600\"\n />\n </sdc-modal>\n}\n", styles: [":host{display:block}.sdc-fileupload{display:flex;flex-direction:column;gap:.35rem}.sdc-fileupload__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-fileupload__label{display:inline-flex;align-items:center;gap:var(--sdc-form-required-ml);padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);font-size:14px;font-weight:500;line-height:var(--sdc-form-label-lh);color:var(--sdc-text-default);cursor:pointer}.sdc-fileupload__required{color:var(--sdc-form-required-color, var(--sdc-error-color, #d98888));font-weight:400}.sdc-fileupload__native-input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;clip:rect(0 0 0 0);pointer-events:none}.sdc-fileupload__dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;min-height:120px;padding:1.5rem 1rem;border:2px dashed var(--sdc-formfield-default-border, #cccccc);border-radius:var(--sdc-formfield-border-radius, 4px);background-color:var(--sdc-formfield-default-bg, #ffffff);color:var(--sdc-text-muted, #6b7280);cursor:pointer;font-family:inherit;text-align:center;transition:border-color var(--sdc-transition-fast, .18s ease),background-color var(--sdc-transition-fast, .18s ease);outline:none;width:100%}.sdc-fileupload__dropzone--drag-over{border-color:var(--sdc-formfield-focus-color, #428bca);background-color:#428bca17}.sdc-fileupload__dropzone:focus-visible{box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 3px rgba(0, 123, 255, .15))}.sdc-fileupload--disabled .sdc-fileupload__dropzone{cursor:not-allowed;background-color:var(--sdc-formfield-disabled-bg, transparent);opacity:.6;pointer-events:none}.sdc-fileupload--invalid .sdc-fileupload__dropzone{border-color:var(--sdc-formfield-invalid-border, #d98888)}.sdc-fileupload__dropzone:hover:not(:disabled),.sdc-fileupload__dropzone:focus-visible:not(:disabled){border-color:var(--sdc-formfield-focus-color, #428bca);background-color:#428bca0d}.sdc-fileupload--invalid .sdc-fileupload__dropzone:focus-visible{box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-fileupload__dropzone-icon{font-size:2rem;color:var(--sdc-formfield-default-border, #cccccc);transition:color var(--sdc-transition-fast, .18s ease)}.sdc-fileupload__dropzone--drag-over .sdc-fileupload__dropzone-icon,.sdc-fileupload__dropzone:hover .sdc-fileupload__dropzone-icon{color:var(--sdc-formfield-focus-color, #428bca)}.sdc-fileupload__dropzone-text{font-size:14px;font-weight:500;color:var(--sdc-text-default)}.sdc-fileupload__dropzone-hint{font-size:12px;color:var(--sdc-text-muted, #6b7280)}.sdc-fileupload__btn{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .85rem;height:var(--sdc-formfield-default-height, 34px);border:1px solid var(--sdc-formfield-default-border, #cccccc);border-radius:var(--sdc-formfield-border-radius, 4px);background-color:var(--sdc-button-bg, #eceeef);color:var(--sdc-text-default);font-size:14px;font-family:inherit;cursor:pointer;transition:var(--sdc-button-bg-hover-transition, background-color .2s ease-out);outline:none}.sdc-fileupload__btn:focus-visible{box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 3px rgba(0, 123, 255, .15));border-color:var(--sdc-formfield-focus-color, #428bca)}.sdc-fileupload__btn:disabled{cursor:not-allowed;opacity:.6}.sdc-fileupload__btn:hover:not(:disabled){background-color:var(--sdc-button-bg-hover, #e6e6e6)}.sdc-fileupload__btn-icon{font-size:13px;color:var(--sdc-button-icon-default, #333333)}.sdc-fileupload__file-list{list-style:none;margin:.25rem 0 0;padding:0;display:flex;flex-direction:column;gap:.4rem}.sdc-fileupload__file-item{display:flex;align-items:center;gap:.65rem;padding:.4rem .65rem;border:1px solid var(--sdc-surface-border-color, #dedce5);border-radius:var(--sdc-formfield-border-radius, 4px);background-color:var(--sdc-surface-bg, #ffffff);transition:box-shadow var(--sdc-transition-fast, .18s ease)}.sdc-fileupload__file-item:hover{box-shadow:var(--sdc-shadow-sm, 0 2px 8px rgba(0, 0, 0, .08))}.sdc-fileupload__thumb-btn{padding:0;border:none;background:transparent;cursor:pointer;border-radius:var(--sdc-formfield-border-radius, 4px);overflow:hidden;flex:0 0 auto;outline:none}.sdc-fileupload__thumb-btn:focus-visible{box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 3px rgba(0, 123, 255, .15))}.sdc-fileupload__thumb{width:40px;height:40px;object-fit:cover;display:block;border-radius:var(--sdc-formfield-border-radius, 4px)}.sdc-fileupload__file-icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background-color:var(--sdc-button-bg, #eceeef);border-radius:var(--sdc-formfield-border-radius, 4px);color:var(--sdc-text-muted, #6b7280);font-size:16px;flex:0 0 auto}.sdc-fileupload__file-info{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}.sdc-fileupload__file-name{font-size:13px;font-weight:500;color:var(--sdc-text-default);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sdc-fileupload__file-size{font-size:12px;color:var(--sdc-text-muted, #6b7280)}.sdc-fileupload__file-actions{display:flex;align-items:center;gap:.2rem;flex:0 0 auto}.sdc-fileupload__action-btn{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid transparent;border-radius:var(--sdc-formfield-border-radius, 4px);background:transparent;color:var(--sdc-text-muted, #6b7280);font-size:13px;cursor:pointer;transition:background-color var(--sdc-transition-fast, .18s ease),color var(--sdc-transition-fast, .18s ease);outline:none}.sdc-fileupload__action-btn:focus-visible{box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 3px rgba(0, 123, 255, .15));border-color:var(--sdc-formfield-focus-color, #428bca)}.sdc-fileupload__action-btn:hover{background-color:var(--sdc-button-bg, #eceeef);color:var(--sdc-text-default)}.sdc-fileupload__action-btn--remove:hover{background-color:#d988881f;color:var(--sdc-error-color, #d98888)}.sdc-fileupload__helper{font-size:12px;color:var(--sdc-text-muted, #6b7280);margin-top:.1rem}.sdc-fileupload__error{font-size:12px;color:var(--sdc-error-color, #d98888);margin-top:.1rem}.sdc-fileupload__preview-img{max-width:100%;max-height:70vh;display:block;margin:0 auto;border-radius:var(--sdc-formfield-border-radius, 4px)}.sdc-fileupload--disabled .sdc-fileupload__label{cursor:not-allowed;opacity:.7}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}\n"] }]
263
+ }], propDecorators: { nativeInput: [{
264
+ type: ViewChild,
265
+ args: ['nativeInput']
266
+ }], label: [{
267
+ type: Input
268
+ }], required: [{
269
+ type: Input
270
+ }], disabled: [{
271
+ type: Input
272
+ }], multiple: [{
273
+ type: Input
274
+ }], accept: [{
275
+ type: Input
276
+ }], maxFileSize: [{
277
+ type: Input
278
+ }], helperText: [{
279
+ type: Input
280
+ }], errorMessage: [{
281
+ type: Input
282
+ }], mode: [{
283
+ type: Input
284
+ }], showPreview: [{
285
+ type: Input
286
+ }], allowDownload: [{
287
+ type: Input
288
+ }], allowRemove: [{
289
+ type: Input
290
+ }], allowImageModal: [{
291
+ type: Input
292
+ }], invalid: [{
293
+ type: Input
294
+ }], placeholder: [{
295
+ type: Input
296
+ }], files: [{
297
+ type: Input
298
+ }], filesChange: [{
299
+ type: Output
300
+ }], fileSelected: [{
301
+ type: Output
302
+ }], fileRemoved: [{
303
+ type: Output
304
+ }], fileDownload: [{
305
+ type: Output
306
+ }], filePreview: [{
307
+ type: Output
308
+ }], validationError: [{
309
+ type: Output
310
+ }] } });
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2ZpbGV1cGxvYWQvZmlsZXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2ZpbGV1cGxvYWQvZmlsZXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUNMLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLG9CQUFvQixFQUNwQixzQkFBc0IsR0FDdkIsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBRS9DLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVuQixTQUFTLGNBQWM7SUFDckIsVUFBVSxJQUFJLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsb0JBQW9CLFNBQVMsVUFBVSxFQUFFLENBQUM7QUFDdEQsQ0FBQztBQVdELE1BQU0sT0FBTyxtQkFBbUI7SUFDSixXQUFXLENBQWdDO0lBRTVELEtBQUssR0FBbUIsS0FBSyxDQUFDO0lBQzlCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixRQUFRLEdBQUcs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QUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNqRSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBdUIsRUFBRSxLQUFZO1FBQ2hELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQzNDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FB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O2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFTyxLQUFLO3NCQUFqQixLQUFLO2dCQVFJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBuZXh0U2VxdWVudGlhbElkIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZC51dGlsJztcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgRmlsZVVwbG9hZE1vZGUsIFNkY0ZpbGVVcGxvYWRFcnJvciwgU2RjRmlsZVVwbG9hZEZpbGUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL2ZpbGV1cGxvYWQudHlwZSc7XG5pbXBvcnQge1xuICBGSUxFVVBMT0FEX0RFRkFVTFRfQUNDRVBULFxuICBGSUxFVVBMT0FEX0RFRkFVTFRfTUFYX1NJWkUsXG4gIEZJTEVVUExPQURfRVJST1JfTUVTU0FHRVMsXG4gIEZJTEVVUExPQURfSURfUFJFRklYLFxuICBGSUxFVVBMT0FEX0lNQUdFX1RZUEVTLFxufSBmcm9tICcuLi8uLi9jb3JlL2NvbnN0YW50cy9maWxldXBsb2FkLmNvbnN0JztcblxubGV0IF9pZENvdW50ZXIgPSAwO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUZpbGVJZCgpOiBzdHJpbmcge1xuICBfaWRDb3VudGVyICs9IDE7XG4gIHJldHVybiBgJHtGSUxFVVBMT0FEX0lEX1BSRUZJWH0tZmlsZS0ke19pZENvdW50ZXJ9YDtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLWZpbGV1cGxvYWQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIE1vZGFsQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGV1cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmlsZXVwbG9hZC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ25hdGl2ZUlucHV0JykgbmF0aXZlSW5wdXQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9IEZJTEVVUExPQURfREVGQVVMVF9BQ0NFUFQ7XG4gIEBJbnB1dCgpIG1heEZpbGVTaXplOiBudW1iZXIgPSBGSUxFVVBMT0FEX0RFRkFVTFRfTUFYX1NJWkU7XG4gIEBJbnB1dCgpIGhlbHBlclRleHQ6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgQElucHV0KCkgbW9kZTogRmlsZVVwbG9hZE1vZGUgPSAnZHJvcHpvbmUnO1xuICBASW5wdXQoKSBzaG93UHJldmlldyA9IHRydWU7XG4gIEBJbnB1dCgpIGFsbG93RG93bmxvYWQgPSB0cnVlO1xuICBASW5wdXQoKSBhbGxvd1JlbW92ZSA9IHRydWU7XG4gIEBJbnB1dCgpIGFsbG93SW1hZ2VNb2RhbCA9IHRydWU7XG4gIEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAncGxhdGZvcm0uZGF0YWNvcmUuZmlsZXVwbG9hZC5wbGFjZWhvbGRlcic7XG5cbiAgQElucHV0KCkgc2V0IGZpbGVzKHZhbDogU2RjRmlsZVVwbG9hZEZpbGVbXSkge1xuICAgIHRoaXMuX2ZpbGVzID0gdmFsID8/IFtdO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIGdldCBmaWxlcygpOiBTZGNGaWxlVXBsb2FkRmlsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXM7XG4gIH1cblxuICBAT3V0cHV0KCkgZmlsZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNkY0ZpbGVVcGxvYWRGaWxlW10+KCk7XG4gIEBPdXRwdXQoKSBmaWxlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNkY0ZpbGVVcGxvYWRGaWxlPigpO1xuICBAT3V0cHV0KCkgZmlsZVJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNkY0ZpbGVVcGxvYWRGaWxlPigpO1xuICBAT3V0cHV0KCkgZmlsZURvd25sb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxTZGNGaWxlVXBsb2FkRmlsZT4oKTtcbiAgQE91dHB1dCgpIGZpbGVQcmV2aWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxTZGNGaWxlVXBsb2FkRmlsZT4oKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8U2RjRmlsZVVwbG9hZEVycm9yPigpO1xuXG4gIHJlYWRvbmx5IGNvbXBvbmVudElkID0gbmV4dFNlcXVlbnRpYWxJZChGSUxFVVBMT0FEX0lEX1BSRUZJWCk7XG4gIHJlYWRvbmx5IGlucHV0SWQgPSBgJHt0aGlzLmNvbXBvbmVudElkfS1pbnB1dGA7XG4gIHJlYWRvbmx5IGhlbHBlcklkID0gYCR7dGhpcy5jb21wb25lbnRJZH0taGVscGVyYDtcbiAgcmVhZG9ubHkgZXJyb3JJZCA9IGAke3RoaXMuY29tcG9uZW50SWR9LWVycm9yYDtcblxuICBpc0RyYWdPdmVyID0gZmFsc2U7XG4gIHByZXZpZXdNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgcHJldmlld0ZpbGU6IFNkY0ZpbGVVcGxvYWRGaWxlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfZmlsZXM6IFNkY0ZpbGVVcGxvYWRGaWxlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIG9iamVjdFVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgZ2V0IGhhc0ZpbGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9maWxlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGxhYmVsVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5sYWJlbCA9PT0gJ3N0cmluZycgPyB0aGlzLmxhYmVsIDogJyc7XG4gIH1cblxuICBnZXQgaGVscGVyVGV4dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLmhlbHBlclRleHQgPT09ICdzdHJpbmcnID8gdGhpcy5oZWxwZXJUZXh0IDogJyc7XG4gIH1cblxuICBnZXQgZXJyb3JNZXNzYWdlVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuZXJyb3JNZXNzYWdlID09PSAnc3RyaW5nJyA/IHRoaXMuZXJyb3JNZXNzYWdlIDogJyc7XG4gIH1cblxuICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQ7XG4gIH1cblxuICBnZXQgYXJpYURlc2NyaWJlZEJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5oZWxwZXJUZXh0VmFsdWUpIHtcbiAgICAgIGlkcy5wdXNoKHRoaXMuaGVscGVySWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0ludmFsaWQgJiYgdGhpcy5lcnJvck1lc3NhZ2VWYWx1ZSkge1xuICAgICAgaWRzLnB1c2godGhpcy5lcnJvcklkKTtcbiAgICB9XG4gICAgcmV0dXJuIGlkcy5sZW5ndGggPyBpZHMuam9pbignICcpIDogbnVsbDtcbiAgfVxuXG4gIGdldCBpc0Ryb3B6b25lTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZHJvcHpvbmUnO1xuICB9XG5cbiAgZ2V0IGlzQnV0dG9uTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnYnV0dG9uJztcbiAgfVxuXG4gIGdldCBpc0NvbXBhY3RNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdjb21wYWN0JztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub2JqZWN0VXJscy5mb3JFYWNoKHVybCA9PiBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCkpO1xuICB9XG5cbiAgb3BlbkZpbGVQaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5uYXRpdmVJbnB1dD8ubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgb25OYXRpdmVDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoIWlucHV0LmZpbGVzPy5sZW5ndGgpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5wcm9jZXNzRmlsZXMoQXJyYXkuZnJvbShpbnB1dC5maWxlcykpO1xuICAgIGlucHV0LnZhbHVlID0gJyc7XG4gIH1cblxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkgeyB0aGlzLmlzRHJhZ092ZXIgPSB0cnVlOyB9XG4gIH1cblxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzRHJhZ092ZXIgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzRHJhZ092ZXIgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XG4gICAgaWYgKGZpbGVzPy5sZW5ndGgpIHsgdGhpcy5wcm9jZXNzRmlsZXMoQXJyYXkuZnJvbShmaWxlcykpOyB9XG4gIH1cblxuICBvbkRyb3B6b25lS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm9wZW5GaWxlUGlja2VyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRmlsZShmaWxlOiBTZGNGaWxlVXBsb2FkRmlsZSwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgaWYgKGZpbGUucHJldmlld1VybCAmJiB0aGlzLm9iamVjdFVybHMuaW5jbHVkZXMoZmlsZS5wcmV2aWV3VXJsKSkge1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChmaWxlLnByZXZpZXdVcmwpO1xuICAgICAgdGhpcy5vYmplY3RVcmxzID0gdGhpcy5vYmplY3RVcmxzLmZpbHRlcih1ID0+IHUgIT09IGZpbGUucHJldmlld1VybCk7XG4gICAgfVxuICAgIHRoaXMuX2ZpbGVzID0gdGhpcy5fZmlsZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmlsZS5pZCk7XG4gICAgdGhpcy5maWxlc0NoYW5nZS5lbWl0KFsuLi50aGlzLl9maWxlc10pO1xuICAgIHRoaXMuZmlsZVJlbW92ZWQuZW1pdChmaWxlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGRvd25sb2FkRmlsZShmaWxlOiBTZGNGaWxlVXBsb2FkRmlsZSwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5maWxlRG93bmxvYWQuZW1pdChmaWxlKTtcbiAgICBpZiAoZmlsZS51cmwgfHwgZmlsZS5wcmV2aWV3VXJsKSB7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgYS5ocmVmID0gZmlsZS51cmwgPz8gZmlsZS5wcmV2aWV3VXJsID8/ICcnO1xuICAgICAgYS5kb3dubG9hZCA9IGZpbGUubmFtZTtcbiAgICAgIGEuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBvcGVuUHJldmlld01vZGFsKGZpbGU6IFNkY0ZpbGVVcGxvYWRGaWxlLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIWZpbGUuaXNJbWFnZSB8fCAhdGhpcy5hbGxvd0ltYWdlTW9kYWwpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5wcmV2aWV3RmlsZSA9IGZpbGU7XG4gICAgdGhpcy5wcmV2aWV3TW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmZpbGVQcmV2aWV3LmVtaXQoZmlsZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjbG9zZVByZXZpZXdNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpZXdNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnByZXZpZXdGaWxlID0gbnVsbDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChieXRlcyA8IDEwMjQpIHsgcmV0dXJuIGAke2J5dGVzfSBCYDsgfVxuICAgIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0KSB7IHJldHVybiBgJHsoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmA7IH1cbiAgICByZXR1cm4gYCR7KGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKX0gTUJgO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRmlsZXMocmF3RmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRvQWRkID0gdGhpcy5tdWx0aXBsZSA/IHJhd0ZpbGVzIDogcmF3RmlsZXMuc2xpY2UoMCwgMSk7XG4gICAgdG9BZGQuZm9yRWFjaCgocmF3KSA9PiB0aGlzLnByb2Nlc3NTaW5nbGVGaWxlKHJhdykpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2luZ2xlRmlsZShyYXc6IEZpbGUpOiB2b2lkIHtcbiAgICBjb25zdCB0eXBlRXJyb3IgPSB0aGlzLnZhbGlkYXRlVHlwZShyYXcpO1xuICAgIGlmICh0eXBlRXJyb3IpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLmVtaXQodHlwZUVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2l6ZUVycm9yID0gdGhpcy52YWxpZGF0ZVNpemUocmF3KTtcbiAgICBpZiAoc2l6ZUVycm9yKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5lbWl0KHNpemVFcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNJbWFnZSA9IEZJTEVVUExPQURfSU1BR0VfVFlQRVMuaW5jbHVkZXMocmF3LnR5cGUpO1xuICAgIGxldCBwcmV2aWV3VXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGlzSW1hZ2UgJiYgdGhpcy5zaG93UHJldmlldykge1xuICAgICAgcHJldmlld1VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwocmF3KTtcbiAgICAgIHRoaXMub2JqZWN0VXJscy5wdXNoKHByZXZpZXdVcmwpO1xuICAgIH1cblxuICAgIGNvbnN0IHNkY0ZpbGU6IFNkY0ZpbGVVcGxvYWRGaWxlID0ge1xuICAgICAgaWQ6IGdlbmVyYXRlRmlsZUlkKCksXG4gICAgICBuYW1lOiByYXcubmFtZSxcbiAgICAgIHNpemU6IHJhdy5zaXplLFxuICAgICAgdHlwZTogcmF3LnR5cGUsXG4gICAgICBmaWxlOiByYXcsXG4gICAgICBwcmV2aWV3VXJsLFxuICAgICAgaXNJbWFnZSxcbiAgICB9O1xuXG4gICAgdGhpcy5fZmlsZXMgPSB0aGlzLm11bHRpcGxlID8gWy4uLnRoaXMuX2ZpbGVzLCBzZGNGaWxlXSA6IFtzZGNGaWxlXTtcbiAgICB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQoWy4uLnRoaXMuX2ZpbGVzXSk7XG4gICAgdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChzZGNGaWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVUeXBlKGZpbGU6IEZpbGUpOiBTZGNGaWxlVXBsb2FkRXJyb3IgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuYWNjZXB0IHx8IHRoaXMuYWNjZXB0ID09PSAnKi8qJykgeyByZXR1cm4gbnVsbDsgfVxuICAgIGNvbnN0IGFjY2VwdGVkID0gdGhpcy5hY2NlcHQuc3BsaXQoJywnKS5tYXAodCA9PiB0LnRyaW0oKSk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGFjY2VwdGVkLnNvbWUocGF0dGVybiA9PiB7XG4gICAgICBpZiAocGF0dGVybiA9PT0gJyovKicpIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGlmIChwYXR0ZXJuLmVuZHNXaXRoKCcvKicpKSB7IHJldHVybiBmaWxlLnR5cGUuc3RhcnRzV2l0aChwYXR0ZXJuLnJlcGxhY2UoJy8qJywgJy8nKSk7IH1cbiAgICAgIGlmIChwYXR0ZXJuLnN0YXJ0c1dpdGgoJy4nKSkgeyByZXR1cm4gZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgocGF0dGVybi50b0xvd2VyQ2FzZSgpKTsgfVxuICAgICAgcmV0dXJuIGZpbGUudHlwZSA9PT0gcGF0dGVybjtcbiAgICB9KTtcbiAgICBpZiAobWF0Y2hlcykgeyByZXR1cm4gbnVsbDsgfVxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZmlsZVR5cGUnLFxuICAgICAgbWVzc2FnZTogRklMRVVQTE9BRF9FUlJPUl9NRVNTQUdFUy5maWxlVHlwZSxcbiAgICAgIGZpbGUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVTaXplKGZpbGU6IEZpbGUpOiBTZGNGaWxlVXBsb2FkRXJyb3IgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMubWF4RmlsZVNpemUgfHwgZmlsZS5zaXplIDw9IHRoaXMubWF4RmlsZVNpemUpIHsgcmV0dXJuIG51bGw7IH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2ZpbGVTaXplJyxcbiAgICAgIG1lc3NhZ2U6IEZJTEVVUExPQURfRVJST1JfTUVTU0FHRVMuZmlsZVNpemUsXG4gICAgICBmaWxlLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJzZGMtZmlsZXVwbG9hZFwiXG4gIFtjbGFzcy5zZGMtZmlsZXVwbG9hZC0tZHJvcHpvbmVdPVwiaXNEcm9wem9uZU1vZGVcIlxuICBbY2xhc3Muc2RjLWZpbGV1cGxvYWQtLWJ1dHRvbl09XCJpc0J1dHRvbk1vZGVcIlxuICBbY2xhc3Muc2RjLWZpbGV1cGxvYWQtLWNvbXBhY3RdPVwiaXNDb21wYWN0TW9kZVwiXG4gIFtjbGFzcy5zZGMtZmlsZXVwbG9hZC0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbY2xhc3Muc2RjLWZpbGV1cGxvYWQtLWludmFsaWRdPVwiaXNJbnZhbGlkXCJcbiAgW2NsYXNzLnNkYy1maWxldXBsb2FkLS1oYXMtZmlsZXNdPVwiaGFzRmlsZXNcIlxuPlxuICA8IS0tIExhYmVsIHJvdyAtLT5cbiAgQGlmIChsYWJlbCkge1xuICAgIDxkaXYgY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fbGFiZWwtcm93XCI+XG4gICAgICA8bGFiZWwgW2Zvcl09XCJpbnB1dElkXCIgY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fbGFiZWxcIj5cbiAgICAgICAge3sgbGFiZWxUZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgIEBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1maWxldXBsb2FkX19yZXF1aXJlZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPio8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkucmVxdWlyZWRfZmllbGQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBIaWRkZW4gbmF0aXZlIGZpbGUgaW5wdXQgLS0+XG4gIDxpbnB1dFxuICAgICNuYXRpdmVJbnB1dFxuICAgIGNsYXNzPVwic2RjLWZpbGV1cGxvYWRfX25hdGl2ZS1pbnB1dFwiXG4gICAgdHlwZT1cImZpbGVcIlxuICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxUZXh0ID8gKGxhYmVsVGV4dCB8IHRyYW5zbGF0ZSkgOiAoJ3BsYXRmb3JtLmRhdGFjb3JlLmZpbGV1cGxvYWQuc2VsZWN0X2ZpbGUnIHwgdHJhbnNsYXRlKVwiXG4gICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZCA/ICd0cnVlJyA6IG51bGxcIlxuICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJpc0ludmFsaWQgPyAndHJ1ZScgOiBudWxsXCJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmliZWRCeVwiXG4gICAgKGNoYW5nZSk9XCJvbk5hdGl2ZUNoYW5nZSgkZXZlbnQpXCJcbiAgLz5cblxuICA8IS0tIERyb3B6b25lIGFyZWEgLS0+XG4gIEBpZiAoaXNEcm9wem9uZU1vZGUpIHtcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwic2RjLWZpbGV1cGxvYWRfX2Ryb3B6b25lXCJcbiAgICAgIFtjbGFzcy5zZGMtZmlsZXVwbG9hZF9fZHJvcHpvbmUtLWRyYWctb3Zlcl09XCJpc0RyYWdPdmVyXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5kYXRhY29yZS5maWxldXBsb2FkLmRyb3B6b25lX2xhYmVsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAoY2xpY2spPVwib3BlbkZpbGVQaWNrZXIoKVwiXG4gICAgICAoa2V5ZG93bik9XCJvbkRyb3B6b25lS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1jbG91ZC11cGxvYWQtYWx0IHNkYy1maWxldXBsb2FkX19kcm9wem9uZS1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fZHJvcHpvbmUtdGV4dFwiPnt7IHBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fZHJvcHpvbmUtaGludFwiPlxuICAgICAgICB7eyAncGxhdGZvcm0uZGF0YWNvcmUuZmlsZXVwbG9hZC5kcm9wem9uZV9oaW50JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICB9XG5cbiAgPCEtLSBCdXR0b24tb25seSBtb2RlIC0tPlxuICBAaWYgKGlzQnV0dG9uTW9kZSB8fCBpc0NvbXBhY3RNb2RlKSB7XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInNkYy1maWxldXBsb2FkX19idG5cIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmRhdGFjb3JlLmZpbGV1cGxvYWQuYXR0YWNoX2ZpbGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgIChjbGljayk9XCJvcGVuRmlsZVBpY2tlcigpXCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1wYXBlcmNsaXAgc2RjLWZpbGV1cGxvYWRfX2J0bi1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAge3sgJ3BsYXRmb3JtLmRhdGFjb3JlLmZpbGV1cGxvYWQuYXR0YWNoX2ZpbGUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIH1cblxuICA8IS0tIEZpbGUgbGlzdCAtLT5cbiAgQGlmIChoYXNGaWxlcykge1xuICAgIDx1bFxuICAgICAgY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fZmlsZS1saXN0XCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmRhdGFjb3JlLmZpbGV1cGxvYWQuZmlsZV9saXN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgQGZvciAoZmlsZSBvZiBmaWxlczsgdHJhY2sgZmlsZS5pZCkge1xuICAgICAgICA8bGkgY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fZmlsZS1pdGVtXCI+XG5cbiAgICAgICAgICA8IS0tIEltYWdlIHByZXZpZXcgdGh1bWJuYWlsIC0tPlxuICAgICAgICAgIEBpZiAoZmlsZS5pc0ltYWdlICYmIHNob3dQcmV2aWV3ICYmIGZpbGUucHJldmlld1VybCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fdGh1bWItYnRuXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm0uZGF0YWNvcmUuZmlsZXVwbG9hZC5wcmV2aWV3X2ltYWdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuUHJldmlld01vZGFsKGZpbGUsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fdGh1bWJcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZmlsZS5wcmV2aWV3VXJsXCJcbiAgICAgICAgICAgICAgICBbYWx0XT1cImZpbGUubmFtZVwiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCI0MFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiNDBcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gRmlsZSB0eXBlIGljb24gKG5vbi1pbWFnZSkgLS0+XG4gICAgICAgICAgQGlmICghZmlsZS5pc0ltYWdlIHx8ICFzaG93UHJldmlldykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1maWxldXBsb2FkX19maWxlLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsZS1hbHRcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIEZpbGUgaW5mbyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLWZpbGV1cGxvYWRfX2ZpbGUtaW5mb1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fZmlsZS1uYW1lXCIgW3RpdGxlXT1cImZpbGUubmFtZVwiPnt7IGZpbGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWZpbGV1cGxvYWRfX2ZpbGUtc2l6ZVwiPnt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEZpbGUgYWN0aW9ucyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLWZpbGV1cGxvYWRfX2ZpbGUtYWN0aW9uc1wiPlxuICAgICAgICAgICAgQGlmIChmaWxlLmlzSW1hZ2UgJiYgYWxsb3dJbWFnZU1vZGFsICYmIHNob3dQcmV2aWV3ICYmIGZpbGUucHJldmlld1VybCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fYWN0aW9uLWJ0blwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm0uZGF0YWNvcmUuZmlsZXVwbG9hZC5wcmV2aWV3X2ltYWdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5QcmV2aWV3TW9kYWwoZmlsZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1leWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGFsbG93RG93bmxvYWQgJiYgKGZpbGUudXJsIHx8IGZpbGUucHJldmlld1VybCkpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWZpbGV1cGxvYWRfX2FjdGlvbi1idG5cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmRhdGFjb3JlLmZpbGV1cGxvYWQuZG93bmxvYWRfZmlsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEZpbGUoZmlsZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoYWxsb3dSZW1vdmUgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy1maWxldXBsb2FkX19hY3Rpb24tYnRuIHNkYy1maWxldXBsb2FkX19hY3Rpb24tYnRuLS1yZW1vdmVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKCdwbGF0Zm9ybS5kYXRhY29yZS5maWxldXBsb2FkLnJlbW92ZV9maWxlJyB8IHRyYW5zbGF0ZSkgKyAnICcgKyBmaWxlLm5hbWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKGZpbGUsICRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgfVxuICAgIDwvdWw+XG4gIH1cblxuICA8IS0tIEhlbHBlciB0ZXh0IC0tPlxuICBAaWYgKGhlbHBlclRleHQgJiYgIWlzSW52YWxpZCkge1xuICAgIDxzbWFsbCBbaWRdPVwiaGVscGVySWRcIiBjbGFzcz1cInNkYy1maWxldXBsb2FkX19oZWxwZXJcIj5cbiAgICAgIHt7IGhlbHBlclRleHRWYWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc21hbGw+XG4gIH1cblxuICA8IS0tIEVycm9yIG1lc3NhZ2UgLS0+XG4gIEBpZiAoaXNJbnZhbGlkICYmIGVycm9yTWVzc2FnZSkge1xuICAgIDxzbWFsbFxuICAgICAgW2lkXT1cImVycm9ySWRcIlxuICAgICAgY2xhc3M9XCJzZGMtZmlsZXVwbG9hZF9fZXJyb3JcIlxuICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgPlxuICAgICAge3sgZXJyb3JNZXNzYWdlVmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NtYWxsPlxuICB9XG48L2Rpdj5cblxuPCEtLSBJbWFnZSBwcmV2aWV3IG1vZGFsIC0tPlxuQGlmIChwcmV2aWV3RmlsZSkge1xuICA8c2RjLW1vZGFsXG4gICAgW3Zpc2libGVdPVwicHJldmlld01vZGFsVmlzaWJsZVwiXG4gICAgW2hlYWRlcl09XCJwcmV2aWV3RmlsZS5uYW1lXCJcbiAgICBbY2xvc2FibGVdPVwidHJ1ZVwiXG4gICAgW2FwcGVuZFRvQm9keV09XCJ0cnVlXCJcbiAgICB3aWR0aD1cImF1dG9cIlxuICAgICh2aXNpYmxlQ2hhbmdlKT1cIiEkZXZlbnQgJiYgY2xvc2VQcmV2aWV3TW9kYWwoKVwiXG4gICAgKGhpZGRlbik9XCJjbG9zZVByZXZpZXdNb2RhbCgpXCJcbiAgPlxuICAgIDxpbWdcbiAgICAgIGNsYXNzPVwic2RjLWZpbGV1cGxvYWRfX3ByZXZpZXctaW1nXCJcbiAgICAgIFtzcmNdPVwicHJldmlld0ZpbGUucHJldmlld1VybFwiXG4gICAgICBbYWx0XT1cInByZXZpZXdGaWxlLm5hbWVcIlxuICAgICAgd2lkdGg9XCI4MDBcIlxuICAgICAgaGVpZ2h0PVwiNjAwXCJcbiAgICAvPlxuICA8L3NkYy1tb2RhbD5cbn1cbiJdfQ==
@@ -247,7 +247,7 @@ export class FiltersComponent {
247
247
  return [model];
248
248
  }
249
249
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
250
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FiltersComponent, isStandalone: true, selector: "sdc-filters", inputs: { data: "data", config: "config", loading: "loading", filterColumnClass: "filterColumnClass" }, outputs: { filtered: "filtered" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"grid min-h-10rem\" role=\"search\"\n [attr.aria-label]=\"'platform.datacore.accessibility.filters_section' | translate\">\n @if (config!.search!.show !== false) {\n <div class=\"col-12 md:col-12 lg:col-6 xl:col-4\">\n <sdc-searchbox [disabled]=\"loading\" [label]=\"config!.search!.label || ''\"\n [placeholder]=\"config!.search!.placeholder || ''\" [size]=\"'small'\"\n [triggerMode]=\"config!.search!.triggerMode || 'auto'\" (onSearch)=\"onSearch($event)\" (onClear)=\"onClear()\">\n </sdc-searchbox>\n </div>\n }\n @if (config!.filters!.length) {\n @for (def of config.filters; track def.key) {\n <div class=\"sdc-filters__filter-item\" [ngClass]=\"filterItemColumnClass\" [class.mb-3]=\"isMobile\">\n <sdc-combobox width=\"100%\" [label]=\"def.label || ''\" [disabled]=\"loading\" [placeholder]=\"def.placeholder || ''\"\n [multiple]=\"(def.type ?? 'multiselect') === 'multiselect'\" [options]=\"filterOptionsMap[def.key]\"\n [(ngModel)]=\"selectedValues[def.key]\" (ngModelChange)=\"onComboChange(def.key, $event)\" [attr.aria-label]=\"\n def.label || \n def.placeholder || \n ('platform.datacore.accessibility.filter_field' | translate)\n \">\n </sdc-combobox>\n </div>\n }\n }\n</section>\n", styles: [".bg-disabled{background-color:var(--p-inputtext-disabled-background)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent"], outputs: ["onSelectedItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
250
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FiltersComponent, isStandalone: true, selector: "sdc-filters", inputs: { data: "data", config: "config", loading: "loading", filterColumnClass: "filterColumnClass" }, outputs: { filtered: "filtered" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"grid min-h-10rem\" role=\"search\"\n [attr.aria-label]=\"'platform.datacore.accessibility.filters_section' | translate\">\n @if (config!.search!.show !== false) {\n <div class=\"col-12 md:col-12 lg:col-6 xl:col-4\">\n <sdc-searchbox [disabled]=\"loading\" [label]=\"config!.search!.label || ''\"\n [placeholder]=\"config!.search!.placeholder || ''\" [size]=\"'small'\"\n [triggerMode]=\"config!.search!.triggerMode || 'auto'\" (onSearch)=\"onSearch($event)\" (onClear)=\"onClear()\">\n </sdc-searchbox>\n </div>\n }\n @if (config!.filters!.length) {\n @for (def of config.filters; track def.key) {\n <div class=\"sdc-filters__filter-item\" [ngClass]=\"filterItemColumnClass\" [class.mb-3]=\"isMobile\">\n <sdc-combobox width=\"100%\" [label]=\"def.label || ''\" [disabled]=\"loading\" [placeholder]=\"def.placeholder || ''\"\n [multiple]=\"(def.type ?? 'multiselect') === 'multiselect'\" [options]=\"filterOptionsMap[def.key]\"\n [(ngModel)]=\"selectedValues[def.key]\" (ngModelChange)=\"onComboChange(def.key, $event)\"\n [infoTooltip]=\"def.infoTooltip || ''\"\n [infoTooltipAllowHtml]=\"def.infoTooltipAllowHtml ?? false\"\n [infoTooltipPosition]=\"def.infoTooltipPosition ?? 'right'\"\n [attr.aria-label]=\"\n def.label || \n def.placeholder || \n ('platform.datacore.accessibility.filter_field' | translate)\n \">\n </sdc-combobox>\n </div>\n }\n }\n</section>\n", styles: [".bg-disabled{background-color:var(--p-inputtext-disabled-background)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "infoTooltipAllowHtml"], outputs: ["onSelectedItem", "panelClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
251
251
  }
252
252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FiltersComponent, decorators: [{
253
253
  type: Component,
@@ -257,7 +257,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
257
257
  TranslateModule,
258
258
  SearchboxComponent,
259
259
  ComboboxComponent
260
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<section class=\"grid min-h-10rem\" role=\"search\"\n [attr.aria-label]=\"'platform.datacore.accessibility.filters_section' | translate\">\n @if (config!.search!.show !== false) {\n <div class=\"col-12 md:col-12 lg:col-6 xl:col-4\">\n <sdc-searchbox [disabled]=\"loading\" [label]=\"config!.search!.label || ''\"\n [placeholder]=\"config!.search!.placeholder || ''\" [size]=\"'small'\"\n [triggerMode]=\"config!.search!.triggerMode || 'auto'\" (onSearch)=\"onSearch($event)\" (onClear)=\"onClear()\">\n </sdc-searchbox>\n </div>\n }\n @if (config!.filters!.length) {\n @for (def of config.filters; track def.key) {\n <div class=\"sdc-filters__filter-item\" [ngClass]=\"filterItemColumnClass\" [class.mb-3]=\"isMobile\">\n <sdc-combobox width=\"100%\" [label]=\"def.label || ''\" [disabled]=\"loading\" [placeholder]=\"def.placeholder || ''\"\n [multiple]=\"(def.type ?? 'multiselect') === 'multiselect'\" [options]=\"filterOptionsMap[def.key]\"\n [(ngModel)]=\"selectedValues[def.key]\" (ngModelChange)=\"onComboChange(def.key, $event)\" [attr.aria-label]=\"\n def.label || \n def.placeholder || \n ('platform.datacore.accessibility.filter_field' | translate)\n \">\n </sdc-combobox>\n </div>\n }\n }\n</section>\n", styles: [".bg-disabled{background-color:var(--p-inputtext-disabled-background)}\n"] }]
260
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<section class=\"grid min-h-10rem\" role=\"search\"\n [attr.aria-label]=\"'platform.datacore.accessibility.filters_section' | translate\">\n @if (config!.search!.show !== false) {\n <div class=\"col-12 md:col-12 lg:col-6 xl:col-4\">\n <sdc-searchbox [disabled]=\"loading\" [label]=\"config!.search!.label || ''\"\n [placeholder]=\"config!.search!.placeholder || ''\" [size]=\"'small'\"\n [triggerMode]=\"config!.search!.triggerMode || 'auto'\" (onSearch)=\"onSearch($event)\" (onClear)=\"onClear()\">\n </sdc-searchbox>\n </div>\n }\n @if (config!.filters!.length) {\n @for (def of config.filters; track def.key) {\n <div class=\"sdc-filters__filter-item\" [ngClass]=\"filterItemColumnClass\" [class.mb-3]=\"isMobile\">\n <sdc-combobox width=\"100%\" [label]=\"def.label || ''\" [disabled]=\"loading\" [placeholder]=\"def.placeholder || ''\"\n [multiple]=\"(def.type ?? 'multiselect') === 'multiselect'\" [options]=\"filterOptionsMap[def.key]\"\n [(ngModel)]=\"selectedValues[def.key]\" (ngModelChange)=\"onComboChange(def.key, $event)\"\n [infoTooltip]=\"def.infoTooltip || ''\"\n [infoTooltipAllowHtml]=\"def.infoTooltipAllowHtml ?? false\"\n [infoTooltipPosition]=\"def.infoTooltipPosition ?? 'right'\"\n [attr.aria-label]=\"\n def.label || \n def.placeholder || \n ('platform.datacore.accessibility.filter_field' | translate)\n \">\n </sdc-combobox>\n </div>\n }\n }\n</section>\n", styles: [".bg-disabled{background-color:var(--p-inputtext-disabled-background)}\n"] }]
261
261
  }], propDecorators: { data: [{
262
262
  type: Input,
263
263
  args: [{ required: true }]
@@ -271,4 +271,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
271
271
  }], filtered: [{
272
272
  type: Output
273
273
  }] } });
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFheEQsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFJWixNQUFNLEVBQ04sdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFFdkIsTUFBTSwyQkFBMkIsR0FBRyxtQ0FBbUMsQ0FBQztBQWlCeEUsTUFBTSxPQUFPLGdCQUFnQjtJQUNBLElBQUksR0FBdUIsRUFBRSxDQUFDO0lBQzlCLE1BQU0sQ0FBaUI7SUFDekMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixpQkFBaUIsR0FBRywyQkFBMkIsQ0FBQztJQUMvQyxRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7SUFFbEQsUUFBUSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ3RCLGdCQUFnQixHQUFpQyxFQUFFLENBQUM7SUFDcEQsY0FBYyxHQUFvQyxFQUFFLENBQUM7SUFFOUMsVUFBVSxHQUFHLE1BQU0sQ0FB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O2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hib3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvbGF5b3V0LnV0aWwnO1xuaW1wb3J0IHsgdHlwZSBTZWFyY2hUcmlnZ2VyTW9kZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvc2VhcmNoYm94LnR5cGUnO1xuaW1wb3J0IHtcbiAgdHlwZSBGaWx0ZXJhYmxlUmVjb3JkLFxuICB0eXBlIEZpbHRlcnNDb25maWcsXG4gIHR5cGUgRmlsdGVyRGVmLFxuICB0eXBlIEZpbHRlclNlbGVjdGlvbixcbiAgdHlwZSBGaWx0ZXJTZWxlY3Rpb25WYWx1ZSxcbiAgdHlwZSBGaWVsZEFjY2Vzc29yLFxuICB0eXBlIExhYmVsQWNjZXNzb3IsXG4gIHR5cGUgVmFsdWVBY2Nlc3NvclxufSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL2ZpbHRlcnMudHlwZSc7XG5pbXBvcnQgeyB0eXBlIE9wdGlvbkl0ZW0sIHR5cGUgT3B0aW9uVmFsdWUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgc2lnbmFsLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IERFRkFVTFRfRklMVEVSX0NPTFVNTl9DTEFTUyA9ICdjb2wtMTIgbWQ6Y29sLTYgbGc6Y29sLTMgeGw6Y29sLTInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtZmlsdGVycycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFNlYXJjaGJveENvbXBvbmVudCxcbiAgICBDb21ib2JveENvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGRhdGE6IEZpbHRlcmFibGVSZWNvcmRbXSA9IFtdO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb25maWchOiBGaWx0ZXJzQ29uZmlnO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZpbHRlckNvbHVtbkNsYXNzID0gREVGQVVMVF9GSUxURVJfQ09MVU1OX0NMQVNTO1xuICBAT3V0cHV0KCkgZmlsdGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlcmFibGVSZWNvcmRbXT4oKTtcblxuICBwcm90ZWN0ZWQgaXNNb2JpbGUgPSBpc01vYmlsZSgpO1xuICBwcm90ZWN0ZWQgZmlsdGVyT3B0aW9uc01hcDogUmVjb3JkPHN0cmluZywgT3B0aW9uSXRlbVtdPiA9IHt9O1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj4gPSB7fTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaFRlcm0gPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGdldCBmaWx0ZXJJdGVtQ29sdW1uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJDb2x1bW5DbGFzcz8udHJpbSgpIHx8IERFRkFVTFRfRklMVEVSX0NPTFVNTl9DTEFTUztcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5idWlsZE9wdGlvbnNNYXAoKTtcbiAgICB0aGlzLmVuc3VyZU1vZGVscygpO1xuICAgIHRoaXMuYXBwbHlQcmVzZXRzRnJvbUNvbmZpZygpO1xuICAgIHRoaXMuYXBwbHlJbml0aWFsU3RhdGVGcm9tQ29uZmlnKCk7XG4gICAgdGhpcy5hcHBseUFuZEVtaXRBc3luYygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgb25TZWFyY2godGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldCgodGVybSA/PyAnJykudHJpbSgpKTtcbiAgICB0aGlzLmFwcGx5QW5kRW1pdEFzeW5jKCk7XG4gIH1cblxuICBvbkNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoJycpO1xuICAgIHRoaXMuYXBwbHlBbmRFbWl0QXN5bmMoKTtcbiAgfVxuXG4gIG9uQ29tYm9DaGFuZ2Uoa2V5OiBzdHJpbmcsIG1vZGVsOiBGaWx0ZXJTZWxlY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzW2tleV0gPSBtb2RlbDtcbiAgICB0aGlzLmFwcGx5QW5kRW1pdEFzeW5jKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcnMoKTogRmlsdGVyRGVmW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uZmlsdGVycyA/PyBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VhcmNoQ2ZnKCk6IHtcbiAgICBmaWVsZHM6IEZpZWxkQWNjZXNzb3JbXTtcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICB0cmlnZ2VyTW9kZT86IFNlYXJjaFRyaWdnZXJNb2RlIHwgJ2F1dG8nO1xuICAgIHNob3c/OiBib29sZWFuO1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCBzID0gdGhpcy5jb25maWc/LnNlYXJjaDtcbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBzPy5maWVsZHMgPz8gW10sXG4gICAgICBwbGFjZWhvbGRlcjogcz8ucGxhY2Vob2xkZXIsXG4gICAgICB0cmlnZ2VyTW9kZTogcz8udHJpZ2dlck1vZGUgPz8gJ2F1dG8nLFxuICAgICAgc2hvdzogcz8uc2hvdyA/PyB0cnVlLFxuICAgICAgbGFiZWw6IHM/LmxhYmVsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uaW5pdGlhbFN0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkUGF0aChvYmo6IHVua25vd24sIHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlPHVua25vd24+KChhY2MsIHBhcnQpID0+IHRoaXMucmVhZFJlY29yZFZhbHVlKGFjYywgcGFydCksIG9iaik7XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZWNvcmRWYWx1ZShzb3VyY2U6IHVua25vd24sIGtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gIH1cblxuICBwcml2YXRlIGdldEZpZWxkVmFsdWUocm93OiBGaWx0ZXJhYmxlUmVjb3JkLCBhY2M6IEZpZWxkQWNjZXNzb3IpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjYyA9PT0gJ2Z1bmN0aW9uJyA/IGFjYyhyb3cpIDogdGhpcy5yZWFkUGF0aChyb3csIGFjYyk7XG4gIH1cblxuICBwcml2YXRlIGdldExhYmVsKHZhbDogdW5rbm93biwgYWNjPzogTGFiZWxBY2Nlc3Nvcik6IHN0cmluZyB7XG4gICAgaWYgKCFhY2MpIHtcbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMucmVhZFJlY29yZFZhbHVlKHZhbCwgJ3RleHQnKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMucmVhZFJlY29yZFZhbHVlKHZhbCwgJ2xhYmVsJyk7XG4gICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBTdHJpbmcodmFsKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiBhY2MgPT09ICdmdW5jdGlvbicgPyBhY2ModmFsKSA6IHRoaXMucmVhZFBhdGgodmFsLCBhY2MpO1xuICAgIHJldHVybiBTdHJpbmcocmVzb2x2ZWQgPz8gdmFsID8/ICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWUodmFsOiB1bmtub3duLCBhY2M/OiBWYWx1ZUFjY2Vzc29yKTogdW5rbm93biB7XG4gICAgaWYgKCFhY2MpIHtcbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLnJlYWRSZWNvcmRWYWx1ZSh2YWwsICd2YWx1ZScpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvblZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBvcHRpb25WYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbklkID0gdGhpcy5yZWFkUmVjb3JkVmFsdWUodmFsLCAnaWQnKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBhY2MgPT09ICdmdW5jdGlvbicgPyBhY2ModmFsKSA6IHRoaXMucmVhZFBhdGgodmFsLCBhY2MpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b09wdGlvblZhbHVlKHZhbHVlOiB1bmtub3duKTogT3B0aW9uVmFsdWUge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHRvT3B0aW9uSXRlbSh2YWx1ZTogdW5rbm93biwgbGFiZWxBY2M/OiBMYWJlbEFjY2Vzc29yLCB2YWx1ZUFjYz86IFZhbHVlQWNjZXNzb3IpOiBPcHRpb25JdGVtIHtcbiAgICBjb25zdCBpY29uID0gdGhpcy5yZWFkUmVjb3JkVmFsdWUodmFsdWUsICdpY29uJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogdGhpcy5nZXRMYWJlbCh2YWx1ZSwgbGFiZWxBY2MpLFxuICAgICAgdmFsdWU6IHRoaXMudG9PcHRpb25WYWx1ZSh0aGlzLmdldFZhbHVlKHZhbHVlLCB2YWx1ZUFjYykpLFxuICAgICAgaWNvbjogdHlwZW9mIGljb24gPT09ICdzdHJpbmcnID8gaWNvbiA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkT3B0aW9uc01hcCgpOiB2b2lkIHtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxzdHJpbmcsIE9wdGlvbkl0ZW1bXT4gPSB7fTtcbiAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhID8/IFtdO1xuXG4gICAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5nZXRGaWx0ZXJzKCkpIHtcbiAgICAgIG1hcFtkZWYua2V5XSA9IHRoaXMuY29sbGVjdE9wdGlvbnNGb3JGaWx0ZXIoZGVmLCByb3dzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlck9wdGlvbnNNYXAgPSBtYXA7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZU1vZGVscygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGRlZiBvZiB0aGlzLmdldEZpbHRlcnMoKSkge1xuICAgICAgY29uc3QgbXVsdGlwbGUgPSAoZGVmLnR5cGUgPz8gJ211bHRpc2VsZWN0JykgPT09ICdtdWx0aXNlbGVjdCc7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVzW2RlZi5rZXldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc1tkZWYua2V5XSA9IG11bHRpcGxlID8gW10gOiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eVNlbGVjdGlvbihzZWxlY3Rpb246IEZpbHRlclNlbGVjdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBzZWxlY3Rpb24ubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3Rpb24gPT0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVTZWxlY3Rpb24oc2VsZWN0aW9uOiBGaWx0ZXJTZWxlY3Rpb24pOiBGaWx0ZXJTZWxlY3Rpb24ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHNlbGVjdGlvbikgPyBzZWxlY3Rpb24uc2xpY2UoKSA6IHNlbGVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQcmVzZXRzRnJvbUNvbmZpZygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGRlZiBvZiB0aGlzLmdldEZpbHRlcnMoKSkge1xuICAgICAgY29uc3QgcHJlc2V0ID0gZGVmLnByZXNldDtcblxuICAgICAgaWYgKHByZXNldCAhPSBudWxsICYmIHRoaXMuaXNFbXB0eVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkVmFsdWVzW2RlZi5rZXldKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzW2RlZi5rZXldID0gdGhpcy5jbG9uZVNlbGVjdGlvbihwcmVzZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbml0aWFsU3RhdGVGcm9tQ29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IGluaXQgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSgpO1xuXG4gICAgaWYgKCFpbml0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbml0LnNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoaW5pdC5zZWFyY2gudHJpbSgpKTtcbiAgICB9XG5cbiAgICBpZiAoaW5pdC5maWx0ZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbml0LmZpbHRlcnMpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNba10gPSB0aGlzLmNsb25lU2VsZWN0aW9uKHYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplVG9WYWx1ZXMoZGVmOiBGaWx0ZXJEZWYsIG1vZGVsOiBGaWx0ZXJTZWxlY3Rpb24pOiBPcHRpb25WYWx1ZVtdIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnRvU2VsZWN0aW9uQXJyYXkobW9kZWwpO1xuXG4gICAgcmV0dXJuIHZhbHVlc1xuICAgICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBGaWx0ZXJTZWxlY3Rpb25WYWx1ZSA9PiB2YWx1ZSAhPSBudWxsKVxuICAgICAgLm1hcCgodmFsdWUpID0+ICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdGhpcy5nZXRWYWx1ZSh2YWx1ZSwgZGVmLm9wdGlvblZhbHVlKSA6IHZhbHVlKSlcbiAgICAgIC5tYXAoKHZhbHVlKSA9PiB0aGlzLnRvT3B0aW9uVmFsdWUodmFsdWUpKVxuICAgICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gdmFsdWUgIT0gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHJvd01hdGNoZXNGaWx0ZXJzKHJvdzogRmlsdGVyYWJsZVJlY29yZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpbHRlcnMoKS5ldmVyeSgoZGVmKSA9PiB0aGlzLnJvd01hdGNoZXNGaWx0ZXIocm93LCBkZWYpKTtcbiAgfVxuXG4gIHByaXZhdGUgcm93TWF0Y2hlc1NlYXJjaChyb3c6IEZpbHRlcmFibGVSZWNvcmQsIHRlcm06IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGVybSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5nZXRTZWFyY2hDZmcoKS5maWVsZHM7XG5cbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmaWVsZHMuc29tZSgoZmllbGQpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRGaWVsZFZhbHVlKHJvdywgZmllbGQpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmpvaW4oJyAnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlID8/ICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAuaW5jbHVkZXModGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVGaWx0ZXJlZCgpOiBGaWx0ZXJhYmxlUmVjb3JkW10ge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLnNlYXJjaFRlcm0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAodGhpcy5kYXRhID8/IFtdKS5maWx0ZXIoKHJvdykgPT4gdGhpcy5yb3dNYXRjaGVzU2VhcmNoKHJvdywgdGVybSkgJiYgdGhpcy5yb3dNYXRjaGVzRmlsdGVycyhyb3cpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlBbmRFbWl0QXN5bmMoKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb21wdXRlRmlsdGVyZWQoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkLmVtaXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdE9wdGlvbnNGb3JGaWx0ZXIoZGVmOiBGaWx0ZXJEZWYsIHJvd3M6IEZpbHRlcmFibGVSZWNvcmRbXSk6IE9wdGlvbkl0ZW1bXSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8T3B0aW9uVmFsdWUsIE9wdGlvbkl0ZW0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICB0aGlzLmFkZFJvd09wdGlvbnNUb01hcChzZWVuLCByb3csIGRlZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oc2Vlbi52YWx1ZXMoKSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFJvd09wdGlvbnNUb01hcChzZWVuOiBNYXA8T3B0aW9uVmFsdWUsIE9wdGlvbkl0ZW0+LCByb3c6IEZpbHRlcmFibGVSZWNvcmQsIGRlZjogRmlsdGVyRGVmKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy50b0FycmF5VmFsdWUodGhpcy5nZXRGaWVsZFZhbHVlKHJvdywgZGVmLmZpZWxkKSk7XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy50b09wdGlvbkl0ZW0odmFsdWUsIGRlZi5vcHRpb25MYWJlbCwgZGVmLm9wdGlvblZhbHVlKTtcblxuICAgICAgICBpZiAoIXNlZW4uaGFzKG9wdGlvbi52YWx1ZSkpIHtcbiAgICAgICAgICBzZWVuLnNldChvcHRpb24udmFsdWUsIG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvd01hdGNoZXNGaWx0ZXIocm93OiBGaWx0ZXJhYmxlUmVjb3JkLCBkZWY6IEZpbHRlckRlZik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy5ub3JtYWxpemVUb1ZhbHVlcyhkZWYsIHRoaXMuc2VsZWN0ZWRWYWx1ZXNbZGVmLmtleV0pO1xuXG4gICAgaWYgKCFzZWxlY3RlZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd1ZhbHVlcyA9IHRoaXMudG9BcnJheVZhbHVlKHRoaXMuZ2V0RmllbGRWYWx1ZShyb3csIGRlZi5maWVsZCkpXG4gICAgICAubWFwKCh2YWx1ZSkgPT4gdGhpcy50b09wdGlvblZhbHVlKHRoaXMuZ2V0VmFsdWUodmFsdWUsIGRlZi5vcHRpb25WYWx1ZSkpKVxuICAgICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gdmFsdWUgIT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcm93VmFsdWVzLnNvbWUoKHJvd1ZhbHVlKSA9PiBzZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhyb3dWYWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0FycmF5VmFsdWUodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TZWxlY3Rpb25BcnJheShtb2RlbDogRmlsdGVyU2VsZWN0aW9uKTogRmlsdGVyU2VsZWN0aW9uVmFsdWVbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWwpKSB7XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsID09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW21vZGVsXTtcbiAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJncmlkIG1pbi1oLTEwcmVtXCIgcm9sZT1cInNlYXJjaFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkuZmlsdGVyc19zZWN0aW9uJyB8IHRyYW5zbGF0ZVwiPlxuICBAaWYgKGNvbmZpZyEuc2VhcmNoIS5zaG93ICE9PSBmYWxzZSkge1xuICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtNiB4bDpjb2wtNFwiPlxuICAgIDxzZGMtc2VhcmNoYm94IFtkaXNhYmxlZF09XCJsb2FkaW5nXCIgW2xhYmVsXT1cImNvbmZpZyEuc2VhcmNoIS5sYWJlbCB8fCAnJ1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnIS5zZWFyY2ghLnBsYWNlaG9sZGVyIHx8ICcnXCIgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICBbdHJpZ2dlck1vZGVdPVwiY29uZmlnIS5zZWFyY2ghLnRyaWdnZXJNb2RlIHx8ICdhdXRvJ1wiIChvblNlYXJjaCk9XCJvblNlYXJjaCgkZXZlbnQpXCIgKG9uQ2xlYXIpPVwib25DbGVhcigpXCI+XG4gICAgPC9zZGMtc2VhcmNoYm94PlxuICA8L2Rpdj5cbiAgfVxuICBAaWYgKGNvbmZpZyEuZmlsdGVycyEubGVuZ3RoKSB7XG4gIEBmb3IgKGRlZiBvZiBjb25maWcuZmlsdGVyczsgdHJhY2sgZGVmLmtleSkge1xuICA8ZGl2IGNsYXNzPVwic2RjLWZpbHRlcnNfX2ZpbHRlci1pdGVtXCIgW25nQ2xhc3NdPVwiZmlsdGVySXRlbUNvbHVtbkNsYXNzXCIgW2NsYXNzLm1iLTNdPVwiaXNNb2JpbGVcIj5cbiAgICA8c2RjLWNvbWJvYm94IHdpZHRoPVwiMTAwJVwiIFtsYWJlbF09XCJkZWYubGFiZWwgfHwgJydcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIFtwbGFjZWhvbGRlcl09XCJkZWYucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgW211bHRpcGxlXT1cIihkZWYudHlwZSA/PyAnbXVsdGlzZWxlY3QnKSA9PT0gJ211bHRpc2VsZWN0J1wiIFtvcHRpb25zXT1cImZpbHRlck9wdGlvbnNNYXBbZGVmLmtleV1cIlxuICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZhbHVlc1tkZWYua2V5XVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29tYm9DaGFuZ2UoZGVmLmtleSwgJGV2ZW50KVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBkZWYubGFiZWwgfHwgXG4gICAgICAgICAgICBkZWYucGxhY2Vob2xkZXIgfHwgXG4gICAgICAgICAgICAoJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkuZmlsdGVyX2ZpZWxkJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICBcIj5cbiAgICA8L3NkYy1jb21ib2JveD5cbiAgPC9kaXY+XG4gIH1cbiAgfVxuPC9zZWN0aW9uPlxuIl19
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFheEQsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFJWixNQUFNLEVBQ04sdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFFdkIsTUFBTSwyQkFBMkIsR0FBRyxtQ0FBbUMsQ0FBQztBQWlCeEUsTUFBTSxPQUFPLGdCQUFnQjtJQUNBLElBQUksR0FBdUIsRUFBRSxDQUFDO0lBQzlCLE1BQU0sQ0FBaUI7SUFDekMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixpQkFBaUIsR0FBRywyQkFBMkIsQ0FBQztJQUMvQyxRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7SUFFbEQsUUFBUSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ3RCLGdCQUFnQixHQUFpQyxFQUFFLENBQUM7SUFDcEQsY0FBYyxHQUFvQyxFQUFFLENBQUM7SUFFOUMsVUFBVSxHQUFHLE1BQU0sQ0FB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O2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hib3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvbGF5b3V0LnV0aWwnO1xuaW1wb3J0IHsgdHlwZSBTZWFyY2hUcmlnZ2VyTW9kZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvc2VhcmNoYm94LnR5cGUnO1xuaW1wb3J0IHtcbiAgdHlwZSBGaWx0ZXJhYmxlUmVjb3JkLFxuICB0eXBlIEZpbHRlcnNDb25maWcsXG4gIHR5cGUgRmlsdGVyRGVmLFxuICB0eXBlIEZpbHRlclNlbGVjdGlvbixcbiAgdHlwZSBGaWx0ZXJTZWxlY3Rpb25WYWx1ZSxcbiAgdHlwZSBGaWVsZEFjY2Vzc29yLFxuICB0eXBlIExhYmVsQWNjZXNzb3IsXG4gIHR5cGUgVmFsdWVBY2Nlc3NvclxufSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL2ZpbHRlcnMudHlwZSc7XG5pbXBvcnQgeyB0eXBlIE9wdGlvbkl0ZW0sIHR5cGUgT3B0aW9uVmFsdWUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgc2lnbmFsLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IERFRkFVTFRfRklMVEVSX0NPTFVNTl9DTEFTUyA9ICdjb2wtMTIgbWQ6Y29sLTYgbGc6Y29sLTMgeGw6Y29sLTInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtZmlsdGVycycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFNlYXJjaGJveENvbXBvbmVudCxcbiAgICBDb21ib2JveENvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGRhdGE6IEZpbHRlcmFibGVSZWNvcmRbXSA9IFtdO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb25maWchOiBGaWx0ZXJzQ29uZmlnO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZpbHRlckNvbHVtbkNsYXNzID0gREVGQVVMVF9GSUxURVJfQ09MVU1OX0NMQVNTO1xuICBAT3V0cHV0KCkgZmlsdGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlcmFibGVSZWNvcmRbXT4oKTtcblxuICBwcm90ZWN0ZWQgaXNNb2JpbGUgPSBpc01vYmlsZSgpO1xuICBwcm90ZWN0ZWQgZmlsdGVyT3B0aW9uc01hcDogUmVjb3JkPHN0cmluZywgT3B0aW9uSXRlbVtdPiA9IHt9O1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIEZpbHRlclNlbGVjdGlvbj4gPSB7fTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaFRlcm0gPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGdldCBmaWx0ZXJJdGVtQ29sdW1uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJDb2x1bW5DbGFzcz8udHJpbSgpIHx8IERFRkFVTFRfRklMVEVSX0NPTFVNTl9DTEFTUztcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5idWlsZE9wdGlvbnNNYXAoKTtcbiAgICB0aGlzLmVuc3VyZU1vZGVscygpO1xuICAgIHRoaXMuYXBwbHlQcmVzZXRzRnJvbUNvbmZpZygpO1xuICAgIHRoaXMuYXBwbHlJbml0aWFsU3RhdGVGcm9tQ29uZmlnKCk7XG4gICAgdGhpcy5hcHBseUFuZEVtaXRBc3luYygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgb25TZWFyY2godGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtLnNldCgodGVybSA/PyAnJykudHJpbSgpKTtcbiAgICB0aGlzLmFwcGx5QW5kRW1pdEFzeW5jKCk7XG4gIH1cblxuICBvbkNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoJycpO1xuICAgIHRoaXMuYXBwbHlBbmRFbWl0QXN5bmMoKTtcbiAgfVxuXG4gIG9uQ29tYm9DaGFuZ2Uoa2V5OiBzdHJpbmcsIG1vZGVsOiBGaWx0ZXJTZWxlY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzW2tleV0gPSBtb2RlbDtcbiAgICB0aGlzLmFwcGx5QW5kRW1pdEFzeW5jKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcnMoKTogRmlsdGVyRGVmW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uZmlsdGVycyA/PyBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VhcmNoQ2ZnKCk6IHtcbiAgICBmaWVsZHM6IEZpZWxkQWNjZXNzb3JbXTtcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICB0cmlnZ2VyTW9kZT86IFNlYXJjaFRyaWdnZXJNb2RlIHwgJ2F1dG8nO1xuICAgIHNob3c/OiBib29sZWFuO1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCBzID0gdGhpcy5jb25maWc/LnNlYXJjaDtcbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBzPy5maWVsZHMgPz8gW10sXG4gICAgICBwbGFjZWhvbGRlcjogcz8ucGxhY2Vob2xkZXIsXG4gICAgICB0cmlnZ2VyTW9kZTogcz8udHJpZ2dlck1vZGUgPz8gJ2F1dG8nLFxuICAgICAgc2hvdzogcz8uc2hvdyA/PyB0cnVlLFxuICAgICAgbGFiZWw6IHM/LmxhYmVsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uaW5pdGlhbFN0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkUGF0aChvYmo6IHVua25vd24sIHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlPHVua25vd24+KChhY2MsIHBhcnQpID0+IHRoaXMucmVhZFJlY29yZFZhbHVlKGFjYywgcGFydCksIG9iaik7XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZWNvcmRWYWx1ZShzb3VyY2U6IHVua25vd24sIGtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gIH1cblxuICBwcml2YXRlIGdldEZpZWxkVmFsdWUocm93OiBGaWx0ZXJhYmxlUmVjb3JkLCBhY2M6IEZpZWxkQWNjZXNzb3IpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjYyA9PT0gJ2Z1bmN0aW9uJyA/IGFjYyhyb3cpIDogdGhpcy5yZWFkUGF0aChyb3csIGFjYyk7XG4gIH1cblxuICBwcml2YXRlIGdldExhYmVsKHZhbDogdW5rbm93biwgYWNjPzogTGFiZWxBY2Nlc3Nvcik6IHN0cmluZyB7XG4gICAgaWYgKCFhY2MpIHtcbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMucmVhZFJlY29yZFZhbHVlKHZhbCwgJ3RleHQnKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMucmVhZFJlY29yZFZhbHVlKHZhbCwgJ2xhYmVsJyk7XG4gICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBTdHJpbmcodmFsKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiBhY2MgPT09ICdmdW5jdGlvbicgPyBhY2ModmFsKSA6IHRoaXMucmVhZFBhdGgodmFsLCBhY2MpO1xuICAgIHJldHVybiBTdHJpbmcocmVzb2x2ZWQgPz8gdmFsID8/ICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWUodmFsOiB1bmtub3duLCBhY2M/OiBWYWx1ZUFjY2Vzc29yKTogdW5rbm93biB7XG4gICAgaWYgKCFhY2MpIHtcbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLnJlYWRSZWNvcmRWYWx1ZSh2YWwsICd2YWx1ZScpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvblZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBvcHRpb25WYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbklkID0gdGhpcy5yZWFkUmVjb3JkVmFsdWUodmFsLCAnaWQnKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25JZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBhY2MgPT09ICdmdW5jdGlvbicgPyBhY2ModmFsKSA6IHRoaXMucmVhZFBhdGgodmFsLCBhY2MpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b09wdGlvblZhbHVlKHZhbHVlOiB1bmtub3duKTogT3B0aW9uVmFsdWUge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHRvT3B0aW9uSXRlbSh2YWx1ZTogdW5rbm93biwgbGFiZWxBY2M/OiBMYWJlbEFjY2Vzc29yLCB2YWx1ZUFjYz86IFZhbHVlQWNjZXNzb3IpOiBPcHRpb25JdGVtIHtcbiAgICBjb25zdCBpY29uID0gdGhpcy5yZWFkUmVjb3JkVmFsdWUodmFsdWUsICdpY29uJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogdGhpcy5nZXRMYWJlbCh2YWx1ZSwgbGFiZWxBY2MpLFxuICAgICAgdmFsdWU6IHRoaXMudG9PcHRpb25WYWx1ZSh0aGlzLmdldFZhbHVlKHZhbHVlLCB2YWx1ZUFjYykpLFxuICAgICAgaWNvbjogdHlwZW9mIGljb24gPT09ICdzdHJpbmcnID8gaWNvbiA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkT3B0aW9uc01hcCgpOiB2b2lkIHtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxzdHJpbmcsIE9wdGlvbkl0ZW1bXT4gPSB7fTtcbiAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhID8/IFtdO1xuXG4gICAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5nZXRGaWx0ZXJzKCkpIHtcbiAgICAgIG1hcFtkZWYua2V5XSA9IHRoaXMuY29sbGVjdE9wdGlvbnNGb3JGaWx0ZXIoZGVmLCByb3dzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlck9wdGlvbnNNYXAgPSBtYXA7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZU1vZGVscygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGRlZiBvZiB0aGlzLmdldEZpbHRlcnMoKSkge1xuICAgICAgY29uc3QgbXVsdGlwbGUgPSAoZGVmLnR5cGUgPz8gJ211bHRpc2VsZWN0JykgPT09ICdtdWx0aXNlbGVjdCc7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVzW2RlZi5rZXldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc1tkZWYua2V5XSA9IG11bHRpcGxlID8gW10gOiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eVNlbGVjdGlvbihzZWxlY3Rpb246IEZpbHRlclNlbGVjdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBzZWxlY3Rpb24ubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3Rpb24gPT0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVTZWxlY3Rpb24oc2VsZWN0aW9uOiBGaWx0ZXJTZWxlY3Rpb24pOiBGaWx0ZXJTZWxlY3Rpb24ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHNlbGVjdGlvbikgPyBzZWxlY3Rpb24uc2xpY2UoKSA6IHNlbGVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQcmVzZXRzRnJvbUNvbmZpZygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGRlZiBvZiB0aGlzLmdldEZpbHRlcnMoKSkge1xuICAgICAgY29uc3QgcHJlc2V0ID0gZGVmLnByZXNldDtcblxuICAgICAgaWYgKHByZXNldCAhPSBudWxsICYmIHRoaXMuaXNFbXB0eVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkVmFsdWVzW2RlZi5rZXldKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzW2RlZi5rZXldID0gdGhpcy5jbG9uZVNlbGVjdGlvbihwcmVzZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbml0aWFsU3RhdGVGcm9tQ29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IGluaXQgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSgpO1xuXG4gICAgaWYgKCFpbml0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbml0LnNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGVybS5zZXQoaW5pdC5zZWFyY2gudHJpbSgpKTtcbiAgICB9XG5cbiAgICBpZiAoaW5pdC5maWx0ZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbml0LmZpbHRlcnMpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNba10gPSB0aGlzLmNsb25lU2VsZWN0aW9uKHYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplVG9WYWx1ZXMoZGVmOiBGaWx0ZXJEZWYsIG1vZGVsOiBGaWx0ZXJTZWxlY3Rpb24pOiBPcHRpb25WYWx1ZVtdIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnRvU2VsZWN0aW9uQXJyYXkobW9kZWwpO1xuXG4gICAgcmV0dXJuIHZhbHVlc1xuICAgICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBGaWx0ZXJTZWxlY3Rpb25WYWx1ZSA9PiB2YWx1ZSAhPSBudWxsKVxuICAgICAgLm1hcCgodmFsdWUpID0+ICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdGhpcy5nZXRWYWx1ZSh2YWx1ZSwgZGVmLm9wdGlvblZhbHVlKSA6IHZhbHVlKSlcbiAgICAgIC5tYXAoKHZhbHVlKSA9PiB0aGlzLnRvT3B0aW9uVmFsdWUodmFsdWUpKVxuICAgICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gdmFsdWUgIT0gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHJvd01hdGNoZXNGaWx0ZXJzKHJvdzogRmlsdGVyYWJsZVJlY29yZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpbHRlcnMoKS5ldmVyeSgoZGVmKSA9PiB0aGlzLnJvd01hdGNoZXNGaWx0ZXIocm93LCBkZWYpKTtcbiAgfVxuXG4gIHByaXZhdGUgcm93TWF0Y2hlc1NlYXJjaChyb3c6IEZpbHRlcmFibGVSZWNvcmQsIHRlcm06IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGVybSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5nZXRTZWFyY2hDZmcoKS5maWVsZHM7XG5cbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmaWVsZHMuc29tZSgoZmllbGQpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRGaWVsZFZhbHVlKHJvdywgZmllbGQpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmpvaW4oJyAnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlID8/ICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAuaW5jbHVkZXModGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVGaWx0ZXJlZCgpOiBGaWx0ZXJhYmxlUmVjb3JkW10ge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLnNlYXJjaFRlcm0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAodGhpcy5kYXRhID8/IFtdKS5maWx0ZXIoKHJvdykgPT4gdGhpcy5yb3dNYXRjaGVzU2VhcmNoKHJvdywgdGVybSkgJiYgdGhpcy5yb3dNYXRjaGVzRmlsdGVycyhyb3cpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlBbmRFbWl0QXN5bmMoKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb21wdXRlRmlsdGVyZWQoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkLmVtaXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdE9wdGlvbnNGb3JGaWx0ZXIoZGVmOiBGaWx0ZXJEZWYsIHJvd3M6IEZpbHRlcmFibGVSZWNvcmRbXSk6IE9wdGlvbkl0ZW1bXSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8T3B0aW9uVmFsdWUsIE9wdGlvbkl0ZW0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICB0aGlzLmFkZFJvd09wdGlvbnNUb01hcChzZWVuLCByb3csIGRlZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oc2Vlbi52YWx1ZXMoKSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFJvd09wdGlvbnNUb01hcChzZWVuOiBNYXA8T3B0aW9uVmFsdWUsIE9wdGlvbkl0ZW0+LCByb3c6IEZpbHRlcmFibGVSZWNvcmQsIGRlZjogRmlsdGVyRGVmKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy50b0FycmF5VmFsdWUodGhpcy5nZXRGaWVsZFZhbHVlKHJvdywgZGVmLmZpZWxkKSk7XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy50b09wdGlvbkl0ZW0odmFsdWUsIGRlZi5vcHRpb25MYWJlbCwgZGVmLm9wdGlvblZhbHVlKTtcblxuICAgICAgICBpZiAoIXNlZW4uaGFzKG9wdGlvbi52YWx1ZSkpIHtcbiAgICAgICAgICBzZWVuLnNldChvcHRpb24udmFsdWUsIG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvd01hdGNoZXNGaWx0ZXIocm93OiBGaWx0ZXJhYmxlUmVjb3JkLCBkZWY6IEZpbHRlckRlZik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy5ub3JtYWxpemVUb1ZhbHVlcyhkZWYsIHRoaXMuc2VsZWN0ZWRWYWx1ZXNbZGVmLmtleV0pO1xuXG4gICAgaWYgKCFzZWxlY3RlZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd1ZhbHVlcyA9IHRoaXMudG9BcnJheVZhbHVlKHRoaXMuZ2V0RmllbGRWYWx1ZShyb3csIGRlZi5maWVsZCkpXG4gICAgICAubWFwKCh2YWx1ZSkgPT4gdGhpcy50b09wdGlvblZhbHVlKHRoaXMuZ2V0VmFsdWUodmFsdWUsIGRlZi5vcHRpb25WYWx1ZSkpKVxuICAgICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gdmFsdWUgIT0gbnVsbCk7XG5cbiAgICByZXR1cm4gcm93VmFsdWVzLnNvbWUoKHJvd1ZhbHVlKSA9PiBzZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhyb3dWYWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0FycmF5VmFsdWUodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TZWxlY3Rpb25BcnJheShtb2RlbDogRmlsdGVyU2VsZWN0aW9uKTogRmlsdGVyU2VsZWN0aW9uVmFsdWVbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWwpKSB7XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsID09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW21vZGVsXTtcbiAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJncmlkIG1pbi1oLTEwcmVtXCIgcm9sZT1cInNlYXJjaFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkuZmlsdGVyc19zZWN0aW9uJyB8IHRyYW5zbGF0ZVwiPlxuICBAaWYgKGNvbmZpZyEuc2VhcmNoIS5zaG93ICE9PSBmYWxzZSkge1xuICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtNiB4bDpjb2wtNFwiPlxuICAgIDxzZGMtc2VhcmNoYm94IFtkaXNhYmxlZF09XCJsb2FkaW5nXCIgW2xhYmVsXT1cImNvbmZpZyEuc2VhcmNoIS5sYWJlbCB8fCAnJ1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnIS5zZWFyY2ghLnBsYWNlaG9sZGVyIHx8ICcnXCIgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICBbdHJpZ2dlck1vZGVdPVwiY29uZmlnIS5zZWFyY2ghLnRyaWdnZXJNb2RlIHx8ICdhdXRvJ1wiIChvblNlYXJjaCk9XCJvblNlYXJjaCgkZXZlbnQpXCIgKG9uQ2xlYXIpPVwib25DbGVhcigpXCI+XG4gICAgPC9zZGMtc2VhcmNoYm94PlxuICA8L2Rpdj5cbiAgfVxuICBAaWYgKGNvbmZpZyEuZmlsdGVycyEubGVuZ3RoKSB7XG4gIEBmb3IgKGRlZiBvZiBjb25maWcuZmlsdGVyczsgdHJhY2sgZGVmLmtleSkge1xuICA8ZGl2IGNsYXNzPVwic2RjLWZpbHRlcnNfX2ZpbHRlci1pdGVtXCIgW25nQ2xhc3NdPVwiZmlsdGVySXRlbUNvbHVtbkNsYXNzXCIgW2NsYXNzLm1iLTNdPVwiaXNNb2JpbGVcIj5cbiAgICA8c2RjLWNvbWJvYm94IHdpZHRoPVwiMTAwJVwiIFtsYWJlbF09XCJkZWYubGFiZWwgfHwgJydcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIFtwbGFjZWhvbGRlcl09XCJkZWYucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgW211bHRpcGxlXT1cIihkZWYudHlwZSA/PyAnbXVsdGlzZWxlY3QnKSA9PT0gJ211bHRpc2VsZWN0J1wiIFtvcHRpb25zXT1cImZpbHRlck9wdGlvbnNNYXBbZGVmLmtleV1cIlxuICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZhbHVlc1tkZWYua2V5XVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29tYm9DaGFuZ2UoZGVmLmtleSwgJGV2ZW50KVwiXG4gICAgICBbaW5mb1Rvb2x0aXBdPVwiZGVmLmluZm9Ub29sdGlwIHx8ICcnXCJcbiAgICAgIFtpbmZvVG9vbHRpcEFsbG93SHRtbF09XCJkZWYuaW5mb1Rvb2x0aXBBbGxvd0h0bWwgPz8gZmFsc2VcIlxuICAgICAgW2luZm9Ub29sdGlwUG9zaXRpb25dPVwiZGVmLmluZm9Ub29sdGlwUG9zaXRpb24gPz8gJ3JpZ2h0J1wiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgZGVmLmxhYmVsIHx8IFxuICAgICAgICAgICAgZGVmLnBsYWNlaG9sZGVyIHx8IFxuICAgICAgICAgICAgKCdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LmZpbHRlcl9maWVsZCcgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgXCI+XG4gICAgPC9zZGMtY29tYm9ib3g+XG4gIDwvZGl2PlxuICB9XG4gIH1cbjwvc2VjdGlvbj5cbiJdfQ==