verben-workflow-ui 0.2.2 → 0.2.3
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/esm2022/lib/components/workflow-designer/designer-canvas/designer-canvas.component.mjs +3 -3
- package/esm2022/lib/components/workflow-designer/stage-node/stage-node.component.mjs +9 -9
- package/esm2022/lib/components/workflow-designer/swimlane-dialog/swimlane-dialog.component.mjs +5 -1
- package/esm2022/lib/components/workflow-designer/workflow-designer.component.mjs +30 -4
- package/esm2022/lib/components/workflow-designer/workflow-designer.state.mjs +67 -142
- package/esm2022/lib/models/Workflow.mjs +1 -1
- package/esm2022/lib/services/http-web-request.service.mjs +2 -2
- package/fesm2022/verben-workflow-ui.mjs +109 -154
- package/fesm2022/verben-workflow-ui.mjs.map +1 -1
- package/lib/components/workflow-designer/stage-node/stage-node.component.d.ts +2 -2
- package/lib/components/workflow-designer/workflow-designer.component.d.ts +2 -1
- package/lib/components/workflow-designer/workflow-designer.state.d.ts +8 -0
- package/lib/models/Workflow.d.ts +1 -0
- package/package.json +1 -1
|
@@ -11,6 +11,10 @@ export class WorkflowDesignerState {
|
|
|
11
11
|
draggingConnectionData = {};
|
|
12
12
|
workflowFormId = null;
|
|
13
13
|
workflowFormName = null;
|
|
14
|
+
workflowId = null;
|
|
15
|
+
setWorkflowId(id) {
|
|
16
|
+
this.workflowId = id;
|
|
17
|
+
}
|
|
14
18
|
connectionRules = {
|
|
15
19
|
stage: ['stage', 'decision', 'subflow', 'form'],
|
|
16
20
|
decision: ['stage'], // Decisions can only connect to Stages
|
|
@@ -189,7 +193,7 @@ export class WorkflowDesignerState {
|
|
|
189
193
|
type,
|
|
190
194
|
x,
|
|
191
195
|
y: adjustedY,
|
|
192
|
-
width: type === 'subflow' ?
|
|
196
|
+
width: type === 'subflow' ? 150 : 169, // Width from SVG
|
|
193
197
|
height: 100, // Height from SVG
|
|
194
198
|
isStartNode: false, // Default to false
|
|
195
199
|
stageData: stageData || {}, // Store stage data
|
|
@@ -335,119 +339,6 @@ export class WorkflowDesignerState {
|
|
|
335
339
|
const sourceNodeType = sourceNodeInfo.node.type;
|
|
336
340
|
return this.connectionRules[sourceNodeType] || [];
|
|
337
341
|
}
|
|
338
|
-
// transformToWorkflowModel(): Workflow {
|
|
339
|
-
// // Create base workflow object
|
|
340
|
-
// const workflow: Workflow = {
|
|
341
|
-
// Name: 'New Workflow', // Default name or get it from somewhere
|
|
342
|
-
// Description: '', // Default description
|
|
343
|
-
// StageEntryRule: '',
|
|
344
|
-
// AssignmentType: TaskAssignmentType.AutoRoute, // Default assignment type
|
|
345
|
-
// Status: Status.Active, // Default status
|
|
346
|
-
// Actions: [],
|
|
347
|
-
// Lanes: [],
|
|
348
|
-
// Stages: [],
|
|
349
|
-
// };
|
|
350
|
-
// // Transform swimlanes to SwimLane[]
|
|
351
|
-
// workflow.Lanes = this.swimlanes.map((swimlane, index) => {
|
|
352
|
-
// return {
|
|
353
|
-
// Id: `lane-${index}`,
|
|
354
|
-
// Workflow: workflow.Id,
|
|
355
|
-
// Tags: swimlane.tags,
|
|
356
|
-
// Position: swimlane.order,
|
|
357
|
-
// Coordinates: { X: 0, Y: swimlane.order * 263 }, // Calculate Y position based on order
|
|
358
|
-
// Size: { Width: 3000, Height: 263 }, // Default size
|
|
359
|
-
// // Add other required properties from BaseModel
|
|
360
|
-
// Code: '',
|
|
361
|
-
// TenantId: '',
|
|
362
|
-
// id: `lane-${index}`,
|
|
363
|
-
// ServiceName: '',
|
|
364
|
-
// CreatedAt: new Date(),
|
|
365
|
-
// UpdatedAt: new Date(),
|
|
366
|
-
// DataState: ObjectState.New,
|
|
367
|
-
// };
|
|
368
|
-
// });
|
|
369
|
-
// // Transform nodes to WorkflowStage[]
|
|
370
|
-
// const stages: WorkflowStage[] = [];
|
|
371
|
-
// this.swimlanes.forEach((swimlane, swimlaneIndex) => {
|
|
372
|
-
// swimlane.nodes?.forEach((node) => {
|
|
373
|
-
// if (node.type === 'stage') {
|
|
374
|
-
// // Create a stage from the node
|
|
375
|
-
// const stage: WorkflowStage = {
|
|
376
|
-
// Id: node.id,
|
|
377
|
-
// Workflow: workflow.Id,
|
|
378
|
-
// Name: node.stageData?.Name || 'Unnamed Stage',
|
|
379
|
-
// Description: node.stageData?.Description || '',
|
|
380
|
-
// Duration: node.stageData?.Duration || 0,
|
|
381
|
-
// PassOnRule: node.stageData?.PassOnRule || '',
|
|
382
|
-
// ActorRule: node.stageData?.ActorRule || StageActorRule.None,
|
|
383
|
-
// MinNoOfActor: node.stageData?.MinNoOfActor || 0,
|
|
384
|
-
// IsParallel: false, // Default value, will be updated below
|
|
385
|
-
// IsEntryPoint: node.isStartNode,
|
|
386
|
-
// IsExitPoint: false, // Determine based on connections
|
|
387
|
-
// Tags: node.stageData?.Tags || [],
|
|
388
|
-
// Forms: node.stageData?.Forms || [],
|
|
389
|
-
// AllowMultiSubProcess: false,
|
|
390
|
-
// AssignmentType:
|
|
391
|
-
// node.stageData?.AssignmentType || TaskAssignmentType.AutoRoute,
|
|
392
|
-
// SubWorkFlow: node.stageData?.SubWorkFlow || '',
|
|
393
|
-
// SwimLane: workflow.Lanes[swimlaneIndex].Id,
|
|
394
|
-
// Coordinates: { X: node.x, Y: node.y },
|
|
395
|
-
// IsSubProcess: false,
|
|
396
|
-
// // Add other required properties from BaseModel
|
|
397
|
-
// Code: '',
|
|
398
|
-
// TenantId: '',
|
|
399
|
-
// id: node.id,
|
|
400
|
-
// ServiceName: '',
|
|
401
|
-
// CreatedAt: new Date(),
|
|
402
|
-
// UpdatedAt: new Date(),
|
|
403
|
-
// DataState: ObjectState.New,
|
|
404
|
-
// };
|
|
405
|
-
// stages.push(stage);
|
|
406
|
-
// }
|
|
407
|
-
// });
|
|
408
|
-
// });
|
|
409
|
-
// // Now process the connections to set IsParallel on target stages
|
|
410
|
-
// this.connections.forEach((conn) => {
|
|
411
|
-
// const sourceNodeInfo = this.findNodeById(conn.sourceNodeId);
|
|
412
|
-
// if (
|
|
413
|
-
// sourceNodeInfo &&
|
|
414
|
-
// sourceNodeInfo.node.type === 'stage' &&
|
|
415
|
-
// sourceNodeInfo.node.stageData?.hasParallel === true
|
|
416
|
-
// ) {
|
|
417
|
-
// // Find the target stage in our stages array
|
|
418
|
-
// const targetStage = stages.find((s) => s.Id === conn.targetNodeId);
|
|
419
|
-
// if (targetStage) {
|
|
420
|
-
// // Set IsParallel to true for this target stage
|
|
421
|
-
// targetStage.IsParallel = true;
|
|
422
|
-
// }
|
|
423
|
-
// }
|
|
424
|
-
// });
|
|
425
|
-
// // Transform connections to WorkflowAction[]
|
|
426
|
-
// workflow.Actions = this.connections.map((conn) => {
|
|
427
|
-
// const sourceNode = this.findNodeById(conn.sourceNodeId)?.node;
|
|
428
|
-
// const targetNode = this.findNodeById(conn.targetNodeId)?.node;
|
|
429
|
-
// return {
|
|
430
|
-
// Id: conn.id,
|
|
431
|
-
// Workflow: workflow.Id,
|
|
432
|
-
// Name: `Action from ${sourceNode?.stageData?.Name || 'Unknown'} to ${
|
|
433
|
-
// targetNode?.stageData?.Name || 'Unknown'
|
|
434
|
-
// }`,
|
|
435
|
-
// FromStage: conn.sourceNodeId,
|
|
436
|
-
// ToStage: conn.targetNodeId,
|
|
437
|
-
// IsParallel: targetNode?.stageData?.IsParallel || false,
|
|
438
|
-
// // Add other required properties from BaseModel
|
|
439
|
-
// Code: '',
|
|
440
|
-
// TenantId: '',
|
|
441
|
-
// id: conn.id,
|
|
442
|
-
// ServiceName: '',
|
|
443
|
-
// CreatedAt: new Date(),
|
|
444
|
-
// UpdatedAt: new Date(),
|
|
445
|
-
// DataState: ObjectState.New,
|
|
446
|
-
// };
|
|
447
|
-
// });
|
|
448
|
-
// workflow.Stages = stages;
|
|
449
|
-
// return workflow;
|
|
450
|
-
// }
|
|
451
342
|
updateSwimlane(index, name, tags) {
|
|
452
343
|
console.log('State: Updating swimlane at index', index, 'with name', name, 'and tags', tags);
|
|
453
344
|
if (index >= 0 && index < this.swimlanes.length) {
|
|
@@ -465,40 +356,54 @@ export class WorkflowDesignerState {
|
|
|
465
356
|
transformToWorkflowModel() {
|
|
466
357
|
// Create base workflow object
|
|
467
358
|
const workflow = {
|
|
468
|
-
|
|
469
|
-
|
|
359
|
+
// BaseModel properties
|
|
360
|
+
Id: this.wasLoadedFromApi(this.workflowId || '')
|
|
361
|
+
? this.workflowId || ''
|
|
362
|
+
: '',
|
|
363
|
+
Code: this.getCodeForObject(this.workflowId || ''),
|
|
470
364
|
TenantId: '',
|
|
471
|
-
id: ''
|
|
365
|
+
id: this.wasLoadedFromApi(this.workflowId || '')
|
|
366
|
+
? this.workflowId || ''
|
|
367
|
+
: '',
|
|
472
368
|
ServiceName: '',
|
|
473
369
|
CreatedAt: new Date(),
|
|
474
370
|
UpdatedAt: new Date(),
|
|
475
|
-
DataState:
|
|
476
|
-
|
|
371
|
+
DataState: this.wasLoadedFromApi(this.workflowId || '')
|
|
372
|
+
? ObjectState.Changed
|
|
373
|
+
: ObjectState.New,
|
|
374
|
+
// Workflow specific properties
|
|
375
|
+
Name: 'New Workflow', // Default name
|
|
477
376
|
Description: '', // Default description
|
|
478
377
|
StageEntryRule: '',
|
|
479
378
|
Form: this.workflowFormId || undefined,
|
|
480
|
-
AssignmentType: TaskAssignmentType.AutoRoute,
|
|
481
|
-
|
|
379
|
+
AssignmentType: TaskAssignmentType.AutoRoute,
|
|
380
|
+
Operation: '',
|
|
381
|
+
Status: Status.Active,
|
|
482
382
|
Actions: [],
|
|
483
383
|
Lanes: [],
|
|
484
384
|
Stages: [],
|
|
485
385
|
};
|
|
486
386
|
// Transform swimlanes to SwimLane[]
|
|
487
387
|
workflow.Lanes = this.swimlanes.map((swimlane, index) => {
|
|
388
|
+
const laneId = `lane-${index}`;
|
|
488
389
|
return {
|
|
489
|
-
|
|
490
|
-
|
|
390
|
+
// BaseModel properties
|
|
391
|
+
Id: laneId,
|
|
392
|
+
Code: this.getCodeForObject(laneId),
|
|
491
393
|
TenantId: '',
|
|
492
|
-
id:
|
|
394
|
+
id: laneId,
|
|
493
395
|
ServiceName: '',
|
|
494
396
|
CreatedAt: new Date(),
|
|
495
397
|
UpdatedAt: new Date(),
|
|
496
|
-
DataState:
|
|
398
|
+
DataState: this.wasLoadedFromApi(laneId)
|
|
399
|
+
? ObjectState.Changed
|
|
400
|
+
: ObjectState.New,
|
|
401
|
+
// SwimLane specific properties
|
|
497
402
|
Workflow: workflow.Id,
|
|
498
403
|
Tags: swimlane.tags || [],
|
|
499
404
|
Position: swimlane.order,
|
|
500
|
-
Coordinates: { X: 0, Y: swimlane.order * 263 },
|
|
501
|
-
Size: { Width: 3000, Height: 263 },
|
|
405
|
+
Coordinates: { X: 0, Y: swimlane.order * 263 },
|
|
406
|
+
Size: { Width: 3000, Height: 263 },
|
|
502
407
|
};
|
|
503
408
|
});
|
|
504
409
|
// Transform nodes to WorkflowStage[]
|
|
@@ -508,14 +413,18 @@ export class WorkflowDesignerState {
|
|
|
508
413
|
if (node.type === 'stage') {
|
|
509
414
|
// Create a stage from the node
|
|
510
415
|
const stage = {
|
|
416
|
+
// BaseModel properties
|
|
511
417
|
Id: node.id,
|
|
512
|
-
Code:
|
|
418
|
+
Code: this.getCodeForObject(node.id),
|
|
513
419
|
TenantId: '',
|
|
514
420
|
id: node.id,
|
|
515
421
|
ServiceName: '',
|
|
516
422
|
CreatedAt: new Date(),
|
|
517
423
|
UpdatedAt: new Date(),
|
|
518
|
-
DataState:
|
|
424
|
+
DataState: this.wasLoadedFromApi(node.id)
|
|
425
|
+
? ObjectState.Changed
|
|
426
|
+
: ObjectState.New,
|
|
427
|
+
// WorkflowStage specific properties
|
|
519
428
|
Workflow: workflow.Id,
|
|
520
429
|
Name: node.stageData?.Name || 'Unnamed Stage',
|
|
521
430
|
Description: node.stageData?.Description || '',
|
|
@@ -525,7 +434,7 @@ export class WorkflowDesignerState {
|
|
|
525
434
|
MinNoOfActor: node.stageData?.MinNoOfActor || 0,
|
|
526
435
|
IsParallel: node.stageData?.IsParallel || false,
|
|
527
436
|
IsEntryPoint: node.isStartNode,
|
|
528
|
-
IsExitPoint: false, //
|
|
437
|
+
IsExitPoint: false, // Will be updated below
|
|
529
438
|
Tags: node.stageData?.Tags || [],
|
|
530
439
|
Forms: node.stageData?.formId ? [node.stageData.formId] : [],
|
|
531
440
|
AllowMultiSubProcess: false,
|
|
@@ -534,20 +443,17 @@ export class WorkflowDesignerState {
|
|
|
534
443
|
SwimLane: workflow.Lanes[swimlaneIndex].Id,
|
|
535
444
|
Coordinates: { X: node.x, Y: node.y },
|
|
536
445
|
IsSubProcess: false,
|
|
446
|
+
Key: node.stageData?.Key || undefined,
|
|
537
447
|
};
|
|
538
448
|
stages.push(stage);
|
|
539
449
|
}
|
|
540
450
|
});
|
|
541
451
|
});
|
|
542
|
-
//
|
|
543
|
-
|
|
544
|
-
const
|
|
545
|
-
if (
|
|
546
|
-
|
|
547
|
-
const hasOutgoingConnections = this.connections.some((c) => c.sourceNodeId === targetStage.Id);
|
|
548
|
-
if (!hasOutgoingConnections) {
|
|
549
|
-
targetStage.IsExitPoint = true;
|
|
550
|
-
}
|
|
452
|
+
// Determine which stages are exit points (no outgoing connections)
|
|
453
|
+
stages.forEach((stage) => {
|
|
454
|
+
const hasOutgoingConnections = this.connections.some((conn) => conn.sourceNodeId === stage.Id);
|
|
455
|
+
if (!hasOutgoingConnections) {
|
|
456
|
+
stage.IsExitPoint = true;
|
|
551
457
|
}
|
|
552
458
|
});
|
|
553
459
|
// Transform connections to WorkflowAction[]
|
|
@@ -555,24 +461,43 @@ export class WorkflowDesignerState {
|
|
|
555
461
|
const sourceNode = this.findNodeById(conn.sourceNodeId)?.node;
|
|
556
462
|
const targetNode = this.findNodeById(conn.targetNodeId)?.node;
|
|
557
463
|
return {
|
|
464
|
+
// BaseModel properties
|
|
558
465
|
Id: conn.id,
|
|
559
|
-
Code:
|
|
466
|
+
Code: this.getCodeForObject(conn.id),
|
|
560
467
|
TenantId: '',
|
|
561
468
|
id: conn.id,
|
|
562
469
|
ServiceName: '',
|
|
563
470
|
CreatedAt: new Date(),
|
|
564
471
|
UpdatedAt: new Date(),
|
|
565
|
-
DataState:
|
|
472
|
+
DataState: this.wasLoadedFromApi(conn.id)
|
|
473
|
+
? ObjectState.Changed
|
|
474
|
+
: ObjectState.New,
|
|
475
|
+
// WorkflowAction specific properties
|
|
566
476
|
Workflow: workflow.Id,
|
|
567
477
|
Name: `Action from ${sourceNode?.stageData?.Name || 'Unknown'} to ${targetNode?.stageData?.Name || 'Unknown'}`,
|
|
568
478
|
FromStage: conn.sourceNodeId,
|
|
569
479
|
ToStage: conn.targetNodeId,
|
|
570
480
|
IsParallel: sourceNode?.stageData?.hasParallel || false,
|
|
481
|
+
PassOnRule: '', // Optional property
|
|
571
482
|
};
|
|
572
483
|
});
|
|
573
484
|
workflow.Stages = stages;
|
|
574
485
|
return workflow;
|
|
575
486
|
}
|
|
487
|
+
// Add a new property to track loaded objects
|
|
488
|
+
loadedObjectIds = {}; // Format: { id: code }
|
|
489
|
+
// Add a method to register loaded objects
|
|
490
|
+
registerLoadedObject(id, code) {
|
|
491
|
+
this.loadedObjectIds[id] = code;
|
|
492
|
+
}
|
|
493
|
+
// Method to check if an object was loaded from API
|
|
494
|
+
wasLoadedFromApi(id) {
|
|
495
|
+
return id in this.loadedObjectIds;
|
|
496
|
+
}
|
|
497
|
+
// Method to get the code for a loaded object
|
|
498
|
+
getCodeForObject(id) {
|
|
499
|
+
return this.loadedObjectIds[id] || '';
|
|
500
|
+
}
|
|
576
501
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDesignerState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
577
502
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDesignerState, providedIn: 'root' });
|
|
578
503
|
}
|
|
@@ -582,4 +507,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
582
507
|
providedIn: 'root',
|
|
583
508
|
}]
|
|
584
509
|
}] });
|
|
585
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBSzdDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsU0FBUyxHQUFtQixFQUFFLENBQUM7SUFDL0IsV0FBVyxHQUFrQixJQUFJLENBQUMsQ0FBQyx1Q0FBdUM7SUFDMUUsV0FBVyxHQUFpQixFQUFFLENBQUM7SUFDL0Isc0JBQXNCLEdBT2xCLEVBQUUsQ0FBQztJQUNQLGNBQWMsR0FBa0IsSUFBSSxDQUFDO0lBQ3JDLGdCQUFnQixHQUFrQixJQUFJLENBQUM7SUFFdEIsZUFBZSxHQUE2QjtRQUMzRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUM7UUFDL0MsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsdUNBQXVDO1FBQzVELDJDQUEyQztRQUMzQyxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7S0FDL0IsQ0FBQztJQUVGLGVBQWUsQ0FBQyxNQUFxQixFQUFFLFFBQXVCO1FBQzVELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFD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RUFBRTtnQkFDckIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHO2dCQUMxQixRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksRUFBRSxlQUFlLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLFNBQVMsT0FDM0QsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksU0FDakMsRUFBRTtnQkFDRixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDMUIsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxJQUFJLEtBQUs7YUFDeEQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFekIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzt3R0Fwc0JVLHFCQUFxQjs0R0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uLFxuICBDb25uZWN0aW9uUG9pbnQsXG4gIE5vZGUsXG4gIFN3aW1sYW5lSXRlbSxcbiAgVG9vbFR5cGUsXG59IGZyb20gJy4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1RhZyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N0YWdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1dvcmtmbG93U3RhZ2UnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvb2JqZWN0LXN0YXRlJztcbmltcG9ydCB7IFN0YWdlQWN0b3JSdWxlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1N0YWdlQWN0b3JSdWxlJztcbmltcG9ydCB7IFRhc2tBc3NpZ25tZW50VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9UYXNrQXNzaWdubWVudFR5cGUnO1xuaW1wb3J0IHsgV29ya2Zsb3cgfSBmcm9tICcuLi8uLi9tb2RlbHMvV29ya2Zsb3cnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0YXR1cyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUge1xuICBzd2ltbGFuZXM6IFN3aW1sYW5lSXRlbVtdID0gW107XG4gIHN0YXJ0Tm9kZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgdGhlIElEIG9mIHRoZSBmaXJzdC9zdGFydCBub2RlXG4gIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9uW10gPSBbXTtcbiAgZHJhZ2dpbmdDb25uZWN0aW9uRGF0YToge1xuICAgIHNvdXJjZVBvaW50PzogQ29ubmVjdGlvblBvaW50O1xuICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg/OiBudW1iZXI7XG4gICAgc3RhcnRYPzogbnVtYmVyO1xuICAgIHN0YXJ0WT86IG51bWJlcjtcbiAgICBjdXJyZW50WD86IG51bWJlcjtcbiAgICBjdXJyZW50WT86IG51bWJlcjtcbiAgfSA9IHt9O1xuICB3b3JrZmxvd0Zvcm1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHdvcmtmbG93Rm9ybU5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGlvblJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgc3RhZ2U6IFsnc3RhZ2UnLCAnZGVjaXNpb24nLCAnc3ViZmxvdycsICdmb3JtJ10sXG4gICAgZGVjaXNpb246IFsnc3RhZ2UnXSwgLy8gRGVjaXNpb25zIGNhbiBvbmx5IGNvbm5lY3QgdG8gU3RhZ2VzXG4gICAgLy8gJ2FjdGlvbic6IFsnc3RhZ2UnLCAnZm9ybScsICdkZWNpc2lvbiddLFxuICAgIGZvcm06IFtdLFxuICAgIHN1YmZsb3c6IFsnc3RhZ2UnLCAnZGVjaXNpb24nXSxcbiAgfTtcblxuICBzZXRXb3JrZmxvd0Zvcm0oZm9ybUlkOiBzdHJpbmcgfCBudWxsLCBmb3JtTmFtZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dGb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy53b3JrZmxvd0Zvcm1OYW1lID0gZm9ybU5hbWU7XG4gIH1cblxuICBhZGRTd2ltbGFuZShuYW1lOiBzdHJpbmcsIHRhZ3M6IFRhZ1tdKSB7XG4gICAgdGhpcy5zd2ltbGFuZXMgPSB0aGlzLnN3aW1sYW5lcy5jb25jYXQoW1xuICAgICAge1xuICAgICAgICBvcmRlcjogdGhpcy5zd2ltbGFuZXMubGVuZ3RoLFxuICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgdGFncyxcbiAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBnZW5lcmF0ZSBjb25uZWN0aW9uIHBvaW50cyBmb3IgYSBub2RlXG4gIGdlbmVyYXRlQ29ubmVjdGlvblBvaW50cyhub2RlOiBOb2RlKTogQ29ubmVjdGlvblBvaW50W10ge1xuICAgIGNvbnN0IHBvaW50czogQ29ubmVjdGlvblBvaW50W10gPSBbXTtcbiAgICBjb25zdCBzcGFjaW5nID0gNTA7IC8vIFNwYWNlIGJldHdlZW4gY29ubmVjdGlvbiBwb2ludHNcblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgIC8vIFJlY3Rhbmd1bGFyIHNoYXBlcyAtIGFkZCBwb2ludHMgYXJvdW5kIHRoZSByZWN0YW5nbGVcblxuICAgICAgLy8gVG9wIGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB4ID0gc3BhY2luZzsgeCA8IG5vZGUud2lkdGg7IHggKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LXRvcC0ke3h9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogeCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICAgIHR5cGU6ICd0b3AnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gUmlnaHQgZWRnZSBwb2ludHNcbiAgICAgIGZvciAobGV0IHkgPSBzcGFjaW5nOyB5IDwgbm9kZS5oZWlnaHQ7IHkgKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LSR7eX1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICAgIHk6IHksXG4gICAgICAgICAgdHlwZTogJ3JpZ2h0JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJvdHRvbSBlZGdlIHBvaW50c1xuICAgICAgZm9yIChsZXQgeCA9IHNwYWNpbmc7IHggPCBub2RlLndpZHRoOyB4ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1ib3R0b20tJHt4fWAsXG4gICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogbm9kZS5oZWlnaHQsXG4gICAgICAgICAgdHlwZTogJ2JvdHRvbScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBMZWZ0IGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB5ID0gc3BhY2luZzsgeSA8IG5vZGUuaGVpZ2h0OyB5ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LSR7eX1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IHksXG4gICAgICAgICAgdHlwZTogJ2xlZnQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ2RlY2lzaW9uJykge1xuICAgICAgLy8gRGlhbW9uZCBzaGFwZSAtIGFkZCBwb2ludHMgYXQgdGhlIGZvdXIgY29ybmVyc1xuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tdG9wLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiAwLFxuICAgICAgICB0eXBlOiAndG9wJyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1yaWdodC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDIsXG4gICAgICAgIHR5cGU6ICdyaWdodCcsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tYm90dG9tLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiBub2RlLmhlaWdodCxcbiAgICAgICAgdHlwZTogJ2JvdHRvbScsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDIsXG4gICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnZm9ybScpIHtcbiAgICAgIC8vIEZvcm0gb25seSBoYXMgaW5wdXQgY29ubmVjdGlvbiBwb2ludHMsIG5vIG91dHB1dCBwb2ludHNcblxuICAgICAgLy8gTGVmdCBlZGdlIHBvaW50cyAoZm9yIGlucHV0IGNvbm5lY3Rpb25zKVxuICAgICAgZm9yIChsZXQgeSA9IHNwYWNpbmc7IHkgPCBub2RlLmhlaWdodDsgeSArPSBzcGFjaW5nKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC0ke3l9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiB5LFxuICAgICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgLy8gSGV4YWdvbiBzaGFwZSAtIGFkZCBwb2ludHMgYXQgdGhlIHNpeCBjb3JuZXJzXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS10b3AtMGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCAvIDIsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHR5cGU6ICd0b3AnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LXRvcGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyA0LFxuICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LWJvdHRvbWAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgeTogKG5vZGUuaGVpZ2h0ICogMykgLyA0LFxuICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWJvdHRvbS0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoIC8gMixcbiAgICAgICAgeTogbm9kZS5oZWlnaHQsXG4gICAgICAgIHR5cGU6ICdib3R0b20nLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWxlZnQtYm90dG9tYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAobm9kZS5oZWlnaHQgKiAzKSAvIDQsXG4gICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LXRvcGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyA0LFxuICAgICAgICB0eXBlOiAnbGVmdCcsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xuICB9XG5cbiAgYWRkTm9kZShcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXIsXG4gICAgdHlwZTogVG9vbFR5cGUsXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICBzdGFnZURhdGE/OiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+LFxuICAgIHdvcmtmbG93RGF0YT86IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1cbiAgKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdIHx8XG4gICAgICAhdHlwZSB8fFxuICAgICAgKHR5cGUgIT09ICdzdGFnZScgJiZcbiAgICAgICAgdHlwZSAhPT0gJ2RlY2lzaW9uJyAmJlxuICAgICAgICB0eXBlICE9PSAnZm9ybScgJiZcbiAgICAgICAgdHlwZSAhPT0gJ3N1YmZsb3cnKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQWRqdXN0IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHN3aW1sYW5lXG4gICAgY29uc3QgYWRqdXN0ZWRZID0geSAtIHN3aW1sYW5lSW5kZXggKiAyNjMgLSA0MDsgLy8gU3VidHJhY3RpbmcgaGVhZGVyIGhlaWdodFxuXG4gICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgSURcbiAgICBjb25zdCBpZCA9IGAke3R5cGV9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gO1xuXG4gICAgLy8gQ3JlYXRlIG5vZGUgd2l0aCBkaW1lbnNpb25zIGJhc2VkIG9uIHR5cGVcbiAgICBjb25zdCBub2RlOiBOb2RlID0ge1xuICAgICAgaWQsXG4gICAgICB0eXBlLFxuICAgICAgeCxcbiAgICAgIHk6IGFkanVzdGVkWSxcbiAgICAgIHdpZHRoOiB0eXBlID09PSAnc3ViZmxvdycgPyA4OCA6IDE2OSwgLy8gV2lkdGggZnJvbSBTVkdcbiAgICAgIGhlaWdodDogMTAwLCAvLyBIZWlnaHQgZnJvbSBTVkdcbiAgICAgIGlzU3RhcnROb2RlOiBmYWxzZSwgLy8gRGVmYXVsdCB0byBmYWxzZVxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEgfHwge30sIC8vIFN0b3JlIHN0YWdlIGRhdGFcbiAgICAgIHdvcmtmbG93RGF0YTogd29ya2Zsb3dEYXRhIHx8IG51bGwsXG4gICAgfTtcblxuICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGVudGlyZSB3b3JrZmxvdywgbWFyayBpdCBhcyB0aGUgc3RhcnQgbm9kZVxuICAgIGlmICh0aGlzLmdldE5vZGVDb3VudCgpID09PSAwKSB7XG4gICAgICBub2RlLmlzU3RhcnROb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhcnROb2RlSWQgPSBpZDtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBjb25uZWN0aW9uIHBvaW50cyBmb3IgdGhlIG5vZGVcbiAgICBub2RlLmNvbm5lY3Rpb25Qb2ludHMgPSB0aGlzLmdlbmVyYXRlQ29ubmVjdGlvblBvaW50cyhub2RlKTtcblxuICAgIC8vIEFkZCBub2RlIHRvIHRoZSBzd2ltbGFuZVxuICAgIGlmICghdGhpcy5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0ubm9kZXMpIHtcbiAgICAgIHRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdLm5vZGVzID0gW107XG4gICAgfVxuICAgIHRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdLm5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8vIEhlbHBlciB0byBnZXQgdG90YWwgbm9kZSBjb3VudCBhY3Jvc3MgYWxsIHN3aW1sYW5lc1xuICBnZXROb2RlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zd2ltbGFuZXMucmVkdWNlKFxuICAgICAgKGNvdW50LCBzd2ltbGFuZSkgPT4gY291bnQgKyAoc3dpbWxhbmUubm9kZXM/Lmxlbmd0aCB8fCAwKSxcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgLy8gRmluZCBhIG5vZGUgYnkgSUQgKHVzZWZ1bCBmb3IgbGF0ZXIgb3BlcmF0aW9ucylcbiAgZmluZE5vZGVCeUlkKGlkOiBzdHJpbmcpOiB7IG5vZGU6IE5vZGU7IHN3aW1sYW5lSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN3aW1sYW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3dpbWxhbmUgPSB0aGlzLnN3aW1sYW5lc1tpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSBzd2ltbGFuZS5ub2Rlcz8uZmluZCgobikgPT4gbi5pZCA9PT0gaWQpO1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHsgbm9kZSwgc3dpbWxhbmVJbmRleDogaSB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXJ0Q29ubmVjdGlvbkRyYWcoXG4gICAgcG9pbnQ6IENvbm5lY3Rpb25Qb2ludCxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXIsXG4gICAgZ2xvYmFsWDogbnVtYmVyLFxuICAgIGdsb2JhbFk6IG51bWJlclxuICApIHtcbiAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEgPSB7XG4gICAgICBzb3VyY2VQb2ludDogcG9pbnQsXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzd2ltbGFuZUluZGV4LFxuICAgICAgc3RhcnRYOiBnbG9iYWxYLFxuICAgICAgc3RhcnRZOiBnbG9iYWxZLFxuICAgICAgY3VycmVudFg6IGdsb2JhbFgsXG4gICAgICBjdXJyZW50WTogZ2xvYmFsWSxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlQ29ubmVjdGlvbkRyYWcoY3VycmVudFg6IG51bWJlciwgY3VycmVudFk6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5jdXJyZW50WCA9IGN1cnJlbnRYO1xuICAgICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLmN1cnJlbnRZID0gY3VycmVudFk7XG4gICAgfVxuICB9XG5cbiAgZW5kQ29ubmVjdGlvbkRyYWcoKSB7XG4gICAgY29uc29sZS5sb2coJ0VuZGluZyBjb25uZWN0aW9uIGRyYWcsIGNsZWFyaW5nIGRhdGEnKTtcbiAgICAvLyBDbGVhciBkcmFnZ2luZyBkYXRhXG4gICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhID0ge307XG4gIH1cblxuICBpc0Nvbm5lY3Rpb25EcmFnZ2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQ7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uUGF0aERhdGEoKToge1xuICAgIHN0YXJ0WDogbnVtYmVyO1xuICAgIHN0YXJ0WTogbnVtYmVyO1xuICAgIGVuZFg6IG51bWJlcjtcbiAgICBlbmRZOiBudW1iZXI7XG4gICAgc291cmNlU3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgeyBzb3VyY2VQb2ludCwgc291cmNlU3dpbWxhbmVJbmRleCwgY3VycmVudFgsIGN1cnJlbnRZIH0gPVxuICAgICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZChzb3VyY2VQb2ludC5ub2RlSWQpPy5ub2RlO1xuXG4gICAgaWYgKCFub2RlIHx8IHNvdXJjZVN3aW1sYW5lSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBDYWxjdWxhdGUgc3RhcnQgcG9pbnQgaW4gZ2xvYmFsIGNvb3JkaW5hdGVzXG4gICAgY29uc3Qgc3RhcnRYID0gbm9kZS54ICsgc291cmNlUG9pbnQueDtcbiAgICBjb25zdCBzdGFydFkgPSBub2RlLnkgKyBzb3VyY2VQb2ludC55ICsgKHNvdXJjZVN3aW1sYW5lSW5kZXggKiAyNjMgKyA0MCk7IC8vIEFkZCBzd2ltbGFuZSBvZmZzZXRcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFgsXG4gICAgICBzdGFydFksXG4gICAgICBlbmRYOiBjdXJyZW50WCA/PyBzdGFydFgsXG4gICAgICBlbmRZOiBjdXJyZW50WSA/PyBzdGFydFksXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgIH07XG4gIH1cblxuICBjcmVhdGVDb25uZWN0aW9uKFxuICAgIHRhcmdldE5vZGVJZDogc3RyaW5nLFxuICAgIHRhcmdldFBvaW50SWQ6IHN0cmluZyxcbiAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IHsgc291cmNlUG9pbnQsIHNvdXJjZVN3aW1sYW5lSW5kZXggfSA9IHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YTtcblxuICAgIGlmICghc291cmNlUG9pbnQgfHwgc291cmNlU3dpbWxhbmVJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIHNvdXJjZSBkYXRhIGZvciBjb25uZWN0aW9uJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0aW9uOiBDb25uZWN0aW9uID0ge1xuICAgICAgaWQ6IGBjb25uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gLFxuICAgICAgc291cmNlTm9kZUlkOiBzb3VyY2VQb2ludC5ub2RlSWQsXG4gICAgICB0YXJnZXROb2RlSWQ6IHRhcmdldE5vZGVJZCxcbiAgICAgIHNvdXJjZVBvaW50SWQ6IHNvdXJjZVBvaW50LmlkLFxuICAgICAgdGFyZ2V0UG9pbnRJZDogdGFyZ2V0UG9pbnRJZCxcbiAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IHNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiB0YXJnZXRTd2ltbGFuZUluZGV4LFxuICAgIH07XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG4gICAgY29uc29sZS5sb2coJ0NyZWF0ZWQgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdDb25uZWN0aW9ucyBhcnJheSBub3cgaGFzJyxcbiAgICAgIHRoaXMuY29ubmVjdGlvbnMubGVuZ3RoLFxuICAgICAgJ2Nvbm5lY3Rpb25zJ1xuICAgICk7XG4gICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gIH1cblxuICAvLyBBZGQgYSBtZXRob2QgdG8gZ2V0IGNvbm5lY3Rpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gIGdldENvbm5lY3Rpb25EYXRhKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pOiB7XG4gICAgc3RhcnRYOiBudW1iZXI7XG4gICAgc3RhcnRZOiBudW1iZXI7XG4gICAgZW5kWDogbnVtYmVyO1xuICAgIGVuZFk6IG51bWJlcjtcbiAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBudW1iZXI7XG4gICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLmZpbmROb2RlQnlJZChjb25uZWN0aW9uLnNvdXJjZU5vZGVJZCk7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZUluZm8gPSB0aGlzLmZpbmROb2RlQnlJZChjb25uZWN0aW9uLnRhcmdldE5vZGVJZCk7XG5cbiAgICBpZiAoIXNvdXJjZU5vZGVJbmZvIHx8ICF0YXJnZXROb2RlSW5mbykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlTm9kZSA9IHNvdXJjZU5vZGVJbmZvLm5vZGU7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRhcmdldE5vZGVJbmZvLm5vZGU7XG5cbiAgICAvLyBGaW5kIGNvbm5lY3Rpb24gcG9pbnRzXG4gICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VOb2RlLmNvbm5lY3Rpb25Qb2ludHM/LmZpbmQoXG4gICAgICAocCkgPT4gcC5pZCA9PT0gY29ubmVjdGlvbi5zb3VyY2VQb2ludElkXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRhcmdldE5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgIChwKSA9PiBwLmlkID09PSBjb25uZWN0aW9uLnRhcmdldFBvaW50SWRcbiAgICApO1xuXG4gICAgaWYgKCFzb3VyY2VQb2ludCB8fCAhdGFyZ2V0UG9pbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBnbG9iYWwgY29vcmRpbmF0ZXNcbiAgICBjb25zdCBzdGFydFggPSBzb3VyY2VOb2RlLnggKyBzb3VyY2VQb2ludC54O1xuICAgIGNvbnN0IHN0YXJ0WSA9XG4gICAgICBzb3VyY2VOb2RlLnkgK1xuICAgICAgc291cmNlUG9pbnQueSArXG4gICAgICAoY29ubmVjdGlvbi5zb3VyY2VTd2ltbGFuZUluZGV4ICogMjYzICsgNDApO1xuXG4gICAgY29uc3QgZW5kWCA9IHRhcmdldE5vZGUueCArIHRhcmdldFBvaW50Lng7XG4gICAgY29uc3QgZW5kWSA9XG4gICAgICB0YXJnZXROb2RlLnkgK1xuICAgICAgdGFyZ2V0UG9pbnQueSArXG4gICAgICAoY29ubmVjdGlvbi50YXJnZXRTd2ltbGFuZUluZGV4ICogMjYzICsgNDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0WCxcbiAgICAgIHN0YXJ0WSxcbiAgICAgIGVuZFgsXG4gICAgICBlbmRZLFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogY29ubmVjdGlvbi5zb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogY29ubmVjdGlvbi50YXJnZXRTd2ltbGFuZUluZGV4LFxuICAgIH07XG4gIH1cblxuICAvLyBBZGQgYSBtZXRob2QgdG8gY2hlY2sgaWYgYSBjb25uZWN0aW9uIGlzIGFsbG93ZWQgYmFzZWQgb24gbm9kZSB0eXBlc1xuICBjYW5Db25uZWN0KHNvdXJjZU5vZGVUeXBlOiBzdHJpbmcsIHRhcmdldE5vZGVUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jb25uZWN0aW9uUnVsZXNbc291cmNlTm9kZVR5cGVdPy5pbmNsdWRlcyh0YXJnZXROb2RlVHlwZSkgfHwgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLy8gQWRkIGEgbWV0aG9kIHRvIGdldCBhbGxvd2VkIG5vZGUgdHlwZXMgZm9yIHRoZSBjdXJyZW50IGRyYWdnaW5nIGNvbm5lY3Rpb25cbiAgZ2V0QWxsb3dlZFRhcmdldE5vZGVUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuZmluZE5vZGVCeUlkKFxuICAgICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50Lm5vZGVJZFxuICAgICk7XG4gICAgaWYgKCFzb3VyY2VOb2RlSW5mbykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZU5vZGVUeXBlID0gc291cmNlTm9kZUluZm8ubm9kZS50eXBlO1xuXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblJ1bGVzW3NvdXJjZU5vZGVUeXBlXSB8fCBbXTtcbiAgfVxuXG4gIC8vIHRyYW5zZm9ybVRvV29ya2Zsb3dNb2RlbCgpOiBXb3JrZmxvdyB7XG4gIC8vICAgLy8gQ3JlYXRlIGJhc2Ugd29ya2Zsb3cgb2JqZWN0XG4gIC8vICAgY29uc3Qgd29ya2Zsb3c6IFdvcmtmbG93ID0ge1xuICAvLyAgICAgTmFtZTogJ05ldyBXb3JrZmxvdycsIC8vIERlZmF1bHQgbmFtZSBvciBnZXQgaXQgZnJvbSBzb21ld2hlcmVcbiAgLy8gICAgIERlc2NyaXB0aW9uOiAnJywgLy8gRGVmYXVsdCBkZXNjcmlwdGlvblxuICAvLyAgICAgU3RhZ2VFbnRyeVJ1bGU6ICcnLFxuICAvLyAgICAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsIC8vIERlZmF1bHQgYXNzaWdubWVudCB0eXBlXG4gIC8vICAgICBTdGF0dXM6IFN0YXR1cy5BY3RpdmUsIC8vIERlZmF1bHQgc3RhdHVzXG4gIC8vICAgICBBY3Rpb25zOiBbXSxcbiAgLy8gICAgIExhbmVzOiBbXSxcbiAgLy8gICAgIFN0YWdlczogW10sXG4gIC8vICAgfTtcblxuICAvLyAgIC8vIFRyYW5zZm9ybSBzd2ltbGFuZXMgdG8gU3dpbUxhbmVbXVxuICAvLyAgIHdvcmtmbG93LkxhbmVzID0gdGhpcy5zd2ltbGFuZXMubWFwKChzd2ltbGFuZSwgaW5kZXgpID0+IHtcbiAgLy8gICAgIHJldHVybiB7XG4gIC8vICAgICAgIElkOiBgbGFuZS0ke2luZGV4fWAsXG4gIC8vICAgICAgIFdvcmtmbG93OiB3b3JrZmxvdy5JZCxcbiAgLy8gICAgICAgVGFnczogc3dpbWxhbmUudGFncyxcbiAgLy8gICAgICAgUG9zaXRpb246IHN3aW1sYW5lLm9yZGVyLFxuICAvLyAgICAgICBDb29yZGluYXRlczogeyBYOiAwLCBZOiBzd2ltbGFuZS5vcmRlciAqIDI2MyB9LCAvLyBDYWxjdWxhdGUgWSBwb3NpdGlvbiBiYXNlZCBvbiBvcmRlclxuICAvLyAgICAgICBTaXplOiB7IFdpZHRoOiAzMDAwLCBIZWlnaHQ6IDI2MyB9LCAvLyBEZWZhdWx0IHNpemVcbiAgLy8gICAgICAgLy8gQWRkIG90aGVyIHJlcXVpcmVkIHByb3BlcnRpZXMgZnJvbSBCYXNlTW9kZWxcbiAgLy8gICAgICAgQ29kZTogJycsXG4gIC8vICAgICAgIFRlbmFudElkOiAnJyxcbiAgLy8gICAgICAgaWQ6IGBsYW5lLSR7aW5kZXh9YCxcbiAgLy8gICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAvLyAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gIC8vICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgLy8gICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gIC8vICAgICB9O1xuICAvLyAgIH0pO1xuXG4gIC8vICAgLy8gVHJhbnNmb3JtIG5vZGVzIHRvIFdvcmtmbG93U3RhZ2VbXVxuICAvLyAgIGNvbnN0IHN0YWdlczogV29ya2Zsb3dTdGFnZVtdID0gW107XG5cbiAgLy8gICB0aGlzLnN3aW1sYW5lcy5mb3JFYWNoKChzd2ltbGFuZSwgc3dpbWxhbmVJbmRleCkgPT4ge1xuICAvLyAgICAgc3dpbWxhbmUubm9kZXM/LmZvckVhY2goKG5vZGUpID0+IHtcbiAgLy8gICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ3N0YWdlJykge1xuICAvLyAgICAgICAgIC8vIENyZWF0ZSBhIHN0YWdlIGZyb20gdGhlIG5vZGVcbiAgLy8gICAgICAgICBjb25zdCBzdGFnZTogV29ya2Zsb3dTdGFnZSA9IHtcbiAgLy8gICAgICAgICAgIElkOiBub2RlLmlkLFxuICAvLyAgICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LklkLFxuICAvLyAgICAgICAgICAgTmFtZTogbm9kZS5zdGFnZURhdGE/Lk5hbWUgfHwgJ1VubmFtZWQgU3RhZ2UnLFxuICAvLyAgICAgICAgICAgRGVzY3JpcHRpb246IG5vZGUuc3RhZ2VEYXRhPy5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgLy8gICAgICAgICAgIER1cmF0aW9uOiBub2RlLnN0YWdlRGF0YT8uRHVyYXRpb24gfHwgMCxcbiAgLy8gICAgICAgICAgIFBhc3NPblJ1bGU6IG5vZGUuc3RhZ2VEYXRhPy5QYXNzT25SdWxlIHx8ICcnLFxuICAvLyAgICAgICAgICAgQWN0b3JSdWxlOiBub2RlLnN0YWdlRGF0YT8uQWN0b3JSdWxlIHx8IFN0YWdlQWN0b3JSdWxlLk5vbmUsXG4gIC8vICAgICAgICAgICBNaW5Ob09mQWN0b3I6IG5vZGUuc3RhZ2VEYXRhPy5NaW5Ob09mQWN0b3IgfHwgMCxcbiAgLy8gICAgICAgICAgIElzUGFyYWxsZWw6IGZhbHNlLCAvLyBEZWZhdWx0IHZhbHVlLCB3aWxsIGJlIHVwZGF0ZWQgYmVsb3dcbiAgLy8gICAgICAgICAgIElzRW50cnlQb2ludDogbm9kZS5pc1N0YXJ0Tm9kZSxcbiAgLy8gICAgICAgICAgIElzRXhpdFBvaW50OiBmYWxzZSwgLy8gRGV0ZXJtaW5lIGJhc2VkIG9uIGNvbm5lY3Rpb25zXG4gIC8vICAgICAgICAgICBUYWdzOiBub2RlLnN0YWdlRGF0YT8uVGFncyB8fCBbXSxcbiAgLy8gICAgICAgICAgIEZvcm1zOiBub2RlLnN0YWdlRGF0YT8uRm9ybXMgfHwgW10sXG4gIC8vICAgICAgICAgICBBbGxvd011bHRpU3ViUHJvY2VzczogZmFsc2UsXG4gIC8vICAgICAgICAgICBBc3NpZ25tZW50VHlwZTpcbiAgLy8gICAgICAgICAgICAgbm9kZS5zdGFnZURhdGE/LkFzc2lnbm1lbnRUeXBlIHx8IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gIC8vICAgICAgICAgICBTdWJXb3JrRmxvdzogbm9kZS5zdGFnZURhdGE/LlN1YldvcmtGbG93IHx8ICcnLFxuICAvLyAgICAgICAgICAgU3dpbUxhbmU6IHdvcmtmbG93LkxhbmVzW3N3aW1sYW5lSW5kZXhdLklkLFxuICAvLyAgICAgICAgICAgQ29vcmRpbmF0ZXM6IHsgWDogbm9kZS54LCBZOiBub2RlLnkgfSxcbiAgLy8gICAgICAgICAgIElzU3ViUHJvY2VzczogZmFsc2UsXG4gIC8vICAgICAgICAgICAvLyBBZGQgb3RoZXIgcmVxdWlyZWQgcHJvcGVydGllcyBmcm9tIEJhc2VNb2RlbFxuICAvLyAgICAgICAgICAgQ29kZTogJycsXG4gIC8vICAgICAgICAgICBUZW5hbnRJZDogJycsXG4gIC8vICAgICAgICAgICBpZDogbm9kZS5pZCxcbiAgLy8gICAgICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgLy8gICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgLy8gICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgLy8gICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAvLyAgICAgICAgIH07XG5cbiAgLy8gICAgICAgICBzdGFnZXMucHVzaChzdGFnZSk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pO1xuICAvLyAgIH0pO1xuXG4gIC8vICAgLy8gTm93IHByb2Nlc3MgdGhlIGNvbm5lY3Rpb25zIHRvIHNldCBJc1BhcmFsbGVsIG9uIHRhcmdldCBzdGFnZXNcbiAgLy8gICB0aGlzLmNvbm5lY3Rpb25zLmZvckVhY2goKGNvbm4pID0+IHtcbiAgLy8gICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5maW5kTm9kZUJ5SWQoY29ubi5zb3VyY2VOb2RlSWQpO1xuXG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIHNvdXJjZU5vZGVJbmZvICYmXG4gIC8vICAgICAgIHNvdXJjZU5vZGVJbmZvLm5vZGUudHlwZSA9PT0gJ3N0YWdlJyAmJlxuICAvLyAgICAgICBzb3VyY2VOb2RlSW5mby5ub2RlLnN0YWdlRGF0YT8uaGFzUGFyYWxsZWwgPT09IHRydWVcbiAgLy8gICAgICkge1xuICAvLyAgICAgICAvLyBGaW5kIHRoZSB0YXJnZXQgc3RhZ2UgaW4gb3VyIHN0YWdlcyBhcnJheVxuICAvLyAgICAgICBjb25zdCB0YXJnZXRTdGFnZSA9IHN0YWdlcy5maW5kKChzKSA9PiBzLklkID09PSBjb25uLnRhcmdldE5vZGVJZCk7XG4gIC8vICAgICAgIGlmICh0YXJnZXRTdGFnZSkge1xuICAvLyAgICAgICAgIC8vIFNldCBJc1BhcmFsbGVsIHRvIHRydWUgZm9yIHRoaXMgdGFyZ2V0IHN0YWdlXG4gIC8vICAgICAgICAgdGFyZ2V0U3RhZ2UuSXNQYXJhbGxlbCA9IHRydWU7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9KTtcblxuICAvLyAgIC8vIFRyYW5zZm9ybSBjb25uZWN0aW9ucyB0byBXb3JrZmxvd0FjdGlvbltdXG4gIC8vICAgd29ya2Zsb3cuQWN0aW9ucyA9IHRoaXMuY29ubmVjdGlvbnMubWFwKChjb25uKSA9PiB7XG4gIC8vICAgICBjb25zdCBzb3VyY2VOb2RlID0gdGhpcy5maW5kTm9kZUJ5SWQoY29ubi5zb3VyY2VOb2RlSWQpPy5ub2RlO1xuICAvLyAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKT8ubm9kZTtcblxuICAvLyAgICAgcmV0dXJuIHtcbiAgLy8gICAgICAgSWQ6IGNvbm4uaWQsXG4gIC8vICAgICAgIFdvcmtmbG93OiB3b3JrZmxvdy5JZCxcbiAgLy8gICAgICAgTmFtZTogYEFjdGlvbiBmcm9tICR7c291cmNlTm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ30gdG8gJHtcbiAgLy8gICAgICAgICB0YXJnZXROb2RlPy5zdGFnZURhdGE/Lk5hbWUgfHwgJ1Vua25vd24nXG4gIC8vICAgICAgIH1gLFxuICAvLyAgICAgICBGcm9tU3RhZ2U6IGNvbm4uc291cmNlTm9kZUlkLFxuICAvLyAgICAgICBUb1N0YWdlOiBjb25uLnRhcmdldE5vZGVJZCxcbiAgLy8gICAgICAgSXNQYXJhbGxlbDogdGFyZ2V0Tm9kZT8uc3RhZ2VEYXRhPy5Jc1BhcmFsbGVsIHx8IGZhbHNlLFxuICAvLyAgICAgICAvLyBBZGQgb3RoZXIgcmVxdWlyZWQgcHJvcGVydGllcyBmcm9tIEJhc2VNb2RlbFxuICAvLyAgICAgICBDb2RlOiAnJyxcbiAgLy8gICAgICAgVGVuYW50SWQ6ICcnLFxuICAvLyAgICAgICBpZDogY29ubi5pZCxcbiAgLy8gICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAvLyAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gIC8vICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgLy8gICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gIC8vICAgICB9O1xuICAvLyAgIH0pO1xuXG4gIC8vICAgd29ya2Zsb3cuU3RhZ2VzID0gc3RhZ2VzO1xuXG4gIC8vICAgcmV0dXJuIHdvcmtmbG93O1xuICAvLyB9XG5cbiAgdXBkYXRlU3dpbWxhbmUoaW5kZXg6IG51bWJlciwgbmFtZTogc3RyaW5nLCB0YWdzOiBUYWdbXSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1N0YXRlOiBVcGRhdGluZyBzd2ltbGFuZSBhdCBpbmRleCcsXG4gICAgICBpbmRleCxcbiAgICAgICd3aXRoIG5hbWUnLFxuICAgICAgbmFtZSxcbiAgICAgICdhbmQgdGFncycsXG4gICAgICB0YWdzXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5zd2ltbGFuZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN3aW1sYW5lc1tpbmRleF0gPSB7XG4gICAgICAgIC4uLnRoaXMuc3dpbWxhbmVzW2luZGV4XSxcbiAgICAgICAgbGFiZWw6IG5hbWUsXG4gICAgICAgIHRhZ3M6IHRhZ3MsXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ1N3aW1sYW5lIHVwZGF0ZWQ6JywgdGhpcy5zd2ltbGFuZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBzd2ltbGFuZSBpbmRleDonLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtVG9Xb3JrZmxvd01vZGVsKCk6IFdvcmtmbG93IHtcbiAgICAvLyBDcmVhdGUgYmFzZSB3b3JrZmxvdyBvYmplY3RcbiAgICBjb25zdCB3b3JrZmxvdzogV29ya2Zsb3cgPSB7XG4gICAgICBJZDogJycsIC8vIFdpbGwgYmUgYXNzaWduZWQgYnkgYmFja2VuZCBvbiBmaXJzdCBzYXZlXG4gICAgICBDb2RlOiAnJyxcbiAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgIGlkOiAnJyxcbiAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgTmFtZTogJ05ldyBXb3JrZmxvdycsIC8vIERlZmF1bHQgbmFtZSBvciBnZXQgaXQgZnJvbSBzb21ld2hlcmVcbiAgICAgIERlc2NyaXB0aW9uOiAnJywgLy8gRGVmYXVsdCBkZXNjcmlwdGlvblxuICAgICAgU3RhZ2VFbnRyeVJ1bGU6ICcnLFxuICAgICAgRm9ybTogdGhpcy53b3JrZmxvd0Zvcm1JZCB8fCB1bmRlZmluZWQsXG4gICAgICBBc3NpZ25tZW50VHlwZTogVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSwgLy8gRGVmYXVsdCBhc3NpZ25tZW50IHR5cGVcbiAgICAgIFN0YXR1czogU3RhdHVzLkFjdGl2ZSwgLy8gRGVmYXVsdCBzdGF0dXNcbiAgICAgIEFjdGlvbnM6IFtdLFxuICAgICAgTGFuZXM6IFtdLFxuICAgICAgU3RhZ2VzOiBbXSxcbiAgICB9O1xuXG4gICAgLy8gVHJhbnNmb3JtIHN3aW1sYW5lcyB0byBTd2ltTGFuZVtdXG4gICAgd29ya2Zsb3cuTGFuZXMgPSB0aGlzLnN3aW1sYW5lcy5tYXAoKHN3aW1sYW5lLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgSWQ6IGBsYW5lLSR7aW5kZXh9YCxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgaWQ6IGBsYW5lLSR7aW5kZXh9YCxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgIFdvcmtmbG93OiB3b3JrZmxvdy5JZCxcbiAgICAgICAgVGFnczogc3dpbWxhbmUudGFncyB8fCBbXSxcbiAgICAgICAgUG9zaXRpb246IHN3aW1sYW5lLm9yZGVyLFxuICAgICAgICBDb29yZGluYXRlczogeyBYOiAwLCBZOiBzd2ltbGFuZS5vcmRlciAqIDI2MyB9LCAvLyBDYWxjdWxhdGUgWSBwb3NpdGlvbiBiYXNlZCBvbiBvcmRlclxuICAgICAgICBTaXplOiB7IFdpZHRoOiAzMDAwLCBIZWlnaHQ6IDI2MyB9LCAvLyBEZWZhdWx0IHNpemVcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gbm9kZXMgdG8gV29ya2Zsb3dTdGFnZVtdXG4gICAgY29uc3Qgc3RhZ2VzOiBXb3JrZmxvd1N0YWdlW10gPSBbXTtcblxuICAgIHRoaXMuc3dpbWxhbmVzLmZvckVhY2goKHN3aW1sYW5lLCBzd2ltbGFuZUluZGV4KSA9PiB7XG4gICAgICBzd2ltbGFuZS5ub2Rlcz8uZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGEgc3RhZ2UgZnJvbSB0aGUgbm9kZVxuICAgICAgICAgIGNvbnN0IHN0YWdlOiBXb3JrZmxvd1N0YWdlID0ge1xuICAgICAgICAgICAgSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICBXb3JrZmxvdzogd29ya2Zsb3cuSWQsXG4gICAgICAgICAgICBOYW1lOiBub2RlLnN0YWdlRGF0YT8uTmFtZSB8fCAnVW5uYW1lZCBTdGFnZScsXG4gICAgICAgICAgICBEZXNjcmlwdGlvbjogbm9kZS5zdGFnZURhdGE/LkRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgRHVyYXRpb246IG5vZGUuc3RhZ2VEYXRhPy5EdXJhdGlvbiB8fCAwLFxuICAgICAgICAgICAgUGFzc09uUnVsZTogbm9kZS5zdGFnZURhdGE/LlBhc3NPblJ1bGUgfHwgJycsXG4gICAgICAgICAgICBBY3RvclJ1bGU6IG5vZGUuc3RhZ2VEYXRhPy5BY3RvclJ1bGUgfHwgU3RhZ2VBY3RvclJ1bGUuTm9uZSxcbiAgICAgICAgICAgIE1pbk5vT2ZBY3Rvcjogbm9kZS5zdGFnZURhdGE/Lk1pbk5vT2ZBY3RvciB8fCAwLFxuICAgICAgICAgICAgSXNQYXJhbGxlbDogbm9kZS5zdGFnZURhdGE/LklzUGFyYWxsZWwgfHwgZmFsc2UsXG4gICAgICAgICAgICBJc0VudHJ5UG9pbnQ6IG5vZGUuaXNTdGFydE5vZGUsXG4gICAgICAgICAgICBJc0V4aXRQb2ludDogZmFsc2UsIC8vIERldGVybWluZSBiYXNlZCBvbiBvdXRnb2luZyBjb25uZWN0aW9uc1xuICAgICAgICAgICAgVGFnczogbm9kZS5zdGFnZURhdGE/LlRhZ3MgfHwgW10sXG4gICAgICAgICAgICBGb3Jtczogbm9kZS5zdGFnZURhdGE/LmZvcm1JZCA/IFtub2RlLnN0YWdlRGF0YS5mb3JtSWRdIDogW10sXG4gICAgICAgICAgICBBbGxvd011bHRpU3ViUHJvY2VzczogZmFsc2UsXG4gICAgICAgICAgICBBc3NpZ25tZW50VHlwZTogVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgICAgICAgIFN1YldvcmtGbG93OiAnJyxcbiAgICAgICAgICAgIFN3aW1MYW5lOiB3b3JrZmxvdy5MYW5lc1tzd2ltbGFuZUluZGV4XS5JZCxcbiAgICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IG5vZGUueCwgWTogbm9kZS55IH0sXG4gICAgICAgICAgICBJc1N1YlByb2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdGFnZXMucHVzaChzdGFnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2sgd2hpY2ggc3RhZ2VzIGhhdmUgbm8gb3V0Z29pbmcgY29ubmVjdGlvbnMgLSB0aGV5IGFyZSBleGl0IHBvaW50c1xuICAgIHRoaXMuY29ubmVjdGlvbnMuZm9yRWFjaCgoY29ubikgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0U3RhZ2UgPSBzdGFnZXMuZmluZCgocykgPT4gcy5JZCA9PT0gY29ubi50YXJnZXROb2RlSWQpO1xuICAgICAgaWYgKHRhcmdldFN0YWdlKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgdGFyZ2V0IGhhcyBhbnkgb3V0Z29pbmcgY29ubmVjdGlvbnNcbiAgICAgICAgY29uc3QgaGFzT3V0Z29pbmdDb25uZWN0aW9ucyA9IHRoaXMuY29ubmVjdGlvbnMuc29tZShcbiAgICAgICAgICAoYykgPT4gYy5zb3VyY2VOb2RlSWQgPT09IHRhcmdldFN0YWdlLklkXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFoYXNPdXRnb2luZ0Nvbm5lY3Rpb25zKSB7XG4gICAgICAgICAgdGFyZ2V0U3RhZ2UuSXNFeGl0UG9pbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gY29ubmVjdGlvbnMgdG8gV29ya2Zsb3dBY3Rpb25bXVxuICAgIHdvcmtmbG93LkFjdGlvbnMgPSB0aGlzLmNvbm5lY3Rpb25zLm1hcCgoY29ubikgPT4ge1xuICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm4uc291cmNlTm9kZUlkKT8ubm9kZTtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCk/Lm5vZGU7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIElkOiBjb25uLmlkLFxuICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICBpZDogY29ubi5pZCxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgIFdvcmtmbG93OiB3b3JrZmxvdy5JZCxcbiAgICAgICAgTmFtZTogYEFjdGlvbiBmcm9tICR7c291cmNlTm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ30gdG8gJHtcbiAgICAgICAgICB0YXJnZXROb2RlPy5zdGFnZURhdGE/Lk5hbWUgfHwgJ1Vua25vd24nXG4gICAgICAgIH1gLFxuICAgICAgICBGcm9tU3RhZ2U6IGNvbm4uc291cmNlTm9kZUlkLFxuICAgICAgICBUb1N0YWdlOiBjb25uLnRhcmdldE5vZGVJZCxcbiAgICAgICAgSXNQYXJhbGxlbDogc291cmNlTm9kZT8uc3RhZ2VEYXRhPy5oYXNQYXJhbGxlbCB8fCBmYWxzZSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB3b3JrZmxvdy5TdGFnZXMgPSBzdGFnZXM7XG5cbiAgICByZXR1cm4gd29ya2Zsb3c7XG4gIH1cbn1cbiJdfQ==
|
|
510
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBSzdDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsU0FBUyxHQUFtQixFQUFFLENBQUM7SUFDL0IsV0FBVyxHQUFrQixJQUFJLENBQUMsQ0FBQyx1Q0FBdUM7SUFDMUUsV0FBVyxHQUFpQixFQUFFLENBQUM7SUFDL0Isc0JBQXNCLEdBT2xCLEVBQUUsQ0FBQztJQUNQLGNBQWMsR0FBa0IsSUFBSSxDQUFDO0lBQ3JDLGdCQUFnQixHQUFrQixJQUFJLENBQUM7SUFDdkMsVUFBVSxHQUFrQixJQUFJLENBQUM7SUFFakMsYUFBYSxDQUFDLEVBQVU7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVnQixlQUFlLEdBQTZCO1FBQzNELEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQztRQUMvQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSx1Q0FBdUM7UUFDNUQsMkNBQTJDO1FBQzNDLElBQUksRUFBRSxFQUFFO1FBQ1IsT0FBTyxFQUFFLENBQUMsT0FB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Q3pCLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDcEMsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxnQkFBZ0IsQ0FBQyxFQUFVO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEMsQ0FBQzt3R0F2bkJVLHFCQUFxQjs0R0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uLFxuICBDb25uZWN0aW9uUG9pbnQsXG4gIE5vZGUsXG4gIFN3aW1sYW5lSXRlbSxcbiAgVG9vbFR5cGUsXG59IGZyb20gJy4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1RhZyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N0YWdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1dvcmtmbG93U3RhZ2UnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvb2JqZWN0LXN0YXRlJztcbmltcG9ydCB7IFN0YWdlQWN0b3JSdWxlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1N0YWdlQWN0b3JSdWxlJztcbmltcG9ydCB7IFRhc2tBc3NpZ25tZW50VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9UYXNrQXNzaWdubWVudFR5cGUnO1xuaW1wb3J0IHsgV29ya2Zsb3cgfSBmcm9tICcuLi8uLi9tb2RlbHMvV29ya2Zsb3cnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0YXR1cyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUge1xuICBzd2ltbGFuZXM6IFN3aW1sYW5lSXRlbVtdID0gW107XG4gIHN0YXJ0Tm9kZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgdGhlIElEIG9mIHRoZSBmaXJzdC9zdGFydCBub2RlXG4gIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9uW10gPSBbXTtcbiAgZHJhZ2dpbmdDb25uZWN0aW9uRGF0YToge1xuICAgIHNvdXJjZVBvaW50PzogQ29ubmVjdGlvblBvaW50O1xuICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg/OiBudW1iZXI7XG4gICAgc3RhcnRYPzogbnVtYmVyO1xuICAgIHN0YXJ0WT86IG51bWJlcjtcbiAgICBjdXJyZW50WD86IG51bWJlcjtcbiAgICBjdXJyZW50WT86IG51bWJlcjtcbiAgfSA9IHt9O1xuICB3b3JrZmxvd0Zvcm1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHdvcmtmbG93Rm9ybU5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB3b3JrZmxvd0lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBzZXRXb3JrZmxvd0lkKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLndvcmtmbG93SWQgPSBpZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGlvblJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgc3RhZ2U6IFsnc3RhZ2UnLCAnZGVjaXNpb24nLCAnc3ViZmxvdycsICdmb3JtJ10sXG4gICAgZGVjaXNpb246IFsnc3RhZ2UnXSwgLy8gRGVjaXNpb25zIGNhbiBvbmx5IGNvbm5lY3QgdG8gU3RhZ2VzXG4gICAgLy8gJ2FjdGlvbic6IFsnc3RhZ2UnLCAnZm9ybScsICdkZWNpc2lvbiddLFxuICAgIGZvcm06IFtdLFxuICAgIHN1YmZsb3c6IFsnc3RhZ2UnLCAnZGVjaXNpb24nXSxcbiAgfTtcblxuICBzZXRXb3JrZmxvd0Zvcm0oZm9ybUlkOiBzdHJpbmcgfCBudWxsLCBmb3JtTmFtZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dGb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy53b3JrZmxvd0Zvcm1OYW1lID0gZm9ybU5hbWU7XG4gIH1cblxuICBhZGRTd2ltbGFuZShuYW1lOiBzdHJpbmcsIHRhZ3M6IFRhZ1tdKSB7XG4gICAgdGhpcy5zd2ltbGFuZXMgPSB0aGlzLnN3aW1sYW5lcy5jb25jYXQoW1xuICAgICAge1xuICAgICAgICBvcmRlcjogdGhpcy5zd2ltbGFuZXMubGVuZ3RoLFxuICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgdGFncyxcbiAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBnZW5lcmF0ZSBjb25uZWN0aW9uIHBvaW50cyBmb3IgYSBub2RlXG4gIGdlbmVyYXRlQ29ubmVjdGlvblBvaW50cyhub2RlOiBOb2RlKTogQ29ubmVjdGlvblBvaW50W10ge1xuICAgIGNvbnN0IHBvaW50czogQ29ubmVjdGlvblBvaW50W10gPSBbXTtcbiAgICBjb25zdCBzcGFjaW5nID0gNTA7IC8vIFNwYWNlIGJldHdlZW4gY29ubmVjdGlvbiBwb2ludHNcblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgIC8vIFJlY3Rhbmd1bGFyIHNoYXBlcyAtIGFkZCBwb2ludHMgYXJvdW5kIHRoZSByZWN0YW5nbGVcblxuICAgICAgLy8gVG9wIGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB4ID0gc3BhY2luZzsgeCA8IG5vZGUud2lkdGg7IHggKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LXRvcC0ke3h9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogeCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICAgIHR5cGU6ICd0b3AnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gUmlnaHQgZWRnZSBwb2ludHNcbiAgICAgIGZvciAobGV0IHkgPSBzcGFjaW5nOyB5IDwgbm9kZS5oZWlnaHQ7IHkgKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LSR7eX1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICAgIHk6IHksXG4gICAgICAgICAgdHlwZTogJ3JpZ2h0JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJvdHRvbSBlZGdlIHBvaW50c1xuICAgICAgZm9yIChsZXQgeCA9IHNwYWNpbmc7IHggPCBub2RlLndpZHRoOyB4ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1ib3R0b20tJHt4fWAsXG4gICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogbm9kZS5oZWlnaHQsXG4gICAgICAgICAgdHlwZTogJ2JvdHRvbScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBMZWZ0IGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB5ID0gc3BhY2luZzsgeSA8IG5vZGUuaGVpZ2h0OyB5ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LSR7eX1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IHksXG4gICAgICAgICAgdHlwZTogJ2xlZnQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ2RlY2lzaW9uJykge1xuICAgICAgLy8gRGlhbW9uZCBzaGFwZSAtIGFkZCBwb2ludHMgYXQgdGhlIGZvdXIgY29ybmVyc1xuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tdG9wLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiAwLFxuICAgICAgICB0eXBlOiAndG9wJyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1yaWdodC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDIsXG4gICAgICAgIHR5cGU6ICdyaWdodCcsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tYm90dG9tLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiBub2RlLmhlaWdodCxcbiAgICAgICAgdHlwZTogJ2JvdHRvbScsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDIsXG4gICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnZm9ybScpIHtcbiAgICAgIC8vIEZvcm0gb25seSBoYXMgaW5wdXQgY29ubmVjdGlvbiBwb2ludHMsIG5vIG91dHB1dCBwb2ludHNcblxuICAgICAgLy8gTGVmdCBlZGdlIHBvaW50cyAoZm9yIGlucHV0IGNvbm5lY3Rpb25zKVxuICAgICAgZm9yIChsZXQgeSA9IHNwYWNpbmc7IHkgPCBub2RlLmhlaWdodDsgeSArPSBzcGFjaW5nKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC0ke3l9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiB5LFxuICAgICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgLy8gSGV4YWdvbiBzaGFwZSAtIGFkZCBwb2ludHMgYXQgdGhlIHNpeCBjb3JuZXJzXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS10b3AtMGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCAvIDIsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHR5cGU6ICd0b3AnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LXRvcGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyA0LFxuICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LWJvdHRvbWAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgeTogKG5vZGUuaGVpZ2h0ICogMykgLyA0LFxuICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWJvdHRvbS0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoIC8gMixcbiAgICAgICAgeTogbm9kZS5oZWlnaHQsXG4gICAgICAgIHR5cGU6ICdib3R0b20nLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWxlZnQtYm90dG9tYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAobm9kZS5oZWlnaHQgKiAzKSAvIDQsXG4gICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LXRvcGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyA0LFxuICAgICAgICB0eXBlOiAnbGVmdCcsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xuICB9XG5cbiAgYWRkTm9kZShcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXIsXG4gICAgdHlwZTogVG9vbFR5cGUsXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICBzdGFnZURhdGE/OiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+LFxuICAgIHdvcmtmbG93RGF0YT86IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1cbiAgKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdIHx8XG4gICAgICAhdHlwZSB8fFxuICAgICAgKHR5cGUgIT09ICdzdGFnZScgJiZcbiAgICAgICAgdHlwZSAhPT0gJ2RlY2lzaW9uJyAmJlxuICAgICAgICB0eXBlICE9PSAnZm9ybScgJiZcbiAgICAgICAgdHlwZSAhPT0gJ3N1YmZsb3cnKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQWRqdXN0IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHN3aW1sYW5lXG4gICAgY29uc3QgYWRqdXN0ZWRZID0geSAtIHN3aW1sYW5lSW5kZXggKiAyNjMgLSA0MDsgLy8gU3VidHJhY3RpbmcgaGVhZGVyIGhlaWdodFxuXG4gICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgSURcbiAgICBjb25zdCBpZCA9IGAke3R5cGV9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gO1xuXG4gICAgLy8gQ3JlYXRlIG5vZGUgd2l0aCBkaW1lbnNpb25zIGJhc2VkIG9uIHR5cGVcbiAgICBjb25zdCBub2RlOiBOb2RlID0ge1xuICAgICAgaWQsXG4gICAgICB0eXBlLFxuICAgICAgeCxcbiAgICAgIHk6IGFkanVzdGVkWSxcbiAgICAgIHdpZHRoOiB0eXBlID09PSAnc3ViZmxvdycgPyAxNTAgOiAxNjksIC8vIFdpZHRoIGZyb20gU1ZHXG4gICAgICBoZWlnaHQ6IDEwMCwgLy8gSGVpZ2h0IGZyb20gU1ZHXG4gICAgICBpc1N0YXJ0Tm9kZTogZmFsc2UsIC8vIERlZmF1bHQgdG8gZmFsc2VcbiAgICAgIHN0YWdlRGF0YTogc3RhZ2VEYXRhIHx8IHt9LCAvLyBTdG9yZSBzdGFnZSBkYXRhXG4gICAgICB3b3JrZmxvd0RhdGE6IHdvcmtmbG93RGF0YSB8fCBudWxsLFxuICAgIH07XG5cbiAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBub2RlIGluIHRoZSBlbnRpcmUgd29ya2Zsb3csIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG5vZGVcbiAgICBpZiAodGhpcy5nZXROb2RlQ291bnQoKSA9PT0gMCkge1xuICAgICAgbm9kZS5pc1N0YXJ0Tm9kZSA9IHRydWU7XG4gICAgICB0aGlzLnN0YXJ0Tm9kZUlkID0gaWQ7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY29ubmVjdGlvbiBwb2ludHMgZm9yIHRoZSBub2RlXG4gICAgbm9kZS5jb25uZWN0aW9uUG9pbnRzID0gdGhpcy5nZW5lcmF0ZUNvbm5lY3Rpb25Qb2ludHMobm9kZSk7XG5cbiAgICAvLyBBZGQgbm9kZSB0byB0aGUgc3dpbWxhbmVcbiAgICBpZiAoIXRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdLm5vZGVzKSB7XG4gICAgICB0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5ub2RlcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5ub2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvLyBIZWxwZXIgdG8gZ2V0IHRvdGFsIG5vZGUgY291bnQgYWNyb3NzIGFsbCBzd2ltbGFuZXNcbiAgZ2V0Tm9kZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3dpbWxhbmVzLnJlZHVjZShcbiAgICAgIChjb3VudCwgc3dpbWxhbmUpID0+IGNvdW50ICsgKHN3aW1sYW5lLm5vZGVzPy5sZW5ndGggfHwgMCksXG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZpbmQgYSBub2RlIGJ5IElEICh1c2VmdWwgZm9yIGxhdGVyIG9wZXJhdGlvbnMpXG4gIGZpbmROb2RlQnlJZChpZDogc3RyaW5nKTogeyBub2RlOiBOb2RlOyBzd2ltbGFuZUluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zd2ltbGFuZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN3aW1sYW5lID0gdGhpcy5zd2ltbGFuZXNbaV07XG4gICAgICBjb25zdCBub2RlID0gc3dpbWxhbmUubm9kZXM/LmZpbmQoKG4pID0+IG4uaWQgPT09IGlkKTtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIHJldHVybiB7IG5vZGUsIHN3aW1sYW5lSW5kZXg6IGkgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGFydENvbm5lY3Rpb25EcmFnKFxuICAgIHBvaW50OiBDb25uZWN0aW9uUG9pbnQsXG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyLFxuICAgIGdsb2JhbFg6IG51bWJlcixcbiAgICBnbG9iYWxZOiBudW1iZXJcbiAgKSB7XG4gICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhID0ge1xuICAgICAgc291cmNlUG9pbnQ6IHBvaW50LFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogc3dpbWxhbmVJbmRleCxcbiAgICAgIHN0YXJ0WDogZ2xvYmFsWCxcbiAgICAgIHN0YXJ0WTogZ2xvYmFsWSxcbiAgICAgIGN1cnJlbnRYOiBnbG9iYWxYLFxuICAgICAgY3VycmVudFk6IGdsb2JhbFksXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZUNvbm5lY3Rpb25EcmFnKGN1cnJlbnRYOiBudW1iZXIsIGN1cnJlbnRZOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50KSB7XG4gICAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuY3VycmVudFggPSBjdXJyZW50WDtcbiAgICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5jdXJyZW50WSA9IGN1cnJlbnRZO1xuICAgIH1cbiAgfVxuXG4gIGVuZENvbm5lY3Rpb25EcmFnKCkge1xuICAgIGNvbnNvbGUubG9nKCdFbmRpbmcgY29ubmVjdGlvbiBkcmFnLCBjbGVhcmluZyBkYXRhJyk7XG4gICAgLy8gQ2xlYXIgZHJhZ2dpbmcgZGF0YVxuICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YSA9IHt9O1xuICB9XG5cbiAgaXNDb25uZWN0aW9uRHJhZ2dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50O1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvblBhdGhEYXRhKCk6IHtcbiAgICBzdGFydFg6IG51bWJlcjtcbiAgICBzdGFydFk6IG51bWJlcjtcbiAgICBlbmRYOiBudW1iZXI7XG4gICAgZW5kWTogbnVtYmVyO1xuICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHsgc291cmNlUG9pbnQsIHNvdXJjZVN3aW1sYW5lSW5kZXgsIGN1cnJlbnRYLCBjdXJyZW50WSB9ID1cbiAgICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZUJ5SWQoc291cmNlUG9pbnQubm9kZUlkKT8ubm9kZTtcblxuICAgIGlmICghbm9kZSB8fCBzb3VyY2VTd2ltbGFuZUluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IHBvaW50IGluIGdsb2JhbCBjb29yZGluYXRlc1xuICAgIGNvbnN0IHN0YXJ0WCA9IG5vZGUueCArIHNvdXJjZVBvaW50Lng7XG4gICAgY29uc3Qgc3RhcnRZID0gbm9kZS55ICsgc291cmNlUG9pbnQueSArIChzb3VyY2VTd2ltbGFuZUluZGV4ICogMjYzICsgNDApOyAvLyBBZGQgc3dpbWxhbmUgb2Zmc2V0XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRYLFxuICAgICAgc3RhcnRZLFxuICAgICAgZW5kWDogY3VycmVudFggPz8gc3RhcnRYLFxuICAgICAgZW5kWTogY3VycmVudFkgPz8gc3RhcnRZLFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleCxcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlQ29ubmVjdGlvbihcbiAgICB0YXJnZXROb2RlSWQ6IHN0cmluZyxcbiAgICB0YXJnZXRQb2ludElkOiBzdHJpbmcsXG4gICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogbnVtYmVyXG4gICk6IENvbm5lY3Rpb24gfCBudWxsIHtcbiAgICBjb25zdCB7IHNvdXJjZVBvaW50LCBzb3VyY2VTd2ltbGFuZUluZGV4IH0gPSB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGE7XG5cbiAgICBpZiAoIXNvdXJjZVBvaW50IHx8IHNvdXJjZVN3aW1sYW5lSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyBzb3VyY2UgZGF0YSBmb3IgY29ubmVjdGlvbicpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29ubmVjdGlvbjogQ29ubmVjdGlvbiA9IHtcbiAgICAgIGlkOiBgY29ubi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YCxcbiAgICAgIHNvdXJjZU5vZGVJZDogc291cmNlUG9pbnQubm9kZUlkLFxuICAgICAgdGFyZ2V0Tm9kZUlkOiB0YXJnZXROb2RlSWQsXG4gICAgICBzb3VyY2VQb2ludElkOiBzb3VyY2VQb2ludC5pZCxcbiAgICAgIHRhcmdldFBvaW50SWQ6IHRhcmdldFBvaW50SWQsXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogdGFyZ2V0U3dpbWxhbmVJbmRleCxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucy5wdXNoKGNvbm5lY3Rpb24pO1xuICAgIGNvbnNvbGUubG9nKCdDcmVhdGVkIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbik7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnQ29ubmVjdGlvbnMgYXJyYXkgbm93IGhhcycsXG4gICAgICB0aGlzLmNvbm5lY3Rpb25zLmxlbmd0aCxcbiAgICAgICdjb25uZWN0aW9ucydcbiAgICApO1xuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG5cbiAgLy8gQWRkIGEgbWV0aG9kIHRvIGdldCBjb25uZWN0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICBnZXRDb25uZWN0aW9uRGF0YShjb25uZWN0aW9uOiBDb25uZWN0aW9uKToge1xuICAgIHN0YXJ0WDogbnVtYmVyO1xuICAgIHN0YXJ0WTogbnVtYmVyO1xuICAgIGVuZFg6IG51bWJlcjtcbiAgICBlbmRZOiBudW1iZXI7XG4gICAgc291cmNlU3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgfSB8IG51bGwge1xuICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5maW5kTm9kZUJ5SWQoY29ubmVjdGlvbi5zb3VyY2VOb2RlSWQpO1xuICAgIGNvbnN0IHRhcmdldE5vZGVJbmZvID0gdGhpcy5maW5kTm9kZUJ5SWQoY29ubmVjdGlvbi50YXJnZXROb2RlSWQpO1xuXG4gICAgaWYgKCFzb3VyY2VOb2RlSW5mbyB8fCAhdGFyZ2V0Tm9kZUluZm8pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzb3VyY2VOb2RlSW5mby5ub2RlO1xuICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0YXJnZXROb2RlSW5mby5ub2RlO1xuXG4gICAgLy8gRmluZCBjb25uZWN0aW9uIHBvaW50c1xuICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gc291cmNlTm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgKHApID0+IHAuaWQgPT09IGNvbm5lY3Rpb24uc291cmNlUG9pbnRJZFxuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB0YXJnZXROb2RlLmNvbm5lY3Rpb25Qb2ludHM/LmZpbmQoXG4gICAgICAocCkgPT4gcC5pZCA9PT0gY29ubmVjdGlvbi50YXJnZXRQb2ludElkXG4gICAgKTtcblxuICAgIGlmICghc291cmNlUG9pbnQgfHwgIXRhcmdldFBvaW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgZ2xvYmFsIGNvb3JkaW5hdGVzXG4gICAgY29uc3Qgc3RhcnRYID0gc291cmNlTm9kZS54ICsgc291cmNlUG9pbnQueDtcbiAgICBjb25zdCBzdGFydFkgPVxuICAgICAgc291cmNlTm9kZS55ICtcbiAgICAgIHNvdXJjZVBvaW50LnkgK1xuICAgICAgKGNvbm5lY3Rpb24uc291cmNlU3dpbWxhbmVJbmRleCAqIDI2MyArIDQwKTtcblxuICAgIGNvbnN0IGVuZFggPSB0YXJnZXROb2RlLnggKyB0YXJnZXRQb2ludC54O1xuICAgIGNvbnN0IGVuZFkgPVxuICAgICAgdGFyZ2V0Tm9kZS55ICtcbiAgICAgIHRhcmdldFBvaW50LnkgK1xuICAgICAgKGNvbm5lY3Rpb24udGFyZ2V0U3dpbWxhbmVJbmRleCAqIDI2MyArIDQwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFgsXG4gICAgICBzdGFydFksXG4gICAgICBlbmRYLFxuICAgICAgZW5kWSxcbiAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IGNvbm5lY3Rpb24uc291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IGNvbm5lY3Rpb24udGFyZ2V0U3dpbWxhbmVJbmRleCxcbiAgICB9O1xuICB9XG5cbiAgLy8gQWRkIGEgbWV0aG9kIHRvIGNoZWNrIGlmIGEgY29ubmVjdGlvbiBpcyBhbGxvd2VkIGJhc2VkIG9uIG5vZGUgdHlwZXNcbiAgY2FuQ29ubmVjdChzb3VyY2VOb2RlVHlwZTogc3RyaW5nLCB0YXJnZXROb2RlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29ubmVjdGlvblJ1bGVzW3NvdXJjZU5vZGVUeXBlXT8uaW5jbHVkZXModGFyZ2V0Tm9kZVR5cGUpIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuXG4gIC8vIEFkZCBhIG1ldGhvZCB0byBnZXQgYWxsb3dlZCBub2RlIHR5cGVzIGZvciB0aGUgY3VycmVudCBkcmFnZ2luZyBjb25uZWN0aW9uXG4gIGdldEFsbG93ZWRUYXJnZXROb2RlVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLmZpbmROb2RlQnlJZChcbiAgICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludC5ub2RlSWRcbiAgICApO1xuICAgIGlmICghc291cmNlTm9kZUluZm8pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VOb2RlVHlwZSA9IHNvdXJjZU5vZGVJbmZvLm5vZGUudHlwZTtcblxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25SdWxlc1tzb3VyY2VOb2RlVHlwZV0gfHwgW107XG4gIH1cblxuICB1cGRhdGVTd2ltbGFuZShpbmRleDogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIHRhZ3M6IFRhZ1tdKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnU3RhdGU6IFVwZGF0aW5nIHN3aW1sYW5lIGF0IGluZGV4JyxcbiAgICAgIGluZGV4LFxuICAgICAgJ3dpdGggbmFtZScsXG4gICAgICBuYW1lLFxuICAgICAgJ2FuZCB0YWdzJyxcbiAgICAgIHRhZ3NcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3dpbWxhbmVzW2luZGV4XSA9IHtcbiAgICAgICAgLi4udGhpcy5zd2ltbGFuZXNbaW5kZXhdLFxuICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgdGFnczogdGFncyxcbiAgICAgIH07XG4gICAgICBjb25zb2xlLmxvZygnU3dpbWxhbmUgdXBkYXRlZDonLCB0aGlzLnN3aW1sYW5lc1tpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHN3aW1sYW5lIGluZGV4OicsIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICB0cmFuc2Zvcm1Ub1dvcmtmbG93TW9kZWwoKTogV29ya2Zsb3cge1xuICAgIC8vIENyZWF0ZSBiYXNlIHdvcmtmbG93IG9iamVjdFxuICAgIGNvbnN0IHdvcmtmbG93OiBXb3JrZmxvdyA9IHtcbiAgICAgIC8vIEJhc2VNb2RlbCBwcm9wZXJ0aWVzXG4gICAgICBJZDogdGhpcy53YXNMb2FkZWRGcm9tQXBpKHRoaXMud29ya2Zsb3dJZCB8fCAnJylcbiAgICAgICAgPyB0aGlzLndvcmtmbG93SWQgfHwgJydcbiAgICAgICAgOiAnJyxcbiAgICAgIENvZGU6IHRoaXMuZ2V0Q29kZUZvck9iamVjdCh0aGlzLndvcmtmbG93SWQgfHwgJycpLFxuICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgaWQ6IHRoaXMud2FzTG9hZGVkRnJvbUFwaSh0aGlzLndvcmtmbG93SWQgfHwgJycpXG4gICAgICAgID8gdGhpcy53b3JrZmxvd0lkIHx8ICcnXG4gICAgICAgIDogJycsXG4gICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICBEYXRhU3RhdGU6IHRoaXMud2FzTG9hZGVkRnJvbUFwaSh0aGlzLndvcmtmbG93SWQgfHwgJycpXG4gICAgICAgID8gT2JqZWN0U3RhdGUuQ2hhbmdlZFxuICAgICAgICA6IE9iamVjdFN0YXRlLk5ldyxcblxuICAgICAgLy8gV29ya2Zsb3cgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgTmFtZTogJ05ldyBXb3JrZmxvdycsIC8vIERlZmF1bHQgbmFtZVxuICAgICAgRGVzY3JpcHRpb246ICcnLCAvLyBEZWZhdWx0IGRlc2NyaXB0aW9uXG4gICAgICBTdGFnZUVudHJ5UnVsZTogJycsXG4gICAgICBGb3JtOiB0aGlzLndvcmtmbG93Rm9ybUlkIHx8IHVuZGVmaW5lZCxcbiAgICAgIEFzc2lnbm1lbnRUeXBlOiBUYXNrQXNzaWdubWVudFR5cGUuQXV0b1JvdXRlLFxuICAgICAgT3BlcmF0aW9uOiAnJyxcbiAgICAgIFN0YXR1czogU3RhdHVzLkFjdGl2ZSxcbiAgICAgIEFjdGlvbnM6IFtdLFxuICAgICAgTGFuZXM6IFtdLFxuICAgICAgU3RhZ2VzOiBbXSxcbiAgICB9O1xuXG4gICAgLy8gVHJhbnNmb3JtIHN3aW1sYW5lcyB0byBTd2ltTGFuZVtdXG4gICAgd29ya2Zsb3cuTGFuZXMgPSB0aGlzLnN3aW1sYW5lcy5tYXAoKHN3aW1sYW5lLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbGFuZUlkID0gYGxhbmUtJHtpbmRleH1gO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBCYXNlTW9kZWwgcHJvcGVydGllc1xuICAgICAgICBJZDogbGFuZUlkLFxuICAgICAgICBDb2RlOiB0aGlzLmdldENvZGVGb3JPYmplY3QobGFuZUlkKSxcbiAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICBpZDogbGFuZUlkLFxuICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBEYXRhU3RhdGU6IHRoaXMud2FzTG9hZGVkRnJvbUFwaShsYW5lSWQpXG4gICAgICAgICAgPyBPYmplY3RTdGF0ZS5DaGFuZ2VkXG4gICAgICAgICAgOiBPYmplY3RTdGF0ZS5OZXcsXG5cbiAgICAgICAgLy8gU3dpbUxhbmUgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgICBXb3JrZmxvdzogd29ya2Zsb3cuSWQsXG4gICAgICAgIFRhZ3M6IHN3aW1sYW5lLnRhZ3MgfHwgW10sXG4gICAgICAgIFBvc2l0aW9uOiBzd2ltbGFuZS5vcmRlcixcbiAgICAgICAgQ29vcmRpbmF0ZXM6IHsgWDogMCwgWTogc3dpbWxhbmUub3JkZXIgKiAyNjMgfSxcbiAgICAgICAgU2l6ZTogeyBXaWR0aDogMzAwMCwgSGVpZ2h0OiAyNjMgfSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gbm9kZXMgdG8gV29ya2Zsb3dTdGFnZVtdXG4gICAgY29uc3Qgc3RhZ2VzOiBXb3JrZmxvd1N0YWdlW10gPSBbXTtcblxuICAgIHRoaXMuc3dpbWxhbmVzLmZvckVhY2goKHN3aW1sYW5lLCBzd2ltbGFuZUluZGV4KSA9PiB7XG4gICAgICBzd2ltbGFuZS5ub2Rlcz8uZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGEgc3RhZ2UgZnJvbSB0aGUgbm9kZVxuICAgICAgICAgIGNvbnN0IHN0YWdlOiBXb3JrZmxvd1N0YWdlID0ge1xuICAgICAgICAgICAgLy8gQmFzZU1vZGVsIHByb3BlcnRpZXNcbiAgICAgICAgICAgIElkOiBub2RlLmlkLFxuICAgICAgICAgICAgQ29kZTogdGhpcy5nZXRDb2RlRm9yT2JqZWN0KG5vZGUuaWQpLFxuICAgICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBEYXRhU3RhdGU6IHRoaXMud2FzTG9hZGVkRnJvbUFwaShub2RlLmlkKVxuICAgICAgICAgICAgICA/IE9iamVjdFN0YXRlLkNoYW5nZWRcbiAgICAgICAgICAgICAgOiBPYmplY3RTdGF0ZS5OZXcsXG5cbiAgICAgICAgICAgIC8vIFdvcmtmbG93U3RhZ2Ugc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LklkLFxuICAgICAgICAgICAgTmFtZTogbm9kZS5zdGFnZURhdGE/Lk5hbWUgfHwgJ1VubmFtZWQgU3RhZ2UnLFxuICAgICAgICAgICAgRGVzY3JpcHRpb246IG5vZGUuc3RhZ2VEYXRhPy5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgIER1cmF0aW9uOiBub2RlLnN0YWdlRGF0YT8uRHVyYXRpb24gfHwgMCxcbiAgICAgICAgICAgIFBhc3NPblJ1bGU6IG5vZGUuc3RhZ2VEYXRhPy5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICAgICAgQWN0b3JSdWxlOiBub2RlLnN0YWdlRGF0YT8uQWN0b3JSdWxlIHx8IFN0YWdlQWN0b3JSdWxlLk5vbmUsXG4gICAgICAgICAgICBNaW5Ob09mQWN0b3I6IG5vZGUuc3RhZ2VEYXRhPy5NaW5Ob09mQWN0b3IgfHwgMCxcbiAgICAgICAgICAgIElzUGFyYWxsZWw6IG5vZGUuc3RhZ2VEYXRhPy5Jc1BhcmFsbGVsIHx8IGZhbHNlLFxuICAgICAgICAgICAgSXNFbnRyeVBvaW50OiBub2RlLmlzU3RhcnROb2RlLFxuICAgICAgICAgICAgSXNFeGl0UG9pbnQ6IGZhbHNlLCAvLyBXaWxsIGJlIHVwZGF0ZWQgYmVsb3dcbiAgICAgICAgICAgIFRhZ3M6IG5vZGUuc3RhZ2VEYXRhPy5UYWdzIHx8IFtdLFxuICAgICAgICAgICAgRm9ybXM6IG5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgPyBbbm9kZS5zdGFnZURhdGEuZm9ybUlkXSA6IFtdLFxuICAgICAgICAgICAgQWxsb3dNdWx0aVN1YlByb2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgICAgICBTdWJXb3JrRmxvdzogJycsXG4gICAgICAgICAgICBTd2ltTGFuZTogd29ya2Zsb3cuTGFuZXNbc3dpbWxhbmVJbmRleF0uSWQsXG4gICAgICAgICAgICBDb29yZGluYXRlczogeyBYOiBub2RlLngsIFk6IG5vZGUueSB9LFxuICAgICAgICAgICAgSXNTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIEtleTogbm9kZS5zdGFnZURhdGE/LktleSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHN0YWdlcy5wdXNoKHN0YWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc3RhZ2VzIGFyZSBleGl0IHBvaW50cyAobm8gb3V0Z29pbmcgY29ubmVjdGlvbnMpXG4gICAgc3RhZ2VzLmZvckVhY2goKHN0YWdlKSA9PiB7XG4gICAgICBjb25zdCBoYXNPdXRnb2luZ0Nvbm5lY3Rpb25zID0gdGhpcy5jb25uZWN0aW9ucy5zb21lKFxuICAgICAgICAoY29ubikgPT4gY29ubi5zb3VyY2VOb2RlSWQgPT09IHN0YWdlLklkXG4gICAgICApO1xuICAgICAgaWYgKCFoYXNPdXRnb2luZ0Nvbm5lY3Rpb25zKSB7XG4gICAgICAgIHN0YWdlLklzRXhpdFBvaW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRyYW5zZm9ybSBjb25uZWN0aW9ucyB0byBXb3JrZmxvd0FjdGlvbltdXG4gICAgd29ya2Zsb3cuQWN0aW9ucyA9IHRoaXMuY29ubmVjdGlvbnMubWFwKChjb25uKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VOb2RlID0gdGhpcy5maW5kTm9kZUJ5SWQoY29ubi5zb3VyY2VOb2RlSWQpPy5ub2RlO1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKT8ubm9kZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gQmFzZU1vZGVsIHByb3BlcnRpZXNcbiAgICAgICAgSWQ6IGNvbm4uaWQsXG4gICAgICAgIENvZGU6IHRoaXMuZ2V0Q29kZUZvck9iamVjdChjb25uLmlkKSxcbiAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICBpZDogY29ubi5pZCxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiB0aGlzLndhc0xvYWRlZEZyb21BcGkoY29ubi5pZClcbiAgICAgICAgICA/IE9iamVjdFN0YXRlLkNoYW5nZWRcbiAgICAgICAgICA6IE9iamVjdFN0YXRlLk5ldyxcblxuICAgICAgICAvLyBXb3JrZmxvd0FjdGlvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgICAgIFdvcmtmbG93OiB3b3JrZmxvdy5JZCxcbiAgICAgICAgTmFtZTogYEFjdGlvbiBmcm9tICR7c291cmNlTm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ30gdG8gJHtcbiAgICAgICAgICB0YXJnZXROb2RlPy5zdGFnZURhdGE/Lk5hbWUgfHwgJ1Vua25vd24nXG4gICAgICAgIH1gLFxuICAgICAgICBGcm9tU3RhZ2U6IGNvbm4uc291cmNlTm9kZUlkLFxuICAgICAgICBUb1N0YWdlOiBjb25uLnRhcmdldE5vZGVJZCxcbiAgICAgICAgSXNQYXJhbGxlbDogc291cmNlTm9kZT8uc3RhZ2VEYXRhPy5oYXNQYXJhbGxlbCB8fCBmYWxzZSxcbiAgICAgICAgUGFzc09uUnVsZTogJycsIC8vIE9wdGlvbmFsIHByb3BlcnR5XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgd29ya2Zsb3cuU3RhZ2VzID0gc3RhZ2VzO1xuXG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgLy8gQWRkIGEgbmV3IHByb3BlcnR5IHRvIHRyYWNrIGxvYWRlZCBvYmplY3RzXG4gIGxvYWRlZE9iamVjdElkczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9OyAvLyBGb3JtYXQ6IHsgaWQ6IGNvZGUgfVxuXG4gIC8vIEFkZCBhIG1ldGhvZCB0byByZWdpc3RlciBsb2FkZWQgb2JqZWN0c1xuICByZWdpc3RlckxvYWRlZE9iamVjdChpZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlZE9iamVjdElkc1tpZF0gPSBjb2RlO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGNoZWNrIGlmIGFuIG9iamVjdCB3YXMgbG9hZGVkIGZyb20gQVBJXG4gIHdhc0xvYWRlZEZyb21BcGkoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpZCBpbiB0aGlzLmxvYWRlZE9iamVjdElkcztcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBnZXQgdGhlIGNvZGUgZm9yIGEgbG9hZGVkIG9iamVjdFxuICBnZXRDb2RlRm9yT2JqZWN0KGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvYWRlZE9iamVjdElkc1tpZF0gfHwgJyc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMvV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VNb2RlbCB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi9Gb3JtJztcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gJy4vc3RhdHVzJztcbmltcG9ydCB7IFN3aW1MYW5lIH0gZnJvbSAnLi9Td2ltTGFuZSc7XG5pbXBvcnQgeyBUYXNrQXNzaWdubWVudFR5cGUgfSBmcm9tICcuL1Rhc2tBc3NpZ25tZW50VHlwZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0FjdGlvbiB9IGZyb20gJy4vV29ya2Zsb3dBY3Rpb24nO1xuaW1wb3J0IHsgV29ya2Zsb3dTdGFnZSB9IGZyb20gJy4vV29ya2Zsb3dTdGFnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3cgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICBOYW1lOiBzdHJpbmc7XG4gIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIFN0YWdlRW50cnlSdWxlOiBzdHJpbmc7XG4gIEZvcm0/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMvV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VNb2RlbCB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi9Gb3JtJztcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gJy4vc3RhdHVzJztcbmltcG9ydCB7IFN3aW1MYW5lIH0gZnJvbSAnLi9Td2ltTGFuZSc7XG5pbXBvcnQgeyBUYXNrQXNzaWdubWVudFR5cGUgfSBmcm9tICcuL1Rhc2tBc3NpZ25tZW50VHlwZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0FjdGlvbiB9IGZyb20gJy4vV29ya2Zsb3dBY3Rpb24nO1xuaW1wb3J0IHsgV29ya2Zsb3dTdGFnZSB9IGZyb20gJy4vV29ya2Zsb3dTdGFnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3cgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICBOYW1lOiBzdHJpbmc7XG4gIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIFN0YWdlRW50cnlSdWxlOiBzdHJpbmc7XG4gIEZvcm0/OiBGb3JtWydJZCddO1xuICBGb3JtTmFtZT86IHN0cmluZztcbiAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZTtcbiAgT3BlcmF0aW9uPzogc3RyaW5nO1xuICBTdGF0dXM6IFN0YXR1cztcbiAgQWN0aW9uczogV29ya2Zsb3dBY3Rpb25bXTtcbiAgTGFuZXM6IFN3aW1MYW5lW107XG4gIFN0YWdlczogV29ya2Zsb3dTdGFnZVtdO1xufVxuIl19
|
|
@@ -18,7 +18,7 @@ export class HttpWebRequestService {
|
|
|
18
18
|
buildHeaders() {
|
|
19
19
|
return {
|
|
20
20
|
'Content-Type': 'application/json',
|
|
21
|
-
Authorization: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
|
|
21
|
+
Authorization: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJNYWlsQWRkcmVzcyI6InZlcmJlbmFAZ21haWwuY29tIiwiQXBwbGljYXRpb24iOiIiLCJOYW1lIjoiVmVyYmVuYSBMb2dpYyBMaW1pdGVkIiwiUm9sZUlEIjoiUk9MLVpYQVhYVCIsIlRlbmFudElkIjoiUERMVEM2IiwiU2VydmljZU5hbWUiOiJXaGl0ZTM2MCIsIkNvbXBhbnkiOiIiLCJuYmYiOjE3NDEwODE0NDcsImV4cCI6MTc0MTI5NzQ0NywiaWF0IjoxNzQxMDgxNDQ3fQ.u0ZkTg7mSHnPGjAIRwJxN1i1vjaRf1_F8mih9fbgQm0',
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
buildUrl(url, baseUrl) {
|
|
@@ -82,4 +82,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
82
82
|
providedIn: 'root',
|
|
83
83
|
}]
|
|
84
84
|
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.EnvironmentService }, { type: i3.NotificationService }] });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC13ZWItcmVxdWVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvc2VydmljZXMvaHR0cC13ZWItcmVxdWVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7OztBQU94RCxNQUFNLE9BQU8scUJBQXFCO0lBSXRCO0lBQ0E7SUFDQTtJQUxWLE1BQU0sQ0FBVTtJQUVoQixZQUNVLElBQWdCLEVBQ2hCLE1BQTBCLEVBQzFCLG1CQUF3QztRQUZ4QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBQzFCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFFaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7SUFDbkQsQ0FBQztJQUVPLFlBQVk7UUFDbEIsT0FBTztZQUNMLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsYUFBYSxFQUNYLGlYQUFpWDtTQUNwWCxDQUFDO0lBQ0osQ0FBQztJQUVPLFFBQVEsQ0FBQyxHQUFXLEVBQUUsT0FBZTtRQUMzQyxPQUFPLEdBQUcsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBUTtRQUMxQixNQUFNLEdBQUcsR0FDUCxHQUFHLEVBQUUsUUFBUTtZQUNaLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBbUIsRUFBRSxRQUFRLEVBQUU7WUFDN0MsZ0JBQWdCLENBQUM7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENB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RSxDQUFDO0lBRUQsTUFBTSxDQUFJLEdBQVcsRUFBRSxPQUFnQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFrQixDQUFDO0lBQzFFLENBQUM7d0dBbkdVLHFCQUFxQjs0R0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy9FcnJvclJlc3BvbnNlJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4vZW52aXJvbm1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAndmVyYmVuLW5nLXVpJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEh0dHBXZWJSZXF1ZXN0U2VydmljZSB7XG4gIGlzUHJvZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pc1Byb2QgPSB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBBdXRob3JpemF0aW9uOlxuICAgICAgICAnZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5Sk5ZV2xzUVdSa2NtVnpjeUk2SW5abGNtSmxibUZBWjIxaGFXd3VZMjl0SWl3aVFYQndiR2xqWVhScGIyNGlPaUlpTENKT1lXMWxJam9pVm1WeVltVnVZU0JNYjJkcFl5Qk1hVzFwZEdWa0lpd2lVbTlzWlVsRUlqb2lVazlNTFZwWVFWaFlWQ0lzSWxSbGJtRnVkRWxrSWpvaVVFUk1WRU0ySWl3aVUyVnlkbWxqWlU1aGJXVWlPaUpYYUdsMFpUTTJNQ0lzSWtOdmJYQmhibmtpT2lJaUxDSnVZbVlpT2pFM05ERXdPREUwTkRjc0ltVjRjQ0k2TVRjME1USTVOelEwTnl3aWFXRjBJam94TnpReE1EZ3hORFEzZlEudTBaa1RnN21TSG5QR2pBSVJ3SnhOMWkxdmphUmYxX0Y4bWloOWZiZ1FtMCcsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwodXJsOiBzdHJpbmcsIGJhc2VVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7dXJsfWA7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycjogYW55KTogRXJyb3JSZXNwb25zZSB7XG4gICAgY29uc3QgbXNnID1cbiAgICAgIGVycj8uRXJyb3JNc2cgfHxcbiAgICAgIChlcnI/LmVycm9ycz8udmFsdWVzIGFzIHN0cmluZ1tdKT8udG9TdHJpbmcoKSB8fFxuICAgICAgYEVycm9yIG9jY3VycmVkYDtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IobXNnLCB7IHRpbWVvdXQ6IDEwMDAwIH0pO1xuICAgIHJldHVybiBuZXcgRXJyb3JSZXNwb25zZShtc2cpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0PFQ+KFxuICAgIG1ldGhvZDogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdERUxFVEUnLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBhbnksXG4gICAgYmFzZVVybDogc3RyaW5nID0gdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgKTogUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiB0aGlzLmJ1aWxkSGVhZGVycygpLFxuICAgIH07XG5cbiAgICBjb25zdCByZXF1ZXN0VXJsID0gdGhpcy5idWlsZFVybCh1cmwsIGJhc2VVcmwpO1xuXG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ0dFVCc6XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0PFQ+KHJlcXVlc3RVcmwsIG9wdGlvbnMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiByZXNvbHZlLFxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHJlc29sdmUodGhpcy5oYW5kbGVFcnJvcihlcnIpIGFzIFQpLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICBjYXNlICdQT1NUJzpcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgIHRoaXMuaHR0cC5wb3N0PFQ+KHJlcXVlc3RVcmwsIGJvZHksIG9wdGlvbnMpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiByZXNvbHZlLFxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHJlc29sdmUodGhpcy5oYW5kbGVFcnJvcihlcnIpIGFzIFQpLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICBjYXNlICdQVVQnOlxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxUPihyZXF1ZXN0VXJsLCBib2R5LCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ0RFTEVURSc6XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFQ+KHJlcXVlc3RVcmwsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldDxUPih1cmw6IHN0cmluZywgYmFzZVVybD86IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0dFVCcsIHVybCwgdW5kZWZpbmVkLCBiYXNlVXJsKSBhcyBQcm9taXNlPFQ+O1xuICB9XG5cbiAgcG9zdDxUPih1cmw6IHN0cmluZywgYm9keTogYW55LCBiYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgICdQT1NUJyxcbiAgICAgIHVybCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgYmFzZVVybFxuICAgICkgYXMgUHJvbWlzZTxUPjtcbiAgfVxuXG4gIHBvc3RGaWxlPFQ+KHVybDogc3RyaW5nLCBmb3JtRGF0YTogRm9ybURhdGEsIGJhc2VVcmw/OiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBvc3Q8VD4oXG4gICAgICAgICAgdGhpcy5idWlsZFVybCh1cmwsIGJhc2VVcmwgfHwgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUEkpLFxuICAgICAgICAgIGZvcm1EYXRhXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogcmVzb2x2ZSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4gcmVzb2x2ZSh0aGlzLmhhbmRsZUVycm9yKGVycikgYXMgVCksXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1dDxUPih1cmw6IHN0cmluZywgYm9keTogYW55LCBiYXNlVXJsPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUFVUJywgdXJsLCBib2R5LCBiYXNlVXJsKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9XG5cbiAgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBiYXNlVXJsPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnREVMRVRFJywgdXJsLCB1bmRlZmluZWQsIGJhc2VVcmwpIGFzIE9ic2VydmFibGU8VD47XG4gIH1cbn1cbiJdfQ==
|