axidio-styleguide-library1-v2 0.4.14 → 0.4.16
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.
|
@@ -21,14 +21,14 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
21
21
|
this.objectKeys = Object.keys;
|
|
22
22
|
this.defaultConfiguration = {
|
|
23
23
|
margin: {
|
|
24
|
-
top:
|
|
25
|
-
right: 40,
|
|
26
|
-
bottom:
|
|
27
|
-
left:
|
|
24
|
+
top: 15, // FIXED: Reduced for 250px height
|
|
25
|
+
right: 40,
|
|
26
|
+
bottom: 50, // FIXED: Reduced for 250px height
|
|
27
|
+
left: 95 // FIXED: Enough space for label + values
|
|
28
28
|
},
|
|
29
29
|
labelFormatter: ChartHelper.defaultFormatter,
|
|
30
30
|
svgHeight: 70,
|
|
31
|
-
numberOfYTicks: 6,
|
|
31
|
+
numberOfYTicks: 6,
|
|
32
32
|
legendJustified: true,
|
|
33
33
|
yLineAxisLabelFomatter: ChartHelper.defaultFormatter,
|
|
34
34
|
yAxisLabelFomatter: ChartHelper.defaultFormatter,
|
|
@@ -36,7 +36,7 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
36
36
|
showLineChartAxis: true,
|
|
37
37
|
showValues: true,
|
|
38
38
|
headerMenuOptions: HeaderConfigHelper.headerConfig.headerMenuOptions,
|
|
39
|
-
yAxisGrid: true,
|
|
39
|
+
yAxisGrid: true,
|
|
40
40
|
legendVisible: true,
|
|
41
41
|
isYaxisLabelHidden: false,
|
|
42
42
|
backgroundColor: '#FFFFFF',
|
|
@@ -153,26 +153,29 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
153
153
|
return width;
|
|
154
154
|
}
|
|
155
155
|
calculateHeight(verticalstackedcontainer, margin) {
|
|
156
|
-
|
|
156
|
+
// FIXED: Remove minimum height constraint to respect container size
|
|
157
|
+
let containerHeight = parseInt(verticalstackedcontainer.style('height'));
|
|
158
|
+
let height = containerHeight *
|
|
157
159
|
(this.chartConfiguration.svgHeight / 100) -
|
|
158
160
|
margin.top -
|
|
159
161
|
margin.bottom;
|
|
160
|
-
// FIXED: Ensure minimum height for proper Y-axis spacing
|
|
161
|
-
const minHeight = 350; // Minimum height for good spacing
|
|
162
162
|
if (this.chartConfiguration.isFullScreen && this.chartConfiguration.svgHeight !== 70) {
|
|
163
|
-
height =
|
|
163
|
+
height = this.chartConfiguration.svgHeight - margin.top - margin.bottom;
|
|
164
164
|
}
|
|
165
165
|
else if (this.chartConfiguration.isFullScreen) {
|
|
166
|
-
height =
|
|
166
|
+
height = containerHeight - margin.top - margin.bottom;
|
|
167
167
|
}
|
|
168
168
|
if (this.chartConfiguration.isDrilldownChart && !this.isHeaderVisible) {
|
|
169
|
-
height =
|
|
169
|
+
height = containerHeight - margin.top - margin.bottom - 130;
|
|
170
170
|
}
|
|
171
171
|
if (this.chartConfiguration.isHeaderVisible) {
|
|
172
|
-
height =
|
|
172
|
+
height = containerHeight - margin.top - margin.bottom - 100;
|
|
173
173
|
}
|
|
174
|
-
// FIXED:
|
|
175
|
-
|
|
174
|
+
// FIXED: For fixed height containers (like 300px), ensure it fits
|
|
175
|
+
if (!this.chartConfiguration.isFullScreen && !this.chartConfiguration.isDrilldownChart) {
|
|
176
|
+
height = containerHeight - margin.top - margin.bottom;
|
|
177
|
+
}
|
|
178
|
+
return height;
|
|
176
179
|
}
|
|
177
180
|
createScales(chartContext, dimensions) {
|
|
178
181
|
const { data, metaData, lineData, keyList } = chartContext;
|
|
@@ -252,24 +255,26 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
252
255
|
.attr('id', this.uniqueId)
|
|
253
256
|
.attr('class', 'outer-container')
|
|
254
257
|
.style('width', '100%')
|
|
255
|
-
.style('height', height)
|
|
258
|
+
.style('height', `${height + margin.top + margin.bottom}px`)
|
|
256
259
|
.style('overflow-x', 'hidden')
|
|
260
|
+
.style('overflow-y', 'hidden')
|
|
257
261
|
.style('padding-left', `${margin.left}px`)
|
|
258
262
|
.style('padding-right', `${rightSvgWidth}px`)
|
|
259
263
|
.style('margin-left', '15px');
|
|
264
|
+
// FIXED: Position Y-axis to show label properly
|
|
260
265
|
const svgYAxisLeft = outerContainer
|
|
261
266
|
.append('svg')
|
|
262
|
-
.attr('width',
|
|
263
|
-
.attr('height', height + margin.top + margin.bottom
|
|
267
|
+
.attr('width', margin.left + 15) // FIXED: Width matches left margin
|
|
268
|
+
.attr('height', height + margin.top + margin.bottom)
|
|
264
269
|
.style('position', 'absolute')
|
|
265
|
-
.style('left', '
|
|
270
|
+
.style('left', '-15px') // FIXED: Position to include label
|
|
266
271
|
.style('z-index', 1)
|
|
267
272
|
.append('g')
|
|
268
|
-
.attr('transform', `translate(${margin.left
|
|
273
|
+
.attr('transform', `translate(${margin.left},${margin.top})`); // FIXED: Proper transform
|
|
269
274
|
const svgYAxisRight = outerContainer
|
|
270
275
|
.append('svg')
|
|
271
276
|
.attr('width', rightSvgWidth)
|
|
272
|
-
.attr('height', height + margin.top + margin.bottom
|
|
277
|
+
.attr('height', height + margin.top + margin.bottom)
|
|
273
278
|
.style('position', 'absolute')
|
|
274
279
|
.style('right', '12px')
|
|
275
280
|
.style('z-index', 1)
|
|
@@ -279,11 +284,13 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
279
284
|
.append('div')
|
|
280
285
|
.attr('class', 'inner-container')
|
|
281
286
|
.style('width', '100%')
|
|
282
|
-
.style('
|
|
287
|
+
.style('height', '100%')
|
|
288
|
+
.style('overflow-x', 'auto')
|
|
289
|
+
.style('overflow-y', 'hidden');
|
|
283
290
|
const svg = innerContainer
|
|
284
291
|
.append('svg')
|
|
285
292
|
.attr('width', dimensions.width - rightSvgWidth)
|
|
286
|
-
.attr('height', height + margin.top + margin.bottom
|
|
293
|
+
.attr('height', height + margin.top + margin.bottom)
|
|
287
294
|
.append('g')
|
|
288
295
|
.attr('transform', `translate(0,${margin.top})`);
|
|
289
296
|
return { outerContainer, svgYAxisLeft, svgYAxisRight, svg };
|
|
@@ -308,15 +315,24 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
308
315
|
renderXAxis(svg, x, xScaleFromOrigin, height, chartContext, keyList) {
|
|
309
316
|
const { data, metaData } = chartContext;
|
|
310
317
|
if (this.chartConfiguration.isMultiChartGridLine === undefined) {
|
|
311
|
-
|
|
318
|
+
// FIXED: X-axis with bottom line
|
|
319
|
+
const xAxis = svg
|
|
312
320
|
.append('g')
|
|
313
321
|
.attr('class', 'x1 axis1')
|
|
314
322
|
.attr('transform', `translate(0,${height})`)
|
|
315
|
-
.call(d3.axisBottom(x))
|
|
316
|
-
|
|
317
|
-
|
|
323
|
+
.call(d3.axisBottom(x).tickSize(0));
|
|
324
|
+
// FIXED: Keep X-axis line visible
|
|
325
|
+
xAxis
|
|
326
|
+
.select('.domain')
|
|
327
|
+
.style('stroke', 'var(--chart-axis-color, #999999)')
|
|
328
|
+
.style('stroke-width', '1px');
|
|
329
|
+
xAxis.selectAll('g.tick line').remove();
|
|
318
330
|
const textClass = 'lib-xaxis-labels-texts-drilldown';
|
|
319
|
-
const textSelection =
|
|
331
|
+
const textSelection = xAxis
|
|
332
|
+
.selectAll('g.tick text')
|
|
333
|
+
.attr('class', textClass)
|
|
334
|
+
.style('fill', 'var(--chart-text-color)')
|
|
335
|
+
.style('font-size', '12px');
|
|
320
336
|
if (keyList.length > 1 && !metaData.xLabel) {
|
|
321
337
|
textSelection.attr('y', 32);
|
|
322
338
|
}
|
|
@@ -327,14 +343,19 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
327
343
|
if (this.chartConfiguration.xLabelsOnSameLine) {
|
|
328
344
|
this.renderXLabelsOnSameLine(svg, data, metaData);
|
|
329
345
|
}
|
|
330
|
-
//
|
|
331
|
-
svg
|
|
346
|
+
// Bottom x-axis with line
|
|
347
|
+
const xAxis2 = svg
|
|
332
348
|
.append('g')
|
|
333
349
|
.attr('class', 'x2 axis2')
|
|
334
350
|
.attr('transform', `translate(0,${height})`)
|
|
335
351
|
.style('color', '#000')
|
|
336
|
-
.call(d3.axisBottom(xScaleFromOrigin).tickSize(0))
|
|
337
|
-
|
|
352
|
+
.call(d3.axisBottom(xScaleFromOrigin).tickSize(0));
|
|
353
|
+
// FIXED: Show X-axis line
|
|
354
|
+
xAxis2
|
|
355
|
+
.select('.domain')
|
|
356
|
+
.style('stroke', 'var(--chart-axis-color, #999999)')
|
|
357
|
+
.style('stroke-width', '1px')
|
|
358
|
+
.attr('fill', 'none');
|
|
338
359
|
svg.selectAll('g.x2.axis2 g.tick text').style('display', 'none');
|
|
339
360
|
if (this.isZoomedOut) {
|
|
340
361
|
svg.selectAll('.lib-xaxis-labels-texts-drilldown').attr('class', 'lib-display-hidden');
|
|
@@ -403,7 +424,7 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
403
424
|
});
|
|
404
425
|
}
|
|
405
426
|
renderYAxis(svg, svgYAxisLeft, svgYAxisRight, y, dimensions) {
|
|
406
|
-
//
|
|
427
|
+
// Main Y-axis in chart area (hidden)
|
|
407
428
|
svg
|
|
408
429
|
.append('g')
|
|
409
430
|
.attr('class', 'lib-stacked-y-axis-text yaxis-dashed')
|
|
@@ -411,26 +432,32 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
411
432
|
.attr('transform', 'translate(0,0)')
|
|
412
433
|
.call(y)
|
|
413
434
|
.style('display', 'none');
|
|
414
|
-
// FIXED:
|
|
435
|
+
// FIXED: Left Y-axis with proper positioning
|
|
415
436
|
const yAxisLeft = d3
|
|
416
437
|
.axisLeft(y)
|
|
417
|
-
.tickSize(0)
|
|
438
|
+
.tickSize(0)
|
|
418
439
|
.ticks(this.chartConfiguration.numberOfYTicks)
|
|
419
440
|
.tickFormat(this.chartConfiguration.yAxisLabelFomatter);
|
|
420
|
-
svgYAxisLeft
|
|
421
|
-
.append('g')
|
|
441
|
+
const yAxisGroup = svgYAxisLeft
|
|
422
442
|
.append('g')
|
|
423
443
|
.attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
|
|
424
444
|
.attr('style', this.chartConfiguration.yAxisCustomTextStyles)
|
|
425
445
|
.attr('transform', 'translate(0,0)')
|
|
426
|
-
.call(yAxisLeft)
|
|
427
|
-
|
|
446
|
+
.call(yAxisLeft);
|
|
447
|
+
// FIXED: Add Y-axis vertical line
|
|
448
|
+
yAxisGroup
|
|
449
|
+
.select('.domain')
|
|
450
|
+
.style('stroke', 'var(--chart-axis-color, #999999)')
|
|
451
|
+
.style('stroke-width', '1px');
|
|
452
|
+
// FIXED: Style Y-axis text with proper positioning
|
|
453
|
+
yAxisGroup
|
|
428
454
|
.selectAll('text')
|
|
429
455
|
.style('fill', 'var(--chart-text-color)')
|
|
430
|
-
.style('font-size', '
|
|
456
|
+
.style('font-size', '12px')
|
|
457
|
+
.style('font-weight', '400')
|
|
458
|
+
.attr('x', -8) // FIXED: Slight offset from axis line
|
|
431
459
|
.attr('dy', '0.32em');
|
|
432
|
-
//
|
|
433
|
-
svgYAxisLeft.selectAll('.tick line').remove(); // FIXED: Remove all tick lines
|
|
460
|
+
// Right Y-axis (hidden)
|
|
434
461
|
svgYAxisRight
|
|
435
462
|
.append('g')
|
|
436
463
|
.attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
|
|
@@ -455,21 +482,19 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
455
482
|
}
|
|
456
483
|
}
|
|
457
484
|
renderYAxisGrid(svg, y, width) {
|
|
458
|
-
// FIXED: Improved grid styling
|
|
459
485
|
svg
|
|
460
486
|
.append('g')
|
|
461
487
|
.attr('class', 'y-axis-grid')
|
|
462
488
|
.call(d3.axisLeft(y)
|
|
463
489
|
.ticks(this.chartConfiguration.numberOfYTicks)
|
|
464
|
-
.tickSize(-width)
|
|
465
|
-
.tickFormat('')
|
|
466
|
-
|
|
467
|
-
.style('
|
|
468
|
-
.style('
|
|
469
|
-
.
|
|
470
|
-
.call((g) => g.select('.domain').remove()) // FIXED: Remove domain line
|
|
490
|
+
.tickSize(-width)
|
|
491
|
+
.tickFormat(''))
|
|
492
|
+
.style('color', '#E8E8E8')
|
|
493
|
+
.style('opacity', '0.8')
|
|
494
|
+
.style('stroke-dasharray', 'none')
|
|
495
|
+
.call((g) => g.select('.domain').remove())
|
|
471
496
|
.selectAll('line')
|
|
472
|
-
.style('stroke-width', '
|
|
497
|
+
.style('stroke-width', '0.5px');
|
|
473
498
|
}
|
|
474
499
|
renderXAxisGrid(svg, x, height) {
|
|
475
500
|
svg
|
|
@@ -745,12 +770,13 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
745
770
|
.attr('class', 'lib-axis-group-label font-size-1')
|
|
746
771
|
.attr('style', this.chartConfiguration.yAxisCustomlabelStyles)
|
|
747
772
|
.attr('transform', 'rotate(-90)')
|
|
748
|
-
// FIXED:
|
|
749
|
-
.attr('y',
|
|
773
|
+
// FIXED: Proper positioning for label
|
|
774
|
+
.attr('y', -70) // FIXED: Distance from Y-axis
|
|
750
775
|
.attr('x', 0 - height / 2)
|
|
751
776
|
.attr('dy', '1em')
|
|
752
777
|
.style('text-anchor', 'middle')
|
|
753
|
-
.style('font-size', '
|
|
778
|
+
.style('font-size', '12px')
|
|
779
|
+
.style('font-weight', '400')
|
|
754
780
|
.attr('fill', 'var(--chart-text-color)');
|
|
755
781
|
if (this.chartConfiguration.isMultiChartGridLine === undefined) {
|
|
756
782
|
svgYAxisLeft.selectAll('.lib-axis-group-label').text(yLabel);
|
|
@@ -778,11 +804,11 @@ export class GroupChartComponent extends ComponentUniqueId {
|
|
|
778
804
|
.append('text')
|
|
779
805
|
.attr('class', baseClass)
|
|
780
806
|
.attr('style', this.chartConfiguration.xAxisCustomlabelStyles)
|
|
781
|
-
// FIXED:
|
|
782
|
-
.attr('transform', `translate(${width / 2},${height +
|
|
807
|
+
// FIXED: Adjusted for 250px height
|
|
808
|
+
.attr('transform', `translate(${width / 2},${height + 35})`)
|
|
783
809
|
.style('text-anchor', 'middle')
|
|
784
810
|
.style('fill', 'var(--chart-text-color)')
|
|
785
|
-
.style('font-size', '
|
|
811
|
+
.style('font-size', '12px')
|
|
786
812
|
.text(isAcronym ? xLabel.toUpperCase() : xLabel.toLowerCase())
|
|
787
813
|
.style('text-transform', isAcronym ? 'none' : 'capitalize');
|
|
788
814
|
}
|
|
@@ -916,4 +942,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
916
942
|
}], headerMenuclickEvent: [{
|
|
917
943
|
type: Output
|
|
918
944
|
}] } });
|
|
919
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUE4RWxELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7SUFxRHhEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUE3Q0EsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV6RCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsdUJBQWtCLEdBQXVCLEVBQXdCLENBQUM7UUFDbEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFVix5QkFBb0IsR0FBZ0M7WUFDakUsTUFBTSxFQUFFO2dCQUNOLEdBQUcsRUFBRSxFQUFFLEVBQU8sZ0JBQWdCO2dCQUM5QixL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dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5pbnRlcmZhY2UgQ2hhcnRNZXRhRGF0YSB7XHJcbiAgY29sb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGNvbG9yQWJvdmVUYXJnZXQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGtleUxpc3Q6IHN0cmluZ1tdO1xyXG4gIGhhc0RyaWxsRG93bj86IGJvb2xlYW47XHJcbiAgYmFyV2l0aG91dENsaWNrPzogc3RyaW5nW107XHJcbiAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgeUxhYmVsPzogc3RyaW5nO1xyXG4gIHhMYWJlbD86IHN0cmluZztcclxuICBsaW5leUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGFyZ2V0TGluZURhdGEge1xyXG4gIHRhcmdldDogbnVtYmVyO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgdGFyZ2V0TmFtZT86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIENoYXJ0Q29uZmlndXJhdGlvbiB7XHJcbiAgbWFyZ2luOiB7IHRvcDogbnVtYmVyOyByaWdodDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XHJcbiAgbGFiZWxGb3JtYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgc3ZnSGVpZ2h0OiBudW1iZXI7XHJcbiAgbnVtYmVyT2ZZVGlja3M6IG51bWJlcjtcclxuICBsZWdlbmRKdXN0aWZpZWQ6IGJvb2xlYW47XHJcbiAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZztcclxuICB5QXhpc0xhYmVsRm9tYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgbGluZUdyYXBoQ29sb3I6IHN0cmluZztcclxuICBzaG93TGluZUNoYXJ0QXhpczogYm9vbGVhbjtcclxuICBzaG93VmFsdWVzOiBib29sZWFuO1xyXG4gIGhlYWRlck1lbnVPcHRpb25zOiBhbnlbXTtcclxuICB4QXhpc0dyaWQ/OiBib29sZWFuO1xyXG4gIHlBeGlzR3JpZDogYm9vbGVhbjtcclxuICBsZWdlbmRWaXNpYmxlOiBib29sZWFuO1xyXG4gIGlzSGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XHJcbiAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQ/OiBib29sZWFuO1xyXG4gIGlzTXVsdGlDaGFydEdyaWRMaW5lPzogYm9vbGVhbjtcclxuICBpc0Z1bGxTY3JlZW4/OiBib29sZWFuO1xyXG4gIGN1c3RvbVlzY2FsZT86IG51bWJlcjtcclxuICB0ZXh0c09uQmFyPzogYm9vbGVhbjtcclxuICBpc1hheGlzTGFiZWxIaWRkZW4/OiBib29sZWFuO1xyXG4gIGlzWWF4aXNMYWJlbEhpZGRlbjogYm9vbGVhbjtcclxuICBpc1lheGlzSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc1lheGlzRGFzaGVkPzogYm9vbGVhbjtcclxuICB0ZXh0Rm9ybWF0dGVyPzogc3RyaW5nO1xyXG4gIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ/OiBib29sZWFuO1xyXG4gIGlzWGdyaWRCZXR3ZWVuTGFiZWxzPzogYm9vbGVhbjtcclxuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcclxuICBoaWRlTGVnZW5kT25Ub3A6IGJvb2xlYW47XHJcbiAgaXNYYXhpc0NvbG9yOiBzdHJpbmc7XHJcbiAgbGFiZWxPdmVybGFwTWlub3JGaXg6IGJvb2xlYW47XHJcbiAgbm9Ib3ZlckVmZmVjdDogYm9vbGVhbjtcclxuICBub0hvdmVyRGlzcGxheURhdGE6IGJvb2xlYW47XHJcbiAgc2hvd1hheGlzVG9wOiBib29sZWFuO1xyXG4gIGRpc3BsYXlZYXhpc0xhYmVscz86IGJvb2xlYW47XHJcbiAgeExhYmVsc09uU2FtZUxpbmU/OiBib29sZWFuO1xyXG4gIHRleHRBbHdheXNIb3Jpem9udGFsPzogYm9vbGVhbjtcclxuICBsZWdlbmRBdFRvcFJpZ2h0PzogYm9vbGVhbjtcclxuICBpc0RyaWxsZG93bkNoYXJ0PzogYm9vbGVhbjtcclxuICBkaXNwbGF5VGl0bGVPblRvcD86IGJvb2xlYW47XHJcbiAgaXNUb2dnbGVWaXNpYmxlPzogYm9vbGVhbjtcclxuICBpc1RpdGxlSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b20/OiBib29sZWFuO1xyXG4gIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiBudW1iZXI7XHJcbiAgYmFyVmF1bGVDb2xvcj86IHN0cmluZztcclxuICB5QXhpc0N1c3RvbVRleHRTdHlsZXM/OiBzdHJpbmc7XHJcbiAgeUF4aXNDdXN0b21sYWJlbFN0eWxlcz86IHN0cmluZztcclxuICB4QXhpc0N1c3RvbWxhYmVsU3R5bGVzPzogc3RyaW5nO1xyXG4gIGlzUmlhPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ3JvdXAtY2hhcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JvdXAtY2hhcnQuY29tcG9uZW50Lmxlc3MnLCAnLi4vY29tbW9uLXN0eWxlcy5sZXNzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyb3VwQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRVbmlxdWVJZCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBsZWdlbmRWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogQ2hhcnRDb25maWd1cmF0aW9uID0ge30gYXMgQ2hhcnRDb25maWd1cmF0aW9uO1xyXG4gIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cztcclxuXHJcbnByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ3VyYXRpb246IFBhcnRpYWw8Q2hhcnRDb25maWd1cmF0aW9uPiA9IHtcclxuICAgIG1hcmdpbjogeyBcclxuICAgICAgdG9wOiAzMCwgICAgICAvLyBTcGFjZSBmb3IgdG9wXHJcbiAgICAgIHJpZ2h0OiA0MCwgICAgLy8gUmlnaHQgc3BhY2VcclxuICAgICAgYm90dG9tOiA4MCwgICAvLyBGSVhFRDogSW5jcmVhc2VkIGZyb20gMjAgdG8gODAgZm9yIG1vcmUgc3BhY2UgYmVsb3cgWC1heGlzIGxhYmVsXHJcbiAgICAgIGxlZnQ6IDgwICAgICAgLy8gRklYRUQ6IEluY3JlYXNlZCBmcm9tIDQwIHRvIDgwIGZvciBZLWF4aXMgbGFiZWxzXHJcbiAgICB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDYsICAvLyBGSVhFRDogTW9yZSB0aWNrcyBmb3IgYmV0dGVyIHNwYWNpbmdcclxuICAgIGxlZ2VuZEp1c3RpZmllZDogdHJ1ZSxcclxuICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICBzaG93VmFsdWVzOiB0cnVlLFxyXG4gICAgaGVhZGVyTWVudU9wdGlvbnM6IEhlYWRlckNvbmZpZ0hlbHBlci5oZWFkZXJDb25maWcuaGVhZGVyTWVudU9wdGlvbnMsXHJcbiAgICB5QXhpc0dyaWQ6IHRydWUsICAgIC8vIEZJWEVEOiBDaGFuZ2VkIGZyb20gZmFsc2UgdG8gdHJ1ZSB0byBzaG93IGdyaWRcclxuICAgIGxlZ2VuZFZpc2libGU6IHRydWUsXHJcbiAgICBpc1lheGlzTGFiZWxIaWRkZW46IGZhbHNlLFxyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICBoaWRlTGVnZW5kT25Ub3A6IHRydWUsXHJcbiAgICBpc1hheGlzQ29sb3I6ICcjOTk5OTk5JyxcclxuICAgIGxhYmVsT3ZlcmxhcE1pbm9yRml4OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckVmZmVjdDogdHJ1ZSxcclxuICAgIG5vSG92ZXJEaXNwbGF5RGF0YTogdHJ1ZSxcclxuICAgIHNob3dYYXhpc1RvcDogdHJ1ZSxcclxuICAgIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiAwLFxyXG4gIH07XHJcblxyXG4gIHVuaXF1ZUlkOiBhbnkgPSB0aGlzLmdldFVuaXF1ZUlkKCk7XHJcbiAgaXNab29tZWRPdXQgPSBmYWxzZTtcclxuICBpc0REMU9wZW4gPSBmYWxzZTtcclxuICBpc0REMk9wZW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICBnZXQgaXNBbGVydEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24/LmhlYWRlck1lbnVPcHRpb25zPy5zb21lKFxyXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09ICdlZGl0QWxlcnQnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25SZXNpemVkKGV2ZW50OiBSZXNpemVkRXZlbnQpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBkMy5zZWxlY3QoJyMnICsgdGhpcy51bmlxdWVJZCkucmVtb3ZlKCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIGlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dDogYm9vbGVhbiwgZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1pvb21lZE91dCA9IGlzWm9vbU91dDtcclxuICAgIHRoaXMub25SZXNpemVkKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVpvb21pblpvb21vdXRDbGljayh7IGlzWm9vbU91dCwgZXZlbnQgfSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGlzTGVnZW5kVmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIShcclxuICAgICAgdGhpcy5jaGFydERhdGE/Lm1ldGFEYXRhPy5jb2xvcnMgJiZcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JzKS5sZW5ndGggPiAxXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAga2VlcE9yZGVyID0gKGEsIGIpID0+IGE7XHJcblxyXG4gIGluaXRpYWxpemVncm91cENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXJnZUNvbmZpZ3VyYXRpb25zKCk7XHJcbiAgICBjb25zdCBjaGFydENvbnRleHQgPSB0aGlzLnByZXBhcmVDaGFydERhdGEoKTtcclxuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbnMoY2hhcnRDb250ZXh0KTtcclxuICAgIGNvbnN0IHNjYWxlcyA9IHRoaXMuY3JlYXRlU2NhbGVzKGNoYXJ0Q29udGV4dCwgZGltZW5zaW9ucyk7XHJcbiAgICBjb25zdCBzdmdFbGVtZW50cyA9IHRoaXMuY3JlYXRlU1ZHU3RydWN0dXJlKGRpbWVuc2lvbnMpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyQXhlcyhzdmdFbGVtZW50cywgc2NhbGVzLCBjaGFydENvbnRleHQsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJCYXJzKHN2Z0VsZW1lbnRzLnN2ZywgY2hhcnRDb250ZXh0LCBzY2FsZXMsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJMYWJlbHMoc3ZnRWxlbWVudHMsIHNjYWxlcywgY2hhcnRDb250ZXh0LCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyVGFyZ2V0TGluZShzdmdFbGVtZW50cywgc2NhbGVzLCBjaGFydENvbnRleHQsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJMaW5lR3JhcGgoc3ZnRWxlbWVudHMuc3ZnLCBjaGFydENvbnRleHQsIHNjYWxlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lcmdlQ29uZmlndXJhdGlvbnMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uW2tleV0gPSBDaGFydEhlbHBlci5nZXRWYWx1ZUJ5Q29uZmlndXJhdGlvblR5cGUoXHJcbiAgICAgICAga2V5LFxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uPy5tYXJnaW4pIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luID0ge1xyXG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24ubWFyZ2luLFxyXG4gICAgICAgIC4uLnRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLm1hcmdpblxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5sZWdlbmRWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUNoYXJ0RGF0YSgpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgY29uc3QgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YTtcclxuICAgIGNvbnN0IGxpbmVEYXRhID0gdGhpcy5jaGFydERhdGEubGluZURhdGE7XHJcblxyXG4gICAgaWYgKCFtZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0KSB7XHJcbiAgICAgIG1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQgPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGF0YSxcclxuICAgICAgbWV0YURhdGEsXHJcbiAgICAgIGxpbmVEYXRhLFxyXG4gICAgICBrZXlMaXN0OiBtZXRhRGF0YS5rZXlMaXN0LFxyXG4gICAgICBjb2xvck1hcDogbWV0YURhdGEuY29sb3JzLFxyXG4gICAgICBpc1JpYTogdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24/LmlzUmlhIHx8IGZhbHNlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlRGltZW5zaW9ucyhjaGFydENvbnRleHQ6IGFueSkge1xyXG4gICAgY29uc3QgY2hhcnRDb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuXHJcbiAgICBsZXQgd2lkdGggPSB0aGlzLmNhbGN1bGF0ZVdpZHRoKGNoYXJ0Q29udGFpbmVyLCBtYXJnaW4pO1xyXG4gICAgbGV0IGhlaWdodCA9IHRoaXMuY2FsY3VsYXRlSGVpZ2h0KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciwgbWFyZ2luKTtcclxuXHJcbiAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIGNoYXJ0Q29udGFpbmVyLCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlV2lkdGgoY2hhcnRDb250YWluZXI6IGFueSwgbWFyZ2luOiBhbnkpOiBudW1iZXIge1xyXG4gICAgY29uc3QgYmFzZVdpZHRoID0gcGFyc2VJbnQoY2hhcnRDb250YWluZXIuc3R5bGUoJ3dpZHRoJykpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGg7XHJcbiAgICBsZXQgd2lkdGggPSBiYXNlV2lkdGg7XHJcblxyXG4gICAgaWYgKGRhdGFMZW5ndGggPiAzMCAmJiB0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGExID8gNjAgOiA0MDtcclxuICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgZGF0YUxlbmd0aCAqIG11bHRpcGxpZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGEyICYmIHdpZHRoIDwgZGF0YUxlbmd0aCAqIDEyMCAmJiB0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHdpZHRoID0gZGF0YUxlbmd0aCAqIDEyMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YUxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgaWYgKHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiYgd2lkdGggPCBkYXRhTGVuZ3RoICogMjUwKSB7XHJcbiAgICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMjUwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHdpZHRoID0gZGF0YUxlbmd0aCAqIDE2MDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB3aWR0aDtcclxuICB9XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZUhlaWdodCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXI6IGFueSwgbWFyZ2luOiBhbnkpOiBudW1iZXIge1xyXG4gICAgbGV0IGhlaWdodCA9XHJcbiAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpICpcclxuICAgICAgICAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtXHJcbiAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICBtYXJnaW4uYm90dG9tO1xyXG5cclxuICAgIC8vIEZJWEVEOiBFbnN1cmUgbWluaW11bSBoZWlnaHQgZm9yIHByb3BlciBZLWF4aXMgc3BhY2luZ1xyXG4gICAgY29uc3QgbWluSGVpZ2h0ID0gMzUwOyAvLyBNaW5pbXVtIGhlaWdodCBmb3IgZ29vZCBzcGFjaW5nXHJcbiAgICBcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4gJiYgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9PSA3MCkge1xyXG4gICAgICBoZWlnaHQgPSBNYXRoLm1heCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQsIG1pbkhlaWdodCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSwgbWluSGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiAhdGhpcy5pc0hlYWRlclZpc2libGUpIHtcclxuICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoXHJcbiAgICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSAtIDEzMCxcclxuICAgICAgICBtaW5IZWlnaHRcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgIGhlaWdodCA9IE1hdGgubWF4KFxyXG4gICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b20gLSAxMDAsXHJcbiAgICAgICAgbWluSGVpZ2h0XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRklYRUQ6IElmIGNhbGN1bGF0ZWQgaGVpZ2h0IGlzIHRvbyBzbWFsbCwgdXNlIG1pbmltdW1cclxuICAgIHJldHVybiBNYXRoLm1heChoZWlnaHQsIG1pbkhlaWdodCk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSBjcmVhdGVTY2FsZXMoY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSkge1xyXG4gICAgY29uc3QgeyBkYXRhLCBtZXRhRGF0YSwgbGluZURhdGEsIGtleUxpc3QgfSA9IGNoYXJ0Q29udGV4dDtcclxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbWFyZ2luIH0gPSBkaW1lbnNpb25zO1xyXG4gICAgXHJcbiAgICAvLyBGSVhFRDogUmVkdWNlIHNwYWNlcyBmb3IgYmV0dGVyIGJhciBkaXN0cmlidXRpb25cclxuICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcclxuICAgIGNvbnN0IGxlZnRBbmRSaWdodFNwYWNlcyA9IGRhdGFMZW5ndGggPD0gNSA/IDIwIDogKGRhdGFMZW5ndGggPD0gMTAgPyAzNSA6IDUwKTtcclxuICAgIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuXHJcbiAgICBjb25zdCBncm91cHMgPSBkMy5tYXAoZGF0YSwgKGQpID0+IGQubmFtZSkua2V5cygpO1xyXG5cclxuICAgIGxldCB4OiBhbnk7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB4ID0gZDNcclxuICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgICAgIC5hbGlnbigwLjUpXHJcbiAgICAgICAgLnBhZGRpbmcoMC41KVxyXG4gICAgICAgIC5kb21haW4oZGF0YS5tYXAoKGQ6IGFueSkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHggPSBkM1xyXG4gICAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAgIC5kb21haW4oZ3JvdXBzKVxyXG4gICAgICAgIC5yYW5nZShbbGVmdEFuZFJpZ2h0U3BhY2VzLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGggLSBsZWZ0QW5kUmlnaHRTcGFjZXNdKVxyXG4gICAgICAgIC5wYWRkaW5nKGRhdGFMZW5ndGggPD0gNSA/IDAuNCA6IDAuMyk7IC8vIEZJWEVEOiBCZXR0ZXIgcGFkZGluZyBmb3IgZmV3ZXIgYmFyc1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHhTY2FsZUZyb21PcmlnaW4gPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oZ3JvdXBzKS5yYW5nZShbMCwgd2lkdGggLSByaWdodFN2Z1dpZHRoXSk7XHJcblxyXG4gICAgY29uc3QgeFN1Ymdyb3VwID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleUxpc3QpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcblxyXG4gICAgY29uc3QgbWF4VmFsdWUgPSB0aGlzLmNhbGN1bGF0ZU1heFZhbHVlKGRhdGEsIGtleUxpc3QpO1xyXG4gICAgY29uc3QgeSA9IGQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLCBtYXhWYWx1ZV0pLm5pY2UoKS5yYW5nZVJvdW5kKFtoZWlnaHQsIDBdKTtcclxuXHJcbiAgICBsZXQgbGluZVlzY2FsZSA9IG51bGw7XHJcbiAgICBpZiAobGluZURhdGEpIHtcclxuICAgICAgbGluZVlzY2FsZSA9IHRoaXMuY3JlYXRlTGluZVlTY2FsZShsaW5lRGF0YSwgaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb2xvciA9IGQzLnNjYWxlT3JkaW5hbCgpLmRvbWFpbihrZXlMaXN0KS5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9ycykpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHgsXHJcbiAgICAgIHhTY2FsZUZyb21PcmlnaW4sXHJcbiAgICAgIHhTdWJncm91cCxcclxuICAgICAgeSxcclxuICAgICAgbGluZVlzY2FsZSxcclxuICAgICAgY29sb3IsXHJcbiAgICAgIGxlZnRBbmRSaWdodFNwYWNlcyxcclxuICAgICAgcmlnaHRTdmdXaWR0aCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZU1heFZhbHVlKGRhdGE6IGFueVtdLCBrZXlMaXN0OiBzdHJpbmdbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4VmFsdWUgPSBkMy5tYXgoZGF0YSwgKGQpID0+IGQzLm1heChrZXlMaXN0LCAoa2V5KSA9PiArZFtrZXldKSkgfHwgMDtcclxuXHJcbiAgICBpZiAobWF4VmFsdWUgPT09IDApIHtcclxuICAgICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YVxyXG4gICAgICAgID8gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjBcclxuICAgICAgICA6IDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlKSB7XHJcbiAgICAgIG1heFZhbHVlICo9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiYgbWF4VmFsdWUgPCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0O1xyXG4gICAgICBtYXhWYWx1ZSA9IG1heFZhbHVlIDwgMTAgJiYgdGFyZ2V0IDwgMTAgPyB0YXJnZXQgKyAzIDogdGFyZ2V0ICsgMjA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1heFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVMaW5lWVNjYWxlKGxpbmVEYXRhOiBhbnlbXSwgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIGxldCBtYXhMaW5lVmFsdWUgPSBkMy5tYXgobGluZURhdGEsIChkKSA9PiArZC52YWx1ZSkgfHwgMDtcclxuICAgIG1heExpbmVWYWx1ZSAqPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUgfHwgMTtcclxuXHJcbiAgICBsZXQgbWluTGluZVZhbHVlID0gZDMubWluKGxpbmVEYXRhLCAoZCkgPT4gK2QudmFsdWUpIHx8IDA7XHJcbiAgICBpZiAobWF4TGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlIC09IDM7XHJcbiAgICBpZiAobWluTGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlID0gMDtcclxuXHJcbiAgICByZXR1cm4gZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oW21pbkxpbmVWYWx1ZSwgbWF4TGluZVZhbHVlXSkucmFuZ2UoW2hlaWdodCwgbWluTGluZVZhbHVlXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVNWR1N0cnVjdHVyZShkaW1lbnNpb25zOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgY2hhcnRDb250YWluZXIsIGhlaWdodCwgbWFyZ2luIH0gPSBkaW1lbnNpb25zO1xyXG4gICAgY29uc3QgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG5cclxuICAgIGNvbnN0IG91dGVyQ29udGFpbmVyID0gY2hhcnRDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgLmF0dHIoJ2lkJywgdGhpcy51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ291dGVyLWNvbnRhaW5lcicpXHJcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgIC5zdHlsZSgnaGVpZ2h0JywgaGVpZ2h0KVxyXG4gICAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnaGlkZGVuJylcclxuICAgICAgLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCBgJHttYXJnaW4ubGVmdH1weGApXHJcbiAgICAgIC5zdHlsZSgncGFkZGluZy1yaWdodCcsIGAke3JpZ2h0U3ZnV2lkdGh9cHhgKVxyXG4gICAgICAuc3R5bGUoJ21hcmdpbi1sZWZ0JywgJzE1cHgnKTtcclxuXHJcbiAgICBjb25zdCBzdmdZQXhpc0xlZnQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCAxMDApXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdCArIDE1fSwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAgIGNvbnN0IHN2Z1lBeGlzUmlnaHQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAxMClcclxuICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAgIC5zdHlsZSgncmlnaHQnLCAnMTJweCcpXHJcbiAgICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gICAgY29uc3QgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuXHJcbiAgICBjb25zdCBzdmcgPSBpbm5lckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCBkaW1lbnNpb25zLndpZHRoIC0gcmlnaHRTdmdXaWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMzApXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gICAgcmV0dXJuIHsgb3V0ZXJDb250YWluZXIsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgc3ZnIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckF4ZXMoc3ZnRWxlbWVudHM6IGFueSwgc2NhbGVzOiBhbnksIGNoYXJ0Q29udGV4dDogYW55LCBkaW1lbnNpb25zOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQgfSA9IHN2Z0VsZW1lbnRzO1xyXG4gICAgY29uc3QgeyB4LCB4U2NhbGVGcm9tT3JpZ2luLCB5LCBsaW5lWXNjYWxlIH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZGltZW5zaW9ucztcclxuICAgIGNvbnN0IHsgbWV0YURhdGEsIGxpbmVEYXRhLCBrZXlMaXN0IH0gPSBjaGFydENvbnRleHQ7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJYQXhpcyhzdmcsIHgsIHhTY2FsZUZyb21PcmlnaW4sIGhlaWdodCwgY2hhcnRDb250ZXh0LCBrZXlMaXN0KTtcclxuICAgIHRoaXMucmVuZGVyWUF4aXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIHksIGRpbWVuc2lvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJZQXhpc0dyaWQoc3ZnLCB5LCBkaW1lbnNpb25zLndpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYZ3JpZEJldHdlZW5MYWJlbHMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJYQXhpc0dyaWQoc3ZnLCB4LCBoZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsaW5lRGF0YSAmJiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93TGluZUNoYXJ0QXhpcyAmJiBsaW5lWXNjYWxlKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTGluZVlBeGlzKHN2Z1lBeGlzUmlnaHQsIGxpbmVZc2NhbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJYQXhpcyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgeDogYW55LFxyXG4gICAgeFNjYWxlRnJvbU9yaWdpbjogYW55LFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBjaGFydENvbnRleHQ6IGFueSxcclxuICAgIGtleUxpc3Q6IHN0cmluZ1tdXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhIH0gPSBjaGFydENvbnRleHQ7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7aGVpZ2h0fSlgKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG5cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgY29uc3QgdGV4dENsYXNzID0gJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJztcclxuICAgICAgY29uc3QgdGV4dFNlbGVjdGlvbiA9IHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKS5hdHRyKCdjbGFzcycsIHRleHRDbGFzcykuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuXHJcbiAgICAgIGlmIChrZXlMaXN0Lmxlbmd0aCA+IDEgJiYgIW1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICAgIHRleHRTZWxlY3Rpb24uYXR0cigneScsIDMyKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW5kZXJNdWx0aUNoYXJ0WEF4aXMoc3ZnLCB4LCBoZWlnaHQsIGRhdGEsIG1ldGFEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueExhYmVsc09uU2FtZUxpbmUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJYTGFiZWxzT25TYW1lTGluZShzdmcsIGRhdGEsIG1ldGFEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW5kZXIgYm90dG9tIHgtYXhpc1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDIgYXhpczInKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7aGVpZ2h0fSlgKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJyMwMDAnKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZUZyb21PcmlnaW4pLnRpY2tTaXplKDApKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdmaWxsJywgJ25vbmUnKSk7XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54Mi5heGlzMiBnLnRpY2sgdGV4dCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTXVsdGlDaGFydFhBeGlzKHN2ZzogYW55LCB4OiBhbnksIGhlaWdodDogbnVtYmVyLCBkYXRhOiBhbnlbXSwgbWV0YURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICBjb25zdCBzaG9ydF90aWNrX2xlbmd0aF9iZyA9IDU7XHJcbiAgICBjb25zdCBsb25nX3RpY2tfbGVuZ3RoX2JnID0gMzA7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7aGVpZ2h0fSlgKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKDApKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdmaWxsJywgJ25vbmUnKSk7XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgKCkgPT4ge1xyXG4gICAgICBpZiAoYWx0ZXJuYXRlX3RleHQgJiYgIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTm9BbHRlcm5hdGVYYXhpc1RleHQpIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnIC0gNztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnIC0gNDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cycpLmF0dHIoJ3knLCAoKSA9PiB7XHJcbiAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCkge1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclhMYWJlbHNPblNhbWVMaW5lKHN2ZzogYW55LCBkYXRhOiBhbnlbXSwgbWV0YURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgY29uc3QgbG9uZ190aWNrX2xlbmd0aF9iZyA9IDMwO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLmF0dHIoJ3knLCBzaG9ydF90aWNrX2xlbmd0aF9iZylcclxuICAgICAgLnRleHQoKGQpID0+IHtcclxuICAgICAgICBjb25zdCBpc1ZhbHVlVG9CZUlnbm9yZWQgPSBkYXRhLnNvbWUoXHJcbiAgICAgICAgICAoaW5kaXY6IGFueSkgPT5cclxuICAgICAgICAgICAgaW5kaXYubmFtZS50b0xvd2VyQ2FzZSgpID09PSBkLnRyaW0oKS50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICAgIGluZGl2W21ldGFEYXRhLmtleUxpc3RbMF1dID09PSAtMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljaycpXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsIGxvbmdfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ2N1cnJlbnRDb2xvcicpXHJcbiAgICAgIC50ZXh0KChkKSA9PiB7XHJcbiAgICAgICAgaWYgKGQudHJpbSgpLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC50cmltKCkuc3Vic3RyaW5nKGQuaW5kZXhPZignICcpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJZQXhpcyhzdmc6IGFueSwgc3ZnWUF4aXNMZWZ0OiBhbnksIHN2Z1lBeGlzUmlnaHQ6IGFueSwgeTogYW55LCBkaW1lbnNpb25zOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIEhpZGUgdGhlIG1haW4gWS1heGlzIGluIHRoZSBjaGFydCBhcmVhICh0byBhdm9pZCBvdmVybGFwcGluZyBsaW5lcylcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0IHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHkpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcblxyXG4gICAgLy8gRklYRUQ6IFJlbmRlciBjbGVhbiBZLWF4aXMgb24gdGhlIGxlZnQgd2l0aG91dCBkb21haW4gbGluZVxyXG4gICAgY29uc3QgeUF4aXNMZWZ0ID0gZDNcclxuICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgIC50aWNrU2l6ZSgwKSAgLy8gRklYRUQ6IE5vIHRpY2sgbGluZXNcclxuICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5QXhpc0xlZnQpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKSAgLy8gRklYRUQ6IFJlbW92ZSBZLWF4aXMgbGluZVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTNweCcpXHJcbiAgICAgIC5hdHRyKCdkeScsICcwLjMyZW0nKTtcclxuXHJcbiAgICAvLyBSZW1vdmUgdGljayBsaW5lcyBmcm9tIGxlZnQgYXhpc1xyXG4gICAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLnRpY2sgbGluZScpLnJlbW92ZSgpOyAgLy8gRklYRUQ6IFJlbW92ZSBhbGwgdGljayBsaW5lc1xyXG5cclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5KVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIHRoaXMuYXBwbHlBeGlzVmlzaWJpbGl0eVNldHRpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QXhpc1Zpc2liaWxpdHlTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW4pIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCdnLmxpYi1saW5lLXgtYXhpcy10ZXh0ID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW4pIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJykuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1Jykuc3R5bGUoJ2NvbG9yJywgJyM5OTk5OTknKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5wcml2YXRlIHJlbmRlcllBeGlzR3JpZChzdmc6IGFueSwgeTogYW55LCB3aWR0aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAvLyBGSVhFRDogSW1wcm92ZWQgZ3JpZCBzdHlsaW5nXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd5LWF4aXMtZ3JpZCcpXHJcbiAgICAgIC5jYWxsKFxyXG4gICAgICAgIGQzLmF4aXNMZWZ0KHkpXHJcbiAgICAgICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAudGlja1NpemUoLXdpZHRoKSAgLy8gRnVsbCB3aWR0aCBncmlkIGxpbmVzXHJcbiAgICAgICAgICAudGlja0Zvcm1hdCgnJykgICAgLy8gTm8gbGFiZWxzIG9uIGdyaWRcclxuICAgICAgKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICNFMEUwRTApJykgIC8vIEZJWEVEOiBMaWdodGVyIGdyaWQgY29sb3JcclxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNycpICAvLyBGSVhFRDogU2VtaS10cmFuc3BhcmVudFxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnbm9uZScpICAvLyBGSVhFRDogU29saWQgbGluZXMgaW5zdGVhZCBvZiBkYXNoZWRcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpICAvLyBGSVhFRDogUmVtb3ZlIGRvbWFpbiBsaW5lXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2xpbmUnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTsgIC8vIEZJWEVEOiBUaGluIGxpbmVzXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclhBeGlzR3JpZChzdmc6IGFueSwgeDogYW55LCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnZ3JpZCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7eC5iYW5kd2lkdGgoKSAvIDJ9LCR7aGVpZ2h0fSlgKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKC1oZWlnaHQpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yLCAjOTk5OTk5KScpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZVlBeGlzKHN2Z1lBeGlzUmlnaHQ6IGFueSwgbGluZVlzY2FsZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB5TGluZUF4aXMgPSBkM1xyXG4gICAgICAuYXhpc1JpZ2h0KGxpbmVZc2NhbGUpXHJcbiAgICAgIC50aWNrcyh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgIC50aWNrRm9ybWF0KHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dDEnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5TGluZUF4aXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJCYXJzKHN2ZzogYW55LCBjaGFydENvbnRleHQ6IGFueSwgc2NhbGVzOiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBkYXRhLCBtZXRhRGF0YSwga2V5TGlzdCwgaXNSaWEgfSA9IGNoYXJ0Q29udGV4dDtcclxuICAgIGNvbnN0IHsgeCwgeFN1Ymdyb3VwLCB5IH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZGltZW5zaW9ucztcclxuXHJcbiAgICBjb25zdCBzdGF0ZSA9IHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLnNlbGVjdEFsbCgnLnN0YXRlJylcclxuICAgICAgLmRhdGEoZGF0YSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gYHRyYW5zbGF0ZSgke3goZC5uYW1lKX0sMClgKTtcclxuXHJcbiAgICBzdGF0ZVxyXG4gICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLmRhdGEoKGQpID0+IHRoaXMucHJlcGFyZUJhckRhdGEoZCwga2V5TGlzdCkpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnYmFycycpXHJcbiAgICAgIC5vbignY2xpY2snLCAoZCkgPT4gdGhpcy5oYW5kbGVCYXJDbGljayhkLCBtZXRhRGF0YSkpXHJcbiAgICAgIC5hdHRyKCd4JywgKGQpID0+IHRoaXMuZ2V0QmFyWChkLCBkYXRhLCB4LCB4U3ViZ3JvdXApKVxyXG4gICAgICAuYXR0cigneScsIChkKSA9PiB5KGQudmFsdWUpKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCAoZCkgPT4gdGhpcy5nZXRCYXJXaWR0aChkLCBkYXRhLCB4LCB4U3ViZ3JvdXApKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgKGQpID0+IHRoaXMuZ2V0QmFySGVpZ2h0KGQsIHksIGhlaWdodCkpXHJcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgKGQpID0+IChtZXRhRGF0YS5oYXNEcmlsbERvd24gJiYgIWlzUmlhID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKSlcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAoZCkgPT4gdGhpcy5nZXRCYXJDb2xvcihkLCBtZXRhRGF0YSkpO1xyXG5cclxuICAgIGlmICghaXNSaWEgJiYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wIHx8ICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dHNPbkJhciAmJiAhdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApKSkge1xyXG4gICAgICBzdGF0ZS5zZWxlY3RBbGwoJ3JlY3QnKS5vbignbW91c2VvdXQnLCAoZCwgaSkgPT4gdGhpcy5oYW5kbGVNb3VzZU91dChzdmcpKS5vbignbW91c2VvdmVyJywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdmVyKHN2ZywgZCwgZGF0YSwgbWV0YURhdGEsIHgsIHksIHNjYWxlcy5sZWZ0QW5kUmlnaHRTcGFjZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dHNPbkJhciAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICB0aGlzLnJlbmRlckJhclRleHRzKHN0YXRlLCBkYXRhLCBtZXRhRGF0YSwga2V5TGlzdCwgeCwgeFN1Ymdyb3VwLCB5LCBpc1JpYSwgc3ZnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQmFyRGF0YShkOiBhbnksIGtleUxpc3Q6IHN0cmluZ1tdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGtleUxpc3QubWFwKChrZXkpID0+ICh7IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQmFyQ2xpY2soZDogYW55LCBtZXRhRGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoZC5rZXkgPT09ICdUYXJnZXQnKSByZXR1cm47XHJcbiAgICBpZiAoXHJcbiAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2s/Lmxlbmd0aCB8fFxyXG4gICAgICAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5uYW1lKSAmJiAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5oYW5kbGVDbGljayhkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyWChkOiBhbnksIGRhdGE6IGFueVtdLCB4OiBhbnksIHhTdWJncm91cDogYW55KTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZURyaWxsZG93bkJhclgoZCwgZGF0YSwgeCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geFN1Ymdyb3VwKGQua2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlRHJpbGxkb3duQmFyWChkOiBhbnksIGRhdGE6IGFueVtdLCB4OiBhbnkpOiBudW1iZXIge1xyXG4gICAgbGV0IHRlbXBTY2FsZTtcclxuICAgIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICB0ZW1wU2NhbGUgPSB0aGlzLmFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZSwgZGF0YSwgeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0ZW1wU2NhbGUgPyB0ZW1wU2NhbGUoZC5rZXkpIDogMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlOiBhbnksIGRhdGE6IGFueVtdLCB4OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGNvbnN0IGtleXNMZW5ndGggPSBPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGg7XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IGtleXNMZW5ndGggPT09IDIgPyAyMDAgOiAzMDA7XHJcbiAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0KSAvIDIsXHJcbiAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gb2Zmc2V0KSAvIDIsXHJcbiAgICAgIF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcFNjYWxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJXaWR0aChkOiBhbnksIGRhdGE6IGFueVtdLCB4OiBhbnksIHhTdWJncm91cDogYW55KTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIGxldCB0ZW1wU2NhbGU7XHJcbiAgICAgIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgdGVtcFNjYWxlID0gdGhpcy5hZGp1c3REcmlsbGRvd25TY2FsZSh0ZW1wU2NhbGUsIGRhdGEsIHgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0ZW1wU2NhbGUgPyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgOiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHhTdWJncm91cC5iYW5kd2lkdGgoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFySGVpZ2h0KGQ6IGFueSwgeTogYW55LCBoZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoZC52YWx1ZSA9PT0gLTEpIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG4gICAgaWYgKGQudmFsdWUpIHJldHVybiBoZWlnaHQgLSB5KGQudmFsdWUpO1xyXG4gICAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhckNvbG9yKGQ6IGFueSwgbWV0YURhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGQudmFsdWUgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgZC52YWx1ZSA+PSBwYXJzZUludCh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldFtkLmtleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQmFyVGV4dHMoXHJcbiAgICBzdGF0ZTogYW55LFxyXG4gICAgZGF0YTogYW55W10sXHJcbiAgICBtZXRhRGF0YTogYW55LFxyXG4gICAga2V5TGlzdDogc3RyaW5nW10sXHJcbiAgICB4OiBhbnksXHJcbiAgICB4U3ViZ3JvdXA6IGFueSxcclxuICAgIHk6IGFueSxcclxuICAgIGlzUmlhOiBib29sZWFuLFxyXG4gICAgc3ZnOiBhbnlcclxuICApOiB2b2lkIHtcclxuICAgIHN0YXRlXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAuZGF0YSgoZCkgPT4gdGhpcy5wcmVwYXJlQmFyRGF0YShkLCBrZXlMaXN0KSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCd4JywgMClcclxuICAgICAgLmF0dHIoJ3knLCAwKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgIC50ZXh0KChkKSA9PiB0aGlzLmdldEJhclRleHRMYWJlbChkKSlcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJyMwMDAnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICgpID0+IHRoaXMuZ2V0QmFyVGV4dEZvbnRTaXplKCkpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZCkgPT4gdGhpcy5nZXRCYXJUZXh0VHJhbnNmb3JtKGQsIGRhdGEsIHgsIHhTdWJncm91cCwgeSkpXHJcbiAgICAgIC5vbignY2xpY2snLCAoZCkgPT4gdGhpcy5oYW5kbGVCYXJDbGljayhkLCBtZXRhRGF0YSkpO1xyXG5cclxuICAgIGlmICghaXNSaWEpIHtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLm9uKCdtb3VzZW91dCcsIChkLCBpKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3V0KHN2ZykpXHJcbiAgICAgICAgLm9uKCdtb3VzZW92ZXInLCAoZCwgaSkgPT5cclxuICAgICAgICAgIHRoaXMuaGFuZGxlTW91c2VPdmVyKHN2ZywgZCwgZGF0YSwgbWV0YURhdGEsIHgsIHksIHguYmFuZHdpZHRoKCkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyVGV4dExhYmVsKGQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWQua2V5IHx8ICFkLnZhbHVlKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gZC5rZXkubGVuZ3RoID4gMjAgPyBkLmtleS5zdWJzdHJpbmcoMCwgMTcpICsgJy4uLicgOiBkLmtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyVGV4dEZvbnRTaXplKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxOTAwKSByZXR1cm4gJzE4cHgnO1xyXG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDAwKSByZXR1cm4gJzEwcHgnO1xyXG4gICAgICByZXR1cm4gJzE0cHgnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcxNHB4JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyVGV4dFRyYW5zZm9ybShkOiBhbnksIGRhdGE6IGFueVtdLCB4OiBhbnksIHhTdWJncm91cDogYW55LCB5OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRlbXBTY2FsZTtcclxuICAgIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICB0ZW1wU2NhbGUgPSB0aGlzLmFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZSwgZGF0YSwgeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEFsd2F5c0hvcml6b250YWwpIHtcclxuICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4U3ViZ3JvdXAoZC5rZXkpfSwke3koZC52YWx1ZSkgLSAzfSlgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0ZW1wU2NhbGUgJiYgIWlzTmFOKHRlbXBTY2FsZShkLmtleSkpKSB7XHJcbiAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7dGVtcFNjYWxlKGQua2V5KSArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAqIDAuNTV9LCR7eSgwKSAtIDEwfSkgcm90YXRlKDI3MClgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICd0cmFuc2xhdGUoMCwwKSc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU1vdXNlT3ZlcihcclxuICAgIHN2ZzogYW55LFxyXG4gICAgZDogYW55LFxyXG4gICAgZGF0YTogYW55W10sXHJcbiAgICBtZXRhRGF0YTogYW55LFxyXG4gICAgeDogYW55LFxyXG4gICAgeTogYW55LFxyXG4gICAgbGVmdEFuZFJpZ2h0U3BhY2VzOiBudW1iZXJcclxuICApOiB2b2lkIHtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpLnJlbW92ZSgpO1xyXG5cclxuICAgIGxldCB0ZW1wU2NhbGU7XHJcbiAgICBkYXRhLmZvckVhY2goKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9PSAwKTtcclxuICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgdGVtcFNjYWxlID0gdGhpcy5hZGp1c3REcmlsbGRvd25TY2FsZSh0ZW1wU2NhbGUsIGRhdGEsIHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IHN2Z1xyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3gnLCAoKSA9PiB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBYKGQsIHgsIHRlbXBTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcykpXHJcbiAgICAgIC5hdHRyKCd5JywgKCkgPT4geShkLnZhbHVlKSAtIDQzKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCAoKSA9PiB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBXaWR0aCh0ZW1wU2NhbGUsIG1ldGFEYXRhLCBsZWZ0QW5kUmlnaHRTcGFjZXMpKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgNDApO1xyXG5cclxuICAgIGZvcmVpZ25PYmplY3RcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RpdGxlJylcclxuICAgICAgLnN0eWxlKCd6LWluZGV4JywgOTkpXHJcbiAgICAgIC5odG1sKCgpID0+IHRoaXMuZ2V0VG9vbHRpcEhUTUwoZCwgbWV0YURhdGEpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlVG9vbHRpcFgoXHJcbiAgICBkOiBhbnksXHJcbiAgICB4OiBhbnksXHJcbiAgICB0ZW1wU2NhbGU6IGFueSxcclxuICAgIG1ldGFEYXRhOiBhbnksXHJcbiAgICBsZWZ0QW5kUmlnaHRTcGFjZXM6IG51bWJlclxyXG4gICk6IG51bWJlciB7XHJcbiAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgIGlmICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIHRlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyIC0gOTA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB4KGQubmFtZSkgK1xyXG4gICAgICAgIHRlbXBTY2FsZShkLmtleSkgLVxyXG4gICAgICAgICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyKSAvIDIgK1xyXG4gICAgICAgIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDJcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiAoXHJcbiAgICAgIHgoZC5uYW1lKSArXHJcbiAgICAgIHRlbXBTY2FsZShkLmtleSkgLVxyXG4gICAgICAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICtcclxuICAgICAgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlVG9vbHRpcFdpZHRoKHRlbXBTY2FsZTogYW55LCBtZXRhRGF0YTogYW55LCBsZWZ0QW5kUmlnaHRTcGFjZXM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgIGlmICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgICAgcmV0dXJuICcxODBweCc7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VG9vbHRpcEhUTUwoZDogYW55LCBtZXRhRGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgfHwgJyc7XHJcbiAgICBpZiAoIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JHtkLm5hbWV9PC9zcGFuPjxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLXZhbHVlXCI+PHNwYW4+JHtkLnZhbHVlfTwvc3Bhbj4ke2RhdGFUeXBlfTwvc3Bhbj5gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdGVtcEtleSA9IGQubmFtZS5sZW5ndGggPD0gOCA/IGQubmFtZSA6IGQubmFtZS5zdWJzdHJpbmcoMCwgNSkgKyAnLi4uJztcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JHt0ZW1wS2V5fToke2QudmFsdWV9JHtkYXRhVHlwZX08L3NwYW4+PHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItdmFsdWVcIj4ke2QubmFtZX08L3NwYW4+YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTW91c2VPdXQoc3ZnOiBhbnkpOiB2b2lkIHtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJMYWJlbHMoc3ZnRWxlbWVudHM6IGFueSwgc2NhbGVzOiBhbnksIGNoYXJ0Q29udGV4dDogYW55LCBkaW1lbnNpb25zOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQgfSA9IHN2Z0VsZW1lbnRzO1xyXG4gICAgY29uc3QgeyBtZXRhRGF0YSB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4gfSA9IGRpbWVuc2lvbnM7XHJcblxyXG4gICAgaWYgKG1ldGFEYXRhLnlMYWJlbCkge1xyXG4gICAgICB0aGlzLnJlbmRlcllBeGlzTGFiZWwoc3ZnWUF4aXNMZWZ0LCBtZXRhRGF0YS55TGFiZWwsIGhlaWdodCwgbWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyWEF4aXNMYWJlbChzdmcsIG1ldGFEYXRhLnhMYWJlbCwgd2lkdGgsIGhlaWdodCwgbWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWV0YURhdGEubGluZXlMYWJlbCkge1xyXG4gICAgICB0aGlzLnJlbmRlckxpbmVZQXhpc0xhYmVsKHN2Z1lBeGlzUmlnaHQsIG1ldGFEYXRhLmxpbmV5TGFiZWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyWUF4aXNMYWJlbChzdmdZQXhpc0xlZnQ6IGFueSwgeUxhYmVsOiBzdHJpbmcsIGhlaWdodDogbnVtYmVyLCBtYXJnaW46IGFueSk6IHZvaWQge1xyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgLy8gRklYRUQ6IEJldHRlciBwb3NpdGlvbmluZyBmb3IgWS1heGlzIGxhYmVsXHJcbiAgICAgIC5hdHRyKCd5JywgMCAtIG1hcmdpbi5sZWZ0ICsgMTApICAvLyBBZGp1c3RlZCBmb3IgbmV3IG1hcmdpblxyXG4gICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxNHB4JykgIC8vIEZJWEVEOiBFeHBsaWNpdCBmb250IHNpemVcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBzdmdZQXhpc0xlZnQuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKS50ZXh0KHlMYWJlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWxhYmVsLXdlZWtseUNoYXJ0cycpXHJcbiAgICAgICAgLnRleHQoeUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyWEF4aXNMYWJlbChzdmc6IGFueSwgeExhYmVsOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBtYXJnaW46IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNBY3JvbnltID0gdGhpcy5pc0Fjcm9ueW0oeExhYmVsLnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG5cclxuICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgYmFzZUNsYXNzICs9ICcgbGliLXhsYWJlbC1kcmlsbGRvd25jaGFydHMnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGJhc2VDbGFzcyArPSAnIGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJhc2VDbGFzcyArPSAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCc7XHJcbiAgICB9XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCBiYXNlQ2xhc3MpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC8vIEZJWEVEOiBJbmNyZWFzZWQgc3BhY2luZyBiZWxvdyBjaGFydCAod2FzIG1hcmdpbi50b3AgKyAyMCwgbm93IG1hcmdpbi50b3AgKyA0NSlcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt3aWR0aCAvIDJ9LCR7aGVpZ2h0ICsgbWFyZ2luLnRvcCArIDQ1fSlgKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzE0cHgnKSAgLy8gRklYRUQ6IEV4cGxpY2l0IGZvbnQgc2l6ZVxyXG4gICAgICAudGV4dChpc0Fjcm9ueW0gPyB4TGFiZWwudG9VcHBlckNhc2UoKSA6IHhMYWJlbC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNBY3JvbnltKGxhYmVsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fFxyXG4gICAgICAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVZQXhpc0xhYmVsKHN2Z1lBeGlzUmlnaHQ6IGFueSwgbGluZXlMYWJlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgIC5hdHRyKCd5JywgLTEwMClcclxuICAgICAgLmF0dHIoJ3gnLCAxMDApXHJcbiAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAudGV4dChsaW5leUxhYmVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVGFyZ2V0TGluZShzdmdFbGVtZW50czogYW55LCBzY2FsZXM6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHsgc3ZnLCBzdmdZQXhpc1JpZ2h0IH0gPSBzdmdFbGVtZW50cztcclxuICAgIGNvbnN0IHsgeSB9ID0gc2NhbGVzO1xyXG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZGltZW5zaW9ucztcclxuICAgIGNvbnN0IHsgbWV0YURhdGEgfSA9IGNoYXJ0Q29udGV4dDtcclxuICAgIGNvbnN0IHRhcmdldERhdGE6IFRhcmdldExpbmVEYXRhID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGE7XHJcblxyXG4gICAgY29uc3QgeVplcm8gPSB5KHRhcmdldERhdGEudGFyZ2V0KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgIC5hdHRyKCd4MicsIHdpZHRoKVxyXG4gICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsIHRhcmdldERhdGEuY29sb3IpO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHt5WmVybyAtIDMwfSlgKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgNTApXHJcbiAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd0YXJnZXQtZGlzcGxheScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuaHRtbCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgICAgICBjb25zdCB0YXJnZXROYW1lID0gdGFyZ2V0RGF0YS50YXJnZXROYW1lIHx8ICd0YXJnZXQnO1xyXG4gICAgICAgIHJldHVybiBgPGRpdj4ke3RhcmdldE5hbWV9PC9kaXY+PGRpdj4ke3RhcmdldERhdGEudGFyZ2V0fSR7ZGF0YVR5cGV9PC9kaXY+YDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVHcmFwaChzdmc6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIHNjYWxlczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGxpbmVEYXRhLCBtZXRhRGF0YSB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgaWYgKCFsaW5lRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHsgeCwgbGluZVlzY2FsZSB9ID0gc2NhbGVzO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgLmRhdHVtKGxpbmVEYXRhKVxyXG4gICAgICAuYXR0cignZmlsbCcsICdub25lJylcclxuICAgICAgLmF0dHIoJ3N0cm9rZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMS41KVxyXG4gICAgICAuYXR0cihcclxuICAgICAgICAnZCcsXHJcbiAgICAgICAgZDNcclxuICAgICAgICAgIC5saW5lKClcclxuICAgICAgICAgIC54KChkOiBhbnkpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAgICAgLnkoKGQ6IGFueSkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBkb3QgPSBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnbXlDaXJjbGVzJylcclxuICAgICAgLmRhdGEobGluZURhdGEpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAub24oJ2NsaWNrJywgKGQpID0+IHRoaXMuaGFuZGxlQmFyQ2xpY2soZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICBkb3RcclxuICAgICAgLmFwcGVuZCgnY2lyY2xlJylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJylcclxuICAgICAgLmF0dHIoJ2N4JywgKGQ6IGFueSkgPT4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgIC5hdHRyKCdjeScsIChkOiBhbnkpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKVxyXG4gICAgICAuYXR0cigncicsIDMpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICBkb3RcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgICAuYXR0cignY29sb3InLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAuYXR0cignc3R5bGUnLCAnZm9udC1zaXplOiAuODVlbScpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgICAuYXR0cigneScsIChkOiBhbnkpID0+IGxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAgIC50ZXh0KChkOiBhbnkpID0+IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxhYmVsRm9ybWF0dGVyKGQudmFsdWUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKSB7XHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVERDFDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlREQyQ2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0REMk9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5pc0REMU9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG59IiwiPGRpdlxyXG4gICNncm91cGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG5cclxuPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12M1xyXG4gICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgKGNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbik9XCJoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPlxyXG48L2Rpdj5cclxuXHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjFcclxuICBbdGl0bGVdPVwiY2hhcnREYXRhLm1ldGFEYXRhLnRpdGxlXCJcclxuICBbaGFzRHJpbGxEb3duXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd25cIlxyXG4gIFtpc0VkaXRFbmFibGVkXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5pc0VkaXRFbmFibGVkXCJcclxuICBbbWVudU9wdGlvbnNdPVwiY2hhcnRDb25maWd1cmF0aW9uLmhlYWRlck1lbnVPcHRpb25zXCJcclxuICBbaXNyaWFdPVwiY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXCJcclxuICBbc2VsZWN0ZWRLcGlUb29sdG9wXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zZWxlY3RlZEtwaVRvb2x0b3BcIlxyXG4gIChtZW51T3B0aW9uQ2xpY2tFdmVudCk9XCJoYW5kbGVIZWFkZXJNZW51Q2xpY2soJGV2ZW50KVwiXHJcbiAgW2lzQWxlcnRFbmFibGVkXT1cImlzQWxlcnRFbmFibGVkXCJcclxuICAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiXHJcbj48L2xpYi1jaGFydC1oZWFkZXItdjE+XHJcblxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cImdyb3VwY2hhcnRjb250YWluZXJcIlxyXG4gICAgI2dyb3VwY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
945
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUE4RWxELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7SUFxRHhEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUE3Q0EsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV6RCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsdUJBQWtCLEdBQXVCLEVBQXdCLENBQUM7UUFDbEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFVix5QkFBb0IsR0FBZ0M7WUFDakUsTUFBTSxFQUFFO2dCQUNOLEdBQUcsRUFBRSxFQUFFLEVBQU8sa0NBQWtDO2dCQUNoRCxL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bEQsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5pbnRlcmZhY2UgQ2hhcnRNZXRhRGF0YSB7XHJcbiAgY29sb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGNvbG9yQWJvdmVUYXJnZXQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gIGtleUxpc3Q6IHN0cmluZ1tdO1xyXG4gIGhhc0RyaWxsRG93bj86IGJvb2xlYW47XHJcbiAgYmFyV2l0aG91dENsaWNrPzogc3RyaW5nW107XHJcbiAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgeUxhYmVsPzogc3RyaW5nO1xyXG4gIHhMYWJlbD86IHN0cmluZztcclxuICBsaW5leUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGFyZ2V0TGluZURhdGEge1xyXG4gIHRhcmdldDogbnVtYmVyO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgdGFyZ2V0TmFtZT86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIENoYXJ0Q29uZmlndXJhdGlvbiB7XHJcbiAgbWFyZ2luOiB7IHRvcDogbnVtYmVyOyByaWdodDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XHJcbiAgbGFiZWxGb3JtYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgc3ZnSGVpZ2h0OiBudW1iZXI7XHJcbiAgbnVtYmVyT2ZZVGlja3M6IG51bWJlcjtcclxuICBsZWdlbmRKdXN0aWZpZWQ6IGJvb2xlYW47XHJcbiAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZztcclxuICB5QXhpc0xhYmVsRm9tYXR0ZXI6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XHJcbiAgbGluZUdyYXBoQ29sb3I6IHN0cmluZztcclxuICBzaG93TGluZUNoYXJ0QXhpczogYm9vbGVhbjtcclxuICBzaG93VmFsdWVzOiBib29sZWFuO1xyXG4gIGhlYWRlck1lbnVPcHRpb25zOiBhbnlbXTtcclxuICB4QXhpc0dyaWQ/OiBib29sZWFuO1xyXG4gIHlBeGlzR3JpZDogYm9vbGVhbjtcclxuICBsZWdlbmRWaXNpYmxlOiBib29sZWFuO1xyXG4gIGlzSGVhZGVyVmlzaWJsZT86IGJvb2xlYW47XHJcbiAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQ/OiBib29sZWFuO1xyXG4gIGlzTXVsdGlDaGFydEdyaWRMaW5lPzogYm9vbGVhbjtcclxuICBpc0Z1bGxTY3JlZW4/OiBib29sZWFuO1xyXG4gIGN1c3RvbVlzY2FsZT86IG51bWJlcjtcclxuICB0ZXh0c09uQmFyPzogYm9vbGVhbjtcclxuICBpc1hheGlzTGFiZWxIaWRkZW4/OiBib29sZWFuO1xyXG4gIGlzWWF4aXNMYWJlbEhpZGRlbjogYm9vbGVhbjtcclxuICBpc1lheGlzSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc1lheGlzRGFzaGVkPzogYm9vbGVhbjtcclxuICB0ZXh0Rm9ybWF0dGVyPzogc3RyaW5nO1xyXG4gIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ/OiBib29sZWFuO1xyXG4gIGlzWGdyaWRCZXR3ZWVuTGFiZWxzPzogYm9vbGVhbjtcclxuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcclxuICBoaWRlTGVnZW5kT25Ub3A6IGJvb2xlYW47XHJcbiAgaXNYYXhpc0NvbG9yOiBzdHJpbmc7XHJcbiAgbGFiZWxPdmVybGFwTWlub3JGaXg6IGJvb2xlYW47XHJcbiAgbm9Ib3ZlckVmZmVjdDogYm9vbGVhbjtcclxuICBub0hvdmVyRGlzcGxheURhdGE6IGJvb2xlYW47XHJcbiAgc2hvd1hheGlzVG9wOiBib29sZWFuO1xyXG4gIGRpc3BsYXlZYXhpc0xhYmVscz86IGJvb2xlYW47XHJcbiAgeExhYmVsc09uU2FtZUxpbmU/OiBib29sZWFuO1xyXG4gIHRleHRBbHdheXNIb3Jpem9udGFsPzogYm9vbGVhbjtcclxuICBsZWdlbmRBdFRvcFJpZ2h0PzogYm9vbGVhbjtcclxuICBpc0RyaWxsZG93bkNoYXJ0PzogYm9vbGVhbjtcclxuICBkaXNwbGF5VGl0bGVPblRvcD86IGJvb2xlYW47XHJcbiAgaXNUb2dnbGVWaXNpYmxlPzogYm9vbGVhbjtcclxuICBpc1RpdGxlSGlkZGVuPzogYm9vbGVhbjtcclxuICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b20/OiBib29sZWFuO1xyXG4gIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiBudW1iZXI7XHJcbiAgYmFyVmF1bGVDb2xvcj86IHN0cmluZztcclxuICB5QXhpc0N1c3RvbVRleHRTdHlsZXM/OiBzdHJpbmc7XHJcbiAgeUF4aXNDdXN0b21sYWJlbFN0eWxlcz86IHN0cmluZztcclxuICB4QXhpc0N1c3RvbWxhYmVsU3R5bGVzPzogc3RyaW5nO1xyXG4gIGlzUmlhPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ3JvdXAtY2hhcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JvdXAtY2hhcnQuY29tcG9uZW50Lmxlc3MnLCAnLi4vY29tbW9uLXN0eWxlcy5sZXNzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyb3VwQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRVbmlxdWVJZCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBsZWdlbmRWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogQ2hhcnRDb25maWd1cmF0aW9uID0ge30gYXMgQ2hhcnRDb25maWd1cmF0aW9uO1xyXG4gIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cztcclxuXHJcbnByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ3VyYXRpb246IFBhcnRpYWw8Q2hhcnRDb25maWd1cmF0aW9uPiA9IHtcclxuICAgIG1hcmdpbjogeyBcclxuICAgICAgdG9wOiAxNSwgICAgICAvLyBGSVhFRDogUmVkdWNlZCBmb3IgMjUwcHggaGVpZ2h0XHJcbiAgICAgIHJpZ2h0OiA0MCwgICAgXHJcbiAgICAgIGJvdHRvbTogNTAsICAgLy8gRklYRUQ6IFJlZHVjZWQgZm9yIDI1MHB4IGhlaWdodFxyXG4gICAgICBsZWZ0OiA5NSAgICAgIC8vIEZJWEVEOiBFbm91Z2ggc3BhY2UgZm9yIGxhYmVsICsgdmFsdWVzXHJcbiAgICB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDYsXHJcbiAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgeUF4aXNHcmlkOiB0cnVlLFxyXG4gICAgbGVnZW5kVmlzaWJsZTogdHJ1ZSxcclxuICAgIGlzWWF4aXNMYWJlbEhpZGRlbjogZmFsc2UsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgbGFiZWxPdmVybGFwTWlub3JGaXg6IHRydWUsXHJcbiAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgc2hvd1hheGlzVG9wOiB0cnVlLFxyXG4gICAgaG93bWFueUJhckRldGFpbHNUb0Rpc3BsYXk6IDAsXHJcbiAgfTtcclxuXHJcbiAgdW5pcXVlSWQ6IGFueSA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICBpc1pvb21lZE91dCA9IGZhbHNlO1xyXG4gIGlzREQxT3BlbiA9IGZhbHNlO1xyXG4gIGlzREQyT3BlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcblxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbj8uaGVhZGVyTWVudU9wdGlvbnM/LnNvbWUoXHJcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGQzLnNlbGVjdCgnIycgKyB0aGlzLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZ3JvdXBDaGFydCgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0OiBib29sZWFuLCBldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5vblJlc2l6ZWQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKHsgaXNab29tT3V0LCBldmVudCB9KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCwgZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaXNMZWdlbmRWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhKFxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YT8ubWV0YURhdGE/LmNvbG9ycyAmJlxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMpLmxlbmd0aCA+IDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBrZWVwT3JkZXIgPSAoYSwgYikgPT4gYTtcclxuXHJcbiAgaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lcmdlQ29uZmlndXJhdGlvbnMoKTtcclxuICAgIGNvbnN0IGNoYXJ0Q29udGV4dCA9IHRoaXMucHJlcGFyZUNoYXJ0RGF0YSgpO1xyXG4gICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuY2FsY3VsYXRlRGltZW5zaW9ucyhjaGFydENvbnRleHQpO1xyXG4gICAgY29uc3Qgc2NhbGVzID0gdGhpcy5jcmVhdGVTY2FsZXMoY2hhcnRDb250ZXh0LCBkaW1lbnNpb25zKTtcclxuICAgIGNvbnN0IHN2Z0VsZW1lbnRzID0gdGhpcy5jcmVhdGVTVkdTdHJ1Y3R1cmUoZGltZW5zaW9ucyk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJBeGVzKHN2Z0VsZW1lbnRzLCBzY2FsZXMsIGNoYXJ0Q29udGV4dCwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlckJhcnMoc3ZnRWxlbWVudHMuc3ZnLCBjaGFydENvbnRleHQsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlckxhYmVscyhzdmdFbGVtZW50cywgc2NhbGVzLCBjaGFydENvbnRleHQsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJUYXJnZXRMaW5lKHN2Z0VsZW1lbnRzLCBzY2FsZXMsIGNoYXJ0Q29udGV4dCwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLnJlbmRlckxpbmVHcmFwaChzdmdFbGVtZW50cy5zdmcsIGNoYXJ0Q29udGV4dCwgc2NhbGVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVyZ2VDb25maWd1cmF0aW9ucygpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25ba2V5XSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBrZXksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24/Lm1hcmdpbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4gPSB7XHJcbiAgICAgICAgLi4udGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbi5tYXJnaW4sXHJcbiAgICAgICAgLi4udGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZFZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQ2hhcnREYXRhKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2hhcnREYXRhLmRhdGE7XHJcbiAgICBjb25zdCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSA9IHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhO1xyXG4gICAgY29uc3QgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuXHJcbiAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgbWV0YURhdGEuY29sb3JBYm92ZVRhcmdldCA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkYXRhLFxyXG4gICAgICBtZXRhRGF0YSxcclxuICAgICAgbGluZURhdGEsXHJcbiAgICAgIGtleUxpc3Q6IG1ldGFEYXRhLmtleUxpc3QsXHJcbiAgICAgIGNvbG9yTWFwOiBtZXRhRGF0YS5jb2xvcnMsXHJcbiAgICAgIGlzUmlhOiB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbj8uaXNSaWEgfHwgZmFsc2UsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVEaW1lbnNpb25zKGNoYXJ0Q29udGV4dDogYW55KSB7XHJcbiAgICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmdyb3VwY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgY29uc3QgbWFyZ2luID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luO1xyXG5cclxuICAgIGxldCB3aWR0aCA9IHRoaXMuY2FsY3VsYXRlV2lkdGgoY2hhcnRDb250YWluZXIsIG1hcmdpbik7XHJcbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy5jYWxjdWxhdGVIZWlnaHQodmVydGljYWxzdGFja2VkY29udGFpbmVyLCBtYXJnaW4pO1xyXG5cclxuICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIG1hcmdpbiwgY2hhcnRDb250YWluZXIsIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVXaWR0aChjaGFydENvbnRhaW5lcjogYW55LCBtYXJnaW46IGFueSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBiYXNlV2lkdGggPSBwYXJzZUludChjaGFydENvbnRhaW5lci5zdHlsZSgnd2lkdGgnKSkgLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcclxuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aDtcclxuICAgIGxldCB3aWR0aCA9IGJhc2VXaWR0aDtcclxuXHJcbiAgICBpZiAoZGF0YUxlbmd0aCA+IDMwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgY29uc3QgbXVsdGlwbGllciA9IHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTEgPyA2MCA6IDQwO1xyXG4gICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBkYXRhTGVuZ3RoICogbXVsdGlwbGllcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiYgd2lkdGggPCBkYXRhTGVuZ3RoICogMTIwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTIwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhTGVuZ3RoID4gOCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICBpZiAodGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJiB3aWR0aCA8IGRhdGFMZW5ndGggKiAyNTApIHtcclxuICAgICAgICB3aWR0aCA9IGRhdGFMZW5ndGggKiAyNTA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTYwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHdpZHRoO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlSGVpZ2h0KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcjogYW55LCBtYXJnaW46IGFueSk6IG51bWJlciB7XHJcbiAgICAvLyBGSVhFRDogUmVtb3ZlIG1pbmltdW0gaGVpZ2h0IGNvbnN0cmFpbnQgdG8gcmVzcGVjdCBjb250YWluZXIgc2l6ZVxyXG4gICAgbGV0IGNvbnRhaW5lckhlaWdodCA9IHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpO1xyXG4gICAgXHJcbiAgICBsZXQgaGVpZ2h0ID1cclxuICAgICAgY29udGFpbmVySGVpZ2h0ICpcclxuICAgICAgICAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtXHJcbiAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICBtYXJnaW4uYm90dG9tO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4gJiYgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9PSA3MCkge1xyXG4gICAgICBoZWlnaHQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuKSB7XHJcbiAgICAgIGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmICF0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSAtIDEzMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgIGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tIC0gMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZJWEVEOiBGb3IgZml4ZWQgaGVpZ2h0IGNvbnRhaW5lcnMgKGxpa2UgMzAwcHgpLCBlbnN1cmUgaXQgZml0c1xyXG4gICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4gJiYgIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgaGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b207XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlaWdodDtcclxuICB9XHJcblxyXG5wcml2YXRlIGNyZWF0ZVNjYWxlcyhjaGFydENvbnRleHQ6IGFueSwgZGltZW5zaW9uczogYW55KSB7XHJcbiAgICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhLCBsaW5lRGF0YSwga2V5TGlzdCB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4gfSA9IGRpbWVuc2lvbnM7XHJcbiAgICBcclxuICAgIC8vIEZJWEVEOiBSZWR1Y2Ugc3BhY2VzIGZvciBiZXR0ZXIgYmFyIGRpc3RyaWJ1dGlvblxyXG4gICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgY29uc3QgbGVmdEFuZFJpZ2h0U3BhY2VzID0gZGF0YUxlbmd0aCA8PSA1ID8gMjAgOiAoZGF0YUxlbmd0aCA8PSAxMCA/IDM1IDogNTApO1xyXG4gICAgY29uc3QgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwcyA9IGQzLm1hcChkYXRhLCAoZCkgPT4gZC5uYW1lKS5rZXlzKCk7XHJcblxyXG4gICAgbGV0IHg6IGFueTtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHggPSBkM1xyXG4gICAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAgICAgLmFsaWduKDAuNSlcclxuICAgICAgICAucGFkZGluZygwLjUpXHJcbiAgICAgICAgLmRvbWFpbihkYXRhLm1hcCgoZDogYW55KSA9PiBkLm5hbWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgeCA9IGQzXHJcbiAgICAgICAgLnNjYWxlQmFuZCgpXHJcbiAgICAgICAgLmRvbWFpbihncm91cHMpXHJcbiAgICAgICAgLnJhbmdlKFtsZWZ0QW5kUmlnaHRTcGFjZXMsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlc10pXHJcbiAgICAgICAgLnBhZGRpbmcoZGF0YUxlbmd0aCA8PSA1ID8gMC40IDogMC4zKTsgLy8gRklYRUQ6IEJldHRlciBwYWRkaW5nIGZvciBmZXdlciBiYXJzXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeFNjYWxlRnJvbU9yaWdpbiA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihncm91cHMpLnJhbmdlKFswLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGhdKTtcclxuXHJcbiAgICBjb25zdCB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5TGlzdCkucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuXHJcbiAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlTWF4VmFsdWUoZGF0YSwga2V5TGlzdCk7XHJcbiAgICBjb25zdCB5ID0gZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG5cclxuICAgIGxldCBsaW5lWXNjYWxlID0gbnVsbDtcclxuICAgIGlmIChsaW5lRGF0YSkge1xyXG4gICAgICBsaW5lWXNjYWxlID0gdGhpcy5jcmVhdGVMaW5lWVNjYWxlKGxpbmVEYXRhLCBoZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbG9yID0gZDMuc2NhbGVPcmRpbmFsKCkuZG9tYWluKGtleUxpc3QpLnJhbmdlKE9iamVjdC52YWx1ZXMobWV0YURhdGEuY29sb3JzKSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeCxcclxuICAgICAgeFNjYWxlRnJvbU9yaWdpbixcclxuICAgICAgeFN1Ymdyb3VwLFxyXG4gICAgICB5LFxyXG4gICAgICBsaW5lWXNjYWxlLFxyXG4gICAgICBjb2xvcixcclxuICAgICAgbGVmdEFuZFJpZ2h0U3BhY2VzLFxyXG4gICAgICByaWdodFN2Z1dpZHRoLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlTWF4VmFsdWUoZGF0YTogYW55W10sIGtleUxpc3Q6IHN0cmluZ1tdKTogbnVtYmVyIHtcclxuICAgIGxldCBtYXhWYWx1ZSA9IGQzLm1heChkYXRhLCAoZCkgPT4gZDMubWF4KGtleUxpc3QsIChrZXkpID0+ICtkW2tleV0pKSB8fCAwO1xyXG5cclxuICAgIGlmIChtYXhWYWx1ZSA9PT0gMCkge1xyXG4gICAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhXHJcbiAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMFxyXG4gICAgICAgIDogMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgICAgbWF4VmFsdWUgKj0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJiBtYXhWYWx1ZSA8IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQ7XHJcbiAgICAgIG1heFZhbHVlID0gbWF4VmFsdWUgPCAxMCAmJiB0YXJnZXQgPCAxMCA/IHRhcmdldCArIDMgOiB0YXJnZXQgKyAyMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF4VmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUxpbmVZU2NhbGUobGluZURhdGE6IGFueVtdLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgbGV0IG1heExpbmVWYWx1ZSA9IGQzLm1heChsaW5lRGF0YSwgKGQpID0+ICtkLnZhbHVlKSB8fCAwO1xyXG4gICAgbWF4TGluZVZhbHVlICo9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSB8fCAxO1xyXG5cclxuICAgIGxldCBtaW5MaW5lVmFsdWUgPSBkMy5taW4obGluZURhdGEsIChkKSA9PiArZC52YWx1ZSkgfHwgMDtcclxuICAgIGlmIChtYXhMaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgLT0gMztcclxuICAgIGlmIChtaW5MaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgPSAwO1xyXG5cclxuICAgIHJldHVybiBkMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbbWluTGluZVZhbHVlLCBtYXhMaW5lVmFsdWVdKS5yYW5nZShbaGVpZ2h0LCBtaW5MaW5lVmFsdWVdKTtcclxuICB9XHJcblxyXG5wcml2YXRlIGNyZWF0ZVNWR1N0cnVjdHVyZShkaW1lbnNpb25zOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgY2hhcnRDb250YWluZXIsIGhlaWdodCwgbWFyZ2luIH0gPSBkaW1lbnNpb25zO1xyXG4gICAgY29uc3QgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG5cclxuICAgIGNvbnN0IG91dGVyQ29udGFpbmVyID0gY2hhcnRDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgLmF0dHIoJ2lkJywgdGhpcy51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ291dGVyLWNvbnRhaW5lcicpXHJcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7aGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b219cHhgKVxyXG4gICAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnaGlkZGVuJylcclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpXHJcbiAgICAgIC5zdHlsZSgncGFkZGluZy1sZWZ0JywgYCR7bWFyZ2luLmxlZnR9cHhgKVxyXG4gICAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsICcxNXB4Jyk7XHJcblxyXG4gICAgLy8gRklYRUQ6IFBvc2l0aW9uIFktYXhpcyB0byBzaG93IGxhYmVsIHByb3Blcmx5XHJcbiAgICBjb25zdCBzdmdZQXhpc0xlZnQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCBtYXJnaW4ubGVmdCArIDE1KSAvLyBGSVhFRDogV2lkdGggbWF0Y2hlcyBsZWZ0IG1hcmdpblxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAuc3R5bGUoJ2xlZnQnLCAnLTE1cHgnKSAvLyBGSVhFRDogUG9zaXRpb24gdG8gaW5jbHVkZSBsYWJlbFxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdH0sJHttYXJnaW4udG9wfSlgKTsgLy8gRklYRUQ6IFByb3BlciB0cmFuc2Zvcm1cclxuXHJcbiAgICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKVxyXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgLnN0eWxlKCdyaWdodCcsICcxMnB4JylcclxuICAgICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgICBjb25zdCBpbm5lckNvbnRhaW5lciA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdpbm5lci1jb250YWluZXInKVxyXG4gICAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAuc3R5bGUoJ2hlaWdodCcsICcxMDAlJylcclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKVxyXG4gICAgICAuc3R5bGUoJ292ZXJmbG93LXknLCAnaGlkZGVuJyk7XHJcblxyXG4gICAgY29uc3Qgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgZGltZW5zaW9ucy53aWR0aCAtIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSlcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgICByZXR1cm4geyBvdXRlckNvbnRhaW5lciwgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBzdmcgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQXhlcyhzdmdFbGVtZW50czogYW55LCBzY2FsZXM6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCB9ID0gc3ZnRWxlbWVudHM7XHJcbiAgICBjb25zdCB7IHgsIHhTY2FsZUZyb21PcmlnaW4sIHksIGxpbmVZc2NhbGUgfSA9IHNjYWxlcztcclxuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBkaW1lbnNpb25zO1xyXG4gICAgY29uc3QgeyBtZXRhRGF0YSwgbGluZURhdGEsIGtleUxpc3QgfSA9IGNoYXJ0Q29udGV4dDtcclxuXHJcbiAgICB0aGlzLnJlbmRlclhBeGlzKHN2ZywgeCwgeFNjYWxlRnJvbU9yaWdpbiwgaGVpZ2h0LCBjaGFydENvbnRleHQsIGtleUxpc3QpO1xyXG4gICAgdGhpcy5yZW5kZXJZQXhpcyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgeSwgZGltZW5zaW9ucyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzR3JpZCkge1xyXG4gICAgICB0aGlzLnJlbmRlcllBeGlzR3JpZChzdmcsIHksIGRpbWVuc2lvbnMud2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgICB0aGlzLnJlbmRlclhBeGlzR3JpZChzdmcsIHgsIGhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxpbmVEYXRhICYmIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dMaW5lQ2hhcnRBeGlzICYmIGxpbmVZc2NhbGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJMaW5lWUF4aXMoc3ZnWUF4aXNSaWdodCwgbGluZVlzY2FsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJYQXhpcyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgeDogYW55LFxyXG4gICAgeFNjYWxlRnJvbU9yaWdpbjogYW55LFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBjaGFydENvbnRleHQ6IGFueSxcclxuICAgIGtleUxpc3Q6IHN0cmluZ1tdXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhIH0gPSBjaGFydENvbnRleHQ7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gRklYRUQ6IFgtYXhpcyB3aXRoIGJvdHRvbSBsaW5lXHJcbiAgICAgIGNvbnN0IHhBeGlzID0gc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7aGVpZ2h0fSlgKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpO1xyXG5cclxuICAgICAgLy8gRklYRUQ6IEtlZXAgWC1heGlzIGxpbmUgdmlzaWJsZVxyXG4gICAgICB4QXhpc1xyXG4gICAgICAgIC5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICM5OTk5OTkpJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuXHJcbiAgICAgIHhBeGlzLnNlbGVjdEFsbCgnZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgIGNvbnN0IHRleHRDbGFzcyA9ICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bic7XHJcbiAgICAgIGNvbnN0IHRleHRTZWxlY3Rpb24gPSB4QXhpc1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCB0ZXh0Q2xhc3MpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4Jyk7XHJcblxyXG4gICAgICBpZiAoa2V5TGlzdC5sZW5ndGggPiAxICYmICFtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgICB0ZXh0U2VsZWN0aW9uLmF0dHIoJ3knLCAzMik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTXVsdGlDaGFydFhBeGlzKHN2ZywgeCwgaGVpZ2h0LCBkYXRhLCBtZXRhRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhMYWJlbHNPblNhbWVMaW5lKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyWExhYmVsc09uU2FtZUxpbmUoc3ZnLCBkYXRhLCBtZXRhRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQm90dG9tIHgtYXhpcyB3aXRoIGxpbmVcclxuICAgIGNvbnN0IHhBeGlzMiA9IHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gyIGF4aXMyJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2hlaWdodH0pYClcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICcjMDAwJylcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGVGcm9tT3JpZ2luKS50aWNrU2l6ZSgwKSk7XHJcblxyXG4gICAgLy8gRklYRUQ6IFNob3cgWC1heGlzIGxpbmVcclxuICAgIHhBeGlzMlxyXG4gICAgICAuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgIzk5OTk5OSknKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKVxyXG4gICAgICAuYXR0cignZmlsbCcsICdub25lJyk7XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54Mi5heGlzMiBnLnRpY2sgdGV4dCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTXVsdGlDaGFydFhBeGlzKHN2ZzogYW55LCB4OiBhbnksIGhlaWdodDogbnVtYmVyLCBkYXRhOiBhbnlbXSwgbWV0YURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICBjb25zdCBzaG9ydF90aWNrX2xlbmd0aF9iZyA9IDU7XHJcbiAgICBjb25zdCBsb25nX3RpY2tfbGVuZ3RoX2JnID0gMzA7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7aGVpZ2h0fSlgKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKDApKVxyXG4gICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdmaWxsJywgJ25vbmUnKSk7XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgKCkgPT4ge1xyXG4gICAgICBpZiAoYWx0ZXJuYXRlX3RleHQgJiYgIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTm9BbHRlcm5hdGVYYXhpc1RleHQpIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnIC0gNztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnIC0gNDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cycpLmF0dHIoJ3knLCAoKSA9PiB7XHJcbiAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCkge1xyXG4gICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclhMYWJlbHNPblNhbWVMaW5lKHN2ZzogYW55LCBkYXRhOiBhbnlbXSwgbWV0YURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgY29uc3QgbG9uZ190aWNrX2xlbmd0aF9iZyA9IDMwO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLmF0dHIoJ3knLCBzaG9ydF90aWNrX2xlbmd0aF9iZylcclxuICAgICAgLnRleHQoKGQpID0+IHtcclxuICAgICAgICBjb25zdCBpc1ZhbHVlVG9CZUlnbm9yZWQgPSBkYXRhLnNvbWUoXHJcbiAgICAgICAgICAoaW5kaXY6IGFueSkgPT5cclxuICAgICAgICAgICAgaW5kaXYubmFtZS50b0xvd2VyQ2FzZSgpID09PSBkLnRyaW0oKS50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICAgIGluZGl2W21ldGFEYXRhLmtleUxpc3RbMF1dID09PSAtMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljaycpXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsIGxvbmdfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ2N1cnJlbnRDb2xvcicpXHJcbiAgICAgIC50ZXh0KChkKSA9PiB7XHJcbiAgICAgICAgaWYgKGQudHJpbSgpLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC50cmltKCkuc3Vic3RyaW5nKGQuaW5kZXhPZignICcpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgcmVuZGVyWUF4aXMoc3ZnOiBhbnksIHN2Z1lBeGlzTGVmdDogYW55LCBzdmdZQXhpc1JpZ2h0OiBhbnksIHk6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICAvLyBNYWluIFktYXhpcyBpbiBjaGFydCBhcmVhIChoaWRkZW4pXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5KVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIC8vIEZJWEVEOiBMZWZ0IFktYXhpcyB3aXRoIHByb3BlciBwb3NpdGlvbmluZ1xyXG4gICAgY29uc3QgeUF4aXNMZWZ0ID0gZDNcclxuICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrRm9ybWF0KHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgY29uc3QgeUF4aXNHcm91cCA9IHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHlBeGlzTGVmdCk7XHJcblxyXG4gICAgLy8gRklYRUQ6IEFkZCBZLWF4aXMgdmVydGljYWwgbGluZVxyXG4gICAgeUF4aXNHcm91cFxyXG4gICAgICAuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgIzk5OTk5OSknKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuXHJcbiAgICAvLyBGSVhFRDogU3R5bGUgWS1heGlzIHRleHQgd2l0aCBwcm9wZXIgcG9zaXRpb25pbmdcclxuICAgIHlBeGlzR3JvdXBcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEycHgnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJzQwMCcpXHJcbiAgICAgIC5hdHRyKCd4JywgLTgpICAvLyBGSVhFRDogU2xpZ2h0IG9mZnNldCBmcm9tIGF4aXMgbGluZVxyXG4gICAgICAuYXR0cignZHknLCAnMC4zMmVtJyk7XHJcblxyXG4gICAgLy8gUmlnaHQgWS1heGlzIChoaWRkZW4pXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICB0aGlzLmFwcGx5QXhpc1Zpc2liaWxpdHlTZXR0aW5ncygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUF4aXNWaXNpYmlsaXR5U2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnZy5saWItbGluZS14LWF4aXMtdGV4dCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpLnN0eWxlKCdjb2xvcicsICcjOTk5OTk5Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJZQXhpc0dyaWQoc3ZnOiBhbnksIHk6IGFueSwgd2lkdGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneS1heGlzLWdyaWQnKVxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkMy5heGlzTGVmdCh5KVxyXG4gICAgICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuICAgICAgICAgIC50aWNrRm9ybWF0KCcnKVxyXG4gICAgICApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAnI0U4RThFOCcpXHJcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjgnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnbm9uZScpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKVxyXG4gICAgICAuc2VsZWN0QWxsKCdsaW5lJylcclxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMC41cHgnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyWEF4aXNHcmlkKHN2ZzogYW55LCB4OiBhbnksIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt4LmJhbmR3aWR0aCgpIC8gMn0sJHtoZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoLWhlaWdodCkudGlja0Zvcm1hdCgnJykpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IsICM5OTk5OTkpJylcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJMaW5lWUF4aXMoc3ZnWUF4aXNSaWdodDogYW55LCBsaW5lWXNjYWxlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgIC5heGlzUmlnaHQobGluZVlzY2FsZSlcclxuICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUxpbmVBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0MScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHlMaW5lQXhpcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckJhcnMoc3ZnOiBhbnksIGNoYXJ0Q29udGV4dDogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhLCBrZXlMaXN0LCBpc1JpYSB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgY29uc3QgeyB4LCB4U3ViZ3JvdXAsIHkgfSA9IHNjYWxlcztcclxuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBkaW1lbnNpb25zO1xyXG5cclxuICAgIGNvbnN0IHN0YXRlID0gc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuc2VsZWN0QWxsKCcuc3RhdGUnKVxyXG4gICAgICAuZGF0YShkYXRhKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiBgdHJhbnNsYXRlKCR7eChkLm5hbWUpfSwwKWApO1xyXG5cclxuICAgIHN0YXRlXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAuZGF0YSgoZCkgPT4gdGhpcy5wcmVwYXJlQmFyRGF0YShkLCBrZXlMaXN0KSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgncmVjdCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdiYXJzJylcclxuICAgICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhKSlcclxuICAgICAgLmF0dHIoJ3gnLCAoZCkgPT4gdGhpcy5nZXRCYXJYKGQsIGRhdGEsIHgsIHhTdWJncm91cCkpXHJcbiAgICAgIC5hdHRyKCd5JywgKGQpID0+IHkoZC52YWx1ZSkpXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIChkKSA9PiB0aGlzLmdldEJhcldpZHRoKGQsIGRhdGEsIHgsIHhTdWJncm91cCkpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCAoZCkgPT4gdGhpcy5nZXRCYXJIZWlnaHQoZCwgeSwgaGVpZ2h0KSlcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCAoZCkgPT4gKG1ldGFEYXRhLmhhc0RyaWxsRG93biAmJiAhaXNSaWEgPyAncG9pbnRlcicgOiAnZGVmYXVsdCcpKVxyXG4gICAgICAuYXR0cignZmlsbCcsIChkKSA9PiB0aGlzLmdldEJhckNvbG9yKGQsIG1ldGFEYXRhKSk7XHJcblxyXG4gICAgaWYgKCFpc1JpYSAmJiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3AgfHwgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyICYmICF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkpKSB7XHJcbiAgICAgIHN0YXRlLnNlbGVjdEFsbCgncmVjdCcpLm9uKCdtb3VzZW91dCcsIChkLCBpKSA9PiB0aGlzLmhhbmRsZU1vdXNlT3V0KHN2ZykpLm9uKCdtb3VzZW92ZXInLCAoZCwgaSkgPT4gdGhpcy5oYW5kbGVNb3VzZU92ZXIoc3ZnLCBkLCBkYXRhLCBtZXRhRGF0YSwgeCwgeSwgc2NhbGVzLmxlZnRBbmRSaWdodFNwYWNlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQmFyVGV4dHMoc3RhdGUsIGRhdGEsIG1ldGFEYXRhLCBrZXlMaXN0LCB4LCB4U3ViZ3JvdXAsIHksIGlzUmlhLCBzdmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVCYXJEYXRhKGQ6IGFueSwga2V5TGlzdDogc3RyaW5nW10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4ga2V5TGlzdC5tYXAoKGtleSkgPT4gKHsga2V5LCB2YWx1ZTogZFtrZXldLCBuYW1lOiBkLm5hbWUgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVCYXJDbGljayhkOiBhbnksIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChkLmtleSA9PT0gJ1RhcmdldCcpIHJldHVybjtcclxuICAgIGlmIChcclxuICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8ubGVuZ3RoIHx8XHJcbiAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJYKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSwgeFN1Ymdyb3VwOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlRHJpbGxkb3duQmFyWChkLCBkYXRhLCB4KTtcclxuICAgIH1cclxuICAgIHJldHVybiB4U3ViZ3JvdXAoZC5rZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVEcmlsbGRvd25CYXJYKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSk6IG51bWJlciB7XHJcbiAgICBsZXQgdGVtcFNjYWxlO1xyXG4gICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRlbXBTY2FsZSA/IHRlbXBTY2FsZShkLmtleSkgOiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGp1c3REcmlsbGRvd25TY2FsZSh0ZW1wU2NhbGU6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3Qga2V5c0xlbmd0aCA9IE9iamVjdC5rZXlzKHRoaXMuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aDtcclxuICAgICAgY29uc3Qgb2Zmc2V0ID0ga2V5c0xlbmd0aCA9PT0gMiA/IDIwMCA6IDMwMDtcclxuICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSBvZmZzZXQpIC8gMixcclxuICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSBvZmZzZXQpIC8gMixcclxuICAgICAgXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wU2NhbGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJhcldpZHRoKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSwgeFN1Ymdyb3VwOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgbGV0IHRlbXBTY2FsZTtcclxuICAgICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT09IGQubmFtZSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICB0ZW1wU2NhbGUgPSB0aGlzLmFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZSwgZGF0YSwgeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRlbXBTY2FsZSA/IHRlbXBTY2FsZS5iYW5kd2lkdGgoKSA6IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geFN1Ymdyb3VwLmJhbmR3aWR0aCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJIZWlnaHQoZDogYW55LCB5OiBhbnksIGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChkLnZhbHVlID09PSAtMSkgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgICBpZiAoZC52YWx1ZSkgcmV0dXJuIGhlaWdodCAtIHkoZC52YWx1ZSk7XHJcbiAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyQ29sb3IoZDogYW55LCBtZXRhRGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChcclxuICAgICAgZC52YWx1ZSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICBkLnZhbHVlID49IHBhcnNlSW50KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0W2Qua2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJCYXJUZXh0cyhcclxuICAgIHN0YXRlOiBhbnksXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIG1ldGFEYXRhOiBhbnksXHJcbiAgICBrZXlMaXN0OiBzdHJpbmdbXSxcclxuICAgIHg6IGFueSxcclxuICAgIHhTdWJncm91cDogYW55LFxyXG4gICAgeTogYW55LFxyXG4gICAgaXNSaWE6IGJvb2xlYW4sXHJcbiAgICBzdmc6IGFueVxyXG4gICk6IHZvaWQge1xyXG4gICAgc3RhdGVcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5kYXRhKChkKSA9PiB0aGlzLnByZXBhcmVCYXJEYXRhKGQsIGtleUxpc3QpKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ3gnLCAwKVxyXG4gICAgICAuYXR0cigneScsIDApXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgLnRleHQoKGQpID0+IHRoaXMuZ2V0QmFyVGV4dExhYmVsKGQpKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAnIzAwMCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnYm9sZCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgKCkgPT4gdGhpcy5nZXRCYXJUZXh0Rm9udFNpemUoKSlcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkKSA9PiB0aGlzLmdldEJhclRleHRUcmFuc2Zvcm0oZCwgZGF0YSwgeCwgeFN1Ymdyb3VwLCB5KSlcclxuICAgICAgLm9uKCdjbGljaycsIChkKSA9PiB0aGlzLmhhbmRsZUJhckNsaWNrKGQsIG1ldGFEYXRhKSk7XHJcblxyXG4gICAgaWYgKCFpc1JpYSkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJy5saWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgKGQsIGkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnKSlcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIChkLCBpKSA9PlxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVNb3VzZU92ZXIoc3ZnLCBkLCBkYXRhLCBtZXRhRGF0YSwgeCwgeSwgeC5iYW5kd2lkdGgoKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJUZXh0TGFiZWwoZDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghZC5rZXkgfHwgIWQudmFsdWUpIHJldHVybiAnJztcclxuICAgIHJldHVybiBkLmtleS5sZW5ndGggPiAyMCA/IGQua2V5LnN1YnN0cmluZygwLCAxNykgKyAnLi4uJyA6IGQua2V5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJUZXh0Rm9udFNpemUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDE5MDApIHJldHVybiAnMThweCc7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0MDApIHJldHVybiAnMTBweCc7XHJcbiAgICAgIHJldHVybiAnMTRweCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJzE0cHgnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJUZXh0VHJhbnNmb3JtKGQ6IGFueSwgZGF0YTogYW55W10sIHg6IGFueSwgeFN1Ymdyb3VwOiBhbnksIHk6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGVtcFNjYWxlO1xyXG4gICAgZGF0YS5mb3JFYWNoKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpbmRpdi5uYW1lID09PSBkLm5hbWUpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPT0gMCk7XHJcbiAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgIHRlbXBTY2FsZSA9IHRoaXMuYWRqdXN0RHJpbGxkb3duU2NhbGUodGVtcFNjYWxlLCBkYXRhLCB4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0QWx3YXlzSG9yaXpvbnRhbCkge1xyXG4gICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3hTdWJncm91cChkLmtleSl9LCR7eShkLnZhbHVlKSAtIDN9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRlbXBTY2FsZSAmJiAhaXNOYU4odGVtcFNjYWxlKGQua2V5KSkpIHtcclxuICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpICogMC41NX0sJHt5KDApIC0gMTB9KSByb3RhdGUoMjcwKWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLDApJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTW91c2VPdmVyKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBkOiBhbnksXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIG1ldGFEYXRhOiBhbnksXHJcbiAgICB4OiBhbnksXHJcbiAgICB5OiBhbnksXHJcbiAgICBsZWZ0QW5kUmlnaHRTcGFjZXM6IG51bWJlclxyXG4gICk6IHZvaWQge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcblxyXG4gICAgbGV0IHRlbXBTY2FsZTtcclxuICAgIGRhdGEuZm9yRWFjaCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaW5kaXYubmFtZSA9PT0gZC5uYW1lKSB7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT09IDApO1xyXG4gICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICB0ZW1wU2NhbGUgPSB0aGlzLmFkanVzdERyaWxsZG93blNjYWxlKHRlbXBTY2FsZSwgZGF0YSwgeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmb3JlaWduT2JqZWN0ID0gc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAuYXR0cigneCcsICgpID0+IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFgoZCwgeCwgdGVtcFNjYWxlLCBtZXRhRGF0YSwgbGVmdEFuZFJpZ2h0U3BhY2VzKSlcclxuICAgICAgLmF0dHIoJ3knLCAoKSA9PiB5KGQudmFsdWUpIC0gNDMpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsICgpID0+IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFdpZHRoKHRlbXBTY2FsZSwgbWV0YURhdGEsIGxlZnRBbmRSaWdodFNwYWNlcykpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCA0MCk7XHJcblxyXG4gICAgZm9yZWlnbk9iamVjdFxyXG4gICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgLmh0bWwoKCkgPT4gdGhpcy5nZXRUb29sdGlwSFRNTChkLCBtZXRhRGF0YSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwWChcclxuICAgIGQ6IGFueSxcclxuICAgIHg6IGFueSxcclxuICAgIHRlbXBTY2FsZTogYW55LFxyXG4gICAgbWV0YURhdGE6IGFueSxcclxuICAgIGxlZnRBbmRSaWdodFNwYWNlczogbnVtYmVyXHJcbiAgKTogbnVtYmVyIHtcclxuICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICByZXR1cm4geChkLm5hbWUpICsgdGVtcFNjYWxlKGQua2V5KSArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDIgLSA5MDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHgoZC5uYW1lKSArXHJcbiAgICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICAgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArXHJcbiAgICAgICAgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgeChkLm5hbWUpICtcclxuICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyKSAvIDIgK1xyXG4gICAgICB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwV2lkdGgodGVtcFNjYWxlOiBhbnksIG1ldGFEYXRhOiBhbnksIGxlZnRBbmRSaWdodFNwYWNlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb29sdGlwSFRNTChkOiBhbnksIG1ldGFEYXRhOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgIGlmICghdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke2QubmFtZX08L3NwYW4+PHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItdmFsdWVcIj48c3Bhbj4ke2QudmFsdWV9PC9zcGFuPiR7ZGF0YVR5cGV9PC9zcGFuPmA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZW1wS2V5ID0gZC5uYW1lLmxlbmd0aCA8PSA4ID8gZC5uYW1lIDogZC5uYW1lLnN1YnN0cmluZygwLCA1KSArICcuLi4nO1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke3RlbXBLZXl9OiR7ZC52YWx1ZX0ke2RhdGFUeXBlfTwvc3Bhbj48c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPiR7ZC5uYW1lfTwvc3Bhbj5gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZU91dChzdmc6IGFueSk6IHZvaWQge1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxhYmVscyhzdmdFbGVtZW50czogYW55LCBzY2FsZXM6IGFueSwgY2hhcnRDb250ZXh0OiBhbnksIGRpbWVuc2lvbnM6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCB9ID0gc3ZnRWxlbWVudHM7XHJcbiAgICBjb25zdCB7IG1ldGFEYXRhIH0gPSBjaGFydENvbnRleHQ7XHJcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIG1hcmdpbiB9ID0gZGltZW5zaW9ucztcclxuXHJcbiAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyWUF4aXNMYWJlbChzdmdZQXhpc0xlZnQsIG1ldGFEYXRhLnlMYWJlbCwgaGVpZ2h0LCBtYXJnaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgdGhpcy5yZW5kZXJYQXhpc0xhYmVsKHN2ZywgbWV0YURhdGEueExhYmVsLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS5saW5leUxhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTGluZVlBeGlzTGFiZWwoc3ZnWUF4aXNSaWdodCwgbWV0YURhdGEubGluZXlMYWJlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdDogYW55LCB5TGFiZWw6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIsIG1hcmdpbjogYW55KTogdm9pZCB7XHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMScpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAvLyBGSVhFRDogUHJvcGVyIHBvc2l0aW9uaW5nIGZvciBsYWJlbFxyXG4gICAgICAuYXR0cigneScsIC03MCkgIC8vIEZJWEVEOiBEaXN0YW5jZSBmcm9tIFktYXhpc1xyXG4gICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcclxuICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICc0MDAnKVxyXG4gICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpLnRleHQoeUxhYmVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgIC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15bGFiZWwtd2Vla2x5Q2hhcnRzJylcclxuICAgICAgICAudGV4dCh5TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJYQXhpc0xhYmVsKHN2ZzogYW55LCB4TGFiZWw6IHN0cmluZywgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG1hcmdpbjogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc0Fjcm9ueW0gPSB0aGlzLmlzQWNyb255bSh4TGFiZWwucmVwbGFjZSgvW15BLVphLXpdL2csICcnKSk7XHJcblxyXG4gICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICBiYXNlQ2xhc3MgKz0gJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgYmFzZUNsYXNzICs9ICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmFzZUNsYXNzICs9ICcgbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsJztcclxuICAgIH1cclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsIGJhc2VDbGFzcylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLy8gRklYRUQ6IEFkanVzdGVkIGZvciAyNTBweCBoZWlnaHRcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt3aWR0aCAvIDJ9LCR7aGVpZ2h0ICsgMzV9KWApXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTJweCcpXHJcbiAgICAgIC50ZXh0KGlzQWNyb255bSA/IHhMYWJlbC50b1VwcGVyQ2FzZSgpIDogeExhYmVsLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0Fjcm9ueW0gPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0Fjcm9ueW0obGFiZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZVlBeGlzTGFiZWwoc3ZnWUF4aXNSaWdodDogYW55LCBsaW5leUxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBsaWItbGluZS1heGlzJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKSByb3RhdGUoOTApJylcclxuICAgICAgLmF0dHIoJ3knLCAtMTAwKVxyXG4gICAgICAuYXR0cigneCcsIDEwMClcclxuICAgICAgLmF0dHIoJ2R5JywgJzVlbScpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgIC50ZXh0KGxpbmV5TGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUYXJnZXRMaW5lKHN2Z0VsZW1lbnRzOiBhbnksIHNjYWxlczogYW55LCBjaGFydENvbnRleHQ6IGFueSwgZGltZW5zaW9uczogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzUmlnaHQgfSA9IHN2Z0VsZW1lbnRzO1xyXG4gICAgY29uc3QgeyB5IH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBkaW1lbnNpb25zO1xyXG4gICAgY29uc3QgeyBtZXRhRGF0YSB9ID0gY2hhcnRDb250ZXh0O1xyXG4gICAgY29uc3QgdGFyZ2V0RGF0YTogVGFyZ2V0TGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YTtcclxuXHJcbiAgICBjb25zdCB5WmVybyA9IHkodGFyZ2V0RGF0YS50YXJnZXQpO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdsaW5lJylcclxuICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgLmF0dHIoJ3gyJywgd2lkdGgpXHJcbiAgICAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgdGFyZ2V0RGF0YS5jb2xvcik7XHJcblxyXG4gICAgY29uc3QgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3laZXJvIC0gMzB9KWApXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCA1MClcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC5odG1sKCgpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSB0YXJnZXREYXRhLnRhcmdldE5hbWUgfHwgJ3RhcmdldCc7XHJcbiAgICAgICAgcmV0dXJuIGA8ZGl2PiR7dGFyZ2V0TmFtZX08L2Rpdj48ZGl2PiR7dGFyZ2V0RGF0YS50YXJnZXR9JHtkYXRhVHlwZX08L2Rpdj5gO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZUdyYXBoKHN2ZzogYW55LCBjaGFydENvbnRleHQ6IGFueSwgc2NhbGVzOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgbGluZURhdGEsIG1ldGFEYXRhIH0gPSBjaGFydENvbnRleHQ7XHJcbiAgICBpZiAoIWxpbmVEYXRhKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgeyB4LCBsaW5lWXNjYWxlIH0gPSBzY2FsZXM7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAuZGF0dW0obGluZURhdGEpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgICAuYXR0cignc3Ryb2tlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxLjUpXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICdkJyxcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmxpbmUoKVxyXG4gICAgICAgICAgLngoKGQ6IGFueSkgPT4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgICAgICAueSgoZDogYW55KSA9PiBsaW5lWXNjYWxlKGQudmFsdWUpKVxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbnN0IGRvdCA9IHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgICAuZGF0YShsaW5lRGF0YSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5vbignY2xpY2snLCAoZCkgPT4gdGhpcy5oYW5kbGVCYXJDbGljayhkLCBtZXRhRGF0YSkpO1xyXG5cclxuICAgIGRvdFxyXG4gICAgICAuYXBwZW5kKCdjaXJjbGUnKVxyXG4gICAgICAuYXR0cignZmlsbCcsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAuYXR0cignY3gnLCAoZDogYW55KSA9PiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ2N5JywgKGQ6IGFueSkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpXHJcbiAgICAgIC5hdHRyKCdyJywgMyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKSB7XHJcbiAgICAgIGRvdFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdkb3QnKVxyXG4gICAgICAgIC5hdHRyKCdjb2xvcicsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgIC5hdHRyKCdzdHlsZScsICdmb250LXNpemU6IC44NWVtJylcclxuICAgICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gbGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgLnRleHQoKGQ6IGFueSkgPT4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duIHx8IGQ/LnRvZ2dsZUZyb20pIHtcclxuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVIZWFkZXJNZW51Q2xpY2soaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUREMUNsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVERDJDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbn0iLCI8ZGl2XHJcbiAgI2dyb3VwY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcblxyXG48ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdFwiICpuZ0lmPVwiIWlzSGVhZGVyVmlzaWJsZVwiPlxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICh6b29tSW5ab29tT3V0Q2xpY2spPVwiaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKCRldmVudClcIlxyXG4gID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbjwvZGl2PlxyXG5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MVxyXG4gIFt0aXRsZV09XCJjaGFydERhdGEubWV0YURhdGEudGl0bGVcIlxyXG4gIFtoYXNEcmlsbERvd25dPVwiY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93blwiXHJcbiAgW2lzRWRpdEVuYWJsZWRdPVwiY2hhcnREYXRhLm1ldGFEYXRhLmlzRWRpdEVuYWJsZWRcIlxyXG4gIFttZW51T3B0aW9uc109XCJjaGFydENvbmZpZ3VyYXRpb24uaGVhZGVyTWVudU9wdGlvbnNcIlxyXG4gIFtpc3JpYV09XCJjdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcIlxyXG4gIFtzZWxlY3RlZEtwaVRvb2x0b3BdPVwiY2hhcnRDb25maWd1cmF0aW9uLnNlbGVjdGVkS3BpVG9vbHRvcFwiXHJcbiAgKG1lbnVPcHRpb25DbGlja0V2ZW50KT1cImhhbmRsZUhlYWRlck1lbnVDbGljaygkZXZlbnQpXCJcclxuICBbaXNBbGVydEVuYWJsZWRdPVwiaXNBbGVydEVuYWJsZWRcIlxyXG4gICpuZ0lmPVwiaXNIZWFkZXJWaXNpYmxlXCJcclxuPjwvbGliLWNoYXJ0LWhlYWRlci12MT5cclxuXHJcbiAgPGRpdlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XCJcclxuICAgIGlkPVwiZ3JvdXBjaGFydGNvbnRhaW5lclwiXHJcbiAgICAjZ3JvdXBjaGFydGNvbnRhaW5lclxyXG4gICAgY2xhc3M9XCJsaWItY2hhcnQtc3ZnXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|