@sachin9822/reports-lib 0.0.148 → 0.0.150

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 (48) hide show
  1. package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +22 -8
  2. package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +254 -0
  3. package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +463 -0
  4. package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +33 -53
  5. package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +348 -0
  6. package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +28 -77
  7. package/esm2020/lib/models/accounting-report/accounting-report-entry-model.mjs +2 -0
  8. package/esm2020/lib/models/accounting-report/accounting-report-model.mjs +2 -0
  9. package/esm2020/lib/models/branch-activity-receive-report/branch-activity-receive.model.mjs +2 -0
  10. package/esm2020/lib/models/cancellation-transaction-report/cancellation-transaction.model.mjs +2 -0
  11. package/esm2020/lib/reports-lib.module.mjs +18 -5
  12. package/esm2020/lib/services/report.service.mjs +91 -1
  13. package/esm2020/lib/shared/export-generic.service.mjs +324 -0
  14. package/esm2020/lib/shared/export.service.mjs +2 -2
  15. package/esm2020/lib/shared/metadata/metadata.component.mjs +50 -0
  16. package/esm2020/lib/shared/page-size-selector/page-size-selector.component.mjs +2 -2
  17. package/esm2020/lib/shared/search-filter/search-filter.component.mjs +402 -23
  18. package/esm2020/lib/shared/shared.module.mjs +8 -6
  19. package/esm2020/public-api.mjs +7 -1
  20. package/esm2020/sachin9822-reports-lib.mjs +5 -0
  21. package/fesm2015/sachin9822-reports-lib.mjs +4054 -0
  22. package/fesm2015/sachin9822-reports-lib.mjs.map +1 -0
  23. package/fesm2020/sachin9822-reports-lib.mjs +4013 -0
  24. package/fesm2020/sachin9822-reports-lib.mjs.map +1 -0
  25. package/index.d.ts +1 -1
  26. package/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.d.ts +5 -2
  27. package/lib/components/accounting-report/accounting-report.component.d.ts +56 -0
  28. package/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.d.ts +52 -0
  29. package/lib/components/branch-activity-send-report/branch-activity-send-report.component.d.ts +4 -31
  30. package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +99 -0
  31. package/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.d.ts +4 -32
  32. package/lib/models/accounting-report/accounting-report-entry-model.d.ts +24 -0
  33. package/lib/models/accounting-report/accounting-report-model.d.ts +8 -0
  34. package/lib/models/branch-activity-receive-report/branch-activity-receive.model.d.ts +18 -0
  35. package/lib/models/cancellation-transaction-report/cancellation-transaction.model.d.ts +44 -0
  36. package/lib/reports-lib.module.d.ts +13 -10
  37. package/lib/services/report.service.d.ts +18 -0
  38. package/lib/shared/export-generic.service.d.ts +47 -0
  39. package/lib/shared/metadata/metadata.component.d.ts +24 -0
  40. package/lib/shared/search-filter/search-filter.component.d.ts +3 -0
  41. package/lib/shared/shared.module.d.ts +5 -3
  42. package/package.json +1 -1
  43. package/public-api.d.ts +6 -0
  44. package/esm2020/xpressmoney-reports-lib.mjs +0 -5
  45. package/fesm2015/xpressmoney-reports-lib.mjs +0 -2230
  46. package/fesm2015/xpressmoney-reports-lib.mjs.map +0 -1
  47. package/fesm2020/xpressmoney-reports-lib.mjs +0 -2200
  48. package/fesm2020/xpressmoney-reports-lib.mjs.map +0 -1
@@ -0,0 +1,324 @@
1
+ // export-generic.service.ts
2
+ import { Injectable } from '@angular/core';
3
+ import jsPDF from 'jspdf';
4
+ import 'jspdf-autotable';
5
+ import * as ExcelJS from 'exceljs';
6
+ import * as FileSaver from 'file-saver';
7
+ import * as i0 from "@angular/core";
8
+ export class GenericExportService {
9
+ constructor() {
10
+ this.pdfFontSize = 10;
11
+ this.pdfLineHeight = 7;
12
+ this.pdfLeftMargin = 15;
13
+ this.loadImageAsBase64('assets/reports-lib/assets/images/XMLogo.png').then(base64 => {
14
+ this.logoBase64 = base64;
15
+ }).catch(() => {
16
+ console.warn('Logo image failed to load');
17
+ });
18
+ }
19
+ loadImageAsBase64(imagePath) {
20
+ return new Promise((resolve, reject) => {
21
+ const img = new Image();
22
+ img.crossOrigin = 'anonymous';
23
+ img.src = imagePath;
24
+ img.onload = () => {
25
+ const scale = 6;
26
+ const canvas = document.createElement('canvas');
27
+ canvas.width = img.width * scale;
28
+ canvas.height = img.height * scale;
29
+ const ctx = canvas.getContext('2d');
30
+ if (ctx) {
31
+ ctx.scale(scale, scale);
32
+ ctx.drawImage(img, 0, 0);
33
+ resolve(canvas.toDataURL('image/png', 1.0));
34
+ }
35
+ else {
36
+ reject('Failed to get canvas context.');
37
+ }
38
+ };
39
+ img.onerror = () => reject('Failed to load image: ' + imagePath);
40
+ });
41
+ }
42
+ // ==================== PDF EXPORT ====================
43
+ async exportToPdf({ title, metadata, columns, data, options = {} }) {
44
+ const doc = new jsPDF({ orientation: 'landscape', unit: 'mm', format: [400, 210] });
45
+ const headers = ['Sr No', ...columns.map(c => c.headerName || c.field)];
46
+ let rows = [];
47
+ if (options.groupByKey && !Array.isArray(data)) {
48
+ for (const [group, items] of Object.entries(data)) {
49
+ rows.push([{ content: group, colSpan: headers.length, styles: { halign: 'left', fontStyle: 'bold' } }]);
50
+ rows.push(...this.prepareTableRows(items, columns, options));
51
+ }
52
+ }
53
+ else {
54
+ rows = this.prepareTableRows(data, columns, options);
55
+ }
56
+ // Add logo at top left if available
57
+ if (this.logoBase64) {
58
+ doc.addImage(this.logoBase64, 'PNG', 15, 10, 38.4, 17.5);
59
+ }
60
+ // Title
61
+ doc.setFontSize(15);
62
+ doc.setFont('helvetica', 'bold');
63
+ doc.text(title, doc.internal.pageSize.width / 2, 18, { align: 'center' });
64
+ // Metadata
65
+ let currentY = 32;
66
+ doc.setFontSize(this.pdfFontSize);
67
+ metadata.forEach(([label, value], i) => {
68
+ const y = currentY + i * this.pdfLineHeight;
69
+ doc.setFont('helvetica', 'bold');
70
+ const labelWithColon = label + ' :';
71
+ doc.text(labelWithColon, this.pdfLeftMargin, y);
72
+ const labelWidth = doc.getTextWidth(labelWithColon + ' ');
73
+ doc.setFont('helvetica', 'normal');
74
+ doc.text(value, this.pdfLeftMargin + labelWidth, y);
75
+ });
76
+ currentY += metadata.length * this.pdfLineHeight + 5;
77
+ // Table styling
78
+ const columnStyles = {};
79
+ headers.forEach((_, i) => columnStyles[i] = { cellWidth: 'auto' });
80
+ doc.autoTable({
81
+ head: [headers],
82
+ body: rows,
83
+ startY: currentY,
84
+ theme: 'grid',
85
+ headStyles: {
86
+ fillColor: [220, 220, 220],
87
+ textColor: 0,
88
+ fontStyle: 'bold',
89
+ fontSize: 9,
90
+ halign: 'center'
91
+ },
92
+ bodyStyles: {
93
+ fontSize: 8,
94
+ fillColor: [255, 255, 255],
95
+ textColor: [0, 0, 0]
96
+ },
97
+ styles: {
98
+ cellPadding: 2,
99
+ overflow: 'linebreak',
100
+ minCellHeight: 6
101
+ },
102
+ columnStyles
103
+ });
104
+ doc.save(title.replace(/\s/g, '-') + '.pdf');
105
+ }
106
+ // ========== EXCEL EXPORT ==========
107
+ async exportToExcel({ title, metadata, columns, data, options = {} }) {
108
+ const workbook = new ExcelJS.Workbook();
109
+ const worksheet = workbook.addWorksheet(title);
110
+ // Pre-calc
111
+ const headerLabels = ['Sr No', ...columns.map(col => col.headerName || col.field)];
112
+ const totalCols = headerLabels.length;
113
+ const titleStartCol = 4; // Title in 4th Cell
114
+ const titleColLetter = String.fromCharCode(64 + titleStartCol);
115
+ const titleMergeEnd = String.fromCharCode(64 + totalCols);
116
+ // --- Add logo in A1:C3, and make those cells tall
117
+ if (this.logoBase64) {
118
+ const base64Data = this.logoBase64.replace(/^data:image\/\w+;base64,/, '');
119
+ const imageId = workbook.addImage({
120
+ base64: base64Data,
121
+ extension: 'png',
122
+ });
123
+ worksheet.addImage(imageId, {
124
+ tl: { col: 0, row: 0 },
125
+ ext: { width: 145, height: 66 }
126
+ });
127
+ // Optionally, make rows 1-3 taller to fully display logo
128
+ worksheet.getRow(1).height = 24;
129
+ worksheet.getRow(2).height = 22;
130
+ worksheet.getRow(3).height = 22;
131
+ }
132
+ // --- Title in D1 merged up to end
133
+ worksheet.mergeCells(`${titleColLetter}1:${titleMergeEnd}1`);
134
+ const titleCell = worksheet.getRow(1).getCell(titleStartCol);
135
+ titleCell.value = title;
136
+ titleCell.font = { bold: true, size: 16 };
137
+ titleCell.alignment = { vertical: 'middle', horizontal: 'left' };
138
+ // --- Leave A2:C3 empty (for image), place metadata starting at row 4
139
+ let metaRowStart = 4;
140
+ metadata.forEach(([label, value], idx) => {
141
+ const row = worksheet.getRow(metaRowStart + idx);
142
+ row.getCell(1).value = {
143
+ richText: [
144
+ { text: `${label} : `, font: { bold: true } },
145
+ { text: value ?? '', font: { bold: false } }
146
+ ]
147
+ };
148
+ worksheet.mergeCells(`A${row.number}:${titleMergeEnd}${row.number}`);
149
+ });
150
+ let currentRow = metaRowStart + metadata.length;
151
+ worksheet.getRow(++currentRow).height = 6; // Blank for readability
152
+ currentRow++;
153
+ // Add headers and rest as before...
154
+ const headerRow = worksheet.getRow(currentRow++);
155
+ headerLabels.forEach((header, i) => {
156
+ const cell = headerRow.getCell(i + 1);
157
+ cell.value = header;
158
+ cell.font = { bold: true };
159
+ cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'D9D9D9' } };
160
+ cell.alignment = { vertical: 'middle', horizontal: 'center' };
161
+ cell.border = {
162
+ top: { style: 'thin' },
163
+ bottom: { style: 'thin' },
164
+ left: { style: 'thin' },
165
+ right: { style: 'thin' }
166
+ };
167
+ });
168
+ // Data rows (handle grouping if present)
169
+ let rowIdx = currentRow;
170
+ if (options.groupByKey && !Array.isArray(data)) {
171
+ for (const [group, items] of Object.entries(data)) {
172
+ // Group header: bold, merged row
173
+ const groupRow = worksheet.getRow(rowIdx++);
174
+ groupRow.getCell(1).value = group;
175
+ groupRow.font = { bold: true };
176
+ worksheet.mergeCells(`A${groupRow.number}:${titleMergeEnd}${groupRow.number}`);
177
+ // Data rows
178
+ this.prepareTableRows(items, columns, options).forEach(rowData => {
179
+ const dataRow = worksheet.getRow(rowIdx++);
180
+ rowData.forEach((cellVal, cIdx) => {
181
+ const cell = dataRow.getCell(cIdx + 1);
182
+ cell.value = cellVal;
183
+ cell.border = {
184
+ top: { style: 'thin' }, bottom: { style: 'thin' },
185
+ left: { style: 'thin' }, right: { style: 'thin' }
186
+ };
187
+ });
188
+ });
189
+ }
190
+ }
191
+ else {
192
+ this.prepareTableRows(data, columns, options).forEach(rowData => {
193
+ const dataRow = worksheet.getRow(rowIdx++);
194
+ rowData.forEach((cellVal, cIdx) => {
195
+ const cell = dataRow.getCell(cIdx + 1);
196
+ cell.value = cellVal;
197
+ cell.border = {
198
+ top: { style: 'thin' }, bottom: { style: 'thin' },
199
+ left: { style: 'thin' }, right: { style: 'thin' }
200
+ };
201
+ });
202
+ });
203
+ }
204
+ // --- Auto column widths
205
+ for (let i = 1; i <= totalCols; i++) {
206
+ let maxLength = 10; // minimum width
207
+ worksheet.eachRow({ includeEmpty: true }, (row) => {
208
+ const cell = row.getCell(i);
209
+ if (cell.isMerged)
210
+ return;
211
+ let cellValue = '';
212
+ if (cell.value == null) {
213
+ cellValue = '';
214
+ }
215
+ else if (typeof cell.value === 'object' && 'richText' in cell.value) {
216
+ cellValue = cell.value.richText.map(rt => rt.text).join('');
217
+ }
218
+ else {
219
+ cellValue = cell.value.toString();
220
+ }
221
+ maxLength = Math.max(maxLength, cellValue.length);
222
+ });
223
+ // cap max width (so branch names don't explode sheet)
224
+ const adjustedWidth = Math.min(maxLength, 50);
225
+ worksheet.getColumn(i).width = adjustedWidth;
226
+ }
227
+ // --- Save workbook
228
+ const buffer = await workbook.xlsx.writeBuffer();
229
+ FileSaver.saveAs(new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), title.replace(/\s/g, '-') + '.xlsx');
230
+ }
231
+ // ========== CSV EXPORT ==========
232
+ exportToCsv({ title, metadata, columns, data, options = {} }) {
233
+ const headers = ['Sr No', ...columns.map(c => c.headerName || c.field)];
234
+ const metaLines = metadata.map(([lbl, val]) => `${lbl}: ${val}`);
235
+ let csv = [title, ...metaLines, '', headers.join(',')];
236
+ if (options.groupByKey && !Array.isArray(data)) {
237
+ for (const [group, items] of Object.entries(data)) {
238
+ csv.push(group);
239
+ this.prepareTableRows(items, columns, options).forEach(row => {
240
+ csv.push(row.map(val => `"${val}"`).join(','));
241
+ });
242
+ }
243
+ }
244
+ else {
245
+ this.prepareTableRows(data, columns, options).forEach(row => {
246
+ csv.push(row.map(val => `"${val}"`).join(','));
247
+ });
248
+ }
249
+ // Download
250
+ const blob = new Blob([csv.join('\n')], { type: 'text/csv' });
251
+ FileSaver.saveAs(blob, title.replace(/\s/g, '-') + '.csv');
252
+ }
253
+ // ================= HELPER: TABLE ROW PREPARATION =================
254
+ prepareTableRows(data, columns, options = {}) {
255
+ const { excludeFields = [], currencyFields = [], dateFields = [], dateFieldFormats = {}, specialDecimalFields = {} } = options;
256
+ const filtered = columns.filter(c => c.field && !excludeFields.some(f => c.field.toLowerCase().includes(f)));
257
+ return data.map((row, idx) => ([
258
+ idx + 1,
259
+ ...filtered.map(col => {
260
+ let value = row[col.field];
261
+ // Format date fields with custom formats if specified
262
+ if (col.field && (dateFields.includes(col.field) || col.field in dateFieldFormats)) {
263
+ const format = dateFieldFormats[col.field] || 'dd/MM/yyyy';
264
+ value = this.formatDateByFormat(value, format);
265
+ }
266
+ // Format special decimal fields with specific decimals
267
+ else if (col.field && col.field in specialDecimalFields && value != null) {
268
+ const decimals = specialDecimalFields[col.field];
269
+ value = parseFloat(value).toFixed(decimals);
270
+ }
271
+ // Format regular currency fields with 3 decimals
272
+ else if (col.field && currencyFields.includes(col.field) && value != null) {
273
+ value = parseFloat(value).toFixed(3);
274
+ }
275
+ return value ?? '';
276
+ })
277
+ ]));
278
+ }
279
+ formatDateByFormat(val, format) {
280
+ // Helper to pad single digits
281
+ const pad = (n) => n.toString().padStart(2, '0');
282
+ // Parse date for "DD/MM/YYYY hh:mm AM/PM" format manually
283
+ if (typeof val === 'string' && /^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2} [AP]M$/.test(val)) {
284
+ const parts = val.match(/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}) ([AP]M)$/);
285
+ if (!parts)
286
+ return '';
287
+ let [, dd, mm, yyyy, hh, min, ampm] = parts;
288
+ let hours = parseInt(hh, 10);
289
+ if (ampm === 'PM' && hours !== 12)
290
+ hours += 12;
291
+ if (ampm === 'AM' && hours === 12)
292
+ hours = 0;
293
+ val = new Date(parseInt(yyyy, 10), parseInt(mm, 10) - 1, parseInt(dd, 10), hours, parseInt(min, 10));
294
+ }
295
+ else {
296
+ val = new Date(val);
297
+ }
298
+ if (isNaN(val.getTime()))
299
+ return '';
300
+ const dt = val;
301
+ switch (format) {
302
+ case 'dd/MM/yyyy hh:mm a': { // 11/07/2025 10:56 PM
303
+ let hours12 = dt.getHours() % 12 || 12;
304
+ let ampm = dt.getHours() >= 12 ? 'PM' : 'AM';
305
+ return `${pad(dt.getDate())}/${pad(dt.getMonth() + 1)}/${dt.getFullYear()} ${pad(hours12)}:${pad(dt.getMinutes())} ${ampm}`;
306
+ }
307
+ case 'dd/MM/yyyy HH:mm': { // 28/07/2025 13:08
308
+ return `${pad(dt.getDate())}/${pad(dt.getMonth() + 1)}/${dt.getFullYear()} ${pad(dt.getHours())}:${pad(dt.getMinutes())}`;
309
+ }
310
+ case 'dd/MM/yyyy': { // 28/07/2025
311
+ return `${pad(dt.getDate())}/${pad(dt.getMonth() + 1)}/${dt.getFullYear()}`;
312
+ }
313
+ default:
314
+ return dt.toLocaleString();
315
+ }
316
+ }
317
+ }
318
+ GenericExportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GenericExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
319
+ GenericExportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GenericExportService, providedIn: 'root' });
320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GenericExportService, decorators: [{
321
+ type: Injectable,
322
+ args: [{ providedIn: 'root' }]
323
+ }], ctorParameters: function () { return []; } });
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvc2hhcmVkL2V4cG9ydC1nZW5lcmljLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7O0FBZ0J4QyxNQUFNLE9BQU8sb0JBQW9CO0lBTTdCO1FBSmlCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBR2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUM5QixHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUNwQixHQUFHLENBQUMsTUFB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LENBQUMsQ0FBQyxFQUFFLGFBQWE7Z0JBQzlCLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQzthQUMvRTtZQUNEO2dCQUNJLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQzs7aUhBdlhRLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGV4cG9ydC1nZW5lcmljLnNlcnZpY2UudHNcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xyXG5pbXBvcnQgJ2pzcGRmLWF1dG90YWJsZSc7XHJcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0T3B0aW9ucyB7XHJcbiAgICBjdXJyZW5jeUZpZWxkcz86IHN0cmluZ1tdO1xyXG4gICAgZGF0ZUZpZWxkcz86IHN0cmluZ1tdO1xyXG4gICAgZGF0ZUZpZWxkRm9ybWF0cz86IHtcclxuICAgICAgICBbZmllbGQ6IHN0cmluZ106ICdkZC9NTS95eXl5JyB8ICdkZC9NTS95eXl5IGhoOm1tIGEnIHwgJ2RkL01NL3l5eXkgSEg6bW0nIHwgc3RyaW5nO1xyXG4gICAgfTtcclxuICAgIGV4Y2x1ZGVGaWVsZHM/OiBzdHJpbmdbXTtcclxuICAgIGdyb3VwQnlLZXk/OiBib29sZWFuO1xyXG4gICAgc3BlY2lhbERlY2ltYWxGaWVsZHM/OiB7XHJcbiAgICAgICAgW2ZpZWxkOiBzdHJpbmddOiBudW1iZXI7XHJcbiAgICB9O1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY0V4cG9ydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBsb2dvQmFzZTY0Pzogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZGZGb250U2l6ZSA9IDEwO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZGZMaW5lSGVpZ2h0ID0gNztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGRmTGVmdE1hcmdpbiA9IDE1O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMubG9hZEltYWdlQXNCYXNlNjQoJ2Fzc2V0cy9yZXBvcnRzLWxpYi9hc3NldHMvaW1hZ2VzL1hNTG9nby5wbmcnKS50aGVuKGJhc2U2NCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nb0Jhc2U2NCA9IGJhc2U2NDtcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignTG9nbyBpbWFnZSBmYWlsZWQgdG8gbG9hZCcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZEltYWdlQXNCYXNlNjQoaW1hZ2VQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgICAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgICAgICAgICAgaW1nLnNyYyA9IGltYWdlUGF0aDtcclxuICAgICAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gNjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gaW1nLndpZHRoICogc2NhbGU7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodCAqIHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJywgMS4wKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCgnRmFpbGVkIHRvIGdldCBjYW52YXMgY29udGV4dC4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoJ0ZhaWxlZCB0byBsb2FkIGltYWdlOiAnICsgaW1hZ2VQYXRoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBQREYgRVhQT1JUID09PT09PT09PT09PT09PT09PT09XHJcbiAgICBhc3luYyBleHBvcnRUb1BkZih7IHRpdGxlLCBtZXRhZGF0YSwgY29sdW1ucywgZGF0YSwgb3B0aW9ucyA9IHt9IH06IHtcclxuICAgICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICAgIG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW107XHJcbiAgICAgICAgY29sdW1uczogYW55W107XHJcbiAgICAgICAgZGF0YTogYW55W10gfCBSZWNvcmQ8c3RyaW5nLCBhbnlbXT47XHJcbiAgICAgICAgb3B0aW9ucz86IEV4cG9ydE9wdGlvbnM7XHJcbiAgICB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6IFs0MDAsIDIxMF0gfSk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5jb2x1bW5zLm1hcChjID0+IGMuaGVhZGVyTmFtZSB8fCBjLmZpZWxkKV07XHJcbiAgICAgICAgbGV0IHJvd3M6IGFueVtdW10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuZ3JvdXBCeUtleSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtncm91cCwgaXRlbXNdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goW3sgY29udGVudDogZ3JvdXAsIGNvbFNwYW46IGhlYWRlcnMubGVuZ3RoLCBzdHlsZXM6IHsgaGFsaWduOiAnbGVmdCcsIGZvbnRTdHlsZTogJ2JvbGQnIH0gfV0pO1xyXG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKC4uLnRoaXMucHJlcGFyZVRhYmxlUm93cyhpdGVtcywgY29sdW1ucywgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcm93cyA9IHRoaXMucHJlcGFyZVRhYmxlUm93cyhkYXRhIGFzIGFueVtdLCBjb2x1bW5zLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBsb2dvIGF0IHRvcCBsZWZ0IGlmIGF2YWlsYWJsZVxyXG4gICAgICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgICAgICAgZG9jLmFkZEltYWdlKHRoaXMubG9nb0Jhc2U2NCwgJ1BORycsIDE1LCAxMCwgMzguNCwgMTcuNSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaXRsZVxyXG4gICAgICAgIGRvYy5zZXRGb250U2l6ZSgxNSk7XHJcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgZG9jLnRleHQodGl0bGUsIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCAvIDIsIDE4LCB7IGFsaWduOiAnY2VudGVyJyB9KTtcclxuXHJcbiAgICAgICAgLy8gTWV0YWRhdGFcclxuICAgICAgICBsZXQgY3VycmVudFkgPSAzMjtcclxuICAgICAgICBkb2Muc2V0Rm9udFNpemUodGhpcy5wZGZGb250U2l6ZSk7XHJcbiAgICAgICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeSA9IGN1cnJlbnRZICsgaSAqIHRoaXMucGRmTGluZUhlaWdodDtcclxuICAgICAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsV2l0aENvbG9uID0gbGFiZWwgKyAnIDonO1xyXG4gICAgICAgICAgICBkb2MudGV4dChsYWJlbFdpdGhDb2xvbiwgdGhpcy5wZGZMZWZ0TWFyZ2luLCB5KTtcclxuICAgICAgICAgICAgY29uc3QgbGFiZWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobGFiZWxXaXRoQ29sb24gKyAnICcpO1xyXG4gICAgICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICAgICAgICBkb2MudGV4dCh2YWx1ZSwgdGhpcy5wZGZMZWZ0TWFyZ2luICsgbGFiZWxXaWR0aCwgeSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN1cnJlbnRZICs9IG1ldGFkYXRhLmxlbmd0aCAqIHRoaXMucGRmTGluZUhlaWdodCArIDU7XHJcblxyXG4gICAgICAgIC8vIFRhYmxlIHN0eWxpbmdcclxuICAgICAgICBjb25zdCBjb2x1bW5TdHlsZXM6IHsgW2tleTogbnVtYmVyXTogYW55IH0gPSB7fTtcclxuICAgICAgICBoZWFkZXJzLmZvckVhY2goKF8sIGkpID0+IGNvbHVtblN0eWxlc1tpXSA9IHsgY2VsbFdpZHRoOiAnYXV0bycgfSk7XHJcblxyXG4gICAgICAgIGRvYy5hdXRvVGFibGUoe1xyXG4gICAgICAgICAgICBoZWFkOiBbaGVhZGVyc10sXHJcbiAgICAgICAgICAgIGJvZHk6IHJvd3MsXHJcbiAgICAgICAgICAgIHN0YXJ0WTogY3VycmVudFksXHJcbiAgICAgICAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgICAgICAgIGhlYWRTdHlsZXM6IHtcclxuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxyXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAwLFxyXG4gICAgICAgICAgICAgICAgZm9udFN0eWxlOiAnYm9sZCcsXHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogOSxcclxuICAgICAgICAgICAgICAgIGhhbGlnbjogJ2NlbnRlcidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYm9keVN0eWxlczoge1xyXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDgsXHJcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IFsyNTUsIDI1NSwgMjU1XSxcclxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogWzAsIDAsIDBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlczoge1xyXG4gICAgICAgICAgICAgICAgY2VsbFBhZGRpbmc6IDIsXHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2xpbmVicmVhaycsXHJcbiAgICAgICAgICAgICAgICBtaW5DZWxsSGVpZ2h0OiA2XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbHVtblN0eWxlc1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2Muc2F2ZSh0aXRsZS5yZXBsYWNlKC9cXHMvZywgJy0nKSArICcucGRmJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PSBFWENFTCBFWFBPUlQgPT09PT09PT09PVxyXG4gICAgYXN5bmMgZXhwb3J0VG9FeGNlbCh7XHJcbiAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgbWV0YWRhdGEsXHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIG9wdGlvbnMgPSB7fVxyXG4gICAgfToge1xyXG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXTtcclxuICAgICAgICBjb2x1bW5zOiBhbnlbXTtcclxuICAgICAgICBkYXRhOiBhbnlbXSB8IFJlY29yZDxzdHJpbmcsIGFueVtdPjtcclxuICAgICAgICBvcHRpb25zPzogRXhwb3J0T3B0aW9ucztcclxuICAgIH0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCB3b3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XHJcbiAgICAgICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KHRpdGxlKTtcclxuXHJcbiAgICAgICAgLy8gUHJlLWNhbGNcclxuICAgICAgICBjb25zdCBoZWFkZXJMYWJlbHMgPSBbJ1NyIE5vJywgLi4uY29sdW1ucy5tYXAoY29sID0+IGNvbC5oZWFkZXJOYW1lIHx8IGNvbC5maWVsZCldO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsQ29scyA9IGhlYWRlckxhYmVscy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgdGl0bGVTdGFydENvbCA9IDQ7IC8vIFRpdGxlIGluIDR0aCBDZWxsXHJcbiAgICAgICAgY29uc3QgdGl0bGVDb2xMZXR0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY0ICsgdGl0bGVTdGFydENvbCk7XHJcbiAgICAgICAgY29uc3QgdGl0bGVNZXJnZUVuZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjQgKyB0b3RhbENvbHMpO1xyXG5cclxuICAgICAgICAvLyAtLS0gQWRkIGxvZ28gaW4gQTE6QzMsIGFuZCBtYWtlIHRob3NlIGNlbGxzIHRhbGxcclxuICAgICAgICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmxvZ29CYXNlNjQucmVwbGFjZSgvXmRhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvLCAnJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XHJcbiAgICAgICAgICAgICAgICBiYXNlNjQ6IGJhc2U2NERhdGEsXHJcbiAgICAgICAgICAgICAgICBleHRlbnNpb246ICdwbmcnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgd29ya3NoZWV0LmFkZEltYWdlKGltYWdlSWQsIHtcclxuICAgICAgICAgICAgICAgIHRsOiB7IGNvbDogMCwgcm93OiAwIH0sXHJcbiAgICAgICAgICAgICAgICBleHQ6IHsgd2lkdGg6IDE0NSwgaGVpZ2h0OiA2NiB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBtYWtlIHJvd3MgMS0zIHRhbGxlciB0byBmdWxseSBkaXNwbGF5IGxvZ29cclxuICAgICAgICAgICAgd29ya3NoZWV0LmdldFJvdygxKS5oZWlnaHQgPSAyNDtcclxuICAgICAgICAgICAgd29ya3NoZWV0LmdldFJvdygyKS5oZWlnaHQgPSAyMjtcclxuICAgICAgICAgICAgd29ya3NoZWV0LmdldFJvdygzKS5oZWlnaHQgPSAyMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIC0tLSBUaXRsZSBpbiBEMSBtZXJnZWQgdXAgdG8gZW5kXHJcbiAgICAgICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYCR7dGl0bGVDb2xMZXR0ZXJ9MToke3RpdGxlTWVyZ2VFbmR9MWApO1xyXG4gICAgICAgIGNvbnN0IHRpdGxlQ2VsbCA9IHdvcmtzaGVldC5nZXRSb3coMSkuZ2V0Q2VsbCh0aXRsZVN0YXJ0Q29sKTtcclxuICAgICAgICB0aXRsZUNlbGwudmFsdWUgPSB0aXRsZTtcclxuICAgICAgICB0aXRsZUNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTYgfTtcclxuICAgICAgICB0aXRsZUNlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdsZWZ0JyB9O1xyXG5cclxuICAgICAgICAvLyAtLS0gTGVhdmUgQTI6QzMgZW1wdHkgKGZvciBpbWFnZSksIHBsYWNlIG1ldGFkYXRhIHN0YXJ0aW5nIGF0IHJvdyA0XHJcbiAgICAgICAgbGV0IG1ldGFSb3dTdGFydCA9IDQ7XHJcbiAgICAgICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KG1ldGFSb3dTdGFydCArIGlkeCk7XHJcbiAgICAgICAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHRleHQ6IGAke2xhYmVsfSA6IGAsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiB2YWx1ZSA/PyAnJywgZm9udDogeyBib2xkOiBmYWxzZSB9IH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEEke3Jvdy5udW1iZXJ9OiR7dGl0bGVNZXJnZUVuZH0ke3Jvdy5udW1iZXJ9YCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBjdXJyZW50Um93ID0gbWV0YVJvd1N0YXJ0ICsgbWV0YWRhdGEubGVuZ3RoO1xyXG5cclxuICAgICAgICB3b3Jrc2hlZXQuZ2V0Um93KCsrY3VycmVudFJvdykuaGVpZ2h0ID0gNjsgLy8gQmxhbmsgZm9yIHJlYWRhYmlsaXR5XHJcbiAgICAgICAgY3VycmVudFJvdysrO1xyXG5cclxuICAgICAgICAvLyBBZGQgaGVhZGVycyBhbmQgcmVzdCBhcyBiZWZvcmUuLi5cclxuICAgICAgICBjb25zdCBoZWFkZXJSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgICAgaGVhZGVyTGFiZWxzLmZvckVhY2goKGhlYWRlciwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICAgICAgICBjZWxsLnZhbHVlID0gaGVhZGVyO1xyXG4gICAgICAgICAgICBjZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgICAgICAgICAgY2VsbC5maWxsID0geyB0eXBlOiAncGF0dGVybicsIHBhdHRlcm46ICdzb2xpZCcsIGZnQ29sb3I6IHsgYXJnYjogJ0Q5RDlEOScgfSB9O1xyXG4gICAgICAgICAgICBjZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnY2VudGVyJyB9O1xyXG4gICAgICAgICAgICBjZWxsLmJvcmRlciA9IHtcclxuICAgICAgICAgICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgICAgICAgICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgICAgICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gRGF0YSByb3dzIChoYW5kbGUgZ3JvdXBpbmcgaWYgcHJlc2VudClcclxuICAgICAgICBsZXQgcm93SWR4ID0gY3VycmVudFJvdztcclxuICAgICAgICBpZiAob3B0aW9ucy5ncm91cEJ5S2V5ICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2dyb3VwLCBpdGVtc10gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEdyb3VwIGhlYWRlcjogYm9sZCwgbWVyZ2VkIHJvd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KHJvd0lkeCsrKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwUm93LmdldENlbGwoMSkudmFsdWUgPSBncm91cDtcclxuICAgICAgICAgICAgICAgIGdyb3VwUm93LmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKGBBJHtncm91cFJvdy5udW1iZXJ9OiR7dGl0bGVNZXJnZUVuZH0ke2dyb3VwUm93Lm51bWJlcn1gKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBEYXRhIHJvd3NcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVRhYmxlUm93cyhpdGVtcywgY29sdW1ucywgb3B0aW9ucykuZm9yRWFjaChyb3dEYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhUm93ID0gd29ya3NoZWV0LmdldFJvdyhyb3dJZHgrKyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5mb3JFYWNoKChjZWxsVmFsLCBjSWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkYXRhUm93LmdldENlbGwoY0lkeCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gY2VsbFZhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5ib3JkZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVUYWJsZVJvd3MoZGF0YSBhcyBhbnlbXSwgY29sdW1ucywgb3B0aW9ucykuZm9yRWFjaChyb3dEYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KHJvd0lkeCsrKTtcclxuICAgICAgICAgICAgICAgIHJvd0RhdGEuZm9yRWFjaCgoY2VsbFZhbCwgY0lkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBkYXRhUm93LmdldENlbGwoY0lkeCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBjZWxsVmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwuYm9yZGVyID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIC0tLSBBdXRvIGNvbHVtbiB3aWR0aHNcclxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbENvbHM7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgbWF4TGVuZ3RoID0gMTA7IC8vIG1pbmltdW0gd2lkdGhcclxuICAgICAgICAgICAgd29ya3NoZWV0LmVhY2hSb3coeyBpbmNsdWRlRW1wdHk6IHRydWUgfSwgKHJvdykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDZWxsKGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNlbGwuaXNNZXJnZWQpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGxldCBjZWxsVmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChjZWxsLnZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNlbGwudmFsdWUgPT09ICdvYmplY3QnICYmICdyaWNoVGV4dCcgaW4gY2VsbC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZSA9IGNlbGwudmFsdWUucmljaFRleHQubWFwKHJ0ID0+IHJ0LnRleHQpLmpvaW4oJycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWUgPSBjZWxsLnZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGggPSBNYXRoLm1heChtYXhMZW5ndGgsIGNlbGxWYWx1ZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gY2FwIG1heCB3aWR0aCAoc28gYnJhbmNoIG5hbWVzIGRvbid0IGV4cGxvZGUgc2hlZXQpXHJcbiAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkV2lkdGggPSBNYXRoLm1pbihtYXhMZW5ndGgsIDUwKTtcclxuICAgICAgICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpKS53aWR0aCA9IGFkanVzdGVkV2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAtLS0gU2F2ZSB3b3JrYm9va1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcclxuICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKFxyXG4gICAgICAgICAgICBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIH0pLFxyXG4gICAgICAgICAgICB0aXRsZS5yZXBsYWNlKC9cXHMvZywgJy0nKSArICcueGxzeCdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyA9PT09PT09PT09IENTViBFWFBPUlQgPT09PT09PT09PVxyXG4gICAgZXhwb3J0VG9Dc3Yoe1xyXG4gICAgICAgIHRpdGxlLFxyXG4gICAgICAgIG1ldGFkYXRhLFxyXG4gICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBvcHRpb25zID0ge31cclxuICAgIH06IHtcclxuICAgICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICAgIG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW107XHJcbiAgICAgICAgY29sdW1uczogYW55W107XHJcbiAgICAgICAgZGF0YTogYW55W10gfCBSZWNvcmQ8c3RyaW5nLCBhbnlbXT47XHJcbiAgICAgICAgb3B0aW9ucz86IEV4cG9ydE9wdGlvbnM7XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5jb2x1bW5zLm1hcChjID0+IGMuaGVhZGVyTmFtZSB8fCBjLmZpZWxkKV07XHJcbiAgICAgICAgY29uc3QgbWV0YUxpbmVzID0gbWV0YWRhdGEubWFwKChbbGJsLCB2YWxdKSA9PiBgJHtsYmx9OiAke3ZhbH1gKTtcclxuICAgICAgICBsZXQgY3N2ID0gW3RpdGxlLCAuLi5tZXRhTGluZXMsICcnLCBoZWFkZXJzLmpvaW4oJywnKV07XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmdyb3VwQnlLZXkgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBbZ3JvdXAsIGl0ZW1zXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgY3N2LnB1c2goZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlVGFibGVSb3dzKGl0ZW1zLCBjb2x1bW5zLCBvcHRpb25zKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3N2LnB1c2gocm93Lm1hcCh2YWwgPT4gYFwiJHt2YWx9XCJgKS5qb2luKCcsJykpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVUYWJsZVJvd3MoZGF0YSBhcyBhbnlbXSwgY29sdW1ucywgb3B0aW9ucykuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgY3N2LnB1c2gocm93Lm1hcCh2YWwgPT4gYFwiJHt2YWx9XCJgKS5qb2luKCcsJykpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERvd25sb2FkXHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3Yuam9pbignXFxuJyldLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XHJcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCB0aXRsZS5yZXBsYWNlKC9cXHMvZywgJy0nKSArICcuY3N2Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT0gSEVMUEVSOiBUQUJMRSBST1cgUFJFUEFSQVRJT04gPT09PT09PT09PT09PT09PT1cclxuICAgIHByaXZhdGUgcHJlcGFyZVRhYmxlUm93cyhkYXRhOiBhbnlbXSwgY29sdW1uczogYW55W10sIG9wdGlvbnM6IEV4cG9ydE9wdGlvbnMgPSB7fSk6IGFueVtdW10ge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgZXhjbHVkZUZpZWxkcyA9IFtdLFxyXG4gICAgICAgICAgICBjdXJyZW5jeUZpZWxkcyA9IFtdLFxyXG4gICAgICAgICAgICBkYXRlRmllbGRzID0gW10sXHJcbiAgICAgICAgICAgIGRhdGVGaWVsZEZvcm1hdHMgPSB7fSxcclxuICAgICAgICAgICAgc3BlY2lhbERlY2ltYWxGaWVsZHMgPSB7fVxyXG4gICAgICAgIH0gPSBvcHRpb25zO1xyXG5cclxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGNvbHVtbnMuZmlsdGVyKGMgPT5cclxuICAgICAgICAgICAgYy5maWVsZCAmJiAhZXhjbHVkZUZpZWxkcy5zb21lKGYgPT4gYy5maWVsZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGYpKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhLm1hcCgocm93LCBpZHgpID0+IChbXHJcbiAgICAgICAgICAgIGlkeCArIDEsXHJcbiAgICAgICAgICAgIC4uLmZpbHRlcmVkLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcm93W2NvbC5maWVsZF07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IGRhdGUgZmllbGRzIHdpdGggY3VzdG9tIGZvcm1hdHMgaWYgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sLmZpZWxkICYmIChkYXRlRmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgfHwgY29sLmZpZWxkIGluIGRhdGVGaWVsZEZvcm1hdHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gZGF0ZUZpZWxkRm9ybWF0c1tjb2wuZmllbGRdIHx8ICdkZC9NTS95eXl5JztcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZUJ5Rm9ybWF0KHZhbHVlLCBmb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IHNwZWNpYWwgZGVjaW1hbCBmaWVsZHMgd2l0aCBzcGVjaWZpYyBkZWNpbWFsc1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmZpZWxkICYmIGNvbC5maWVsZCBpbiBzcGVjaWFsRGVjaW1hbEZpZWxkcyAmJiB2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSBzcGVjaWFsRGVjaW1hbEZpZWxkc1tjb2wuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChkZWNpbWFscyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgcmVndWxhciBjdXJyZW5jeSBmaWVsZHMgd2l0aCAzIGRlY2ltYWxzXHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZmllbGQgJiYgY3VycmVuY3lGaWVsZHMuaW5jbHVkZXMoY29sLmZpZWxkKSAmJiB2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/PyAnJztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb3JtYXREYXRlQnlGb3JtYXQodmFsOiBhbnksIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICAvLyBIZWxwZXIgdG8gcGFkIHNpbmdsZSBkaWdpdHNcclxuICAgICAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuXHJcbiAgICAgICAgLy8gUGFyc2UgZGF0ZSBmb3IgXCJERC9NTS9ZWVlZIGhoOm1tIEFNL1BNXCIgZm9ybWF0IG1hbnVhbGx5XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIC9eXFxkezJ9XFwvXFxkezJ9XFwvXFxkezR9IFxcZHsyfTpcXGR7Mn0gW0FQXU0kLy50ZXN0KHZhbCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSB2YWwubWF0Y2goL14oXFxkezJ9KVxcLyhcXGR7Mn0pXFwvKFxcZHs0fSkgKFxcZHsyfSk6KFxcZHsyfSkgKFtBUF1NKSQvKTtcclxuICAgICAgICAgICAgaWYgKCFwYXJ0cykgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICBsZXQgWywgZGQsIG1tLCB5eXl5LCBoaCwgbWluLCBhbXBtXSA9IHBhcnRzO1xyXG4gICAgICAgICAgICBsZXQgaG91cnMgPSBwYXJzZUludChoaCwgMTApO1xyXG4gICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ1BNJyAmJiBob3VycyAhPT0gMTIpIGhvdXJzICs9IDEyO1xyXG4gICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ0FNJyAmJiBob3VycyA9PT0gMTIpIGhvdXJzID0gMDtcclxuICAgICAgICAgICAgdmFsID0gbmV3IERhdGUocGFyc2VJbnQoeXl5eSwgMTApLCBwYXJzZUludChtbSwgMTApIC0gMSwgcGFyc2VJbnQoZGQsIDEwKSwgaG91cnMsIHBhcnNlSW50KG1pbiwgMTApKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWwgPSBuZXcgRGF0ZSh2YWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbC5nZXRUaW1lKCkpKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IGR0ID0gdmFsO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xyXG4gICAgICAgICAgICBjYXNlICdkZC9NTS95eXl5IGhoOm1tIGEnOiB7IC8vIDExLzA3LzIwMjUgMTA6NTYgUE1cclxuICAgICAgICAgICAgICAgIGxldCBob3VyczEyID0gZHQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFtcG0gPSBkdC5nZXRIb3VycygpID49IDEyID8gJ1BNJyA6ICdBTSc7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7cGFkKGR0LmdldERhdGUoKSl9LyR7cGFkKGR0LmdldE1vbnRoKCkgKyAxKX0vJHtkdC5nZXRGdWxsWWVhcigpfSAke3BhZChob3VyczEyKX06JHtwYWQoZHQuZ2V0TWludXRlcygpKX0gJHthbXBtfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnZGQvTU0veXl5eSBISDptbSc6IHsgLy8gMjgvMDcvMjAyNSAxMzowOFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3BhZChkdC5nZXREYXRlKCkpfS8ke3BhZChkdC5nZXRNb250aCgpICsgMSl9LyR7ZHQuZ2V0RnVsbFllYXIoKX0gJHtwYWQoZHQuZ2V0SG91cnMoKSl9OiR7cGFkKGR0LmdldE1pbnV0ZXMoKSl9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdkZC9NTS95eXl5JzogeyAvLyAyOC8wNy8yMDI1XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7cGFkKGR0LmdldERhdGUoKSl9LyR7cGFkKGR0LmdldE1vbnRoKCkgKyAxKX0vJHtkdC5nZXRGdWxsWWVhcigpfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBkdC50b0xvY2FsZVN0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuIl19
@@ -60,7 +60,7 @@ export class ExportService {
60
60
  return metadata.filter(([_, value]) => value !== undefined && value !== null);
61
61
  }
62
62
  prepareExportTable(data, columnDefs, options = {}) {
63
- const { excludeFields = ['srno', 'serial', 'action'], currencyFields = [] } = options;
63
+ const { excludeFields = ['srno'], currencyFields = [] } = options;
64
64
  const filteredColumns = columnDefs.filter(col => col.field &&
65
65
  !excludeFields.some(ex => col.field.toLowerCase().includes(ex)) &&
66
66
  !excludeFields.some(ex => col.headerName?.toLowerCase().includes(ex)));
@@ -241,4 +241,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
241
241
  providedIn: 'root'
242
242
  }]
243
243
  }], ctorParameters: function () { return []; } });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NoYXJlZC9leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOztBQVd4QyxNQUFNLE9BQU8sYUFBYTtJQU94QjtRQUxnQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNoQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUlsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsNkNBQTZDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNERBQTREO0lBQ3BELGlCQUFpQixDQUFDLFNBQWlCO1FBQzNDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUM5QixHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUVwQixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxD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QUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDOzswR0FuUlUsYUFBYTs4R0FBYixhQUFhLGNBRlosTUFBTTsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0ICdqc3BkZi1hdXRvdGFibGUnO1xyXG5pbXBvcnQgKiBhcyBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcblxyXG5kZWNsYXJlIG1vZHVsZSAnanNwZGYnIHtcclxuICBpbnRlcmZhY2UganNQREYge1xyXG4gICAgYXV0b1RhYmxlOiAob3B0aW9uczogYW55KSA9PiBqc1BERjtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEV4cG9ydFNlcnZpY2Uge1xyXG5cclxuIHByaXZhdGUgcmVhZG9ubHkgcGRmRm9udFNpemUgPSAxMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IHBkZkxpbmVIZWlnaHQgPSA3O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGRmTGVmdE1hcmdpbiA9IDE1O1xyXG4gIHByaXZhdGUgbG9nb0Jhc2U2NDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmxvYWRJbWFnZUFzQmFzZTY0KCdhc3NldHMvcmVwb3J0cy1saWIvYXNzZXRzL2ltYWdlcy9YTUxvZ28ucG5nJykudGhlbihiYXNlNjQgPT4ge1xyXG4gICAgICB0aGlzLmxvZ29CYXNlNjQgPSBiYXNlNjQ7XHJcbiAgICB9KTtcclxuICB9XHJcbiBcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVXRpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBwcml2YXRlIGxvYWRJbWFnZUFzQmFzZTY0KGltYWdlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgIGltZy5zcmMgPSBpbWFnZVBhdGg7XHJcbiBcclxuICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gNjtcclxuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aCAqIHNjYWxlO1xyXG4gICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodCAqIHNjYWxlO1xyXG4gXHJcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycsIDEuMCk7IC8vIDEuMCA9IGhpZ2hlc3QgcXVhbGl0eVxyXG4gICAgICAgIHJlc29sdmUoYmFzZTY0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZWplY3QoJ0ZhaWxlZCB0byBnZXQgY2FudmFzIGNvbnRleHQuJyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiBcclxuICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KCdGYWlsZWQgdG8gbG9hZCBpbWFnZTogJyArIGltYWdlUGF0aCk7XHJcbiAgfSk7XHJcbn1cclxuIFxyXG4gIGZvcm1hdERhdGUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgcmV0dXJuIGlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/ICcnIDpcclxuICAgICAgYCR7ZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfS8keyhkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9LyR7ZGF0ZS5nZXRGdWxsWWVhcigpfWA7XHJcbiAgfVxyXG4gIFxyXG4gIGZvcm1hdERhdGVUaW1lKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICBjb25zdCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHJcbiAgLy8gMTItaG91ciBmb3JtYXRcclxuICBsZXQgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XHJcbiAgY29uc3QgbWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICBjb25zdCBhbXBtID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJztcclxuICBob3VycyA9IGhvdXJzICUgMTI7XHJcbiAgaG91cnMgPSBob3VycyA/IGhvdXJzIDogMTI7IC8vIHRoZSBob3VyICcwJyBzaG91bGQgYmUgJzEyJ1xyXG4gIGNvbnN0IGhvdXJzU3RyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG5cclxuICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9ICR7aG91cnNTdHJ9OiR7bWludXRlc30gJHthbXBtfWA7XHJcbn1cclxuIFxyXG4gIGdlbmVyYXRlUmVwb3J0TWV0YWRhdGEobWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSk6IFtzdHJpbmcsIHN0cmluZ11bXSB7XHJcbiAgcmV0dXJuIG1ldGFkYXRhLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCk7XHJcbiAgfVxyXG4gXHJcbiAgcHJlcGFyZUV4cG9ydFRhYmxlKGRhdGE6IGFueVtdLCBjb2x1bW5EZWZzOiBhbnlbXSwgb3B0aW9uczoge1xyXG4gICAgZXhjbHVkZUZpZWxkcz86IHN0cmluZ1tdLFxyXG4gICAgY3VycmVuY3lGaWVsZHM/OiBzdHJpbmdbXVxyXG4gIH0gPSB7fSk6IHsgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10gfSB7XHJcbiAgICBjb25zdCB7IGV4Y2x1ZGVGaWVsZHMgPSBbJ3Nybm8nLCAnc2VyaWFsJywgJ2FjdGlvbiddLCBjdXJyZW5jeUZpZWxkcyA9IFtdIH0gPSBvcHRpb25zO1xyXG4gXHJcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5EZWZzLmZpbHRlcihjb2wgPT5cclxuICAgICAgY29sLmZpZWxkICYmXHJcbiAgICAgICFleGNsdWRlRmllbGRzLnNvbWUoZXggPT4gY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXgpKSAmJlxyXG4gICAgICAhZXhjbHVkZUZpZWxkcy5zb21lKGV4ID0+IGNvbC5oZWFkZXJOYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV4KSlcclxuICAgICk7XHJcbiBcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBbJ1NyIE5vJywgLi4uZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4gY29sLmhlYWRlck5hbWUgfHwgY29sLmZpZWxkKV07XHJcbiBcclxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLm1hcCgocm93LCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCByb3dEYXRhID0gZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHJvd1tjb2wuZmllbGRdO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSB8fCAnJztcclxuIFxyXG4gICAgICAgIC8vIEhhbmRsZSB2YXJpb3VzIGRhdGUgZmllbGQgbmFtZXNcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGROYW1lLmluY2x1ZGVzKCdkYXRlJykgfHxcclxuICAgICAgICAgICAgZmllbGROYW1lLmluY2x1ZGVzKCdidXNpbmVzc2RhdGUnKSkgJiZcclxuICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gXHJcbiAgICAgICAgLy8gRm9ybWF0IGN1cnJlbmN5IGZpZWxkc1xyXG4gICAgICAgIGlmIChjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZCgzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID8/ICcnO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIFtpbmRleCArIDEsIC4uLnJvd0RhdGFdO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4geyBoZWFkZXJzLCByb3dzIH07XHJcbiAgfVxyXG4gXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBERiBVbml2ZXJzYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgYXN5bmMgZXhwb3J0VG9QZGZVbml2ZXJzYWwodGl0bGU6IHN0cmluZywgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSwgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10sIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7IG9yaWVudGF0aW9uOiAnbGFuZHNjYXBlJywgdW5pdDogJ21tJywgZm9ybWF0OiBbNDAwLCAyMTBdIH0pO1xyXG4gXHJcbiAgICBjb25zdCBsb2dvV2lkdGggPSAzOC40LCBsb2dvSGVpZ2h0ID0gMTcuNSwgbG9nb1ggPSAxNSwgbG9nb1kgPSAxMDtcclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aDtcclxuICAgIGNvbnN0IHRpdGxlWSA9IDE4O1xyXG4gXHJcbiAgICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICAgIGRvYy5hZGRJbWFnZSh0aGlzLmxvZ29CYXNlNjQsICdQTkcnLCBsb2dvWCwgbG9nb1ksIGxvZ29XaWR0aCwgbG9nb0hlaWdodCk7XHJcbiAgICB9XHJcbiBcclxuICAgIGRvYy5zZXRGb250U2l6ZSgxNSk7XHJcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgIGRvYy50ZXh0KHRpdGxlLCBwYWdlV2lkdGggLyAyLCB0aXRsZVksIHsgYWxpZ246ICdjZW50ZXInIH0pO1xyXG4gXHJcbiAgICBsZXQgY3VycmVudFkgPSB0aXRsZVkgKyAxNDtcclxuICAgIGRvYy5zZXRGb250U2l6ZSh0aGlzLnBkZkZvbnRTaXplKTtcclxuICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHkgPSBjdXJyZW50WSArIGkgKiB0aGlzLnBkZkxpbmVIZWlnaHQ7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChsYWJlbCwgdGhpcy5wZGZMZWZ0TWFyZ2luLCB5KTtcclxuICAgICAgY29uc3QgbGFiZWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobGFiZWwgKyAnICcpO1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICBkb2MudGV4dCh2YWx1ZSwgdGhpcy5wZGZMZWZ0TWFyZ2luICsgbGFiZWxXaWR0aCwgeSk7XHJcbiAgICB9KTtcclxuICAgIGN1cnJlbnRZICs9IG1ldGFkYXRhLmxlbmd0aCAqIHRoaXMucGRmTGluZUhlaWdodCArIDU7XHJcbiBcclxuICAgIGNvbnN0IGNvbHVtblN0eWxlczogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IHt9O1xyXG4gICAgaGVhZGVycy5mb3JFYWNoKChfLCBpKSA9PiBjb2x1bW5TdHlsZXNbaV0gPSB7IGNlbGxXaWR0aDogJ2F1dG8nIH0pO1xyXG4gXHJcbiAgICBkb2MuYXV0b1RhYmxlKHtcclxuICAgICAgaGVhZDogW2hlYWRlcnNdLFxyXG4gICAgICBib2R5OiByb3dzLFxyXG4gICAgICBzdGFydFk6IGN1cnJlbnRZLFxyXG4gICAgICB0aGVtZTogJ2dyaWQnLFxyXG4gICAgICBoZWFkU3R5bGVzOiB7XHJcbiAgICAgICAgZmlsbENvbG9yOiBbMjIwLCAyMjAsIDIyMF0sIHRleHRDb2xvcjogMCxcclxuICAgICAgICBmb250U3R5bGU6ICdib2xkJywgZm9udFNpemU6IDksIGhhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHlTdHlsZXM6IHsgZm9udFNpemU6IDgsIGZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTVdLCB0ZXh0Q29sb3I6IFswLCAwLCAwXSB9LFxyXG4gICAgICBzdHlsZXM6IHsgY2VsbFBhZGRpbmc6IDIsIG92ZXJmbG93OiAnbGluZWJyZWFrJywgbWluQ2VsbEhlaWdodDogNiB9LFxyXG4gICAgICBjb2x1bW5TdHlsZXNcclxuICAgIH0pO1xyXG4gXHJcbiAgICBkb2Muc2F2ZShmaWxlTmFtZSk7XHJcbiAgfVxyXG4gXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV4Y2VsIFVuaXZlcnNhbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBleHBvcnRUb0V4Y2VsVW5pdmVyc2FsKHRpdGxlOiBzdHJpbmcsIG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10sIGhlYWRlcnM6IHN0cmluZ1tdLCByb3dzOiBhbnlbXVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xyXG4gIGNvbnN0IHdvcmtzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCh0aXRsZSk7XHJcbiBcclxuICBsZXQgY3VycmVudFJvdyA9IDE7XHJcbiBcclxuICAvLyBBZGQgaW1hZ2UgaWYgYXZhaWxhYmxlXHJcbiAgaWYgKHRoaXMubG9nb0Jhc2U2NCkge1xyXG4gICAgY29uc3QgYmFzZTY0RGF0YSA9IHRoaXMubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcclxuICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XHJcbiAgICAgIGJhc2U2NDogYmFzZTY0RGF0YSxcclxuICAgICAgZXh0ZW5zaW9uOiAncG5nJyxcclxuICAgIH0pO1xyXG4gXHJcbiAgICAvLyBQbGFjZSBpbWFnZSBhdCB0b3AtbGVmdCAoZS5nLiwgQTE6QzQpXHJcbiAgICB3b3Jrc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwge1xyXG4gICAgICB0bDogeyBjb2w6IDAsIHJvdzogMCB9LFxyXG4gICAgICBleHQ6IHsgd2lkdGg6IDE0NSwgaGVpZ2h0OiA2NiB9LFxyXG4gICAgICBlZGl0QXM6ICdvbmVDZWxsJ1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gXHJcbiAgLy8gQWRkIHRpdGxlIGFsaWduZWQgaW4gbWlkZGxlIGhvcml6b250YWxseSAobWVyZ2VkIGFjcm9zcyBhbGwgY29sdW1ucylcclxuICBjb25zdCB0aXRsZVJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdyk7XHJcbiAgdGl0bGVSb3cuZ2V0Q2VsbCg0KS52YWx1ZSA9IHRpdGxlO1xyXG4gIHRpdGxlUm93LmdldENlbGwoNCkuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTYgfTtcclxuICB0aXRsZVJvdy5nZXRDZWxsKDQpLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnbGVmdCcgfTtcclxuIFxyXG4gIGNvbnN0IHRpdGxlTWVyZ2VFbmQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY0ICsgaGVhZGVycy5sZW5ndGgpO1xyXG4gIHdvcmtzaGVldC5tZXJnZUNlbGxzKGBEJHtjdXJyZW50Um93fToke3RpdGxlTWVyZ2VFbmR9JHtjdXJyZW50Um93fWApO1xyXG4gIGN1cnJlbnRSb3cgKz0gMzsgLy8gTW92ZSBwYXN0IGltYWdlIHNwYWNlXHJcbiBcclxuICAvLyBBZGQgbWV0YWRhdGFcclxuICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSkgPT4ge1xyXG4gICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDZWxsKDEpO1xyXG4gICAgY2VsbC52YWx1ZSA9IHtcclxuICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICB7IHRleHQ6IGAke2xhYmVsfTogYCwgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICB7IHRleHQ6IHZhbHVlID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEEke3Jvdy5udW1iZXJ9OiR7U3RyaW5nLmZyb21DaGFyQ29kZSg2NCArIGhlYWRlcnMubGVuZ3RoKX0ke3Jvdy5udW1iZXJ9YCk7XHJcbiAgfSk7XHJcbiBcclxuICB3b3Jrc2hlZXQuYWRkUm93KFtdKTtcclxuICBjdXJyZW50Um93Kys7XHJcbiBcclxuICAvLyBBZGQgdGFibGUgaGVhZGVyIHJvd1xyXG4gIGNvbnN0IGhlYWRlclJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICBoZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaSkgPT4ge1xyXG4gICAgY29uc3QgY2VsbCA9IGhlYWRlclJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgIGNlbGwudmFsdWUgPSBoZWFkZXI7XHJcbiAgICBjZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgIGNlbGwuZmlsbCA9IHsgdHlwZTogJ3BhdHRlcm4nLCBwYXR0ZXJuOiAnc29saWQnLCBmZ0NvbG9yOiB7IGFyZ2I6ICdEOUQ5RDknIH0gfTtcclxuICAgIGNlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdjZW50ZXInIH07XHJcbiAgICBjZWxsLmJvcmRlciA9IHtcclxuICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgfTtcclxuICB9KTtcclxuIFxyXG4gIGNvbnN0IGRhdGFTdGFydFJvdyA9IGN1cnJlbnRSb3c7XHJcbiAgcm93cy5mb3JFYWNoKHJvd0RhdGEgPT4ge1xyXG4gICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgcm93RGF0YS5mb3JFYWNoKCh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBjZWxsID0gcm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgICBjZWxsLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIGNlbGwuYm9yZGVyID0ge1xyXG4gICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG4gXHJcbiAgLy8gQXV0byBjb2x1bW4gd2lkdGhzXHJcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgbGV0IG1heExlbmd0aCA9IGhlYWRlcnNbaSAtIDFdLmxlbmd0aDtcclxuICAgIGZvciAobGV0IHJvd051bSA9IGRhdGFTdGFydFJvdzsgcm93TnVtIDw9IHdvcmtzaGVldC5sYXN0Um93IS5udW1iZXI7IHJvd051bSsrKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IHdvcmtzaGVldC5nZXRSb3cocm93TnVtKS5nZXRDZWxsKGkpLnZhbHVlPy50b1N0cmluZygpIHx8ICcnO1xyXG4gICAgICBtYXhMZW5ndGggPSBNYXRoLm1heChtYXhMZW5ndGgsIHZhbC5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgd29ya3NoZWV0LmdldENvbHVtbihpKS53aWR0aCA9IG1heExlbmd0aCArIDI7XHJcbiAgfVxyXG4gXHJcbiAgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpLnRoZW4oYnVmZmVyID0+IHtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXHJcbiAgICB9KTtcclxuICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xyXG4gIH0pO1xyXG59XHJcbiBcclxuIFxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDU1YgVW5pdmVyc2FsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIGV4cG9ydFRvQ3N2VW5pdmVyc2FsKHRpdGxlOiBzdHJpbmcsIG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10sIGhlYWRlcnM6IHN0cmluZ1tdLCByb3dzOiBhbnlbXVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBtZXRhUm93cyA9IG1ldGFkYXRhLm1hcCgoW2ssIHZdKSA9PiBbYCR7a306ICR7dn1gXSk7XHJcbiAgICBjb25zdCBjc3ZDb250ZW50ID0gW1xyXG4gICAgICBbdGl0bGVdLFxyXG4gICAgICAuLi5tZXRhUm93cyxcclxuICAgICAgW10sXHJcbiAgICAgIGhlYWRlcnMsXHJcbiAgICAgIC4uLnJvd3MubWFwKHJvdyA9PiByb3cubWFwKHZhbHVlID0+IGBcIiR7dmFsdWV9XCJgKSlcclxuICAgIF0ubWFwKGUgPT4gZS5qb2luKCcsJykpLmpvaW4oJ1xcbicpO1xyXG4gXHJcbiAgICB0aGlzLmRvd25sb2FkRmlsZShjc3ZDb250ZW50LCBmaWxlTmFtZSwgJ3RleHQvY3N2Jyk7XHJcbiAgfVxyXG4gXHJcbiAgcHJpdmF0ZSBkb3dubG9hZEZpbGUoZGF0YTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHsgdHlwZSB9KTtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuIl19
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NoYXJlZC9leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOztBQVd4QyxNQUFNLE9BQU8sYUFBYTtJQU94QjtRQUxnQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNoQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUlsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsNkNBQTZDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNERBQTREO0lBQ3BELGlCQUFpQixDQUFDLFNBQWlCO1FBQzNDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUM5QixHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUVwQixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxD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QUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7MEdBblJVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcclxuaW1wb3J0ICogYXMgRXhjZWxKUyBmcm9tICdleGNlbGpzJztcclxuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5cclxuZGVjbGFyZSBtb2R1bGUgJ2pzcGRmJyB7XHJcbiAgaW50ZXJmYWNlIGpzUERGIHtcclxuICAgIGF1dG9UYWJsZTogKG9wdGlvbnM6IGFueSkgPT4ganNQREY7XHJcbiAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFeHBvcnRTZXJ2aWNlIHtcclxuXHJcbiBwcml2YXRlIHJlYWRvbmx5IHBkZkZvbnRTaXplID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwZGZMaW5lSGVpZ2h0ID0gNztcclxuICBwcml2YXRlIHJlYWRvbmx5IHBkZkxlZnRNYXJnaW4gPSAxNTtcclxuICBwcml2YXRlIGxvZ29CYXNlNjQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuIFxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5sb2FkSW1hZ2VBc0Jhc2U2NCgnYXNzZXRzL3JlcG9ydHMtbGliL2Fzc2V0cy9pbWFnZXMvWE1Mb2dvLnBuZycpLnRoZW4oYmFzZTY0ID0+IHtcclxuICAgICAgdGhpcy5sb2dvQmFzZTY0ID0gYmFzZTY0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFV0aWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBsb2FkSW1hZ2VBc0Jhc2U2NChpbWFnZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgaW1nLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICBpbWcuc3JjID0gaW1hZ2VQYXRoO1xyXG4gXHJcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IDY7XHJcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiBzY2FsZTtcclxuICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQgKiBzY2FsZTtcclxuIFxyXG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgaWYgKGN0eCkge1xyXG4gICAgICAgIGN0eC5zY2FsZShzY2FsZSwgc2NhbGUpO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICBjb25zdCBiYXNlNjQgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApOyAvLyAxLjAgPSBoaWdoZXN0IHF1YWxpdHlcclxuICAgICAgICByZXNvbHZlKGJhc2U2NCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVqZWN0KCdGYWlsZWQgdG8gZ2V0IGNhbnZhcyBjb250ZXh0LicpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gXHJcbiAgICBpbWcub25lcnJvciA9ICgpID0+IHJlamVjdCgnRmFpbGVkIHRvIGxvYWQgaW1hZ2U6ICcgKyBpbWFnZVBhdGgpO1xyXG4gIH0pO1xyXG59XHJcbiBcclxuICBmb3JtYXREYXRlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSkgPyAnJyA6XHJcbiAgICAgIGAke2RhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0vJHsoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfS8ke2RhdGUuZ2V0RnVsbFllYXIoKX1gO1xyXG4gIH1cclxuICBcclxuICBmb3JtYXREYXRlVGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgY29uc3QgbW9udGggPSAoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gIC8vIDEyLWhvdXIgZm9ybWF0XHJcbiAgbGV0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xyXG4gIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgY29uc3QgYW1wbSA9IGhvdXJzID49IDEyID8gJ1BNJyA6ICdBTSc7XHJcbiAgaG91cnMgPSBob3VycyAlIDEyO1xyXG4gIGhvdXJzID0gaG91cnMgPyBob3VycyA6IDEyOyAvLyB0aGUgaG91ciAnMCcgc2hvdWxkIGJlICcxMidcclxuICBjb25zdCBob3Vyc1N0ciA9IGhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuXHJcbiAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfSAke2hvdXJzU3RyfToke21pbnV0ZXN9ICR7YW1wbX1gO1xyXG59XHJcbiBcclxuICBnZW5lcmF0ZVJlcG9ydE1ldGFkYXRhKG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10pOiBbc3RyaW5nLCBzdHJpbmddW10ge1xyXG4gIHJldHVybiBtZXRhZGF0YS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpO1xyXG4gIH1cclxuIFxyXG4gIHByZXBhcmVFeHBvcnRUYWJsZShkYXRhOiBhbnlbXSwgY29sdW1uRGVmczogYW55W10sIG9wdGlvbnM6IHtcclxuICAgIGV4Y2x1ZGVGaWVsZHM/OiBzdHJpbmdbXSxcclxuICAgIGN1cnJlbmN5RmllbGRzPzogc3RyaW5nW11cclxuICB9ID0ge30pOiB7IGhlYWRlcnM6IHN0cmluZ1tdLCByb3dzOiBhbnlbXVtdIH0ge1xyXG4gICAgY29uc3QgeyBleGNsdWRlRmllbGRzID0gWydzcm5vJ10sIGN1cnJlbmN5RmllbGRzID0gW10gfSA9IG9wdGlvbnM7XHJcbiBcclxuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IGNvbHVtbkRlZnMuZmlsdGVyKGNvbCA9PlxyXG4gICAgICBjb2wuZmllbGQgJiZcclxuICAgICAgIWV4Y2x1ZGVGaWVsZHMuc29tZShleCA9PiBjb2wuZmllbGQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhleCkpICYmXHJcbiAgICAgICFleGNsdWRlRmllbGRzLnNvbWUoZXggPT4gY29sLmhlYWRlck5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXgpKVxyXG4gICAgKTtcclxuIFxyXG4gICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5maWx0ZXJlZENvbHVtbnMubWFwKGNvbCA9PiBjb2wuaGVhZGVyTmFtZSB8fCBjb2wuZmllbGQpXTtcclxuIFxyXG4gICAgY29uc3Qgcm93cyA9IGRhdGEubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJvd0RhdGEgPSBmaWx0ZXJlZENvbHVtbnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gcm93W2NvbC5maWVsZF07XHJcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gXHJcbiAgICAgICAgLy8gSGFuZGxlIHZhcmlvdXMgZGF0ZSBmaWVsZCBuYW1lc1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZE5hbWUuaW5jbHVkZXMoJ2RhdGUnKSB8fFxyXG4gICAgICAgICAgICBmaWVsZE5hbWUuaW5jbHVkZXMoJ2J1c2luZXNzZGF0ZScpKSAmJlxyXG4gICAgICAgICAgdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiBcclxuICAgICAgICAvLyBGb3JtYXQgY3VycmVuY3kgZmllbGRzXHJcbiAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgJiYgdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93RGF0YV07XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IGhlYWRlcnMsIHJvd3MgfTtcclxuICB9XHJcbiBcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUERGIFVuaXZlcnNhbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBhc3luYyBleHBvcnRUb1BkZlVuaXZlcnNhbCh0aXRsZTogc3RyaW5nLCBtZXRhZGF0YTogW3N0cmluZywgc3RyaW5nXVtdLCBoZWFkZXJzOiBzdHJpbmdbXSwgcm93czogYW55W11bXSwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6IFs0MDAsIDIxMF0gfSk7XHJcbiBcclxuICAgIGNvbnN0IGxvZ29XaWR0aCA9IDM4LjQsIGxvZ29IZWlnaHQgPSAxNy41LCBsb2dvWCA9IDE1LCBsb2dvWSA9IDEwO1xyXG4gICAgY29uc3QgcGFnZVdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoO1xyXG4gICAgY29uc3QgdGl0bGVZID0gMTg7XHJcbiBcclxuICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgZG9jLmFkZEltYWdlKHRoaXMubG9nb0Jhc2U2NCwgJ1BORycsIGxvZ29YLCBsb2dvWSwgbG9nb1dpZHRoLCBsb2dvSGVpZ2h0KTtcclxuICAgIH1cclxuIFxyXG4gICAgZG9jLnNldEZvbnRTaXplKDE1KTtcclxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgZG9jLnRleHQodGl0bGUsIHBhZ2VXaWR0aCAvIDIsIHRpdGxlWSwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XHJcbiBcclxuICAgIGxldCBjdXJyZW50WSA9IHRpdGxlWSArIDE0O1xyXG4gICAgZG9jLnNldEZvbnRTaXplKHRoaXMucGRmRm9udFNpemUpO1xyXG4gICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGkpID0+IHtcclxuICAgICAgY29uc3QgeSA9IGN1cnJlbnRZICsgaSAqIHRoaXMucGRmTGluZUhlaWdodDtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICAgIGRvYy50ZXh0KGxhYmVsLCB0aGlzLnBkZkxlZnRNYXJnaW4sIHkpO1xyXG4gICAgICBjb25zdCBsYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChsYWJlbCArICcgJyk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgIGRvYy50ZXh0KHZhbHVlLCB0aGlzLnBkZkxlZnRNYXJnaW4gKyBsYWJlbFdpZHRoLCB5KTtcclxuICAgIH0pO1xyXG4gICAgY3VycmVudFkgKz0gbWV0YWRhdGEubGVuZ3RoICogdGhpcy5wZGZMaW5lSGVpZ2h0ICsgNTtcclxuIFxyXG4gICAgY29uc3QgY29sdW1uU3R5bGVzOiB7IFtrZXk6IG51bWJlcl06IGFueSB9ID0ge307XHJcbiAgICBoZWFkZXJzLmZvckVhY2goKF8sIGkpID0+IGNvbHVtblN0eWxlc1tpXSA9IHsgY2VsbFdpZHRoOiAnYXV0bycgfSk7XHJcbiBcclxuICAgIGRvYy5hdXRvVGFibGUoe1xyXG4gICAgICBoZWFkOiBbaGVhZGVyc10sXHJcbiAgICAgIGJvZHk6IHJvd3MsXHJcbiAgICAgIHN0YXJ0WTogY3VycmVudFksXHJcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgIGhlYWRTdHlsZXM6IHtcclxuICAgICAgICBmaWxsQ29sb3I6IFsyMjAsIDIyMCwgMjIwXSwgdGV4dENvbG9yOiAwLFxyXG4gICAgICAgIGZvbnRTdHlsZTogJ2JvbGQnLCBmb250U2l6ZTogOSwgaGFsaWduOiAnY2VudGVyJyxcclxuICAgICAgfSxcclxuICAgICAgYm9keVN0eWxlczogeyBmb250U2l6ZTogOCwgZmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0sIHRleHRDb2xvcjogWzAsIDAsIDBdIH0sXHJcbiAgICAgIHN0eWxlczogeyBjZWxsUGFkZGluZzogMiwgb3ZlcmZsb3c6ICdsaW5lYnJlYWsnLCBtaW5DZWxsSGVpZ2h0OiA2IH0sXHJcbiAgICAgIGNvbHVtblN0eWxlc1xyXG4gICAgfSk7XHJcbiBcclxuICAgIGRvYy5zYXZlKGZpbGVOYW1lKTtcclxuICB9XHJcbiBcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXhjZWwgVW5pdmVyc2FsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIGV4cG9ydFRvRXhjZWxVbml2ZXJzYWwodGl0bGU6IHN0cmluZywgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSwgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICBjb25zdCB3b3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XHJcbiAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KHRpdGxlKTtcclxuIFxyXG4gIGxldCBjdXJyZW50Um93ID0gMTtcclxuIFxyXG4gIC8vIEFkZCBpbWFnZSBpZiBhdmFpbGFibGVcclxuICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICBjb25zdCBiYXNlNjREYXRhID0gdGhpcy5sb2dvQmFzZTY0LnJlcGxhY2UoL15kYXRhOmltYWdlXFwvXFx3KztiYXNlNjQsLywgJycpO1xyXG4gICAgY29uc3QgaW1hZ2VJZCA9IHdvcmtib29rLmFkZEltYWdlKHtcclxuICAgICAgYmFzZTY0OiBiYXNlNjREYXRhLFxyXG4gICAgICBleHRlbnNpb246ICdwbmcnLFxyXG4gICAgfSk7XHJcbiBcclxuICAgIC8vIFBsYWNlIGltYWdlIGF0IHRvcC1sZWZ0IChlLmcuLCBBMTpDNClcclxuICAgIHdvcmtzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XHJcbiAgICAgIHRsOiB7IGNvbDogMCwgcm93OiAwIH0sXHJcbiAgICAgIGV4dDogeyB3aWR0aDogMTQ1LCBoZWlnaHQ6IDY2IH0sXHJcbiAgICAgIGVkaXRBczogJ29uZUNlbGwnXHJcbiAgICB9KTtcclxuICB9XHJcbiBcclxuICAvLyBBZGQgdGl0bGUgYWxpZ25lZCBpbiBtaWRkbGUgaG9yaXpvbnRhbGx5IChtZXJnZWQgYWNyb3NzIGFsbCBjb2x1bW5zKVxyXG4gIGNvbnN0IHRpdGxlUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KTtcclxuICB0aXRsZVJvdy5nZXRDZWxsKDQpLnZhbHVlID0gdGl0bGU7XHJcbiAgdGl0bGVSb3cuZ2V0Q2VsbCg0KS5mb250ID0geyBib2xkOiB0cnVlLCBzaXplOiAxNiB9O1xyXG4gIHRpdGxlUm93LmdldENlbGwoNCkuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdsZWZ0JyB9O1xyXG4gXHJcbiAgY29uc3QgdGl0bGVNZXJnZUVuZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjQgKyBoZWFkZXJzLmxlbmd0aCk7XHJcbiAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEQke2N1cnJlbnRSb3d9OiR7dGl0bGVNZXJnZUVuZH0ke2N1cnJlbnRSb3d9YCk7XHJcbiAgY3VycmVudFJvdyArPSAzOyAvLyBNb3ZlIHBhc3QgaW1hZ2Ugc3BhY2VcclxuIFxyXG4gIC8vIEFkZCBtZXRhZGF0YVxyXG4gIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdKSA9PiB7XHJcbiAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICBjb25zdCBjZWxsID0gcm93LmdldENlbGwoMSk7XHJcbiAgICBjZWxsLnZhbHVlID0ge1xyXG4gICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgIHsgdGV4dDogYCR7bGFiZWx9OiBgLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LFxyXG4gICAgICAgIHsgdGV4dDogdmFsdWUgPz8gJycsIGZvbnQ6IHsgYm9sZDogZmFsc2UgfSB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgICB3b3Jrc2hlZXQubWVyZ2VDZWxscyhgQSR7cm93Lm51bWJlcn06JHtTdHJpbmcuZnJvbUNoYXJDb2RlKDY0ICsgaGVhZGVycy5sZW5ndGgpfSR7cm93Lm51bWJlcn1gKTtcclxuICB9KTtcclxuIFxyXG4gIHdvcmtzaGVldC5hZGRSb3coW10pO1xyXG4gIGN1cnJlbnRSb3crKztcclxuIFxyXG4gIC8vIEFkZCB0YWJsZSBoZWFkZXIgcm93XHJcbiAgY29uc3QgaGVhZGVyUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpKSA9PiB7XHJcbiAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSArIDEpO1xyXG4gICAgY2VsbC52YWx1ZSA9IGhlYWRlcjtcclxuICAgIGNlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xyXG4gICAgY2VsbC5maWxsID0geyB0eXBlOiAncGF0dGVybicsIHBhdHRlcm46ICdzb2xpZCcsIGZnQ29sb3I6IHsgYXJnYjogJ0Q5RDlEOScgfSB9O1xyXG4gICAgY2VsbC5hbGlnbm1lbnQgPSB7IHZlcnRpY2FsOiAnbWlkZGxlJywgaG9yaXpvbnRhbDogJ2NlbnRlcicgfTtcclxuICAgIGNlbGwuYm9yZGVyID0ge1xyXG4gICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICB9O1xyXG4gIH0pO1xyXG4gXHJcbiAgY29uc3QgZGF0YVN0YXJ0Um93ID0gY3VycmVudFJvdztcclxuICByb3dzLmZvckVhY2gocm93RGF0YSA9PiB7XHJcbiAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICByb3dEYXRhLmZvckVhY2goKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2VsbChpICsgMSk7XHJcbiAgICAgIGNlbGwudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgY2VsbC5ib3JkZXIgPSB7XHJcbiAgICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbiBcclxuICAvLyBBdXRvIGNvbHVtbiB3aWR0aHNcclxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBsZXQgbWF4TGVuZ3RoID0gaGVhZGVyc1tpIC0gMV0ubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgcm93TnVtID0gZGF0YVN0YXJ0Um93OyByb3dOdW0gPD0gd29ya3NoZWV0Lmxhc3RSb3chLm51bWJlcjsgcm93TnVtKyspIHtcclxuICAgICAgY29uc3QgdmFsID0gd29ya3NoZWV0LmdldFJvdyhyb3dOdW0pLmdldENlbGwoaSkudmFsdWU/LnRvU3RyaW5nKCkgfHwgJyc7XHJcbiAgICAgIG1heExlbmd0aCA9IE1hdGgubWF4KG1heExlbmd0aCwgdmFsLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKGkpLndpZHRoID0gbWF4TGVuZ3RoICsgMjtcclxuICB9XHJcbiBcclxuICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWZmZXIgPT4ge1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XHJcbiAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcclxuICAgIH0pO1xyXG4gICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCBmaWxlTmFtZSk7XHJcbiAgfSk7XHJcbn1cclxuIFxyXG4gXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENTViBVbml2ZXJzYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgZXhwb3J0VG9Dc3ZVbml2ZXJzYWwodGl0bGU6IHN0cmluZywgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSwgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1ldGFSb3dzID0gbWV0YWRhdGEubWFwKChbaywgdl0pID0+IFtgJHtrfTogJHt2fWBdKTtcclxuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbXHJcbiAgICAgIFt0aXRsZV0sXHJcbiAgICAgIC4uLm1ldGFSb3dzLFxyXG4gICAgICBbXSxcclxuICAgICAgaGVhZGVycyxcclxuICAgICAgLi4ucm93cy5tYXAocm93ID0+IHJvdy5tYXAodmFsdWUgPT4gYFwiJHt2YWx1ZX1cImApKVxyXG4gICAgXS5tYXAoZSA9PiBlLmpvaW4oJywnKSkuam9pbignXFxuJyk7XHJcbiBcclxuICAgIHRoaXMuZG93bmxvYWRGaWxlKGNzdkNvbnRlbnQsIGZpbGVOYW1lLCAndGV4dC9jc3YnKTtcclxuICB9XHJcbiBcclxuICBwcml2YXRlIGRvd25sb2FkRmlsZShkYXRhOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlIH0pO1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICB9XHJcblxyXG59XHJcblxyXG4iXX0=