@bizdoc/core 1.12.3 → 1.12.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/admin/document-trace/trace-element.component.mjs +3 -3
- package/esm2020/lib/browse/browse-items.component.mjs +43 -35
- package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +35 -14
- package/esm2020/lib/compose/action/action-picker.component.mjs +15 -14
- package/esm2020/lib/compose/action/action.base.mjs +9 -4
- package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +13 -12
- package/esm2020/lib/compose/compose.pane.component.mjs +4 -3
- package/esm2020/lib/compose/form.component.mjs +6 -3
- package/esm2020/lib/compose/trace/flow.component.mjs +96 -52
- package/esm2020/lib/compose/trace/trace.base.mjs +6 -2
- package/esm2020/lib/compose/trace/trace.component.mjs +131 -146
- package/esm2020/lib/core/configuration.mjs +2 -1
- package/esm2020/lib/core/hub.service.mjs +1 -1
- package/esm2020/lib/core/mailbox.service.mjs +3 -1
- package/esm2020/lib/core/models.mjs +1 -1
- package/esm2020/lib/core/slots/router.service.mjs +4 -16
- package/esm2020/lib/core/slots/slots.component.mjs +8 -6
- package/esm2020/lib/core/translations.mjs +17 -5
- package/esm2020/lib/cube/cube-info.service.mjs +3 -3
- package/esm2020/lib/cube/cube.service.mjs +5 -3
- package/esm2020/lib/cube/explore/explore-items.component.mjs +5 -3
- package/esm2020/lib/cube/explore/explore.pane.component.mjs +3 -1
- package/esm2020/lib/cube/matrix/matrix.base.mjs +1 -1
- package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +1 -1
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +5 -3
- package/esm2020/lib/cube/matrix/popup.component.mjs +7 -5
- package/esm2020/lib/cube/matrix/table.component.mjs +136 -123
- package/esm2020/lib/cube/pivot/pivot.component.mjs +76 -78
- package/esm2020/lib/home/home-base.component.mjs +2 -2
- package/esm2020/lib/routes.desktop.mjs +2 -2
- package/esm2020/lib/shared.module.mjs +17 -2
- package/esm2020/lib/views/cube/matrix.component.mjs +1 -1
- package/fesm2015/bizdoc-core.mjs +751 -627
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +744 -633
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/browse/browse-items.component.d.ts +3 -1
- package/lib/compose/action/action-picker.component.d.ts +2 -1
- package/lib/compose/action/action.base.d.ts +3 -1
- package/lib/compose/action/action.pane.dialog.exp.d.ts +2 -1
- package/lib/compose/trace/flow.component.d.ts +0 -1
- package/lib/compose/trace/trace.base.d.ts +5 -2
- package/lib/compose/trace/trace.component.d.ts +1 -19
- package/lib/core/configuration.d.ts +2 -1
- package/lib/core/hub.service.d.ts +1 -0
- package/lib/core/models.d.ts +6 -1
- package/lib/core/slots/router.service.d.ts +0 -4
- package/lib/core/translations.d.ts +12 -0
- package/lib/cube/cube-info.service.d.ts +2 -0
- package/lib/cube/cube.service.d.ts +1 -0
- package/lib/cube/explore/explore-items.component.d.ts +1 -0
- package/lib/cube/matrix/matrix.base.d.ts +2 -0
- package/lib/cube/matrix/table.component.d.ts +10 -4
- package/lib/cube/pivot/pivot.component.d.ts +2 -1
- package/package.json +1 -1
@@ -4,7 +4,7 @@ import { interval } from 'rxjs';
|
|
4
4
|
import { takeUntil } from 'rxjs/operators';
|
5
5
|
import dayjs from 'dayjs';
|
6
6
|
import { getWarn } from '../../core/functions';
|
7
|
-
import { TraceBase, START_NODE } from './trace.base';
|
7
|
+
import { TraceBase, You, START_NODE } from './trace.base';
|
8
8
|
import * as i0 from "@angular/core";
|
9
9
|
import * as i1 from "../../core/account.service";
|
10
10
|
import * as i2 from "../../core/session.service";
|
@@ -34,13 +34,17 @@ export class FlowViewComponent extends TraceBase {
|
|
34
34
|
connectionPointOrigin: ConnectionPointOrigin.DifferentPoint,
|
35
35
|
horizontalSpacing: 50,
|
36
36
|
verticalSpacing: 50,
|
37
|
-
|
37
|
+
//connectorSegments: 'Layout',
|
38
|
+
//arrangement: ChildArrangement.Nonlinear,
|
39
|
+
//horizontalAlignment:'Center',
|
40
|
+
//verticalAlignment: 'Auto',
|
38
41
|
connectionDirection: 'Orientation',
|
39
42
|
orientation: this._session.inverse ? 'RightToLeft' : 'LeftToRight',
|
40
43
|
margin: { left: 10, right: 10, top: 10, bottom: 10 }
|
41
44
|
};
|
42
45
|
this.scrollSettings = {
|
43
46
|
minZoom: .5,
|
47
|
+
scrollLimit: 'Limited',
|
44
48
|
canAutoScroll: true,
|
45
49
|
currentZoom: 1.2,
|
46
50
|
padding: { top: 0, bottom: 0 },
|
@@ -112,9 +116,6 @@ export class FlowViewComponent extends TraceBase {
|
|
112
116
|
n.tooltip.content = this._tooltip(n.addInfo.tooltip);
|
113
117
|
});
|
114
118
|
}
|
115
|
-
refresh() {
|
116
|
-
this.ngOnChanges(null);
|
117
|
-
}
|
118
119
|
/**
|
119
120
|
*
|
120
121
|
* @param obj
|
@@ -178,7 +179,7 @@ export class FlowViewComponent extends TraceBase {
|
|
178
179
|
}
|
179
180
|
})), nodes = [];
|
180
181
|
this._issued = this.model.issued || this.model.log.filter(l => l.type === 'Submit')[0].time;
|
181
|
-
let zIndex = 500
|
182
|
+
let zIndex = 500;
|
182
183
|
for (let node of dnodes) {
|
183
184
|
if (nodes.find(n => n.id == node.id))
|
184
185
|
continue;
|
@@ -232,7 +233,7 @@ export class FlowViewComponent extends TraceBase {
|
|
232
233
|
}
|
233
234
|
}]
|
234
235
|
};
|
235
|
-
if (r > 0)
|
236
|
+
if (r > 0)
|
236
237
|
dconnectors.forEach(c => {
|
237
238
|
if (c.targetId === node.id)
|
238
239
|
connectors.push({
|
@@ -242,7 +243,10 @@ export class FlowViewComponent extends TraceBase {
|
|
242
243
|
estimate: c.estimate
|
243
244
|
}
|
244
245
|
});
|
245
|
-
if (c.sourceId === node.id)
|
246
|
+
if (c.sourceId === node.id) {
|
247
|
+
//
|
248
|
+
if (c.virtualizing && !this.model.recipients.some(r => r.nodeId === c.targetId && r.originId === recipient.id))
|
249
|
+
return;
|
246
250
|
connectors.push({
|
247
251
|
sourceID: nod.id,
|
248
252
|
targetID: c.targetId,
|
@@ -250,12 +254,12 @@ export class FlowViewComponent extends TraceBase {
|
|
250
254
|
estimate: c.estimate
|
251
255
|
}
|
252
256
|
});
|
257
|
+
}
|
253
258
|
});
|
254
|
-
}
|
255
259
|
nodes.push(nod);
|
256
260
|
if (recipient.action) {
|
257
261
|
const action = this._session.profile.actions.find(a => a.name === recipient.action);
|
258
|
-
if (action &&
|
262
|
+
if (action.shape && !recipient.pending) {
|
259
263
|
const actionIndicator = {
|
260
264
|
id: nod.id + 'action',
|
261
265
|
shape: {
|
@@ -290,7 +294,7 @@ export class FlowViewComponent extends TraceBase {
|
|
290
294
|
parentId: nod.id
|
291
295
|
}
|
292
296
|
});
|
293
|
-
if (
|
297
|
+
if (recipient.fyi)
|
294
298
|
indicators.push({
|
295
299
|
id: nod.id + 'fyi',
|
296
300
|
shape: {
|
@@ -435,7 +439,7 @@ export class FlowViewComponent extends TraceBase {
|
|
435
439
|
const stateLog = log.find(l => l.type === 'StateChange');
|
436
440
|
if (stateLog) {
|
437
441
|
state = this._session.profile.states.find(s => s.name === stateLog.state);
|
438
|
-
annotation =
|
442
|
+
annotation = (node.estimate ? state.future : state.past) || state.title;
|
439
443
|
}
|
440
444
|
if (node.type === START_NODE) {
|
441
445
|
if (!node.estimate) {
|
@@ -456,12 +460,12 @@ export class FlowViewComponent extends TraceBase {
|
|
456
460
|
const { min, max } = super._estimateTime(node);
|
457
461
|
if (max)
|
458
462
|
return !min || min === max ?
|
459
|
-
this._translate.get('EstimateTime',
|
460
|
-
this._translate.get('EstimateTimeRange',
|
463
|
+
this._translate.get('EstimateTime', dayjs.duration(max).humanize()) :
|
464
|
+
this._translate.get('EstimateTimeRange', dayjs.duration(min).humanize(), dayjs.duration(max).humanize());
|
461
465
|
}
|
462
466
|
_tooltip(obj) {
|
463
|
-
const { note, role, substituting, duration, standardTime, estimatedTime, error, fyi } = obj;
|
464
|
-
const rows = [error, note, role, substituting, fyi, duration, standardTime, estimatedTime];
|
467
|
+
const { note, role, substituting, escalation, duration, standardTime, estimatedTime, error, fyi } = obj;
|
468
|
+
const rows = [error, note, role, substituting, escalation, fyi, duration, standardTime, estimatedTime];
|
465
469
|
let div;
|
466
470
|
rows.forEach(r => {
|
467
471
|
if (!r)
|
@@ -479,51 +483,76 @@ export class FlowViewComponent extends TraceBase {
|
|
479
483
|
async _startNode() {
|
480
484
|
let who, by;
|
481
485
|
if (this.model.ownerId === this._session.profile.userId && !this._session.isImpersonating)
|
482
|
-
who =
|
486
|
+
who = You;
|
483
487
|
else
|
484
488
|
who = await this._accounts.get(this.model.ownerId).toPromise();
|
485
489
|
if (this.model.ownerById) {
|
486
490
|
if (this.model.ownerById === this._session.userId)
|
487
|
-
by =
|
491
|
+
by = You;
|
488
492
|
else
|
489
493
|
by = await this._accounts.get(this.model.ownerById).toPromise();
|
490
494
|
}
|
491
495
|
let note, role;
|
492
496
|
if (by) {
|
493
|
-
if (by ===
|
497
|
+
if (by === You)
|
494
498
|
note =
|
495
|
-
this._translate.get('SubmittedNoteByYou', who ===
|
499
|
+
this._translate.get('SubmittedNoteByYou', who === You ? this._translate.get('You') : who.name, this._fromNow(this.model.issued));
|
496
500
|
else
|
497
501
|
note =
|
498
|
-
this._translate.get('SubmittedNoteBy', who ===
|
502
|
+
this._translate.get('SubmittedNoteBy', who === You ? this._translate.get('You') : who.name, by.name, this._fromNow(this.model.issued));
|
499
503
|
}
|
500
|
-
else if (who ===
|
504
|
+
else if (who === You)
|
501
505
|
note = this._translate.get('YouSubmittedNote', this._fromNow(this.model.issued));
|
502
506
|
else
|
503
507
|
note = this._translate.get('SubmittedNote', who.name, this._fromNow(this.model.issued));
|
504
|
-
if (who !==
|
508
|
+
if (who !== You && who.role)
|
505
509
|
role = `- ${who.role}`;
|
506
510
|
return { note, role };
|
507
511
|
}
|
508
512
|
async _note(node, recipient) {
|
509
513
|
const tooltip = {};
|
510
514
|
let annotation;
|
511
|
-
|
515
|
+
// you
|
516
|
+
if ((recipient.byId || recipient.userId) === this._session.userId) {
|
512
517
|
annotation = this._session.isImpersonating ? this._session.profile.name : this._translate.get('You');
|
513
|
-
if (recipient.
|
514
|
-
const u = await this._accounts.get(recipient.byId).toPromise();
|
515
|
-
const past = this._action(recipient.action, u.gender), time = this._fromNow(recipient.replied);
|
516
|
-
tooltip.note = this._translate.get('YouTakenActionBy', u.name, past, time);
|
517
|
-
}
|
518
|
-
else if (recipient.replied) {
|
518
|
+
if (recipient.replied) {
|
519
519
|
const time = this._fromNow(recipient.replied);
|
520
|
-
if (
|
521
|
-
|
522
|
-
|
520
|
+
if (recipient.byId) {
|
521
|
+
if (recipient.byId === this._session.profile.byId) {
|
522
|
+
const action = this._action(recipient.action, this._session.gender);
|
523
|
+
if (recipient.toId) {
|
524
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
525
|
+
tooltip.note = this._translate.get('ActionTakenByYouTo', action, to.name, this._session.profile.name, time);
|
526
|
+
}
|
527
|
+
else
|
528
|
+
tooltip.note = this._translate.get('ActionTakenByYou', action, this._session.profile.name, time);
|
529
|
+
}
|
530
|
+
else {
|
531
|
+
const by = await this._accounts.get(recipient.byId).toPromise();
|
532
|
+
const action = this._action(recipient.action, by.gender);
|
533
|
+
if (recipient.toId) {
|
534
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
535
|
+
tooltip.note = this._translate.get('YouTakenActionByTo', by.name, action, to.name, time);
|
536
|
+
}
|
537
|
+
else
|
538
|
+
tooltip.note = this._translate.get('YouTakenActionBy', by.name, action, time);
|
539
|
+
}
|
540
|
+
}
|
541
|
+
else if (recipient.toId) {
|
542
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
543
|
+
const action = this._action(recipient.action, this._session.profile.gender);
|
544
|
+
if (this._session.isImpersonating)
|
545
|
+
tooltip.note = this._translate.get('ActionTakenTo', this._session.profile.name, action, to.name, time);
|
546
|
+
else
|
547
|
+
tooltip.note = this._translate.get('YouTakenActionTo', action, to.name, time);
|
548
|
+
}
|
549
|
+
else if (this._session.isImpersonating) {
|
550
|
+
const action = this._action(recipient.action, this._session.profile.gender);
|
551
|
+
tooltip.note = this._translate.get('ActionTaken', this._session.profile.name, action, time);
|
523
552
|
}
|
524
553
|
else {
|
525
|
-
const
|
526
|
-
tooltip.note = this._translate.get('YouTakenAction',
|
554
|
+
const action = this._action(recipient.action, You);
|
555
|
+
tooltip.note = this._translate.get('YouTakenAction', action, time);
|
527
556
|
}
|
528
557
|
}
|
529
558
|
else if (!node.estimate) {
|
@@ -535,27 +564,42 @@ export class FlowViewComponent extends TraceBase {
|
|
535
564
|
}
|
536
565
|
if (recipient.role) {
|
537
566
|
const crole = this._session.profile.roles.find(o => o.name === recipient.role);
|
538
|
-
|
567
|
+
if (crole)
|
568
|
+
tooltip.role = `- ${crole.title}`;
|
539
569
|
}
|
540
570
|
}
|
541
|
-
else
|
571
|
+
else
|
572
|
+
// someone else
|
573
|
+
{
|
542
574
|
const who = await this._accounts.get(recipient.userId).toPromise();
|
543
575
|
annotation = who.name;
|
544
576
|
if (who.role)
|
545
577
|
tooltip.role = `- ${who.role}`;
|
546
578
|
else if (recipient.role) {
|
547
579
|
const crole = this._session.profile.roles.find(o => o.name === recipient.role);
|
548
|
-
|
580
|
+
if (crole)
|
581
|
+
tooltip.role = `- ${crole.title}`;
|
549
582
|
}
|
550
|
-
|
583
|
+
if (recipient.replied) {
|
584
|
+
const time = this._fromNow(recipient.replied);
|
551
585
|
if (recipient.byId) {
|
552
586
|
const by = await this._accounts.get(recipient.byId).toPromise();
|
553
|
-
const
|
554
|
-
|
587
|
+
const action = this._action(recipient.action, by.gender);
|
588
|
+
if (recipient.toId) {
|
589
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
590
|
+
tooltip.note = this._translate.get('ActionTakenByTo', by.name, action, to.name, who.name, time);
|
591
|
+
}
|
592
|
+
else
|
593
|
+
tooltip.note = this._translate.get('ActionTakenBy', by.name, action, who.name, time);
|
594
|
+
}
|
595
|
+
else if (recipient.toId) {
|
596
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
597
|
+
const action = this._action(recipient.action, who.gender);
|
598
|
+
tooltip.note = this._translate.get('ActionTakenTo', who.name, action, to.name);
|
555
599
|
}
|
556
600
|
else {
|
557
|
-
const
|
558
|
-
tooltip.note = this._translate.get('ActionTaken', who.name,
|
601
|
+
const action = this._action(recipient.action, who.gender);
|
602
|
+
tooltip.note = this._translate.get('ActionTaken', who.name, action, time);
|
559
603
|
}
|
560
604
|
}
|
561
605
|
else if (!recipient.estimate) {
|
@@ -563,12 +607,12 @@ export class FlowViewComponent extends TraceBase {
|
|
563
607
|
tooltip.note = this._translate.personalize('ReceivedTime', who.gender, time);
|
564
608
|
}
|
565
609
|
}
|
566
|
-
if (recipient.substitutingId
|
567
|
-
if (recipient.substitutingId === this._session.
|
568
|
-
tooltip.substituting = this._translate.personalize('SubstitutingYou', this._session.
|
610
|
+
if (recipient.substitutingId) {
|
611
|
+
if (recipient.substitutingId === this._session.userId)
|
612
|
+
tooltip.substituting = this._translate.personalize('SubstitutingYou', this._session.gender);
|
569
613
|
else {
|
570
|
-
const
|
571
|
-
tooltip.substituting = this._translate.personalize('SubstitutingFor',
|
614
|
+
const substituting = await this._accounts.get(recipient.substitutingId).toPromise();
|
615
|
+
tooltip.substituting = this._translate.personalize('SubstitutingFor', substituting.gender, substituting.name);
|
572
616
|
}
|
573
617
|
}
|
574
618
|
const escalations = this.model.log.filter(l => l.time > this._issued && l.type === 'Escalation' && l.recipientId === recipient.id);
|
@@ -576,7 +620,7 @@ export class FlowViewComponent extends TraceBase {
|
|
576
620
|
const userIds = escalations.map(e => e.userId);
|
577
621
|
const users = await this._accounts.getAll(userIds).toPromise();
|
578
622
|
const duration = this._duration.transform(dayjs(escalations[escalations.length - 1].time).diff(recipient.received, 's'));
|
579
|
-
tooltip.
|
623
|
+
tooltip.escalation = this._translate.get('EscalatedTo', this._translate.join(users.map(u => u.name)), duration);
|
580
624
|
}
|
581
625
|
if (recipient.replied) {
|
582
626
|
const duration = dayjs(recipient.replied).diff(recipient.received, 's');
|
@@ -593,7 +637,7 @@ export class FlowViewComponent extends TraceBase {
|
|
593
637
|
}
|
594
638
|
else if (node.standardTime)
|
595
639
|
tooltip.standardTime = this._translate.get('NodeStandardTime', this._duration.transform(node.standardTime));
|
596
|
-
if (
|
640
|
+
if (recipient.fyi)
|
597
641
|
tooltip.fyi = this._translate.get('FYI');
|
598
642
|
return { annotation, tooltip };
|
599
643
|
}
|
@@ -601,7 +645,7 @@ export class FlowViewComponent extends TraceBase {
|
|
601
645
|
const action = this._session.profile.actions.find(a => a.name === name);
|
602
646
|
if (!action)
|
603
647
|
return name;
|
604
|
-
if (gender ===
|
648
|
+
if (gender === You) {
|
605
649
|
const gender = this._session.gender, personal = (gender === 'Male' ? (action.youMale || action.you) :
|
606
650
|
gender === 'Female' ? (action.youFemale || action.you) :
|
607
651
|
action.you);
|
@@ -634,4 +678,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
634
678
|
}], connectorType: [{
|
635
679
|
type: Input
|
636
680
|
}] } });
|
637
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvbXBvc2UvdHJhY2UvZmxvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBMEMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSw4QkFBOEIsRUFBcUIsWUFBWSxFQUFFLFdBQVcsRUFBOEcscUJBQXFCLEVBQUUsZUFBZSxFQUFtQixlQUFlLEVBQWtDLE1BQU0sa0NBQWtDLENBQUM7QUFDbGMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7OztBQU9yRCxPQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxXQUFXLENBQUEscURBQXFELENBQUMsQ0FBQztBQUV4SCxNQUFNLFlBQVksR0FBRyx1RkFBdUYsRUFDMUcsUUFBUSxHQUFHLGtHQUFrRyxFQUM3RyxjQUFjLEdBQUcsbVFBQW1RLEVBQ3BSLGFBQWEsR0FBRyxzVEFBc1QsQ0FBQztBQVd6VSx5QkFBeUI7QUFDekIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFNBQVM7SUFxQzlDLHlCQUF5QjtJQUN6QixZQUFvQixTQUF5QixFQUFVLFFBQXdCLEVBQVUsVUFBNEIsRUFDM0csU0FBNkIsRUFDN0IsV0FBdUMsRUFDL0MsR0FBZTtRQUNmLEtBQUss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QyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsV0FBVztRQUNULEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQzs7OEdBaG5CVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixtTUFSbEIsRUFBRSwrQ0FFRyxDQUFDLDhCQUE4QixDQUFDOzJGQU1wQyxpQkFBaUI7a0JBVjdCLFNBQVM7K0JBQ0UsYUFBYSxZQUNiLEVBQUUsaUJBRUcsQ0FBQyw4QkFBOEIsQ0FBQyxRQUN6Qzt3QkFDSixHQUFHLEVBQUUsS0FBSztxQkFDWDtvUEFJUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5vZGVNb2RlbCwgQ29ubmVjdG9yTW9kZWwsIExheW91dE1vZGVsLCBEaWFncmFtVG9vbHMsIERpYWdyYW0sIERpYWdyYW1Db25zdHJhaW50cywgQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUsIENvbXBsZXhIaWVyYXJjaGljYWxUcmVlU2VydmljZSwgQ29ubmVjdG9yQnJpZGdpbmcsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsIFNjcm9sbFNldHRpbmdzTW9kZWwsIFNuYXBTZXR0aW5nc01vZGVsLCBTZWdtZW50cywgTGluZVJvdXRpbmcsIFRyZWVJbmZvLCBJTW91c2VFdmVudEFyZ3MsIExpbmVEaXN0cmlidXRpb24sIENvbm5lY3Rpb25Qb2ludE9yaWdpbiwgU25hcENvbnN0cmFpbnRzLCBMYXlvdXRBbmltYXRpb24sIE5vZGVDb25zdHJhaW50cywgRmxvd1NoYXBlTW9kZWwsIEJwbW5TaGFwZU1vZGVsIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZGlhZ3JhbXMnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IERvY3VtZW50TW9kZWwsIFJlY2lwaWVudCwgTm9kZUluZm8sIEdlbmRlciwgRmxvd05vZGUsIFVzZXJJbmZvLCBTdGF0ZSwgQ29ubmVjdG9ySW5mbyB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBnZXRXYXJuIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBUcmFjZUJhc2UsIFNUQVJUX05PREUgfSBmcm9tICcuL3RyYWNlLmJhc2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHViU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvaHViLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEdXJhdGlvbkZvcm1hdFBpcGUgfSBmcm9tICcuLi8uLi9jb3JlL3BpcGVzL2R1cmF0aW9uLWZvcm1hdC5waXBlJztcclxuXHJcbkRpYWdyYW0uSW5qZWN0KENvbXBsZXhIaWVyYXJjaGljYWxUcmVlLCBCcG1uRGlhZ3JhbXMsIERhdGFCaW5kaW5nLyosIExheW91dEFuaW1hdGlvbiwgTGluZVJvdXRpbmcsIENvbm5lY3RvckJyaWRnaW5nKi8pO1xyXG5cclxuY29uc3QgUEVORElOR19QQVRIID0gJ00xOCwyMmwtMC4wMS02TDE0LDEybDMuOTktNC4wMUwxOCwySDZ2Nmw0LDRsLTQsMy45OVYyMkgxOHogTTgsNy41VjRoOHYzLjVsLTQsNEw4LDcuNXonLFxyXG4gIEZZSV9QQVRIID0gJ00xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeicsXHJcbiAgRVNDQUxBVEVEX1BBVEggPSAnTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyLjUgOEgxMXY2bDQuNzUgMi44NS43NS0xLjIzLTQtMi4zN1Y4ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3onLFxyXG4gIFdBUk5OSU5HX1BBVEggPSAnTSAxMy43NjM3MzUsMS44NDMzNzM1IEggNi4zMDM3MzQ5IGwgLTUuMjcsNS4yNyB2IDcuNDU5OTk5NSBsIDUuMjcsNS4yNyBoIDcuNDYwMDAwMSBsIDUuMjcsLTUuMjcgViA3LjExMzM3MzUgWiBtIC0zLjczLDE0LjI5OTk5OTUgYyAtMC43MjAwMDAxLDAgLTEuMzAwMDAwMSwtMC41OCAtMS4zMDAwMDAxLC0xLjMgMCwtMC43MiAwLjU4LC0xLjMgMS4zMDAwMDAxLC0xLjMgMC43MiwwIDEuMywwLjU4IDEuMywxLjMgMCwwLjcyIC0wLjU4LDEuMyAtMS4zLDEuMyB6IG0gMSwtNC4zIEggOS4wMzM3MzQ5IFYgNS44NDMzNzM1IGggMi4wMDAwMDAxIHonO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZmxvdycsXHJcbiAgdGVtcGxhdGU6ICcnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zsb3cuY29tcG9uZW50LnNjc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbQ29tcGxleEhpZXJhcmNoaWNhbFRyZWVTZXJ2aWNlXSxcclxuICBob3N0OiB7XHJcbiAgICBkaXI6ICdsdHInXHJcbiAgfVxyXG59KVxyXG4vKiogZmxvdy12aWV3IGNvbXBvbmVudCovXHJcbmV4cG9ydCBjbGFzcyBGbG93Vmlld0NvbXBvbmVudCBleHRlbmRzIFRyYWNlQmFzZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBtb2RlbDogRG9jdW1lbnRNb2RlbDxhbnk+O1xyXG4gIEBJbnB1dCgpIGNvbm5lY3RvclR5cGU6IFNlZ21lbnRzID0gJ09ydGhvZ29uYWwnO1xyXG4gIGRpYWdyYW06IERpYWdyYW07XHJcbiAgcmVhZG9ubHkgdG9vbDogRGlhZ3JhbVRvb2xzID0gRGlhZ3JhbVRvb2xzLlpvb21QYW47XHJcbiAgcmVhZG9ubHkgZGlhZ3JhbUNvbnN0cmFpbnRzOiBEaWFncmFtQ29uc3RyYWludHMgPVxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLkRlZmF1bHQgfFxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLlBhbiB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuTGluZVJvdXRpbmcgfFxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLkJyaWRnaW5nO1xyXG4gIHB1YmxpYyByZWFkb25seSBsYXlvdXQgPSB7XHJcbiAgICB0eXBlOiAnQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUnLFxyXG4gICAgY29ubmVjdGlvblBvaW50T3JpZ2luOiBDb25uZWN0aW9uUG9pbnRPcmlnaW4uRGlmZmVyZW50UG9pbnQsXHJcbiAgICBob3Jpem9udGFsU3BhY2luZzogNTAsXHJcbiAgICB2ZXJ0aWNhbFNwYWNpbmc6IDUwLFxyXG4gICAgdmVydGljYWxBbGlnbm1lbnQ6ICdUb3AnLFxyXG4gICAgY29ubmVjdGlvbkRpcmVjdGlvbjogJ09yaWVudGF0aW9uJyxcclxuICAgIG9yaWVudGF0aW9uOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnUmlnaHRUb0xlZnQnIDogJ0xlZnRUb1JpZ2h0JyxcclxuICAgIG1hcmdpbjogeyBsZWZ0OiAxMCwgcmlnaHQ6IDEwLCB0b3A6IDEwLCBib3R0b206IDEwIH1cclxuICB9IGFzIExheW91dE1vZGVsO1xyXG5cclxuICByZWFkb25seSBzY3JvbGxTZXR0aW5ncyA9IHtcclxuICAgIG1pblpvb206IC41LFxyXG4gICAgY2FuQXV0b1Njcm9sbDogdHJ1ZSxcclxuICAgIGN1cnJlbnRab29tOiAxLjIsXHJcbiAgICBwYWRkaW5nOiB7IHRvcDogMCwgYm90dG9tOiAwIH0sXHJcbiAgICBhdXRvU2Nyb2xsQm9yZGVyOiB7IHRvcDogMCwgYm90dG9tOiAwIH0sXHJcbiAgICBtYXhab29tOiAyLjVcclxuICB9IGFzIFNjcm9sbFNldHRpbmdzTW9kZWw7XHJcblxyXG4gIHJlYWRvbmx5IHNuYXBTZXR0aW5ncyA9IHtcclxuICAgIGNvbnN0cmFpbnRzOiBTbmFwQ29uc3RyYWludHMuTm9uZSxcclxuICAgIGdyaWRUeXBlOiAnRG90cydcclxuICB9IGFzIFNuYXBTZXR0aW5nc01vZGVsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZ3VyYXRpb246IHsgW25hbWU6IHN0cmluZ106IEZsb3dOb2RlIH0gPSB7fTtcclxuICBwcml2YXRlIF9pc3N1ZWQ6IERhdGU7XHJcbiAgcHJpdmF0ZSBfYWNjZW50Q29sb3IgPSB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpO1xyXG4gIC8qKiB3b3JrZmxvdy12aWV3IGN0b3IgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UsIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLCBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kdXJhdGlvbjogRHVyYXRpb25Gb3JtYXRQaXBlLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgICBodWI6IEh1YlNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGh1Yik7XHJcbiAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubm9kZXMuZm9yRWFjaChuID0+XHJcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25bbi5uYW1lXSA9IG4pO1xyXG4gICAgX3Nlc3Npb24udGhlbWVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2FjY2VudENvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbml0aWFsaXplKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2luaXRpYWxpemUoKSB7XHJcbiAgICBjb25zdCB7IGNvbm5lY3RvcnMsIG5vZGVzLCBpbmRpY2F0b3JzIH0gPSBhd2FpdCB0aGlzLl9wcmVwYXJlKCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gJiYgdGhpcy5kaWFncmFtLmRlc3Ryb3koKTtcclxuICAgIHRoaXMuZGlhZ3JhbSA9IG5ldyBEaWFncmFtKHtcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgaGVpZ2h0OiAzODAsXHJcbiAgICAgIG5vZGVzLFxyXG4gICAgICBjb25uZWN0b3JzLFxyXG4gICAgICBsYXlvdXQ6IHRoaXMubGF5b3V0LFxyXG4gICAgICB0b29sOiB0aGlzLnRvb2wsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgc2Nyb2xsU2V0dGluZ3M6IHRoaXMuc2Nyb2xsU2V0dGluZ3MsXHJcbiAgICAgIHNuYXBTZXR0aW5nczogdGhpcy5zbmFwU2V0dGluZ3MsXHJcbiAgICAgIGNvbnN0cmFpbnRzOiB0aGlzLmRpYWdyYW1Db25zdHJhaW50cyxcclxuICAgICAgZ2V0Q29ubmVjdG9yRGVmYXVsdHM6IHRoaXMuY29ubkRlZmF1bHRzLmJpbmQodGhpcyksXHJcbiAgICAgIGdldE5vZGVEZWZhdWx0czogdGhpcy5ub2RlRGVmYXVsdHMuYmluZCh0aGlzKSxcclxuICAgIH0sIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLmRpYWdyYW0uZG9MYXlvdXQoKTtcclxuICAgIGluZGljYXRvcnMuZm9yRWFjaCgobiwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmRpYWdyYW0uZ2V0Tm9kZU9iamVjdCgobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnBhcmVudElkKTtcclxuICAgICAgbi5vZmZzZXRYID0gcGFyZW50Lm9mZnNldFggKyAodGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gLTI1IDogMjUpO1xyXG4gICAgICBuLm9mZnNldFkgPSBwYXJlbnQub2Zmc2V0WSArIDI1O1xyXG4gICAgICBuLnpJbmRleCA9IDEwMDAgKyBpO1xyXG4gICAgICB0aGlzLmRpYWdyYW0uYWRkKG4pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uZml0VG9QYWdlKCk7XHJcbiAgICBpbnRlcnZhbCg2MDAwMCkucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShcclxuICAgICAgdGhpcy5fcmVmcmVzaC5iaW5kKHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9yZWZyZXNoKCkge1xyXG4gICAgc3VwZXIucmVzZXRFc3RpbWF0ZVRpbWUoKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICBjb25zdCB7IG5vZGUsIHJlY2lwaWVudCB9ID0gbi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWw7XHJcbiAgICAgIGlmIChyZWNpcGllbnQpIHtcclxuICAgICAgICBpZiAoIXJlY2lwaWVudC5yZXBsaWVkICYmIHJlY2lwaWVudC5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmVzdGltYXRlKSAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKTtcclxuICAgICAgICAgIGVsc2UgaWYgKG5vZGUuc3RhbmRhcmRUaW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBub2RlLnN0YW5kYXJkVGltZSAtIGRheWpzKCkuZGlmZihub2RlLnRpbWUsICdzJyk7XHJcbiAgICAgICAgICAgIGlmIChkaWZmID4gMClcclxuICAgICAgICAgICAgICAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkaWZmKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBuLnRvb2x0aXAuY29udGVudCA9IHRoaXMuX3Rvb2x0aXAoKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIGlmIChub2RlICYmIG5vZGUuZXN0aW1hdGUpXHJcbiAgICAgICAgICAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKSxcclxuICAgICAgICAgICAgbi50b29sdGlwLmNvbnRlbnQgPSB0aGlzLl90b29sdGlwKChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHVibGljIHJlZnJlc2goKSB7XHJcbiAgICB0aGlzLm5nT25DaGFuZ2VzKG51bGwpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gb2JqXHJcbiAgICovXHJcbiAgcHVibGljIG5vZGVEZWZhdWx0cyhvYmo6IE5vZGVNb2RlbCk6IE5vZGVNb2RlbCB7XHJcbiAgICBjb25zdCB7IHJlY2lwaWVudCwgbm9kZSwgaW5kaWNhdG9yIH0gPSBvYmouYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsO1xyXG5cclxuICAgIGlmIChpbmRpY2F0b3IpIHtcclxuICAgICAgb2JqLndpZHRoID0gb2JqLmhlaWdodCA9IDE1O1xyXG4gICAgICBvYmouc3R5bGUuc3Ryb2tlV2lkdGggPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIG9iai5zaGFwZSA9IHsgdHlwZTogJ0JwbW4nLCBzaGFwZTogJ0V2ZW50JyB9IGFzIEJwbW5TaGFwZU1vZGVsO1xyXG4gICAgICBvYmoud2lkdGggPSBvYmouaGVpZ2h0ID0gNTA7XHJcbiAgICAgIGlmIChvYmouYW5ub3RhdGlvbnMgJiYgb2JqLmFubm90YXRpb25zLmxlbmd0aCkgb2JqLmFubm90YXRpb25zWzBdLnN0eWxlLmNvbG9yID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgIGlmIChub2RlICYmIG5vZGUuZXN0aW1hdGUpIHtcclxuICAgICAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgICBvYmouc3R5bGUub3BhY2l0eSA9IG9iai5hbm5vdGF0aW9uc1swXS5zdHlsZS5vcGFjaXR5ID0gLjY7XHJcbiAgICAgICAgb2JqLnN0eWxlLmZpbGwgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG9iai5zdHlsZS5zdHJva2VDb2xvciA9IHRoaXMuX2FjY2VudENvbG9yO1xyXG4gICAgICAgIG9iai5zdHlsZS5maWxsID0gcmVjaXBpZW50ICYmIHJlY2lwaWVudC5wZW5kaW5nID8gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoNDAwKSA6ICd0cmFuc3BhcmVudCc7XHJcbiAgICAgIH1cclxuICAgICAgb2JqLnN0eWxlLnN0cm9rZVdpZHRoID0gMjtcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25uZWN0b3JcclxuICAgKi9cclxuICBwdWJsaWMgY29ubkRlZmF1bHRzKGNvbm5lY3RvcjogQ29ubmVjdG9yTW9kZWwpIHtcclxuICAgIGNvbm5lY3Rvci50eXBlID0gdGhpcy5jb25uZWN0b3JUeXBlO1xyXG4gICAgY29ubmVjdG9yLmNvcm5lclJhZGl1cyA9IDY7XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLmhlaWdodCA9IDc7XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLndpZHRoID0gNztcclxuICAgIGlmICgoY29ubmVjdG9yLmFkZEluZm8gYXMgQ29ubmVjdG9ySW5mb01vZGVsKS5lc3RpbWF0ZSkge1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlRGFzaEFycmF5ID0gJzIgMic7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VDb2xvciA9XHJcbiAgICAgICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5maWxsID1cclxuICAgICAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLnN0cm9rZUNvbG9yID1cclxuICAgICAgICB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZVdpZHRoID0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlQ29sb3IgPSBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLnN0cm9rZUNvbG9yID0gY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5maWxsID0gdGhpcy5fYWNjZW50Q29sb3I7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VXaWR0aCA9IDI7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnNoYXBlID0gJ05vbmUnO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlKCk6IFByb21pc2U8eyBub2RlczogTm9kZU1vZGVsW107IGNvbm5lY3RvcnM6IENvbm5lY3Rvck1vZGVsW107IGluZGljYXRvcnM6IE5vZGVNb2RlbFtdIH0+IHtcclxuICAgIGNvbnN0IHsgY29ubmVjdG9yczogZGNvbm5lY3RvcnMsIG5vZGVzOiBkbm9kZXMgfSA9IHRoaXMubW9kZWwud29ya2Zsb3c7XHJcbiAgICBjb25zdCBpbmRpY2F0b3JzOiBOb2RlTW9kZWxbXSA9IFtdLCBjb25uZWN0b3JzOiBDb25uZWN0b3JNb2RlbFtdID0gZGNvbm5lY3RvcnMubWFwKGMgPT4gKFxyXG4gICAgICB7XHJcbiAgICAgICAgc291cmNlSUQ6IGMuc291cmNlSWQsXHJcbiAgICAgICAgdGFyZ2V0SUQ6IGMudGFyZ2V0SWQsXHJcbiAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgZXN0aW1hdGU6IGMuZXN0aW1hdGUsXHJcbiAgICAgICAgICB0aW1lOiBjLnRpbWVcclxuICAgICAgICB9IGFzIENvbm5lY3RvckluZm9Nb2RlbFxyXG4gICAgICB9IGFzIENvbm5lY3Rvck1vZGVsXHJcbiAgICApKSwgbm9kZXM6IE5vZGVNb2RlbFtdID0gW107XHJcbiAgICB0aGlzLl9pc3N1ZWQgPSB0aGlzLm1vZGVsLmlzc3VlZCB8fCB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLnR5cGUgPT09ICdTdWJtaXQnKVswXS50aW1lO1xyXG4gICAgbGV0IHpJbmRleCA9IDUwMCwgaSA9IDA7XHJcbiAgICBmb3IgKGxldCBub2RlIG9mIGRub2Rlcykge1xyXG4gICAgICBpZiAobm9kZXMuZmluZChuID0+IG4uaWQgPT0gbm9kZS5pZCkpIGNvbnRpbnVlO1xyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25bbm9kZS50eXBlXTtcclxuICAgICAgbGV0IHJlY2lwaWVudHMgPSB0aGlzLm1vZGVsLnJlY2lwaWVudHMuXHJcbiAgICAgICAgZmlsdGVyKHIgPT4gci5ub2RlSWQgPT09IG5vZGUuaWQgJiZcclxuICAgICAgICAgIHIucmVjZWl2ZWQgPj0gdGhpcy5faXNzdWVkKVxyXG4gICAgICAgIC5zb3J0KChyMCwgcjEpID0+XHJcbiAgICAgICAgICByMC5yZWNlaXZlZCA+IHIxLnJlY2VpdmVkID8gMSA6IC0xKTtcclxuICAgICAgaWYgKHJlY2lwaWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHIgPSAwO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgIHZhciByZWNpcGllbnQgPSByZWNpcGllbnRzW3JdO1xyXG4gICAgICAgICAgbGV0IGV4aXN0cyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZSB1c2VyIHJlY2lwaWVudCBvbiBzYW1lIG5vZGVcclxuICAgICAgICAgIGxldCBqID0gMDtcclxuICAgICAgICAgIHdoaWxlIChqIDwgciAmJiAhZXhpc3RzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWNpcGllbnRzW2pdLnVzZXJJZCA9PT0gcmVjaXBpZW50LnVzZXJJZCkgZXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZSBqKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZXhpc3RzKVxyXG4gICAgICAgICAgICByZWNpcGllbnRzLnNwbGljZShyZWNpcGllbnQuZXN0aW1hdGUgPyByIDogaiwgMSk7XHJcbiAgICAgICAgICBlbHNlIHIrKztcclxuICAgICAgICB9IHdoaWxlIChyIDwgcmVjaXBpZW50cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICBmb3IgKHIgPSAwOyByIDwgcmVjaXBpZW50cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgbGV0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbcl07XHJcbiAgICAgICAgICBjb25zdCB7IGFubm90YXRpb24sIHRvb2x0aXAgfSA9IGF3YWl0IHRoaXMuX25vdGUobm9kZSwgcmVjaXBpZW50KTtcclxuICAgICAgICAgIGNvbnN0IG5vZCA9IHtcclxuICAgICAgICAgICAgaWQ6IHIgPT09IDAgPyBub2RlLmlkIDogbm9kZS5pZCArIHIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2hhcGU6IHRoaXMuX2NvbmZpZ3VyYXRpb25bbm9kZS50eXBlXS5zaGFwZSxcclxuICAgICAgICAgICAgekluZGV4OiB6SW5kZXgrKyxcclxuICAgICAgICAgICAgdG9vbHRpcDoge1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuX3Rvb2x0aXAodG9vbHRpcCksXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdUb3BDZW50ZXInXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzOiBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Ub29sdGlwLFxyXG4gICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgICByZWNpcGllbnQsXHJcbiAgICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWwsXHJcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbe1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogNCB9LFxyXG4gICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAnVG9wJyxcclxuICAgICAgICAgICAgICBvZmZzZXQ6IHtcclxuICAgICAgICAgICAgICAgIHk6IDEsXHJcbiAgICAgICAgICAgICAgICB4OiAuNVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgaWYgKHIgPiAwKSB7XHJcbiAgICAgICAgICAgIGRjb25uZWN0b3JzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGMudGFyZ2V0SWQgPT09IG5vZGUuaWQpXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBzb3VyY2VJRDogYy5zb3VyY2VJZCxcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0SUQ6IG5vZC5pZCxcclxuICAgICAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdGltYXRlOiBjLmVzdGltYXRlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGlmIChjLnNvdXJjZUlkID09PSBub2RlLmlkKVxyXG4gICAgICAgICAgICAgICAgY29ubmVjdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IG5vZC5pZCxcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0SUQ6IGMudGFyZ2V0SWQsXHJcbiAgICAgICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZTogYy5lc3RpbWF0ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBub2Rlcy5wdXNoKG5vZCk7XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmFjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSByZWNpcGllbnQuYWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKGFjdGlvbiAmJiBhY3Rpb24uc2hhcGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBhY3Rpb25JbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ2FjdGlvbicsXHJcbiAgICAgICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGFjdGlvbi5zaGFwZSxcclxuICAgICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IGFjdGlvbi5jb2xvciB8fCB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCg5MDApXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2QuaWRcclxuICAgICAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgICAgIGluZGljYXRvcnMucHVzaChhY3Rpb25JbmRpY2F0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LnBlbmRpbmcgJiYgIXJlY2lwaWVudC5lc3RpbWF0ZSlcclxuICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ3BlbmRpbmcnLFxyXG4gICAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBQRU5ESU5HX1BBVEgsXHJcbiAgICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNYXhZTWF4JyA6ICdYTWluWU1heCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICBmaWxsOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCg5MDApXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kLmlkXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsKTtcclxuICAgICAgICAgIGlmIChub2RlLmZ5aSlcclxuICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ2Z5aScsXHJcbiAgICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IEZZSV9QQVRILFxyXG4gICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgZmlsbDogJyMxOTc2ZDInXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kLmlkXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyAgaWYgKHRoaXMubW9kZWwubG9nLmZpbHRlcihsID0+IGwudGltZSA+IHRoaXMuX3N1Ym1pdHRlZCAmJiBsLnR5cGUgPT09ICdFc2NhbGF0aW9uJyAmJiBsLnJlY2lwaWVudElkID09PSByZWNpcGllbnQuaWQpLmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8gICAgY29uc3QgZXNjYWxhdGVJbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAvLyAgICAgIGlkOiBub2QuaWQgKyAnZXNjYWxhdGUnLFxyXG4gICAgICAgICAgLy8gICAgICBzaGFwZToge1xyXG4gICAgICAgICAgLy8gICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgIC8vICAgICAgICBkYXRhOiBFU0NBTEFURURfUEFUSCxcclxuICAgICAgICAgIC8vICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgIC8vICAgICAgfSxcclxuICAgICAgICAgIC8vICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgIC8vICAgICAgICBmaWxsOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCg5MDApXHJcbiAgICAgICAgICAvLyAgICAgIH0sXHJcbiAgICAgICAgICAvLyAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgIC8vICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAvLyAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgLy8gICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIC8vICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgLy8gICAgaW5kaWNhdG9ycy5wdXNoKGVzY2FsYXRlSW5kaWNhdG9yKTtcclxuICAgICAgICAgIC8vICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHsgc3RhdGUsIGFubm90YXRpb24sIHRvb2x0aXAgfSA9IGF3YWl0IHRoaXMuX3NoYXBlKG5vZGUpO1xyXG4gICAgICAgIGNvbnN0IHsgc2hhcGUgfSA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgbm9kZXMucHVzaCh7XHJcbiAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgIHNoYXBlLFxyXG4gICAgICAgICAgekluZGV4OiB6SW5kZXgrKyxcclxuICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgY29udGVudDogdGhpcy5fdG9vbHRpcCh0b29sdGlwKSxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdUb3BDZW50ZXInXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29uc3RyYWludHM6IE9iamVjdC5rZXlzKHRvb2x0aXApLmxlbmd0aCA/IE5vZGVDb25zdHJhaW50cy5EZWZhdWx0IHwgTm9kZUNvbnN0cmFpbnRzLlRvb2x0aXAgOiBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCxcclxuICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsLFxyXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IFt7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgIG9mZnNldDogc2hhcGUudHlwZSA9PT0gJ1BhdGgnID8ge1xyXG4gICAgICAgICAgICAgIHk6IDFcclxuICAgICAgICAgICAgfSA6IHsgeDogLjUgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAvL2JvbGQ6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IHNoYXBlLnR5cGUgPT09ICdQYXRoJyA/ICdUb3AnIDogJ0NlbnRlcidcclxuICAgICAgICAgIH1dXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLnNoYXBlICYmICFub2RlLmVzdGltYXRlKVxyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnc3RhdGUnLFxyXG4gICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICBkYXRhOiBzdGF0ZS5zaGFwZSxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNYXhZTWF4JyA6ICdYTWluWU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBzdGF0ZS5jb2xvciB8fCAnYmxhY2snXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgbm9kZTogbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChub2RlLmVycm9yKSB7XHJcbiAgICAgICAgICBjb25zdCB3YXJubmluZ0luZGljYXRvciA9IHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnZXhjZXB0aW9uJyxcclxuICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgZGF0YTogV0FSTk5JTkdfUEFUSCxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBnZXRXYXJuKDgwMClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5pZFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHdhcm5uaW5nSW5kaWNhdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gY29ubmVjdG9yXHJcbiAgICAgKiBAcGFyYW0gaW5kZXhcclxuICAgICAqIEBwYXJhbSB2Y29ubmVjdG9yc1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiByZXJvdXRlKGNvbm5lY3RvcjogQ29ubmVjdG9ySW5mbywgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICB3aGlsZSAoaW5kZXggPCBkY29ubmVjdG9ycy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgZGNvbm5lY3RvciA9IGRjb25uZWN0b3JzW2luZGV4XTtcclxuICAgICAgICBpZiAoZGNvbm5lY3Rvci5zb3VyY2VJZCA9PT0gY29ubmVjdG9yLnRhcmdldElkKSB7XHJcbiAgICAgICAgICBpZiAobm9kZXMuc29tZShuID0+IG4uaWQgPT09IGRjb25uZWN0b3IudGFyZ2V0SWQpKVxyXG4gICAgICAgICAgICBjb25uZWN0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgIHNvdXJjZUlEOiBjb25uZWN0b3Iuc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgdGFyZ2V0SUQ6IGRjb25uZWN0b3IudGFyZ2V0SWQsXHJcbiAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgZXN0aW1hdGU6IGRjb25uZWN0b3IuZXN0aW1hdGUsXHJcbiAgICAgICAgICAgICAgICB0aW1lOiBkY29ubmVjdG9yLnRpbWVcclxuICAgICAgICAgICAgICB9IGFzIENvbm5lY3RvckluZm9Nb2RlbFxyXG4gICAgICAgICAgICB9IGFzIENvbm5lY3Rvck1vZGVsKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmVyb3V0ZSh7XHJcbiAgICAgICAgICAgICAgdGltZTogZGNvbm5lY3Rvci50aW1lLFxyXG4gICAgICAgICAgICAgIHRhcmdldElkOiBkY29ubmVjdG9yLnRhcmdldElkLFxyXG4gICAgICAgICAgICAgIGVzdGltYXRlOiBkY29ubmVjdG9yLmVzdGltYXRlLFxyXG4gICAgICAgICAgICAgIHNvdXJjZUlkOiBjb25uZWN0b3Iuc291cmNlSWRcclxuICAgICAgICAgICAgfSwgaW5kZXggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5kZXgrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgY29ubmVjdG9ycywgbm9kZXMsIGluZGljYXRvcnMgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5vZGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9zaGFwZShub2RlOiBOb2RlSW5mbyk6IFByb21pc2U8eyBzdGF0ZTogU3RhdGU7IGFubm90YXRpb246IHN0cmluZzsgdG9vbHRpcDogTm9kZVRvb2x0aXBNb2RlbDsgfT4ge1xyXG4gICAgY29uc3QgdG9vbHRpcCA9IHt9IGFzIE5vZGVUb29sdGlwTW9kZWw7XHJcbiAgICBpZiAobm9kZS5lcnJvcikgdG9vbHRpcC5lcnJvciA9IG5vZGUuZXJyb3I7XHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nLCBzdGF0ZTogU3RhdGU7XHJcbiAgICBjb25zdCBsb2cgPSB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLm5vZGVJZCA9PT0gbm9kZS5pZCAmJiBsLnRpbWUgPj0gdGhpcy5faXNzdWVkKTtcclxuICAgIGNvbnN0IHN0YXRlTG9nID0gbG9nLmZpbmQobCA9PiBsLnR5cGUgPT09ICdTdGF0ZUNoYW5nZScpO1xyXG4gICAgaWYgKHN0YXRlTG9nKSB7XHJcbiAgICAgIHN0YXRlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnN0YXRlcy5maW5kKHMgPT4gcy5uYW1lID09PSBzdGF0ZUxvZy5zdGF0ZSk7XHJcblxyXG4gICAgICBhbm5vdGF0aW9uID0gc3RhdGUgPyAoKG5vZGUuZXN0aW1hdGUgPyBzdGF0ZS5mdXR1cmUgOiBzdGF0ZS5wYXN0KSB8fCBzdGF0ZS50aXRsZSkgOiBzdGF0ZUxvZy5zdGF0ZTtcclxuICAgIH1cclxuICAgIGlmIChub2RlLnR5cGUgPT09IFNUQVJUX05PREUpIHtcclxuICAgICAgaWYgKCFub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgY29uc3QgeyBub3RlLCByb2xlIH0gPSBhd2FpdCB0aGlzLl9zdGFydE5vZGUoKTtcclxuICAgICAgICB0b29sdGlwLm5vdGUgPSBub3RlLFxyXG4gICAgICAgICAgdG9vbHRpcC5yb2xlID0gcm9sZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS5lc3RpbWF0ZSlcclxuICAgICAgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpO1xyXG4gICAgcmV0dXJuIHsgc3RhdGUsIHRvb2x0aXAsIGFubm90YXRpb24gfTtcclxuICB9XHJcbiAgcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhZ3JhbSkgdGhpcy5kaWFncmFtLndpZHRoID0gJ2F1dG8nO1xyXG4gIH1cclxuICBwcml2YXRlIF90aW1lRXN0aW1hdGUobm9kZTogTm9kZUluZm8pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gc3VwZXIuX2VzdGltYXRlVGltZShub2RlKTtcclxuICAgIGlmIChtYXgpXHJcbiAgICAgIHJldHVybiAhbWluIHx8IG1pbiA9PT0gbWF4ID9cclxuICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0obWF4KSkgOlxyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZVJhbmdlJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKG1pbiksIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShtYXgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG9vbHRpcChvYmo6IE5vZGVUb29sdGlwTW9kZWwpIHtcclxuICAgIGNvbnN0IHsgbm90ZSwgcm9sZSwgc3Vic3RpdHV0aW5nLCBkdXJhdGlvbiwgc3RhbmRhcmRUaW1lLCBlc3RpbWF0ZWRUaW1lLCBlcnJvciwgZnlpIH0gPSBvYmpcclxuICAgIGNvbnN0IHJvd3MgPSBbZXJyb3IsIG5vdGUsIHJvbGUsIHN1YnN0aXR1dGluZywgZnlpLCBkdXJhdGlvbiwgc3RhbmRhcmRUaW1lLCBlc3RpbWF0ZWRUaW1lXTtcclxuICAgIGxldCBkaXY6IEhUTUxEaXZFbGVtZW50O1xyXG4gICAgcm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBpZiAoIXIpIHJldHVybjtcclxuICAgICAgaWYgKCFkaXYpIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLmlubmVyVGV4dCA9IHI7XHJcbiAgICAgIGRpdi5hcHBlbmQoc3Bhbik7XHJcbiAgICAgIGNvbnN0IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKTtcclxuICAgICAgZGl2LmFwcGVuZChicik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkaXY7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXJ0Tm9kZSgpOiBQcm9taXNlPHtcclxuICAgIG5vdGU6IHN0cmluZywgcm9sZTogc3RyaW5nO1xyXG4gIH0+IHtcclxuICAgIGxldCB3aG86IFVzZXJJbmZvIHwgJ3lvdScsIGJ5OiBVc2VySW5mbyB8ICd5b3UnO1xyXG4gICAgaWYgKHRoaXMubW9kZWwub3duZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZCAmJiAhdGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpXHJcbiAgICAgIHdobyA9ICd5b3UnO1xyXG4gICAgZWxzZVxyXG4gICAgICB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQodGhpcy5tb2RlbC5vd25lcklkKS50b1Byb21pc2UoKTtcclxuICAgIGlmICh0aGlzLm1vZGVsLm93bmVyQnlJZCkge1xyXG4gICAgICBpZiAodGhpcy5tb2RlbC5vd25lckJ5SWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKVxyXG4gICAgICAgIGJ5ID0gJ3lvdSc7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBieSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm93bmVyQnlJZCkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm90ZTogc3RyaW5nLCByb2xlOiBzdHJpbmc7XHJcbiAgICBpZiAoYnkpIHtcclxuICAgICAgaWYgKGJ5ID09PSAneW91JylcclxuICAgICAgICBub3RlID1cclxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N1Ym1pdHRlZE5vdGVCeVlvdScsXHJcbiAgICAgICAgICAgIHdobyA9PT0gJ3lvdScgPyB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3UnKSA6ICh3aG8gYXMgVXNlckluZm8pLm5hbWUsXHJcbiAgICAgICAgICAgIHRoaXMuX2Zyb21Ob3codGhpcy5tb2RlbC5pc3N1ZWQpKTtcclxuXHJcbiAgICAgIGVsc2VcclxuICAgICAgICBub3RlID1cclxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N1Ym1pdHRlZE5vdGVCeScsXHJcbiAgICAgICAgICAgIHdobyA9PT0gJ3lvdScgPyB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3UnKSA6ICh3aG8gYXMgVXNlckluZm8pLm5hbWUsXHJcbiAgICAgICAgICAgIChieSBhcyBVc2VySW5mbykubmFtZSxcclxuICAgICAgICAgICAgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHdobyA9PT0gJ3lvdScpXHJcbiAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VTdWJtaXR0ZWROb3RlJywgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgbm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N1Ym1pdHRlZE5vdGUnLCAod2hvIGFzIFVzZXJJbmZvKS5uYW1lLCB0aGlzLl9mcm9tTm93KHRoaXMubW9kZWwuaXNzdWVkKSk7XHJcbiAgICBpZiAod2hvICE9PSAneW91JyAmJiB3aG8ucm9sZSlcclxuICAgICAgcm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgIHJldHVybiB7IG5vdGUsIHJvbGUgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX25vdGUobm9kZTogTm9kZUluZm8sIHJlY2lwaWVudDogUmVjaXBpZW50KTogUHJvbWlzZTx7IGFubm90YXRpb246IHN0cmluZzsgdG9vbHRpcDogTm9kZVRvb2x0aXBNb2RlbCB9PiB7XHJcbiAgICBjb25zdCB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsID0ge307XHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSB7XHJcbiAgICAgIGFubm90YXRpb24gPSB0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZyA/IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lIDogdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91Jyk7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LmJ5SWQpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgY29uc3QgcGFzdCA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB1LmdlbmRlciksIHRpbWUgPSB0aGlzLl9mcm9tTm93KHJlY2lwaWVudC5yZXBsaWVkKTtcclxuICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VUYWtlbkFjdGlvbkJ5JywgdS5uYW1lLCBwYXN0LCB0aW1lKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLl9mcm9tTm93KHJlY2lwaWVudC5yZXBsaWVkKTtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpIHtcclxuICAgICAgICAgIGNvbnN0IHBhc3QgPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlcik7XHJcbiAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbicsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCBwYXN0LCB0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBwYXN0ID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sICd5b3UnKTtcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uJywgcGFzdCwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCFub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlY2VpdmVkKTtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpXHJcbiAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1JlY2VpdmVkQnknLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZ2VuZGVyLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSwgdGltZSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91UmVjZWl2ZWQnLCB0aW1lKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVjaXBpZW50LnJvbGUpIHtcclxuICAgICAgICBjb25zdCBjcm9sZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSByZWNpcGllbnQucm9sZSk7XHJcbiAgICAgICAgdG9vbHRpcC5yb2xlID0gYC0gJHtjcm9sZSA/IGNyb2xlLnRpdGxlIDogcmVjaXBpZW50LnJvbGV9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgYW5ub3RhdGlvbiA9IHdoby5uYW1lO1xyXG4gICAgICBpZiAod2hvLnJvbGUpIHRvb2x0aXAucm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnJvbGUpIHtcclxuICAgICAgICBjb25zdCBjcm9sZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSByZWNpcGllbnQucm9sZSk7XHJcbiAgICAgICAgdG9vbHRpcC5yb2xlID0gYC0gJHtjcm9sZSA/IGNyb2xlLnRpdGxlIDogcmVjaXBpZW50LnJvbGV9YDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgICAgY29uc3QgYnkgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LmJ5SWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgcGFzdCA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCBieS5nZW5kZXIpLFxyXG4gICAgICAgICAgICB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVwbGllZCk7XHJcbiAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5JywgYnkubmFtZSwgcGFzdCwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcGFzdCA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB3aG8uZ2VuZGVyKSxcclxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlcGxpZWQpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW4nLCB3aG8ubmFtZSwgcGFzdCwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCFyZWNpcGllbnQuZXN0aW1hdGUpIHtcclxuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVjZWl2ZWQpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnUmVjZWl2ZWRUaW1lJywgd2hvLmdlbmRlciwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0aW5nSWQgJiYgcmVjaXBpZW50LmVzdGltYXRlKSB7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0aW5nSWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5ieUlkKVxyXG4gICAgICAgIHRvb2x0aXAuc3Vic3RpdHV0aW5nID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJzdGl0dXRpbmdZb3UnLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZ2VuZGVyKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQuc3Vic3RpdHV0aW5nSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvb2x0aXAuc3Vic3RpdHV0aW5nID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJzdGl0dXRpbmdGb3InLCB1LmdlbmRlciwgdS5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZXNjYWxhdGlvbnMgPSB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLnRpbWUgPiB0aGlzLl9pc3N1ZWQgJiYgbC50eXBlID09PSAnRXNjYWxhdGlvbicgJiYgbC5yZWNpcGllbnRJZCA9PT0gcmVjaXBpZW50LmlkKTtcclxuICAgIGlmIChlc2NhbGF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdXNlcklkcyA9IGVzY2FsYXRpb25zLm1hcChlID0+IGUudXNlcklkKTtcclxuICAgICAgY29uc3QgdXNlcnMgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXRBbGwodXNlcklkcykudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRheWpzKGVzY2FsYXRpb25zW2VzY2FsYXRpb25zLmxlbmd0aCAtIDFdLnRpbWUpLmRpZmYocmVjaXBpZW50LnJlY2VpdmVkLCAncycpKTtcclxuICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc2NhbGF0ZWRUbycsIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHVzZXJzLm1hcCh1ID0+IHUubmFtZSkpLCBkdXJhdGlvbik7XHJcbiAgICB9XHJcbiAgICBpZiAocmVjaXBpZW50LnJlcGxpZWQpIHtcclxuICAgICAgY29uc3QgZHVyYXRpb24gPSBkYXlqcyhyZWNpcGllbnQucmVwbGllZCkuZGlmZihyZWNpcGllbnQucmVjZWl2ZWQsICdzJyk7XHJcbiAgICAgIHRvb2x0aXAuZHVyYXRpb24gPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEdXJhdGlvblRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZHVyYXRpb24pKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJlY2lwaWVudC5wZW5kaW5nKSB7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuZXN0aW1hdGUpIHRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKTtcclxuICAgICAgZWxzZSBpZiAobm9kZS5zdGFuZGFyZFRpbWUpIHtcclxuICAgICAgICBjb25zdCBkaWZmID0gbm9kZS5zdGFuZGFyZFRpbWUgLSBkYXlqcygpLmRpZmYobm9kZS50aW1lLCAncycpO1xyXG4gICAgICAgIGlmIChkaWZmID4gMClcclxuICAgICAgICAgIHRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkaWZmKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vZGUuc3RhbmRhcmRUaW1lKVxyXG4gICAgICB0b29sdGlwLnN0YW5kYXJkVGltZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ05vZGVTdGFuZGFyZFRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0obm9kZS5zdGFuZGFyZFRpbWUpKTtcclxuICAgIGlmIChub2RlLmZ5aSlcclxuICAgICAgdG9vbHRpcC5meWkgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdGWUknKTtcclxuICAgIHJldHVybiB7IGFubm90YXRpb24sIHRvb2x0aXAgfTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWN0aW9uKG5hbWU6IHN0cmluZywgZ2VuZGVyPzogR2VuZGVyIHwgJ3lvdScpIHtcclxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbmQoYSA9PiBhLm5hbWUgPT09IG5hbWUpO1xyXG4gICAgaWYgKCFhY3Rpb24pIHJldHVybiBuYW1lO1xyXG4gICAgaWYgKGdlbmRlciA9PT0gJ3lvdScpIHtcclxuICAgICAgY29uc3QgZ2VuZGVyID0gdGhpcy5fc2Vzc2lvbi5nZW5kZXIsIHBlcnNvbmFsID1cclxuICAgICAgICAoZ2VuZGVyID09PSAnTWFsZScgPyAoYWN0aW9uLnlvdU1hbGUgfHwgYWN0aW9uLnlvdSkgOlxyXG4gICAgICAgICAgZ2VuZGVyID09PSAnRmVtYWxlJyA/IChhY3Rpb24ueW91RmVtYWxlIHx8IGFjdGlvbi55b3UpIDpcclxuICAgICAgICAgICAgYWN0aW9uLnlvdSk7XHJcbiAgICAgIHJldHVybiAocGVyc29uYWwgfHxcclxuICAgICAgICBhY3Rpb24ucGFzdCB8fFxyXG4gICAgICAgIGFjdGlvbi50aXRsZSkudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhc3QgPSAoKGdlbmRlciA9PT0gJ01hbGUnID8gKGFjdGlvbi5wYXN0TWFsZSB8fCBhY3Rpb24ucGFzdCkgOlxyXG4gICAgICBnZW5kZXIgPT09ICdGZW1hbGUnID8gKGFjdGlvbi5wYXN0RmVtYWxlIHx8IGFjdGlvbi5wYXN0KSA6IGFjdGlvbi5wYXN0KSB8fFxyXG4gICAgICBhY3Rpb24udGl0bGUpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gcGFzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zyb21Ob3coZGF0ZTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIGRheWpzKGRhdGUpLmZyb21Ob3coKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaWFncmFtICYmIHRoaXMuZGlhZ3JhbS5kZXN0cm95KCk7XHJcbiAgfVxyXG59XHJcbmludGVyZmFjZSBDb25uZWN0b3JJbmZvTW9kZWwge1xyXG4gIGVzdGltYXRlPzogYm9vbGVhbjtcclxuICBwYXJlbnRJZDogc3RyaW5nO1xyXG4gIHRpbWU6IERhdGVcclxufVxyXG5pbnRlcmZhY2UgTm9kZUluZm9Nb2RlbCB7XHJcbiAgdG9vbHRpcDogTm9kZVRvb2x0aXBNb2RlbDtcclxuICBub2RlOiBOb2RlSW5mbztcclxuICByZWNpcGllbnQ6IFJlY2lwaWVudFxyXG4gIGluZGljYXRvcj86IGJvb2xlYW47XHJcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XHJcbn1cclxuaW50ZXJmYWNlIE5vZGVUb29sdGlwTW9kZWwge1xyXG4gIGZ5aT86IHN0cmluZztcclxuICBlcnJvcj86IHN0cmluZztcclxuICBub3RlPzogc3RyaW5nO1xyXG4gIHJvbGU/OiBzdHJpbmc7XHJcbiAgc3Vic3RpdHV0aW5nPzogc3RyaW5nO1xyXG4gIHN0YW5kYXJkVGltZT86IHN0cmluZztcclxuICBkdXJhdGlvbj86IHN0cmluZztcclxuICBlc3RpbWF0ZWRUaW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|
681
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvbXBvc2UvdHJhY2UvZmxvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBMEMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSw4QkFBOEIsRUFBcUIsWUFBWSxFQUFFLFdBQVcsRUFBOEcscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBb0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuYSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7OztBQU8xRCxPQUFPLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxXQUFXLENBQUEscURBQXFELENBQUMsQ0FBQztBQUV4SCxNQUFNLFlBQVksR0FBRyx1RkFBdUYsRUFDMUcsUUFBUSxHQUFHLGtHQUFrRyxFQUM3RyxjQUFjLEdBQUcsbVFBQW1RLEVBQ3BSLGFBQWEsR0FBRyxzVEFBc1QsQ0FBQztBQVd6VSx5QkFBeUI7QUFDekIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFNBQVM7SUF5QzlDLHlCQUF5QjtJQUN6QixZQUFvQixTQUF5QixFQUFVLFFBQXdCLEVBQVUsVUFBNEIsRUFDM0csU0FBNkIsRUFDN0IsV0FBdUMsRUFDL0MsR0FBZTtR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QUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDdkUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLFFBQVEsQ0FBQyxJQUFVO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDRCxXQUFXO1FBQ1QsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6QyxDQUFDOzs4R0F6cEJVLGlCQUFpQjtrR0FBakIsaUJBQWlCLG1NQVJsQixFQUFFLCtDQUVHLENBQUMsOEJBQThCLENBQUM7MkZBTXBDLGlCQUFpQjtrQkFWN0IsU0FBUzsrQkFDRSxhQUFhLFlBQ2IsRUFBRSxpQkFFRyxDQUFDLDhCQUE4QixDQUFDLFFBQ3pDO3dCQUNKLEdBQUcsRUFBRSxLQUFLO3FCQUNYO29QQUlRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTm9kZU1vZGVsLCBDb25uZWN0b3JNb2RlbCwgTGF5b3V0TW9kZWwsIERpYWdyYW1Ub29scywgRGlhZ3JhbSwgRGlhZ3JhbUNvbnN0cmFpbnRzLCBDb21wbGV4SGllcmFyY2hpY2FsVHJlZSwgQ29tcGxleEhpZXJhcmNoaWNhbFRyZWVTZXJ2aWNlLCBDb25uZWN0b3JCcmlkZ2luZywgQnBtbkRpYWdyYW1zLCBEYXRhQmluZGluZywgU2Nyb2xsU2V0dGluZ3NNb2RlbCwgU25hcFNldHRpbmdzTW9kZWwsIFNlZ21lbnRzLCBMaW5lUm91dGluZywgVHJlZUluZm8sIElNb3VzZUV2ZW50QXJncywgTGluZURpc3RyaWJ1dGlvbiwgQ29ubmVjdGlvblBvaW50T3JpZ2luLCBTbmFwQ29uc3RyYWludHMsIE5vZGVDb25zdHJhaW50cywgQ2hpbGRBcnJhbmdlbWVudCB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWRpYWdyYW1zJztcclxuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyBEb2N1bWVudE1vZGVsLCBSZWNpcGllbnQsIE5vZGVJbmZvLCBHZW5kZXIsIEZsb3dOb2RlLCBVc2VySW5mbywgU3RhdGUsIENvbm5lY3RvckluZm8gfSBmcm9tIFwiLi4vLi4vY29yZS9tb2RlbHNcIjtcclxuaW1wb3J0IHsgZ2V0V2FybiB9IGZyb20gJy4uLy4uL2NvcmUvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgVHJhY2VCYXNlLCBZb3UsIFNUQVJUX05PREUgfSBmcm9tICcuL3RyYWNlLmJhc2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHViU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvaHViLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEdXJhdGlvbkZvcm1hdFBpcGUgfSBmcm9tICcuLi8uLi9jb3JlL3BpcGVzL2R1cmF0aW9uLWZvcm1hdC5waXBlJztcclxuXHJcbkRpYWdyYW0uSW5qZWN0KENvbXBsZXhIaWVyYXJjaGljYWxUcmVlLCBCcG1uRGlhZ3JhbXMsIERhdGFCaW5kaW5nLyosIExheW91dEFuaW1hdGlvbiwgTGluZVJvdXRpbmcsIENvbm5lY3RvckJyaWRnaW5nKi8pO1xyXG5cclxuY29uc3QgUEVORElOR19QQVRIID0gJ00xOCwyMmwtMC4wMS02TDE0LDEybDMuOTktNC4wMUwxOCwySDZ2Nmw0LDRsLTQsMy45OVYyMkgxOHogTTgsNy41VjRoOHYzLjVsLTQsNEw4LDcuNXonLFxyXG4gIEZZSV9QQVRIID0gJ00xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeicsXHJcbiAgRVNDQUxBVEVEX1BBVEggPSAnTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyLjUgOEgxMXY2bDQuNzUgMi44NS43NS0xLjIzLTQtMi4zN1Y4ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3onLFxyXG4gIFdBUk5OSU5HX1BBVEggPSAnTSAxMy43NjM3MzUsMS44NDMzNzM1IEggNi4zMDM3MzQ5IGwgLTUuMjcsNS4yNyB2IDcuNDU5OTk5NSBsIDUuMjcsNS4yNyBoIDcuNDYwMDAwMSBsIDUuMjcsLTUuMjcgViA3LjExMzM3MzUgWiBtIC0zLjczLDE0LjI5OTk5OTUgYyAtMC43MjAwMDAxLDAgLTEuMzAwMDAwMSwtMC41OCAtMS4zMDAwMDAxLC0xLjMgMCwtMC43MiAwLjU4LC0xLjMgMS4zMDAwMDAxLC0xLjMgMC43MiwwIDEuMywwLjU4IDEuMywxLjMgMCwwLjcyIC0wLjU4LDEuMyAtMS4zLDEuMyB6IG0gMSwtNC4zIEggOS4wMzM3MzQ5IFYgNS44NDMzNzM1IGggMi4wMDAwMDAxIHonO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZmxvdycsXHJcbiAgdGVtcGxhdGU6ICcnLFxyXG4gIHN0eWxlVXJsczogWycuL2Zsb3cuY29tcG9uZW50LnNjc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbQ29tcGxleEhpZXJhcmNoaWNhbFRyZWVTZXJ2aWNlXSxcclxuICBob3N0OiB7XHJcbiAgICBkaXI6ICdsdHInXHJcbiAgfVxyXG59KVxyXG4vKiogZmxvdy12aWV3IGNvbXBvbmVudCovXHJcbmV4cG9ydCBjbGFzcyBGbG93Vmlld0NvbXBvbmVudCBleHRlbmRzIFRyYWNlQmFzZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBtb2RlbDogRG9jdW1lbnRNb2RlbDxhbnk+O1xyXG4gIEBJbnB1dCgpIGNvbm5lY3RvclR5cGU6IFNlZ21lbnRzID0gJ09ydGhvZ29uYWwnO1xyXG4gIGRpYWdyYW06IERpYWdyYW07XHJcbiAgcmVhZG9ubHkgdG9vbDogRGlhZ3JhbVRvb2xzID0gRGlhZ3JhbVRvb2xzLlpvb21QYW47XHJcbiAgcmVhZG9ubHkgZGlhZ3JhbUNvbnN0cmFpbnRzOiBEaWFncmFtQ29uc3RyYWludHMgPVxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLkRlZmF1bHQgfFxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLlBhbiB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuTGluZVJvdXRpbmcgfFxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLkJyaWRnaW5nO1xyXG4gIHB1YmxpYyByZWFkb25seSBsYXlvdXQgPSB7XHJcbiAgICB0eXBlOiAnQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUnLFxyXG4gICAgY29ubmVjdGlvblBvaW50T3JpZ2luOiBDb25uZWN0aW9uUG9pbnRPcmlnaW4uRGlmZmVyZW50UG9pbnQsXHJcbiAgICBob3Jpem9udGFsU3BhY2luZzogNTAsXHJcbiAgICB2ZXJ0aWNhbFNwYWNpbmc6IDUwLFxyXG4gICAgLy9jb25uZWN0b3JTZWdtZW50czogJ0xheW91dCcsXHJcbiAgICAvL2FycmFuZ2VtZW50OiBDaGlsZEFycmFuZ2VtZW50Lk5vbmxpbmVhcixcclxuICAgIC8vaG9yaXpvbnRhbEFsaWdubWVudDonQ2VudGVyJywgXHJcbiAgICAvL3ZlcnRpY2FsQWxpZ25tZW50OiAnQXV0bycsXHJcbiAgICBjb25uZWN0aW9uRGlyZWN0aW9uOiAnT3JpZW50YXRpb24nLFxyXG4gICAgb3JpZW50YXRpb246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdSaWdodFRvTGVmdCcgOiAnTGVmdFRvUmlnaHQnLFxyXG4gICAgbWFyZ2luOiB7IGxlZnQ6IDEwLCByaWdodDogMTAsIHRvcDogMTAsIGJvdHRvbTogMTAgfVxyXG4gIH0gYXMgTGF5b3V0TW9kZWw7XHJcblxyXG4gIHJlYWRvbmx5IHNjcm9sbFNldHRpbmdzID0ge1xyXG4gICAgbWluWm9vbTogLjUsXHJcbiAgICBzY3JvbGxMaW1pdDogJ0xpbWl0ZWQnLFxyXG4gICAgY2FuQXV0b1Njcm9sbDogdHJ1ZSxcclxuICAgIGN1cnJlbnRab29tOiAxLjIsXHJcbiAgICBwYWRkaW5nOiB7IHRvcDogMCwgYm90dG9tOiAwIH0sXHJcbiAgICBhdXRvU2Nyb2xsQm9yZGVyOiB7IHRvcDogMCwgYm90dG9tOiAwIH0sXHJcbiAgICBtYXhab29tOiAyLjVcclxuICB9IGFzIFNjcm9sbFNldHRpbmdzTW9kZWw7XHJcblxyXG4gIHJlYWRvbmx5IHNuYXBTZXR0aW5ncyA9IHtcclxuICAgIGNvbnN0cmFpbnRzOiBTbmFwQ29uc3RyYWludHMuTm9uZSxcclxuICAgIGdyaWRUeXBlOiAnRG90cydcclxuICB9IGFzIFNuYXBTZXR0aW5nc01vZGVsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZ3VyYXRpb246IHsgW25hbWU6IHN0cmluZ106IEZsb3dOb2RlIH0gPSB7fTtcclxuICBwcml2YXRlIF9pc3N1ZWQ6IERhdGU7XHJcbiAgcHJpdmF0ZSBfYWNjZW50Q29sb3IgPSB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpO1xyXG4gIC8qKiB3b3JrZmxvdy12aWV3IGN0b3IgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UsIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLCBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kdXJhdGlvbjogRHVyYXRpb25Gb3JtYXRQaXBlLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgICBodWI6IEh1YlNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGh1Yik7XHJcbiAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubm9kZXMuZm9yRWFjaChuID0+XHJcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25bbi5uYW1lXSA9IG4pO1xyXG4gICAgX3Nlc3Npb24udGhlbWVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2FjY2VudENvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbml0aWFsaXplKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2luaXRpYWxpemUoKSB7XHJcbiAgICBjb25zdCB7IGNvbm5lY3RvcnMsIG5vZGVzLCBpbmRpY2F0b3JzIH0gPSBhd2FpdCB0aGlzLl9wcmVwYXJlKCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gJiYgdGhpcy5kaWFncmFtLmRlc3Ryb3koKTtcclxuICAgIHRoaXMuZGlhZ3JhbSA9IG5ldyBEaWFncmFtKHtcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgaGVpZ2h0OiAzODAsXHJcbiAgICAgIG5vZGVzLFxyXG4gICAgICBjb25uZWN0b3JzLFxyXG4gICAgICBsYXlvdXQ6IHRoaXMubGF5b3V0LFxyXG4gICAgICB0b29sOiB0aGlzLnRvb2wsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgc2Nyb2xsU2V0dGluZ3M6IHRoaXMuc2Nyb2xsU2V0dGluZ3MsXHJcbiAgICAgIHNuYXBTZXR0aW5nczogdGhpcy5zbmFwU2V0dGluZ3MsXHJcbiAgICAgIGNvbnN0cmFpbnRzOiB0aGlzLmRpYWdyYW1Db25zdHJhaW50cyxcclxuICAgICAgZ2V0Q29ubmVjdG9yRGVmYXVsdHM6IHRoaXMuY29ubkRlZmF1bHRzLmJpbmQodGhpcyksXHJcbiAgICAgIGdldE5vZGVEZWZhdWx0czogdGhpcy5ub2RlRGVmYXVsdHMuYmluZCh0aGlzKSxcclxuICAgIH0sIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLmRpYWdyYW0uZG9MYXlvdXQoKTtcclxuICAgIGluZGljYXRvcnMuZm9yRWFjaCgobiwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmRpYWdyYW0uZ2V0Tm9kZU9iamVjdCgobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnBhcmVudElkKTtcclxuICAgICAgbi5vZmZzZXRYID0gcGFyZW50Lm9mZnNldFggKyAodGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gLTI1IDogMjUpO1xyXG4gICAgICBuLm9mZnNldFkgPSBwYXJlbnQub2Zmc2V0WSArIDI1O1xyXG4gICAgICBuLnpJbmRleCA9IDEwMDAgKyBpO1xyXG4gICAgICB0aGlzLmRpYWdyYW0uYWRkKG4pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uZml0VG9QYWdlKCk7XHJcbiAgICBpbnRlcnZhbCg2MDAwMCkucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShcclxuICAgICAgdGhpcy5fcmVmcmVzaC5iaW5kKHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9yZWZyZXNoKCkge1xyXG4gICAgc3VwZXIucmVzZXRFc3RpbWF0ZVRpbWUoKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICBjb25zdCB7IG5vZGUsIHJlY2lwaWVudCB9ID0gbi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWw7XHJcbiAgICAgIGlmIChyZWNpcGllbnQpIHtcclxuICAgICAgICBpZiAoIXJlY2lwaWVudC5yZXBsaWVkICYmIHJlY2lwaWVudC5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmVzdGltYXRlKSAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKTtcclxuICAgICAgICAgIGVsc2UgaWYgKG5vZGUuc3RhbmRhcmRUaW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBub2RlLnN0YW5kYXJkVGltZSAtIGRheWpzKCkuZGlmZihub2RlLnRpbWUsICdzJyk7XHJcbiAgICAgICAgICAgIGlmIChkaWZmID4gMClcclxuICAgICAgICAgICAgICAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkaWZmKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBuLnRvb2x0aXAuY29udGVudCA9IHRoaXMuX3Rvb2x0aXAoKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIGlmIChub2RlICYmIG5vZGUuZXN0aW1hdGUpXHJcbiAgICAgICAgICAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKSxcclxuICAgICAgICAgICAgbi50b29sdGlwLmNvbnRlbnQgPSB0aGlzLl90b29sdGlwKChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG9ialxyXG4gICAqL1xyXG4gIHB1YmxpYyBub2RlRGVmYXVsdHMob2JqOiBOb2RlTW9kZWwpOiBOb2RlTW9kZWwge1xyXG4gICAgY29uc3QgeyByZWNpcGllbnQsIG5vZGUsIGluZGljYXRvciB9ID0gb2JqLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbDtcclxuXHJcbiAgICBpZiAoaW5kaWNhdG9yKSB7XHJcbiAgICAgIG9iai53aWR0aCA9IG9iai5oZWlnaHQgPSAxNTtcclxuICAgICAgb2JqLnN0eWxlLnN0cm9rZVdpZHRoID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBvYmouc2hhcGUgPSB7IHR5cGU6ICdCcG1uJywgc2hhcGU6ICdFdmVudCcgfSBhcyBCcG1uU2hhcGVNb2RlbDtcclxuICAgICAgb2JqLndpZHRoID0gb2JqLmhlaWdodCA9IDUwO1xyXG4gICAgICBpZiAob2JqLmFubm90YXRpb25zICYmIG9iai5hbm5vdGF0aW9ucy5sZW5ndGgpIG9iai5hbm5vdGF0aW9uc1swXS5zdHlsZS5jb2xvciA9IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snO1xyXG4gICAgICBpZiAobm9kZSAmJiBub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgb2JqLnN0eWxlLnN0cm9rZUNvbG9yID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgICAgb2JqLnN0eWxlLm9wYWNpdHkgPSBvYmouYW5ub3RhdGlvbnNbMF0uc3R5bGUub3BhY2l0eSA9IC42O1xyXG4gICAgICAgIG9iai5zdHlsZS5maWxsID0gJ3RyYW5zcGFyZW50JztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9hY2NlbnRDb2xvcjtcclxuICAgICAgICBvYmouc3R5bGUuZmlsbCA9IHJlY2lwaWVudCAmJiByZWNpcGllbnQucGVuZGluZyA/IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KDQwMCkgOiAndHJhbnNwYXJlbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIG9iai5zdHlsZS5zdHJva2VXaWR0aCA9IDI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29ubmVjdG9yXHJcbiAgICovXHJcbiAgcHVibGljIGNvbm5EZWZhdWx0cyhjb25uZWN0b3I6IENvbm5lY3Rvck1vZGVsKSB7XHJcbiAgICBjb25uZWN0b3IudHlwZSA9IHRoaXMuY29ubmVjdG9yVHlwZTtcclxuICAgIGNvbm5lY3Rvci5jb3JuZXJSYWRpdXMgPSA2O1xyXG4gICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5oZWlnaHQgPSA3O1xyXG4gICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci53aWR0aCA9IDc7XHJcbiAgICBpZiAoKGNvbm5lY3Rvci5hZGRJbmZvIGFzIENvbm5lY3RvckluZm9Nb2RlbCkuZXN0aW1hdGUpIHtcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZURhc2hBcnJheSA9ICcyIDInO1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlQ29sb3IgPVxyXG4gICAgICAgIGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iuc3R5bGUuZmlsbCA9XHJcbiAgICAgICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5zdHJva2VDb2xvciA9XHJcbiAgICAgICAgdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VXaWR0aCA9IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZUNvbG9yID0gY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5zdHJva2VDb2xvciA9IGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iuc3R5bGUuZmlsbCA9IHRoaXMuX2FjY2VudENvbG9yO1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlV2lkdGggPSAyO1xyXG4gICAgfVxyXG4gICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zaGFwZSA9ICdOb25lJztcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZSgpOiBQcm9taXNlPHsgbm9kZXM6IE5vZGVNb2RlbFtdOyBjb25uZWN0b3JzOiBDb25uZWN0b3JNb2RlbFtdOyBpbmRpY2F0b3JzOiBOb2RlTW9kZWxbXSB9PiB7XHJcbiAgICBjb25zdCB7IGNvbm5lY3RvcnM6IGRjb25uZWN0b3JzLCBub2RlczogZG5vZGVzIH0gPSB0aGlzLm1vZGVsLndvcmtmbG93O1xyXG4gICAgY29uc3QgaW5kaWNhdG9yczogTm9kZU1vZGVsW10gPSBbXSwgY29ubmVjdG9yczogQ29ubmVjdG9yTW9kZWxbXSA9IGRjb25uZWN0b3JzLm1hcChjID0+IChcclxuICAgICAge1xyXG4gICAgICAgIHNvdXJjZUlEOiBjLnNvdXJjZUlkLFxyXG4gICAgICAgIHRhcmdldElEOiBjLnRhcmdldElkLFxyXG4gICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgIGVzdGltYXRlOiBjLmVzdGltYXRlLFxyXG4gICAgICAgICAgdGltZTogYy50aW1lXHJcbiAgICAgICAgfSBhcyBDb25uZWN0b3JJbmZvTW9kZWxcclxuICAgICAgfSBhcyBDb25uZWN0b3JNb2RlbFxyXG4gICAgKSksIG5vZGVzOiBOb2RlTW9kZWxbXSA9IFtdO1xyXG4gICAgdGhpcy5faXNzdWVkID0gdGhpcy5tb2RlbC5pc3N1ZWQgfHwgdGhpcy5tb2RlbC5sb2cuZmlsdGVyKGwgPT4gbC50eXBlID09PSAnU3VibWl0JylbMF0udGltZTtcclxuICAgIGxldCB6SW5kZXggPSA1MDA7XHJcbiAgICBmb3IgKGxldCBub2RlIG9mIGRub2Rlcykge1xyXG4gICAgICBpZiAobm9kZXMuZmluZChuID0+IG4uaWQgPT0gbm9kZS5pZCkpIGNvbnRpbnVlO1xyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25bbm9kZS50eXBlXTtcclxuICAgICAgbGV0IHJlY2lwaWVudHMgPSB0aGlzLm1vZGVsLnJlY2lwaWVudHMuXHJcbiAgICAgICAgZmlsdGVyKHIgPT4gci5ub2RlSWQgPT09IG5vZGUuaWQgJiZcclxuICAgICAgICAgIHIucmVjZWl2ZWQgPj0gdGhpcy5faXNzdWVkKVxyXG4gICAgICAgIC5zb3J0KChyMCwgcjEpID0+XHJcbiAgICAgICAgICByMC5yZWNlaXZlZCA+IHIxLnJlY2VpdmVkID8gMSA6IC0xKTtcclxuICAgICAgaWYgKHJlY2lwaWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHIgPSAwO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgIHZhciByZWNpcGllbnQgPSByZWNpcGllbnRzW3JdO1xyXG4gICAgICAgICAgbGV0IGV4aXN0cyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZSB1c2VyIHJlY2lwaWVudCBvbiBzYW1lIG5vZGVcclxuICAgICAgICAgIGxldCBqID0gMDtcclxuICAgICAgICAgIHdoaWxlIChqIDwgciAmJiAhZXhpc3RzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWNpcGllbnRzW2pdLnVzZXJJZCA9PT0gcmVjaXBpZW50LnVzZXJJZCkgZXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZSBqKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZXhpc3RzKVxyXG4gICAgICAgICAgICByZWNpcGllbnRzLnNwbGljZShyZWNpcGllbnQuZXN0aW1hdGUgPyByIDogaiwgMSk7XHJcbiAgICAgICAgICBlbHNlIHIrKztcclxuICAgICAgICB9IHdoaWxlIChyIDwgcmVjaXBpZW50cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICBmb3IgKHIgPSAwOyByIDwgcmVjaXBpZW50cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgbGV0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbcl07XHJcbiAgICAgICAgICBjb25zdCB7IGFubm90YXRpb24sIHRvb2x0aXAgfSA9IGF3YWl0IHRoaXMuX25vdGUobm9kZSwgcmVjaXBpZW50KTtcclxuICAgICAgICAgIGNvbnN0IG5vZCA9IHtcclxuICAgICAgICAgICAgaWQ6IHIgPT09IDAgPyBub2RlLmlkIDogbm9kZS5pZCArIHIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2hhcGU6IHRoaXMuX2NvbmZpZ3VyYXRpb25bbm9kZS50eXBlXS5zaGFwZSxcclxuICAgICAgICAgICAgekluZGV4OiB6SW5kZXgrKyxcclxuICAgICAgICAgICAgdG9vbHRpcDoge1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuX3Rvb2x0aXAodG9vbHRpcCksXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdUb3BDZW50ZXInXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzOiBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Ub29sdGlwLFxyXG4gICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgICByZWNpcGllbnQsXHJcbiAgICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWwsXHJcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbe1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogNCB9LFxyXG4gICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAnVG9wJyxcclxuICAgICAgICAgICAgICBvZmZzZXQ6IHtcclxuICAgICAgICAgICAgICAgIHk6IDEsXHJcbiAgICAgICAgICAgICAgICB4OiAuNVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgaWYgKHIgPiAwKVxyXG4gICAgICAgICAgICBkY29ubmVjdG9ycy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChjLnRhcmdldElkID09PSBub2RlLmlkKVxyXG4gICAgICAgICAgICAgICAgY29ubmVjdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IGMuc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgICAgIHRhcmdldElEOiBub2QuaWQsXHJcbiAgICAgICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZTogYy5lc3RpbWF0ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAoYy5zb3VyY2VJZCA9PT0gbm9kZS5pZCkgeyAgIFxyXG4gICAgICAgICAgICAgICAgLy8gXHJcbiAgICAgICAgICAgICAgICBpZiAoYy52aXJ0dWFsaXppbmcgJiYgIXRoaXMubW9kZWwucmVjaXBpZW50cy5zb21lKHIgPT4gci5ub2RlSWQgPT09IGMudGFyZ2V0SWQgJiYgci5vcmlnaW5JZCA9PT0gcmVjaXBpZW50LmlkKSlcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29ubmVjdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IG5vZC5pZCxcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0SUQ6IGMudGFyZ2V0SWQsXHJcbiAgICAgICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZTogYy5lc3RpbWF0ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgbm9kZXMucHVzaChub2QpO1xyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5hY3Rpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gcmVjaXBpZW50LmFjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChhY3Rpb24uc2hhcGUgJiYgIXJlY2lwaWVudC5wZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYWN0aW9uSW5kaWNhdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IG5vZC5pZCArICdhY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBhY3Rpb24uc2hhcGUsXHJcbiAgICAgICAgICAgICAgICAgIGFsaWduOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnWE1pbllNYXgnIDogJ1hNYXhZTWF4JyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICBmaWxsOiBhY3Rpb24uY29sb3IgfHwgdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoOTAwKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kLmlkXHJcbiAgICAgICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgICAgICB9IGFzIE5vZGVNb2RlbDtcclxuICAgICAgICAgICAgICBpbmRpY2F0b3JzLnB1c2goYWN0aW9uSW5kaWNhdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5wZW5kaW5nICYmICFyZWNpcGllbnQuZXN0aW1hdGUpXHJcbiAgICAgICAgICAgIGluZGljYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG5vZC5pZCArICdwZW5kaW5nJyxcclxuICAgICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogUEVORElOR19QQVRILFxyXG4gICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWF4WU1heCcgOiAnWE1pbllNYXgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgZmlsbDogdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoOTAwKVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVNb2RlbCk7XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmZ5aSlcclxuICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ2Z5aScsXHJcbiAgICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IEZZSV9QQVRILFxyXG4gICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgZmlsbDogJyMxOTc2ZDInXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kLmlkXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyAgaWYgKHRoaXMubW9kZWwubG9nLmZpbHRlcihsID0+IGwudGltZSA+IHRoaXMuX3N1Ym1pdHRlZCAmJiBsLnR5cGUgPT09ICdFc2NhbGF0aW9uJyAmJiBsLnJlY2lwaWVudElkID09PSByZWNpcGllbnQuaWQpLmxlbmd0aCkge1xyXG4gICAgICAgICAgLy8gICAgY29uc3QgZXNjYWxhdGVJbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAvLyAgICAgIGlkOiBub2QuaWQgKyAnZXNjYWxhdGUnLFxyXG4gICAgICAgICAgLy8gICAgICBzaGFwZToge1xyXG4gICAgICAgICAgLy8gICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgIC8vICAgICAgICBkYXRhOiBFU0NBTEFURURfUEFUSCxcclxuICAgICAgICAgIC8vICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgIC8vICAgICAgfSxcclxuICAgICAgICAgIC8vICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgIC8vICAgICAgICBmaWxsOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCg5MDApXHJcbiAgICAgICAgICAvLyAgICAgIH0sXHJcbiAgICAgICAgICAvLyAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgIC8vICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAvLyAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgLy8gICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIC8vICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgLy8gICAgaW5kaWNhdG9ycy5wdXNoKGVzY2FsYXRlSW5kaWNhdG9yKTtcclxuICAgICAgICAgIC8vICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHsgc3RhdGUsIGFubm90YXRpb24sIHRvb2x0aXAgfSA9IGF3YWl0IHRoaXMuX3NoYXBlKG5vZGUpO1xyXG4gICAgICAgIGNvbnN0IHsgc2hhcGUgfSA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgbm9kZXMucHVzaCh7XHJcbiAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgIHNoYXBlLFxyXG4gICAgICAgICAgekluZGV4OiB6SW5kZXgrKyxcclxuICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgY29udGVudDogdGhpcy5fdG9vbHRpcCh0b29sdGlwKSxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdUb3BDZW50ZXInXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29uc3RyYWludHM6IE9iamVjdC5rZXlzKHRvb2x0aXApLmxlbmd0aCA/IE5vZGVDb25zdHJhaW50cy5EZWZhdWx0IHwgTm9kZUNvbnN0cmFpbnRzLlRvb2x0aXAgOiBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCxcclxuICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsLFxyXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IFt7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgIG9mZnNldDogc2hhcGUudHlwZSA9PT0gJ1BhdGgnID8ge1xyXG4gICAgICAgICAgICAgIHk6IDFcclxuICAgICAgICAgICAgfSA6IHsgeDogLjUgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAvL2JvbGQ6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IHNoYXBlLnR5cGUgPT09ICdQYXRoJyA/ICdUb3AnIDogJ0NlbnRlcidcclxuICAgICAgICAgIH1dXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLnNoYXBlICYmICFub2RlLmVzdGltYXRlKVxyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnc3RhdGUnLFxyXG4gICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICBkYXRhOiBzdGF0ZS5zaGFwZSxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNYXhZTWF4JyA6ICdYTWluWU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBzdGF0ZS5jb2xvciB8fCAnYmxhY2snXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgbm9kZTogbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChub2RlLmVycm9yKSB7XHJcbiAgICAgICAgICBjb25zdCB3YXJubmluZ0luZGljYXRvciA9IHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnZXhjZXB0aW9uJyxcclxuICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgZGF0YTogV0FSTk5JTkdfUEFUSCxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBnZXRXYXJuKDgwMClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5pZFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHdhcm5uaW5nSW5kaWNhdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gY29ubmVjdG9yXHJcbiAgICAgKiBAcGFyYW0gaW5kZXhcclxuICAgICAqIEBwYXJhbSB2Y29ubmVjdG9yc1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiByZXJvdXRlKGNvbm5lY3RvcjogQ29ubmVjdG9ySW5mbywgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICB3aGlsZSAoaW5kZXggPCBkY29ubmVjdG9ycy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgZGNvbm5lY3RvciA9IGRjb25uZWN0b3JzW2luZGV4XTtcclxuICAgICAgICBpZiAoZGNvbm5lY3Rvci5zb3VyY2VJZCA9PT0gY29ubmVjdG9yLnRhcmdldElkKSB7XHJcbiAgICAgICAgICBpZiAobm9kZXMuc29tZShuID0+IG4uaWQgPT09IGRjb25uZWN0b3IudGFyZ2V0SWQpKVxyXG4gICAgICAgICAgICBjb25uZWN0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgIHNvdXJjZUlEOiBjb25uZWN0b3Iuc291cmNlSWQsXHJcbiAgICAgICAgICAgICAgdGFyZ2V0SUQ6IGRjb25uZWN0b3IudGFyZ2V0SWQsXHJcbiAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgZXN0aW1hdGU6IGRjb25uZWN0b3IuZXN0aW1hdGUsXHJcbiAgICAgICAgICAgICAgICB0aW1lOiBkY29ubmVjdG9yLnRpbWVcclxuICAgICAgICAgICAgICB9IGFzIENvbm5lY3RvckluZm9Nb2RlbFxyXG4gICAgICAgICAgICB9IGFzIENvbm5lY3Rvck1vZGVsKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmVyb3V0ZSh7XHJcbiAgICAgICAgICAgICAgdGltZTogZGNvbm5lY3Rvci50aW1lLFxyXG4gICAgICAgICAgICAgIHRhcmdldElkOiBkY29ubmVjdG9yLnRhcmdldElkLFxyXG4gICAgICAgICAgICAgIGVzdGltYXRlOiBkY29ubmVjdG9yLmVzdGltYXRlLFxyXG4gICAgICAgICAgICAgIHNvdXJjZUlkOiBjb25uZWN0b3Iuc291cmNlSWRcclxuICAgICAgICAgICAgfSwgaW5kZXggKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5kZXgrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgY29ubmVjdG9ycywgbm9kZXMsIGluZGljYXRvcnMgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5vZGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9zaGFwZShub2RlOiBOb2RlSW5mbyk6IFByb21pc2U8eyBzdGF0ZTogU3RhdGU7IGFubm90YXRpb246IHN0cmluZzsgdG9vbHRpcDogTm9kZVRvb2x0aXBNb2RlbDsgfT4ge1xyXG4gICAgY29uc3QgdG9vbHRpcCA9IHt9IGFzIE5vZGVUb29sdGlwTW9kZWw7XHJcbiAgICBpZiAobm9kZS5lcnJvcikgdG9vbHRpcC5lcnJvciA9IG5vZGUuZXJyb3I7XHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nLCBzdGF0ZTogU3RhdGU7XHJcbiAgICBjb25zdCBsb2cgPSB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLm5vZGVJZCA9PT0gbm9kZS5pZCAmJiBsLnRpbWUgPj0gdGhpcy5faXNzdWVkKTtcclxuICAgIGNvbnN0IHN0YXRlTG9nID0gbG9nLmZpbmQobCA9PiBsLnR5cGUgPT09ICdTdGF0ZUNoYW5nZScpO1xyXG4gICAgaWYgKHN0YXRlTG9nKSB7XHJcbiAgICAgIHN0YXRlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnN0YXRlcy5maW5kKHMgPT4gcy5uYW1lID09PSBzdGF0ZUxvZy5zdGF0ZSk7XHJcblxyXG4gICAgICBhbm5vdGF0aW9uID0gKG5vZGUuZXN0aW1hdGUgPyBzdGF0ZS5mdXR1cmUgOiBzdGF0ZS5wYXN0KSB8fCBzdGF0ZS50aXRsZTtcclxuICAgIH1cclxuICAgIGlmIChub2RlLnR5cGUgPT09IFNUQVJUX05PREUpIHtcclxuICAgICAgaWYgKCFub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgY29uc3QgeyBub3RlLCByb2xlIH0gPSBhd2FpdCB0aGlzLl9zdGFydE5vZGUoKTtcclxuICAgICAgICB0b29sdGlwLm5vdGUgPSBub3RlLFxyXG4gICAgICAgICAgdG9vbHRpcC5yb2xlID0gcm9sZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS5lc3RpbWF0ZSlcclxuICAgICAgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpO1xyXG4gICAgcmV0dXJuIHsgc3RhdGUsIHRvb2x0aXAsIGFubm90YXRpb24gfTtcclxuICB9XHJcbiAgcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhZ3JhbSkgdGhpcy5kaWFncmFtLndpZHRoID0gJ2F1dG8nO1xyXG4gIH1cclxuICBwcml2YXRlIF90aW1lRXN0aW1hdGUobm9kZTogTm9kZUluZm8pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gc3VwZXIuX2VzdGltYXRlVGltZShub2RlKTtcclxuICAgIGlmIChtYXgpXHJcbiAgICAgIHJldHVybiAhbWluIHx8IG1pbiA9PT0gbWF4ID9cclxuICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCBkYXlqcy5kdXJhdGlvbihtYXgpLmh1bWFuaXplKCkpIDpcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWVSYW5nZScsIGRheWpzLmR1cmF0aW9uKG1pbikuaHVtYW5pemUoKSwgZGF5anMuZHVyYXRpb24obWF4KS5odW1hbml6ZSgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG9vbHRpcChvYmo6IE5vZGVUb29sdGlwTW9kZWwpIHtcclxuICAgIGNvbnN0IHsgbm90ZSwgcm9sZSwgc3Vic3RpdHV0aW5nLCBlc2NhbGF0aW9uLCBkdXJhdGlvbiwgc3RhbmRhcmRUaW1lLCBlc3RpbWF0ZWRUaW1lLCBlcnJvciwgZnlpIH0gPSBvYmpcclxuICAgIGNvbnN0IHJvd3MgPSBbZXJyb3IsIG5vdGUsIHJvbGUsIHN1YnN0aXR1dGluZywgZXNjYWxhdGlvbiwgZnlpLCBkdXJhdGlvbiwgc3RhbmRhcmRUaW1lLCBlc3RpbWF0ZWRUaW1lXTtcclxuICAgIGxldCBkaXY6IEhUTUxEaXZFbGVtZW50O1xyXG4gICAgcm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBpZiAoIXIpIHJldHVybjtcclxuICAgICAgaWYgKCFkaXYpIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLmlubmVyVGV4dCA9IHI7XHJcbiAgICAgIGRpdi5hcHBlbmQoc3Bhbik7XHJcbiAgICAgIGNvbnN0IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKTtcclxuICAgICAgZGl2LmFwcGVuZChicik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkaXY7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXJ0Tm9kZSgpOiBQcm9taXNlPHtcclxuICAgIG5vdGU6IHN0cmluZywgcm9sZTogc3RyaW5nO1xyXG4gIH0+IHtcclxuICAgIGxldCB3aG86IFVzZXJJbmZvIHwgJ3lvdScsIGJ5OiBVc2VySW5mbyB8ICd5b3UnO1xyXG4gICAgaWYgKHRoaXMubW9kZWwub3duZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZCAmJiAhdGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpXHJcbiAgICAgIHdobyA9IFlvdTtcclxuICAgIGVsc2VcclxuICAgICAgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHRoaXMubW9kZWwub3duZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICBpZiAodGhpcy5tb2RlbC5vd25lckJ5SWQpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZWwub3duZXJCeUlkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZClcclxuICAgICAgICBieSA9IFlvdTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGJ5ID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHRoaXMubW9kZWwub3duZXJCeUlkKS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuICAgIGxldCBub3RlOiBzdHJpbmcsIHJvbGU6IHN0cmluZztcclxuICAgIGlmIChieSkge1xyXG4gICAgICBpZiAoYnkgPT09IFlvdSlcclxuICAgICAgICBub3RlID1cclxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N1Ym1pdHRlZE5vdGVCeVlvdScsXHJcbiAgICAgICAgICAgIHdobyA9PT0gWW91ID8gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91JykgOiAod2hvIGFzIFVzZXJJbmZvKS5uYW1lLFxyXG4gICAgICAgICAgICB0aGlzLl9mcm9tTm93KHRoaXMubW9kZWwuaXNzdWVkKSk7XHJcblxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgbm90ZSA9XHJcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTdWJtaXR0ZWROb3RlQnknLFxyXG4gICAgICAgICAgICB3aG8gPT09IFlvdSA/IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdScpIDogKHdobyBhcyBVc2VySW5mbykubmFtZSxcclxuICAgICAgICAgICAgKGJ5IGFzIFVzZXJJbmZvKS5uYW1lLFxyXG4gICAgICAgICAgICB0aGlzLl9mcm9tTm93KHRoaXMubW9kZWwuaXNzdWVkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAod2hvID09PSBZb3UpXHJcbiAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VTdWJtaXR0ZWROb3RlJywgdGhpcy5fZnJvbU5vdyh0aGlzLm1vZGVsLmlzc3VlZCkpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgbm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N1Ym1pdHRlZE5vdGUnLCAod2hvIGFzIFVzZXJJbmZvKS5uYW1lLCB0aGlzLl9mcm9tTm93KHRoaXMubW9kZWwuaXNzdWVkKSk7XHJcbiAgICBpZiAod2hvICE9PSBZb3UgJiYgd2hvLnJvbGUpXHJcbiAgICAgIHJvbGUgPSBgLSAke3doby5yb2xlfWA7XHJcbiAgICByZXR1cm4geyBub3RlLCByb2xlIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9ub3RlKG5vZGU6IE5vZGVJbmZvLCByZWNpcGllbnQ6IFJlY2lwaWVudCk6IFByb21pc2U8eyBhbm5vdGF0aW9uOiBzdHJpbmc7IHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWwgfT4ge1xyXG4gICAgY29uc3QgdG9vbHRpcDogTm9kZVRvb2x0aXBNb2RlbCA9IHt9O1xyXG5cclxuICAgIGxldCBhbm5vdGF0aW9uOiBzdHJpbmc7XHJcblxyXG4gICAgLy8geW91XHJcbiAgICBpZiAoKHJlY2lwaWVudC5ieUlkIHx8IHJlY2lwaWVudC51c2VySWQpID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZCkge1xyXG4gICAgICBhbm5vdGF0aW9uID0gdGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcgPyB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSA6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdScpO1xyXG4gICAgICBpZiAocmVjaXBpZW50LnJlcGxpZWQpIHtcclxuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVwbGllZCk7XHJcbiAgICAgICAgaWYgKHJlY2lwaWVudC5ieUlkKSB7XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmJ5SWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5ieUlkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB0aGlzLl9zZXNzaW9uLmdlbmRlcik7XHJcbiAgICAgICAgICAgIGlmIChyZWNpcGllbnQudG9JZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC50b0lkKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91VG8nLCBhY3Rpb24sIHRvLm5hbWUsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5CeVlvdScsIGFjdGlvbiwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ5ID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC5ieUlkKS50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgYnkuZ2VuZGVyKTtcclxuICAgICAgICAgICAgaWYgKHJlY2lwaWVudC50b0lkKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnRvSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uQnlUbycsIGJ5Lm5hbWUsIGFjdGlvbiwgdG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uQnknLCBieS5uYW1lLCBhY3Rpb24sIHRpbWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZWNpcGllbnQudG9JZCkge1xyXG4gICAgICAgICAgY29uc3QgdG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnRvSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5nZW5kZXIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKVxyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlblRvJywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIGFjdGlvbiwgdG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uVG8nLCBhY3Rpb24sIHRvLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZykge1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5nZW5kZXIpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW4nLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSwgYWN0aW9uLCB0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgWW91KTtcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uJywgYWN0aW9uLCB0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoIW5vZGUuZXN0aW1hdGUpIHtcclxuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVjZWl2ZWQpO1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZylcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnUmVjZWl2ZWRCeScsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5nZW5kZXIsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCB0aW1lKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VSZWNlaXZlZCcsIHRpbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWNpcGllbnQucm9sZSkge1xyXG4gICAgICAgIGNvbnN0IGNyb2xlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnJvbGVzLmZpbmQobyA9PiBvLm5hbWUgPT09IHJlY2lwaWVudC5yb2xlKTtcclxuICAgICAgICBpZiAoY3JvbGUpIHRvb2x0aXAucm9sZSA9IGAtICR7Y3JvbGUudGl0bGV9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgLy8gc29tZW9uZSBlbHNlXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgYW5ub3RhdGlvbiA9IHdoby5uYW1lO1xyXG4gICAgICBpZiAod2hvLnJvbGUpIHRvb2x0aXAucm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnJvbGUpIHtcclxuICAgICAgICBjb25zdCBjcm9sZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5yb2xlcy5maW5kKG8gPT4gby5uYW1lID09PSByZWNpcGllbnQucm9sZSk7XHJcbiAgICAgICAgaWYgKGNyb2xlKSB0b29sdGlwLnJvbGUgPSBgLSAke2Nyb2xlLnRpdGxlfWA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlY2lwaWVudC5yZXBsaWVkKSB7XHJcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlcGxpZWQpO1xyXG4gICAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgICAgY29uc3QgYnkgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LmJ5SWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIGJ5LmdlbmRlcik7XHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LnRvSWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnRvSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5VG8nLCBieS5uYW1lLCBhY3Rpb24sIHRvLm5hbWUsIHdoby5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5CeScsIGJ5Lm5hbWUsIGFjdGlvbiwgd2hvLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZWNpcGllbnQudG9JZCkge1xyXG4gICAgICAgICAgY29uc3QgdG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnRvSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHdoby5nZW5kZXIpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5UbycsIHdoby5uYW1lLCBhY3Rpb24sIHRvLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB3aG8uZ2VuZGVyKTtcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuJywgd2hvLm5hbWUsIGFjdGlvbiwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCFyZWNpcGllbnQuZXN0aW1hdGUpIHtcclxuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVjZWl2ZWQpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnUmVjZWl2ZWRUaW1lJywgd2hvLmdlbmRlciwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0aW5nSWQpIHtcclxuICAgICAgaWYgKHJlY2lwaWVudC5zdWJzdGl0dXRpbmdJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1YnN0aXR1dGluZ1lvdScsIHRoaXMuX3Nlc3Npb24uZ2VuZGVyKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW5nID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC5zdWJzdGl0dXRpbmdJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1YnN0aXR1dGluZ0ZvcicsIHN1YnN0aXR1dGluZy5nZW5kZXIsIHN1YnN0aXR1dGluZy5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZXNjYWxhdGlvbnMgPSB0aGlzLm1vZGVsLmxvZy5maWx0ZXIobCA9PiBsLnRpbWUgPiB0aGlzLl9pc3N1ZWQgJiYgbC50eXBlID09PSAnRXNjYWxhdGlvbicgJiYgbC5yZWNpcGllbnRJZCA9PT0gcmVjaXBpZW50LmlkKTtcclxuICAgIGlmIChlc2NhbGF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdXNlcklkcyA9IGVzY2FsYXRpb25zLm1hcChlID0+IGUudXNlcklkKTtcclxuICAgICAgY29uc3QgdXNlcnMgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXRBbGwodXNlcklkcykudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRheWpzKGVzY2FsYXRpb25zW2VzY2FsYXRpb25zLmxlbmd0aCAtIDFdLnRpbWUpLmRpZmYocmVjaXBpZW50LnJlY2VpdmVkLCAncycpKTtcclxuICAgICAgdG9vbHRpcC5lc2NhbGF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRXNjYWxhdGVkVG8nLCB0aGlzLl90cmFuc2xhdGUuam9pbih1c2Vycy5tYXAodSA9PiB1Lm5hbWUpKSwgZHVyYXRpb24pO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlY2lwaWVudC5yZXBsaWVkKSB7XHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gZGF5anMocmVjaXBpZW50LnJlcGxpZWQpLmRpZmYocmVjaXBpZW50LnJlY2VpdmVkLCAncycpO1xyXG4gICAgICB0b29sdGlwLmR1cmF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRHVyYXRpb25UaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGR1cmF0aW9uKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChyZWNpcGllbnQucGVuZGluZykge1xyXG4gICAgICBpZiAocmVjaXBpZW50LmVzdGltYXRlKSB0b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSk7XHJcbiAgICAgIGVsc2UgaWYgKG5vZGUuc3RhbmRhcmRUaW1lKSB7XHJcbiAgICAgICAgY29uc3QgZGlmZiA9IG5vZGUuc3RhbmRhcmRUaW1lIC0gZGF5anMoKS5kaWZmKG5vZGUudGltZSwgJ3MnKTtcclxuICAgICAgICBpZiAoZGlmZiA+IDApXHJcbiAgICAgICAgICB0b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZGlmZikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChub2RlLnN0YW5kYXJkVGltZSlcclxuICAgICAgdG9vbHRpcC5zdGFuZGFyZFRpbWUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdOb2RlU3RhbmRhcmRUaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKG5vZGUuc3RhbmRhcmRUaW1lKSk7XHJcbiAgICBpZiAocmVjaXBpZW50LmZ5aSlcclxuICAgICAgdG9vbHRpcC5meWkgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdGWUknKTtcclxuICAgIHJldHVybiB7IGFubm90YXRpb24sIHRvb2x0aXAgfTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWN0aW9uKG5hbWU6IHN0cmluZywgZ2VuZGVyPzogR2VuZGVyIHwgJ3lvdScpIHtcclxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbmQoYSA9PiBhLm5hbWUgPT09IG5hbWUpO1xyXG4gICAgaWYgKCFhY3Rpb24pIHJldHVybiBuYW1lO1xyXG4gICAgaWYgKGdlbmRlciA9PT0gWW91KSB7XHJcbiAgICAgIGNvbnN0IGdlbmRlciA9IHRoaXMuX3Nlc3Npb24uZ2VuZGVyLCBwZXJzb25hbCA9XHJcbiAgICAgICAgKGdlbmRlciA9PT0gJ01hbGUnID8gKGFjdGlvbi55b3VNYWxlIHx8IGFjdGlvbi55b3UpIDpcclxuICAgICAgICAgIGdlbmRlciA9PT0gJ0ZlbWFsZScgPyAoYWN0aW9uLnlvdUZlbWFsZSB8fCBhY3Rpb24ueW91KSA6XHJcbiAgICAgICAgICAgIGFjdGlvbi55b3UpO1xyXG4gICAgICByZXR1cm4gKHBlcnNvbmFsIHx8XHJcbiAgICAgICAgYWN0aW9uLnBhc3QgfHxcclxuICAgICAgICBhY3Rpb24udGl0bGUpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXN0ID0gKChnZW5kZXIgPT09ICdNYWxlJyA/IChhY3Rpb24ucGFzdE1hbGUgfHwgYWN0aW9uLnBhc3QpIDpcclxuICAgICAgZ2VuZGVyID09PSAnRmVtYWxlJyA/IChhY3Rpb24ucGFzdEZlbWFsZSB8fCBhY3Rpb24ucGFzdCkgOiBhY3Rpb24ucGFzdCkgfHxcclxuICAgICAgYWN0aW9uLnRpdGxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHBhc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mcm9tTm93KGRhdGU6IERhdGUpIHtcclxuICAgIHJldHVybiBkYXlqcyhkYXRlKS5mcm9tTm93KCk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgIHRoaXMuZGlhZ3JhbSAmJiB0aGlzLmRpYWdyYW0uZGVzdHJveSgpO1xyXG4gIH1cclxufVxyXG5pbnRlcmZhY2UgQ29ubmVjdG9ySW5mb01vZGVsIHtcclxuICBlc3RpbWF0ZT86IGJvb2xlYW47XHJcbiAgcGFyZW50SWQ6IHN0cmluZztcclxuICB0aW1lOiBEYXRlXHJcbn1cclxuaW50ZXJmYWNlIE5vZGVJbmZvTW9kZWwge1xyXG4gIHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWw7XHJcbiAgbm9kZTogTm9kZUluZm87XHJcbiAgcmVjaXBpZW50OiBSZWNpcGllbnRcclxuICBpbmRpY2F0b3I/OiBib29sZWFuO1xyXG4gIHBhcmVudElkPzogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBOb2RlVG9vbHRpcE1vZGVsIHtcclxuICBmeWk/OiBzdHJpbmc7XHJcbiAgZXJyb3I/OiBzdHJpbmc7XHJcbiAgbm90ZT86IHN0cmluZztcclxuICByb2xlPzogc3RyaW5nO1xyXG4gIHN1YnN0aXR1dGluZz86IHN0cmluZztcclxuICBlc2NhbGF0aW9uPzogc3RyaW5nO1xyXG4gIHN0YW5kYXJkVGltZT86IHN0cmluZztcclxuICBkdXJhdGlvbj86IHN0cmluZztcclxuICBlc3RpbWF0ZWRUaW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|