@firestitch/report 18.21.2 → 18.21.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/export/report-export-collector.service.d.ts +1 -8
- package/app/reports/export/report-export.service.d.ts +0 -1
- package/app/reports/export/report-pdf.service.d.ts +0 -1
- package/app/reports/export/report-pptx.service.d.ts +0 -2
- package/app/reports/export/report-text-layout.service.d.ts +0 -4
- package/esm2022/app/reports/components/component-grid/report-grid-formatter.mjs +23 -6
- package/esm2022/app/reports/components/component-text/component-text.component.mjs +3 -3
- package/esm2022/app/reports/export/report-export-collector.service.mjs +9 -15
- package/esm2022/app/reports/export/report-export.service.mjs +7 -34
- package/esm2022/app/reports/export/report-pdf.service.mjs +20 -39
- package/esm2022/app/reports/export/report-pptx.service.mjs +60 -101
- package/esm2022/app/reports/export/report-text-layout.service.mjs +5 -20
- package/fesm2022/{firestitch-report-echarts-BLr6SmeK.mjs → firestitch-report-echarts-CBBTk1Ql.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-BLr6SmeK.mjs.map → firestitch-report-echarts-CBBTk1Ql.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-D2dPznfE.mjs → firestitch-report-firestitch-report-Cl_JOBli.mjs} +121 -212
- package/fesm2022/firestitch-report-firestitch-report-Cl_JOBli.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/firestitch-report-firestitch-report-D2dPznfE.mjs.map +0 -1
|
@@ -8,7 +8,7 @@ import { DEFAULT_TEXT_COLOR, DEFAULT_TEXT_SIZE, TEXT_TABLE_BORDER_COLOR, TEXT_TA
|
|
|
8
8
|
import { REPORT_KPI_CHANGE_COLORS, REPORT_KPI_SPARKLINE_COLOR, REPORT_KPI_TRACK_COLOR, REPORT_MUTED_TEXT_COLOR, } from '../theme/palette';
|
|
9
9
|
import { isDrawn } from '../values';
|
|
10
10
|
import { renderChartImage } from './offscreen-chart';
|
|
11
|
-
import { HEADER_FOOTER_NAME, coverLines, emptyLabel, exportCell, exportNoteLines, exportTitle, exportWindowsLine, isEmptyTile, kpiCardHasExtras, kpiExportHeight, kpiExportParts, listColumns, listHeadings, listTotalsRow, moreRowsNotice, scaledKpiHeights,
|
|
11
|
+
import { HEADER_FOOTER_NAME, coverLines, emptyLabel, exportCell, exportNoteLines, exportTitle, exportWindowsLine, isEmptyTile, kpiCardHasExtras, kpiExportHeight, kpiExportParts, listColumns, listHeadings, listTotalsRow, moreRowsNotice, scaledKpiHeights, textSnippet, } from './report-export-collector.service';
|
|
12
12
|
import { gridExportTable } from './report-grid-export';
|
|
13
13
|
import { ReportTextLayoutService } from './report-text-layout.service';
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
@@ -81,9 +81,6 @@ const TEXT_LINE_HEIGHT = 1.25;
|
|
|
81
81
|
// How far a list item's text sits from the block's edge, points; the marker
|
|
82
82
|
// hangs in that space.
|
|
83
83
|
const LIST_INDENT = 16;
|
|
84
|
-
// What the export's overflow gate says the PDF does with a text block that does
|
|
85
|
-
// not fit its box.
|
|
86
|
-
const PDF_OVERFLOW_NOTE = 'The PDF cuts it off at the bottom of its box.';
|
|
87
84
|
// How far a table's group label steps in per level, points.
|
|
88
85
|
const GRID_INDENT = 8;
|
|
89
86
|
// Builds the PDF client-side with jspdf. The report's unit is inches and PDFs
|
|
@@ -103,14 +100,12 @@ const GRID_INDENT = 8;
|
|
|
103
100
|
// without end trying to place it.
|
|
104
101
|
//
|
|
105
102
|
// A component that fails to draw is marked in its box and the file goes on
|
|
106
|
-
// (_guarded); build() hands back the ones that did
|
|
107
|
-
// cut.
|
|
103
|
+
// (_guarded); build() hands back the ones that did.
|
|
108
104
|
//
|
|
109
105
|
// A text block's tables are drawn by autoTable too, from the line its words
|
|
110
106
|
// reach, in the column widths the canvas gives them (ReportTextLayoutService).
|
|
111
|
-
// A text block is cut at the bottom of its box
|
|
112
|
-
//
|
|
113
|
-
// can ask about them before it saves.
|
|
107
|
+
// A text block is never cut at the bottom of its box: what runs past it draws
|
|
108
|
+
// on below, as on the canvas, down to the page's edge.
|
|
114
109
|
export class ReportPdfService {
|
|
115
110
|
_textLayout = inject(ReportTextLayoutService);
|
|
116
111
|
async build(collected) {
|
|
@@ -133,8 +128,6 @@ export class ReportPdfService {
|
|
|
133
128
|
}
|
|
134
129
|
}
|
|
135
130
|
return {
|
|
136
|
-
overflows: [...context.textOverflows.values()],
|
|
137
|
-
overflowNote: PDF_OVERFLOW_NOTE,
|
|
138
131
|
undrawn: [...context.undrawn.values()],
|
|
139
132
|
save: () => {
|
|
140
133
|
context.doc.save(`${this._slug(collected.report.name)}.pdf`);
|
|
@@ -162,7 +155,6 @@ export class ReportPdfService {
|
|
|
162
155
|
masterValues: this._pdfValues(collected.masterValues),
|
|
163
156
|
filterFields: collected.filterFields,
|
|
164
157
|
masterFilters: layerFilterFields(collected.filterFields, report.filterGroups ?? [], null),
|
|
165
|
-
textOverflows: new Map(),
|
|
166
158
|
undrawn: new Map(),
|
|
167
159
|
};
|
|
168
160
|
}
|
|
@@ -180,8 +172,8 @@ export class ReportPdfService {
|
|
|
180
172
|
if (item.component.type !== 'text') {
|
|
181
173
|
await this._renderComponent(context, collectedPage.page, item, tokens, overflows);
|
|
182
174
|
}
|
|
183
|
-
else
|
|
184
|
-
this.
|
|
175
|
+
else {
|
|
176
|
+
await this._renderText(context, item.component, pageTokens);
|
|
185
177
|
}
|
|
186
178
|
});
|
|
187
179
|
}
|
|
@@ -212,7 +204,7 @@ export class ReportPdfService {
|
|
|
212
204
|
componentId: component.id,
|
|
213
205
|
page,
|
|
214
206
|
name: component.type === 'text'
|
|
215
|
-
?
|
|
207
|
+
? textSnippet(component, tokens)
|
|
216
208
|
: exportTitle(component, tokens),
|
|
217
209
|
});
|
|
218
210
|
}
|
|
@@ -239,20 +231,10 @@ export class ReportPdfService {
|
|
|
239
231
|
const masterTokens = { ...tokens, values: context.masterValues, filters: context.masterFilters };
|
|
240
232
|
for (const component of (context.report.master?.components ?? []).filter(isDrawn)) {
|
|
241
233
|
await this._guarded(context, component, HEADER_FOOTER_NAME, masterTokens, true, async () => {
|
|
242
|
-
|
|
243
|
-
this._recordOverflow(context, component, HEADER_FOOTER_NAME, masterTokens);
|
|
244
|
-
}
|
|
234
|
+
await this._renderText(context, component, masterTokens);
|
|
245
235
|
});
|
|
246
236
|
}
|
|
247
237
|
}
|
|
248
|
-
// Lists a text block that was cut, under the page the export's overflow gate
|
|
249
|
-
// names it by. A block cut again on a later page (a header or footer) keeps
|
|
250
|
-
// the first entry.
|
|
251
|
-
_recordOverflow(context, component, page, tokens) {
|
|
252
|
-
if (!context.textOverflows.has(component.id)) {
|
|
253
|
-
context.textOverflows.set(component.id, textOverflow(component, page, tokens));
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
238
|
_titlePage(doc, collected, pageW, pageH) {
|
|
257
239
|
doc.setFont('helvetica', 'bold');
|
|
258
240
|
doc.setFontSize(28);
|
|
@@ -267,11 +249,11 @@ export class ReportPdfService {
|
|
|
267
249
|
// words between its tables are drawn line by line (_drawParagraphs) and each
|
|
268
250
|
// table by autoTable from the line the words above it reach
|
|
269
251
|
// (_drawTextTable). Only a block with a table is measured, for the edges
|
|
270
|
-
// and column widths the canvas gives its tables.
|
|
271
|
-
// the block's height
|
|
272
|
-
//
|
|
252
|
+
// and column widths the canvas gives its tables. Words and table rows that
|
|
253
|
+
// run past the block's height draw on below it, as on the canvas; only the
|
|
254
|
+
// page's edge stops them.
|
|
273
255
|
async _renderText(context, component, tokens) {
|
|
274
|
-
const box = this._textBox(component);
|
|
256
|
+
const box = this._textBox(component, context.pageH);
|
|
275
257
|
const blocks = textBlocks(component.config?.html ?? '', tokens);
|
|
276
258
|
const layout = blocks.some((block) => block.kind === 'table')
|
|
277
259
|
? await this._textLayout.measure(component, tokens)
|
|
@@ -287,23 +269,22 @@ export class ReportPdfService {
|
|
|
287
269
|
? this._drawParagraphs(context.doc, block.paragraphs, box, cursorY)
|
|
288
270
|
: this._drawTextTable(context, block.table, layout?.tables[tableIndex++] ?? null, box, onMargin ? cursorY : cursorY + TEXT_TABLE_MARGIN);
|
|
289
271
|
if (drawn.cut) {
|
|
290
|
-
return
|
|
272
|
+
return;
|
|
291
273
|
}
|
|
292
274
|
cursorY = drawn.cursorY;
|
|
293
275
|
onMargin = block.kind === 'table' || (onMargin && !block.paragraphs.length);
|
|
294
276
|
}
|
|
295
|
-
return false;
|
|
296
277
|
}
|
|
297
278
|
// Where a text block's words go: inside its padding, each edge 1/8" unless
|
|
298
|
-
// set.
|
|
299
|
-
_textBox(component) {
|
|
279
|
+
// set, down to the bottom of the page (pageH).
|
|
280
|
+
_textBox(component, pageH) {
|
|
300
281
|
const padding = component.config?.padding;
|
|
301
282
|
const inset = (value) => (value ?? DEFAULT_COMPONENT_PADDING) * PT;
|
|
302
283
|
return {
|
|
303
284
|
left: component.x * PT + inset(padding?.left),
|
|
304
285
|
top: component.y * PT + inset(padding?.top),
|
|
305
286
|
width: component.w * PT - inset(padding?.left) - inset(padding?.right),
|
|
306
|
-
bottom:
|
|
287
|
+
bottom: pageH,
|
|
307
288
|
};
|
|
308
289
|
}
|
|
309
290
|
// Paragraphs drawn line by line from cursorY down: each one's runs are broken
|
|
@@ -367,9 +348,9 @@ export class ReportPdfService {
|
|
|
367
348
|
// evenly. A row is as tall as its cells' words wrapped as _drawParagraphs
|
|
368
349
|
// wraps them, and the words are drawn into each cell once autoTable has
|
|
369
350
|
// drawn its grid lines and fill (_drawTextCell), so they keep their runs'
|
|
370
|
-
// fonts and colors. Only the rows the box
|
|
371
|
-
//
|
|
372
|
-
// TEXT_TABLE_MARGIN under it.
|
|
351
|
+
// fonts and colors. Only the rows that fit above the box's bottom, the
|
|
352
|
+
// page's edge, are drawn, and a table that loses any, or runs past its page
|
|
353
|
+
// anyway, is cut. The cursor it leaves is TEXT_TABLE_MARGIN under it.
|
|
373
354
|
_drawTextTable(context, table, layout, box, top) {
|
|
374
355
|
if (top >= box.bottom) {
|
|
375
356
|
return { cursorY: top, cut: true };
|
|
@@ -1153,4 +1134,4 @@ export class ReportPdfService {
|
|
|
1153
1134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportPdfService, decorators: [{
|
|
1154
1135
|
type: Injectable
|
|
1155
1136
|
}] });
|
|
1156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBkZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2V4cG9ydC9yZXBvcnQtcGRmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVVsRCxPQUFPLEVBQzJDLFdBQVcsRUFBRSxvQkFBb0IsR0FDbEYsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFDaEgsaUJBQWlCLEVBQ2pCLFVBQVUsR0FDWCxNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQ0wsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEdBQ3RHLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQzRELGtCQUFrQixFQUNqRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFDbEgsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQzNHLGdCQUFn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OUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2YsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2IsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDSCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLG1EQUFt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MEU7SUFDMUUsNEVBQTRFO0lBQ3BFLFVBQVUsQ0FBQyxNQUFpQztRQUNsRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckUsR0FBRztZQUNILEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1NBQ2pGLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUM7SUFDNUYsQ0FBQzt3R0EveUNVLGdCQUFnQjs0R0FBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlcG9ydEtwaVRyZW5kIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWtwaS10cmVuZC5lbnVtJztcbmltcG9ydCB7IGxheWVyRmlsdGVyRmllbGRzIH0gZnJvbSAnLi4vZmlsdGVyLXRleHQnO1xuaW1wb3J0IHsgcmVzb2x2ZVJlcG9ydFRpbWV6b25lIH0gZnJvbSAnLi4vZm9ybWF0JztcbmltcG9ydCB7XG4gIENvbXBvbmVudERhdGEsXG4gIEtwaUNvbmZpZyxcbiAgUmVwb3J0LFxuICBSZXBvcnRDb21wb25lbnQsXG4gIFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIFJlcG9ydEhlYWRlckZvb3RlcixcbiAgUmVwb3J0UGFnZSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEtwaUNhcmREZWx0YSwgS3BpQ2FyZFRhcmdldCwgS3BpU3BhcmtsaW5lUG9pbnQsIGtwaUNhcmRWaWV3LCBrcGlTcGFya2xpbmVHZW9tZXRyeSxcbn0gZnJvbSAnLi4va3BpLWNhcmQnO1xuaW1wb3J0IHsgREVGQVVMVF9DT01QT05FTlRfUEFERElORyB9IGZyb20gJy4uL2xheW91dCc7XG5pbXBvcnQge1xuICBERUZBVUxUX1RFWFRfQ09MT1IsIERFRkFVTFRfVEVYVF9TSVpFLCBURVhUX1RBQkxFX0JPUkRFUl9DT0xPUiwgVEVYVF9UQUJMRV9CT1JERVJfV0lEVEgsIFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HLFxuICBURVhUX1RBQkxFX01BUkdJTiwgVGV4dEZpbHRlckZpZWxkLCBUZXh0UGFyYWdyYXBoLCBUZXh0UnVuLCBUZXh0VGFibGUsIFRleHRUYWJsZUNlbGwsIFRleHRUb2tlbkNvbnRleHQsIFRleHRWYWx1ZSxcbiAgdGV4dEJsb2Nrcyxcbn0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQge1xuICBSRVBPUlRfS1BJX0NIQU5HRV9DT0xPUlMsIFJFUE9SVF9LUElfU1BBUktMSU5FX0NPTE9SLCBSRVBPUlRfS1BJX1RSQUNLX0NPTE9SLCBSRVBPUlRfTVVURURfVEVYVF9DT0xPUixcbn0gZnJvbSAnLi4vdGhlbWUvcGFsZXR0ZSc7XG5pbXBvcnQgeyBpc0RyYXduIH0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB7IHJlbmRlckNoYXJ0SW1hZ2UgfSBmcm9tICcuL29mZnNjcmVlbi1jaGFydCc7XG5pbXBvcnQge1xuICBCdWlsdEV4cG9ydCwgQ29sbGVjdGVkQ29tcG9uZW50LCBDb2xsZWN0ZWRQYWdlLCBDb2xsZWN0ZWRSZXBvcnQsIEhFQURFUl9GT09URVJfTkFNRSwgS3BpRXhwb3J0SGVpZ2h0cywgVGV4dE92ZXJmbG93LFxuICBVbmRyYXduQ29tcG9uZW50LCBjb3ZlckxpbmVzLCBlbXB0eUxhYmVsLCBleHBvcnRDZWxsLCBleHBvcnROb3RlTGluZXMsIGV4cG9ydFRpdGxlLCBleHBvcnRXaW5kb3dzTGluZSwgaXNFbXB0eVRpbGUsXG4gIGtwaUNhcmRIYXNFeHRyYXMsIGtwaUV4cG9ydEhlaWdodCwga3BpRXhwb3J0UGFydHMsIGxpc3RDb2x1bW5zLCBsaXN0SGVhZGluZ3MsIGxpc3RUb3RhbHNSb3csIG1vcmVSb3dzTm90aWNlLFxuICBzY2FsZWRLcGlIZWlnaHRzLCB0ZXh0T3ZlcmZsb3csXG59IGZyb20gJy4vcmVwb3J0LWV4cG9ydC1jb2xsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkRXhwb3J0Q2VsbCwgZ3JpZEV4cG9ydFRhYmxlIH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1leHBvcnQnO1xuaW1wb3J0IHsgUmVwb3J0VGV4dExheW91dFNlcnZpY2UsIFRleHRUYWJsZUxheW91dCB9IGZyb20gJy4vcmVwb3J0LXRleHQtbGF5b3V0LnNlcnZpY2UnO1xuXG5cbi8vIEluY2hlcyDihpIgcG9pbnRzICh0aGUgUERGIHVuaXQpLlxuY29uc3QgUFQgPSA3MjtcblxuLy8gQ29tcG9uZW50IHRpdGxlIHN0cmlwIGhlaWdodCwgcG9pbnRzLlxuY29uc3QgVElUTEVfSCA9IDE4O1xuXG4vLyBUaGUgc21hbGwgcHJpbnQgYSBjb21wb25lbnQgbWF5IGNhcnJ5LCBwb2ludHM6IHRoZSBkYXlzIGl0IHJlYWRzIHVuZGVyIGl0c1xuLy8gdGl0bGUgKGEgc3VidGl0bGUgbGluZSksIGl0cyBub3RlcyBhdCB0aGUgZm9vdCBvZiBpdHMgYm94IChhIGxpbmUgZWFjaCksIGFuZFxuLy8gdGhlIGxpbmVzIG9mIGEgS1BJIGNhcmQgdW5kZXIgaXRzIHZhbHVlLiBBIGNoYXJ0J3Mgb3IgYSBsaXN0J3Mgbm90ZXMgZ2l2ZVxuLy8gd2F5IGJlZm9yZSBpdHMgYm9keSB3b3VsZCBzaHJpbmsgdW5kZXIgTUlOX0JPRFlfSC5cbmNvbnN0IFNNQUxMX1NJWkUgPSA3LjU7XG5jb25zdCBTVUJUSVRMRV9IID0gMTE7XG5jb25zdCBOT1RFX0xJTkVfSCA9IDEwO1xuY29uc3QgTUlOX0JPRFlfSCA9IDQwO1xuY29uc3QgTVVURURfQ09MT1IgPSBgIyR7UkVQT1JUX01VVEVEX1RFWFRfQ09MT1J9YDtcblxuLy8gQSBLUEkgY2FyZCdzIHBhcnRzLCB0b3AgdG8gYm90dG9tLCBwb2ludHMgKGtwaUV4cG9ydFBhcnRzIHNoZWRzIHRoZVxuLy8gc3BhcmtsaW5lLCB0aGVuIHRoZSB0YXJnZXQsIHRoZW4gdGhlIG5vdGVzIG9uIGEgc2hvcnQgdGlsZSkuIFRoZSB2YWx1ZSdzXG4vLyBiYXNlbGluZSBzaXRzIEtQSV9WQUxVRV9CQVNFTElORSB1bmRlciBpdHMgdG9wLlxuY29uc3QgS1BJX0hFSUdIVFM6IEtwaUV4cG9ydEhlaWdodHMgPSB7XG4gIHZhbHVlOiAzMCxcbiAgbGFiZWw6IDEzLFxuICBkZWx0YTogMTMsXG4gIHdpbmRvdzogTk9URV9MSU5FX0gsXG4gIHRhcmdldDogTk9URV9MSU5FX0ggKyA2LFxuICBzcGFya2xpbmU6IDI4LFxuICBub3RlOiBOT1RFX0xJTkVfSCxcbn07XG5jb25zdCBLUElfVkFMVUVfQkFTRUxJTkUgPSAyMztcbmNvbnN0IEtQSV9ERUxUQV9TSVpFID0gOTtcbi8vIFRoZSBkZWx0YSdzIHRyaWFuZ2xlOiBpdHMgc2lkZSwgYW5kIHRoZSBnYXAgYmVmb3JlIHRoZSBjaGFuZ2UuXG5jb25zdCBLUElfQVJST1cgPSA2O1xuY29uc3QgS1BJX0FSUk9XX0dBUCA9IDM7XG4vLyBUaGUgdGFyZ2V0J3MgcHJvZ3Jlc3MgYmFyLCBhbmQgdGhlIHRyYWNrIGl0IGZpbGxzLlxuY29uc3QgS1BJX0JBUl9XID0gMTIwO1xuY29uc3QgS1BJX0JBUl9IID0gMztcbmNvbnN0IEtQSV9UUkFDS19DT0xPUiA9IGAjJHtSRVBPUlRfS1BJX1RSQUNLX0NPTE9SfWA7XG4vLyBUaGUgc3BhcmtsaW5lJ3Mgd2lkZXN0IGJveCwgaXRzIHRvcCBhbmQgYm90dG9tIGluc2V0LCBhbmQgaXRzIGRvdHMnIHJhZGl1cy5cbmNvbnN0IEtQSV9TUEFSS0xJTkVfVyA9IDE0MDtcbmNvbnN0IEtQSV9TUEFSS0xJTkVfSU5TRVQgPSAzO1xuY29uc3QgS1BJX0RPVF9SID0gMS41O1xuXG4vLyBSb3dzIGZldGNoZWQgZm9yIGEgbGlzdCdzIFBERiB0YWJsZS4gQSB0YWJsZSB0aGF0IG91dGdyb3dzIGl0cyBib3hcbi8vIGNvbnRpbnVlcyBvbnRvIHBhZ2VzIG9mIGl0cyBvd24sIHNvIHRoaXMgaXMgaG93IGZhciBpdCBtYXkgcnVuOiBhYm91dCAxMi0xNVxuLy8gY29udGludWF0aW9uIHBhZ2VzIG9uIGEgbGV0dGVyIHBhZ2UsIGFuZCBhIHRlbnRoIG9mIHRoZSBzZXJ2ZXIncyA1MDAwLXJvd1xuLy8gY2VpbGluZy4gQSBsb25nZXIgcmVzdWx0IGVuZHMgaW4gYSBtb3JlUm93c05vdGljZSgpIHJvdy5cbmV4cG9ydCBjb25zdCBQREZfTElTVF9ST1dTID0gNTAwO1xuXG4vLyBIb3cgZmFyIGEgY29udGludWF0aW9uIHRhYmxlIHNpdHMgaW5zaWRlIHRoZSBoZWFkZXIgYW5kIGZvb3RlciBiYW5kcyxcbi8vIHBvaW50cy4gQSBwYWdlIHdpdGggbm8gYmFuZCAob3Igd2l0aCB0aGUgbWFzdGVyIGhpZGRlbikga2VlcHNcbi8vIE5PX0JBTkRfTUFSR0lOIGZyb20gdGhhdCBlZGdlIGluc3RlYWQuXG5jb25zdCBDT05USU5VQVRJT05fR0FQID0gMC4yNSAqIFBUO1xuY29uc3QgTk9fQkFORF9NQVJHSU4gPSAwLjUgKiBQVDtcbmNvbnN0IE5PX0JBTkRTOiBSZXBvcnRIZWFkZXJGb290ZXIgPSB7IGhlYWRlckhlaWdodDogMCwgZm9vdGVySGVpZ2h0OiAwIH07XG5cbi8vIFRoZSBsYXN0IHJvdyBvZiBhIGxpc3QgYm94IHdob3NlIHJvd3MgY2Fycnkgb24gcGFzdCBpdC5cbmNvbnN0IENPTlRJTlVFRF9OT1RJQ0UgPSAnQ29udGludWVkIG9uIHRoZSBmb2xsb3dpbmcgcGFnZXMnO1xuXG4vLyBUaGUgbGFzdCByb3cgb2YgYSBsaXN0IGJveCB3aG9zZSByb3dzIGhhdmUgbm93aGVyZSB0byBnbzogaXRzIGhlYWRpbmcgYW5kXG4vLyB0b3RhbHMgcm93LCB3cmFwcGVkIHRhbGwgaW4gbmFycm93IGNvbHVtbnMsIGxlYXZlIGEgY29udGludWF0aW9uIHBhZ2Ugbm9cbi8vIHJvb20gZm9yIGEgcm93LlxuY29uc3QgTk9fUk9PTV9OT1RJQ0UgPSAnTm90IGVub3VnaCByb29tIGZvciB0aGlzIHRhYmxlIOKAlCBlbmxhcmdlIHRoZSB0aWxlJztcblxuLy8gQSBsaXN0J3Mgb3IgYSB0YWJsZSB0aWxlJ3MgdGFibGU6IGl0cyBmb250IHNpemUgYW5kIGNlbGwgcGFkZGluZywgcG9pbnRzLlxuY29uc3QgVEFCTEVfRk9OVF9TSVpFID0gODtcbmNvbnN0IFRBQkxFX0NFTExfUEFERElORyA9IDM7XG5cbi8vIFdoYXQgYSBjb21wb25lbnQncyBib3ggc2F5cyB3aGVuIGl0IGNvdWxkIG5vdCBiZSBkcmF3bi5cbmNvbnN0IFVORFJBV05fTk9URSA9ICdDb3VsZCBub3QgYmUgZHJhd24nO1xuXG4vLyBUaHJvd24gZnJvbSBhdXRvVGFibGUncyBwYWdlIGhvb2sgdG8gc3RvcCBhbiBvbi1wYWdlIHRhYmxlIGF0IHRoZSBmaXJzdCBwYWdlXG4vLyBpdCB3b3VsZCBhZGQgKF9kcmF3VGFibGUpLlxuY29uc3QgU1RSQVlfUEFHRSA9IG5ldyBFcnJvcignVGhlIHRhYmxlIHJhbiBwYXN0IGl0cyBwYWdlJyk7XG5cbi8vIEEgdGV4dCBsaW5lJ3MgaGVpZ2h0IGFzIGEgbXVsdGlwbGUgb2YgaXRzIGxhcmdlc3QgZm9udCBzaXplIOKAlCB0aGUgY2FudmFzXG4vLyBzdHlsZXNoZWV0J3MgbGluZS1oZWlnaHQsIHNvIGEgYmxvY2sgd3JhcHMgYW5kIHN0YWNrcyB0aGUgc2FtZSB3YXkuXG5jb25zdCBURVhUX0xJTkVfSEVJR0hUID0gMS4yNTtcblxuLy8gSG93IGZhciBhIGxpc3QgaXRlbSdzIHRleHQgc2l0cyBmcm9tIHRoZSBibG9jaydzIGVkZ2UsIHBvaW50czsgdGhlIG1hcmtlclxuLy8gaGFuZ3MgaW4gdGhhdCBzcGFjZS5cbmNvbnN0IExJU1RfSU5ERU5UID0gMTY7XG5cbi8vIFdoYXQgdGhlIGV4cG9ydCdzIG92ZXJmbG93IGdhdGUgc2F5cyB0aGUgUERGIGRvZXMgd2l0aCBhIHRleHQgYmxvY2sgdGhhdCBkb2VzXG4vLyBub3QgZml0IGl0cyBib3guXG5jb25zdCBQREZfT1ZFUkZMT1dfTk9URSA9ICdUaGUgUERGIGN1dHMgaXQgb2ZmIGF0IHRoZSBib3R0b20gb2YgaXRzIGJveC4nO1xuXG4vLyBXaGF0IGV2ZXJ5IGRyYXdpbmcgc3RlcCBvZiBvbmUgZXhwb3J0IHNoYXJlcywgYnVpbHQgb25jZSBpbiBidWlsZCgpLlxuLy8gU2l6ZXMgYXJlIHBvaW50cy5cbmludGVyZmFjZSBQZGZFeHBvcnRDb250ZXh0IHtcbiAgZG9jOiBhbnk7XG4gIGF1dG9UYWJsZTogYW55O1xuICAvLyBMYXlzIGEgdGFibGUgb3V0IHdpdGhvdXQgZHJhd2luZyBpdCwgZm9yIG1lYXN1cmluZyB3aGF0IGZpdHMuXG4gIGNyZWF0ZVRhYmxlOiBhbnk7XG4gIGpzUERGOiBhbnk7XG4gIHJlcG9ydDogUmVwb3J0O1xuICB0aW1lem9uZTogc3RyaW5nO1xuICBmb3JtYXRDb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0O1xuICBwYWdlVzogbnVtYmVyO1xuICBwYWdlSDogbnVtYmVyO1xuICBvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScgfCAncG9ydHJhaXQnO1xuICAvLyBXaGF0IHRoZSBoZWFkZXIgYW5kIGZvb3RlcidzIHZhbHVlIHRva2VucyBmaWxsIHdpdGgsIHRoZSBzYW1lIG9uIGV2ZXJ5XG4gIC8vIHBhZ2UsIGNvbnRpbnVhdGlvbiBwYWdlcyBpbmNsdWRlZCAoX3BkZlZhbHVlcykuXG4gIG1hc3RlclZhbHVlczogUmVjb3JkPHN0cmluZywgVGV4dFZhbHVlPjtcbiAgLy8gV2hhdCB0aGUge3tmaWx0ZXIuPGlkPn19IHRva2VucyBmaWxsIHdpdGgsIGV2ZXJ5IGdyb3VwJ3MsIHRoZSBzYW1lIG9uXG4gIC8vIGV2ZXJ5IHBhZ2U7IGEgcGFnZSByZWFkcyBpdHMgb3duIChsYXllckZpbHRlckZpZWxkcykuXG4gIGZpbHRlckZpZWxkczogUmVjb3JkPG51bWJlciwgVGV4dEZpbHRlckZpZWxkPjtcbiAgLy8gVGhlIG9uZXMgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHJlYWQ6IG5vIHBhZ2UgZmlsdGVyJ3MuXG4gIG1hc3RlckZpbHRlcnM6IFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD47XG4gIC8vIFRoZSB0ZXh0IGJsb2NrcyBjdXQgb2ZmIGF0IHRoZSBib3R0b20gb2YgdGhlaXIgYm94LCBieSBjb21wb25lbnQgaWQsIHNvIGFcbiAgLy8gaGVhZGVyIG9yIGZvb3RlciBibG9jayBjdXQgb24gZXZlcnkgcGFnZSBpcyBsaXN0ZWQgb25jZS5cbiAgdGV4dE92ZXJmbG93czogTWFwPG51bWJlciwgVGV4dE92ZXJmbG93PjtcbiAgLy8gVGhlIGNvbXBvbmVudHMgdGhhdCBjb3VsZCBub3QgYmUgZHJhd24gKF9ndWFyZGVkKSwgYnkgY29tcG9uZW50IGlkLlxuICB1bmRyYXduOiBNYXA8bnVtYmVyLCBVbmRyYXduQ29tcG9uZW50Pjtcbn1cblxuLy8gQSB3b3JkIG9mIGEgd3JhcHBlZCBsaW5lIChfd3JhcCk6IGl0cyBydW4sIGl0cyB0ZXh0IHdpdGggYW55IHRyYWlsaW5nIHNwYWNlLFxuLy8gaXRzIGZvbnQgc2l6ZSBhbmQgaXRzIHdpZHRoLCBwb2ludHMuXG5pbnRlcmZhY2UgUGRmV29yZCB7XG4gIHJ1bjogVGV4dFJ1bjtcbiAgdGV4dDogc3RyaW5nO1xuICBzaXplOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG59XG5cbi8vIFdoZXJlIGEgdGV4dCBibG9jaydzIHdvcmRzIGFyZSBkcmF3biwgcG9pbnRzOiB0aGUgbGVmdCBlZGdlIGFuZCB3aWR0aCB0aGV5XG4vLyB3cmFwIHRvLCB0aGUgdG9wIG9mIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGJvdHRvbSBubyBsaW5lIG1heSBydW4gcGFzdC4gQVxuLy8gdGV4dCB0YWJsZSdzIGNlbGwgZHJhd3MgaXRzIHdvcmRzIHRoZSBzYW1lIHdheSwgaW5zaWRlIGl0cyBwYWRkaW5nLlxuaW50ZXJmYWNlIFBkZlRleHRCb3gge1xuICBsZWZ0OiBudW1iZXI7XG4gIHRvcDogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbn1cblxuLy8gV2hlcmUgdGhlIG5leHQgcGFydCBvZiBhIHRleHQgYmxvY2sgc3RhcnRzLCBhbmQgd2hldGhlciB0aGUgcGFydCBqdXN0IGRyYXduXG4vLyB3YXMgY3V0IG9mZiBhdCB0aGUgYm90dG9tIG9mIGl0cyBib3guXG5pbnRlcmZhY2UgUGRmVGV4dEN1cnNvciB7XG4gIGN1cnNvclk6IG51bWJlcjtcbiAgY3V0OiBib29sZWFuO1xufVxuXG4vLyBBIHRleHQgdGFibGUncyBjZWxsIGFzIGF1dG9UYWJsZSB0YWtlcyBpdC4gSXQgcHJpbnRzIG5vIHRleHQgb2YgaXRzIG93bjogdGhlXG4vLyBjZWxsJ3Mgd29yZHMgKHRleHRDZWxsKSBhcmUgZHJhd24gaW50byBpdCBvbmNlIGl0cyBncmlkIGxpbmVzIGFuZCBmaWxsIGFyZVxuLy8gKF9kcmF3VGV4dENlbGwpLlxuaW50ZXJmYWNlIFBkZlRleHRDZWxsSW5wdXQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGNvbFNwYW46IG51bWJlcjtcbiAgcm93U3BhbjogbnVtYmVyO1xuICB0ZXh0Q2VsbDogVGV4dFRhYmxlQ2VsbDtcbiAgc3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gRml4ZWQgY29sdW1uIHdpZHRocywgYnkgY29sdW1uIGluZGV4LCBpbiBwb2ludHMsIGFuZCB0aGUgcmlnaHQgYWxpZ25tZW50IG9mXG4vLyBhIGNvbHVtbiBvZiBmb3JtYXR0ZWQgbnVtYmVycy5cbnR5cGUgUGRmQ29sdW1uU3R5bGVzID0gUmVjb3JkPG51bWJlciwgeyBjZWxsV2lkdGg6IG51bWJlcjsgaGFsaWduPzogJ3JpZ2h0JyB9PjtcblxuLy8gV2hhdCBfbWVhc3VyZSByZWFkcyBvZmYgYSBsaXN0J3MgbGFpZC1vdXQgdGFibGU6IGhvdyBtYW55IGJvZHkgcm93cyBpdHMgYm94XG4vLyBob2xkcywgdGhlIGNvbHVtbiB3aWR0aHMgZXZlcnkgcGFnZSBvZiBpdCBpcyBkcmF3biB3aXRoLCBhbmQgaG93IHRhbGwgYVxuLy8gcGFnZSdzIHRhYmxlIHNwYWNlIG11c3QgYmUgZm9yIGF1dG9UYWJsZSB0byBkcmF3IGEgcm93IGF0IGFsbDogdGhlIGhlYWRpbmcsXG4vLyB0aGUgdG90YWxzIHJvdyBhbmQgb25lIGxpbmUgb2YgYSByb3csIHBvaW50cy5cbmludGVyZmFjZSBQZGZUYWJsZU1lYXN1cmUge1xuICBmaXQ6IG51bWJlcjtcbiAgY29sdW1uU3R5bGVzOiBQZGZDb2x1bW5TdHlsZXM7XG4gIG1pbkhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBBIHRhYmxlIGJvZHkgY2VsbDogcGxhaW4gdGV4dCwgb3IgYSBub3RpY2Ugcm93J3Mgb25lIGNlbGwgc3Bhbm5pbmcgZXZlcnlcbi8vIGNvbHVtbi5cbnR5cGUgUGRmVGFibGVDZWxsID0gc3RyaW5nIHwgeyBjb250ZW50OiBzdHJpbmc7IGNvbFNwYW4/OiBudW1iZXI7IHJvd1NwYW4/OiBudW1iZXI7IHN0eWxlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG5cbi8vIEhvdyBmYXIgYSB0YWJsZSdzIGdyb3VwIGxhYmVsIHN0ZXBzIGluIHBlciBsZXZlbCwgcG9pbnRzLlxuY29uc3QgR1JJRF9JTkRFTlQgPSA4O1xuXG4vLyBXaGF0IGEgbGlzdCdzIG9yIGEgdGFibGUgdGlsZSdzIHRhYmxlIGRyYXdzOiBpdHMgaGVhZGluZyByb3dzLCBpdHMgYm9keVxuLy8gcm93cywgd2hpY2ggY29sdW1ucyBob2xkIGZvcm1hdHRlZCBudW1iZXJzLCBpdHMgdG90YWxzIHJvdyBhbmQgaG93IG1hbnlcbi8vIHJvd3MgaXRzIGZldGNoIGxlZnQgb3V0LlxuaW50ZXJmYWNlIFBkZlRhYmxlUGFydHMge1xuICBoZWFkOiBQZGZUYWJsZUNlbGxbXVtdO1xuICBjZWxsczogUGRmVGFibGVDZWxsW11bXTtcbiAgbnVtZXJpYzogYm9vbGVhbltdO1xuICBmb290OiBzdHJpbmdbXSB8IG51bGw7XG4gIG9taXR0ZWQ6IG51bWJlcjtcbn1cblxuLy8gVGhlIHJvd3Mgb2YgYSBsaXN0IHRoYXQgZGlkIG5vdCBmaXQgaXRzIGJveCwgY2FycmllZCBvbnRvIGNvbnRpbnVhdGlvblxuLy8gcGFnZXMgYWZ0ZXIgaXRzIHJlcG9ydCBwYWdlLiB4IGFuZCB3IGFyZSB0aGUgYm94J3MsIGluIHBvaW50cywgYW5kIHRoZVxuLy8gY29sdW1uIHdpZHRocyBhbmQgYWxpZ25tZW50cyBhcmUgdGhlIG9uZXMgdGhlIG9uLXBhZ2UgdGFibGUgd2FzIGRyYXduIHdpdGgsXG4vLyBzbyB0aGUgdGFibGUgcmVhZHMgYXMgb25lIGFjcm9zcyBwYWdlcy5cbmludGVyZmFjZSBQZGZUYWJsZU92ZXJmbG93IHtcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQ7XG4gIC8vIFRoZSB0ZXh0IHRoZSBsaXN0IHdhcyBzZWFyY2hlZCBieSwgZm9yIHRoZSBjb250aW51YXRpb24gdGl0bGUuXG4gIHNlYXJjaD86IHN0cmluZztcbiAgLy8gVGhlIGNydW1icyBvZiBpdHMgZHJpbGwgcGF0aCwgZm9yIHRoZSBjb250aW51YXRpb24gdGl0bGUuXG4gIGNydW1icz86IHN0cmluZ1tdO1xuICAvLyBBIHRhYmxlIHdob3NlIGNvbHVtbiBmaWx0ZXJzIG5hcnJvd2VkIGl0LCBmb3IgdGhlIGNvbnRpbnVhdGlvbiB0aXRsZS5cbiAgZmlsdGVyZWQ/OiBib29sZWFuO1xuICAvLyBIZWFkaW5nIHJvd3MsIHRvcCBmaXJzdDsgYSBsaXN0IGhhcyBvbmUuXG4gIGhlYWQ6IFBkZlRhYmxlQ2VsbFtdW107XG4gIG51bWVyaWM6IGJvb2xlYW5bXTtcbiAgcm93czogUGRmVGFibGVDZWxsW11bXTtcbiAgb21pdHRlZDogbnVtYmVyO1xuICAvLyBUaGUgbGlzdCdzIHRvdGFscyByb3csIHdoaWNoIGNsb3NlcyB0aGUgbGFzdCBjb250aW51YXRpb24gcGFnZS5cbiAgZm9vdDogc3RyaW5nW10gfCBudWxsO1xuICB4OiBudW1iZXI7XG4gIHc6IG51bWJlcjtcbiAgY29sdW1uU3R5bGVzOiBQZGZDb2x1bW5TdHlsZXM7XG59XG5cbi8vIEJ1aWxkcyB0aGUgUERGIGNsaWVudC1zaWRlIHdpdGgganNwZGYuIFRoZSByZXBvcnQncyB1bml0IGlzIGluY2hlcyBhbmQgUERGc1xuLy8gYXJlIHBvaW50cyBhdCBleGFjdGx5IDcyL2luY2gsIHNvIGVhY2ggcmVwb3J0IHBhZ2UgYmVjb21lcyBvbmUgUERGIHBhZ2Ugb2Zcbi8vIHRoZSBleGFjdCBwaHlzaWNhbCBzaXplIGFuZCBjb21wb25lbnRzIGxhbmQgYXQgdGhlaXIgcHJlY2lzZSBwb3NpdGlvbnMuXG4vLyBDaGFydHMgYXJlIHJlbmRlcmVkIHRocm91Z2ggYW4gb2Zmc2NyZWVuIEVDaGFydHMgaW5zdGFuY2UgYXQgM8OXIHBpeGVsXG4vLyByYXRpbyDigJQgcGl4ZWwtaWRlbnRpY2FsIHRvIHRoZSBzY3JlZW4sIGNyaXNwIGF0IHByaW50IHNpemUg4oCUIGFuZCB0YWJsZXMgYXJlXG4vLyBkcmF3biB3aXRoIGpzcGRmLWF1dG90YWJsZS4gQm90aCBsaWJyYXJpZXMgbG9hZCBsYXppbHkgaW50byB0aGVpciBvd24gY2h1bmtzLlxuLy9cbi8vIEEgbGlzdCB0YWJsZSBpcyBmaXR0ZWQgdG8gaXRzIGJveCBieSBsYXlpbmcgaXQgb3V0IGZpcnN0LCBuZXZlciBieSBhXG4vLyByb3ctaGVpZ2h0IGVzdGltYXRlLCBzbyBpdCBjYW5ub3Qgc3BpbGwgcGFzdCB0aGUgYm94LiBUaGUgcm93cyB0aGF0IGRvIG5vdFxuLy8gZml0IGNvbnRpbnVlIG9uIHBhZ2VzIG9mIHRoZWlyIG93biBhZnRlciB0aGUgcmVwb3J0IHBhZ2UsIHVuZGVyIHRoZSBzYW1lXG4vLyBoZWFkZXIvZm9vdGVyIGFuZCB3aXRoIHRoZSBzYW1lIGNvbHVtbiB3aWR0aHMsIHVwIHRvIFBERl9MSVNUX1JPV1M7IGFcbi8vIGxvbmdlciByZXN1bHQgZW5kcyBpbiBhIHJvdyBwb2ludGluZyB0byB0aGUgY29tcG9uZW50J3MgQ1NWIGV4cG9ydC4gQVxuLy8gdGFibGUgd2hvc2UgaGVhZGluZyBhbmQgdG90YWxzIHJvdyBsZWF2ZSBhIGNvbnRpbnVhdGlvbiBwYWdlIG5vIHJvb20gZm9yIGFcbi8vIHJvdyBzdG9wcyBhdCBpdHMgYm94IHdpdGggYSBub3RpY2UgaW5zdGVhZDogYXV0b1RhYmxlIHdvdWxkIGFkZCBwYWdlc1xuLy8gd2l0aG91dCBlbmQgdHJ5aW5nIHRvIHBsYWNlIGl0LlxuLy9cbi8vIEEgY29tcG9uZW50IHRoYXQgZmFpbHMgdG8gZHJhdyBpcyBtYXJrZWQgaW4gaXRzIGJveCBhbmQgdGhlIGZpbGUgZ29lcyBvblxuLy8gKF9ndWFyZGVkKTsgYnVpbGQoKSBoYW5kcyBiYWNrIHRoZSBvbmVzIHRoYXQgZGlkLCBhcyBpdCBkb2VzIHRoZSB0ZXh0IGl0XG4vLyBjdXQuXG4vL1xuLy8gQSB0ZXh0IGJsb2NrJ3MgdGFibGVzIGFyZSBkcmF3biBieSBhdXRvVGFibGUgdG9vLCBmcm9tIHRoZSBsaW5lIGl0cyB3b3Jkc1xuLy8gcmVhY2gsIGluIHRoZSBjb2x1bW4gd2lkdGhzIHRoZSBjYW52YXMgZ2l2ZXMgdGhlbSAoUmVwb3J0VGV4dExheW91dFNlcnZpY2UpLlxuLy8gQSB0ZXh0IGJsb2NrIGlzIGN1dCBhdCB0aGUgYm90dG9tIG9mIGl0cyBib3gsIGFzIHRoZSBjYW52YXMgY2xpcHMgaXQsIGFuZFxuLy8gYnVpbGQoKSBoYW5kcyB0aGUgZmlsZSBiYWNrIHVuc2F2ZWQgd2l0aCB0aGUgYmxvY2tzIGl0IGN1dCwgc28gdGhlIGV4cG9ydFxuLy8gY2FuIGFzayBhYm91dCB0aGVtIGJlZm9yZSBpdCBzYXZlcy5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRQZGZTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90ZXh0TGF5b3V0ID0gaW5qZWN0KFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlKTtcblxuICBwdWJsaWMgYXN5bmMgYnVpbGQoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBQcm9taXNlPEJ1aWx0RXhwb3J0PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuX2NvbnRleHQoY29sbGVjdGVkKTtcblxuICAgIHRoaXMuX3RpdGxlUGFnZShjb250ZXh0LmRvYywgY29sbGVjdGVkLCBjb250ZXh0LnBhZ2VXLCBjb250ZXh0LnBhZ2VIKTtcblxuICAgIC8vIFRoZSBwaHlzaWNhbCBwYWdlIG51bWJlciB7e3BhZ2UubnVtYmVyfX0gcHJpbnRzOiByZXBvcnQgcGFnZXMgYW5kXG4gICAgLy8gdGhlaXIgY29udGludWF0aW9uIHBhZ2VzIGFsaWtlLCB0aGUgdGl0bGUgcGFnZSBub3QgY291bnRlZC5cbiAgICBsZXQgcGFnZU51bWJlciA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgY29sbGVjdGVkUGFnZV0gb2YgY29sbGVjdGVkLnBhZ2VzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3Qgb3ZlcmZsb3dzOiBQZGZUYWJsZU92ZXJmbG93W10gPSBbXTtcbiAgICAgIHBhZ2VOdW1iZXIgKz0gMTtcblxuICAgICAgYXdhaXQgdGhpcy5fcmVuZGVyUGFnZShjb250ZXh0LCBjb2xsZWN0ZWRQYWdlLCBpbmRleCwgcGFnZU51bWJlciwgb3ZlcmZsb3dzKTtcblxuICAgICAgLy8gRWFjaCBjb250aW51YXRpb24gYXBwZW5kcyBpdHMgcGFnZXMgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQsIHNvXG4gICAgICAvLyB0d28gbGlzdHMgdGhhdCBvdmVyZmxvd2VkIG9uIG9uZSBwYWdlIGZvbGxvdyBpdCBiYWNrIHRvIGJhY2suXG4gICAgICBmb3IgKGNvbnN0IG92ZXJmbG93IG9mIG92ZXJmbG93cykge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl90b2tlbnMoY29udGV4dCwgY29sbGVjdGVkUGFnZS5wYWdlLCBpbmRleCwgcGFnZU51bWJlciArIDEpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2d1YXJkZWQoY29udGV4dCwgb3ZlcmZsb3cuY29tcG9uZW50LCB0b2tlbnMucGFnZU5hbWUsIHRva2VucywgZmFsc2UsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBwYWdlTnVtYmVyID0gYXdhaXQgdGhpcy5fcmVuZGVyQ29udGludWF0aW9uKGNvbnRleHQsIGNvbGxlY3RlZFBhZ2UucGFnZSwgaW5kZXgsIHBhZ2VOdW1iZXIsIG92ZXJmbG93KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG92ZXJmbG93czogWy4uLmNvbnRleHQudGV4dE92ZXJmbG93cy52YWx1ZXMoKV0sXG4gICAgICBvdmVyZmxvd05vdGU6IFBERl9PVkVSRkxPV19OT1RFLFxuICAgICAgdW5kcmF3bjogWy4uLmNvbnRleHQudW5kcmF3bi52YWx1ZXMoKV0sXG4gICAgICBzYXZlOiAoKSA9PiB7XG4gICAgICAgIGNvbnRleHQuZG9jLnNhdmUoYCR7dGhpcy5fc2x1Zyhjb2xsZWN0ZWQucmVwb3J0Lm5hbWUpfS5wZGZgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2NvbnRleHQoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQpOiBQcm9taXNlPFBkZkV4cG9ydENvbnRleHQ+IHtcbiAgICBjb25zdCByZXBvcnQgPSBjb2xsZWN0ZWQucmVwb3J0O1xuICAgIGNvbnN0IHsganNQREYgfSA9IGF3YWl0IGltcG9ydCgnanNwZGYnKTtcbiAgICBjb25zdCB7IGRlZmF1bHQ6IGF1dG9UYWJsZSwgX19jcmVhdGVUYWJsZTogY3JlYXRlVGFibGUgfSA9IGF3YWl0IGltcG9ydCgnanNwZGYtYXV0b3RhYmxlJyk7XG5cbiAgICBjb25zdCBwYWdlVyA9IHJlcG9ydC5wYWdlV2lkdGggKiBQVDtcbiAgICBjb25zdCBwYWdlSCA9IHJlcG9ydC5wYWdlSGVpZ2h0ICogUFQ7XG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSBwYWdlVyA+PSBwYWdlSCA/ICdsYW5kc2NhcGUnIDogJ3BvcnRyYWl0JztcblxuICAgIHJldHVybiB7XG4gICAgICBkb2M6IG5ldyBqc1BERih7IG9yaWVudGF0aW9uLCB1bml0OiAncHQnLCBmb3JtYXQ6IFtwYWdlVywgcGFnZUhdIH0pLFxuICAgICAgYXV0b1RhYmxlLFxuICAgICAgY3JlYXRlVGFibGUsXG4gICAgICBqc1BERixcbiAgICAgIHJlcG9ydCxcbiAgICAgIHRpbWV6b25lOiByZXNvbHZlUmVwb3J0VGltZXpvbmUocmVwb3J0KSxcbiAgICAgIGZvcm1hdENvbnRleHQ6IGNvbGxlY3RlZC5mb3JtYXRDb250ZXh0LFxuICAgICAgcGFnZVcsXG4gICAgICBwYWdlSCxcbiAgICAgIG9yaWVudGF0aW9uLFxuICAgICAgbWFzdGVyVmFsdWVzOiB0aGlzLl9wZGZWYWx1ZXMoY29sbGVjdGVkLm1hc3RlclZhbHVlcyksXG4gICAgICBmaWx0ZXJGaWVsZHM6IGNvbGxlY3RlZC5maWx0ZXJGaWVsZHMsXG4gICAgICBtYXN0ZXJGaWx0ZXJzOiBsYXllckZpbHRlckZpZWxkcyhjb2xsZWN0ZWQuZmlsdGVyRmllbGRzLCByZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdLCBudWxsKSxcbiAgICAgIHRleHRPdmVyZmxvd3M6IG5ldyBNYXAoKSxcbiAgICAgIHVuZHJhd246IG5ldyBNYXAoKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gT25lIHJlcG9ydCBwYWdlOiB0aGUgaGVhZGVyIGFuZCBmb290ZXIgZmlyc3QsIHVuZGVyIHRoZSBwYWdlJ3Mgb3duXG4gIC8vIGNvbXBvbmVudHMuIEEgbGlzdCB0aGF0IG91dGdyb3dzIGl0cyBib3ggbGVhdmVzIGl0cyByZW1haW5pbmcgcm93cyBpblxuICAvLyBvdmVyZmxvd3MuIFRoZSBwYWdlJ3MgdGV4dCBmaWxscyBpdHMgdmFsdWUgdG9rZW5zIHdpdGggdGhlIHBhZ2UncyB2YWx1ZXMuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlclBhZ2UoXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICBjb2xsZWN0ZWRQYWdlOiBDb2xsZWN0ZWRQYWdlLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcGFnZU51bWJlcjogbnVtYmVyLFxuICAgIG92ZXJmbG93czogUGRmVGFibGVPdmVyZmxvd1tdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGRvYyB9ID0gY29udGV4dDtcbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl90b2tlbnMoY29udGV4dCwgY29sbGVjdGVkUGFnZS5wYWdlLCBpbmRleCwgcGFnZU51bWJlcik7XG4gICAgY29uc3QgcGFnZVRva2VucyA9IHsgLi4udG9rZW5zLCB2YWx1ZXM6IHRoaXMuX3BkZlZhbHVlcyhjb2xsZWN0ZWRQYWdlLnZhbHVlcykgfTtcblxuICAgIGRvYy5hZGRQYWdlKFtjb250ZXh0LnBhZ2VXLCBjb250ZXh0LnBhZ2VIXSwgY29udGV4dC5vcmllbnRhdGlvbik7XG4gICAgYXdhaXQgdGhpcy5fcmVuZGVyTWFzdGVyKGNvbnRleHQsIGNvbGxlY3RlZFBhZ2UucGFnZSwgdG9rZW5zKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0ZWRQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2d1YXJkZWQoY29udGV4dCwgaXRlbS5jb21wb25lbnQsIHRva2Vucy5wYWdlTmFtZSwgcGFnZVRva2VucywgdHJ1ZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5jb21wb25lbnQudHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVuZGVyQ29tcG9uZW50KGNvbnRleHQsIGNvbGxlY3RlZFBhZ2UucGFnZSwgaXRlbSwgdG9rZW5zLCBvdmVyZmxvd3MpO1xuICAgICAgICB9IGVsc2UgaWYgKGF3YWl0IHRoaXMuX3JlbmRlclRleHQoY29udGV4dCwgaXRlbS5jb21wb25lbnQsIHBhZ2VUb2tlbnMpKSB7XG4gICAgICAgICAgdGhpcy5fcmVjb3JkT3ZlcmZsb3coY29udGV4dCwgaXRlbS5jb21wb25lbnQsIHRva2Vucy5wYWdlTmFtZSwgcGFnZVRva2Vucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIERyYXdzIG9uZSBjb21wb25lbnQsIG9yIG9uZSBsaXN0J3MgY29udGludWF0aW9uIHBhZ2VzLCBzbyB0aGF0IHdoYXRldmVyXG4gIC8vIGdvZXMgd3Jvbmcgc3RheXMgd2l0aCBpdDogYSBkcmF3IHRoYXQgdGhyb3dzIGxvc2VzIHRoZSBwYWdlcyBpdCBhZGRlZCwgaXRzXG4gIC8vIGJveCBvbiB0aGUgcGFnZSAoYm94ZWQpIGlzIGJsYW5rZWQgdW5kZXIgVU5EUkFXTl9OT1RFLCBhbmQgdGhlIGV4cG9ydCdzXG4gIC8vIGdhdGUgbmFtZXMgaXQgdW5kZXIgcGFnZS4gT25lIGNvbXBvbmVudCBjYW4gdGhlbiBuZXZlciBzdG9wIHRoZSBmaWxlLlxuICBwcml2YXRlIGFzeW5jIF9ndWFyZGVkKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgcGFnZTogc3RyaW5nLFxuICAgIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgICBib3hlZDogYm9vbGVhbixcbiAgICBkcmF3OiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGRvYyB9ID0gY29udGV4dDtcbiAgICBjb25zdCBjdXJyZW50ID0gZG9jLmdldEN1cnJlbnRQYWdlSW5mbygpLnBhZ2VOdW1iZXI7XG4gICAgY29uc3QgcGFnZXMgPSBkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRyYXcoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhlIGZpbGUgb25seSBzYXlzIHRoZSBib3ggY291bGQgbm90IGJlIGRyYXduOyB0aGUgY29uc29sZSBrZWVwcyB3aHkuXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICAgICAgd2hpbGUgKGRvYy5nZXROdW1iZXJPZlBhZ2VzKCkgPiBwYWdlcykge1xuICAgICAgICBkb2MuZGVsZXRlUGFnZShkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpKTtcbiAgICAgIH1cblxuICAgICAgZG9jLnNldFBhZ2UoY3VycmVudCk7XG5cbiAgICAgIGlmIChib3hlZCkge1xuICAgICAgICB0aGlzLl91bmRyYXduQm94KGRvYywgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjb250ZXh0LnVuZHJhd24uaGFzKGNvbXBvbmVudC5pZCkpIHtcbiAgICAgICAgY29udGV4dC51bmRyYXduLnNldChjb21wb25lbnQuaWQsIHtcbiAgICAgICAgICBjb21wb25lbnRJZDogY29tcG9uZW50LmlkLFxuICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgbmFtZTogY29tcG9uZW50LnR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgICAgPyB0ZXh0T3ZlcmZsb3coY29tcG9uZW50LCBwYWdlLCB0b2tlbnMpLnNuaXBwZXRcbiAgICAgICAgICAgIDogZXhwb3J0VGl0bGUoY29tcG9uZW50LCB0b2tlbnMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBIGNvbXBvbmVudCdzIGJveCBibGFua2VkIHVuZGVyIFVORFJBV05fTk9URSwgb3ZlciB3aGF0ZXZlciBvZiBpdCB3YXNcbiAgLy8gZHJhd24gYmVmb3JlIGl0IGZhaWxlZC5cbiAgcHJpdmF0ZSBfdW5kcmF3bkJveChkb2M6IGFueSwgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQpOiB2b2lkIHtcbiAgICBjb25zdCB4ID0gY29tcG9uZW50LnggKiBQVDtcbiAgICBjb25zdCB5ID0gY29tcG9uZW50LnkgKiBQVDtcbiAgICBjb25zdCB3ID0gY29tcG9uZW50LncgKiBQVDtcbiAgICBjb25zdCBoID0gY29tcG9uZW50LmggKiBQVDtcblxuICAgIGRvYy5zZXRGaWxsQ29sb3IoJyNmZmZmZmYnKTtcbiAgICBkb2MucmVjdCh4LCB5LCB3LCBoLCAnRicpO1xuICAgIHRoaXMuX2JveE5vdGUoZG9jLCBVTkRSQVdOX05PVEUsIHgsIHksIHcsIGgpO1xuICB9XG5cbiAgLy8gVGhlIGhlYWRlciBhbmQgZm9vdGVyLCB0aGVpciB2YWx1ZSB0b2tlbnMgZmlsbGVkIHdpdGggdGhlIG1hc3RlcidzIHZhbHVlc1xuICAvLyB3aGljaGV2ZXIgcGFnZSB0aGV5IHNpdCBvbjogYSByZXBvcnQgcGFnZSBvciBhIGNvbnRpbnVhdGlvbiBwYWdlLiBUaGV5XG4gIC8vIHJlYWQgbm8gcGFnZSBmaWx0ZXI6IGl0cyB0b2tlbiBwcmludHMgdGhlIGVtIGRhc2ggdGhlcmUuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlck1hc3Rlcihjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LCBwYWdlOiBSZXBvcnRQYWdlLCB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocGFnZS5tYXN0ZXJIaWRkZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXN0ZXJUb2tlbnMgPSB7IC4uLnRva2VucywgdmFsdWVzOiBjb250ZXh0Lm1hc3RlclZhbHVlcywgZmlsdGVyczogY29udGV4dC5tYXN0ZXJGaWx0ZXJzIH07XG5cbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiAoY29udGV4dC5yZXBvcnQubWFzdGVyPy5jb21wb25lbnRzID8/IFtdKS5maWx0ZXIoaXNEcmF3bikpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2d1YXJkZWQoY29udGV4dCwgY29tcG9uZW50LCBIRUFERVJfRk9PVEVSX05BTUUsIG1hc3RlclRva2VucywgdHJ1ZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5fcmVuZGVyVGV4dChjb250ZXh0LCBjb21wb25lbnQsIG1hc3RlclRva2VucykpIHtcbiAgICAgICAgICB0aGlzLl9yZWNvcmRPdmVyZmxvdyhjb250ZXh0LCBjb21wb25lbnQsIEhFQURFUl9GT09URVJfTkFNRSwgbWFzdGVyVG9rZW5zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTGlzdHMgYSB0ZXh0IGJsb2NrIHRoYXQgd2FzIGN1dCwgdW5kZXIgdGhlIHBhZ2UgdGhlIGV4cG9ydCdzIG92ZXJmbG93IGdhdGVcbiAgLy8gbmFtZXMgaXQgYnkuIEEgYmxvY2sgY3V0IGFnYWluIG9uIGEgbGF0ZXIgcGFnZSAoYSBoZWFkZXIgb3IgZm9vdGVyKSBrZWVwc1xuICAvLyB0aGUgZmlyc3QgZW50cnkuXG4gIHByaXZhdGUgX3JlY29yZE92ZXJmbG93KFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgcGFnZTogc3RyaW5nLFxuICAgIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LnRleHRPdmVyZmxvd3MuaGFzKGNvbXBvbmVudC5pZCkpIHtcbiAgICAgIGNvbnRleHQudGV4dE92ZXJmbG93cy5zZXQoY29tcG9uZW50LmlkLCB0ZXh0T3ZlcmZsb3coY29tcG9uZW50LCBwYWdlLCB0b2tlbnMpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90aXRsZVBhZ2UoZG9jOiBhbnksIGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0LCBwYWdlVzogbnVtYmVyLCBwYWdlSDogbnVtYmVyKTogdm9pZCB7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDI4KTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKCcjMWYyOTMzJyk7XG4gICAgZG9jLnRleHQoY29sbGVjdGVkLnJlcG9ydC5uYW1lLCA0MCwgcGFnZUggKiAwLjM1KTtcblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDExKTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKCcjNTI2MDZkJyk7XG5cbiAgICBkb2MudGV4dChjb3ZlckxpbmVzKGNvbGxlY3RlZCkubWFwKChsaW5lKSA9PiB0aGlzLl9wZGZUZXh0KGxpbmUpKSwgNDAsIHBhZ2VIICogMC4zNSArIDI2KTtcbiAgfVxuXG4gIC8vIEEgdGV4dCBibG9jaywgbGFpZCBvdXQgYnkgaGFuZDoganNQREYgZHJhd3Mgc3RyaW5ncywgbm90IHJpY2ggdGV4dCwgc28gdGhlXG4gIC8vIHdvcmRzIGJldHdlZW4gaXRzIHRhYmxlcyBhcmUgZHJhd24gbGluZSBieSBsaW5lIChfZHJhd1BhcmFncmFwaHMpIGFuZCBlYWNoXG4gIC8vIHRhYmxlIGJ5IGF1dG9UYWJsZSBmcm9tIHRoZSBsaW5lIHRoZSB3b3JkcyBhYm92ZSBpdCByZWFjaFxuICAvLyAoX2RyYXdUZXh0VGFibGUpLiBPbmx5IGEgYmxvY2sgd2l0aCBhIHRhYmxlIGlzIG1lYXN1cmVkLCBmb3IgdGhlIGVkZ2VzXG4gIC8vIGFuZCBjb2x1bW4gd2lkdGhzIHRoZSBjYW52YXMgZ2l2ZXMgaXRzIHRhYmxlcy4gV2hhdGV2ZXIgcnVucyBwYXN0XG4gIC8vIHRoZSBibG9jaydzIGhlaWdodCBpcyBsZWZ0IG9mZiDigJQgdGhlIGNhbnZhcyBjbGlwcyB0aGUgYmxvY2sgdGhlcmUgdG9vLlxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW55dGhpbmcgd2FzLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJUZXh0KFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBib3ggPSB0aGlzLl90ZXh0Qm94KGNvbXBvbmVudCk7XG4gICAgY29uc3QgYmxvY2tzID0gdGV4dEJsb2Nrcyhjb21wb25lbnQuY29uZmlnPy5odG1sID8/ICcnLCB0b2tlbnMpO1xuICAgIGNvbnN0IGxheW91dCA9IGJsb2Nrcy5zb21lKChibG9jaykgPT4gYmxvY2sua2luZCA9PT0gJ3RhYmxlJylcbiAgICAgID8gYXdhaXQgdGhpcy5fdGV4dExheW91dC5tZWFzdXJlKGNvbXBvbmVudCwgdG9rZW5zKVxuICAgICAgOiBudWxsO1xuICAgIGxldCBjdXJzb3JZID0gYm94LnRvcDtcbiAgICBsZXQgdGFibGVJbmRleCA9IDA7XG4gICAgLy8gVGhlIGN1cnNvciBzaXRzIG9uIGEgdGFibGUncyBib3R0b20gbWFyZ2luLCBub3RoaW5nIGRyYXduIHNpbmNlOiB0aGVcbiAgICAvLyBuZXh0IHRhYmxlJ3MgdG9wIG1hcmdpbiBpcyB0aGUgc2FtZSBzcGFjZSwgYXMgdHdvIGJsb2NrIG1hcmdpbnMgdGhhdFxuICAgIC8vIG1lZXQgY29sbGFwc2UgaW50byBvbmUgb24gdGhlIGNhbnZhcy5cbiAgICBsZXQgb25NYXJnaW4gPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzKSB7XG4gICAgICBjb25zdCBkcmF3biA9IGJsb2NrLmtpbmQgPT09ICd0ZXh0J1xuICAgICAgICA/IHRoaXMuX2RyYXdQYXJhZ3JhcGhzKGNvbnRleHQuZG9jLCBibG9jay5wYXJhZ3JhcGhzLCBib3gsIGN1cnNvclkpXG4gICAgICAgIDogdGhpcy5fZHJhd1RleHRUYWJsZShcbiAgICAgICAgICBjb250ZXh0LCBibG9jay50YWJsZSwgbGF5b3V0Py50YWJsZXNbdGFibGVJbmRleCsrXSA/PyBudWxsLCBib3gsXG4gICAgICAgICAgb25NYXJnaW4gPyBjdXJzb3JZIDogY3Vyc29yWSArIFRFWFRfVEFCTEVfTUFSR0lOLFxuICAgICAgICApO1xuXG4gICAgICBpZiAoZHJhd24uY3V0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjdXJzb3JZID0gZHJhd24uY3Vyc29yWTtcbiAgICAgIG9uTWFyZ2luID0gYmxvY2sua2luZCA9PT0gJ3RhYmxlJyB8fCAob25NYXJnaW4gJiYgIWJsb2NrLnBhcmFncmFwaHMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBXaGVyZSBhIHRleHQgYmxvY2sncyB3b3JkcyBnbzogaW5zaWRlIGl0cyBwYWRkaW5nLCBlYWNoIGVkZ2UgMS84XCIgdW5sZXNzXG4gIC8vIHNldC5cbiAgcHJpdmF0ZSBfdGV4dEJveChjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCk6IFBkZlRleHRCb3gge1xuICAgIGNvbnN0IHBhZGRpbmcgPSBjb21wb25lbnQuY29uZmlnPy5wYWRkaW5nO1xuICAgIGNvbnN0IGluc2V0ID0gKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpID0+ICh2YWx1ZSA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HKSAqIFBUO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IGNvbXBvbmVudC54ICogUFQgKyBpbnNldChwYWRkaW5nPy5sZWZ0KSxcbiAgICAgIHRvcDogY29tcG9uZW50LnkgKiBQVCArIGluc2V0KHBhZGRpbmc/LnRvcCksXG4gICAgICB3aWR0aDogY29tcG9uZW50LncgKiBQVCAtIGluc2V0KHBhZGRpbmc/LmxlZnQpIC0gaW5zZXQocGFkZGluZz8ucmlnaHQpLFxuICAgICAgYm90dG9tOiAoY29tcG9uZW50LnkgKyBjb21wb25lbnQuaCkgKiBQVCAtIGluc2V0KHBhZGRpbmc/LmJvdHRvbSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFBhcmFncmFwaHMgZHJhd24gbGluZSBieSBsaW5lIGZyb20gY3Vyc29yWSBkb3duOiBlYWNoIG9uZSdzIHJ1bnMgYXJlIGJyb2tlblxuICAvLyBpbnRvIHdvcmRzLCB3cmFwcGVkIHRvIHRoZSBib3gncyB3aWR0aCBhbmQgZHJhd24gd29yZCBieSB3b3JkIGluIHRoZWlyIG93blxuICAvLyBmb250LCBzaXplIGFuZCBjb2xvciwgYSBsaXN0IGl0ZW0ncyBtYXJrZXIgaHVuZyBpbiBpdHMgaW5kZW50LiBUaGUgZmlyc3RcbiAgLy8gbGluZSB0aGF0IHdvdWxkIHJ1biBwYXN0IHRoZSBib3gncyBib3R0b20gZW5kcyB0aGUgZHJhd2luZywgY3V0LlxuICBwcml2YXRlIF9kcmF3UGFyYWdyYXBocyhkb2M6IGFueSwgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdLCBib3g6IFBkZlRleHRCb3gsIGN1cnNvclk6IG51bWJlcik6IFBkZlRleHRDdXJzb3Ige1xuICAgIGxldCB5ID0gY3Vyc29yWTtcbiAgICBsZXQgbGlzdE51bWJlciA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHBhcmFncmFwaCBvZiBwYXJhZ3JhcGhzKSB7XG4gICAgICBsaXN0TnVtYmVyID0gcGFyYWdyYXBoLmJ1bGxldCA9PT0gJ251bWJlcicgPyBsaXN0TnVtYmVyICsgMSA6IDA7XG4gICAgICBjb25zdCBpbmRlbnQgPSBwYXJhZ3JhcGguYnVsbGV0ID8gTElTVF9JTkRFTlQgOiAwO1xuICAgICAgY29uc3QgbGluZXMgPSB0aGlzLl93cmFwKGRvYywgcGFyYWdyYXBoLCBib3gud2lkdGggLSBpbmRlbnQpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtsaW5lSW5kZXgsIGxpbmVdIG9mIGxpbmVzLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fbGluZVNpemUocGFyYWdyYXBoLCBsaW5lKTtcbiAgICAgICAgaWYgKHkgKyBzaXplICogVEVYVF9MSU5FX0hFSUdIVCA+IGJveC5ib3R0b20gKyAwLjUpIHtcbiAgICAgICAgICByZXR1cm4geyBjdXJzb3JZOiB5LCBjdXQ6IHRydWUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lSW5kZXggPT09IDAgJiYgcGFyYWdyYXBoLmJ1bGxldCkge1xuICAgICAgICAgIHRoaXMuX2ZvbnQoZG9jLCBsaW5lWzBdPy5ydW4gPz8geyB0ZXh0OiAnJyB9LCBzaXplKTtcbiAgICAgICAgICBkb2MudGV4dChwYXJhZ3JhcGguYnVsbGV0ID09PSAnbnVtYmVyJyA/IGAke2xpc3ROdW1iZXJ9LmAgOiAn4oCiJywgYm94LmxlZnQsIHkgKyBzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RyYXdMaW5lKGRvYywgbGluZSwgcGFyYWdyYXBoLmFsaWduLCBib3gubGVmdCArIGluZGVudCwgYm94LndpZHRoIC0gaW5kZW50LCB5ICsgc2l6ZSk7XG4gICAgICAgIHkgKz0gc2l6ZSAqIFRFWFRfTElORV9IRUlHSFQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEFuIGVtcHR5IHBhcmFncmFwaCBpcyBzdGlsbCBhIGxpbmUuXG4gICAgICBpZiAoIWxpbmVzLmxlbmd0aCkge1xuICAgICAgICB5ICs9IERFRkFVTFRfVEVYVF9TSVpFICogVEVYVF9MSU5FX0hFSUdIVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBjdXJzb3JZOiB5LCBjdXQ6IGZhbHNlIH07XG4gIH1cblxuICAvLyBIb3cgZmFyIF9kcmF3UGFyYWdyYXBocyB0YWtlcyBpdHMgY3Vyc29yIGRvd24gZHJhd2luZyB0aGUgcGFyYWdyYXBocyB3aG9sZVxuICAvLyBhdCBhIHdpZHRoLlxuICBwcml2YXRlIF9wYXJhZ3JhcGhzSGVpZ2h0KGRvYzogYW55LCBwYXJhZ3JhcGhzOiBUZXh0UGFyYWdyYXBoW10sIHdpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJhZ3JhcGhzLnJlZHVjZSgoaGVpZ2h0LCBwYXJhZ3JhcGgpID0+IHtcbiAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5fd3JhcChkb2MsIHBhcmFncmFwaCwgd2lkdGggLSAocGFyYWdyYXBoLmJ1bGxldCA/IExJU1RfSU5ERU5UIDogMCkpO1xuXG4gICAgICByZXR1cm4gaGVpZ2h0ICsgKGxpbmVzLmxlbmd0aFxuICAgICAgICA/IGxpbmVzLnJlZHVjZSgoc3VtLCBsaW5lKSA9PiBzdW0gKyB0aGlzLl9saW5lU2l6ZShwYXJhZ3JhcGgsIGxpbmUpICogVEVYVF9MSU5FX0hFSUdIVCwgMClcbiAgICAgICAgOiBERUZBVUxUX1RFWFRfU0laRSAqIFRFWFRfTElORV9IRUlHSFQpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gQSBsaW5lJ3MgZm9udCBzaXplOiBpdHMgbGFyZ2VzdCB3b3JkJ3MsIGFuZCBuZXZlciB1bmRlciBpdHMgcGFyYWdyYXBoJ3NcbiAgLy8gZmlyc3QgcnVuJ3MuXG4gIHByaXZhdGUgX2xpbmVTaXplKHBhcmFncmFwaDogVGV4dFBhcmFncmFwaCwgbGluZTogUGRmV29yZFtdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4ubGluZS5tYXAoKHdvcmQpID0+IHdvcmQuc2l6ZSksIHBhcmFncmFwaC5ydW5zWzBdPy5mb250U2l6ZSA/PyBERUZBVUxUX1RFWFRfU0laRSk7XG4gIH1cblxuICAvLyBPbmUgd3JhcHBlZCBsaW5lIG9uIGl0cyBiYXNlbGluZSwgYWxpZ25lZCB3aXRoaW4gdGhlIHdpZHRoIGZyb20gbGVmdC5cbiAgcHJpdmF0ZSBfZHJhd0xpbmUoXG4gICAgZG9jOiBhbnksXG4gICAgbGluZTogUGRmV29yZFtdLFxuICAgIGFsaWduOiBUZXh0UGFyYWdyYXBoWydhbGlnbiddLFxuICAgIGxlZnQ6IG51bWJlciwgd2lkdGg6IG51bWJlciwgYmFzZWxpbmU6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbGluZVdpZHRoID0gbGluZS5yZWR1Y2UoKHN1bSwgd29yZCkgPT4gc3VtICsgd29yZC53aWR0aCwgMCk7XG4gICAgbGV0IHggPSBsZWZ0ICsgdGhpcy5fYWxpZ25PZmZzZXQoYWxpZ24sIHdpZHRoLCBsaW5lV2lkdGgpO1xuXG4gICAgZm9yIChjb25zdCB3b3JkIG9mIGxpbmUpIHtcbiAgICAgIHRoaXMuX2RyYXdXb3JkKGRvYywgd29yZCwgeCwgYmFzZWxpbmUpO1xuICAgICAgeCArPSB3b3JkLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEEgdGFibGUgaW4gYSB0ZXh0IGJsb2NrLCBkcmF3biBieSBhdXRvVGFibGUgZnJvbSB0b3AgKF9yZW5kZXJUZXh0IHB1dHMgaXRcbiAgLy8gVEVYVF9UQUJMRV9NQVJHSU4gdW5kZXIgdGhlIGxpbmUgdGhlIHdvcmRzIGFib3ZlIGl0IHJlYWNoKSwgaW4gdGhlIG9uZVxuICAvLyBsb29rIGV2ZXJ5IHJlbmRlcmVyIGRyYXdzIChURVhUX1RBQkxFXyogaW4gdGV4dC50cykuIEl0cyBsZWZ0IGVkZ2UsIHdpZHRoXG4gIC8vIGFuZCBjb2x1bW4gd2lkdGhzIGFyZSB0aGUgY2FudmFzJ3MgKGxheW91dCksIGVsc2UgdGhlIGJveCdzIHdpZHRoIHNwbGl0XG4gIC8vIGV2ZW5seS4gQSByb3cgaXMgYXMgdGFsbCBhcyBpdHMgY2VsbHMnIHdvcmRzIHdyYXBwZWQgYXMgX2RyYXdQYXJhZ3JhcGhzXG4gIC8vIHdyYXBzIHRoZW0sIGFuZCB0aGUgd29yZHMgYXJlIGRyYXduIGludG8gZWFjaCBjZWxsIG9uY2UgYXV0b1RhYmxlIGhhc1xuICAvLyBkcmF3biBpdHMgZ3JpZCBsaW5lcyBhbmQgZmlsbCAoX2RyYXdUZXh0Q2VsbCksIHNvIHRoZXkga2VlcCB0aGVpciBydW5zJ1xuICAvLyBmb250cyBhbmQgY29sb3JzLiBPbmx5IHRoZSByb3dzIHRoZSBib3ggaG9sZHMgYXJlIGRyYXduLCBhbmQgYSB0YWJsZSB0aGF0XG4gIC8vIGxvc2VzIGFueSwgb3IgcnVucyBwYXN0IGl0cyBwYWdlIGFueXdheSwgaXMgY3V0LiBUaGUgY3Vyc29yIGl0IGxlYXZlcyBpc1xuICAvLyBURVhUX1RBQkxFX01BUkdJTiB1bmRlciBpdC5cbiAgcHJpdmF0ZSBfZHJhd1RleHRUYWJsZShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIHRhYmxlOiBUZXh0VGFibGUsXG4gICAgbGF5b3V0OiBUZXh0VGFibGVMYXlvdXQgfCBudWxsLFxuICAgIGJveDogUGRmVGV4dEJveCxcbiAgICB0b3A6IG51bWJlcixcbiAgKTogUGRmVGV4dEN1cnNvciB7XG4gICAgaWYgKHRvcCA+PSBib3guYm90dG9tKSB7XG4gICAgICByZXR1cm4geyBjdXJzb3JZOiB0b3AsIGN1dDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnQgPSBib3gubGVmdCArIChsYXlvdXQ/LmxlZnQgPz8gMCkgKiBQVDtcbiAgICBjb25zdCB3aWR0aCA9IGxheW91dCA/IGxheW91dC53aWR0aCAqIFBUIDogYm94LndpZHRoO1xuICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IGxheW91dD8uY29sdW1uV2lkdGhzLmxlbmd0aCA9PT0gdGFibGUuY29sdW1uc1xuICAgICAgPyBsYXlvdXQuY29sdW1uV2lkdGhzLm1hcCgoY29sdW1uV2lkdGgpID0+IGNvbHVtbldpZHRoICogUFQpXG4gICAgICA6IEFycmF5LmZyb20oeyBsZW5ndGg6IHRhYmxlLmNvbHVtbnMgfSwgKCkgPT4gd2lkdGggLyB0YWJsZS5jb2x1bW5zKTtcbiAgICBjb25zdCBib2R5ID0gdGFibGUucm93cy5tYXAoKHJvdykgPT4gcm93LmNlbGxzLm1hcCgoY2VsbCkgPT4gdGhpcy5fdGV4dENlbGxJbnB1dChjb250ZXh0LmRvYywgY2VsbCwgY29sdW1uV2lkdGhzKSkpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl90ZXh0VGFibGVPcHRpb25zKGNvbnRleHQsIGNvbHVtbldpZHRocywgbGVmdCwgdG9wLCB3aWR0aCwgYm94LmJvdHRvbSk7XG4gICAgY29uc3QgZml0ID0gdGhpcy5fdGV4dFRhYmxlRml0KGNvbnRleHQsIHsgLi4ub3B0aW9ucywgYm9keSB9LCB0b3AsIGJveC5ib3R0b20pO1xuICAgIGNvbnN0IHdob2xlID0gIWZpdCB8fCB0aGlzLl9kcmF3VGFibGUoY29udGV4dCwgeyAuLi5vcHRpb25zLCBib2R5OiB0aGlzLl9rZXB0Um93cyhib2R5LCBmaXQpIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnNvclk6IGZpdCAmJiB3aG9sZSA/IGNvbnRleHQuZG9jLmxhc3RBdXRvVGFibGUuZmluYWxZICsgVEVYVF9UQUJMRV9NQVJHSU4gOiB0b3AsXG4gICAgICBjdXQ6ICF3aG9sZSB8fCBmaXQgPCB0YWJsZS5yb3dzLmxlbmd0aCxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB0ZXh0IHRhYmxlJ3MgY2VsbCBhcyBhdXRvVGFibGUgdGFrZXMgaXQ6IGl0cyBzcGFucyBhbmQgZmlsbCBhbmQsIHdoZW4gaXRcbiAgLy8gaXMgb25lIHJvdyB0YWxsLCB0aGUgaGVpZ2h0IGl0cyB3b3JkcyBuZWVkIGF0IHRoZSB3aWR0aCBpdCBzcGFucy4gQSBjZWxsXG4gIC8vIHRoYXQgc3BhbnMgcm93cyBzaGFyZXMgdGhlaXJzLlxuICBwcml2YXRlIF90ZXh0Q2VsbElucHV0KGRvYzogYW55LCBjZWxsOiBUZXh0VGFibGVDZWxsLCBjb2x1bW5XaWR0aHM6IG51bWJlcltdKTogUGRmVGV4dENlbGxJbnB1dCB7XG4gICAgY29uc3QgcGFkZGluZyA9IFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgIGNvbnN0IHdpZHRoID0gY29sdW1uV2lkdGhzXG4gICAgICAuc2xpY2UoY2VsbC5jb2x1bW4sIGNlbGwuY29sdW1uICsgY2VsbC5jb2xTcGFuKVxuICAgICAgLnJlZHVjZSgoc3VtLCBjb2x1bW5XaWR0aCkgPT4gc3VtICsgY29sdW1uV2lkdGgsIDApIC0gMiAqIHBhZGRpbmcuaG9yaXpvbnRhbDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiAnJyxcbiAgICAgIGNvbFNwYW46IGNlbGwuY29sU3BhbixcbiAgICAgIHJvd1NwYW46IGNlbGwucm93U3BhbixcbiAgICAgIHRleHRDZWxsOiBjZWxsLFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIC4uLihjZWxsLmZpbGwgPyB7IGZpbGxDb2xvcjogY2VsbC5maWxsIH0gOiB7fSksXG4gICAgICAgIC4uLihjZWxsLnJvd1NwYW4gPT09IDFcbiAgICAgICAgICA/IHsgbWluQ2VsbEhlaWdodDogdGhpcy5fcGFyYWdyYXBoc0hlaWdodChkb2MsIGNlbGwucGFyYWdyYXBocywgd2lkdGgpICsgMiAqIHBhZGRpbmcudmVydGljYWwgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGhlIGF1dG9UYWJsZSBvcHRpb25zIGEgdGV4dCB0YWJsZSdzIGRyeSBydW4gYW5kIGl0cyBkcmF3IHNoYXJlLiBFdmVyeVxuICAvLyBjb2x1bW4gaXMgbGlzdGVkIGFuZCBmaXhlZCBhdCBpdHMgd2lkdGg6IGF1dG9UYWJsZSB3b3VsZCBvdGhlcndpc2UgY291bnRcbiAgLy8gdGhlIGNvbHVtbnMgb2YgdGhlIGZpcnN0IHJvdywgd2hpY2ggbWF5IGJlIG5hcnJvd2VyIHRoYW4gdGhlIGdyaWQuIEEgcm93XG4gIC8vIGlzIG5ldmVyIHNwbGl0IGF0IHRoZSBib3gncyBib3R0b206IGl0IGZpdHMgd2hvbGUgb3IgbW92ZXMgcGFzdCBpdC4gYm90dG9tXG4gIC8vIGlzIHRoZSBib3gncy5cbiAgcHJpdmF0ZSBfdGV4dFRhYmxlT3B0aW9ucyhcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGNvbHVtbldpZHRoczogbnVtYmVyW10sXG4gICAgbGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgd2lkdGg6IG51bWJlciwgYm90dG9tOiBudW1iZXIsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwYWRkaW5nID0gVEVYVF9UQUJMRV9DRUxMX1BBRERJTkc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGhlbWU6ICdwbGFpbicsXG4gICAgICBjb2x1bW5zOiBjb2x1bW5XaWR0aHMubWFwKChfLCBpbmRleCkgPT4gKHsgZGF0YUtleTogaW5kZXggfSkpLFxuICAgICAgc3RhcnRZOiB0b3AsXG4gICAgICBtYXJnaW46IHsgbGVmdCwgcmlnaHQ6IGNvbnRleHQucGFnZVcgLSBsZWZ0IC0gd2lkdGgsIGJvdHRvbTogY29udGV4dC5wYWdlSCAtIGJvdHRvbSB9LFxuICAgICAgdGFibGVXaWR0aDogd2lkdGgsXG4gICAgICBjb2x1bW5TdHlsZXM6IE9iamVjdC5mcm9tRW50cmllcyhjb2x1bW5XaWR0aHMubWFwKChjZWxsV2lkdGgsIGluZGV4KSA9PiBbaW5kZXgsIHsgY2VsbFdpZHRoIH1dKSksXG4gICAgICByb3dQYWdlQnJlYWs6ICdhdm9pZCcsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgZm9udDogJ2hlbHZldGljYScsXG4gICAgICAgIGZvbnRTdHlsZTogJ25vcm1hbCcsXG4gICAgICAgIGZvbnRTaXplOiBERUZBVUxUX1RFWFRfU0laRSxcbiAgICAgICAgY2VsbFBhZGRpbmc6IHtcbiAgICAgICAgICB0b3A6IHBhZGRpbmcudmVydGljYWwsIHJpZ2h0OiBwYWRkaW5nLmhvcml6b250YWwsIGJvdHRvbTogcGFkZGluZy52ZXJ0aWNhbCwgbGVmdDogcGFkZGluZy5ob3Jpem9udGFsLFxuICAgICAgICB9LFxuICAgICAgICBsaW5lQ29sb3I6IFRFWFRfVEFCTEVfQk9SREVSX0NPTE9SLFxuICAgICAgICBsaW5lV2lkdGg6IFRFWFRfVEFCTEVfQk9SREVSX1dJRFRILFxuICAgICAgICB2YWxpZ246ICdtaWRkbGUnLFxuICAgICAgICB0ZXh0Q29sb3I6IERFRkFVTFRfVEVYVF9DT0xPUixcbiAgICAgIH0sXG4gICAgICBkaWREcmF3Q2VsbDogKGhvb2s6IGFueSkgPT4gdGhpcy5fZHJhd1RleHRDZWxsKGhvb2spLFxuICAgIH07XG4gIH1cblxuICAvLyBIb3cgbWFueSBvZiBhIHRleHQgdGFibGUncyByb3dzIGl0cyBib3gsIGZyb20gdG9wIHRvIGJvdHRvbSwgaG9sZHMgd2hvbGU6XG4gIC8vIHRoZSB0YWJsZSBsYWlkIG91dCBhcyBfbWVhc3VyZSBsYXlzIG91dCBhIGxpc3Qncy5cbiAgcHJpdmF0ZSBfdGV4dFRhYmxlRml0KGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9maXR0aW5nUm93cyhjb250ZXh0LmNyZWF0ZVRhYmxlKHRoaXMuX3NjcmF0Y2hEb2N1bWVudChjb250ZXh0KSwgb3B0aW9ucyksIHRvcCwgYm90dG9tLCAwKTtcbiAgfVxuXG4gIC8vIFRoZSBmaXJzdCBgZml0YCByb3dzLCBhIGNlbGwgdGhhdCBzcGFucyBkb3duIHBhc3QgdGhlIGxhc3Qgb2YgdGhlbSBjdXRcbiAgLy8gdGhlcmUuXG4gIHByaXZhdGUgX2tlcHRSb3dzKGJvZHk6IFBkZlRleHRDZWxsSW5wdXRbXVtdLCBmaXQ6IG51bWJlcik6IFBkZlRleHRDZWxsSW5wdXRbXVtdIHtcbiAgICByZXR1cm4gYm9keS5zbGljZSgwLCBmaXQpLm1hcCgocm93KSA9PiByb3cubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3Qgcm93U3BhbiA9IE1hdGgubWluKGlucHV0LnJvd1NwYW4sIGZpdCAtIGlucHV0LnRleHRDZWxsLnJvdyk7XG5cbiAgICAgIHJldHVybiByb3dTcGFuID09PSBpbnB1dC5yb3dTcGFuID8gaW5wdXQgOiB7IC4uLmlucHV0LCByb3dTcGFuIH07XG4gICAgfSkpO1xuICB9XG5cbiAgLy8gQSB0ZXh0IHRhYmxlIGNlbGwncyB3b3JkcywgZHJhd24gb25jZSBhdXRvVGFibGUgaGFzIGRyYXduIHRoZSBjZWxsOiBpbnNpZGVcbiAgLy8gaXRzIHBhZGRpbmcsIHdyYXBwZWQgdG8gaXRzIHdpZHRoIGFuZCBwbGFjZWQgYnkgaXRzIHZlcnRpY2FsIGFsaWdubWVudCwgdGhlXG4gIC8vIG1pZGRsZSB1bmxlc3Mgc2V0LiBMaW5lcyBwYXN0IHRoZSBjZWxsIGFyZSBsZWZ0IG9mZi5cbiAgcHJpdmF0ZSBfZHJhd1RleHRDZWxsKGhvb2s6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGNlbGw6IFRleHRUYWJsZUNlbGwgfCB1bmRlZmluZWQgPSBob29rLmNlbGwucmF3Py50ZXh0Q2VsbDtcbiAgICBpZiAoIWNlbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGhvb2suY2VsbDtcbiAgICBjb25zdCBib3g6IFBkZlRleHRCb3ggPSB7XG4gICAgICBsZWZ0OiB4ICsgaG9vay5jZWxsLnBhZGRpbmcoJ2xlZnQnKSxcbiAgICAgIHRvcDogeSArIGhvb2suY2VsbC5wYWRkaW5nKCd0b3AnKSxcbiAgICAgIHdpZHRoOiB3aWR0aCAtIGhvb2suY2VsbC5wYWRkaW5nKCdob3Jpem9udGFsJyksXG4gICAgICBib3R0b206IHkgKyBoZWlnaHQgLSBob29rLmNlbGwucGFkZGluZygnYm90dG9tJyksXG4gICAgfTtcbiAgICBjb25zdCBzcGFyZSA9IE1hdGgubWF4KDAsIGJveC5ib3R0b20gLSBib3gudG9wIC0gdGhpcy5fcGFyYWdyYXBoc0hlaWdodChob29rLmRvYywgY2VsbC5wYXJhZ3JhcGhzLCBib3gud2lkdGgpKTtcbiAgICBjb25zdCBvZmZzZXQgPSBjZWxsLnZhbGlnbiA9PT0gJ3RvcCcgPyAwIDogKGNlbGwudmFsaWduID09PSAnYm90dG9tJyA/IHNwYXJlIDogc3BhcmUgLyAyKTtcblxuICAgIHRoaXMuX2RyYXdQYXJhZ3JhcGhzKGhvb2suZG9jLCBjZWxsLnBhcmFncmFwaHMsIGJveCwgYm94LnRvcCArIG9mZnNldCk7XG4gIH1cblxuICAvLyBCcmVhayBhIHBhcmFncmFwaCdzIHJ1bnMgaW50byBsaW5lcyBvZiBtZWFzdXJlZCB3b3JkcyB0aGF0IGZpdCB0aGUgd2lkdGguXG4gIC8vIEEgd29yZCBrZWVwcyBpdHMgdHJhaWxpbmcgc3BhY2Ugc28gc3BhY2luZyBzdXJ2aXZlcyBydW4gYm91bmRhcmllcy4gQVxuICAvLyBuby1icmVhayBzcGFjZSBpcyBwYXJ0IG9mIGl0cyB3b3JkLCBuZXZlciBhIGJyZWFrIGJldHdlZW4gdHdvOiBhIG51bWJlclxuICAvLyBncm91cGVkIHdpdGggb25lIChmci1DQSdzIHRob3VzYW5kcywgb3IgYSBuYXJyb3cgc3BhY2UgX3BkZlRleHQgdHVybmVkXG4gIC8vIGludG8gb25lKSBzdGF5cyBvbiBvbmUgbGluZS5cbiAgcHJpdmF0ZSBfd3JhcChkb2M6IGFueSwgcGFyYWdyYXBoOiBUZXh0UGFyYWdyYXBoLCB3aWR0aDogbnVtYmVyKTogUGRmV29yZFtdW10ge1xuICAgIGNvbnN0IGxpbmVzOiBQZGZXb3JkW11bXSA9IFtdO1xuICAgIGxldCBsaW5lOiBQZGZXb3JkW10gPSBbXTtcbiAgICBsZXQgbGluZVdpZHRoID0gMDtcblxuICAgIGZvciAoY29uc3QgcnVuIG9mIHBhcmFncmFwaC5ydW5zKSB7XG4gICAgICBjb25zdCBzaXplID0gcnVuLmZvbnRTaXplID8/IERFRkFVTFRfVEVYVF9TSVpFO1xuICAgICAgdGhpcy5fZm9udChkb2MsIHJ1biwgc2l6ZSk7XG5cbiAgICAgIGZvciAoY29uc3QgdGV4dCBvZiBydW4udGV4dC5tYXRjaCgvKD86W15cXHNdfFxcdTAwYTApK1teXFxTXFx1MDBhMF0qfFteXFxTXFx1MDBhMF0rL2cpID8/IFtdKSB7XG4gICAgICAgIGNvbnN0IHdvcmRXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodGV4dCk7XG5cbiAgICAgICAgaWYgKGxpbmUubGVuZ3RoICYmIGxpbmVXaWR0aCArIHdvcmRXaWR0aCAtIHRoaXMuX3RyYWlsaW5nU3BhY2UoZG9jLCB0ZXh0KSA+IHdpZHRoKSB7XG4gICAgICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgICBsaW5lID0gW107XG4gICAgICAgICAgbGluZVdpZHRoID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmUucHVzaCh7IHJ1biwgdGV4dCwgc2l6ZSwgd2lkdGg6IHdvcmRXaWR0aCB9KTtcbiAgICAgICAgbGluZVdpZHRoICs9IHdvcmRXaWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGluZS5sZW5ndGgpIHtcbiAgICAgIGxpbmVzLnB1c2gobGluZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZHJhd1dvcmQoZG9jOiBhbnksIHdvcmQ6IFBkZldvcmQsIHg6IG51bWJlciwgYmFzZWxpbmU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJ1biA9IHdvcmQucnVuO1xuXG4gICAgaWYgKHJ1bi5oaWdobGlnaHQpIHtcbiAgICAgIGRvYy5zZXRGaWxsQ29sb3IocnVuLmhpZ2hsaWdodCk7XG4gICAgICBkb2MucmVjdCh4LCBiYXNlbGluZSAtIHdvcmQuc2l6ZSAqIDAuOSwgd29yZC53aWR0aCwgd29yZC5zaXplICogMS4xNSwgJ0YnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mb250KGRvYywgcnVuLCB3b3JkLnNpemUpO1xuICAgIGRvYy50ZXh0KHdvcmQudGV4dCwgeCwgYmFzZWxpbmUpO1xuXG4gICAgY29uc3QgY29sb3IgPSBydW4uY29sb3IgPz8gREVGQVVMVF9URVhUX0NPTE9SO1xuICAgIGNvbnN0IGlua1dpZHRoID0gd29yZC53aWR0aCAtIHRoaXMuX3RyYWlsaW5nU3BhY2UoZG9jLCB3b3JkLnRleHQpO1xuICAgIGlmIChydW4udW5kZXJsaW5lKSB7XG4gICAgICBkb2Muc2V0RHJhd0NvbG9yKGNvbG9yKTtcbiAgICAgIGRvYy5zZXRMaW5lV2lkdGgod29yZC5zaXplIC8gMTYpO1xuICAgICAgZG9jLmxpbmUoeCwgYmFzZWxpbmUgKyB3b3JkLnNpemUgKiAwLjEyLCB4ICsgaW5rV2lkdGgsIGJhc2VsaW5lICsgd29yZC5zaXplICogMC4xMik7XG4gICAgfVxuICAgIGlmIChydW4uc3RyaWtlKSB7XG4gICAgICBkb2Muc2V0RHJhd0NvbG9yKGNvbG9yKTtcbiAgICAgIGRvYy5zZXRMaW5lV2lkdGgod29yZC5zaXplIC8gMTYpO1xuICAgICAgZG9jLmxpbmUoeCwgYmFzZWxpbmUgLSB3b3JkLnNpemUgKiAwLjMsIHggKyBpbmtXaWR0aCwgYmFzZWxpbmUgLSB3b3JkLnNpemUgKiAwLjMpO1xuICAgIH1cblxuICAgIGlmIChydW4ubGluaykge1xuICAgICAgZG9jLmxpbmsoeCwgYmFzZWxpbmUgLSB3b3JkLnNpemUsIGlua1dpZHRoLCB3b3JkLnNpemUgKiAxLjIsIHsgdXJsOiBydW4ubGluayB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBqc1BERidzIHN0YW5kYXJkIGZvbnRzIGFyZSBIZWx2ZXRpY2EsIFRpbWVzIGFuZCBDb3VyaWVyOyBhIGJsb2NrJ3MgZmFjZSBpc1xuICAvLyBtYXBwZWQgb250byB3aGljaGV2ZXIgb2YgdGhlIHRocmVlIGl0IHJlc2VtYmxlcy5cbiAgcHJpdmF0ZSBfZm9udChkb2M6IGFueSwgcnVuOiBUZXh0UnVuLCBzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBmYWNlID0gKHJ1bi5mb250RmFjZSA/PyAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBmYW1pbHkgPSAvY291cmllcnxtb25vLy50ZXN0KGZhY2UpXG4gICAgICA/ICdjb3VyaWVyJ1xuICAgICAgOiAoL3RpbWVzfGdlb3JnaWF8c2VyaWYvLnRlc3QoZmFjZSkgJiYgIWZhY2UuaW5jbHVkZXMoJ3NhbnMnKSA/ICd0aW1lcycgOiAnaGVsdmV0aWNhJyk7XG4gICAgY29uc3Qgc3R5bGUgPSBydW4uYm9sZCAmJiBydW4uaXRhbGljXG4gICAgICA/ICdib2xkaXRhbGljJ1xuICAgICAgOiAocnVuLmJvbGQgPyAnYm9sZCcgOiAocnVuLml0YWxpYyA/ICdpdGFsaWMnIDogJ25vcm1hbCcpKTtcblxuICAgIGRvYy5zZXRGb250KGZhbWlseSwgc3R5bGUpO1xuICAgIGRvYy5zZXRGb250U2l6ZShzaXplKTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKHJ1bi5jb2xvciA/PyBERUZBVUxUX1RFWFRfQ09MT1IpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJhaWxpbmdTcGFjZShkb2M6IGFueSwgdGV4dDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCB0cmFpbGluZyA9IHRleHQubGVuZ3RoIC0gdGV4dC50cmltRW5kKCkubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHRyYWlsaW5nID8gZG9jLmdldFRleHRXaWR0aCgnICcpICogdHJhaWxpbmcgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWxpZ25PZmZzZXQoYWxpZ246IFRleHRQYXJhZ3JhcGhbJ2FsaWduJ10sIHdpZHRoOiBudW1iZXIsIGxpbmVXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgKHdpZHRoIC0gbGluZVdpZHRoKSAvIDIpO1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgd2lkdGggLSBsaW5lV2lkdGgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgLy8gV2hhdCB0aGUgdG9rZW5zIG9mIGEgdGV4dCBibG9jayBhbmQgb2YgYSB0aWxlJ3MgdGl0bGUgZmlsbCB3aXRoIG9uIHRoaXNcbiAgLy8gcGFnZS4gVGhlIG51bWJlciBpcyB0aGUgcGh5c2ljYWwgcGFnZSBhbW9uZyB0aGUgcmVwb3J0J3MgcGFnZXMsXG4gIC8vIGNvbnRpbnVhdGlvbiBwYWdlcyBpbmNsdWRlZCDigJQgdGhlIHRpdGxlIHBhZ2UgaXMgbm90IGEgcmVwb3J0IHBhZ2UuIFRoZVxuICAvLyBuYW1lIHN0YXlzIHRoZSByZXBvcnQgcGFnZSdzLCBzbyBhIGNvbnRpbnVhdGlvbiBwYWdlIGlzIG5hbWVkIGZvciB0aGVcbiAgLy8gcGFnZSBpdHMgdGFibGUgc3RhcnRlZCBvbi4gVGhlIGZpbHRlcnMgYXJlIHRoZSByZXBvcnQncyBhbmQgdGhlIHBhZ2Unc1xuICAvLyBvd24gcGFnZSBmaWx0ZXJzIChsYXllckZpbHRlckZpZWxkcykuXG4gIHByaXZhdGUgX3Rva2Vucyhjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LCBwYWdlOiBSZXBvcnRQYWdlLCBpbmRleDogbnVtYmVyLCBwYWdlTnVtYmVyOiBudW1iZXIpOiBUZXh0VG9rZW5Db250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZU51bWJlcixcbiAgICAgIHBhZ2VOYW1lOiBwYWdlLm5hbWUgfHwgYFBhZ2UgJHtpbmRleCArIDF9YCxcbiAgICAgIHJlcG9ydE5hbWU6IGNvbnRleHQucmVwb3J0Lm5hbWUsXG4gICAgICBmaWx0ZXJzOiBsYXllckZpbHRlckZpZWxkcyhjb250ZXh0LmZpbHRlckZpZWxkcywgY29udGV4dC5yZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdLCBwYWdlLmlkKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB0aWxlIG9uIGl0cyByZXBvcnQgcGFnZSwgaXRzIHRpdGxlJ3MgdG9rZW5zIGZpbGxlZCB3aXRoIHRoYXQgcGFnZSdzLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJDb21wb25lbnQoXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICBwYWdlOiBSZXBvcnRQYWdlLFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQsXG4gICAgb3ZlcmZsb3dzOiBQZGZUYWJsZU92ZXJmbG93W10sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZG9jIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGl0ZW0uY29tcG9uZW50O1xuICAgIC8vIEdlb21ldHJ5IGlzIHN0b3JlZCBpbiBpbmNoZXM7IHRoZSBQREYgZHJhd3MgaW4gcG9pbnRzLlxuICAgIGNvbnN0IHggPSBjb21wb25lbnQueCAqIFBUO1xuICAgIGNvbnN0IHkgPSBjb21wb25lbnQueSAqIFBUO1xuICAgIGNvbnN0IHcgPSBjb21wb25lbnQudyAqIFBUO1xuICAgIGNvbnN0IGggPSBjb21wb25lbnQuaCAqIFBUO1xuXG4gICAgY29uc3QgdGl0bGUgPSBleHBvcnRUaXRsZShjb21wb25lbnQsIHRva2VucywgaXRlbS5zZWFyY2gsIGl0ZW0uY3J1bWJzLCBpdGVtLmZpbHRlcmVkKTtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudFRpdGxlKGRvYywgdGl0bGUsIHgsIHksIHcpO1xuICAgIH1cblxuICAgIC8vIEEgY2hhcnQgb3IgbGlzdCB0aGF0IGNvbXBhcmVzIG9yIGhhcyBhIHRpbWVmcmFtZSBuYW1lcyBpdHMgZGF5cyB1bmRlclxuICAgIC8vIHRoZSB0aXRsZSwgYW5kIGl0cyBub3RlcyBzaXQgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveDsgYSBLUEkgY2FyZCBkcmF3c1xuICAgIC8vIGJvdGggaXRzZWxmLiBOZWl0aGVyIHRha2VzIHJvb20gZnJvbSBhIGNvbXBvbmVudCB3aXRob3V0IHRob3NlIGtleXMuXG4gICAgY29uc3QgbG9jYWxlID0gY29udGV4dC5mb3JtYXRDb250ZXh0LmxvY2FsZTtcbiAgICBjb25zdCBzdWJ0aXRsZSA9IHRoaXMuX3BkZlRleHQoZXhwb3J0V2luZG93c0xpbmUoaXRlbSwgY29udGV4dC50aW1lem9uZSwgbG9jYWxlKSk7XG4gICAgY29uc3Qgbm90ZXMgPSBjb21wb25lbnQudHlwZSA9PT0gJ2twaScgPyBbXSA6IGV4cG9ydE5vdGVMaW5lcyhpdGVtLCBjb250ZXh0LnRpbWV6b25lLCBsb2NhbGUpO1xuICAgIGNvbnN0IHRvcCA9IHkgKyBUSVRMRV9IICsgKHN1YnRpdGxlID8gU1VCVElUTEVfSCA6IDApO1xuICAgIGNvbnN0IHJvb20gPSBNYXRoLm1heCgyMCwgeSArIGggLSB0b3ApO1xuICAgIGNvbnN0IGtlcHQgPSBub3Rlcy5zbGljZSgwLCBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChyb29tIC0gTUlOX0JPRFlfSCkgLyBOT1RFX0xJTkVfSCkpKTtcblxuICAgIGlmIChzdWJ0aXRsZSkge1xuICAgICAgdGhpcy5fc21hbGxMaW5lKGRvYywgc3VidGl0bGUsIHgsIHkgKyBUSVRMRV9ILCB3LCAnbGVmdCcsICdub3JtYWwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5WSA9IHRvcDtcbiAgICBjb25zdCBib2R5SCA9IE1hdGgubWF4KDIwLCByb29tIC0ga2VwdC5sZW5ndGggKiBOT1RFX0xJTkVfSCk7XG5cbiAgICBrZXB0LmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLl9zbWFsbExpbmUoZG9jLCB0aGlzLl9wZGZUZXh0KGxpbmUpLCB4LCBib2R5WSArIGJvZHlIICsgaW5kZXggKiBOT1RFX0xJTkVfSCwgdywgJ2xlZnQnLCAnaXRhbGljJyk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWl0ZW0uZGF0YSB8fCBpc0VtcHR5VGlsZShpdGVtKSkge1xuICAgICAgdGhpcy5fYm94Tm90ZShkb2MsIGVtcHR5TGFiZWwoaXRlbSksIHgsIGJvZHlZLCB3LCBib2R5SCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XG4gICAgICBjYXNlICdjaGFydCc6IHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCByZW5kZXJDaGFydEltYWdlKGNvbXBvbmVudCwgaXRlbS5kYXRhLCB3LCBib2R5SCwgY29udGV4dC5mb3JtYXRDb250ZXh0KTtcbiAgICAgICAgZG9jLmFkZEltYWdlKGltYWdlLCAnUE5HJywgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgIGNhc2UgJ2dyaWQnOlxuICAgICAgICB0aGlzLl9yZW5kZXJUYWJsZShjb250ZXh0LCBwYWdlLCBpdGVtLCB4LCBib2R5WSwgdywgYm9keUgsIG92ZXJmbG93cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAna3BpJzpcbiAgICAgICAgdGhpcy5fcmVuZGVyS3BpKGNvbnRleHQsIGl0ZW0sIHgsIGJvZHlZLCB3LCBib2R5SCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIE9uZSBsaW5lIG9mIHNtYWxsIGdyZXkgcHJpbnQsIGN1dCB0byB0aGUgd2lkdGggd2l0aCBhbiBlbGxpcHNpczogYVxuICAvLyBzdWJ0aXRsZSwgYSBub3RlIG9yIGEgbGluZSBvZiBhIEtQSSBjYXJkLiB5IGlzIHRoZSBsaW5lJ3MgdG9wOyB0aGUgbGluZSBpc1xuICAvLyBOT1RFX0xJTkVfSCB0YWxsLCB0aW1lcyB0aGUgc2NhbGUgYSBzaG9ydCBLUEkgdGlsZSBzaHJpbmtzIGl0cyBsaW5lcyBieS5cbiAgcHJpdmF0ZSBfc21hbGxMaW5lKFxuICAgIGRvYzogYW55LFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLFxuICAgIGFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyxcbiAgICBzdHlsZTogJ25vcm1hbCcgfCAnaXRhbGljJyxcbiAgICBzY2FsZSA9IDEsXG4gICk6IHZvaWQge1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCBzdHlsZSk7XG4gICAgZG9jLnNldEZvbnRTaXplKFNNQUxMX1NJWkUgKiBzY2FsZSk7XG4gICAgZG9jLnNldFRleHRDb2xvcihNVVRFRF9DT0xPUik7XG4gICAgZG9jLnRleHQodGhpcy5fZml0KGRvYywgdGV4dCwgdyksIGFsaWduID09PSAnY2VudGVyJyA/IHggKyB3IC8gMiA6IHgsIHkgKyBTTUFMTF9TSVpFICogc2NhbGUsIHsgYWxpZ24gfSk7XG4gIH1cblxuICAvLyBUaGUgdGV4dCwgZWxsaXBzaXplZCB0byB0aGUgd2lkdGggaW4gdGhlIGRvYydzIGN1cnJlbnQgZm9udC5cbiAgcHJpdmF0ZSBfZml0KGRvYzogYW55LCB0ZXh0OiBzdHJpbmcsIHdpZHRoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChkb2MuZ2V0VGV4dFdpZHRoKHRleHQpIDw9IHdpZHRoKSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICBsZXQgY3V0ID0gdGV4dDtcbiAgICB3aGlsZSAoY3V0Lmxlbmd0aCA+IDEgJiYgZG9jLmdldFRleHRXaWR0aChgJHtjdXR94oCmYCkgPiB3aWR0aCkge1xuICAgICAgY3V0ID0gY3V0LnNsaWNlKDAsIC0xKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7Y3V0LnRyaW1FbmQoKX3igKZgO1xuICB9XG5cbiAgLy8gVGhlIGJvbGQgc3RyaXAgb3ZlciBhIGNvbXBvbmVudCwgYW5kIG92ZXIgZWFjaCBvZiBpdHMgY29udGludWF0aW9uIHBhZ2VzLlxuICAvLyBBIGRyaWxsZWQgdGl0bGUncyBjcnVtYnMgYXJlIHdyaXR0ZW4gaW4gdGhlIHJlcG9ydCdzIGxvY2FsZSwgc28gdGhlIHRpdGxlXG4gIC8vIGdvZXMgdGhyb3VnaCBfcGRmVGV4dCBsaWtlIGFueSBmb3JtYXR0ZWQgdGV4dCAodGhlIOKAuiBiZXR3ZWVuIGNydW1icyBpc1xuICAvLyBXaW5BbnNpIGFuZCBzdGF5cykuXG4gIHByaXZhdGUgX2NvbXBvbmVudFRpdGxlKGRvYzogYW55LCB0aXRsZTogc3RyaW5nLCB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyKTogdm9pZCB7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDkpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoJyMxZjI5MzMnKTtcbiAgICBkb2MudGV4dCh0aGlzLl9wZGZUZXh0KHRpdGxlKSwgeCwgeSArIDEwLCB7IG1heFdpZHRoOiB3IH0pO1xuICB9XG5cbiAgLy8gQW4gaXRhbGljIGdyZXkgbGluZSBjZW50ZXJlZCBpbiBhIGNvbXBvbmVudCdzIGJvZHksIGZvciBhIGJvZHkgdGhhdCBob2xkc1xuICAvLyBzb21ldGhpbmcgb3RoZXIgdGhhbiBpdHMgY29udGVudC4gQSBsaW5lIHdpZGVyIHRoYW4gdGhlIGJvZHkgd3JhcHMuXG4gIHByaXZhdGUgX2JveE5vdGUoZG9jOiBhbnksIHRleHQ6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyKTogdm9pZCB7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdpdGFsaWMnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoOSk7XG4gICAgZG9jLnNldFRleHRDb2xvcihNVVRFRF9DT0xPUik7XG4gICAgZG9jLnRleHQodGV4dCwgeCArIHcgLyAyLCB5ICsgaCAvIDIsIHsgYWxpZ246ICdjZW50ZXInLCBtYXhXaWR0aDogdyB9KTtcbiAgfVxuXG4gIC8vIEEgbGlzdCdzIG9uLXBhZ2UgdGFibGUuIEFsbCBvZiBpdHMgZmV0Y2hlZCByb3dzIGFyZSBsYWlkIG91dCBvbmNlIHRvIGxlYXJuXG4gIC8vIGhvdyBtYW55IHRoZSBib3ggaG9sZHM7IHdoZW4gdGhleSBkbyBub3QgYWxsIGZpdCwgdGhlIGJveCdzIGxhc3Qgcm93IHNheXNcbiAgLy8gdGhlIHRhYmxlIGNvbnRpbnVlcyBhbmQgdGhlIHJlc3QgZ28gdG8gb3ZlcmZsb3dzIGZvciBjb250aW51YXRpb24gcGFnZXMuXG4gIC8vIEEgYm94IHRvbyBzaG9ydCBmb3IgZXZlbiB0aGUgaGVhZCBjYXJyaWVzIHRoZSBub3RpY2UgYXMgYSBsaW5lIGluc3RlYWQuXG4gIC8vIEEgdGFibGUgd2hvc2UgaGVhZGluZyBhbmQgdG90YWxzIHJvdyBsZWF2ZSBhIGNvbnRpbnVhdGlvbiBwYWdlIG5vIHJvb20gZm9yXG4gIC8vIGEgcm93IHN0b3BzIGF0IGl0cyBib3gsIGl0cyBub3RpY2Ugc2F5aW5nIHNvLiBBIHRvdGFscyByb3cgY2xvc2VzIHRoZVxuICAvLyB0YWJsZSBvbmNlOiBpbiB0aGUgYm94IHdoZW4gZXZlcnkgcm93IGZpdHMgaXQsIGVsc2UgYWZ0ZXIgdGhlIGxhc3RcbiAgLy8gY29udGludWF0aW9uIHJvdy4gUG9pbnRzIHRocm91Z2hvdXQuXG4gIHByaXZhdGUgX3JlbmRlclRhYmxlKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgcGFnZTogUmVwb3J0UGFnZSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICAgIG92ZXJmbG93czogUGRmVGFibGVPdmVyZmxvd1tdLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbXBvbmVudCwgc2VhcmNoLCBmaWx0ZXJlZCB9ID0gaXRlbTtcbiAgICBjb25zdCB7IGhlYWQsIGNlbGxzLCBudW1lcmljLCBmb290LCBvbWl0dGVkIH0gPSBpdGVtLnRhYmxlID8gdGhpcy5fZ3JpZENlbGxzKGl0ZW0pIDogdGhpcy5fbGlzdENlbGxzKGNvbnRleHQsIGl0ZW0pO1xuICAgIGNvbnN0IGJvdHRvbSA9IGNvbnRleHQucGFnZUggLSAoeSArIGgpO1xuICAgIGNvbnN0IHsgZml0LCBjb2x1bW5TdHlsZXMsIG1pbkhlaWdodCB9ID0gdGhpcy5fbWVhc3VyZShjb250ZXh0LCBoZWFkLCBjZWxscywgbnVtZXJpYywgZm9vdCwgeCwgeSwgdywgYm90dG9tKTtcblxuICAgIGlmIChmaXQgPT09IGNlbGxzLmxlbmd0aCAmJiBvbWl0dGVkID09PSAwKSB7XG4gICAgICB0aGlzLl9kcmF3VGFibGUoXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHRoaXMuX3RhYmxlT3B0aW9ucyhjb250ZXh0LCBoZWFkLCBudW1lcmljLCBjZWxscywgeCwgeSwgdywgYm90dG9tLCBjb2x1bW5TdHlsZXMsIGZvb3QpLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGF1dG9UYWJsZSBuZWVkcyByb29tIGZvciBhIHJvdyB1bmRlciB0aGUgaGVhZGluZyBvbiBldmVyeSBwYWdlIGl0IGFkZHMsXG4gICAgLy8gb3IgaXQgYWRkcyBwYWdlcyB1bnRpbCB0aGUgYnJvd3NlcidzIHN0YWNrIHJ1bnMgb3V0LlxuICAgIGNvbnN0IGNvbnRpbnVlcyA9IG1pbkhlaWdodCA8IHRoaXMuX2NvbnRpbnVhdGlvblJvb20oY29udGV4dCwgcGFnZSk7XG4gICAgY29uc3Qgbm90aWNlID0gY29udGludWVzID8gQ09OVElOVUVEX05PVElDRSA6IE5PX1JPT01fTk9USUNFO1xuXG4gICAgLy8gVGhlIG5vdGljZSB0YWtlcyB0aGUgcGxhY2Ugb2YgdGhlIGxhc3Qgcm93IHRoYXQgZml0LCBzbyB0aGF0IHJvdyBtb3Zlc1xuICAgIC8vIHRvIHRoZSBjb250aW51YXRpb24uIG9taXR0ZWQgPiAwIG1lYW5zIGEgZnVsbCBQREZfTElTVF9ST1dTIGZldGNoLCB3aGljaFxuICAgIC8vIG5ldmVyIGZpdHMgb25lIGJveCwgc28gdGhlIENTViBub3RpY2UgYWx3YXlzIGxhbmRzIG9uIGEgY29udGludWF0aW9uXG4gICAgLy8gcGFnZS5cbiAgICBjb25zdCBrZXB0ID0gTWF0aC5tYXgoMCwgZml0IC0gMSk7XG5cbiAgICBpZiAoZml0ID49IDEpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBbLi4uY2VsbHMuc2xpY2UoMCwga2VwdCksIHRoaXMuX25vdGljZVJvdyhub3RpY2UsIG51bWVyaWMubGVuZ3RoLCB0cnVlKV07XG4gICAgICB0aGlzLl9kcmF3VGFibGUoY29udGV4dCwgdGhpcy5fdGFibGVPcHRpb25zKGNvbnRleHQsIGhlYWQsIG51bWVyaWMsIGJvZHksIHgsIHksIHcsIGJvdHRvbSwgY29sdW1uU3R5bGVzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JveE5vdGUoY29udGV4dC5kb2MsIG5vdGljZSwgeCwgeSwgdywgaCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRpbnVlcykge1xuICAgICAgb3ZlcmZsb3dzLnB1c2goe1xuICAgICAgICBjb21wb25lbnQsIHNlYXJjaCwgY3J1bWJzOiBpdGVtLmNydW1icywgZmlsdGVyZWQsIGhlYWQsIG51bWVyaWMsIHJvd3M6IGNlbGxzLnNsaWNlKGtlcHQpLCBvbWl0dGVkLCBmb290LCB4LCB3LFxuICAgICAgICBjb2x1bW5TdHlsZXMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBBIGxpc3QncyBoZWFkaW5nLCByb3dzLCB0b3RhbHMgcm93IGFuZCB0aGUgcm93cyBwYXN0IGl0cyBmZXRjaC5cbiAgcHJpdmF0ZSBfbGlzdENlbGxzKGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCk6IFBkZlRhYmxlUGFydHMge1xuICAgIGNvbnN0IHsgY29tcG9uZW50LCBoaWRkZW5Db2x1bW5zIH0gPSBpdGVtO1xuICAgIGNvbnN0IGRhdGEgPSBpdGVtLmRhdGEgYXMgQ29tcG9uZW50RGF0YTtcbiAgICBjb25zdCBoZWFkID0gW2xpc3RIZWFkaW5ncyhjb21wb25lbnQsIGRhdGEsIGNvbnRleHQuZm9ybWF0Q29udGV4dC5sb2NhbGUsIGhpZGRlbkNvbHVtbnMpLm1hcCgoaGVhZGluZykgPT4gdGhpcy5fcGRmVGV4dChoZWFkaW5nKSldO1xuICAgIGNvbnN0IHsgY2VsbHMsIG51bWVyaWMsIGZvb3QgfSA9IHRoaXMuX3RhYmxlQ2VsbHMoY29udGV4dCwgY29tcG9uZW50LCBkYXRhLCBoaWRkZW5Db2x1bW5zKTtcblxuICAgIHJldHVybiB7IGhlYWQsIGNlbGxzLCBudW1lcmljLCBmb290LCBvbWl0dGVkOiBNYXRoLm1heCgwLCAoZGF0YS5wYWdpbmc/LnRvdGFsID8/IGNlbGxzLmxlbmd0aCkgLSBjZWxscy5sZW5ndGgpIH07XG4gIH1cblxuICAvLyBBIHRhYmxlIHRpbGUncyBoZWFkaW5nIHJvd3MgKHNwYW5uZWQgYXMgdGhlIHNjcmVlbidzIGhlYWRlciksIGl0cyBsaW5lc1xuICAvLyAoZ3JvdXBzIGFuZCB0b3RhbHMgYm9sZCwgYSBncm91cCdzIGxhYmVsIHN0ZXBwZWQgaW4gYnkgaXRzIGRlcHRoKSBhbmQgaXRzXG4gIC8vIHRvdGFsIHJvdywgYXMgZ3JpZEV4cG9ydFRhYmxlKCkgbGF5cyB0aGVtIG91dCwgYW5kIHRoZSBsaW5lcyBwYXN0IGl0cyBjYXAuXG4gIHByaXZhdGUgX2dyaWRDZWxscyhpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQpOiBQZGZUYWJsZVBhcnRzIHtcbiAgICBjb25zdCB0YWJsZSA9IGdyaWRFeHBvcnRUYWJsZShpdGVtLnRhYmxlISk7XG4gICAgY29uc3QgY2VsbCA9IChleHBvcnRlZDogR3JpZEV4cG9ydENlbGwpOiBQZGZUYWJsZUNlbGwgPT4gKHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuX3BkZlRleHQoZXhwb3J0ZWQudGV4dCksXG4gICAgICBjb2xTcGFuOiBleHBvcnRlZC5jb2xTcGFuLFxuICAgICAgcm93U3BhbjogZXhwb3J0ZWQucm93U3BhbixcbiAgICAgIHN0eWxlczoge1xuICAgICAgICAuLi4oZXhwb3J0ZWQuYm9sZCA/IHsgZm9udFN0eWxlOiAnYm9sZCcgfSA6IHt9KSxcbiAgICAgICAgLi4uKGV4cG9ydGVkLnNoYWRlID8geyBmaWxsQ29sb3I6IGV4cG9ydGVkLnNoYWRlLmJhY2tncm91bmQsIHRleHRDb2xvcjogZXhwb3J0ZWQuc2hhZGUuZm9yZWdyb3VuZCB9IDoge30pLFxuICAgICAgICAuLi4oZXhwb3J0ZWQuaW5kZW50XG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBjZWxsUGFkZGluZzoge1xuICAgICAgICAgICAgICB0b3A6IFRBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgcmlnaHQ6IFRBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgYm90dG9tOiBUQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgIGxlZnQ6IFRBQkxFX0NFTExfUEFERElORyArIGV4cG9ydGVkLmluZGVudCAqIEdSSURfSU5ERU5ULFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWQ6IHRhYmxlLmhlYWQubWFwKChyb3cpID0+IHJvdy5tYXAoY2VsbCkpLFxuICAgICAgY2VsbHM6IHRhYmxlLmJvZHkubWFwKChyb3cpID0+IHJvdy5tYXAoY2VsbCkpLFxuICAgICAgbnVtZXJpYzogdGFibGUubnVtZXJpYyxcbiAgICAgIGZvb3Q6IHRhYmxlLmZvb3QgPyB0YWJsZS5mb290Lm1hcCgoZXhwb3J0ZWQpID0+IHRoaXMuX3BkZlRleHQoZXhwb3J0ZWQudGV4dCkpIDogbnVsbCxcbiAgICAgIG9taXR0ZWQ6IHRhYmxlLm1vcmVSb3dzLFxuICAgIH07XG4gIH1cblxuICAvLyBFYWNoIGZldGNoZWQgcm93IGFzIHRoZSBzdHJpbmdzIGl0cyB0YWJsZSBjZWxscyBwcmludCwgaW4gdGhlIHJlcG9ydCdzXG4gIC8vIHpvbmUsIGxvY2FsZSBhbmQgY3VycmVuY3ksIHdoaWNoIGNvbHVtbnMgaG9sZCBmb3JtYXR0ZWQgbnVtYmVycywgYW5kIHRoZVxuICAvLyB0b3RhbHMgcm93IChudWxsIHdpdGhvdXQgb25lKS4gVGhlIGNvbHVtbnMgdGhlIHZpZXdlciBoaWQgYXJlIGxlZnQgb3V0LlxuICBwcml2YXRlIF90YWJsZUNlbGxzKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBoaWRkZW5Db2x1bW5zOiByZWFkb25seSBzdHJpbmdbXSxcbiAgKTogeyBjZWxsczogc3RyaW5nW11bXTsgbnVtZXJpYzogYm9vbGVhbltdOyBmb290OiBzdHJpbmdbXSB8IG51bGwgfSB7XG4gICAgY29uc3QgY29sdW1ucyA9IGxpc3RDb2x1bW5zKGNvbXBvbmVudCwgZGF0YSwgY29udGV4dC5mb3JtYXRDb250ZXh0LmxvY2FsZSwgaGlkZGVuQ29sdW1ucyk7XG4gICAgY29uc3QgY2VsbHMgPSBkYXRhLnJvd3MubWFwKChyb3cpID0+IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHRoaXMuX3BkZlRleHQoXG4gICAgICBleHBvcnRDZWxsKHJvd1tjb2x1bW4uY29sdW1uXSwgY29sdW1uLCBjb250ZXh0LnRpbWV6b25lLCBjb250ZXh0LmZvcm1hdENvbnRleHQsIHJvdyksXG4gICAgKSkpO1xuICAgIGNvbnN0IGZvb3QgPSBsaXN0VG90YWxzUm93KGRhdGEsIGNvbHVtbnMsIGNvbnRleHQudGltZXpvbmUsIGNvbnRleHQuZm9ybWF0Q29udGV4dCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2VsbHMsXG4gICAgICBudW1lcmljOiBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubnVtZXJpYyksXG4gICAgICBmb290OiBmb290ID8gZm9vdC5tYXAoKGNlbGwpID0+IHRoaXMuX3BkZlRleHQoY2VsbCkpIDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGhlIGF1dG9UYWJsZSBvcHRpb25zIGV2ZXJ5IGxpc3QgdGFibGUgc2hhcmVzOiB0aGUgZHJ5IHJ1biwgdGhlIG9uLXBhZ2VcbiAgLy8gZHJhdyBhbmQgdGhlIGNvbnRpbnVhdGlvbiBwYWdlcywgc28gdGhlIHRocmVlIGxheSBhIHRhYmxlIG91dCBhbGlrZS4gVGhlXG4gIC8vIGZvbnQgaXMgbmFtZWQgcmF0aGVyIHRoYW4gaW5oZXJpdGVkLCBzaW5jZSB0aGUgZG9jIGNhcnJpZXMgd2hhdGV2ZXIgdGhlXG4gIC8vIGxhc3QgdGV4dCBkcmF3biBsZWZ0IHNldC4gYm90dG9tIGlzIHRoZSBtYXJnaW4gdW5kZXIgdGhlIHRhYmxlLCBwb2ludHMuXG4gIC8vXG4gIC8vIEEgY29sdW1uIG9mIGZvcm1hdHRlZCBudW1iZXJzIGlzIHJpZ2h0LWFsaWduZWQsIGl0cyBoZWFkaW5nIGFuZCB0b3RhbFxuICAvLyB0b286IHRoZSBib2R5IHRocm91Z2ggY29sdW1uU3R5bGVzLCB3aGljaCBhdXRvVGFibGUgYXBwbGllcyB0byBib2R5IGNlbGxzXG4gIC8vIG9ubHksIGFuZCB0aGUgaGVhZGluZyBhbmQgdG90YWwgdGhyb3VnaCB0aGUgZGlkUGFyc2VDZWxsIGhvb2ssIG9uIGV2ZXJ5XG4gIC8vIHBhZ2UgdGhlIGhlYWRpbmcgcmVwZWF0cy4gQSB0b3RhbHMgcm93IChmb290KSBwcmludHMgb25jZSwgdW5kZXIgdGhlXG4gIC8vIHRhYmxlJ3MgbGFzdCByb3csIGJvbGQgb24gdGhlIGJvcmRlciBncmF5LlxuICBwcml2YXRlIF90YWJsZU9wdGlvbnMoXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICBoZWFkOiBQZGZUYWJsZUNlbGxbXVtdLFxuICAgIG51bWVyaWM6IGJvb2xlYW5bXSxcbiAgICBib2R5OiBQZGZUYWJsZUNlbGxbXVtdLFxuICAgIHg6IG51bWJlciwgc3RhcnRZOiBudW1iZXIsIHc6IG51bWJlciwgYm90dG9tOiBudW1iZXIsXG4gICAgY29sdW1uU3R5bGVzPzogUGRmQ29sdW1uU3R5bGVzLFxuICAgIGZvb3Q/OiBzdHJpbmdbXSB8IG51bGwsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIGhlYWQsXG4gICAgICBib2R5LFxuICAgICAgc3RhcnRZLFxuICAgICAgbWFyZ2luOiB7IGxlZnQ6IHgsIHJpZ2h0OiBjb250ZXh0LnBhZ2VXIC0geCAtIHcsIGJvdHRvbSB9LFxuICAgICAgdGFibGVXaWR0aDogdyxcbiAgICAgIHJvd1BhZ2VCcmVhazogJ2F2b2lkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250OiAnaGVsdmV0aWNhJyxcbiAgICAgICAgZm9udFN0eWxlOiAnbm9ybWFsJyxcbiAgICAgICAgZm9udFNpemU6IFRBQkxFX0ZPTlRfU0laRSxcbiAgICAgICAgY2VsbFBhZGRpbmc6IFRBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgdGV4dENvbG9yOiAnIzFmMjkzMycsXG4gICAgICB9LFxuICAgICAgaGVhZFN0eWxlczogeyBmaWxsQ29sb3I6ICcjNGU3OWE3JywgdGV4dENvbG9yOiAnI2ZmZmZmZicsIGZvbnRTdHlsZTogJ2JvbGQnIH0sXG4gICAgICBhbHRlcm5hdGVSb3dTdHlsZXM6IHsgZmlsbENvbG9yOiAnI2Y1ZjdmYScgfSxcbiAgICAgIC4uLihjb2x1bW5TdHlsZXMgPyB7IGNvbHVtblN0eWxlcyB9IDoge30pLFxuICAgICAgLi4uKGZvb3RcbiAgICAgICAgPyB7XG4gICAgICAgICAgZm9vdDogW2Zvb3RdLFxuICAgICAgICAgIHNob3dGb290OiAnbGFzdFBhZ2UnLFxuICAgICAgICAgIGZvb3RTdHlsZXM6IHsgZmlsbENvbG9yOiAnI2U0ZTdlYicsIHRleHRDb2xvcjogJyMxZjI5MzMnLCBmb250U3R5bGU6ICdib2xkJyB9LFxuICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgICAgZGlkUGFyc2VDZWxsOiAoaG9vazogYW55KSA9PiB7XG4gICAgICAgIGlmICgoaG9vay5zZWN0aW9uID09PSAnaGVhZCcgfHwgaG9vay5zZWN0aW9uID09PSAnZm9vdCcpICYmIG51bWVyaWNbaG9vay5jb2x1bW4uaW5kZXhdKSB7XG4gICAgICAgICAgaG9vay5jZWxsLnN0eWxlcy5oYWxpZ24gPSAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBBIG5vdGljZSBhcyBhIHRhYmxlIHJvdzogb25lIGl0YWxpYyBncmV5IGNlbGwgc3Bhbm5pbmcgZXZlcnkgY29sdW1uLiBBXG4gIC8vIHNpbmdsZS1saW5lIG5vdGljZSBpcyBlbGxpcHNpemVkIGF0IHRoZSBib3gncyB3aWR0aCBhbmQga2VlcHMgdGhlIGRhdGFcbiAgLy8gY2VsbHMnIGZvbnQgc2l6ZSBhbmQgcGFkZGluZywgc28gaXQgaXMgbmV2ZXIgdGFsbGVyIHRoYW4gdGhlIGRhdGEgcm93XG4gIC8vIHdob3NlIHBsYWNlIGl0IHRha2VzLlxuICBwcml2YXRlIF9ub3RpY2VSb3codGV4dDogc3RyaW5nLCBzcGFuOiBudW1iZXIsIHNpbmdsZUxpbmU6IGJvb2xlYW4pOiBQZGZUYWJsZUNlbGxbXSB7XG4gICAgcmV0dXJuIFt7XG4gICAgICBjb250ZW50OiB0ZXh0LFxuICAgICAgY29sU3Bhbjogc3BhbixcbiAgICAgIC8vIExlZnQtYWxpZ25lZCB3aGF0ZXZlciB0aGUgZmlyc3QgY29sdW1uIGlzOiBhIHNwYW5uZWQgY2VsbCBvdGhlcndpc2VcbiAgICAgIC8vIHRha2VzIGNvbHVtblN0eWxlc1swXSwgcmlnaHQtYWxpZ25lZCB3aGVuIHRoYXQgY29sdW1uIGlzIG51bWVyaWMuXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgZm9udFN0eWxlOiAnaXRhbGljJyxcbiAgICAgICAgdGV4dENvbG9yOiBNVVRFRF9DT0xPUixcbiAgICAgICAgaGFsaWduOiAnbGVmdCcsXG4gICAgICAgIC4uLihzaW5nbGVMaW5lID8geyBvdmVyZmxvdzogJ2VsbGlwc2l6ZScgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgfV07XG4gIH1cblxuICAvLyBMYXlzIGV2ZXJ5IGZldGNoZWQgcm93IG91dCBvbmNlIG9uIGEgc2NyYXRjaCBkb2N1bWVudCBvZiB0aGUgc2FtZSBwYWdlXG4gIC8vIHNpemUsIHdpdGggdGhlIG9wdGlvbnMgdGhlIHJlYWwgZHJhdyB1c2VzLCBhbmQgcmVhZHMgYmFjayBob3cgbWFueSBib2R5XG4gIC8vIHJvd3MgdGhlIGJveCBob2xkcyAoZml0KSwgdGhlIGNvbHVtbiB3aWR0aHMgYXV0b1RhYmxlIGNob3NlLCB3aXRoIGVhY2hcbiAgLy8gbnVtZXJpYyBjb2x1bW4ncyByaWdodCBhbGlnbm1lbnQgbWVyZ2VkIGluLCBzbyB0aGUgb24tcGFnZSB0YWJsZSBhbmQgaXRzXG4gIC8vIGNvbnRpbnVhdGlvbiBwYWdlcyBjYXJyeSBib3RoLCBhbmQgdGhlIGxlYXN0IHJvb20gYSBwYWdlIG11c3QgZ2l2ZSB0aGVcbiAgLy8gdGFibGUgKG1pbkhlaWdodCkuIFRoZSB0b3RhbHMgcm93IGlzIGxhaWQgb3V0IHRvbywgc28gdGhlIHdpZHRocyBob2xkIGl0LFxuICAvLyBhbmQgYSB0YWJsZSB3aG9zZSByb3dzIGZpdCB0aGUgYm94IGJ1dCB3aG9zZSB0b3RhbHMgcm93IGRvZXMgbm90IG1vdmVzXG4gIC8vIGl0cyBsYXN0IHJvdyBvbi4gZml0IDAgbWVhbnMgbm90IGV2ZW4gb25lIGJvZHkgcm93IGZpdHMgdW5kZXIgdGhlIGhlYWQuXG4gIC8vIFRoZSB0YWJsZSBpcyBsYWlkIG91dCwgbmV2ZXIgZHJhd246IGRyYXduLCBhdXRvVGFibGUgcGFnZXMgaXQsIGFuZCBhIHRhYmxlXG4gIC8vIHdpdGggbm8gcm9vbSBmb3IgYSByb3cgb24gYSBwYWdlIHBhZ2VzIHdpdGhvdXQgZW5kLlxuICBwcml2YXRlIF9tZWFzdXJlKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgaGVhZDogUGRmVGFibGVDZWxsW11bXSxcbiAgICBjZWxsczogUGRmVGFibGVDZWxsW11bXSxcbiAgICBudW1lcmljOiBib29sZWFuW10sXG4gICAgZm9vdDogc3RyaW5nW10gfCBudWxsLFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLFxuICApOiBQZGZUYWJsZU1lYXN1cmUge1xuICAgIGNvbnN0IHNjcmF0Y2ggPSB0aGlzLl9zY3JhdGNoRG9jdW1lbnQoY29udGV4dCk7XG4gICAgY29uc3QgdGFibGUgPSBjb250ZXh0LmNyZWF0ZVRhYmxlKFxuICAgICAgc2NyYXRjaCxcbiAgICAgIHRoaXMuX3RhYmxlT3B0aW9ucyhjb250ZXh0LCBoZWFkLCBudW1lcmljLCBjZWxscywgeCwgeSwgdywgYm90dG9tLCB1bmRlZmluZWQsIGZvb3QpLFxuICAgICk7XG4gICAgY29uc3QgY29sdW1uczogeyB3aWR0aDogbnVtYmVyIH1bXSA9IHRhYmxlLmNvbHVtbnM7XG4gICAgY29uc3QgY29sdW1uU3R5bGVzOiBQZGZDb2x1bW5TdHlsZXMgPSB7fTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgIGNvbHVtblN0eWxlc1tpbmRleF0gPSBudW1lcmljW2luZGV4XVxuICAgICAgICA/IHsgY2VsbFdpZHRoOiBjb2x1bW4ud2lkdGgsIGhhbGlnbjogJ3JpZ2h0JyB9XG4gICAgICAgIDogeyBjZWxsV2lkdGg6IGNvbHVtbi53aWR0aCB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgaGVhZEhlaWdodCA9IHRhYmxlLmdldEhlYWRIZWlnaHQodGFibGUuY29sdW1ucyk7XG4gICAgY29uc3QgZm9vdEhlaWdodCA9IHRhYmxlLmdldEZvb3RIZWlnaHQodGFibGUuY29sdW1ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZml0OiB0aGlzLl9maXR0aW5nUm93cyh0YWJsZSwgeSArIGhlYWRIZWlnaHQsIGNvbnRleHQucGFnZUggLSBib3R0b20sIGZvb3RIZWlnaHQpLFxuICAgICAgY29sdW1uU3R5bGVzLFxuICAgICAgLy8gT25lIGxpbmUgb2YgYSByb3c6IHRoZSBsaW5lIGF1dG9UYWJsZSBtdXN0IHBsYWNlIG9uIGEgcGFnZSBiZWZvcmUgaXRcbiAgICAgIC8vIG1vdmVzIG9uLCBhdCB0aGUgdGFibGUncyBmb250IHNpemUgYW5kIHBhZGRpbmcuXG4gICAgICBtaW5IZWlnaHQ6IGhlYWRIZWlnaHQgKyBmb290SGVpZ2h0ICsgVEFCTEVfRk9OVF9TSVpFICogc2NyYXRjaC5nZXRMaW5lSGVpZ2h0RmFjdG9yKCkgKyAyICogVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgIH07XG4gIH1cblxuICAvLyBIb3cgbWFueSBvZiBhIGxhaWQtb3V0IHRhYmxlJ3MgYm9keSByb3dzIGZpdCB3aG9sZSBiZXR3ZWVuIHRvcCBhbmRcbiAgLy8gYm90dG9tLCBhcyBhdXRvVGFibGUgZGVjaWRlcyBpdDogYSByb3cgZml0cyB3aGVuIGl0cyB0YWxsZXN0IGNlbGwgKG9uZSB0aGF0XG4gIC8vIHNwYW5zIHJvd3MgY291bnRzIGFsbCBvZiB0aGVtKSBlbmRzIGJ5IGJvdHRvbSwgdGhlIGxhc3Qgcm93J3MgYnkgdGhlIHRvcFxuICAvLyBvZiB0aGUgdG90YWxzIHJvdyAoZm9vdEhlaWdodCkgdW5kZXIgaXQsIGFuZCB0aGUgbmV4dCByb3cgc3RhcnRzIHdoZXJlIGl0XG4gIC8vIGVuZHMuXG4gIHByaXZhdGUgX2ZpdHRpbmdSb3dzKHRhYmxlOiBhbnksIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlciwgZm9vdEhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgY3Vyc29yID0gdG9wO1xuICAgIGxldCBmaXQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHJvd10gb2YgdGFibGUuYm9keS5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGxpbWl0ID0gaW5kZXggPT09IHRhYmxlLmJvZHkubGVuZ3RoIC0gMSA/IGJvdHRvbSAtIGZvb3RIZWlnaHQgOiBib3R0b207XG4gICAgICBpZiAoY3Vyc29yICsgcm93LmdldE1heENlbGxIZWlnaHQodGFibGUuY29sdW1ucykgPiBsaW1pdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY3Vyc29yICs9IHJvdy5oZWlnaHQ7XG4gICAgICBmaXQgKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZml0O1xuICB9XG5cbiAgLy8gQSBibGFuayBkb2N1bWVudCBvZiB0aGUgZXhwb3J0J3MgcGFnZSBzaXplLCBmb3IgbGF5aW5nIGEgdGFibGUgb3V0IHRvIHNlZVxuICAvLyB3aGF0IGZpdHMgYmVmb3JlIHRoZSByZWFsIG9uZSBpcyBkcmF3biBvbi5cbiAgcHJpdmF0ZSBfc2NyYXRjaERvY3VtZW50KGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQpOiBhbnkge1xuICAgIHJldHVybiBuZXcgY29udGV4dC5qc1BERih7XG4gICAgICB1bml0OiAncHQnLFxuICAgICAgZm9ybWF0OiBbY29udGV4dC5wYWdlVywgY29udGV4dC5wYWdlSF0sXG4gICAgICBvcmllbnRhdGlvbjogY29udGV4dC5vcmllbnRhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERyYXdzIGFuIG9uLXBhZ2UgdGFibGUgKGEgbGlzdCdzLCBvciBhIHRleHQgYmxvY2sncykgb24gaXRzIHBhZ2UgYWxvbmUuXG4gIC8vIFRoYXQgaXMgYWxsIGl0IHNob3VsZCBuZWVkOiB0aGUgbWVhc3VyZWQgZml0LCB0aGUgaWRlbnRpY2FsIGNvbHVtbiB3aWR0aHNcbiAgLy8gYW5kIGEgc2luZ2xlLWxpbmUgbm90aWNlIGtlZXAgdGhlIHRhYmxlIGluc2lkZSBpdHMgYm94LiBTaG91bGQgYXV0b1RhYmxlXG4gIC8vIHN0YXJ0IGFub3RoZXIgcGFnZSBhbnl3YXksIHRoZSB0YWJsZSBzdG9wcyB0aGVyZSBhbmQgdGhlIHBhZ2UgZ29lcywgc28gYVxuICAvLyBzdHJheSBwYWdlIGNhbiBuZXZlciBjYXRjaCB0aGUgcmVwb3J0IHBhZ2UncyByZW1haW5pbmcgY29tcG9uZW50cywgbm9yIGFcbiAgLy8gdGFibGUgd2l0aCBubyByb29tIGZvciBhIHJvdyBhZGQgcGFnZXMgd2l0aG91dCBlbmQuIFJldHVybnMgd2hldGhlciB0aGVcbiAgLy8gdGFibGUgd2FzIGRyYXduIHdob2xlLlxuICBwcml2YXRlIF9kcmF3VGFibGUoY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCwgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGRvYyB9ID0gY29udGV4dDtcbiAgICBjb25zdCBwYWdlID0gZG9jLmdldEN1cnJlbnRQYWdlSW5mbygpLnBhZ2VOdW1iZXI7XG4gICAgY29uc3QgcGFnZXMgPSBkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpO1xuICAgIGxldCB3aG9sZSA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgY29udGV4dC5hdXRvVGFibGUoZG9jLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEZpcmVzIGFzIHRoZSB0YWJsZSBzdGFydHMgaXRzIG93biBwYWdlLCBhbmQgYWdhaW4gb24gZWFjaCBwYWdlIGl0XG4gICAgICAgIC8vIG1vdmVzIHRvIChhbiBleGlzdGluZyBwYWdlLCBzdWNoIGFzIGEgY29udGludWF0aW9uIHBhZ2UgdW5kZXIgYVxuICAgICAgICAvLyBoZWFkZXIsIGFzIHdlbGwgYXMgYSBuZXcgb25lKS5cbiAgICAgICAgd2lsbERyYXdQYWdlOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKGRvYy5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlTnVtYmVyICE9PSBwYWdlKSB7XG4gICAgICAgICAgICB0aHJvdyBTVFJBWV9QQUdFO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgIT09IFNUUkFZX1BBR0UpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHdob2xlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgd2hpbGUgKGRvYy5nZXROdW1iZXJPZlBhZ2VzKCkgPiBwYWdlcykge1xuICAgICAgZG9jLmRlbGV0ZVBhZ2UoZG9jLmdldE51bWJlck9mUGFnZXMoKSk7XG4gICAgfVxuXG4gICAgZG9jLnNldFBhZ2UocGFnZSk7XG5cbiAgICByZXR1cm4gd2hvbGU7XG4gIH1cblxuICAvLyBUaGUgcm93cyBvZiBvbmUgbGlzdCB0aGF0IGRpZCBub3QgZml0IGl0cyBib3gsIG9uIHBhZ2VzIGFwcGVuZGVkIGFmdGVyXG4gIC8vIHRoZSByZXBvcnQgcGFnZSwgZWFjaCB3aXRoIHRoZSBwYWdlJ3MgaGVhZGVyIGFuZCBmb290ZXIsIHRoZSB0YWJsZSdzXG4gIC8vIHRpdGxlIGFuZCBpdHMgaGVhZCBhZ2FpbiwgdGhlIHRpdGxlJ3MgdG9rZW5zIGZpbGxlZCB3aXRoIHRoZSBwaHlzaWNhbFxuICAvLyBwYWdlIGl0IGlzIGRyYXduIG9uLiBUaGUgdGFibGUgc2l0cyBDT05USU5VQVRJT05fR0FQIGluc2lkZSB0aGUgYmFuZHMuXG4gIC8vIFJldHVybnMgdGhlIHBoeXNpY2FsIHBhZ2UgY291bnRlciBhZnRlciB0aGVzZSBwYWdlcy5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyQ29udGludWF0aW9uKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgcGFnZTogUmVwb3J0UGFnZSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHBhZ2VOdW1iZXI6IG51bWJlcixcbiAgICBvdmVyZmxvdzogUGRmVGFibGVPdmVyZmxvdyxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB7IGRvYyB9ID0gY29udGV4dDtcbiAgICBjb25zdCB7IHRvcCwgYm90dG9tIH0gPSB0aGlzLl9jb250aW51YXRpb25NYXJnaW5zKGNvbnRleHQsIHBhZ2UpO1xuICAgIGNvbnN0IHsgeCwgdyB9ID0gb3ZlcmZsb3c7XG4gICAgY29uc3QgYm9keTogUGRmVGFibGVDZWxsW11bXSA9IG92ZXJmbG93Lm9taXR0ZWQgPiAwXG4gICAgICA/IFsuLi5vdmVyZmxvdy5yb3dzLCB0aGlzLl9ub3RpY2VSb3cobW9yZVJvd3NOb3RpY2Uob3ZlcmZsb3cub21pdHRlZCksIG92ZXJmbG93Lm51bWVyaWMubGVuZ3RoLCBmYWxzZSldXG4gICAgICA6IG92ZXJmbG93LnJvd3M7XG4gICAgLy8gVGhlIGRvY3VtZW50J3MgcGFnZXMgdGhlIHRhYmxlIGRyYXdzIG9uLCBpbiBvcmRlci5cbiAgICBjb25zdCBwYWdlczogbnVtYmVyW10gPSBbXTtcblxuICAgIGRvYy5hZGRQYWdlKFtjb250ZXh0LnBhZ2VXLCBjb250ZXh0LnBhZ2VIXSwgY29udGV4dC5vcmllbnRhdGlvbik7XG4gICAgY29udGV4dC5hdXRvVGFibGUoZG9jLCB7XG4gICAgICAuLi50aGlzLl90YWJsZU9wdGlvbnMoXG4gICAgICAgIGNvbnRleHQsIG92ZXJmbG93LmhlYWQsIG92ZXJmbG93Lm51bWVyaWMsIGJvZHksIHgsIHRvcCArIFRJVExFX0gsIHcsIGJvdHRvbSwgb3ZlcmZsb3cuY29sdW1uU3R5bGVzLFxuICAgICAgICBvdmVyZmxvdy5mb290LFxuICAgICAgKSxcbiAgICAgIG1hcmdpbjogeyB0b3A6IHRvcCArIFRJVExFX0gsIGJvdHRvbSwgbGVmdDogeCwgcmlnaHQ6IGNvbnRleHQucGFnZVcgLSB4IC0gdyB9LFxuICAgICAgc2hvd0hlYWQ6ICdldmVyeVBhZ2UnLFxuICAgICAgLy8gRmlyZXMgb24gZXZlcnkgcGFnZSB0aGUgdGFibGUgZHJhd3Mgb24sIHRoZSBmaXJzdCBpbmNsdWRlZC5cbiAgICAgIHdpbGxEcmF3UGFnZTogKCkgPT4ge1xuICAgICAgICBwYWdlcy5wdXNoKGRvYy5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlTnVtYmVyKTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy5fdG9rZW5zKGNvbnRleHQsIHBhZ2UsIGluZGV4LCBwYWdlTnVtYmVyICsgcGFnZXMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50VGl0bGUoXG4gICAgICAgICAgZG9jLFxuICAgICAgICAgIHRoaXMuX2NvbnRpbnVlZFRpdGxlKG92ZXJmbG93LmNvbXBvbmVudCwgdG9rZW5zLCBvdmVyZmxvdy5zZWFyY2gsIG92ZXJmbG93LmNydW1icywgb3ZlcmZsb3cuZmlsdGVyZWQpLFxuICAgICAgICAgIHgsXG4gICAgICAgICAgdG9wLFxuICAgICAgICAgIHcsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5fcmVuZGVyQ29udGludWF0aW9uTWFzdGVycyhjb250ZXh0LCBwYWdlLCBpbmRleCwgcGFnZU51bWJlciwgcGFnZXMpO1xuXG4gICAgcmV0dXJuIHBhZ2VOdW1iZXIgKyBwYWdlcy5sZW5ndGg7XG4gIH1cblxuICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXIgb2YgZWFjaCBjb250aW51YXRpb24gcGFnZSwgbnVtYmVyZWQgb24gZnJvbVxuICAvLyBwYWdlTnVtYmVyLiBUaGV5IGdvIG9uIG9uY2UgdGhlIHRhYmxlIGlzIGRyYXduLCBzaW5jZSBhIHRleHQgYmxvY2sgd2l0aCBhXG4gIC8vIHRhYmxlIGlzIG1lYXN1cmVkIGJlZm9yZSBpdCBpcyBkcmF3biwgd2hpY2ggYXV0b1RhYmxlJ3MgcGFnZSBob29rIGNhbm5vdFxuICAvLyB3YWl0IGZvcjsgdGhleSBzaXQgaW4gdGhlIGJhbmRzLCBjbGVhciBvZiB0aGUgdGFibGUuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlckNvbnRpbnVhdGlvbk1hc3RlcnMoXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICBwYWdlOiBSZXBvcnRQYWdlLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcGFnZU51bWJlcjogbnVtYmVyLFxuICAgIHBhZ2VzOiBudW1iZXJbXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBkb2MgfSA9IGNvbnRleHQ7XG5cbiAgICBmb3IgKGNvbnN0IFtvZmZzZXQsIGRvY3VtZW50UGFnZV0gb2YgcGFnZXMuZW50cmllcygpKSB7XG4gICAgICBkb2Muc2V0UGFnZShkb2N1bWVudFBhZ2UpO1xuICAgICAgYXdhaXQgdGhpcy5fcmVuZGVyTWFzdGVyKGNvbnRleHQsIHBhZ2UsIHRoaXMuX3Rva2Vucyhjb250ZXh0LCBwYWdlLCBpbmRleCwgcGFnZU51bWJlciArIG9mZnNldCArIDEpKTtcbiAgICB9XG5cbiAgICBkb2Muc2V0UGFnZShkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpKTtcbiAgfVxuXG4gIC8vIFRoZSBtYXJnaW5zIGEgY29udGludWF0aW9uIHRhYmxlIGtlZXBzIGZyb20gdGhlIHRvcCBhbmQgYm90dG9tIG9mIGl0c1xuICAvLyBwYWdlcywgdW5kZXIgaXRzIHRpdGxlJ3Mgc3RyaXAgYXQgdGhlIHRvcC5cbiAgcHJpdmF0ZSBfY29udGludWF0aW9uTWFyZ2lucyhjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LCBwYWdlOiBSZXBvcnRQYWdlKTogeyB0b3A6IG51bWJlcjsgYm90dG9tOiBudW1iZXIgfSB7XG4gICAgY29uc3QgYmFuZHMgPSBwYWdlLm1hc3RlckhpZGRlbiA/IE5PX0JBTkRTIDogY29udGV4dC5yZXBvcnQuY29uZmlnPy5oZWFkZXJGb290ZXIgPz8gTk9fQkFORFM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiB0aGlzLl9jb250aW51YXRpb25NYXJnaW4oYmFuZHMuaGVhZGVySGVpZ2h0KSxcbiAgICAgIGJvdHRvbTogdGhpcy5fY29udGludWF0aW9uTWFyZ2luKGJhbmRzLmZvb3RlckhlaWdodCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSBoZWlnaHQgYSBjb250aW51YXRpb24gcGFnZSBnaXZlcyBpdHMgdGFibGU6IGJldHdlZW4gaXRzIG1hcmdpbnMsIHVuZGVyXG4gIC8vIHRoZSB0aXRsZS5cbiAgcHJpdmF0ZSBfY29udGludWF0aW9uUm9vbShjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LCBwYWdlOiBSZXBvcnRQYWdlKTogbnVtYmVyIHtcbiAgICBjb25zdCB7IHRvcCwgYm90dG9tIH0gPSB0aGlzLl9jb250aW51YXRpb25NYXJnaW5zKGNvbnRleHQsIHBhZ2UpO1xuXG4gICAgcmV0dXJuIGNvbnRleHQucGFnZUggLSB0b3AgLSBUSVRMRV9IIC0gYm90dG9tO1xuICB9XG5cbiAgLy8gVGhlIG1hcmdpbiBhIGNvbnRpbnVhdGlvbiB0YWJsZSBrZWVwcyBmcm9tIG9uZSBlZGdlOiBpbnNpZGUgdGhlIGJhbmQgd2hlblxuICAvLyB0aGUgcGFnZSBoYXMgb25lLlxuICBwcml2YXRlIF9jb250aW51YXRpb25NYXJnaW4oYmFuZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gYmFuZCA/IGJhbmQgKiBQVCArIENPTlRJTlVBVElPTl9HQVAgOiBOT19CQU5EX01BUkdJTjtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbnRpbnVlZFRpdGxlKFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgICBzZWFyY2g/OiBzdHJpbmcsXG4gICAgY3J1bWJzPzogc3RyaW5nW10sXG4gICAgZmlsdGVyZWQ/OiBib29sZWFuLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHRpdGxlID0gZXhwb3J0VGl0bGUoY29tcG9uZW50LCB0b2tlbnMsIHNlYXJjaCwgY3J1bWJzLCBmaWx0ZXJlZCk7XG5cbiAgICByZXR1cm4gdGl0bGUgPyBgJHt0aXRsZX0gKGNvbnRpbnVlZClgIDogJ0NvbnRpbnVlZCc7XG4gIH1cblxuICAvLyBBIEtQSSB0aWxlOiB0aGUgY2FyZCB0aGUgc2NyZWVuIGRyYXdzIChrcGktY2FyZC50cyBkZWNpZGVzIGV2ZXJ5IGxpbmUpLFxuICAvLyBzdGFja2VkIGFuZCBjZW50ZXJlZCBpbiB0aGUgYm9keS4gQSBjYXJkIHdpdGggb25seSBpdHMgdmFsdWUgYW5kIGxhYmVsXG4gIC8vIGtlZXBzIHRoZSB0aWxlJ3MgbG9uZy1zdGFuZGluZyBsYXlvdXQuXG4gIHByaXZhdGUgX3JlbmRlcktwaShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgZG9jIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IGNvbmZpZyA9IGl0ZW0uY29tcG9uZW50LmNvbmZpZyBhcyBLcGlDb25maWc7XG4gICAgY29uc3QgdmlldyA9IGtwaUNhcmRWaWV3KGNvbmZpZywgaXRlbS5kYXRhLCB7IGZvcm1hdDogY29udGV4dC5mb3JtYXRDb250ZXh0LCB0aW1lem9uZTogY29udGV4dC50aW1lem9uZSB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3BkZlRleHQodmlldy52YWx1ZSk7XG4gICAgY29uc3Qgbm90ZXMgPSBleHBvcnROb3RlTGluZXMoaXRlbSwgY29udGV4dC50aW1lem9uZSwgY29udGV4dC5mb3JtYXRDb250ZXh0LmxvY2FsZSk7XG5cbiAgICBpZiAoIWtwaUNhcmRIYXNFeHRyYXModmlldywgbm90ZXMpKSB7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICAgIGRvYy5zZXRGb250U2l6ZSgyNik7XG4gICAgICBkb2Muc2V0VGV4dENvbG9yKCcjMWYyOTMzJyk7XG4gICAgICBkb2MudGV4dCh2YWx1ZSwgeCArIHcgLyAyLCB5ICsgaCAvIDIsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuXG4gICAgICBpZiAodmlldy5sYWJlbCkge1xuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgICBkb2Muc2V0Rm9udFNpemUoOSk7XG4gICAgICAgIGRvYy5zZXRUZXh0Q29sb3IoTVVURURfQ09MT1IpO1xuICAgICAgICBkb2MudGV4dCh2aWV3LmxhYmVsLCB4ICsgdyAvIDIsIHkgKyBoIC8gMiArIDE2LCB7IGFsaWduOiAnY2VudGVyJyB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEEgdGlsZSB0b28gc2hvcnQgZm9yIHRoZSBjYXJkJ3MgbGluZXMgc2hyaW5rcyB0aGVtIGFsbCBhbGlrZS5cbiAgICBjb25zdCBwYXJ0cyA9IGtwaUV4cG9ydFBhcnRzKHZpZXcsIG5vdGVzLCBoLCBLUElfSEVJR0hUUyk7XG4gICAgY29uc3QgaGVpZ2h0cyA9IHNjYWxlZEtwaUhlaWdodHMoS1BJX0hFSUdIVFMsIHBhcnRzLnNjYWxlKTtcbiAgICBsZXQgdG9wID0geSArIE1hdGgubWF4KDAsIChoIC0ga3BpRXhwb3J0SGVpZ2h0KHZpZXcsIHBhcnRzLCBoZWlnaHRzKSkgLyAyKTtcblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSgyNiAqIHBhcnRzLnNjYWxlKTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKCcjMWYyOTMzJyk7XG4gICAgZG9jLnRleHQodmFsdWUsIHggKyB3IC8gMiwgdG9wICsgS1BJX1ZBTFVFX0JBU0VMSU5FICogcGFydHMuc2NhbGUsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xuICAgIHRvcCArPSBoZWlnaHRzLnZhbHVlO1xuXG4gICAgaWYgKHZpZXcubGFiZWwpIHtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoOSAqIHBhcnRzLnNjYWxlKTtcbiAgICAgIGRvYy5zZXRUZXh0Q29sb3IoTVVURURfQ09MT1IpO1xuICAgICAgZG9jLnRleHQodGhpcy5fZml0KGRvYywgdGhpcy5fcGRmVGV4dCh2aWV3LmxhYmVsKSwgdyksIHggKyB3IC8gMiwgdG9wICsgOSAqIHBhcnRzLnNjYWxlLCB7IGFsaWduOiAnY2VudGVyJyB9KTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLmxhYmVsO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5kZWx0YSAmJiB2aWV3LmRlbHRhKSB7XG4gICAgICB0aGlzLl9rcGlEZWx0YShkb2MsIHZpZXcuZGVsdGEsIHgsIHRvcCwgdywgcGFydHMuc2NhbGUpO1xuICAgICAgdG9wICs9IGhlaWdodHMuZGVsdGE7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLndpbmRvdykge1xuICAgICAgdGhpcy5fc21hbGxMaW5lKGRvYywgdGhpcy5fcGRmVGV4dCh2aWV3LndpbmRvdyksIHgsIHRvcCwgdywgJ2NlbnRlcicsICdub3JtYWwnLCBwYXJ0cy5zY2FsZSk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy53aW5kb3c7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnRhcmdldCAmJiB2aWV3LnRhcmdldCkge1xuICAgICAgdGhpcy5fa3BpVGFyZ2V0KGRvYywgdmlldy50YXJnZXQsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy50YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnNwYXJrbGluZSAmJiB2aWV3LnNwYXJrbGluZSkge1xuICAgICAgdGhpcy5fa3BpU3BhcmtsaW5lKGRvYywgdmlldy5zcGFya2xpbmUudmFsdWVzLCB2aWV3LnNwYXJrbGluZS5wYXJ0aWFsLCB4LCB0b3AsIHcpO1xuICAgICAgdG9wICs9IGhlaWdodHMuc3BhcmtsaW5lO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBwYXJ0cy5ub3Rlcykge1xuICAgICAgdGhpcy5fc21hbGxMaW5lKGRvYywgdGhpcy5fcGRmVGV4dChsaW5lKSwgeCwgdG9wLCB3LCAnY2VudGVyJywgJ2l0YWxpYycpO1xuICAgICAgdG9wICs9IGhlaWdodHMubm90ZTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgZGVsdGEgcm93LCBjZW50ZXJlZCBhcyBvbmUgZ3JvdXA6IGEgdHJpYW5nbGUgcG9pbnRpbmcgdGhlIHdheSB0aGVcbiAgLy8gdmFsdWUgbW92ZWQgKG5vbmUgd2hlbiB0aGUgc2hvd24gY2hhbmdlIHJvdW5kcyB0byB6ZXJvKSBhbmQgdGhlIGNoYW5nZSBpblxuICAvLyB0aGUgY29sb3Igb2Ygd2hhdCBpdCBtZWFucywgdGhlbiB3aGF0IGl0IGlzIGNvbXBhcmVkIHdpdGggaW4gZ3JleS5cbiAgcHJpdmF0ZSBfa3BpRGVsdGEoZG9jOiBhbnksIGRlbHRhOiBLcGlDYXJkRGVsdGEsIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlciwgc2NhbGUgPSAxKTogdm9pZCB7XG4gICAgY29uc3QgY29sb3IgPSBgIyR7UkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW2RlbHRhLnRvbmVdfWA7XG4gICAgY29uc3QgY2hhbmdlID0gdGhpcy5fcGRmVGV4dChkZWx0YS50ZXh0KTtcbiAgICBjb25zdCBzaXplID0gS1BJX0RFTFRBX1NJWkUgKiBzY2FsZTtcbiAgICBjb25zdCBzaWRlID0gS1BJX0FSUk9XICogc2NhbGU7XG4gICAgY29uc3QgYXJyb3cgPSBkZWx0YS50cmVuZCA9PT0gUmVwb3J0S3BpVHJlbmQuRmxhdCA/IDAgOiBzaWRlICsgS1BJX0FSUk9XX0dBUCAqIHNjYWxlO1xuXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKHNpemUpO1xuICAgIGNvbnN0IGNoYW5nZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aChjaGFuZ2UpO1xuXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICBjb25zdCBjb21wYXJlZCA9IGRlbHRhLmNvbXBhcmVkXG4gICAgICA/IHRoaXMuX2ZpdChkb2MsIGAgJHt0aGlzLl9wZGZUZXh0KGRlbHRhLmNvbXBhcmVkKX1gLCBNYXRoLm1heCgwLCB3IC0gYXJyb3cgLSBjaGFuZ2VXaWR0aCkpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IHdpZHRoID0gYXJyb3cgKyBjaGFuZ2VXaWR0aCArIChjb21wYXJlZCA/IGRvYy5nZXRUZXh0V2lkdGgoY29tcGFyZWQpIDogMCk7XG4gICAgY29uc3QgYmFzZWxpbmUgPSB0b3AgKyBzaXplO1xuICAgIGxldCBsZWZ0ID0geCArIE1hdGgubWF4KDAsICh3IC0gd2lkdGgpIC8gMik7XG5cbiAgICBpZiAoYXJyb3cpIHtcbiAgICAgIGNvbnN0IHVwID0gZGVsdGEudHJlbmQgPT09IFJlcG9ydEtwaVRyZW5kLlVwO1xuICAgICAgY29uc3QgdGlwID0gdXAgPyBiYXNlbGluZSAtIHNpZGUgOiBiYXNlbGluZTtcbiAgICAgIGNvbnN0IGJhc2UgPSB1cCA/IGJhc2VsaW5lIDogYmFzZWxpbmUgLSBzaWRlO1xuXG4gICAgICBkb2Muc2V0RmlsbENvbG9yKGNvbG9yKTtcbiAgICAgIGRvYy50cmlhbmdsZShsZWZ0LCBiYXNlLCBsZWZ0ICsgc2lkZSwgYmFzZSwgbGVmdCArIHNpZGUgLyAyLCB0aXAsICdGJyk7XG4gICAgICBsZWZ0ICs9IGFycm93O1xuICAgIH1cblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoY29sb3IpO1xuICAgIGRvYy50ZXh0KGNoYW5nZSwgbGVmdCwgYmFzZWxpbmUpO1xuXG4gICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgZG9jLnNldFRleHRDb2xvcihNVVRFRF9DT0xPUik7XG4gICAgICBkb2MudGV4dChjb21wYXJlZCwgbGVmdCArIGNoYW5nZVdpZHRoLCBiYXNlbGluZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHRhcmdldCBsaW5lICgnR29hbDogJDEsMDAwIMK3IDU2JSBvZiB0YXJnZXQnKSBhbmQsIHdoZW4gdGhlIHNlcnZlciBzZW50XG4gIC8vIHRoZSBwcm9ncmVzcywgYSBiYXIgZmlsbGVkIHRoYXQgZmFyOiBncmVlbiBvbmNlIHRoZSB0YXJnZXQgaXMgbWV0LlxuICBwcml2YXRlIF9rcGlUYXJnZXQoZG9jOiBhbnksIHRhcmdldDogS3BpQ2FyZFRhcmdldCwgeDogbnVtYmVyLCB0b3A6IG51bWJlciwgdzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IHRhcmdldC5wcm9ncmVzcyA/IGAke3RhcmdldC50ZXh0fSDCtyAke3RhcmdldC5wcm9ncmVzc31gIDogdGFyZ2V0LnRleHQ7XG5cbiAgICB0aGlzLl9zbWFsbExpbmUoZG9jLCB0aGlzLl9wZGZUZXh0KHRleHQpLCB4LCB0b3AsIHcsICdjZW50ZXInLCAnbm9ybWFsJyk7XG5cbiAgICBpZiAodGFyZ2V0LmZpbGwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXJXID0gTWF0aC5taW4odyAqIDAuNiwgS1BJX0JBUl9XKTtcbiAgICBjb25zdCBiYXJYID0geCArICh3IC0gYmFyVykgLyAyO1xuICAgIGNvbnN0IGJhclkgPSB0b3AgKyBOT1RFX0xJTkVfSCArIDE7XG5cbiAgICBkb2Muc2V0RmlsbENvbG9yKEtQSV9UUkFDS19DT0xPUik7XG4gICAgZG9jLnJlY3QoYmFyWCwgYmFyWSwgYmFyVywgS1BJX0JBUl9ILCAnRicpO1xuXG4gICAgaWYgKHRhcmdldC5maWxsID4gMCkge1xuICAgICAgZG9jLnNldEZpbGxDb2xvcihgIyR7UkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW3RhcmdldC50b25lXX1gKTtcbiAgICAgIGRvYy5yZWN0KGJhclgsIGJhclksIGJhclcgKiB0YXJnZXQuZmlsbCwgS1BJX0JBUl9ILCAnRicpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBzcGFya2xpbmUgaW4gYSBib3ggdW5kZXIgdGhlIGNhcmQncyBsaW5lcywgYXMgdGhlIHNjcmVlbiBkcmF3cyBpdFxuICAvLyAoa3BpU3BhcmtsaW5lR2VvbWV0cnksIGEgMC0xMDAgYm94KTogYSB2ZWN0b3IgbGluZSBwZXIgcnVuIG9mIHZhbHVlcywgYVxuICAvLyBkb3QgZm9yIGEgbG9uZSB2YWx1ZSwgYW5kIHRoZSBsYXN0IHBvaW50J3MgbWFya2VyLCBob2xsb3cgd2hpbGUgaXRzIHBlcmlvZFxuICAvLyBpcyBwYXJ0aWFsLlxuICBwcml2YXRlIF9rcGlTcGFya2xpbmUoXG4gICAgZG9jOiBhbnksXG4gICAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSxcbiAgICBwYXJ0aWFsOiBib29sZWFuLFxuICAgIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBrcGlTcGFya2xpbmVHZW9tZXRyeSh2YWx1ZXMsIHBhcnRpYWwpO1xuICAgIGNvbnN0IGJveFcgPSBNYXRoLm1pbih3ICogMC43LCBLUElfU1BBUktMSU5FX1cpO1xuICAgIGNvbnN0IGJveEggPSBLUElfSEVJR0hUUy5zcGFya2xpbmUgLSAyICogS1BJX1NQQVJLTElORV9JTlNFVDtcbiAgICBjb25zdCBsZWZ0ID0geCArICh3IC0gYm94VykgLyAyO1xuICAgIGNvbnN0IGF0ID0gKHBvaW50OiBLcGlTcGFya2xpbmVQb2ludCkgPT4gKHtcbiAgICAgIHg6IGxlZnQgKyBwb2ludC54ICogYm94VyAvIDEwMCxcbiAgICAgIHk6IHRvcCArIEtQSV9TUEFSS0xJTkVfSU5TRVQgKyBwb2ludC55ICogYm94SCAvIDEwMCxcbiAgICB9KTtcbiAgICBjb25zdCBjb2xvciA9IGAjJHtSRVBPUlRfS1BJX1NQQVJLTElORV9DT0xPUn1gO1xuXG4gICAgZG9jLnNldERyYXdDb2xvcihjb2xvcik7XG4gICAgZG9jLnNldEZpbGxDb2xvcihjb2xvcik7XG4gICAgZG9jLnNldExpbmVXaWR0aCgxKTtcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBnZW9tZXRyeS5saW5lcykge1xuICAgICAgY29uc3QgcG9pbnRzID0gbGluZS5zcGxpdCgnICcpLm1hcCgocGFpcikgPT4ge1xuICAgICAgICBjb25zdCBbcHgsIHB5XSA9IHBhaXIuc3BsaXQoJywnKS5tYXAoTnVtYmVyKTtcblxuICAgICAgICByZXR1cm4gYXQoeyB4OiBweCwgeTogcHkgfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0ZXBzID0gcG9pbnRzLnNsaWNlKDEpLm1hcCgocG9pbnQsIGluZGV4KSA9PiBbcG9pbnQueCAtIHBvaW50c1tpbmRleF0ueCwgcG9pbnQueSAtIHBvaW50c1tpbmRleF0ueV0pO1xuXG4gICAgICBkb2MubGluZXMoc3RlcHMsIHBvaW50c1swXS54LCBwb2ludHNbMF0ueSwgWzEsIDFdLCAnUycsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRvdCBvZiBnZW9tZXRyeS5kb3RzKSB7XG4gICAgICBjb25zdCBwb2ludCA9IGF0KGRvdCk7XG4gICAgICBkb2MuY2lyY2xlKHBvaW50LngsIHBvaW50LnksIEtQSV9ET1RfUiwgJ0YnKTtcbiAgICB9XG5cbiAgICBpZiAoZ2VvbWV0cnkubGFzdCkge1xuICAgICAgY29uc3QgcG9pbnQgPSBhdChnZW9tZXRyeS5sYXN0KTtcblxuICAgICAgaWYgKGdlb21ldHJ5Lmxhc3QuaG9sbG93KSB7XG4gICAgICAgIGRvYy5zZXRGaWxsQ29sb3IoJyNmZmZmZmYnKTtcbiAgICAgICAgZG9jLmNpcmNsZShwb2ludC54LCBwb2ludC55LCBLUElfRE9UX1IsICdGRCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLmNpcmNsZShwb2ludC54LCBwb2ludC55LCBLUElfRE9UX1IsICdGJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQSBmb3JtYXR0ZWQgdmFsdWUgYXMganNQREYgY2FuIGRyYXcgaXQuIEl0cyBzdGFuZGFyZCBmb250cyB3cml0ZSB0ZXh0IGluXG4gIC8vIFdpbkFuc2ksIHdoaWNoIGhhcyB0aGUgbm8tYnJlYWsgc3BhY2UgKFUrMDBBMCwgZnItQ0EncyBkaWdpdCBncm91cGluZykgYnV0XG4gIC8vIG5vdCB0aGUgbmFycm93IG9uZSAoVSsyMDJGLCB3aGljaCBvdGhlciBsb2NhbGVzIGdyb3VwIGFuZCBzcGFjZSB3aXRoKSwgdGhlXG4gIC8vIHRoaW4gYW5kIGhhaXIgc3BhY2VzIChVKzIwMDksIFUrMjAwQSwgd2hpY2ggSW50bCBwdXRzIGFyb3VuZCBhIGRhdGVcbiAgLy8gcmFuZ2UncyBkYXNoOiAnU2VwIDEg4oCTIDMwLCAyMDI2JyksIHRoZSBtaW51cyBzaWduIChVKzIyMTIsIHNvbWUgbG9jYWxlcydcbiAgLy8gbmVnYXRpdmUgc2lnbikgb3IgYSByYW5rIGNoYW5nZSdzIHRyaWFuZ2xlczogZWFjaCB3b3VsZCBwcmludCBhcyBzdHJheVxuICAvLyBnbHlwaHMuIFRoZSBuYXJyb3cgc3BhY2UgYmVjb21lcyBhIG5vLWJyZWFrIHNwYWNlLCBzbyBhIG51bWJlciBzdGlsbCBuZXZlclxuICAvLyB3cmFwcyBhY3Jvc3MgYSBsaW5lOyB0aGUgdGhpbiBhbmQgaGFpciBzcGFjZXMgYSBwbGFpbiBzcGFjZTsgdGhlIG1pbnVzXG4gIC8vIHNpZ24gYSBoeXBoZW47IGFuZCBhIHJhbmsncyByaXNlIGEgcGx1cyBzaWduIGFuZCBpdHMgZmFsbCBhIGh5cGhlblxuICAvLyAoJ+KWsiAyJyByZWFkcyAnKzInKS5cbiAgcHJpdmF0ZSBfcGRmVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0XG4gICAgICAucmVwbGFjZSgvXFx1MjAyRi9nLCAnXFx1MDBBMCcpXG4gICAgICAucmVwbGFjZSgvW1xcdTIwMDlcXHUyMDBBXS9nLCAnICcpXG4gICAgICAucmVwbGFjZSgvXFx1MjIxMi9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXFx1MjVCMlxccz8vZywgJysnKVxuICAgICAgLnJlcGxhY2UoL1xcdTI1QkNcXHM/L2csICctJyk7XG4gIH1cblxuICAvLyBBIGxheWVyJ3MgdmFsdWVzIHdpdGggZWFjaCBudW1iZXIgYXMganNQREYgY2FuIGRyYXcgaXQgKF9wZGZUZXh0KSwgc28gYVxuICAvLyB2YWx1ZSBncm91cGVkIHdpdGggbmFycm93IHNwYWNlcyByZWFkcywgYW5kIHdyYXBzLCBsaWtlIGFueSBvdGhlciBudW1iZXIuXG4gIHByaXZhdGUgX3BkZlZhbHVlcyh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIFRleHRWYWx1ZT4pOiBSZWNvcmQ8c3RyaW5nLCBUZXh0VmFsdWU+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHZhbHVlcykubWFwKChba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLnRleHQgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogeyAuLi52YWx1ZSwgdGV4dDogdGhpcy5fcGRmVGV4dCh2YWx1ZS50ZXh0KSB9LFxuICAgIF0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NsdWcobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKS5yZXBsYWNlKC9eLSt8LSskL2csICcnKSB8fCAncmVwb3J0JztcbiAgfVxufVxuIl19
|
|
1137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBkZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2V4cG9ydC9yZXBvcnQtcGRmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVVsRCxPQUFPLEVBQzJDLFdBQVcsRUFBRSxvQkFBb0IsR0FDbEYsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFDaEgsaUJBQWlCLEVBQ2pCLFVBQVUsR0FDWCxNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQ0wsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEdBQ3RHLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQzRELGtCQUFrQixFQUNqRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFDbEgsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQzNHLGdCQUFn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QVMsRUFBRSxHQUFHLENBQUM7YUFDdkIsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUM7YUFDMUIsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUNwRSxVQUFVLENBQUMsTUFBaUM7UUFDbEQsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JFLEdBQUc7WUFDSCxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtTQUNqRixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxLQUFLLENBQUMsSUFBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDO0lBQzVGLENBQUM7d0dBMXhDVSxnQkFBZ0I7NEdBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBSZXBvcnRLcGlUcmVuZCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1rcGktdHJlbmQuZW51bSc7XG5pbXBvcnQgeyBsYXllckZpbHRlckZpZWxkcyB9IGZyb20gJy4uL2ZpbHRlci10ZXh0JztcbmltcG9ydCB7IHJlc29sdmVSZXBvcnRUaW1lem9uZSB9IGZyb20gJy4uL2Zvcm1hdCc7XG5pbXBvcnQge1xuICBDb21wb25lbnREYXRhLFxuICBLcGlDb25maWcsXG4gIFJlcG9ydCxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBSZXBvcnRIZWFkZXJGb290ZXIsXG4gIFJlcG9ydFBhZ2UsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBLcGlDYXJkRGVsdGEsIEtwaUNhcmRUYXJnZXQsIEtwaVNwYXJrbGluZVBvaW50LCBrcGlDYXJkVmlldywga3BpU3BhcmtsaW5lR2VvbWV0cnksXG59IGZyb20gJy4uL2twaS1jYXJkJztcbmltcG9ydCB7IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkcgfSBmcm9tICcuLi9sYXlvdXQnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9URVhUX0NPTE9SLCBERUZBVUxUX1RFWFRfU0laRSwgVEVYVF9UQUJMRV9CT1JERVJfQ09MT1IsIFRFWFRfVEFCTEVfQk9SREVSX1dJRFRILCBURVhUX1RBQkxFX0NFTExfUEFERElORyxcbiAgVEVYVF9UQUJMRV9NQVJHSU4sIFRleHRGaWx0ZXJGaWVsZCwgVGV4dFBhcmFncmFwaCwgVGV4dFJ1biwgVGV4dFRhYmxlLCBUZXh0VGFibGVDZWxsLCBUZXh0VG9rZW5Db250ZXh0LCBUZXh0VmFsdWUsXG4gIHRleHRCbG9ja3MsXG59IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHtcbiAgUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTLCBSRVBPUlRfS1BJX1NQQVJLTElORV9DT0xPUiwgUkVQT1JUX0tQSV9UUkFDS19DT0xPUiwgUkVQT1JUX01VVEVEX1RFWFRfQ09MT1IsXG59IGZyb20gJy4uL3RoZW1lL3BhbGV0dGUnO1xuaW1wb3J0IHsgaXNEcmF3biB9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgeyByZW5kZXJDaGFydEltYWdlIH0gZnJvbSAnLi9vZmZzY3JlZW4tY2hhcnQnO1xuaW1wb3J0IHtcbiAgQnVpbHRFeHBvcnQsIENvbGxlY3RlZENvbXBvbmVudCwgQ29sbGVjdGVkUGFnZSwgQ29sbGVjdGVkUmVwb3J0LCBIRUFERVJfRk9PVEVSX05BTUUsIEtwaUV4cG9ydEhlaWdodHMsXG4gIFVuZHJhd25Db21wb25lbnQsIGNvdmVyTGluZXMsIGVtcHR5TGFiZWwsIGV4cG9ydENlbGwsIGV4cG9ydE5vdGVMaW5lcywgZXhwb3J0VGl0bGUsIGV4cG9ydFdpbmRvd3NMaW5lLCBpc0VtcHR5VGlsZSxcbiAga3BpQ2FyZEhhc0V4dHJhcywga3BpRXhwb3J0SGVpZ2h0LCBrcGlFeHBvcnRQYXJ0cywgbGlzdENvbHVtbnMsIGxpc3RIZWFkaW5ncywgbGlzdFRvdGFsc1JvdywgbW9yZVJvd3NOb3RpY2UsXG4gIHNjYWxlZEtwaUhlaWdodHMsIHRleHRTbmlwcGV0LFxufSBmcm9tICcuL3JlcG9ydC1leHBvcnQtY29sbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZEV4cG9ydENlbGwsIGdyaWRFeHBvcnRUYWJsZSB9IGZyb20gJy4vcmVwb3J0LWdyaWQtZXhwb3J0JztcbmltcG9ydCB7IFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlLCBUZXh0VGFibGVMYXlvdXQgfSBmcm9tICcuL3JlcG9ydC10ZXh0LWxheW91dC5zZXJ2aWNlJztcblxuXG4vLyBJbmNoZXMg4oaSIHBvaW50cyAodGhlIFBERiB1bml0KS5cbmNvbnN0IFBUID0gNzI7XG5cbi8vIENvbXBvbmVudCB0aXRsZSBzdHJpcCBoZWlnaHQsIHBvaW50cy5cbmNvbnN0IFRJVExFX0ggPSAxODtcblxuLy8gVGhlIHNtYWxsIHByaW50IGEgY29tcG9uZW50IG1heSBjYXJyeSwgcG9pbnRzOiB0aGUgZGF5cyBpdCByZWFkcyB1bmRlciBpdHNcbi8vIHRpdGxlIChhIHN1YnRpdGxlIGxpbmUpLCBpdHMgbm90ZXMgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveCAoYSBsaW5lIGVhY2gpLCBhbmRcbi8vIHRoZSBsaW5lcyBvZiBhIEtQSSBjYXJkIHVuZGVyIGl0cyB2YWx1ZS4gQSBjaGFydCdzIG9yIGEgbGlzdCdzIG5vdGVzIGdpdmVcbi8vIHdheSBiZWZvcmUgaXRzIGJvZHkgd291bGQgc2hyaW5rIHVuZGVyIE1JTl9CT0RZX0guXG5jb25zdCBTTUFMTF9TSVpFID0gNy41O1xuY29uc3QgU1VCVElUTEVfSCA9IDExO1xuY29uc3QgTk9URV9MSU5FX0ggPSAxMDtcbmNvbnN0IE1JTl9CT0RZX0ggPSA0MDtcbmNvbnN0IE1VVEVEX0NPTE9SID0gYCMke1JFUE9SVF9NVVRFRF9URVhUX0NPTE9SfWA7XG5cbi8vIEEgS1BJIGNhcmQncyBwYXJ0cywgdG9wIHRvIGJvdHRvbSwgcG9pbnRzIChrcGlFeHBvcnRQYXJ0cyBzaGVkcyB0aGVcbi8vIHNwYXJrbGluZSwgdGhlbiB0aGUgdGFyZ2V0LCB0aGVuIHRoZSBub3RlcyBvbiBhIHNob3J0IHRpbGUpLiBUaGUgdmFsdWUnc1xuLy8gYmFzZWxpbmUgc2l0cyBLUElfVkFMVUVfQkFTRUxJTkUgdW5kZXIgaXRzIHRvcC5cbmNvbnN0IEtQSV9IRUlHSFRTOiBLcGlFeHBvcnRIZWlnaHRzID0ge1xuICB2YWx1ZTogMzAsXG4gIGxhYmVsOiAxMyxcbiAgZGVsdGE6IDEzLFxuICB3aW5kb3c6IE5PVEVfTElORV9ILFxuICB0YXJnZXQ6IE5PVEVfTElORV9IICsgNixcbiAgc3BhcmtsaW5lOiAyOCxcbiAgbm90ZTogTk9URV9MSU5FX0gsXG59O1xuY29uc3QgS1BJX1ZBTFVFX0JBU0VMSU5FID0gMjM7XG5jb25zdCBLUElfREVMVEFfU0laRSA9IDk7XG4vLyBUaGUgZGVsdGEncyB0cmlhbmdsZTogaXRzIHNpZGUsIGFuZCB0aGUgZ2FwIGJlZm9yZSB0aGUgY2hhbmdlLlxuY29uc3QgS1BJX0FSUk9XID0gNjtcbmNvbnN0IEtQSV9BUlJPV19HQVAgPSAzO1xuLy8gVGhlIHRhcmdldCdzIHByb2dyZXNzIGJhciwgYW5kIHRoZSB0cmFjayBpdCBmaWxscy5cbmNvbnN0IEtQSV9CQVJfVyA9IDEyMDtcbmNvbnN0IEtQSV9CQVJfSCA9IDM7XG5jb25zdCBLUElfVFJBQ0tfQ09MT1IgPSBgIyR7UkVQT1JUX0tQSV9UUkFDS19DT0xPUn1gO1xuLy8gVGhlIHNwYXJrbGluZSdzIHdpZGVzdCBib3gsIGl0cyB0b3AgYW5kIGJvdHRvbSBpbnNldCwgYW5kIGl0cyBkb3RzJyByYWRpdXMuXG5jb25zdCBLUElfU1BBUktMSU5FX1cgPSAxNDA7XG5jb25zdCBLUElfU1BBUktMSU5FX0lOU0VUID0gMztcbmNvbnN0IEtQSV9ET1RfUiA9IDEuNTtcblxuLy8gUm93cyBmZXRjaGVkIGZvciBhIGxpc3QncyBQREYgdGFibGUuIEEgdGFibGUgdGhhdCBvdXRncm93cyBpdHMgYm94XG4vLyBjb250aW51ZXMgb250byBwYWdlcyBvZiBpdHMgb3duLCBzbyB0aGlzIGlzIGhvdyBmYXIgaXQgbWF5IHJ1bjogYWJvdXQgMTItMTVcbi8vIGNvbnRpbnVhdGlvbiBwYWdlcyBvbiBhIGxldHRlciBwYWdlLCBhbmQgYSB0ZW50aCBvZiB0aGUgc2VydmVyJ3MgNTAwMC1yb3dcbi8vIGNlaWxpbmcuIEEgbG9uZ2VyIHJlc3VsdCBlbmRzIGluIGEgbW9yZVJvd3NOb3RpY2UoKSByb3cuXG5leHBvcnQgY29uc3QgUERGX0xJU1RfUk9XUyA9IDUwMDtcblxuLy8gSG93IGZhciBhIGNvbnRpbnVhdGlvbiB0YWJsZSBzaXRzIGluc2lkZSB0aGUgaGVhZGVyIGFuZCBmb290ZXIgYmFuZHMsXG4vLyBwb2ludHMuIEEgcGFnZSB3aXRoIG5vIGJhbmQgKG9yIHdpdGggdGhlIG1hc3RlciBoaWRkZW4pIGtlZXBzXG4vLyBOT19CQU5EX01BUkdJTiBmcm9tIHRoYXQgZWRnZSBpbnN0ZWFkLlxuY29uc3QgQ09OVElOVUFUSU9OX0dBUCA9IDAuMjUgKiBQVDtcbmNvbnN0IE5PX0JBTkRfTUFSR0lOID0gMC41ICogUFQ7XG5jb25zdCBOT19CQU5EUzogUmVwb3J0SGVhZGVyRm9vdGVyID0geyBoZWFkZXJIZWlnaHQ6IDAsIGZvb3RlckhlaWdodDogMCB9O1xuXG4vLyBUaGUgbGFzdCByb3cgb2YgYSBsaXN0IGJveCB3aG9zZSByb3dzIGNhcnJ5IG9uIHBhc3QgaXQuXG5jb25zdCBDT05USU5VRURfTk9USUNFID0gJ0NvbnRpbnVlZCBvbiB0aGUgZm9sbG93aW5nIHBhZ2VzJztcblxuLy8gVGhlIGxhc3Qgcm93IG9mIGEgbGlzdCBib3ggd2hvc2Ugcm93cyBoYXZlIG5vd2hlcmUgdG8gZ286IGl0cyBoZWFkaW5nIGFuZFxuLy8gdG90YWxzIHJvdywgd3JhcHBlZCB0YWxsIGluIG5hcnJvdyBjb2x1bW5zLCBsZWF2ZSBhIGNvbnRpbnVhdGlvbiBwYWdlIG5vXG4vLyByb29tIGZvciBhIHJvdy5cbmNvbnN0IE5PX1JPT01fTk9USUNFID0gJ05vdCBlbm91Z2ggcm9vbSBmb3IgdGhpcyB0YWJsZSDigJQgZW5sYXJnZSB0aGUgdGlsZSc7XG5cbi8vIEEgbGlzdCdzIG9yIGEgdGFibGUgdGlsZSdzIHRhYmxlOiBpdHMgZm9udCBzaXplIGFuZCBjZWxsIHBhZGRpbmcsIHBvaW50cy5cbmNvbnN0IFRBQkxFX0ZPTlRfU0laRSA9IDg7XG5jb25zdCBUQUJMRV9DRUxMX1BBRERJTkcgPSAzO1xuXG4vLyBXaGF0IGEgY29tcG9uZW50J3MgYm94IHNheXMgd2hlbiBpdCBjb3VsZCBub3QgYmUgZHJhd24uXG5jb25zdCBVTkRSQVdOX05PVEUgPSAnQ291bGQgbm90IGJlIGRyYXduJztcblxuLy8gVGhyb3duIGZyb20gYXV0b1RhYmxlJ3MgcGFnZSBob29rIHRvIHN0b3AgYW4gb24tcGFnZSB0YWJsZSBhdCB0aGUgZmlyc3QgcGFnZVxuLy8gaXQgd291bGQgYWRkIChfZHJhd1RhYmxlKS5cbmNvbnN0IFNUUkFZX1BBR0UgPSBuZXcgRXJyb3IoJ1RoZSB0YWJsZSByYW4gcGFzdCBpdHMgcGFnZScpO1xuXG4vLyBBIHRleHQgbGluZSdzIGhlaWdodCBhcyBhIG11bHRpcGxlIG9mIGl0cyBsYXJnZXN0IGZvbnQgc2l6ZSDigJQgdGhlIGNhbnZhc1xuLy8gc3R5bGVzaGVldCdzIGxpbmUtaGVpZ2h0LCBzbyBhIGJsb2NrIHdyYXBzIGFuZCBzdGFja3MgdGhlIHNhbWUgd2F5LlxuY29uc3QgVEVYVF9MSU5FX0hFSUdIVCA9IDEuMjU7XG5cbi8vIEhvdyBmYXIgYSBsaXN0IGl0ZW0ncyB0ZXh0IHNpdHMgZnJvbSB0aGUgYmxvY2sncyBlZGdlLCBwb2ludHM7IHRoZSBtYXJrZXJcbi8vIGhhbmdzIGluIHRoYXQgc3BhY2UuXG5jb25zdCBMSVNUX0lOREVOVCA9IDE2O1xuXG4vLyBXaGF0IGV2ZXJ5IGRyYXdpbmcgc3RlcCBvZiBvbmUgZXhwb3J0IHNoYXJlcywgYnVpbHQgb25jZSBpbiBidWlsZCgpLlxuLy8gU2l6ZXMgYXJlIHBvaW50cy5cbmludGVyZmFjZSBQZGZFeHBvcnRDb250ZXh0IHtcbiAgZG9jOiBhbnk7XG4gIGF1dG9UYWJsZTogYW55O1xuICAvLyBMYXlzIGEgdGFibGUgb3V0IHdpdGhvdXQgZHJhd2luZyBpdCwgZm9yIG1lYXN1cmluZyB3aGF0IGZpdHMuXG4gIGNyZWF0ZVRhYmxlOiBhbnk7XG4gIGpzUERGOiBhbnk7XG4gIHJlcG9ydDogUmVwb3J0O1xuICB0aW1lem9uZTogc3RyaW5nO1xuICBmb3JtYXRDb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0O1xuICBwYWdlVzogbnVtYmVyO1xuICBwYWdlSDogbnVtYmVyO1xuICBvcmllbnRhdGlvbjogJ2xhbmRzY2FwZScgfCAncG9ydHJhaXQnO1xuICAvLyBXaGF0IHRoZSBoZWFkZXIgYW5kIGZvb3RlcidzIHZhbHVlIHRva2VucyBmaWxsIHdpdGgsIHRoZSBzYW1lIG9uIGV2ZXJ5XG4gIC8vIHBhZ2UsIGNvbnRpbnVhdGlvbiBwYWdlcyBpbmNsdWRlZCAoX3BkZlZhbHVlcykuXG4gIG1hc3RlclZhbHVlczogUmVjb3JkPHN0cmluZywgVGV4dFZhbHVlPjtcbiAgLy8gV2hhdCB0aGUge3tmaWx0ZXIuPGlkPn19IHRva2VucyBmaWxsIHdpdGgsIGV2ZXJ5IGdyb3VwJ3MsIHRoZSBzYW1lIG9uXG4gIC8vIGV2ZXJ5IHBhZ2U7IGEgcGFnZSByZWFkcyBpdHMgb3duIChsYXllckZpbHRlckZpZWxkcykuXG4gIGZpbHRlckZpZWxkczogUmVjb3JkPG51bWJlciwgVGV4dEZpbHRlckZpZWxkPjtcbiAgLy8gVGhlIG9uZXMgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHJlYWQ6IG5vIHBhZ2UgZmlsdGVyJ3MuXG4gIG1hc3RlckZpbHRlcnM6IFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD47XG4gIC8vIFRoZSBjb21wb25lbnRzIHRoYXQgY291bGQgbm90IGJlIGRyYXduIChfZ3VhcmRlZCksIGJ5IGNvbXBvbmVudCBpZC5cbiAgdW5kcmF3bjogTWFwPG51bWJlciwgVW5kcmF3bkNvbXBvbmVudD47XG59XG5cbi8vIEEgd29yZCBvZiBhIHdyYXBwZWQgbGluZSAoX3dyYXApOiBpdHMgcnVuLCBpdHMgdGV4dCB3aXRoIGFueSB0cmFpbGluZyBzcGFjZSxcbi8vIGl0cyBmb250IHNpemUgYW5kIGl0cyB3aWR0aCwgcG9pbnRzLlxuaW50ZXJmYWNlIFBkZldvcmQge1xuICBydW46IFRleHRSdW47XG4gIHRleHQ6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xufVxuXG4vLyBXaGVyZSBhIHRleHQgYmxvY2sncyB3b3JkcyBhcmUgZHJhd24sIHBvaW50czogdGhlIGxlZnQgZWRnZSBhbmQgd2lkdGggdGhleVxuLy8gd3JhcCB0bywgdGhlIHRvcCBvZiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBib3R0b20gbm8gbGluZSBtYXkgcnVuIHBhc3QgKGZvclxuLy8gYSBibG9jaywgdGhlIHBhZ2UncykuIEEgdGV4dCB0YWJsZSdzIGNlbGwgZHJhd3MgaXRzIHdvcmRzIHRoZSBzYW1lIHdheSxcbi8vIGluc2lkZSBpdHMgcGFkZGluZy5cbmludGVyZmFjZSBQZGZUZXh0Qm94IHtcbiAgbGVmdDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG59XG5cbi8vIFdoZXJlIHRoZSBuZXh0IHBhcnQgb2YgYSB0ZXh0IGJsb2NrIHN0YXJ0cywgYW5kIHdoZXRoZXIgdGhlIHBhcnQganVzdCBkcmF3blxuLy8gcmFuIG91dCBvZiByb29tIGF0IHRoZSBib3R0b20gb2YgaXRzIGJveC5cbmludGVyZmFjZSBQZGZUZXh0Q3Vyc29yIHtcbiAgY3Vyc29yWTogbnVtYmVyO1xuICBjdXQ6IGJvb2xlYW47XG59XG5cbi8vIEEgdGV4dCB0YWJsZSdzIGNlbGwgYXMgYXV0b1RhYmxlIHRha2VzIGl0LiBJdCBwcmludHMgbm8gdGV4dCBvZiBpdHMgb3duOiB0aGVcbi8vIGNlbGwncyB3b3JkcyAodGV4dENlbGwpIGFyZSBkcmF3biBpbnRvIGl0IG9uY2UgaXRzIGdyaWQgbGluZXMgYW5kIGZpbGwgYXJlXG4vLyAoX2RyYXdUZXh0Q2VsbCkuXG5pbnRlcmZhY2UgUGRmVGV4dENlbGxJbnB1dCB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgY29sU3BhbjogbnVtYmVyO1xuICByb3dTcGFuOiBudW1iZXI7XG4gIHRleHRDZWxsOiBUZXh0VGFibGVDZWxsO1xuICBzdHlsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBGaXhlZCBjb2x1bW4gd2lkdGhzLCBieSBjb2x1bW4gaW5kZXgsIGluIHBvaW50cywgYW5kIHRoZSByaWdodCBhbGlnbm1lbnQgb2Zcbi8vIGEgY29sdW1uIG9mIGZvcm1hdHRlZCBudW1iZXJzLlxudHlwZSBQZGZDb2x1bW5TdHlsZXMgPSBSZWNvcmQ8bnVtYmVyLCB7IGNlbGxXaWR0aDogbnVtYmVyOyBoYWxpZ24/OiAncmlnaHQnIH0+O1xuXG4vLyBXaGF0IF9tZWFzdXJlIHJlYWRzIG9mZiBhIGxpc3QncyBsYWlkLW91dCB0YWJsZTogaG93IG1hbnkgYm9keSByb3dzIGl0cyBib3hcbi8vIGhvbGRzLCB0aGUgY29sdW1uIHdpZHRocyBldmVyeSBwYWdlIG9mIGl0IGlzIGRyYXduIHdpdGgsIGFuZCBob3cgdGFsbCBhXG4vLyBwYWdlJ3MgdGFibGUgc3BhY2UgbXVzdCBiZSBmb3IgYXV0b1RhYmxlIHRvIGRyYXcgYSByb3cgYXQgYWxsOiB0aGUgaGVhZGluZyxcbi8vIHRoZSB0b3RhbHMgcm93IGFuZCBvbmUgbGluZSBvZiBhIHJvdywgcG9pbnRzLlxuaW50ZXJmYWNlIFBkZlRhYmxlTWVhc3VyZSB7XG4gIGZpdDogbnVtYmVyO1xuICBjb2x1bW5TdHlsZXM6IFBkZkNvbHVtblN0eWxlcztcbiAgbWluSGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIEEgdGFibGUgYm9keSBjZWxsOiBwbGFpbiB0ZXh0LCBvciBhIG5vdGljZSByb3cncyBvbmUgY2VsbCBzcGFubmluZyBldmVyeVxuLy8gY29sdW1uLlxudHlwZSBQZGZUYWJsZUNlbGwgPSBzdHJpbmcgfCB7IGNvbnRlbnQ6IHN0cmluZzsgY29sU3Bhbj86IG51bWJlcjsgcm93U3Bhbj86IG51bWJlcjsgc3R5bGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcblxuLy8gSG93IGZhciBhIHRhYmxlJ3MgZ3JvdXAgbGFiZWwgc3RlcHMgaW4gcGVyIGxldmVsLCBwb2ludHMuXG5jb25zdCBHUklEX0lOREVOVCA9IDg7XG5cbi8vIFdoYXQgYSBsaXN0J3Mgb3IgYSB0YWJsZSB0aWxlJ3MgdGFibGUgZHJhd3M6IGl0cyBoZWFkaW5nIHJvd3MsIGl0cyBib2R5XG4vLyByb3dzLCB3aGljaCBjb2x1bW5zIGhvbGQgZm9ybWF0dGVkIG51bWJlcnMsIGl0cyB0b3RhbHMgcm93IGFuZCBob3cgbWFueVxuLy8gcm93cyBpdHMgZmV0Y2ggbGVmdCBvdXQuXG5pbnRlcmZhY2UgUGRmVGFibGVQYXJ0cyB7XG4gIGhlYWQ6IFBkZlRhYmxlQ2VsbFtdW107XG4gIGNlbGxzOiBQZGZUYWJsZUNlbGxbXVtdO1xuICBudW1lcmljOiBib29sZWFuW107XG4gIGZvb3Q6IHN0cmluZ1tdIHwgbnVsbDtcbiAgb21pdHRlZDogbnVtYmVyO1xufVxuXG4vLyBUaGUgcm93cyBvZiBhIGxpc3QgdGhhdCBkaWQgbm90IGZpdCBpdHMgYm94LCBjYXJyaWVkIG9udG8gY29udGludWF0aW9uXG4vLyBwYWdlcyBhZnRlciBpdHMgcmVwb3J0IHBhZ2UuIHggYW5kIHcgYXJlIHRoZSBib3gncywgaW4gcG9pbnRzLCBhbmQgdGhlXG4vLyBjb2x1bW4gd2lkdGhzIGFuZCBhbGlnbm1lbnRzIGFyZSB0aGUgb25lcyB0aGUgb24tcGFnZSB0YWJsZSB3YXMgZHJhd24gd2l0aCxcbi8vIHNvIHRoZSB0YWJsZSByZWFkcyBhcyBvbmUgYWNyb3NzIHBhZ2VzLlxuaW50ZXJmYWNlIFBkZlRhYmxlT3ZlcmZsb3cge1xuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudDtcbiAgLy8gVGhlIHRleHQgdGhlIGxpc3Qgd2FzIHNlYXJjaGVkIGJ5LCBmb3IgdGhlIGNvbnRpbnVhdGlvbiB0aXRsZS5cbiAgc2VhcmNoPzogc3RyaW5nO1xuICAvLyBUaGUgY3J1bWJzIG9mIGl0cyBkcmlsbCBwYXRoLCBmb3IgdGhlIGNvbnRpbnVhdGlvbiB0aXRsZS5cbiAgY3J1bWJzPzogc3RyaW5nW107XG4gIC8vIEEgdGFibGUgd2hvc2UgY29sdW1uIGZpbHRlcnMgbmFycm93ZWQgaXQsIGZvciB0aGUgY29udGludWF0aW9uIHRpdGxlLlxuICBmaWx0ZXJlZD86IGJvb2xlYW47XG4gIC8vIEhlYWRpbmcgcm93cywgdG9wIGZpcnN0OyBhIGxpc3QgaGFzIG9uZS5cbiAgaGVhZDogUGRmVGFibGVDZWxsW11bXTtcbiAgbnVtZXJpYzogYm9vbGVhbltdO1xuICByb3dzOiBQZGZUYWJsZUNlbGxbXVtdO1xuICBvbWl0dGVkOiBudW1iZXI7XG4gIC8vIFRoZSBsaXN0J3MgdG90YWxzIHJvdywgd2hpY2ggY2xvc2VzIHRoZSBsYXN0IGNvbnRpbnVhdGlvbiBwYWdlLlxuICBmb290OiBzdHJpbmdbXSB8IG51bGw7XG4gIHg6IG51bWJlcjtcbiAgdzogbnVtYmVyO1xuICBjb2x1bW5TdHlsZXM6IFBkZkNvbHVtblN0eWxlcztcbn1cblxuLy8gQnVpbGRzIHRoZSBQREYgY2xpZW50LXNpZGUgd2l0aCBqc3BkZi4gVGhlIHJlcG9ydCdzIHVuaXQgaXMgaW5jaGVzIGFuZCBQREZzXG4vLyBhcmUgcG9pbnRzIGF0IGV4YWN0bHkgNzIvaW5jaCwgc28gZWFjaCByZXBvcnQgcGFnZSBiZWNvbWVzIG9uZSBQREYgcGFnZSBvZlxuLy8gdGhlIGV4YWN0IHBoeXNpY2FsIHNpemUgYW5kIGNvbXBvbmVudHMgbGFuZCBhdCB0aGVpciBwcmVjaXNlIHBvc2l0aW9ucy5cbi8vIENoYXJ0cyBhcmUgcmVuZGVyZWQgdGhyb3VnaCBhbiBvZmZzY3JlZW4gRUNoYXJ0cyBpbnN0YW5jZSBhdCAzw5cgcGl4ZWxcbi8vIHJhdGlvIOKAlCBwaXhlbC1pZGVudGljYWwgdG8gdGhlIHNjcmVlbiwgY3Jpc3AgYXQgcHJpbnQgc2l6ZSDigJQgYW5kIHRhYmxlcyBhcmVcbi8vIGRyYXduIHdpdGgganNwZGYtYXV0b3RhYmxlLiBCb3RoIGxpYnJhcmllcyBsb2FkIGxhemlseSBpbnRvIHRoZWlyIG93biBjaHVua3MuXG4vL1xuLy8gQSBsaXN0IHRhYmxlIGlzIGZpdHRlZCB0byBpdHMgYm94IGJ5IGxheWluZyBpdCBvdXQgZmlyc3QsIG5ldmVyIGJ5IGFcbi8vIHJvdy1oZWlnaHQgZXN0aW1hdGUsIHNvIGl0IGNhbm5vdCBzcGlsbCBwYXN0IHRoZSBib3guIFRoZSByb3dzIHRoYXQgZG8gbm90XG4vLyBmaXQgY29udGludWUgb24gcGFnZXMgb2YgdGhlaXIgb3duIGFmdGVyIHRoZSByZXBvcnQgcGFnZSwgdW5kZXIgdGhlIHNhbWVcbi8vIGhlYWRlci9mb290ZXIgYW5kIHdpdGggdGhlIHNhbWUgY29sdW1uIHdpZHRocywgdXAgdG8gUERGX0xJU1RfUk9XUzsgYVxuLy8gbG9uZ2VyIHJlc3VsdCBlbmRzIGluIGEgcm93IHBvaW50aW5nIHRvIHRoZSBjb21wb25lbnQncyBDU1YgZXhwb3J0LiBBXG4vLyB0YWJsZSB3aG9zZSBoZWFkaW5nIGFuZCB0b3RhbHMgcm93IGxlYXZlIGEgY29udGludWF0aW9uIHBhZ2Ugbm8gcm9vbSBmb3IgYVxuLy8gcm93IHN0b3BzIGF0IGl0cyBib3ggd2l0aCBhIG5vdGljZSBpbnN0ZWFkOiBhdXRvVGFibGUgd291bGQgYWRkIHBhZ2VzXG4vLyB3aXRob3V0IGVuZCB0cnlpbmcgdG8gcGxhY2UgaXQuXG4vL1xuLy8gQSBjb21wb25lbnQgdGhhdCBmYWlscyB0byBkcmF3IGlzIG1hcmtlZCBpbiBpdHMgYm94IGFuZCB0aGUgZmlsZSBnb2VzIG9uXG4vLyAoX2d1YXJkZWQpOyBidWlsZCgpIGhhbmRzIGJhY2sgdGhlIG9uZXMgdGhhdCBkaWQuXG4vL1xuLy8gQSB0ZXh0IGJsb2NrJ3MgdGFibGVzIGFyZSBkcmF3biBieSBhdXRvVGFibGUgdG9vLCBmcm9tIHRoZSBsaW5lIGl0cyB3b3Jkc1xuLy8gcmVhY2gsIGluIHRoZSBjb2x1bW4gd2lkdGhzIHRoZSBjYW52YXMgZ2l2ZXMgdGhlbSAoUmVwb3J0VGV4dExheW91dFNlcnZpY2UpLlxuLy8gQSB0ZXh0IGJsb2NrIGlzIG5ldmVyIGN1dCBhdCB0aGUgYm90dG9tIG9mIGl0cyBib3g6IHdoYXQgcnVucyBwYXN0IGl0IGRyYXdzXG4vLyBvbiBiZWxvdywgYXMgb24gdGhlIGNhbnZhcywgZG93biB0byB0aGUgcGFnZSdzIGVkZ2UuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVwb3J0UGRmU2VydmljZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdGV4dExheW91dCA9IGluamVjdChSZXBvcnRUZXh0TGF5b3V0U2VydmljZSk7XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KTogUHJvbWlzZTxCdWlsdEV4cG9ydD4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLl9jb250ZXh0KGNvbGxlY3RlZCk7XG5cbiAgICB0aGlzLl90aXRsZVBhZ2UoY29udGV4dC5kb2MsIGNvbGxlY3RlZCwgY29udGV4dC5wYWdlVywgY29udGV4dC5wYWdlSCk7XG5cbiAgICAvLyBUaGUgcGh5c2ljYWwgcGFnZSBudW1iZXIge3twYWdlLm51bWJlcn19IHByaW50czogcmVwb3J0IHBhZ2VzIGFuZFxuICAgIC8vIHRoZWlyIGNvbnRpbnVhdGlvbiBwYWdlcyBhbGlrZSwgdGhlIHRpdGxlIHBhZ2Ugbm90IGNvdW50ZWQuXG4gICAgbGV0IHBhZ2VOdW1iZXIgPSAwO1xuXG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGNvbGxlY3RlZFBhZ2VdIG9mIGNvbGxlY3RlZC5wYWdlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IG92ZXJmbG93czogUGRmVGFibGVPdmVyZmxvd1tdID0gW107XG4gICAgICBwYWdlTnVtYmVyICs9IDE7XG5cbiAgICAgIGF3YWl0IHRoaXMuX3JlbmRlclBhZ2UoY29udGV4dCwgY29sbGVjdGVkUGFnZSwgaW5kZXgsIHBhZ2VOdW1iZXIsIG92ZXJmbG93cyk7XG5cbiAgICAgIC8vIEVhY2ggY29udGludWF0aW9uIGFwcGVuZHMgaXRzIHBhZ2VzIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LCBzb1xuICAgICAgLy8gdHdvIGxpc3RzIHRoYXQgb3ZlcmZsb3dlZCBvbiBvbmUgcGFnZSBmb2xsb3cgaXQgYmFjayB0byBiYWNrLlxuICAgICAgZm9yIChjb25zdCBvdmVyZmxvdyBvZiBvdmVyZmxvd3MpIHtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdGhpcy5fdG9rZW5zKGNvbnRleHQsIGNvbGxlY3RlZFBhZ2UucGFnZSwgaW5kZXgsIHBhZ2VOdW1iZXIgKyAxKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9ndWFyZGVkKGNvbnRleHQsIG92ZXJmbG93LmNvbXBvbmVudCwgdG9rZW5zLnBhZ2VOYW1lLCB0b2tlbnMsIGZhbHNlLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgcGFnZU51bWJlciA9IGF3YWl0IHRoaXMuX3JlbmRlckNvbnRpbnVhdGlvbihjb250ZXh0LCBjb2xsZWN0ZWRQYWdlLnBhZ2UsIGluZGV4LCBwYWdlTnVtYmVyLCBvdmVyZmxvdyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1bmRyYXduOiBbLi4uY29udGV4dC51bmRyYXduLnZhbHVlcygpXSxcbiAgICAgIHNhdmU6ICgpID0+IHtcbiAgICAgICAgY29udGV4dC5kb2Muc2F2ZShgJHt0aGlzLl9zbHVnKGNvbGxlY3RlZC5yZXBvcnQubmFtZSl9LnBkZmApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY29udGV4dChjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCk6IFByb21pc2U8UGRmRXhwb3J0Q29udGV4dD4ge1xuICAgIGNvbnN0IHJlcG9ydCA9IGNvbGxlY3RlZC5yZXBvcnQ7XG4gICAgY29uc3QgeyBqc1BERiB9ID0gYXdhaXQgaW1wb3J0KCdqc3BkZicpO1xuICAgIGNvbnN0IHsgZGVmYXVsdDogYXV0b1RhYmxlLCBfX2NyZWF0ZVRhYmxlOiBjcmVhdGVUYWJsZSB9ID0gYXdhaXQgaW1wb3J0KCdqc3BkZi1hdXRvdGFibGUnKTtcblxuICAgIGNvbnN0IHBhZ2VXID0gcmVwb3J0LnBhZ2VXaWR0aCAqIFBUO1xuICAgIGNvbnN0IHBhZ2VIID0gcmVwb3J0LnBhZ2VIZWlnaHQgKiBQVDtcbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IHBhZ2VXID49IHBhZ2VIID8gJ2xhbmRzY2FwZScgOiAncG9ydHJhaXQnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvYzogbmV3IGpzUERGKHsgb3JpZW50YXRpb24sIHVuaXQ6ICdwdCcsIGZvcm1hdDogW3BhZ2VXLCBwYWdlSF0gfSksXG4gICAgICBhdXRvVGFibGUsXG4gICAgICBjcmVhdGVUYWJsZSxcbiAgICAgIGpzUERGLFxuICAgICAgcmVwb3J0LFxuICAgICAgdGltZXpvbmU6IHJlc29sdmVSZXBvcnRUaW1lem9uZShyZXBvcnQpLFxuICAgICAgZm9ybWF0Q29udGV4dDogY29sbGVjdGVkLmZvcm1hdENvbnRleHQsXG4gICAgICBwYWdlVyxcbiAgICAgIHBhZ2VILFxuICAgICAgb3JpZW50YXRpb24sXG4gICAgICBtYXN0ZXJWYWx1ZXM6IHRoaXMuX3BkZlZhbHVlcyhjb2xsZWN0ZWQubWFzdGVyVmFsdWVzKSxcbiAgICAgIGZpbHRlckZpZWxkczogY29sbGVjdGVkLmZpbHRlckZpZWxkcyxcbiAgICAgIG1hc3RlckZpbHRlcnM6IGxheWVyRmlsdGVyRmllbGRzKGNvbGxlY3RlZC5maWx0ZXJGaWVsZHMsIHJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10sIG51bGwpLFxuICAgICAgdW5kcmF3bjogbmV3IE1hcCgpLFxuICAgIH07XG4gIH1cblxuICAvLyBPbmUgcmVwb3J0IHBhZ2U6IHRoZSBoZWFkZXIgYW5kIGZvb3RlciBmaXJzdCwgdW5kZXIgdGhlIHBhZ2UncyBvd25cbiAgLy8gY29tcG9uZW50cy4gQSBsaXN0IHRoYXQgb3V0Z3Jvd3MgaXRzIGJveCBsZWF2ZXMgaXRzIHJlbWFpbmluZyByb3dzIGluXG4gIC8vIG92ZXJmbG93cy4gVGhlIHBhZ2UncyB0ZXh0IGZpbGxzIGl0cyB2YWx1ZSB0b2tlbnMgd2l0aCB0aGUgcGFnZSdzIHZhbHVlcy5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyUGFnZShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGNvbGxlY3RlZFBhZ2U6IENvbGxlY3RlZFBhZ2UsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYWdlTnVtYmVyOiBudW1iZXIsXG4gICAgb3ZlcmZsb3dzOiBQZGZUYWJsZU92ZXJmbG93W10sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZG9jIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX3Rva2Vucyhjb250ZXh0LCBjb2xsZWN0ZWRQYWdlLnBhZ2UsIGluZGV4LCBwYWdlTnVtYmVyKTtcbiAgICBjb25zdCBwYWdlVG9rZW5zID0geyAuLi50b2tlbnMsIHZhbHVlczogdGhpcy5fcGRmVmFsdWVzKGNvbGxlY3RlZFBhZ2UudmFsdWVzKSB9O1xuXG4gICAgZG9jLmFkZFBhZ2UoW2NvbnRleHQucGFnZVcsIGNvbnRleHQucGFnZUhdLCBjb250ZXh0Lm9yaWVudGF0aW9uKTtcbiAgICBhd2FpdCB0aGlzLl9yZW5kZXJNYXN0ZXIoY29udGV4dCwgY29sbGVjdGVkUGFnZS5wYWdlLCB0b2tlbnMpO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3RlZFBhZ2UuY29tcG9uZW50cykge1xuICAgICAgYXdhaXQgdGhpcy5fZ3VhcmRlZChjb250ZXh0LCBpdGVtLmNvbXBvbmVudCwgdG9rZW5zLnBhZ2VOYW1lLCBwYWdlVG9rZW5zLCB0cnVlLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmNvbXBvbmVudC50eXBlICE9PSAndGV4dCcpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9yZW5kZXJDb21wb25lbnQoY29udGV4dCwgY29sbGVjdGVkUGFnZS5wYWdlLCBpdGVtLCB0b2tlbnMsIG92ZXJmbG93cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVuZGVyVGV4dChjb250ZXh0LCBpdGVtLmNvbXBvbmVudCwgcGFnZVRva2Vucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIERyYXdzIG9uZSBjb21wb25lbnQsIG9yIG9uZSBsaXN0J3MgY29udGludWF0aW9uIHBhZ2VzLCBzbyB0aGF0IHdoYXRldmVyXG4gIC8vIGdvZXMgd3Jvbmcgc3RheXMgd2l0aCBpdDogYSBkcmF3IHRoYXQgdGhyb3dzIGxvc2VzIHRoZSBwYWdlcyBpdCBhZGRlZCwgaXRzXG4gIC8vIGJveCBvbiB0aGUgcGFnZSAoYm94ZWQpIGlzIGJsYW5rZWQgdW5kZXIgVU5EUkFXTl9OT1RFLCBhbmQgdGhlIGV4cG9ydCdzXG4gIC8vIGdhdGUgbmFtZXMgaXQgdW5kZXIgcGFnZS4gT25lIGNvbXBvbmVudCBjYW4gdGhlbiBuZXZlciBzdG9wIHRoZSBmaWxlLlxuICBwcml2YXRlIGFzeW5jIF9ndWFyZGVkKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgcGFnZTogc3RyaW5nLFxuICAgIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgICBib3hlZDogYm9vbGVhbixcbiAgICBkcmF3OiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGRvYyB9ID0gY29udGV4dDtcbiAgICBjb25zdCBjdXJyZW50ID0gZG9jLmdldEN1cnJlbnRQYWdlSW5mbygpLnBhZ2VOdW1iZXI7XG4gICAgY29uc3QgcGFnZXMgPSBkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRyYXcoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhlIGZpbGUgb25seSBzYXlzIHRoZSBib3ggY291bGQgbm90IGJlIGRyYXduOyB0aGUgY29uc29sZSBrZWVwcyB3aHkuXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICAgICAgd2hpbGUgKGRvYy5nZXROdW1iZXJPZlBhZ2VzKCkgPiBwYWdlcykge1xuICAgICAgICBkb2MuZGVsZXRlUGFnZShkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpKTtcbiAgICAgIH1cblxuICAgICAgZG9jLnNldFBhZ2UoY3VycmVudCk7XG5cbiAgICAgIGlmIChib3hlZCkge1xuICAgICAgICB0aGlzLl91bmRyYXduQm94KGRvYywgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjb250ZXh0LnVuZHJhd24uaGFzKGNvbXBvbmVudC5pZCkpIHtcbiAgICAgICAgY29udGV4dC51bmRyYXduLnNldChjb21wb25lbnQuaWQsIHtcbiAgICAgICAgICBjb21wb25lbnRJZDogY29tcG9uZW50LmlkLFxuICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgbmFtZTogY29tcG9uZW50LnR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgICAgPyB0ZXh0U25pcHBldChjb21wb25lbnQsIHRva2VucylcbiAgICAgICAgICAgIDogZXhwb3J0VGl0bGUoY29tcG9uZW50LCB0b2tlbnMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBIGNvbXBvbmVudCdzIGJveCBibGFua2VkIHVuZGVyIFVORFJBV05fTk9URSwgb3ZlciB3aGF0ZXZlciBvZiBpdCB3YXNcbiAgLy8gZHJhd24gYmVmb3JlIGl0IGZhaWxlZC5cbiAgcHJpdmF0ZSBfdW5kcmF3bkJveChkb2M6IGFueSwgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQpOiB2b2lkIHtcbiAgICBjb25zdCB4ID0gY29tcG9uZW50LnggKiBQVDtcbiAgICBjb25zdCB5ID0gY29tcG9uZW50LnkgKiBQVDtcbiAgICBjb25zdCB3ID0gY29tcG9uZW50LncgKiBQVDtcbiAgICBjb25zdCBoID0gY29tcG9uZW50LmggKiBQVDtcblxuICAgIGRvYy5zZXRGaWxsQ29sb3IoJyNmZmZmZmYnKTtcbiAgICBkb2MucmVjdCh4LCB5LCB3LCBoLCAnRicpO1xuICAgIHRoaXMuX2JveE5vdGUoZG9jLCBVTkRSQVdOX05PVEUsIHgsIHksIHcsIGgpO1xuICB9XG5cbiAgLy8gVGhlIGhlYWRlciBhbmQgZm9vdGVyLCB0aGVpciB2YWx1ZSB0b2tlbnMgZmlsbGVkIHdpdGggdGhlIG1hc3RlcidzIHZhbHVlc1xuICAvLyB3aGljaGV2ZXIgcGFnZSB0aGV5IHNpdCBvbjogYSByZXBvcnQgcGFnZSBvciBhIGNvbnRpbnVhdGlvbiBwYWdlLiBUaGV5XG4gIC8vIHJlYWQgbm8gcGFnZSBmaWx0ZXI6IGl0cyB0b2tlbiBwcmludHMgdGhlIGVtIGRhc2ggdGhlcmUuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlck1hc3Rlcihjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LCBwYWdlOiBSZXBvcnRQYWdlLCB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocGFnZS5tYXN0ZXJIaWRkZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXN0ZXJUb2tlbnMgPSB7IC4uLnRva2VucywgdmFsdWVzOiBjb250ZXh0Lm1hc3RlclZhbHVlcywgZmlsdGVyczogY29udGV4dC5tYXN0ZXJGaWx0ZXJzIH07XG5cbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiAoY29udGV4dC5yZXBvcnQubWFzdGVyPy5jb21wb25lbnRzID8/IFtdKS5maWx0ZXIoaXNEcmF3bikpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2d1YXJkZWQoY29udGV4dCwgY29tcG9uZW50LCBIRUFERVJfRk9PVEVSX05BTUUsIG1hc3RlclRva2VucywgdHJ1ZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9yZW5kZXJUZXh0KGNvbnRleHQsIGNvbXBvbmVudCwgbWFzdGVyVG9rZW5zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RpdGxlUGFnZShkb2M6IGFueSwgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsIHBhZ2VXOiBudW1iZXIsIHBhZ2VIOiBudW1iZXIpOiB2b2lkIHtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMjgpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoJyMxZjI5MzMnKTtcbiAgICBkb2MudGV4dChjb2xsZWN0ZWQucmVwb3J0Lm5hbWUsIDQwLCBwYWdlSCAqIDAuMzUpO1xuXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTEpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoJyM1MjYwNmQnKTtcblxuICAgIGRvYy50ZXh0KGNvdmVyTGluZXMoY29sbGVjdGVkKS5tYXAoKGxpbmUpID0+IHRoaXMuX3BkZlRleHQobGluZSkpLCA0MCwgcGFnZUggKiAwLjM1ICsgMjYpO1xuICB9XG5cbiAgLy8gQSB0ZXh0IGJsb2NrLCBsYWlkIG91dCBieSBoYW5kOiBqc1BERiBkcmF3cyBzdHJpbmdzLCBub3QgcmljaCB0ZXh0LCBzbyB0aGVcbiAgLy8gd29yZHMgYmV0d2VlbiBpdHMgdGFibGVzIGFyZSBkcmF3biBsaW5lIGJ5IGxpbmUgKF9kcmF3UGFyYWdyYXBocykgYW5kIGVhY2hcbiAgLy8gdGFibGUgYnkgYXV0b1RhYmxlIGZyb20gdGhlIGxpbmUgdGhlIHdvcmRzIGFib3ZlIGl0IHJlYWNoXG4gIC8vIChfZHJhd1RleHRUYWJsZSkuIE9ubHkgYSBibG9jayB3aXRoIGEgdGFibGUgaXMgbWVhc3VyZWQsIGZvciB0aGUgZWRnZXNcbiAgLy8gYW5kIGNvbHVtbiB3aWR0aHMgdGhlIGNhbnZhcyBnaXZlcyBpdHMgdGFibGVzLiBXb3JkcyBhbmQgdGFibGUgcm93cyB0aGF0XG4gIC8vIHJ1biBwYXN0IHRoZSBibG9jaydzIGhlaWdodCBkcmF3IG9uIGJlbG93IGl0LCBhcyBvbiB0aGUgY2FudmFzOyBvbmx5IHRoZVxuICAvLyBwYWdlJ3MgZWRnZSBzdG9wcyB0aGVtLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJUZXh0KFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBib3ggPSB0aGlzLl90ZXh0Qm94KGNvbXBvbmVudCwgY29udGV4dC5wYWdlSCk7XG4gICAgY29uc3QgYmxvY2tzID0gdGV4dEJsb2Nrcyhjb21wb25lbnQuY29uZmlnPy5odG1sID8/ICcnLCB0b2tlbnMpO1xuICAgIGNvbnN0IGxheW91dCA9IGJsb2Nrcy5zb21lKChibG9jaykgPT4gYmxvY2sua2luZCA9PT0gJ3RhYmxlJylcbiAgICAgID8gYXdhaXQgdGhpcy5fdGV4dExheW91dC5tZWFzdXJlKGNvbXBvbmVudCwgdG9rZW5zKVxuICAgICAgOiBudWxsO1xuICAgIGxldCBjdXJzb3JZID0gYm94LnRvcDtcbiAgICBsZXQgdGFibGVJbmRleCA9IDA7XG4gICAgLy8gVGhlIGN1cnNvciBzaXRzIG9uIGEgdGFibGUncyBib3R0b20gbWFyZ2luLCBub3RoaW5nIGRyYXduIHNpbmNlOiB0aGVcbiAgICAvLyBuZXh0IHRhYmxlJ3MgdG9wIG1hcmdpbiBpcyB0aGUgc2FtZSBzcGFjZSwgYXMgdHdvIGJsb2NrIG1hcmdpbnMgdGhhdFxuICAgIC8vIG1lZXQgY29sbGFwc2UgaW50byBvbmUgb24gdGhlIGNhbnZhcy5cbiAgICBsZXQgb25NYXJnaW4gPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzKSB7XG4gICAgICBjb25zdCBkcmF3biA9IGJsb2NrLmtpbmQgPT09ICd0ZXh0J1xuICAgICAgICA/IHRoaXMuX2RyYXdQYXJhZ3JhcGhzKGNvbnRleHQuZG9jLCBibG9jay5wYXJhZ3JhcGhzLCBib3gsIGN1cnNvclkpXG4gICAgICAgIDogdGhpcy5fZHJhd1RleHRUYWJsZShcbiAgICAgICAgICBjb250ZXh0LCBibG9jay50YWJsZSwgbGF5b3V0Py50YWJsZXNbdGFibGVJbmRleCsrXSA/PyBudWxsLCBib3gsXG4gICAgICAgICAgb25NYXJnaW4gPyBjdXJzb3JZIDogY3Vyc29yWSArIFRFWFRfVEFCTEVfTUFSR0lOLFxuICAgICAgICApO1xuXG4gICAgICBpZiAoZHJhd24uY3V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY3Vyc29yWSA9IGRyYXduLmN1cnNvclk7XG4gICAgICBvbk1hcmdpbiA9IGJsb2NrLmtpbmQgPT09ICd0YWJsZScgfHwgKG9uTWFyZ2luICYmICFibG9jay5wYXJhZ3JhcGhzLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2hlcmUgYSB0ZXh0IGJsb2NrJ3Mgd29yZHMgZ286IGluc2lkZSBpdHMgcGFkZGluZywgZWFjaCBlZGdlIDEvOFwiIHVubGVzc1xuICAvLyBzZXQsIGRvd24gdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSAocGFnZUgpLlxuICBwcml2YXRlIF90ZXh0Qm94KGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBwYWdlSDogbnVtYmVyKTogUGRmVGV4dEJveCB7XG4gICAgY29uc3QgcGFkZGluZyA9IGNvbXBvbmVudC5jb25maWc/LnBhZGRpbmc7XG4gICAgY29uc3QgaW5zZXQgPSAodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gKHZhbHVlID8/IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkcpICogUFQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogY29tcG9uZW50LnggKiBQVCArIGluc2V0KHBhZGRpbmc/LmxlZnQpLFxuICAgICAgdG9wOiBjb21wb25lbnQueSAqIFBUICsgaW5zZXQocGFkZGluZz8udG9wKSxcbiAgICAgIHdpZHRoOiBjb21wb25lbnQudyAqIFBUIC0gaW5zZXQocGFkZGluZz8ubGVmdCkgLSBpbnNldChwYWRkaW5nPy5yaWdodCksXG4gICAgICBib3R0b206IHBhZ2VILFxuICAgIH07XG4gIH1cblxuICAvLyBQYXJhZ3JhcGhzIGRyYXduIGxpbmUgYnkgbGluZSBmcm9tIGN1cnNvclkgZG93bjogZWFjaCBvbmUncyBydW5zIGFyZSBicm9rZW5cbiAgLy8gaW50byB3b3Jkcywgd3JhcHBlZCB0byB0aGUgYm94J3Mgd2lkdGggYW5kIGRyYXduIHdvcmQgYnkgd29yZCBpbiB0aGVpciBvd25cbiAgLy8gZm9udCwgc2l6ZSBhbmQgY29sb3IsIGEgbGlzdCBpdGVtJ3MgbWFya2VyIGh1bmcgaW4gaXRzIGluZGVudC4gVGhlIGZpcnN0XG4gIC8vIGxpbmUgdGhhdCB3b3VsZCBydW4gcGFzdCB0aGUgYm94J3MgYm90dG9tIGVuZHMgdGhlIGRyYXdpbmcsIGN1dC5cbiAgcHJpdmF0ZSBfZHJhd1BhcmFncmFwaHMoZG9jOiBhbnksIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSwgYm94OiBQZGZUZXh0Qm94LCBjdXJzb3JZOiBudW1iZXIpOiBQZGZUZXh0Q3Vyc29yIHtcbiAgICBsZXQgeSA9IGN1cnNvclk7XG4gICAgbGV0IGxpc3ROdW1iZXIgPSAwO1xuXG4gICAgZm9yIChjb25zdCBwYXJhZ3JhcGggb2YgcGFyYWdyYXBocykge1xuICAgICAgbGlzdE51bWJlciA9IHBhcmFncmFwaC5idWxsZXQgPT09ICdudW1iZXInID8gbGlzdE51bWJlciArIDEgOiAwO1xuICAgICAgY29uc3QgaW5kZW50ID0gcGFyYWdyYXBoLmJ1bGxldCA/IExJU1RfSU5ERU5UIDogMDtcbiAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5fd3JhcChkb2MsIHBhcmFncmFwaCwgYm94LndpZHRoIC0gaW5kZW50KTtcblxuICAgICAgZm9yIChjb25zdCBbbGluZUluZGV4LCBsaW5lXSBvZiBsaW5lcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuX2xpbmVTaXplKHBhcmFncmFwaCwgbGluZSk7XG4gICAgICAgIGlmICh5ICsgc2l6ZSAqIFRFWFRfTElORV9IRUlHSFQgPiBib3guYm90dG9tICsgMC41KSB7XG4gICAgICAgICAgcmV0dXJuIHsgY3Vyc29yWTogeSwgY3V0OiB0cnVlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZUluZGV4ID09PSAwICYmIHBhcmFncmFwaC5idWxsZXQpIHtcbiAgICAgICAgICB0aGlzLl9mb250KGRvYywgbGluZVswXT8ucnVuID8/IHsgdGV4dDogJycgfSwgc2l6ZSk7XG4gICAgICAgICAgZG9jLnRleHQocGFyYWdyYXBoLmJ1bGxldCA9PT0gJ251bWJlcicgPyBgJHtsaXN0TnVtYmVyfS5gIDogJ+KAoicsIGJveC5sZWZ0LCB5ICsgc2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kcmF3TGluZShkb2MsIGxpbmUsIHBhcmFncmFwaC5hbGlnbiwgYm94LmxlZnQgKyBpbmRlbnQsIGJveC53aWR0aCAtIGluZGVudCwgeSArIHNpemUpO1xuICAgICAgICB5ICs9IHNpemUgKiBURVhUX0xJTkVfSEVJR0hUO1xuICAgICAgfVxuXG4gICAgICAvLyBBbiBlbXB0eSBwYXJhZ3JhcGggaXMgc3RpbGwgYSBsaW5lLlxuICAgICAgaWYgKCFsaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgeSArPSBERUZBVUxUX1RFWFRfU0laRSAqIFRFWFRfTElORV9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY3Vyc29yWTogeSwgY3V0OiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gSG93IGZhciBfZHJhd1BhcmFncmFwaHMgdGFrZXMgaXRzIGN1cnNvciBkb3duIGRyYXdpbmcgdGhlIHBhcmFncmFwaHMgd2hvbGVcbiAgLy8gYXQgYSB3aWR0aC5cbiAgcHJpdmF0ZSBfcGFyYWdyYXBoc0hlaWdodChkb2M6IGFueSwgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdLCB3aWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyYWdyYXBocy5yZWR1Y2UoKGhlaWdodCwgcGFyYWdyYXBoKSA9PiB7XG4gICAgICBjb25zdCBsaW5lcyA9IHRoaXMuX3dyYXAoZG9jLCBwYXJhZ3JhcGgsIHdpZHRoIC0gKHBhcmFncmFwaC5idWxsZXQgPyBMSVNUX0lOREVOVCA6IDApKTtcblxuICAgICAgcmV0dXJuIGhlaWdodCArIChsaW5lcy5sZW5ndGhcbiAgICAgICAgPyBsaW5lcy5yZWR1Y2UoKHN1bSwgbGluZSkgPT4gc3VtICsgdGhpcy5fbGluZVNpemUocGFyYWdyYXBoLCBsaW5lKSAqIFRFWFRfTElORV9IRUlHSFQsIDApXG4gICAgICAgIDogREVGQVVMVF9URVhUX1NJWkUgKiBURVhUX0xJTkVfSEVJR0hUKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIEEgbGluZSdzIGZvbnQgc2l6ZTogaXRzIGxhcmdlc3Qgd29yZCdzLCBhbmQgbmV2ZXIgdW5kZXIgaXRzIHBhcmFncmFwaCdzXG4gIC8vIGZpcnN0IHJ1bidzLlxuICBwcml2YXRlIF9saW5lU2l6ZShwYXJhZ3JhcGg6IFRleHRQYXJhZ3JhcGgsIGxpbmU6IFBkZldvcmRbXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLmxpbmUubWFwKCh3b3JkKSA9PiB3b3JkLnNpemUpLCBwYXJhZ3JhcGgucnVuc1swXT8uZm9udFNpemUgPz8gREVGQVVMVF9URVhUX1NJWkUpO1xuICB9XG5cbiAgLy8gT25lIHdyYXBwZWQgbGluZSBvbiBpdHMgYmFzZWxpbmUsIGFsaWduZWQgd2l0aGluIHRoZSB3aWR0aCBmcm9tIGxlZnQuXG4gIHByaXZhdGUgX2RyYXdMaW5lKFxuICAgIGRvYzogYW55LFxuICAgIGxpbmU6IFBkZldvcmRbXSxcbiAgICBhbGlnbjogVGV4dFBhcmFncmFwaFsnYWxpZ24nXSxcbiAgICBsZWZ0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGJhc2VsaW5lOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGxpbmVXaWR0aCA9IGxpbmUucmVkdWNlKChzdW0sIHdvcmQpID0+IHN1bSArIHdvcmQud2lkdGgsIDApO1xuICAgIGxldCB4ID0gbGVmdCArIHRoaXMuX2FsaWduT2Zmc2V0KGFsaWduLCB3aWR0aCwgbGluZVdpZHRoKTtcblxuICAgIGZvciAoY29uc3Qgd29yZCBvZiBsaW5lKSB7XG4gICAgICB0aGlzLl9kcmF3V29yZChkb2MsIHdvcmQsIHgsIGJhc2VsaW5lKTtcbiAgICAgIHggKz0gd29yZC53aWR0aDtcbiAgICB9XG4gIH1cblxuICAvLyBBIHRhYmxlIGluIGEgdGV4dCBibG9jaywgZHJhd24gYnkgYXV0b1RhYmxlIGZyb20gdG9wIChfcmVuZGVyVGV4dCBwdXRzIGl0XG4gIC8vIFRFWFRfVEFCTEVfTUFSR0lOIHVuZGVyIHRoZSBsaW5lIHRoZSB3b3JkcyBhYm92ZSBpdCByZWFjaCksIGluIHRoZSBvbmVcbiAgLy8gbG9vayBldmVyeSByZW5kZXJlciBkcmF3cyAoVEVYVF9UQUJMRV8qIGluIHRleHQudHMpLiBJdHMgbGVmdCBlZGdlLCB3aWR0aFxuICAvLyBhbmQgY29sdW1uIHdpZHRocyBhcmUgdGhlIGNhbnZhcydzIChsYXlvdXQpLCBlbHNlIHRoZSBib3gncyB3aWR0aCBzcGxpdFxuICAvLyBldmVubHkuIEEgcm93IGlzIGFzIHRhbGwgYXMgaXRzIGNlbGxzJyB3b3JkcyB3cmFwcGVkIGFzIF9kcmF3UGFyYWdyYXBoc1xuICAvLyB3cmFwcyB0aGVtLCBhbmQgdGhlIHdvcmRzIGFyZSBkcmF3biBpbnRvIGVhY2ggY2VsbCBvbmNlIGF1dG9UYWJsZSBoYXNcbiAgLy8gZHJhd24gaXRzIGdyaWQgbGluZXMgYW5kIGZpbGwgKF9kcmF3VGV4dENlbGwpLCBzbyB0aGV5IGtlZXAgdGhlaXIgcnVucydcbiAgLy8gZm9udHMgYW5kIGNvbG9ycy4gT25seSB0aGUgcm93cyB0aGF0IGZpdCBhYm92ZSB0aGUgYm94J3MgYm90dG9tLCB0aGVcbiAgLy8gcGFnZSdzIGVkZ2UsIGFyZSBkcmF3biwgYW5kIGEgdGFibGUgdGhhdCBsb3NlcyBhbnksIG9yIHJ1bnMgcGFzdCBpdHMgcGFnZVxuICAvLyBhbnl3YXksIGlzIGN1dC4gVGhlIGN1cnNvciBpdCBsZWF2ZXMgaXMgVEVYVF9UQUJMRV9NQVJHSU4gdW5kZXIgaXQuXG4gIHByaXZhdGUgX2RyYXdUZXh0VGFibGUoXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICB0YWJsZTogVGV4dFRhYmxlLFxuICAgIGxheW91dDogVGV4dFRhYmxlTGF5b3V0IHwgbnVsbCxcbiAgICBib3g6IFBkZlRleHRCb3gsXG4gICAgdG9wOiBudW1iZXIsXG4gICk6IFBkZlRleHRDdXJzb3Ige1xuICAgIGlmICh0b3AgPj0gYm94LmJvdHRvbSkge1xuICAgICAgcmV0dXJuIHsgY3Vyc29yWTogdG9wLCBjdXQ6IHRydWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCBsZWZ0ID0gYm94LmxlZnQgKyAobGF5b3V0Py5sZWZ0ID8/IDApICogUFQ7XG4gICAgY29uc3Qgd2lkdGggPSBsYXlvdXQgPyBsYXlvdXQud2lkdGggKiBQVCA6IGJveC53aWR0aDtcbiAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSBsYXlvdXQ/LmNvbHVtbldpZHRocy5sZW5ndGggPT09IHRhYmxlLmNvbHVtbnNcbiAgICAgID8gbGF5b3V0LmNvbHVtbldpZHRocy5tYXAoKGNvbHVtbldpZHRoKSA9PiBjb2x1bW5XaWR0aCAqIFBUKVxuICAgICAgOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0YWJsZS5jb2x1bW5zIH0sICgpID0+IHdpZHRoIC8gdGFibGUuY29sdW1ucyk7XG4gICAgY29uc3QgYm9keSA9IHRhYmxlLnJvd3MubWFwKChyb3cpID0+IHJvdy5jZWxscy5tYXAoKGNlbGwpID0+IHRoaXMuX3RleHRDZWxsSW5wdXQoY29udGV4dC5kb2MsIGNlbGwsIGNvbHVtbldpZHRocykpKTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fdGV4dFRhYmxlT3B0aW9ucyhjb250ZXh0LCBjb2x1bW5XaWR0aHMsIGxlZnQsIHRvcCwgd2lkdGgsIGJveC5ib3R0b20pO1xuICAgIGNvbnN0IGZpdCA9IHRoaXMuX3RleHRUYWJsZUZpdChjb250ZXh0LCB7IC4uLm9wdGlvbnMsIGJvZHkgfSwgdG9wLCBib3guYm90dG9tKTtcbiAgICBjb25zdCB3aG9sZSA9ICFmaXQgfHwgdGhpcy5fZHJhd1RhYmxlKGNvbnRleHQsIHsgLi4ub3B0aW9ucywgYm9keTogdGhpcy5fa2VwdFJvd3MoYm9keSwgZml0KSB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBjdXJzb3JZOiBmaXQgJiYgd2hvbGUgPyBjb250ZXh0LmRvYy5sYXN0QXV0b1RhYmxlLmZpbmFsWSArIFRFWFRfVEFCTEVfTUFSR0lOIDogdG9wLFxuICAgICAgY3V0OiAhd2hvbGUgfHwgZml0IDwgdGFibGUucm93cy5sZW5ndGgsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgdGV4dCB0YWJsZSdzIGNlbGwgYXMgYXV0b1RhYmxlIHRha2VzIGl0OiBpdHMgc3BhbnMgYW5kIGZpbGwgYW5kLCB3aGVuIGl0XG4gIC8vIGlzIG9uZSByb3cgdGFsbCwgdGhlIGhlaWdodCBpdHMgd29yZHMgbmVlZCBhdCB0aGUgd2lkdGggaXQgc3BhbnMuIEEgY2VsbFxuICAvLyB0aGF0IHNwYW5zIHJvd3Mgc2hhcmVzIHRoZWlycy5cbiAgcHJpdmF0ZSBfdGV4dENlbGxJbnB1dChkb2M6IGFueSwgY2VsbDogVGV4dFRhYmxlQ2VsbCwgY29sdW1uV2lkdGhzOiBudW1iZXJbXSk6IFBkZlRleHRDZWxsSW5wdXQge1xuICAgIGNvbnN0IHBhZGRpbmcgPSBURVhUX1RBQkxFX0NFTExfUEFERElORztcbiAgICBjb25zdCB3aWR0aCA9IGNvbHVtbldpZHRoc1xuICAgICAgLnNsaWNlKGNlbGwuY29sdW1uLCBjZWxsLmNvbHVtbiArIGNlbGwuY29sU3BhbilcbiAgICAgIC5yZWR1Y2UoKHN1bSwgY29sdW1uV2lkdGgpID0+IHN1bSArIGNvbHVtbldpZHRoLCAwKSAtIDIgKiBwYWRkaW5nLmhvcml6b250YWw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogJycsXG4gICAgICBjb2xTcGFuOiBjZWxsLmNvbFNwYW4sXG4gICAgICByb3dTcGFuOiBjZWxsLnJvd1NwYW4sXG4gICAgICB0ZXh0Q2VsbDogY2VsbCxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICAuLi4oY2VsbC5maWxsID8geyBmaWxsQ29sb3I6IGNlbGwuZmlsbCB9IDoge30pLFxuICAgICAgICAuLi4oY2VsbC5yb3dTcGFuID09PSAxXG4gICAgICAgICAgPyB7IG1pbkNlbGxIZWlnaHQ6IHRoaXMuX3BhcmFncmFwaHNIZWlnaHQoZG9jLCBjZWxsLnBhcmFncmFwaHMsIHdpZHRoKSArIDIgKiBwYWRkaW5nLnZlcnRpY2FsIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSBhdXRvVGFibGUgb3B0aW9ucyBhIHRleHQgdGFibGUncyBkcnkgcnVuIGFuZCBpdHMgZHJhdyBzaGFyZS4gRXZlcnlcbiAgLy8gY29sdW1uIGlzIGxpc3RlZCBhbmQgZml4ZWQgYXQgaXRzIHdpZHRoOiBhdXRvVGFibGUgd291bGQgb3RoZXJ3aXNlIGNvdW50XG4gIC8vIHRoZSBjb2x1bW5zIG9mIHRoZSBmaXJzdCByb3csIHdoaWNoIG1heSBiZSBuYXJyb3dlciB0aGFuIHRoZSBncmlkLiBBIHJvd1xuICAvLyBpcyBuZXZlciBzcGxpdCBhdCB0aGUgYm94J3MgYm90dG9tOiBpdCBmaXRzIHdob2xlIG9yIG1vdmVzIHBhc3QgaXQuIGJvdHRvbVxuICAvLyBpcyB0aGUgYm94J3MuXG4gIHByaXZhdGUgX3RleHRUYWJsZU9wdGlvbnMoXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICBjb2x1bW5XaWR0aHM6IG51bWJlcltdLFxuICAgIGxlZnQ6IG51bWJlciwgdG9wOiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcGFkZGluZyA9IFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRoZW1lOiAncGxhaW4nLFxuICAgICAgY29sdW1uczogY29sdW1uV2lkdGhzLm1hcCgoXywgaW5kZXgpID0+ICh7IGRhdGFLZXk6IGluZGV4IH0pKSxcbiAgICAgIHN0YXJ0WTogdG9wLFxuICAgICAgbWFyZ2luOiB7IGxlZnQsIHJpZ2h0OiBjb250ZXh0LnBhZ2VXIC0gbGVmdCAtIHdpZHRoLCBib3R0b206IGNvbnRleHQucGFnZUggLSBib3R0b20gfSxcbiAgICAgIHRhYmxlV2lkdGg6IHdpZHRoLFxuICAgICAgY29sdW1uU3R5bGVzOiBPYmplY3QuZnJvbUVudHJpZXMoY29sdW1uV2lkdGhzLm1hcCgoY2VsbFdpZHRoLCBpbmRleCkgPT4gW2luZGV4LCB7IGNlbGxXaWR0aCB9XSkpLFxuICAgICAgcm93UGFnZUJyZWFrOiAnYXZvaWQnLFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGZvbnQ6ICdoZWx2ZXRpY2EnLFxuICAgICAgICBmb250U3R5bGU6ICdub3JtYWwnLFxuICAgICAgICBmb250U2l6ZTogREVGQVVMVF9URVhUX1NJWkUsXG4gICAgICAgIGNlbGxQYWRkaW5nOiB7XG4gICAgICAgICAgdG9wOiBwYWRkaW5nLnZlcnRpY2FsLCByaWdodDogcGFkZGluZy5ob3Jpem9udGFsLCBib3R0b206IHBhZGRpbmcudmVydGljYWwsIGxlZnQ6IHBhZGRpbmcuaG9yaXpvbnRhbCxcbiAgICAgICAgfSxcbiAgICAgICAgbGluZUNvbG9yOiBURVhUX1RBQkxFX0JPUkRFUl9DT0xPUixcbiAgICAgICAgbGluZVdpZHRoOiBURVhUX1RBQkxFX0JPUkRFUl9XSURUSCxcbiAgICAgICAgdmFsaWduOiAnbWlkZGxlJyxcbiAgICAgICAgdGV4dENvbG9yOiBERUZBVUxUX1RFWFRfQ09MT1IsXG4gICAgICB9LFxuICAgICAgZGlkRHJhd0NlbGw6IChob29rOiBhbnkpID0+IHRoaXMuX2RyYXdUZXh0Q2VsbChob29rKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gSG93IG1hbnkgb2YgYSB0ZXh0IHRhYmxlJ3Mgcm93cyBpdHMgYm94LCBmcm9tIHRvcCB0byBib3R0b20sIGhvbGRzIHdob2xlOlxuICAvLyB0aGUgdGFibGUgbGFpZCBvdXQgYXMgX21lYXN1cmUgbGF5cyBvdXQgYSBsaXN0J3MuXG4gIHByaXZhdGUgX3RleHRUYWJsZUZpdChjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgdG9wOiBudW1iZXIsIGJvdHRvbTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZml0dGluZ1Jvd3MoY29udGV4dC5jcmVhdGVUYWJsZSh0aGlzLl9zY3JhdGNoRG9jdW1lbnQoY29udGV4dCksIG9wdGlvbnMpLCB0b3AsIGJvdHRvbSwgMCk7XG4gIH1cblxuICAvLyBUaGUgZmlyc3QgYGZpdGAgcm93cywgYSBjZWxsIHRoYXQgc3BhbnMgZG93biBwYXN0IHRoZSBsYXN0IG9mIHRoZW0gY3V0XG4gIC8vIHRoZXJlLlxuICBwcml2YXRlIF9rZXB0Um93cyhib2R5OiBQZGZUZXh0Q2VsbElucHV0W11bXSwgZml0OiBudW1iZXIpOiBQZGZUZXh0Q2VsbElucHV0W11bXSB7XG4gICAgcmV0dXJuIGJvZHkuc2xpY2UoMCwgZml0KS5tYXAoKHJvdykgPT4gcm93Lm1hcCgoaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHJvd1NwYW4gPSBNYXRoLm1pbihpbnB1dC5yb3dTcGFuLCBmaXQgLSBpbnB1dC50ZXh0Q2VsbC5yb3cpO1xuXG4gICAgICByZXR1cm4gcm93U3BhbiA9PT0gaW5wdXQucm93U3BhbiA/IGlucHV0IDogeyAuLi5pbnB1dCwgcm93U3BhbiB9O1xuICAgIH0pKTtcbiAgfVxuXG4gIC8vIEEgdGV4dCB0YWJsZSBjZWxsJ3Mgd29yZHMsIGRyYXduIG9uY2UgYXV0b1RhYmxlIGhhcyBkcmF3biB0aGUgY2VsbDogaW5zaWRlXG4gIC8vIGl0cyBwYWRkaW5nLCB3cmFwcGVkIHRvIGl0cyB3aWR0aCBhbmQgcGxhY2VkIGJ5IGl0cyB2ZXJ0aWNhbCBhbGlnbm1lbnQsIHRoZVxuICAvLyBtaWRkbGUgdW5sZXNzIHNldC4gTGluZXMgcGFzdCB0aGUgY2VsbCBhcmUgbGVmdCBvZmYuXG4gIHByaXZhdGUgX2RyYXdUZXh0Q2VsbChob29rOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBjZWxsOiBUZXh0VGFibGVDZWxsIHwgdW5kZWZpbmVkID0gaG9vay5jZWxsLnJhdz8udGV4dENlbGw7XG4gICAgaWYgKCFjZWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBob29rLmNlbGw7XG4gICAgY29uc3QgYm94OiBQZGZUZXh0Qm94ID0ge1xuICAgICAgbGVmdDogeCArIGhvb2suY2VsbC5wYWRkaW5nKCdsZWZ0JyksXG4gICAgICB0b3A6IHkgKyBob29rLmNlbGwucGFkZGluZygndG9wJyksXG4gICAgICB3aWR0aDogd2lkdGggLSBob29rLmNlbGwucGFkZGluZygnaG9yaXpvbnRhbCcpLFxuICAgICAgYm90dG9tOiB5ICsgaGVpZ2h0IC0gaG9vay5jZWxsLnBhZGRpbmcoJ2JvdHRvbScpLFxuICAgIH07XG4gICAgY29uc3Qgc3BhcmUgPSBNYXRoLm1heCgwLCBib3guYm90dG9tIC0gYm94LnRvcCAtIHRoaXMuX3BhcmFncmFwaHNIZWlnaHQoaG9vay5kb2MsIGNlbGwucGFyYWdyYXBocywgYm94LndpZHRoKSk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2VsbC52YWxpZ24gPT09ICd0b3AnID8gMCA6IChjZWxsLnZhbGlnbiA9PT0gJ2JvdHRvbScgPyBzcGFyZSA6IHNwYXJlIC8gMik7XG5cbiAgICB0aGlzLl9kcmF3UGFyYWdyYXBocyhob29rLmRvYywgY2VsbC5wYXJhZ3JhcGhzLCBib3gsIGJveC50b3AgKyBvZmZzZXQpO1xuICB9XG5cbiAgLy8gQnJlYWsgYSBwYXJhZ3JhcGgncyBydW5zIGludG8gbGluZXMgb2YgbWVhc3VyZWQgd29yZHMgdGhhdCBmaXQgdGhlIHdpZHRoLlxuICAvLyBBIHdvcmQga2VlcHMgaXRzIHRyYWlsaW5nIHNwYWNlIHNvIHNwYWNpbmcgc3Vydml2ZXMgcnVuIGJvdW5kYXJpZXMuIEFcbiAgLy8gbm8tYnJlYWsgc3BhY2UgaXMgcGFydCBvZiBpdHMgd29yZCwgbmV2ZXIgYSBicmVhayBiZXR3ZWVuIHR3bzogYSBudW1iZXJcbiAgLy8gZ3JvdXBlZCB3aXRoIG9uZSAoZnItQ0EncyB0aG91c2FuZHMsIG9yIGEgbmFycm93IHNwYWNlIF9wZGZUZXh0IHR1cm5lZFxuICAvLyBpbnRvIG9uZSkgc3RheXMgb24gb25lIGxpbmUuXG4gIHByaXZhdGUgX3dyYXAoZG9jOiBhbnksIHBhcmFncmFwaDogVGV4dFBhcmFncmFwaCwgd2lkdGg6IG51bWJlcik6IFBkZldvcmRbXVtdIHtcbiAgICBjb25zdCBsaW5lczogUGRmV29yZFtdW10gPSBbXTtcbiAgICBsZXQgbGluZTogUGRmV29yZFtdID0gW107XG4gICAgbGV0IGxpbmVXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHJ1biBvZiBwYXJhZ3JhcGgucnVucykge1xuICAgICAgY29uc3Qgc2l6ZSA9IHJ1bi5mb250U2l6ZSA/PyBERUZBVUxUX1RFWFRfU0laRTtcbiAgICAgIHRoaXMuX2ZvbnQoZG9jLCBydW4sIHNpemUpO1xuXG4gICAgICBmb3IgKGNvbnN0IHRleHQgb2YgcnVuLnRleHQubWF0Y2goLyg/OlteXFxzXXxcXHUwMGEwKStbXlxcU1xcdTAwYTBdKnxbXlxcU1xcdTAwYTBdKy9nKSA/PyBbXSkge1xuICAgICAgICBjb25zdCB3b3JkV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRleHQpO1xuXG4gICAgICAgIGlmIChsaW5lLmxlbmd0aCAmJiBsaW5lV2lkdGggKyB3b3JkV2lkdGggLSB0aGlzLl90cmFpbGluZ1NwYWNlKGRvYywgdGV4dCkgPiB3aWR0aCkge1xuICAgICAgICAgIGxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgICAgbGluZSA9IFtdO1xuICAgICAgICAgIGxpbmVXaWR0aCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lLnB1c2goeyBydW4sIHRleHQsIHNpemUsIHdpZHRoOiB3b3JkV2lkdGggfSk7XG4gICAgICAgIGxpbmVXaWR0aCArPSB3b3JkV2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpbmUubGVuZ3RoKSB7XG4gICAgICBsaW5lcy5wdXNoKGxpbmUpO1xuICAgIH1cblxuICAgIHJldHVybiBsaW5lcztcbiAgfVxuXG4gIHByaXZhdGUgX2RyYXdXb3JkKGRvYzogYW55LCB3b3JkOiBQZGZXb3JkLCB4OiBudW1iZXIsIGJhc2VsaW5lOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBydW4gPSB3b3JkLnJ1bjtcblxuICAgIGlmIChydW4uaGlnaGxpZ2h0KSB7XG4gICAgICBkb2Muc2V0RmlsbENvbG9yKHJ1bi5oaWdobGlnaHQpO1xuICAgICAgZG9jLnJlY3QoeCwgYmFzZWxpbmUgLSB3b3JkLnNpemUgKiAwLjksIHdvcmQud2lkdGgsIHdvcmQuc2l6ZSAqIDEuMTUsICdGJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9udChkb2MsIHJ1biwgd29yZC5zaXplKTtcbiAgICBkb2MudGV4dCh3b3JkLnRleHQsIHgsIGJhc2VsaW5lKTtcblxuICAgIGNvbnN0IGNvbG9yID0gcnVuLmNvbG9yID8/IERFRkFVTFRfVEVYVF9DT0xPUjtcbiAgICBjb25zdCBpbmtXaWR0aCA9IHdvcmQud2lkdGggLSB0aGlzLl90cmFpbGluZ1NwYWNlKGRvYywgd29yZC50ZXh0KTtcbiAgICBpZiAocnVuLnVuZGVybGluZSkge1xuICAgICAgZG9jLnNldERyYXdDb2xvcihjb2xvcik7XG4gICAgICBkb2Muc2V0TGluZVdpZHRoKHdvcmQuc2l6ZSAvIDE2KTtcbiAgICAgIGRvYy5saW5lKHgsIGJhc2VsaW5lICsgd29yZC5zaXplICogMC4xMiwgeCArIGlua1dpZHRoLCBiYXNlbGluZSArIHdvcmQuc2l6ZSAqIDAuMTIpO1xuICAgIH1cbiAgICBpZiAocnVuLnN0cmlrZSkge1xuICAgICAgZG9jLnNldERyYXdDb2xvcihjb2xvcik7XG4gICAgICBkb2Muc2V0TGluZVdpZHRoKHdvcmQuc2l6ZSAvIDE2KTtcbiAgICAgIGRvYy5saW5lKHgsIGJhc2VsaW5lIC0gd29yZC5zaXplICogMC4zLCB4ICsgaW5rV2lkdGgsIGJhc2VsaW5lIC0gd29yZC5zaXplICogMC4zKTtcbiAgICB9XG5cbiAgICBpZiAocnVuLmxpbmspIHtcbiAgICAgIGRvYy5saW5rKHgsIGJhc2VsaW5lIC0gd29yZC5zaXplLCBpbmtXaWR0aCwgd29yZC5zaXplICogMS4yLCB7IHVybDogcnVuLmxpbmsgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8ganNQREYncyBzdGFuZGFyZCBmb250cyBhcmUgSGVsdmV0aWNhLCBUaW1lcyBhbmQgQ291cmllcjsgYSBibG9jaydzIGZhY2UgaXNcbiAgLy8gbWFwcGVkIG9udG8gd2hpY2hldmVyIG9mIHRoZSB0aHJlZSBpdCByZXNlbWJsZXMuXG4gIHByaXZhdGUgX2ZvbnQoZG9jOiBhbnksIHJ1bjogVGV4dFJ1biwgc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZmFjZSA9IChydW4uZm9udEZhY2UgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZmFtaWx5ID0gL2NvdXJpZXJ8bW9uby8udGVzdChmYWNlKVxuICAgICAgPyAnY291cmllcidcbiAgICAgIDogKC90aW1lc3xnZW9yZ2lhfHNlcmlmLy50ZXN0KGZhY2UpICYmICFmYWNlLmluY2x1ZGVzKCdzYW5zJykgPyAndGltZXMnIDogJ2hlbHZldGljYScpO1xuICAgIGNvbnN0IHN0eWxlID0gcnVuLmJvbGQgJiYgcnVuLml0YWxpY1xuICAgICAgPyAnYm9sZGl0YWxpYydcbiAgICAgIDogKHJ1bi5ib2xkID8gJ2JvbGQnIDogKHJ1bi5pdGFsaWMgPyAnaXRhbGljJyA6ICdub3JtYWwnKSk7XG5cbiAgICBkb2Muc2V0Rm9udChmYW1pbHksIHN0eWxlKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoc2l6ZSk7XG4gICAgZG9jLnNldFRleHRDb2xvcihydW4uY29sb3IgPz8gREVGQVVMVF9URVhUX0NPTE9SKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYWlsaW5nU3BhY2UoZG9jOiBhbnksIHRleHQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgdHJhaWxpbmcgPSB0ZXh0Lmxlbmd0aCAtIHRleHQudHJpbUVuZCgpLmxlbmd0aDtcblxuICAgIHJldHVybiB0cmFpbGluZyA/IGRvYy5nZXRUZXh0V2lkdGgoJyAnKSAqIHRyYWlsaW5nIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgX2FsaWduT2Zmc2V0KGFsaWduOiBUZXh0UGFyYWdyYXBoWydhbGlnbiddLCB3aWR0aDogbnVtYmVyLCBsaW5lV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsICh3aWR0aCAtIGxpbmVXaWR0aCkgLyAyKTtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHdpZHRoIC0gbGluZVdpZHRoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdoYXQgdGhlIHRva2VucyBvZiBhIHRleHQgYmxvY2sgYW5kIG9mIGEgdGlsZSdzIHRpdGxlIGZpbGwgd2l0aCBvbiB0aGlzXG4gIC8vIHBhZ2UuIFRoZSBudW1iZXIgaXMgdGhlIHBoeXNpY2FsIHBhZ2UgYW1vbmcgdGhlIHJlcG9ydCdzIHBhZ2VzLFxuICAvLyBjb250aW51YXRpb24gcGFnZXMgaW5jbHVkZWQg4oCUIHRoZSB0aXRsZSBwYWdlIGlzIG5vdCBhIHJlcG9ydCBwYWdlLiBUaGVcbiAgLy8gbmFtZSBzdGF5cyB0aGUgcmVwb3J0IHBhZ2Uncywgc28gYSBjb250aW51YXRpb24gcGFnZSBpcyBuYW1lZCBmb3IgdGhlXG4gIC8vIHBhZ2UgaXRzIHRhYmxlIHN0YXJ0ZWQgb24uIFRoZSBmaWx0ZXJzIGFyZSB0aGUgcmVwb3J0J3MgYW5kIHRoZSBwYWdlJ3NcbiAgLy8gb3duIHBhZ2UgZmlsdGVycyAobGF5ZXJGaWx0ZXJGaWVsZHMpLlxuICBwcml2YXRlIF90b2tlbnMoY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCwgcGFnZTogUmVwb3J0UGFnZSwgaW5kZXg6IG51bWJlciwgcGFnZU51bWJlcjogbnVtYmVyKTogVGV4dFRva2VuQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VOdW1iZXIsXG4gICAgICBwYWdlTmFtZTogcGFnZS5uYW1lIHx8IGBQYWdlICR7aW5kZXggKyAxfWAsXG4gICAgICByZXBvcnROYW1lOiBjb250ZXh0LnJlcG9ydC5uYW1lLFxuICAgICAgZmlsdGVyczogbGF5ZXJGaWx0ZXJGaWVsZHMoY29udGV4dC5maWx0ZXJGaWVsZHMsIGNvbnRleHQucmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXSwgcGFnZS5pZCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgdGlsZSBvbiBpdHMgcmVwb3J0IHBhZ2UsIGl0cyB0aXRsZSdzIHRva2VucyBmaWxsZWQgd2l0aCB0aGF0IHBhZ2Uncy5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyQ29tcG9uZW50KFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgcGFnZTogUmVwb3J0UGFnZSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICAgIG92ZXJmbG93czogUGRmVGFibGVPdmVyZmxvd1tdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGRvYyB9ID0gY29udGV4dDtcbiAgICBjb25zdCBjb21wb25lbnQgPSBpdGVtLmNvbXBvbmVudDtcbiAgICAvLyBHZW9tZXRyeSBpcyBzdG9yZWQgaW4gaW5jaGVzOyB0aGUgUERGIGRyYXdzIGluIHBvaW50cy5cbiAgICBjb25zdCB4ID0gY29tcG9uZW50LnggKiBQVDtcbiAgICBjb25zdCB5ID0gY29tcG9uZW50LnkgKiBQVDtcbiAgICBjb25zdCB3ID0gY29tcG9uZW50LncgKiBQVDtcbiAgICBjb25zdCBoID0gY29tcG9uZW50LmggKiBQVDtcblxuICAgIGNvbnN0IHRpdGxlID0gZXhwb3J0VGl0bGUoY29tcG9uZW50LCB0b2tlbnMsIGl0ZW0uc2VhcmNoLCBpdGVtLmNydW1icywgaXRlbS5maWx0ZXJlZCk7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRUaXRsZShkb2MsIHRpdGxlLCB4LCB5LCB3KTtcbiAgICB9XG5cbiAgICAvLyBBIGNoYXJ0IG9yIGxpc3QgdGhhdCBjb21wYXJlcyBvciBoYXMgYSB0aW1lZnJhbWUgbmFtZXMgaXRzIGRheXMgdW5kZXJcbiAgICAvLyB0aGUgdGl0bGUsIGFuZCBpdHMgbm90ZXMgc2l0IGF0IHRoZSBmb290IG9mIGl0cyBib3g7IGEgS1BJIGNhcmQgZHJhd3NcbiAgICAvLyBib3RoIGl0c2VsZi4gTmVpdGhlciB0YWtlcyByb29tIGZyb20gYSBjb21wb25lbnQgd2l0aG91dCB0aG9zZSBrZXlzLlxuICAgIGNvbnN0IGxvY2FsZSA9IGNvbnRleHQuZm9ybWF0Q29udGV4dC5sb2NhbGU7XG4gICAgY29uc3Qgc3VidGl0bGUgPSB0aGlzLl9wZGZUZXh0KGV4cG9ydFdpbmRvd3NMaW5lKGl0ZW0sIGNvbnRleHQudGltZXpvbmUsIGxvY2FsZSkpO1xuICAgIGNvbnN0IG5vdGVzID0gY29tcG9uZW50LnR5cGUgPT09ICdrcGknID8gW10gOiBleHBvcnROb3RlTGluZXMoaXRlbSwgY29udGV4dC50aW1lem9uZSwgbG9jYWxlKTtcbiAgICBjb25zdCB0b3AgPSB5ICsgVElUTEVfSCArIChzdWJ0aXRsZSA/IFNVQlRJVExFX0ggOiAwKTtcbiAgICBjb25zdCByb29tID0gTWF0aC5tYXgoMjAsIHkgKyBoIC0gdG9wKTtcbiAgICBjb25zdCBrZXB0ID0gbm90ZXMuc2xpY2UoMCwgTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigocm9vbSAtIE1JTl9CT0RZX0gpIC8gTk9URV9MSU5FX0gpKSk7XG5cbiAgICBpZiAoc3VidGl0bGUpIHtcbiAgICAgIHRoaXMuX3NtYWxsTGluZShkb2MsIHN1YnRpdGxlLCB4LCB5ICsgVElUTEVfSCwgdywgJ2xlZnQnLCAnbm9ybWFsJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keVkgPSB0b3A7XG4gICAgY29uc3QgYm9keUggPSBNYXRoLm1heCgyMCwgcm9vbSAtIGtlcHQubGVuZ3RoICogTk9URV9MSU5FX0gpO1xuXG4gICAga2VwdC5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5fc21hbGxMaW5lKGRvYywgdGhpcy5fcGRmVGV4dChsaW5lKSwgeCwgYm9keVkgKyBib2R5SCArIGluZGV4ICogTk9URV9MSU5FX0gsIHcsICdsZWZ0JywgJ2l0YWxpYycpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpdGVtLmRhdGEgfHwgaXNFbXB0eVRpbGUoaXRlbSkpIHtcbiAgICAgIHRoaXMuX2JveE5vdGUoZG9jLCBlbXB0eUxhYmVsKGl0ZW0pLCB4LCBib2R5WSwgdywgYm9keUgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xuICAgICAgY2FzZSAnY2hhcnQnOiB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcmVuZGVyQ2hhcnRJbWFnZShjb21wb25lbnQsIGl0ZW0uZGF0YSwgdywgYm9keUgsIGNvbnRleHQuZm9ybWF0Q29udGV4dCk7XG4gICAgICAgIGRvYy5hZGRJbWFnZShpbWFnZSwgJ1BORycsIHgsIGJvZHlZLCB3LCBib2R5SCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICBjYXNlICdncmlkJzpcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFibGUoY29udGV4dCwgcGFnZSwgaXRlbSwgeCwgYm9keVksIHcsIGJvZHlILCBvdmVyZmxvd3MpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2twaSc6XG4gICAgICAgIHRoaXMuX3JlbmRlcktwaShjb250ZXh0LCBpdGVtLCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBPbmUgbGluZSBvZiBzbWFsbCBncmV5IHByaW50LCBjdXQgdG8gdGhlIHdpZHRoIHdpdGggYW4gZWxsaXBzaXM6IGFcbiAgLy8gc3VidGl0bGUsIGEgbm90ZSBvciBhIGxpbmUgb2YgYSBLUEkgY2FyZC4geSBpcyB0aGUgbGluZSdzIHRvcDsgdGhlIGxpbmUgaXNcbiAgLy8gTk9URV9MSU5FX0ggdGFsbCwgdGltZXMgdGhlIHNjYWxlIGEgc2hvcnQgS1BJIHRpbGUgc2hyaW5rcyBpdHMgbGluZXMgYnkuXG4gIHByaXZhdGUgX3NtYWxsTGluZShcbiAgICBkb2M6IGFueSxcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlcixcbiAgICBhbGlnbjogJ2xlZnQnIHwgJ2NlbnRlcicsXG4gICAgc3R5bGU6ICdub3JtYWwnIHwgJ2l0YWxpYycsXG4gICAgc2NhbGUgPSAxLFxuICApOiB2b2lkIHtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgc3R5bGUpO1xuICAgIGRvYy5zZXRGb250U2l6ZShTTUFMTF9TSVpFICogc2NhbGUpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoTVVURURfQ09MT1IpO1xuICAgIGRvYy50ZXh0KHRoaXMuX2ZpdChkb2MsIHRleHQsIHcpLCBhbGlnbiA9PT0gJ2NlbnRlcicgPyB4ICsgdyAvIDIgOiB4LCB5ICsgU01BTExfU0laRSAqIHNjYWxlLCB7IGFsaWduIH0pO1xuICB9XG5cbiAgLy8gVGhlIHRleHQsIGVsbGlwc2l6ZWQgdG8gdGhlIHdpZHRoIGluIHRoZSBkb2MncyBjdXJyZW50IGZvbnQuXG4gIHByaXZhdGUgX2ZpdChkb2M6IGFueSwgdGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoZG9jLmdldFRleHRXaWR0aCh0ZXh0KSA8PSB3aWR0aCkge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgbGV0IGN1dCA9IHRleHQ7XG4gICAgd2hpbGUgKGN1dC5sZW5ndGggPiAxICYmIGRvYy5nZXRUZXh0V2lkdGgoYCR7Y3V0feKApmApID4gd2lkdGgpIHtcbiAgICAgIGN1dCA9IGN1dC5zbGljZSgwLCAtMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke2N1dC50cmltRW5kKCl94oCmYDtcbiAgfVxuXG4gIC8vIFRoZSBib2xkIHN0cmlwIG92ZXIgYSBjb21wb25lbnQsIGFuZCBvdmVyIGVhY2ggb2YgaXRzIGNvbnRpbnVhdGlvbiBwYWdlcy5cbiAgLy8gQSBkcmlsbGVkIHRpdGxlJ3MgY3J1bWJzIGFyZSB3cml0dGVuIGluIHRoZSByZXBvcnQncyBsb2NhbGUsIHNvIHRoZSB0aXRsZVxuICAvLyBnb2VzIHRocm91Z2ggX3BkZlRleHQgbGlrZSBhbnkgZm9ybWF0dGVkIHRleHQgKHRoZSDigLogYmV0d2VlbiBjcnVtYnMgaXNcbiAgLy8gV2luQW5zaSBhbmQgc3RheXMpLlxuICBwcml2YXRlIF9jb21wb25lbnRUaXRsZShkb2M6IGFueSwgdGl0bGU6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlcik6IHZvaWQge1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZSg5KTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKCcjMWYyOTMzJyk7XG4gICAgZG9jLnRleHQodGhpcy5fcGRmVGV4dCh0aXRsZSksIHgsIHkgKyAxMCwgeyBtYXhXaWR0aDogdyB9KTtcbiAgfVxuXG4gIC8vIEFuIGl0YWxpYyBncmV5IGxpbmUgY2VudGVyZWQgaW4gYSBjb21wb25lbnQncyBib2R5LCBmb3IgYSBib2R5IHRoYXQgaG9sZHNcbiAgLy8gc29tZXRoaW5nIG90aGVyIHRoYW4gaXRzIGNvbnRlbnQuIEEgbGluZSB3aWRlciB0aGFuIHRoZSBib2R5IHdyYXBzLlxuICBwcml2YXRlIF9ib3hOb3RlKGRvYzogYW55LCB0ZXh0OiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcik6IHZvaWQge1xuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnaXRhbGljJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDkpO1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoTVVURURfQ09MT1IpO1xuICAgIGRvYy50ZXh0KHRleHQsIHggKyB3IC8gMiwgeSArIGggLyAyLCB7IGFsaWduOiAnY2VudGVyJywgbWF4V2lkdGg6IHcgfSk7XG4gIH1cblxuICAvLyBBIGxpc3QncyBvbi1wYWdlIHRhYmxlLiBBbGwgb2YgaXRzIGZldGNoZWQgcm93cyBhcmUgbGFpZCBvdXQgb25jZSB0byBsZWFyblxuICAvLyBob3cgbWFueSB0aGUgYm94IGhvbGRzOyB3aGVuIHRoZXkgZG8gbm90IGFsbCBmaXQsIHRoZSBib3gncyBsYXN0IHJvdyBzYXlzXG4gIC8vIHRoZSB0YWJsZSBjb250aW51ZXMgYW5kIHRoZSByZXN0IGdvIHRvIG92ZXJmbG93cyBmb3IgY29udGludWF0aW9uIHBhZ2VzLlxuICAvLyBBIGJveCB0b28gc2hvcnQgZm9yIGV2ZW4gdGhlIGhlYWQgY2FycmllcyB0aGUgbm90aWNlIGFzIGEgbGluZSBpbnN0ZWFkLlxuICAvLyBBIHRhYmxlIHdob3NlIGhlYWRpbmcgYW5kIHRvdGFscyByb3cgbGVhdmUgYSBjb250aW51YXRpb24gcGFnZSBubyByb29tIGZvclxuICAvLyBhIHJvdyBzdG9wcyBhdCBpdHMgYm94LCBpdHMgbm90aWNlIHNheWluZyBzby4gQSB0b3RhbHMgcm93IGNsb3NlcyB0aGVcbiAgLy8gdGFibGUgb25jZTogaW4gdGhlIGJveCB3aGVuIGV2ZXJ5IHJvdyBmaXRzIGl0LCBlbHNlIGFmdGVyIHRoZSBsYXN0XG4gIC8vIGNvbnRpbnVhdGlvbiByb3cuIFBvaW50cyB0aHJvdWdob3V0LlxuICBwcml2YXRlIF9yZW5kZXJUYWJsZShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIHBhZ2U6IFJlcG9ydFBhZ2UsXG4gICAgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcixcbiAgICBvdmVyZmxvd3M6IFBkZlRhYmxlT3ZlcmZsb3dbXSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgeyBjb21wb25lbnQsIHNlYXJjaCwgZmlsdGVyZWQgfSA9IGl0ZW07XG4gICAgY29uc3QgeyBoZWFkLCBjZWxscywgbnVtZXJpYywgZm9vdCwgb21pdHRlZCB9ID0gaXRlbS50YWJsZSA/IHRoaXMuX2dyaWRDZWxscyhpdGVtKSA6IHRoaXMuX2xpc3RDZWxscyhjb250ZXh0LCBpdGVtKTtcbiAgICBjb25zdCBib3R0b20gPSBjb250ZXh0LnBhZ2VIIC0gKHkgKyBoKTtcbiAgICBjb25zdCB7IGZpdCwgY29sdW1uU3R5bGVzLCBtaW5IZWlnaHQgfSA9IHRoaXMuX21lYXN1cmUoY29udGV4dCwgaGVhZCwgY2VsbHMsIG51bWVyaWMsIGZvb3QsIHgsIHksIHcsIGJvdHRvbSk7XG5cbiAgICBpZiAoZml0ID09PSBjZWxscy5sZW5ndGggJiYgb21pdHRlZCA9PT0gMCkge1xuICAgICAgdGhpcy5fZHJhd1RhYmxlKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB0aGlzLl90YWJsZU9wdGlvbnMoY29udGV4dCwgaGVhZCwgbnVtZXJpYywgY2VsbHMsIHgsIHksIHcsIGJvdHRvbSwgY29sdW1uU3R5bGVzLCBmb290KSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhdXRvVGFibGUgbmVlZHMgcm9vbSBmb3IgYSByb3cgdW5kZXIgdGhlIGhlYWRpbmcgb24gZXZlcnkgcGFnZSBpdCBhZGRzLFxuICAgIC8vIG9yIGl0IGFkZHMgcGFnZXMgdW50aWwgdGhlIGJyb3dzZXIncyBzdGFjayBydW5zIG91dC5cbiAgICBjb25zdCBjb250aW51ZXMgPSBtaW5IZWlnaHQgPCB0aGlzLl9jb250aW51YXRpb25Sb29tKGNvbnRleHQsIHBhZ2UpO1xuICAgIGNvbnN0IG5vdGljZSA9IGNvbnRpbnVlcyA/IENPTlRJTlVFRF9OT1RJQ0UgOiBOT19ST09NX05PVElDRTtcblxuICAgIC8vIFRoZSBub3RpY2UgdGFrZXMgdGhlIHBsYWNlIG9mIHRoZSBsYXN0IHJvdyB0aGF0IGZpdCwgc28gdGhhdCByb3cgbW92ZXNcbiAgICAvLyB0byB0aGUgY29udGludWF0aW9uLiBvbWl0dGVkID4gMCBtZWFucyBhIGZ1bGwgUERGX0xJU1RfUk9XUyBmZXRjaCwgd2hpY2hcbiAgICAvLyBuZXZlciBmaXRzIG9uZSBib3gsIHNvIHRoZSBDU1Ygbm90aWNlIGFsd2F5cyBsYW5kcyBvbiBhIGNvbnRpbnVhdGlvblxuICAgIC8vIHBhZ2UuXG4gICAgY29uc3Qga2VwdCA9IE1hdGgubWF4KDAsIGZpdCAtIDEpO1xuXG4gICAgaWYgKGZpdCA+PSAxKSB7XG4gICAgICBjb25zdCBib2R5ID0gWy4uLmNlbGxzLnNsaWNlKDAsIGtlcHQpLCB0aGlzLl9ub3RpY2VSb3cobm90aWNlLCBudW1lcmljLmxlbmd0aCwgdHJ1ZSldO1xuICAgICAgdGhpcy5fZHJhd1RhYmxlKGNvbnRleHQsIHRoaXMuX3RhYmxlT3B0aW9ucyhjb250ZXh0LCBoZWFkLCBudW1lcmljLCBib2R5LCB4LCB5LCB3LCBib3R0b20sIGNvbHVtblN0eWxlcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib3hOb3RlKGNvbnRleHQuZG9jLCBub3RpY2UsIHgsIHksIHcsIGgpO1xuICAgIH1cblxuICAgIGlmIChjb250aW51ZXMpIHtcbiAgICAgIG92ZXJmbG93cy5wdXNoKHtcbiAgICAgICAgY29tcG9uZW50LCBzZWFyY2gsIGNydW1iczogaXRlbS5jcnVtYnMsIGZpbHRlcmVkLCBoZWFkLCBudW1lcmljLCByb3dzOiBjZWxscy5zbGljZShrZXB0KSwgb21pdHRlZCwgZm9vdCwgeCwgdyxcbiAgICAgICAgY29sdW1uU3R5bGVzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQSBsaXN0J3MgaGVhZGluZywgcm93cywgdG90YWxzIHJvdyBhbmQgdGhlIHJvd3MgcGFzdCBpdHMgZmV0Y2guXG4gIHByaXZhdGUgX2xpc3RDZWxscyhjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LCBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQpOiBQZGZUYWJsZVBhcnRzIHtcbiAgICBjb25zdCB7IGNvbXBvbmVudCwgaGlkZGVuQ29sdW1ucyB9ID0gaXRlbTtcbiAgICBjb25zdCBkYXRhID0gaXRlbS5kYXRhIGFzIENvbXBvbmVudERhdGE7XG4gICAgY29uc3QgaGVhZCA9IFtsaXN0SGVhZGluZ3MoY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LmZvcm1hdENvbnRleHQubG9jYWxlLCBoaWRkZW5Db2x1bW5zKS5tYXAoKGhlYWRpbmcpID0+IHRoaXMuX3BkZlRleHQoaGVhZGluZykpXTtcbiAgICBjb25zdCB7IGNlbGxzLCBudW1lcmljLCBmb290IH0gPSB0aGlzLl90YWJsZUNlbGxzKGNvbnRleHQsIGNvbXBvbmVudCwgZGF0YSwgaGlkZGVuQ29sdW1ucyk7XG5cbiAgICByZXR1cm4geyBoZWFkLCBjZWxscywgbnVtZXJpYywgZm9vdCwgb21pdHRlZDogTWF0aC5tYXgoMCwgKGRhdGEucGFnaW5nPy50b3RhbCA/PyBjZWxscy5sZW5ndGgpIC0gY2VsbHMubGVuZ3RoKSB9O1xuICB9XG5cbiAgLy8gQSB0YWJsZSB0aWxlJ3MgaGVhZGluZyByb3dzIChzcGFubmVkIGFzIHRoZSBzY3JlZW4ncyBoZWFkZXIpLCBpdHMgbGluZXNcbiAgLy8gKGdyb3VwcyBhbmQgdG90YWxzIGJvbGQsIGEgZ3JvdXAncyBsYWJlbCBzdGVwcGVkIGluIGJ5IGl0cyBkZXB0aCkgYW5kIGl0c1xuICAvLyB0b3RhbCByb3csIGFzIGdyaWRFeHBvcnRUYWJsZSgpIGxheXMgdGhlbSBvdXQsIGFuZCB0aGUgbGluZXMgcGFzdCBpdHMgY2FwLlxuICBwcml2YXRlIF9ncmlkQ2VsbHMoaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50KTogUGRmVGFibGVQYXJ0cyB7XG4gICAgY29uc3QgdGFibGUgPSBncmlkRXhwb3J0VGFibGUoaXRlbS50YWJsZSEpO1xuICAgIGNvbnN0IGNlbGwgPSAoZXhwb3J0ZWQ6IEdyaWRFeHBvcnRDZWxsKTogUGRmVGFibGVDZWxsID0+ICh7XG4gICAgICBjb250ZW50OiB0aGlzLl9wZGZUZXh0KGV4cG9ydGVkLnRleHQpLFxuICAgICAgY29sU3BhbjogZXhwb3J0ZWQuY29sU3BhbixcbiAgICAgIHJvd1NwYW46IGV4cG9ydGVkLnJvd1NwYW4sXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgLi4uKGV4cG9ydGVkLmJvbGQgPyB7IGZvbnRTdHlsZTogJ2JvbGQnIH0gOiB7fSksXG4gICAgICAgIC4uLihleHBvcnRlZC5zaGFkZSA/IHsgZmlsbENvbG9yOiBleHBvcnRlZC5zaGFkZS5iYWNrZ3JvdW5kLCB0ZXh0Q29sb3I6IGV4cG9ydGVkLnNoYWRlLmZvcmVncm91bmQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGV4cG9ydGVkLmluZGVudFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgY2VsbFBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgdG9wOiBUQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgIHJpZ2h0OiBUQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgIGJvdHRvbTogVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICBsZWZ0OiBUQUJMRV9DRUxMX1BBRERJTkcgKyBleHBvcnRlZC5pbmRlbnQgKiBHUklEX0lOREVOVCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBoZWFkOiB0YWJsZS5oZWFkLm1hcCgocm93KSA9PiByb3cubWFwKGNlbGwpKSxcbiAgICAgIGNlbGxzOiB0YWJsZS5ib2R5Lm1hcCgocm93KSA9PiByb3cubWFwKGNlbGwpKSxcbiAgICAgIG51bWVyaWM6IHRhYmxlLm51bWVyaWMsXG4gICAgICBmb290OiB0YWJsZS5mb290ID8gdGFibGUuZm9vdC5tYXAoKGV4cG9ydGVkKSA9PiB0aGlzLl9wZGZUZXh0KGV4cG9ydGVkLnRleHQpKSA6IG51bGwsXG4gICAgICBvbWl0dGVkOiB0YWJsZS5tb3JlUm93cyxcbiAgICB9O1xuICB9XG5cbiAgLy8gRWFjaCBmZXRjaGVkIHJvdyBhcyB0aGUgc3RyaW5ncyBpdHMgdGFibGUgY2VsbHMgcHJpbnQsIGluIHRoZSByZXBvcnQnc1xuICAvLyB6b25lLCBsb2NhbGUgYW5kIGN1cnJlbmN5LCB3aGljaCBjb2x1bW5zIGhvbGQgZm9ybWF0dGVkIG51bWJlcnMsIGFuZCB0aGVcbiAgLy8gdG90YWxzIHJvdyAobnVsbCB3aXRob3V0IG9uZSkuIFRoZSBjb2x1bW5zIHRoZSB2aWV3ZXIgaGlkIGFyZSBsZWZ0IG91dC5cbiAgcHJpdmF0ZSBfdGFibGVDZWxscyhcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgaGlkZGVuQ29sdW1uczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICk6IHsgY2VsbHM6IHN0cmluZ1tdW107IG51bWVyaWM6IGJvb2xlYW5bXTsgZm9vdDogc3RyaW5nW10gfCBudWxsIH0ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBsaXN0Q29sdW1ucyhjb21wb25lbnQsIGRhdGEsIGNvbnRleHQuZm9ybWF0Q29udGV4dC5sb2NhbGUsIGhpZGRlbkNvbHVtbnMpO1xuICAgIGNvbnN0IGNlbGxzID0gZGF0YS5yb3dzLm1hcCgocm93KSA9PiBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB0aGlzLl9wZGZUZXh0KFxuICAgICAgZXhwb3J0Q2VsbChyb3dbY29sdW1uLmNvbHVtbl0sIGNvbHVtbiwgY29udGV4dC50aW1lem9uZSwgY29udGV4dC5mb3JtYXRDb250ZXh0LCByb3cpLFxuICAgICkpKTtcbiAgICBjb25zdCBmb290ID0gbGlzdFRvdGFsc1JvdyhkYXRhLCBjb2x1bW5zLCBjb250ZXh0LnRpbWV6b25lLCBjb250ZXh0LmZvcm1hdENvbnRleHQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNlbGxzLFxuICAgICAgbnVtZXJpYzogY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm51bWVyaWMpLFxuICAgICAgZm9vdDogZm9vdCA/IGZvb3QubWFwKChjZWxsKSA9PiB0aGlzLl9wZGZUZXh0KGNlbGwpKSA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSBhdXRvVGFibGUgb3B0aW9ucyBldmVyeSBsaXN0IHRhYmxlIHNoYXJlczogdGhlIGRyeSBydW4sIHRoZSBvbi1wYWdlXG4gIC8vIGRyYXcgYW5kIHRoZSBjb250aW51YXRpb24gcGFnZXMsIHNvIHRoZSB0aHJlZSBsYXkgYSB0YWJsZSBvdXQgYWxpa2UuIFRoZVxuICAvLyBmb250IGlzIG5hbWVkIHJhdGhlciB0aGFuIGluaGVyaXRlZCwgc2luY2UgdGhlIGRvYyBjYXJyaWVzIHdoYXRldmVyIHRoZVxuICAvLyBsYXN0IHRleHQgZHJhd24gbGVmdCBzZXQuIGJvdHRvbSBpcyB0aGUgbWFyZ2luIHVuZGVyIHRoZSB0YWJsZSwgcG9pbnRzLlxuICAvL1xuICAvLyBBIGNvbHVtbiBvZiBmb3JtYXR0ZWQgbnVtYmVycyBpcyByaWdodC1hbGlnbmVkLCBpdHMgaGVhZGluZyBhbmQgdG90YWxcbiAgLy8gdG9vOiB0aGUgYm9keSB0aHJvdWdoIGNvbHVtblN0eWxlcywgd2hpY2ggYXV0b1RhYmxlIGFwcGxpZXMgdG8gYm9keSBjZWxsc1xuICAvLyBvbmx5LCBhbmQgdGhlIGhlYWRpbmcgYW5kIHRvdGFsIHRocm91Z2ggdGhlIGRpZFBhcnNlQ2VsbCBob29rLCBvbiBldmVyeVxuICAvLyBwYWdlIHRoZSBoZWFkaW5nIHJlcGVhdHMuIEEgdG90YWxzIHJvdyAoZm9vdCkgcHJpbnRzIG9uY2UsIHVuZGVyIHRoZVxuICAvLyB0YWJsZSdzIGxhc3Qgcm93LCBib2xkIG9uIHRoZSBib3JkZXIgZ3JheS5cbiAgcHJpdmF0ZSBfdGFibGVPcHRpb25zKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgaGVhZDogUGRmVGFibGVDZWxsW11bXSxcbiAgICBudW1lcmljOiBib29sZWFuW10sXG4gICAgYm9keTogUGRmVGFibGVDZWxsW11bXSxcbiAgICB4OiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCB3OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLFxuICAgIGNvbHVtblN0eWxlcz86IFBkZkNvbHVtblN0eWxlcyxcbiAgICBmb290Pzogc3RyaW5nW10gfCBudWxsLFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXG4gICAgICBoZWFkLFxuICAgICAgYm9keSxcbiAgICAgIHN0YXJ0WSxcbiAgICAgIG1hcmdpbjogeyBsZWZ0OiB4LCByaWdodDogY29udGV4dC5wYWdlVyAtIHggLSB3LCBib3R0b20gfSxcbiAgICAgIHRhYmxlV2lkdGg6IHcsXG4gICAgICByb3dQYWdlQnJlYWs6ICdhdm9pZCcsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgZm9udDogJ2hlbHZldGljYScsXG4gICAgICAgIGZvbnRTdHlsZTogJ25vcm1hbCcsXG4gICAgICAgIGZvbnRTaXplOiBUQUJMRV9GT05UX1NJWkUsXG4gICAgICAgIGNlbGxQYWRkaW5nOiBUQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgIHRleHRDb2xvcjogJyMxZjI5MzMnLFxuICAgICAgfSxcbiAgICAgIGhlYWRTdHlsZXM6IHsgZmlsbENvbG9yOiAnIzRlNzlhNycsIHRleHRDb2xvcjogJyNmZmZmZmYnLCBmb250U3R5bGU6ICdib2xkJyB9LFxuICAgICAgYWx0ZXJuYXRlUm93U3R5bGVzOiB7IGZpbGxDb2xvcjogJyNmNWY3ZmEnIH0sXG4gICAgICAuLi4oY29sdW1uU3R5bGVzID8geyBjb2x1bW5TdHlsZXMgfSA6IHt9KSxcbiAgICAgIC4uLihmb290XG4gICAgICAgID8ge1xuICAgICAgICAgIGZvb3Q6IFtmb290XSxcbiAgICAgICAgICBzaG93Rm9vdDogJ2xhc3RQYWdlJyxcbiAgICAgICAgICBmb290U3R5bGVzOiB7IGZpbGxDb2xvcjogJyNlNGU3ZWInLCB0ZXh0Q29sb3I6ICcjMWYyOTMzJywgZm9udFN0eWxlOiAnYm9sZCcgfSxcbiAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIGRpZFBhcnNlQ2VsbDogKGhvb2s6IGFueSkgPT4ge1xuICAgICAgICBpZiAoKGhvb2suc2VjdGlvbiA9PT0gJ2hlYWQnIHx8IGhvb2suc2VjdGlvbiA9PT0gJ2Zvb3QnKSAmJiBudW1lcmljW2hvb2suY29sdW1uLmluZGV4XSkge1xuICAgICAgICAgIGhvb2suY2VsbC5zdHlsZXMuaGFsaWduID0gJ3JpZ2h0JztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSBub3RpY2UgYXMgYSB0YWJsZSByb3c6IG9uZSBpdGFsaWMgZ3JleSBjZWxsIHNwYW5uaW5nIGV2ZXJ5IGNvbHVtbi4gQVxuICAvLyBzaW5nbGUtbGluZSBub3RpY2UgaXMgZWxsaXBzaXplZCBhdCB0aGUgYm94J3Mgd2lkdGggYW5kIGtlZXBzIHRoZSBkYXRhXG4gIC8vIGNlbGxzJyBmb250IHNpemUgYW5kIHBhZGRpbmcsIHNvIGl0IGlzIG5ldmVyIHRhbGxlciB0aGFuIHRoZSBkYXRhIHJvd1xuICAvLyB3aG9zZSBwbGFjZSBpdCB0YWtlcy5cbiAgcHJpdmF0ZSBfbm90aWNlUm93KHRleHQ6IHN0cmluZywgc3BhbjogbnVtYmVyLCBzaW5nbGVMaW5lOiBib29sZWFuKTogUGRmVGFibGVDZWxsW10ge1xuICAgIHJldHVybiBbe1xuICAgICAgY29udGVudDogdGV4dCxcbiAgICAgIGNvbFNwYW46IHNwYW4sXG4gICAgICAvLyBMZWZ0LWFsaWduZWQgd2hhdGV2ZXIgdGhlIGZpcnN0IGNvbHVtbiBpczogYSBzcGFubmVkIGNlbGwgb3RoZXJ3aXNlXG4gICAgICAvLyB0YWtlcyBjb2x1bW5TdHlsZXNbMF0sIHJpZ2h0LWFsaWduZWQgd2hlbiB0aGF0IGNvbHVtbiBpcyBudW1lcmljLlxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGZvbnRTdHlsZTogJ2l0YWxpYycsXG4gICAgICAgIHRleHRDb2xvcjogTVVURURfQ09MT1IsXG4gICAgICAgIGhhbGlnbjogJ2xlZnQnLFxuICAgICAgICAuLi4oc2luZ2xlTGluZSA/IHsgb3ZlcmZsb3c6ICdlbGxpcHNpemUnIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH1dO1xuICB9XG5cbiAgLy8gTGF5cyBldmVyeSBmZXRjaGVkIHJvdyBvdXQgb25jZSBvbiBhIHNjcmF0Y2ggZG9jdW1lbnQgb2YgdGhlIHNhbWUgcGFnZVxuICAvLyBzaXplLCB3aXRoIHRoZSBvcHRpb25zIHRoZSByZWFsIGRyYXcgdXNlcywgYW5kIHJlYWRzIGJhY2sgaG93IG1hbnkgYm9keVxuICAvLyByb3dzIHRoZSBib3ggaG9sZHMgKGZpdCksIHRoZSBjb2x1bW4gd2lkdGhzIGF1dG9UYWJsZSBjaG9zZSwgd2l0aCBlYWNoXG4gIC8vIG51bWVyaWMgY29sdW1uJ3MgcmlnaHQgYWxpZ25tZW50IG1lcmdlZCBpbiwgc28gdGhlIG9uLXBhZ2UgdGFibGUgYW5kIGl0c1xuICAvLyBjb250aW51YXRpb24gcGFnZXMgY2FycnkgYm90aCwgYW5kIHRoZSBsZWFzdCByb29tIGEgcGFnZSBtdXN0IGdpdmUgdGhlXG4gIC8vIHRhYmxlIChtaW5IZWlnaHQpLiBUaGUgdG90YWxzIHJvdyBpcyBsYWlkIG91dCB0b28sIHNvIHRoZSB3aWR0aHMgaG9sZCBpdCxcbiAgLy8gYW5kIGEgdGFibGUgd2hvc2Ugcm93cyBmaXQgdGhlIGJveCBidXQgd2hvc2UgdG90YWxzIHJvdyBkb2VzIG5vdCBtb3Zlc1xuICAvLyBpdHMgbGFzdCByb3cgb24uIGZpdCAwIG1lYW5zIG5vdCBldmVuIG9uZSBib2R5IHJvdyBmaXRzIHVuZGVyIHRoZSBoZWFkLlxuICAvLyBUaGUgdGFibGUgaXMgbGFpZCBvdXQsIG5ldmVyIGRyYXduOiBkcmF3biwgYXV0b1RhYmxlIHBhZ2VzIGl0LCBhbmQgYSB0YWJsZVxuICAvLyB3aXRoIG5vIHJvb20gZm9yIGEgcm93IG9uIGEgcGFnZSBwYWdlcyB3aXRob3V0IGVuZC5cbiAgcHJpdmF0ZSBfbWVhc3VyZShcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIGhlYWQ6IFBkZlRhYmxlQ2VsbFtdW10sXG4gICAgY2VsbHM6IFBkZlRhYmxlQ2VsbFtdW10sXG4gICAgbnVtZXJpYzogYm9vbGVhbltdLFxuICAgIGZvb3Q6IHN0cmluZ1tdIHwgbnVsbCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBib3R0b206IG51bWJlcixcbiAgKTogUGRmVGFibGVNZWFzdXJlIHtcbiAgICBjb25zdCBzY3JhdGNoID0gdGhpcy5fc2NyYXRjaERvY3VtZW50KGNvbnRleHQpO1xuICAgIGNvbnN0IHRhYmxlID0gY29udGV4dC5jcmVhdGVUYWJsZShcbiAgICAgIHNjcmF0Y2gsXG4gICAgICB0aGlzLl90YWJsZU9wdGlvbnMoY29udGV4dCwgaGVhZCwgbnVtZXJpYywgY2VsbHMsIHgsIHksIHcsIGJvdHRvbSwgdW5kZWZpbmVkLCBmb290KSxcbiAgICApO1xuICAgIGNvbnN0IGNvbHVtbnM6IHsgd2lkdGg6IG51bWJlciB9W10gPSB0YWJsZS5jb2x1bW5zO1xuICAgIGNvbnN0IGNvbHVtblN0eWxlczogUGRmQ29sdW1uU3R5bGVzID0ge307XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICBjb2x1bW5TdHlsZXNbaW5kZXhdID0gbnVtZXJpY1tpbmRleF1cbiAgICAgICAgPyB7IGNlbGxXaWR0aDogY29sdW1uLndpZHRoLCBoYWxpZ246ICdyaWdodCcgfVxuICAgICAgICA6IHsgY2VsbFdpZHRoOiBjb2x1bW4ud2lkdGggfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhlYWRIZWlnaHQgPSB0YWJsZS5nZXRIZWFkSGVpZ2h0KHRhYmxlLmNvbHVtbnMpO1xuICAgIGNvbnN0IGZvb3RIZWlnaHQgPSB0YWJsZS5nZXRGb290SGVpZ2h0KHRhYmxlLmNvbHVtbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZpdDogdGhpcy5fZml0dGluZ1Jvd3ModGFibGUsIHkgKyBoZWFkSGVpZ2h0LCBjb250ZXh0LnBhZ2VIIC0gYm90dG9tLCBmb290SGVpZ2h0KSxcbiAgICAgIGNvbHVtblN0eWxlcyxcbiAgICAgIC8vIE9uZSBsaW5lIG9mIGEgcm93OiB0aGUgbGluZSBhdXRvVGFibGUgbXVzdCBwbGFjZSBvbiBhIHBhZ2UgYmVmb3JlIGl0XG4gICAgICAvLyBtb3ZlcyBvbiwgYXQgdGhlIHRhYmxlJ3MgZm9udCBzaXplIGFuZCBwYWRkaW5nLlxuICAgICAgbWluSGVpZ2h0OiBoZWFkSGVpZ2h0ICsgZm9vdEhlaWdodCArIFRBQkxFX0ZPTlRfU0laRSAqIHNjcmF0Y2guZ2V0TGluZUhlaWdodEZhY3RvcigpICsgMiAqIFRBQkxFX0NFTExfUEFERElORyxcbiAgICB9O1xuICB9XG5cbiAgLy8gSG93IG1hbnkgb2YgYSBsYWlkLW91dCB0YWJsZSdzIGJvZHkgcm93cyBmaXQgd2hvbGUgYmV0d2VlbiB0b3AgYW5kXG4gIC8vIGJvdHRvbSwgYXMgYXV0b1RhYmxlIGRlY2lkZXMgaXQ6IGEgcm93IGZpdHMgd2hlbiBpdHMgdGFsbGVzdCBjZWxsIChvbmUgdGhhdFxuICAvLyBzcGFucyByb3dzIGNvdW50cyBhbGwgb2YgdGhlbSkgZW5kcyBieSBib3R0b20sIHRoZSBsYXN0IHJvdydzIGJ5IHRoZSB0b3BcbiAgLy8gb2YgdGhlIHRvdGFscyByb3cgKGZvb3RIZWlnaHQpIHVuZGVyIGl0LCBhbmQgdGhlIG5leHQgcm93IHN0YXJ0cyB3aGVyZSBpdFxuICAvLyBlbmRzLlxuICBwcml2YXRlIF9maXR0aW5nUm93cyh0YWJsZTogYW55LCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIGZvb3RIZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGN1cnNvciA9IHRvcDtcbiAgICBsZXQgZml0ID0gMDtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCByb3ddIG9mIHRhYmxlLmJvZHkuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBsaW1pdCA9IGluZGV4ID09PSB0YWJsZS5ib2R5Lmxlbmd0aCAtIDEgPyBib3R0b20gLSBmb290SGVpZ2h0IDogYm90dG9tO1xuICAgICAgaWYgKGN1cnNvciArIHJvdy5nZXRNYXhDZWxsSGVpZ2h0KHRhYmxlLmNvbHVtbnMpID4gbGltaXQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnNvciArPSByb3cuaGVpZ2h0O1xuICAgICAgZml0ICs9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpdDtcbiAgfVxuXG4gIC8vIEEgYmxhbmsgZG9jdW1lbnQgb2YgdGhlIGV4cG9ydCdzIHBhZ2Ugc2l6ZSwgZm9yIGxheWluZyBhIHRhYmxlIG91dCB0byBzZWVcbiAgLy8gd2hhdCBmaXRzIGJlZm9yZSB0aGUgcmVhbCBvbmUgaXMgZHJhd24gb24uXG4gIHByaXZhdGUgX3NjcmF0Y2hEb2N1bWVudChjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0KTogYW55IHtcbiAgICByZXR1cm4gbmV3IGNvbnRleHQuanNQREYoe1xuICAgICAgdW5pdDogJ3B0JyxcbiAgICAgIGZvcm1hdDogW2NvbnRleHQucGFnZVcsIGNvbnRleHQucGFnZUhdLFxuICAgICAgb3JpZW50YXRpb246IGNvbnRleHQub3JpZW50YXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyBEcmF3cyBhbiBvbi1wYWdlIHRhYmxlIChhIGxpc3Qncywgb3IgYSB0ZXh0IGJsb2NrJ3MpIG9uIGl0cyBwYWdlIGFsb25lLlxuICAvLyBUaGF0IGlzIGFsbCBpdCBzaG91bGQgbmVlZDogdGhlIG1lYXN1cmVkIGZpdCwgdGhlIGlkZW50aWNhbCBjb2x1bW4gd2lkdGhzXG4gIC8vIGFuZCBhIHNpbmdsZS1saW5lIG5vdGljZSBrZWVwIHRoZSB0YWJsZSBpbnNpZGUgaXRzIGJveC4gU2hvdWxkIGF1dG9UYWJsZVxuICAvLyBzdGFydCBhbm90aGVyIHBhZ2UgYW55d2F5LCB0aGUgdGFibGUgc3RvcHMgdGhlcmUgYW5kIHRoZSBwYWdlIGdvZXMsIHNvIGFcbiAgLy8gc3RyYXkgcGFnZSBjYW4gbmV2ZXIgY2F0Y2ggdGhlIHJlcG9ydCBwYWdlJ3MgcmVtYWluaW5nIGNvbXBvbmVudHMsIG5vciBhXG4gIC8vIHRhYmxlIHdpdGggbm8gcm9vbSBmb3IgYSByb3cgYWRkIHBhZ2VzIHdpdGhvdXQgZW5kLiBSZXR1cm5zIHdoZXRoZXIgdGhlXG4gIC8vIHRhYmxlIHdhcyBkcmF3biB3aG9sZS5cbiAgcHJpdmF0ZSBfZHJhd1RhYmxlKGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBkb2MgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgcGFnZSA9IGRvYy5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlTnVtYmVyO1xuICAgIGNvbnN0IHBhZ2VzID0gZG9jLmdldE51bWJlck9mUGFnZXMoKTtcbiAgICBsZXQgd2hvbGUgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnRleHQuYXV0b1RhYmxlKGRvYywge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAvLyBGaXJlcyBhcyB0aGUgdGFibGUgc3RhcnRzIGl0cyBvd24gcGFnZSwgYW5kIGFnYWluIG9uIGVhY2ggcGFnZSBpdFxuICAgICAgICAvLyBtb3ZlcyB0byAoYW4gZXhpc3RpbmcgcGFnZSwgc3VjaCBhcyBhIGNvbnRpbnVhdGlvbiBwYWdlIHVuZGVyIGFcbiAgICAgICAgLy8gaGVhZGVyLCBhcyB3ZWxsIGFzIGEgbmV3IG9uZSkuXG4gICAgICAgIHdpbGxEcmF3UGFnZTogKCkgPT4ge1xuICAgICAgICAgIGlmIChkb2MuZ2V0Q3VycmVudFBhZ2VJbmZvKCkucGFnZU51bWJlciAhPT0gcGFnZSkge1xuICAgICAgICAgICAgdGhyb3cgU1RSQVlfUEFHRTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yICE9PSBTVFJBWV9QQUdFKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICB3aG9sZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHdoaWxlIChkb2MuZ2V0TnVtYmVyT2ZQYWdlcygpID4gcGFnZXMpIHtcbiAgICAgIGRvYy5kZWxldGVQYWdlKGRvYy5nZXROdW1iZXJPZlBhZ2VzKCkpO1xuICAgIH1cblxuICAgIGRvYy5zZXRQYWdlKHBhZ2UpO1xuXG4gICAgcmV0dXJuIHdob2xlO1xuICB9XG5cbiAgLy8gVGhlIHJvd3Mgb2Ygb25lIGxpc3QgdGhhdCBkaWQgbm90IGZpdCBpdHMgYm94LCBvbiBwYWdlcyBhcHBlbmRlZCBhZnRlclxuICAvLyB0aGUgcmVwb3J0IHBhZ2UsIGVhY2ggd2l0aCB0aGUgcGFnZSdzIGhlYWRlciBhbmQgZm9vdGVyLCB0aGUgdGFibGUnc1xuICAvLyB0aXRsZSBhbmQgaXRzIGhlYWQgYWdhaW4sIHRoZSB0aXRsZSdzIHRva2VucyBmaWxsZWQgd2l0aCB0aGUgcGh5c2ljYWxcbiAgLy8gcGFnZSBpdCBpcyBkcmF3biBvbi4gVGhlIHRhYmxlIHNpdHMgQ09OVElOVUFUSU9OX0dBUCBpbnNpZGUgdGhlIGJhbmRzLlxuICAvLyBSZXR1cm5zIHRoZSBwaHlzaWNhbCBwYWdlIGNvdW50ZXIgYWZ0ZXIgdGhlc2UgcGFnZXMuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlckNvbnRpbnVhdGlvbihcbiAgICBjb250ZXh0OiBQZGZFeHBvcnRDb250ZXh0LFxuICAgIHBhZ2U6IFJlcG9ydFBhZ2UsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBwYWdlTnVtYmVyOiBudW1iZXIsXG4gICAgb3ZlcmZsb3c6IFBkZlRhYmxlT3ZlcmZsb3csXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgeyBkb2MgfSA9IGNvbnRleHQ7XG4gICAgY29uc3QgeyB0b3AsIGJvdHRvbSB9ID0gdGhpcy5fY29udGludWF0aW9uTWFyZ2lucyhjb250ZXh0LCBwYWdlKTtcbiAgICBjb25zdCB7IHgsIHcgfSA9IG92ZXJmbG93O1xuICAgIGNvbnN0IGJvZHk6IFBkZlRhYmxlQ2VsbFtdW10gPSBvdmVyZmxvdy5vbWl0dGVkID4gMFxuICAgICAgPyBbLi4ub3ZlcmZsb3cucm93cywgdGhpcy5fbm90aWNlUm93KG1vcmVSb3dzTm90aWNlKG92ZXJmbG93Lm9taXR0ZWQpLCBvdmVyZmxvdy5udW1lcmljLmxlbmd0aCwgZmFsc2UpXVxuICAgICAgOiBvdmVyZmxvdy5yb3dzO1xuICAgIC8vIFRoZSBkb2N1bWVudCdzIHBhZ2VzIHRoZSB0YWJsZSBkcmF3cyBvbiwgaW4gb3JkZXIuXG4gICAgY29uc3QgcGFnZXM6IG51bWJlcltdID0gW107XG5cbiAgICBkb2MuYWRkUGFnZShbY29udGV4dC5wYWdlVywgY29udGV4dC5wYWdlSF0sIGNvbnRleHQub3JpZW50YXRpb24pO1xuICAgIGNvbnRleHQuYXV0b1RhYmxlKGRvYywge1xuICAgICAgLi4udGhpcy5fdGFibGVPcHRpb25zKFxuICAgICAgICBjb250ZXh0LCBvdmVyZmxvdy5oZWFkLCBvdmVyZmxvdy5udW1lcmljLCBib2R5LCB4LCB0b3AgKyBUSVRMRV9ILCB3LCBib3R0b20sIG92ZXJmbG93LmNvbHVtblN0eWxlcyxcbiAgICAgICAgb3ZlcmZsb3cuZm9vdCxcbiAgICAgICksXG4gICAgICBtYXJnaW46IHsgdG9wOiB0b3AgKyBUSVRMRV9ILCBib3R0b20sIGxlZnQ6IHgsIHJpZ2h0OiBjb250ZXh0LnBhZ2VXIC0geCAtIHcgfSxcbiAgICAgIHNob3dIZWFkOiAnZXZlcnlQYWdlJyxcbiAgICAgIC8vIEZpcmVzIG9uIGV2ZXJ5IHBhZ2UgdGhlIHRhYmxlIGRyYXdzIG9uLCB0aGUgZmlyc3QgaW5jbHVkZWQuXG4gICAgICB3aWxsRHJhd1BhZ2U6ICgpID0+IHtcbiAgICAgICAgcGFnZXMucHVzaChkb2MuZ2V0Q3VycmVudFBhZ2VJbmZvKCkucGFnZU51bWJlcik7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX3Rva2Vucyhjb250ZXh0LCBwYWdlLCBpbmRleCwgcGFnZU51bWJlciArIHBhZ2VzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFRpdGxlKFxuICAgICAgICAgIGRvYyxcbiAgICAgICAgICB0aGlzLl9jb250aW51ZWRUaXRsZShvdmVyZmxvdy5jb21wb25lbnQsIHRva2Vucywgb3ZlcmZsb3cuc2VhcmNoLCBvdmVyZmxvdy5jcnVtYnMsIG92ZXJmbG93LmZpbHRlcmVkKSxcbiAgICAgICAgICB4LFxuICAgICAgICAgIHRvcCxcbiAgICAgICAgICB3LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuX3JlbmRlckNvbnRpbnVhdGlvbk1hc3RlcnMoY29udGV4dCwgcGFnZSwgaW5kZXgsIHBhZ2VOdW1iZXIsIHBhZ2VzKTtcblxuICAgIHJldHVybiBwYWdlTnVtYmVyICsgcGFnZXMubGVuZ3RoO1xuICB9XG5cbiAgLy8gVGhlIGhlYWRlciBhbmQgZm9vdGVyIG9mIGVhY2ggY29udGludWF0aW9uIHBhZ2UsIG51bWJlcmVkIG9uIGZyb21cbiAgLy8gcGFnZU51bWJlci4gVGhleSBnbyBvbiBvbmNlIHRoZSB0YWJsZSBpcyBkcmF3biwgc2luY2UgYSB0ZXh0IGJsb2NrIHdpdGggYVxuICAvLyB0YWJsZSBpcyBtZWFzdXJlZCBiZWZvcmUgaXQgaXMgZHJhd24sIHdoaWNoIGF1dG9UYWJsZSdzIHBhZ2UgaG9vayBjYW5ub3RcbiAgLy8gd2FpdCBmb3I7IHRoZXkgc2l0IGluIHRoZSBiYW5kcywgY2xlYXIgb2YgdGhlIHRhYmxlLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJDb250aW51YXRpb25NYXN0ZXJzKFxuICAgIGNvbnRleHQ6IFBkZkV4cG9ydENvbnRleHQsXG4gICAgcGFnZTogUmVwb3J0UGFnZSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHBhZ2VOdW1iZXI6IG51bWJlcixcbiAgICBwYWdlczogbnVtYmVyW10sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZG9jIH0gPSBjb250ZXh0O1xuXG4gICAgZm9yIChjb25zdCBbb2Zmc2V0LCBkb2N1bWVudFBhZ2VdIG9mIHBhZ2VzLmVudHJpZXMoKSkge1xuICAgICAgZG9jLnNldFBhZ2UoZG9jdW1lbnRQYWdlKTtcbiAgICAgIGF3YWl0IHRoaXMuX3JlbmRlck1hc3Rlcihjb250ZXh0LCBwYWdlLCB0aGlzLl90b2tlbnMoY29udGV4dCwgcGFnZSwgaW5kZXgsIHBhZ2VOdW1iZXIgKyBvZmZzZXQgKyAxKSk7XG4gICAgfVxuXG4gICAgZG9jLnNldFBhZ2UoZG9jLmdldE51bWJlck9mUGFnZXMoKSk7XG4gIH1cblxuICAvLyBUaGUgbWFyZ2lucyBhIGNvbnRpbnVhdGlvbiB0YWJsZSBrZWVwcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiBpdHNcbiAgLy8gcGFnZXMsIHVuZGVyIGl0cyB0aXRsZSdzIHN0cmlwIGF0IHRoZSB0b3AuXG4gIHByaXZhdGUgX2NvbnRpbnVhdGlvbk1hcmdpbnMoY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCwgcGFnZTogUmVwb3J0UGFnZSk6IHsgdG9wOiBudW1iZXI7IGJvdHRvbTogbnVtYmVyIH0ge1xuICAgIGNvbnN0IGJhbmRzID0gcGFnZS5tYXN0ZXJIaWRkZW4gPyBOT19CQU5EUyA6IGNvbnRleHQucmVwb3J0LmNvbmZpZz8uaGVhZGVyRm9vdGVyID8/IE5PX0JBTkRTO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogdGhpcy5fY29udGludWF0aW9uTWFyZ2luKGJhbmRzLmhlYWRlckhlaWdodCksXG4gICAgICBib3R0b206IHRoaXMuX2NvbnRpbnVhdGlvbk1hcmdpbihiYW5kcy5mb290ZXJIZWlnaHQpLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgaGVpZ2h0IGEgY29udGludWF0aW9uIHBhZ2UgZ2l2ZXMgaXRzIHRhYmxlOiBiZXR3ZWVuIGl0cyBtYXJnaW5zLCB1bmRlclxuICAvLyB0aGUgdGl0bGUuXG4gIHByaXZhdGUgX2NvbnRpbnVhdGlvblJvb20oY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCwgcGFnZTogUmVwb3J0UGFnZSk6IG51bWJlciB7XG4gICAgY29uc3QgeyB0b3AsIGJvdHRvbSB9ID0gdGhpcy5fY29udGludWF0aW9uTWFyZ2lucyhjb250ZXh0LCBwYWdlKTtcblxuICAgIHJldHVybiBjb250ZXh0LnBhZ2VIIC0gdG9wIC0gVElUTEVfSCAtIGJvdHRvbTtcbiAgfVxuXG4gIC8vIFRoZSBtYXJnaW4gYSBjb250aW51YXRpb24gdGFibGUga2VlcHMgZnJvbSBvbmUgZWRnZTogaW5zaWRlIHRoZSBiYW5kIHdoZW5cbiAgLy8gdGhlIHBhZ2UgaGFzIG9uZS5cbiAgcHJpdmF0ZSBfY29udGludWF0aW9uTWFyZ2luKGJhbmQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGJhbmQgPyBiYW5kICogUFQgKyBDT05USU5VQVRJT05fR0FQIDogTk9fQkFORF9NQVJHSU47XG4gIH1cblxuICBwcml2YXRlIF9jb250aW51ZWRUaXRsZShcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQsXG4gICAgc2VhcmNoPzogc3RyaW5nLFxuICAgIGNydW1icz86IHN0cmluZ1tdLFxuICAgIGZpbHRlcmVkPzogYm9vbGVhbixcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aXRsZSA9IGV4cG9ydFRpdGxlKGNvbXBvbmVudCwgdG9rZW5zLCBzZWFyY2gsIGNydW1icywgZmlsdGVyZWQpO1xuXG4gICAgcmV0dXJuIHRpdGxlID8gYCR7dGl0bGV9IChjb250aW51ZWQpYCA6ICdDb250aW51ZWQnO1xuICB9XG5cbiAgLy8gQSBLUEkgdGlsZTogdGhlIGNhcmQgdGhlIHNjcmVlbiBkcmF3cyAoa3BpLWNhcmQudHMgZGVjaWRlcyBldmVyeSBsaW5lKSxcbiAgLy8gc3RhY2tlZCBhbmQgY2VudGVyZWQgaW4gdGhlIGJvZHkuIEEgY2FyZCB3aXRoIG9ubHkgaXRzIHZhbHVlIGFuZCBsYWJlbFxuICAvLyBrZWVwcyB0aGUgdGlsZSdzIGxvbmctc3RhbmRpbmcgbGF5b3V0LlxuICBwcml2YXRlIF9yZW5kZXJLcGkoXG4gICAgY29udGV4dDogUGRmRXhwb3J0Q29udGV4dCxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7IGRvYyB9ID0gY29udGV4dDtcbiAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbXBvbmVudC5jb25maWcgYXMgS3BpQ29uZmlnO1xuICAgIGNvbnN0IHZpZXcgPSBrcGlDYXJkVmlldyhjb25maWcsIGl0ZW0uZGF0YSwgeyBmb3JtYXQ6IGNvbnRleHQuZm9ybWF0Q29udGV4dCwgdGltZXpvbmU6IGNvbnRleHQudGltZXpvbmUgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9wZGZUZXh0KHZpZXcudmFsdWUpO1xuICAgIGNvbnN0IG5vdGVzID0gZXhwb3J0Tm90ZUxpbmVzKGl0ZW0sIGNvbnRleHQudGltZXpvbmUsIGNvbnRleHQuZm9ybWF0Q29udGV4dC5sb2NhbGUpO1xuXG4gICAgaWYgKCFrcGlDYXJkSGFzRXh0cmFzKHZpZXcsIG5vdGVzKSkge1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoMjYpO1xuICAgICAgZG9jLnNldFRleHRDb2xvcignIzFmMjkzMycpO1xuICAgICAgZG9jLnRleHQodmFsdWUsIHggKyB3IC8gMiwgeSArIGggLyAyLCB7IGFsaWduOiAnY2VudGVyJyB9KTtcblxuICAgICAgaWYgKHZpZXcubGFiZWwpIHtcbiAgICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICAgICAgZG9jLnNldEZvbnRTaXplKDkpO1xuICAgICAgICBkb2Muc2V0VGV4dENvbG9yKE1VVEVEX0NPTE9SKTtcbiAgICAgICAgZG9jLnRleHQodmlldy5sYWJlbCwgeCArIHcgLyAyLCB5ICsgaCAvIDIgKyAxNiwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBIHRpbGUgdG9vIHNob3J0IGZvciB0aGUgY2FyZCdzIGxpbmVzIHNocmlua3MgdGhlbSBhbGwgYWxpa2UuXG4gICAgY29uc3QgcGFydHMgPSBrcGlFeHBvcnRQYXJ0cyh2aWV3LCBub3RlcywgaCwgS1BJX0hFSUdIVFMpO1xuICAgIGNvbnN0IGhlaWdodHMgPSBzY2FsZWRLcGlIZWlnaHRzKEtQSV9IRUlHSFRTLCBwYXJ0cy5zY2FsZSk7XG4gICAgbGV0IHRvcCA9IHkgKyBNYXRoLm1heCgwLCAoaCAtIGtwaUV4cG9ydEhlaWdodCh2aWV3LCBwYXJ0cywgaGVpZ2h0cykpIC8gMik7XG5cbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMjYgKiBwYXJ0cy5zY2FsZSk7XG4gICAgZG9jLnNldFRleHRDb2xvcignIzFmMjkzMycpO1xuICAgIGRvYy50ZXh0KHZhbHVlLCB4ICsgdyAvIDIsIHRvcCArIEtQSV9WQUxVRV9CQVNFTElORSAqIHBhcnRzLnNjYWxlLCB7IGFsaWduOiAnY2VudGVyJyB9KTtcbiAgICB0b3AgKz0gaGVpZ2h0cy52YWx1ZTtcblxuICAgIGlmICh2aWV3LmxhYmVsKSB7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgZG9jLnNldEZvbnRTaXplKDkgKiBwYXJ0cy5zY2FsZSk7XG4gICAgICBkb2Muc2V0VGV4dENvbG9yKE1VVEVEX0NPTE9SKTtcbiAgICAgIGRvYy50ZXh0KHRoaXMuX2ZpdChkb2MsIHRoaXMuX3BkZlRleHQodmlldy5sYWJlbCksIHcpLCB4ICsgdyAvIDIsIHRvcCArIDkgKiBwYXJ0cy5zY2FsZSwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy5sYWJlbDtcbiAgICB9XG5cbiAgICBpZiAocGFydHMuZGVsdGEgJiYgdmlldy5kZWx0YSkge1xuICAgICAgdGhpcy5fa3BpRGVsdGEoZG9jLCB2aWV3LmRlbHRhLCB4LCB0b3AsIHcsIHBhcnRzLnNjYWxlKTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLmRlbHRhO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy53aW5kb3cpIHtcbiAgICAgIHRoaXMuX3NtYWxsTGluZShkb2MsIHRoaXMuX3BkZlRleHQodmlldy53aW5kb3cpLCB4LCB0b3AsIHcsICdjZW50ZXInLCAnbm9ybWFsJywgcGFydHMuc2NhbGUpO1xuICAgICAgdG9wICs9IGhlaWdodHMud2luZG93O1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy50YXJnZXQgJiYgdmlldy50YXJnZXQpIHtcbiAgICAgIHRoaXMuX2twaVRhcmdldChkb2MsIHZpZXcudGFyZ2V0LCB4LCB0b3AsIHcpO1xuICAgICAgdG9wICs9IGhlaWdodHMudGFyZ2V0O1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5zcGFya2xpbmUgJiYgdmlldy5zcGFya2xpbmUpIHtcbiAgICAgIHRoaXMuX2twaVNwYXJrbGluZShkb2MsIHZpZXcuc3BhcmtsaW5lLnZhbHVlcywgdmlldy5zcGFya2xpbmUucGFydGlhbCwgeCwgdG9wLCB3KTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLnNwYXJrbGluZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgcGFydHMubm90ZXMpIHtcbiAgICAgIHRoaXMuX3NtYWxsTGluZShkb2MsIHRoaXMuX3BkZlRleHQobGluZSksIHgsIHRvcCwgdywgJ2NlbnRlcicsICdpdGFsaWMnKTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLm5vdGU7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGRlbHRhIHJvdywgY2VudGVyZWQgYXMgb25lIGdyb3VwOiBhIHRyaWFuZ2xlIHBvaW50aW5nIHRoZSB3YXkgdGhlXG4gIC8vIHZhbHVlIG1vdmVkIChub25lIHdoZW4gdGhlIHNob3duIGNoYW5nZSByb3VuZHMgdG8gemVybykgYW5kIHRoZSBjaGFuZ2UgaW5cbiAgLy8gdGhlIGNvbG9yIG9mIHdoYXQgaXQgbWVhbnMsIHRoZW4gd2hhdCBpdCBpcyBjb21wYXJlZCB3aXRoIGluIGdyZXkuXG4gIHByaXZhdGUgX2twaURlbHRhKGRvYzogYW55LCBkZWx0YTogS3BpQ2FyZERlbHRhLCB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIsIHNjYWxlID0gMSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbG9yID0gYCMke1JFUE9SVF9LUElfQ0hBTkdFX0NPTE9SU1tkZWx0YS50b25lXX1gO1xuICAgIGNvbnN0IGNoYW5nZSA9IHRoaXMuX3BkZlRleHQoZGVsdGEudGV4dCk7XG4gICAgY29uc3Qgc2l6ZSA9IEtQSV9ERUxUQV9TSVpFICogc2NhbGU7XG4gICAgY29uc3Qgc2lkZSA9IEtQSV9BUlJPVyAqIHNjYWxlO1xuICAgIGNvbnN0IGFycm93ID0gZGVsdGEudHJlbmQgPT09IFJlcG9ydEtwaVRyZW5kLkZsYXQgPyAwIDogc2lkZSArIEtQSV9BUlJPV19HQVAgKiBzY2FsZTtcblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgIGRvYy5zZXRGb250U2l6ZShzaXplKTtcbiAgICBjb25zdCBjaGFuZ2VXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoY2hhbmdlKTtcblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gICAgY29uc3QgY29tcGFyZWQgPSBkZWx0YS5jb21wYXJlZFxuICAgICAgPyB0aGlzLl9maXQoZG9jLCBgICR7dGhpcy5fcGRmVGV4dChkZWx0YS5jb21wYXJlZCl9YCwgTWF0aC5tYXgoMCwgdyAtIGFycm93IC0gY2hhbmdlV2lkdGgpKVxuICAgICAgOiAnJztcbiAgICBjb25zdCB3aWR0aCA9IGFycm93ICsgY2hhbmdlV2lkdGggKyAoY29tcGFyZWQgPyBkb2MuZ2V0VGV4dFdpZHRoKGNvbXBhcmVkKSA6IDApO1xuICAgIGNvbnN0IGJhc2VsaW5lID0gdG9wICsgc2l6ZTtcbiAgICBsZXQgbGVmdCA9IHggKyBNYXRoLm1heCgwLCAodyAtIHdpZHRoKSAvIDIpO1xuXG4gICAgaWYgKGFycm93KSB7XG4gICAgICBjb25zdCB1cCA9IGRlbHRhLnRyZW5kID09PSBSZXBvcnRLcGlUcmVuZC5VcDtcbiAgICAgIGNvbnN0IHRpcCA9IHVwID8gYmFzZWxpbmUgLSBzaWRlIDogYmFzZWxpbmU7XG4gICAgICBjb25zdCBiYXNlID0gdXAgPyBiYXNlbGluZSA6IGJhc2VsaW5lIC0gc2lkZTtcblxuICAgICAgZG9jLnNldEZpbGxDb2xvcihjb2xvcik7XG4gICAgICBkb2MudHJpYW5nbGUobGVmdCwgYmFzZSwgbGVmdCArIHNpZGUsIGJhc2UsIGxlZnQgKyBzaWRlIC8gMiwgdGlwLCAnRicpO1xuICAgICAgbGVmdCArPSBhcnJvdztcbiAgICB9XG5cbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKGNvbG9yKTtcbiAgICBkb2MudGV4dChjaGFuZ2UsIGxlZnQsIGJhc2VsaW5lKTtcblxuICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICAgIGRvYy5zZXRUZXh0Q29sb3IoTVVURURfQ09MT1IpO1xuICAgICAgZG9jLnRleHQoY29tcGFyZWQsIGxlZnQgKyBjaGFuZ2VXaWR0aCwgYmFzZWxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSB0YXJnZXQgbGluZSAoJ0dvYWw6ICQxLDAwMCDCtyA1NiUgb2YgdGFyZ2V0JykgYW5kLCB3aGVuIHRoZSBzZXJ2ZXIgc2VudFxuICAvLyB0aGUgcHJvZ3Jlc3MsIGEgYmFyIGZpbGxlZCB0aGF0IGZhcjogZ3JlZW4gb25jZSB0aGUgdGFyZ2V0IGlzIG1ldC5cbiAgcHJpdmF0ZSBfa3BpVGFyZ2V0KGRvYzogYW55LCB0YXJnZXQ6IEtwaUNhcmRUYXJnZXQsIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRleHQgPSB0YXJnZXQucHJvZ3Jlc3MgPyBgJHt0YXJnZXQudGV4dH0gwrcgJHt0YXJnZXQucHJvZ3Jlc3N9YCA6IHRhcmdldC50ZXh0O1xuXG4gICAgdGhpcy5fc21hbGxMaW5lKGRvYywgdGhpcy5fcGRmVGV4dCh0ZXh0KSwgeCwgdG9wLCB3LCAnY2VudGVyJywgJ25vcm1hbCcpO1xuXG4gICAgaWYgKHRhcmdldC5maWxsID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFyVyA9IE1hdGgubWluKHcgKiAwLjYsIEtQSV9CQVJfVyk7XG4gICAgY29uc3QgYmFyWCA9IHggKyAodyAtIGJhclcpIC8gMjtcbiAgICBjb25zdCBiYXJZID0gdG9wICsgTk9URV9MSU5FX0ggKyAxO1xuXG4gICAgZG9jLnNldEZpbGxDb2xvcihLUElfVFJBQ0tfQ09MT1IpO1xuICAgIGRvYy5yZWN0KGJhclgsIGJhclksIGJhclcsIEtQSV9CQVJfSCwgJ0YnKTtcblxuICAgIGlmICh0YXJnZXQuZmlsbCA+IDApIHtcbiAgICAgIGRvYy5zZXRGaWxsQ29sb3IoYCMke1JFUE9SVF9LUElfQ0hBTkdFX0NPTE9SU1t0YXJnZXQudG9uZV19YCk7XG4gICAgICBkb2MucmVjdChiYXJYLCBiYXJZLCBiYXJXICogdGFyZ2V0LmZpbGwsIEtQSV9CQVJfSCwgJ0YnKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgc3BhcmtsaW5lIGluIGEgYm94IHVuZGVyIHRoZSBjYXJkJ3MgbGluZXMsIGFzIHRoZSBzY3JlZW4gZHJhd3MgaXRcbiAgLy8gKGtwaVNwYXJrbGluZUdlb21ldHJ5LCBhIDAtMTAwIGJveCk6IGEgdmVjdG9yIGxpbmUgcGVyIHJ1biBvZiB2YWx1ZXMsIGFcbiAgLy8gZG90IGZvciBhIGxvbmUgdmFsdWUsIGFuZCB0aGUgbGFzdCBwb2ludCdzIG1hcmtlciwgaG9sbG93IHdoaWxlIGl0cyBwZXJpb2RcbiAgLy8gaXMgcGFydGlhbC5cbiAgcHJpdmF0ZSBfa3BpU3BhcmtsaW5lKFxuICAgIGRvYzogYW55LFxuICAgIHZhbHVlczogKG51bWJlciB8IG51bGwpW10sXG4gICAgcGFydGlhbDogYm9vbGVhbixcbiAgICB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGdlb21ldHJ5ID0ga3BpU3BhcmtsaW5lR2VvbWV0cnkodmFsdWVzLCBwYXJ0aWFsKTtcbiAgICBjb25zdCBib3hXID0gTWF0aC5taW4odyAqIDAuNywgS1BJX1NQQVJLTElORV9XKTtcbiAgICBjb25zdCBib3hIID0gS1BJX0hFSUdIVFMuc3BhcmtsaW5lIC0gMiAqIEtQSV9TUEFSS0xJTkVfSU5TRVQ7XG4gICAgY29uc3QgbGVmdCA9IHggKyAodyAtIGJveFcpIC8gMjtcbiAgICBjb25zdCBhdCA9IChwb2ludDogS3BpU3BhcmtsaW5lUG9pbnQpID0+ICh7XG4gICAgICB4OiBsZWZ0ICsgcG9pbnQueCAqIGJveFcgLyAxMDAsXG4gICAgICB5OiB0b3AgKyBLUElfU1BBUktMSU5FX0lOU0VUICsgcG9pbnQueSAqIGJveEggLyAxMDAsXG4gICAgfSk7XG4gICAgY29uc3QgY29sb3IgPSBgIyR7UkVQT1JUX0tQSV9TUEFSS0xJTkVfQ09MT1J9YDtcblxuICAgIGRvYy5zZXREcmF3Q29sb3IoY29sb3IpO1xuICAgIGRvYy5zZXRGaWxsQ29sb3IoY29sb3IpO1xuICAgIGRvYy5zZXRMaW5lV2lkdGgoMSk7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZ2VvbWV0cnkubGluZXMpIHtcbiAgICAgIGNvbnN0IHBvaW50cyA9IGxpbmUuc3BsaXQoJyAnKS5tYXAoKHBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgW3B4LCBweV0gPSBwYWlyLnNwbGl0KCcsJykubWFwKE51bWJlcik7XG5cbiAgICAgICAgcmV0dXJuIGF0KHsgeDogcHgsIHk6IHB5IH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGVwcyA9IHBvaW50cy5zbGljZSgxKS5tYXAoKHBvaW50LCBpbmRleCkgPT4gW3BvaW50LnggLSBwb2ludHNbaW5kZXhdLngsIHBvaW50LnkgLSBwb2ludHNbaW5kZXhdLnldKTtcblxuICAgICAgZG9jLmxpbmVzKHN0ZXBzLCBwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnksIFsxLCAxXSwgJ1MnLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkb3Qgb2YgZ2VvbWV0cnkuZG90cykge1xuICAgICAgY29uc3QgcG9pbnQgPSBhdChkb3QpO1xuICAgICAgZG9jLmNpcmNsZShwb2ludC54LCBwb2ludC55LCBLUElfRE9UX1IsICdGJyk7XG4gICAgfVxuXG4gICAgaWYgKGdlb21ldHJ5Lmxhc3QpIHtcbiAgICAgIGNvbnN0IHBvaW50ID0gYXQoZ2VvbWV0cnkubGFzdCk7XG5cbiAgICAgIGlmIChnZW9tZXRyeS5sYXN0LmhvbGxvdykge1xuICAgICAgICBkb2Muc2V0RmlsbENvbG9yKCcjZmZmZmZmJyk7XG4gICAgICAgIGRvYy5jaXJjbGUocG9pbnQueCwgcG9pbnQueSwgS1BJX0RPVF9SLCAnRkQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvYy5jaXJjbGUocG9pbnQueCwgcG9pbnQueSwgS1BJX0RPVF9SLCAnRicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEEgZm9ybWF0dGVkIHZhbHVlIGFzIGpzUERGIGNhbiBkcmF3IGl0LiBJdHMgc3RhbmRhcmQgZm9udHMgd3JpdGUgdGV4dCBpblxuICAvLyBXaW5BbnNpLCB3aGljaCBoYXMgdGhlIG5vLWJyZWFrIHNwYWNlIChVKzAwQTAsIGZyLUNBJ3MgZGlnaXQgZ3JvdXBpbmcpIGJ1dFxuICAvLyBub3QgdGhlIG5hcnJvdyBvbmUgKFUrMjAyRiwgd2hpY2ggb3RoZXIgbG9jYWxlcyBncm91cCBhbmQgc3BhY2Ugd2l0aCksIHRoZVxuICAvLyB0aGluIGFuZCBoYWlyIHNwYWNlcyAoVSsyMDA5LCBVKzIwMEEsIHdoaWNoIEludGwgcHV0cyBhcm91bmQgYSBkYXRlXG4gIC8vIHJhbmdlJ3MgZGFzaDogJ1NlcCAxIOKAkyAzMCwgMjAyNicpLCB0aGUgbWludXMgc2lnbiAoVSsyMjEyLCBzb21lIGxvY2FsZXMnXG4gIC8vIG5lZ2F0aXZlIHNpZ24pIG9yIGEgcmFuayBjaGFuZ2UncyB0cmlhbmdsZXM6IGVhY2ggd291bGQgcHJpbnQgYXMgc3RyYXlcbiAgLy8gZ2x5cGhzLiBUaGUgbmFycm93IHNwYWNlIGJlY29tZXMgYSBuby1icmVhayBzcGFjZSwgc28gYSBudW1iZXIgc3RpbGwgbmV2ZXJcbiAgLy8gd3JhcHMgYWNyb3NzIGEgbGluZTsgdGhlIHRoaW4gYW5kIGhhaXIgc3BhY2VzIGEgcGxhaW4gc3BhY2U7IHRoZSBtaW51c1xuICAvLyBzaWduIGEgaHlwaGVuOyBhbmQgYSByYW5rJ3MgcmlzZSBhIHBsdXMgc2lnbiBhbmQgaXRzIGZhbGwgYSBoeXBoZW5cbiAgLy8gKCfilrIgMicgcmVhZHMgJysyJykuXG4gIHByaXZhdGUgX3BkZlRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgLnJlcGxhY2UoL1xcdTIwMkYvZywgJ1xcdTAwQTAnKVxuICAgICAgLnJlcGxhY2UoL1tcXHUyMDA5XFx1MjAwQV0vZywgJyAnKVxuICAgICAgLnJlcGxhY2UoL1xcdTIyMTIvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1xcdTI1QjJcXHM/L2csICcrJylcbiAgICAgIC5yZXBsYWNlKC9cXHUyNUJDXFxzPy9nLCAnLScpO1xuICB9XG5cbiAgLy8gQSBsYXllcidzIHZhbHVlcyB3aXRoIGVhY2ggbnVtYmVyIGFzIGpzUERGIGNhbiBkcmF3IGl0IChfcGRmVGV4dCksIHNvIGFcbiAgLy8gdmFsdWUgZ3JvdXBlZCB3aXRoIG5hcnJvdyBzcGFjZXMgcmVhZHMsIGFuZCB3cmFwcywgbGlrZSBhbnkgb3RoZXIgbnVtYmVyLlxuICBwcml2YXRlIF9wZGZWYWx1ZXModmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBUZXh0VmFsdWU+KTogUmVjb3JkPHN0cmluZywgVGV4dFZhbHVlPiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh2YWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICBrZXksXG4gICAgICB2YWx1ZS50ZXh0ID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHsgLi4udmFsdWUsIHRleHQ6IHRoaXMuX3BkZlRleHQodmFsdWUudGV4dCkgfSxcbiAgICBdKSk7XG4gIH1cblxuICBwcml2YXRlIF9zbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJykucmVwbGFjZSgvXi0rfC0rJC9nLCAnJykgfHwgJ3JlcG9ydCc7XG4gIH1cbn1cbiJdfQ==
|