@dontirun/state-machine-semaphore 0.0.1 → 0.1.2
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/.gitattributes +1 -0
- package/.jsii +151 -92
- package/API.md +183 -63
- package/README.md +28 -34
- package/lib/index.d.ts +40 -19
- package/lib/index.js +79 -69
- package/package.json +3 -3
package/lib/index.js
CHANGED
|
@@ -1,64 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
4
|
+
exports.Semaphore = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
7
|
const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
|
|
8
8
|
const aws_stepfunctions_1 = require("aws-cdk-lib/aws-stepfunctions");
|
|
9
9
|
const aws_stepfunctions_tasks_1 = require("aws-cdk-lib/aws-stepfunctions-tasks");
|
|
10
|
-
const constructs_1 = require("constructs");
|
|
11
10
|
/**
|
|
12
|
-
*
|
|
13
|
-
* Call `generateSemaphoredJob` to generate semaphored jobs.
|
|
11
|
+
* Generates a semaphore for a StepFunction job (or chained set of jobs) to limit parallelism across executions.
|
|
14
12
|
*/
|
|
15
|
-
class
|
|
13
|
+
class Semaphore extends aws_stepfunctions_1.StateMachineFragment {
|
|
16
14
|
constructor(scope, id, props) {
|
|
17
15
|
super(scope, id);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
writeCapacity: props?.tableReadWriteCapacity?.writeCapacity,
|
|
26
|
-
billingMode: props?.tableReadWriteCapacity ? aws_dynamodb_1.BillingMode.PROVISIONED : aws_dynamodb_1.BillingMode.PAY_PER_REQUEST,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Generates a semaphore for a StepFunction job (or chained set of jobs) to limit parallelism across executions.
|
|
31
|
-
* @param lockName The name of the semaphore.
|
|
32
|
-
* @param limit The maximum number of concurrent executions for the given lock.
|
|
33
|
-
* @param job The job (or chained jobs) to be semaphored.
|
|
34
|
-
* @param nextState The State to go to after the semaphored job completes.
|
|
35
|
-
* @param reuseLock Explicility allow the reuse of a named lock from a previously generated job. Throws an error if a different `limit` is specified. Default: false.
|
|
36
|
-
* @param comments Adds detailed comments to lock related states. Significantly increases CloudFormation template size. Default: false.
|
|
37
|
-
* @returns A StateMachineFragment that can chained to other states in the State Machine.
|
|
38
|
-
*/
|
|
39
|
-
generateSemaphoredJob(lockName, limit, job, nextState, reuseLock, comments) {
|
|
40
|
-
let lockInfo = this.semaphoreTracker.get(lockName);
|
|
16
|
+
/**
|
|
17
|
+
* The DynamoDB table used to store semaphores.
|
|
18
|
+
*/
|
|
19
|
+
this.tableName = 'StateMachineSempahoreTable920751a65a584e8ab7583460f6db686a';
|
|
20
|
+
const stackTracker = this.setUpMap();
|
|
21
|
+
this.semaphoreTable = this.ensureTable(props);
|
|
22
|
+
let lockInfo = stackTracker.get(props.lockName);
|
|
41
23
|
if (lockInfo) {
|
|
42
|
-
if (reuseLock) {
|
|
43
|
-
if (lockInfo.limit != limit) {
|
|
44
|
-
throw new Error(`The reused \`lockName\` "${lockName}" was given a different \`limit\` than previously defined. Given: ${limit}, Previous: ${lockInfo.limit}.`);
|
|
24
|
+
if (props.reuseLock) {
|
|
25
|
+
if (lockInfo.limit != props.limit) {
|
|
26
|
+
throw new Error(`The reused \`lockName\` "${props.lockName}" was given a different \`limit\` than previously defined. Given: ${props.limit}, Previous: ${lockInfo.limit}.`);
|
|
45
27
|
}
|
|
46
28
|
else {
|
|
47
29
|
lockInfo = { limit: lockInfo.limit, timesUsed: lockInfo.timesUsed + 1 };
|
|
48
|
-
|
|
30
|
+
stackTracker.set(props.lockName, lockInfo);
|
|
49
31
|
}
|
|
50
32
|
}
|
|
51
33
|
else {
|
|
52
|
-
throw new Error(`The \`lockName\` "${lockName}" was reused without explicitly allowing reuse. Set \`reuseLock\` to \`true\` if you want to reuse the lock.`);
|
|
34
|
+
throw new Error(`The \`lockName\` "${props.lockName}" was reused without explicitly allowing reuse. Set \`reuseLock\` to \`true\` if you want to reuse the lock.`);
|
|
53
35
|
}
|
|
54
36
|
}
|
|
55
37
|
else {
|
|
56
|
-
lockInfo = { limit: limit, timesUsed: 1 };
|
|
57
|
-
|
|
38
|
+
lockInfo = { limit: props.limit, timesUsed: 1 };
|
|
39
|
+
stackTracker.set(props.lockName, lockInfo);
|
|
58
40
|
}
|
|
59
|
-
const getLock = new aws_stepfunctions_1.Parallel(this, `Get ${lockName} Lock: ${lockInfo.timesUsed}`, { resultPath: aws_stepfunctions_1.JsonPath.DISCARD });
|
|
60
|
-
const acquireLock = new aws_stepfunctions_tasks_1.DynamoUpdateItem(this, `Acquire ${lockName} Lock: ${lockInfo.timesUsed}`, {
|
|
61
|
-
comment: comments ? `Acquire a lock using a conditional update to DynamoDB. This update will do two things:
|
|
41
|
+
const getLock = new aws_stepfunctions_1.Parallel(this, `Get ${props.lockName} Lock: ${lockInfo.timesUsed}`, { resultPath: aws_stepfunctions_1.JsonPath.DISCARD });
|
|
42
|
+
const acquireLock = new aws_stepfunctions_tasks_1.DynamoUpdateItem(this, `Acquire ${props.lockName} Lock: ${lockInfo.timesUsed}`, {
|
|
43
|
+
comment: props.comments ? `Acquire a lock using a conditional update to DynamoDB. This update will do two things:
|
|
62
44
|
1) increment a counter for the number of held locks
|
|
63
45
|
2) add an attribute to the DynamoDB Item with a unique key for this execution and with a value of the time when the lock was Acquired
|
|
64
46
|
The Update includes a conditional expression that will fail under two circumstances:
|
|
@@ -69,14 +51,14 @@ class SemaphoreGenerator extends constructs_1.Construct {
|
|
|
69
51
|
so the update will fail with DynamoDB.AmazonDynamoDBException. In that case, this state sends the workflow to state that will create that row to initialize.
|
|
70
52
|
` : undefined,
|
|
71
53
|
table: this.semaphoreTable,
|
|
72
|
-
key: { LockName: aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(lockName) },
|
|
54
|
+
key: { LockName: aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(props.lockName) },
|
|
73
55
|
expressionAttributeNames: {
|
|
74
56
|
'#currentlockcount': 'currentlockcount',
|
|
75
57
|
'#lockownerid.$': '$$.Execution.Id',
|
|
76
58
|
},
|
|
77
59
|
expressionAttributeValues: {
|
|
78
60
|
':increase': aws_stepfunctions_tasks_1.DynamoAttributeValue.fromNumber(1),
|
|
79
|
-
':limit': aws_stepfunctions_tasks_1.DynamoAttributeValue.fromNumber(limit),
|
|
61
|
+
':limit': aws_stepfunctions_tasks_1.DynamoAttributeValue.fromNumber(props.limit),
|
|
80
62
|
':lockacquiredtime': aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(aws_stepfunctions_1.JsonPath.stringAt('$$.State.EnteredTime')),
|
|
81
63
|
},
|
|
82
64
|
updateExpression: 'SET #currentlockcount = #currentlockcount + :increase, #lockownerid = :lockacquiredtime',
|
|
@@ -84,27 +66,27 @@ class SemaphoreGenerator extends constructs_1.Construct {
|
|
|
84
66
|
returnValues: aws_stepfunctions_tasks_1.DynamoReturnValues.UPDATED_NEW,
|
|
85
67
|
resultPath: '$.lockinfo.acquirelock',
|
|
86
68
|
});
|
|
87
|
-
const initializeLockItem = new aws_stepfunctions_tasks_1.DynamoPutItem(this, `Initialize ${lockName} Lock Item: ${lockInfo.timesUsed}`, {
|
|
88
|
-
comment: comments ? `This state handles the case where an item hasn't been created for this lock yet. \
|
|
69
|
+
const initializeLockItem = new aws_stepfunctions_tasks_1.DynamoPutItem(this, `Initialize ${props.lockName} Lock Item: ${lockInfo.timesUsed}`, {
|
|
70
|
+
comment: props.comments ? `This state handles the case where an item hasn't been created for this lock yet. \
|
|
89
71
|
In that case, it will insert an initial item that includes the lock name as the key and currentlockcount of 0. \
|
|
90
72
|
The Put to DynamoDB includes a conditonal expression to fail if the an item with that key already exists, which avoids a race condition if multiple executions start at the same time. \
|
|
91
73
|
There are other reasons that the previous state could fail and end up here, so this is safe in those cases too.` : undefined,
|
|
92
74
|
table: this.semaphoreTable,
|
|
93
75
|
item: {
|
|
94
|
-
LockName: aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(lockName),
|
|
76
|
+
LockName: aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(props.lockName),
|
|
95
77
|
currentlockcount: aws_stepfunctions_tasks_1.DynamoAttributeValue.fromNumber(0),
|
|
96
78
|
},
|
|
97
79
|
conditionExpression: 'LockName <> :lockname',
|
|
98
80
|
expressionAttributeValues: {
|
|
99
|
-
':lockname': aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(lockName),
|
|
81
|
+
':lockname': aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(props.lockName),
|
|
100
82
|
},
|
|
101
83
|
resultPath: aws_stepfunctions_1.JsonPath.DISCARD,
|
|
102
84
|
});
|
|
103
|
-
const getCurrentLockRecord = new aws_stepfunctions_tasks_1.DynamoGetItem(this, `Get Current ${lockName} Lock Record: ${lockInfo.timesUsed}`, {
|
|
104
|
-
comment: comments ? 'This state is called when the execution is unable to acquire a lock because there limit has either been exceeded or because this execution already holds a lock. \
|
|
85
|
+
const getCurrentLockRecord = new aws_stepfunctions_tasks_1.DynamoGetItem(this, `Get Current ${props.lockName} Lock Record: ${lockInfo.timesUsed}`, {
|
|
86
|
+
comment: props.comments ? 'This state is called when the execution is unable to acquire a lock because there limit has either been exceeded or because this execution already holds a lock. \
|
|
105
87
|
In that case, this task loads info from DDB for the current lock item so that the right decision can be made in subsequent states.' : undefined,
|
|
106
88
|
table: this.semaphoreTable,
|
|
107
|
-
key: { LockName: aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(lockName) },
|
|
89
|
+
key: { LockName: aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(props.lockName) },
|
|
108
90
|
expressionAttributeNames: { '#lockownerid.$': '$$.Execution.Id' },
|
|
109
91
|
projectionExpression: [new aws_stepfunctions_tasks_1.DynamoProjectionExpression().withAttribute('#lockownerid')],
|
|
110
92
|
resultSelector: {
|
|
@@ -113,15 +95,15 @@ class SemaphoreGenerator extends constructs_1.Construct {
|
|
|
113
95
|
},
|
|
114
96
|
resultPath: '$.lockinfo.currentlockitem',
|
|
115
97
|
});
|
|
116
|
-
const checkIfLockAcquired = new aws_stepfunctions_1.Choice(this, `Check if ${lockName} Lock Already Acquired: ${lockInfo.timesUsed}`, {
|
|
117
|
-
comment: comments ? `This state checks to see if the current execution already holds a lock. It can tell that by looking for Z, which will be indicative of the timestamp value. \
|
|
98
|
+
const checkIfLockAcquired = new aws_stepfunctions_1.Choice(this, `Check if ${props.lockName} Lock Already Acquired: ${lockInfo.timesUsed}`, {
|
|
99
|
+
comment: props.comments ? `This state checks to see if the current execution already holds a lock. It can tell that by looking for Z, which will be indicative of the timestamp value. \
|
|
118
100
|
That will only be there in the stringified version of the data returned from DDB if this execution holds a lock.` : undefined,
|
|
119
101
|
});
|
|
120
|
-
const continueBecauseLockWasAlreadyAcquired = new aws_stepfunctions_1.Pass(this, `Continue Because ${lockName} Lock Was Already Acquired: ${lockInfo.timesUsed}`, {
|
|
121
|
-
comment: comments ? 'In this state, we have confimed that lock is already held, so we pass the original execution input into the the function that does the work.' : undefined,
|
|
102
|
+
const continueBecauseLockWasAlreadyAcquired = new aws_stepfunctions_1.Pass(this, `Continue Because ${props.lockName} Lock Was Already Acquired: ${lockInfo.timesUsed}`, {
|
|
103
|
+
comment: props.comments ? 'In this state, we have confimed that lock is already held, so we pass the original execution input into the the function that does the work.' : undefined,
|
|
122
104
|
});
|
|
123
|
-
const waitToGetLock = new aws_stepfunctions_1.Wait(this, `Wait to Get ${lockName} Lock: ${lockInfo.timesUsed}`, {
|
|
124
|
-
comment: comments ? 'If the lock indeed not been succesfully Acquired, then wait for a bit before trying again.' : undefined,
|
|
105
|
+
const waitToGetLock = new aws_stepfunctions_1.Wait(this, `Wait to Get ${props.lockName} Lock: ${lockInfo.timesUsed}`, {
|
|
106
|
+
comment: props.comments ? 'If the lock indeed not been succesfully Acquired, then wait for a bit before trying again.' : undefined,
|
|
125
107
|
time: aws_stepfunctions_1.WaitTime.duration(aws_cdk_lib_1.Duration.seconds(3)),
|
|
126
108
|
});
|
|
127
109
|
acquireLock.addRetry({ errors: ['DynamoDB.AmazonDynamoDBException'], maxAttempts: 0 })
|
|
@@ -133,9 +115,9 @@ class SemaphoreGenerator extends constructs_1.Construct {
|
|
|
133
115
|
checkIfLockAcquired.when(aws_stepfunctions_1.Condition.and(aws_stepfunctions_1.Condition.isPresent('$.lockinfo.currentlockitem.ItemString'), aws_stepfunctions_1.Condition.stringMatches('$.lockinfo.currentlockitem.ItemString', '*Z')), continueBecauseLockWasAlreadyAcquired);
|
|
134
116
|
checkIfLockAcquired.otherwise(waitToGetLock);
|
|
135
117
|
waitToGetLock.next(acquireLock);
|
|
136
|
-
const releaseLock = new aws_stepfunctions_tasks_1.DynamoUpdateItem(this, `Release ${lockName} Lock: ${lockInfo.timesUsed}`, {
|
|
118
|
+
const releaseLock = new aws_stepfunctions_tasks_1.DynamoUpdateItem(this, `Release ${props.lockName} Lock: ${lockInfo.timesUsed}`, {
|
|
137
119
|
table: this.semaphoreTable,
|
|
138
|
-
key: { LockName: aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(lockName) },
|
|
120
|
+
key: { LockName: aws_stepfunctions_tasks_1.DynamoAttributeValue.fromString(props.lockName) },
|
|
139
121
|
expressionAttributeNames: {
|
|
140
122
|
'#currentlockcount': 'currentlockcount',
|
|
141
123
|
'#lockownerid.$': '$$.Execution.Id',
|
|
@@ -150,22 +132,50 @@ class SemaphoreGenerator extends constructs_1.Construct {
|
|
|
150
132
|
});
|
|
151
133
|
releaseLock.addRetry({ errors: ['DynamoDB.ConditionalCheckFailedException'], maxAttempts: 0 })
|
|
152
134
|
.addRetry({ maxAttempts: 5, backoffRate: 1.5 })
|
|
153
|
-
.addCatch(nextState, { errors: ['DynamoDB.ConditionalCheckFailedException'], resultPath: '$.lockinfo.acquisitionerror' })
|
|
154
|
-
.next(nextState);
|
|
135
|
+
.addCatch(props.nextState, { errors: ['DynamoDB.ConditionalCheckFailedException'], resultPath: '$.lockinfo.acquisitionerror' })
|
|
136
|
+
.next(props.nextState);
|
|
155
137
|
getLock.branch(acquireLock);
|
|
156
|
-
getLock.endStates.forEach(j => j.next(job));
|
|
157
|
-
job.next(releaseLock);
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
138
|
+
getLock.endStates.forEach(j => j.next(props.job));
|
|
139
|
+
props.job.next(releaseLock);
|
|
140
|
+
this.startState = getLock;
|
|
141
|
+
this.endStates = props.nextState.endStates;
|
|
142
|
+
}
|
|
143
|
+
setUpMap() {
|
|
144
|
+
const stackId = aws_cdk_lib_1.Names.uniqueId(aws_cdk_lib_1.Stack.of(this));
|
|
145
|
+
const existing = aws_cdk_lib_1.Stack.of(this).node.tryFindChild(this.tableName);
|
|
146
|
+
if (existing) {
|
|
147
|
+
return (Semaphore.semaphoreTracker.get(stackId));
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
const m = new Map();
|
|
151
|
+
Semaphore.semaphoreTracker.set(stackId, m);
|
|
152
|
+
return m;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
ensureTable(props) {
|
|
156
|
+
const existing = aws_cdk_lib_1.Stack.of(this).node.tryFindChild(this.tableName);
|
|
157
|
+
if (existing) {
|
|
158
|
+
// Just assume this is true
|
|
159
|
+
return existing;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
return new aws_dynamodb_1.Table(aws_cdk_lib_1.Stack.of(this), this.tableName, {
|
|
163
|
+
partitionKey: {
|
|
164
|
+
name: 'LockName',
|
|
165
|
+
type: aws_dynamodb_1.AttributeType.STRING,
|
|
166
|
+
},
|
|
167
|
+
readCapacity: props.tableReadWriteCapacity?.readCapacity,
|
|
168
|
+
writeCapacity: props.tableReadWriteCapacity?.writeCapacity,
|
|
169
|
+
billingMode: props.tableReadWriteCapacity ? aws_dynamodb_1.BillingMode.PROVISIONED : aws_dynamodb_1.BillingMode.PAY_PER_REQUEST,
|
|
170
|
+
});
|
|
164
171
|
}
|
|
165
|
-
return new SemaphoredJob(this, `${lockName}${lockInfo.timesUsed}`);
|
|
166
172
|
}
|
|
167
173
|
}
|
|
168
|
-
exports.
|
|
174
|
+
exports.Semaphore = Semaphore;
|
|
169
175
|
_a = JSII_RTTI_SYMBOL_1;
|
|
170
|
-
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBdUM7QUFDdkMsMkRBQTZFO0FBQzdFLHFFQUFnSztBQUNoSyxpRkFBMks7QUFDM0ssMkNBQXVDO0FBNEJ2Qzs7O0dBR0c7QUFDSCxNQUFhLGtCQUFtQixTQUFRLHNCQUFTO0lBWS9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDdkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLG9CQUFLLENBQUMsSUFBSSxFQUFFLDRCQUE0QixFQUFFO1lBQ2xFLFlBQVksRUFBRTtnQkFDWixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFLDRCQUFhLENBQUMsTUFBTTthQUMzQjtZQUNELFlBQVksRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsWUFBWTtZQUN6RCxhQUFhLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLGFBQWE7WUFDM0QsV0FBVyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsMEJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUFXLENBQUMsZUFBZTtTQUNuRyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBQ0Q7Ozs7Ozs7OztPQVNHO0lBQ0kscUJBQXFCLENBQzFCLFFBQWdCLEVBQUUsS0FBYSxFQUFFLEdBQW1CLEVBQUUsU0FBZ0IsRUFBRSxTQUFtQixFQUFFLFFBQWtCO1FBRS9HLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJ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QUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxDQUFDO1NBQUE7UUFDRCxPQUFPLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDOztBQXhLSCxnREF5S0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFRhYmxlLCBCaWxsaW5nTW9kZSwgQXR0cmlidXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBQYXJhbGxlbCwgU3RhdGVNYWNoaW5lRnJhZ21lbnQsIEpzb25QYXRoLCBDaG9pY2UsIFBhc3MsIFdhaXQsIFdhaXRUaW1lLCBDb25kaXRpb24sIFN0YXRlLCBJQ2hhaW5hYmxlLCBJTmV4dGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBEeW5hbW9BdHRyaWJ1dGVWYWx1ZSwgRHluYW1vR2V0SXRlbSwgRHluYW1vUHJvamVjdGlvbkV4cHJlc3Npb24sIER5bmFtb1B1dEl0ZW0sIER5bmFtb1JldHVyblZhbHVlcywgRHluYW1vVXBkYXRlSXRlbSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY3JlYXRpbmcgYSBTZW1hcGhvcmVHZW5lcmF0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW1hcGhvcmVHZW5lcmF0b3JQcm9wcyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHNldCB0aGUgRHluYW1vREIgdGFibGUgdG8gaGF2ZSBhIHNwZWNpZmljIHJlYWQvd3JpdGUgY2FwYWNpdHkgd2l0aCBQUk9WSVNJT05FRCBiaWxsaW5nLlxuICAgKiBAZGVmYXVsdCBQQVlfUEVSX1JFUVVFU1RcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlUmVhZFdyaXRlQ2FwYWNpdHk/OiBUYWJsZVJlYWRXcml0ZUNhcGFjaXR5O1xufVxuXG4vKipcbiAqIFJlYWQgYW5kIHdyaXRlIGNhcGFjaXR5IGZvciBhIFBST1ZJU0lPTkVEIGJpbGxpbmcgRHluYW1vREIgdGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVSZWFkV3JpdGVDYXBhY2l0eSB7XG4gIHJlYWRvbmx5IHJlYWRDYXBhY2l0eTogbnVtYmVyO1xuICByZWFkb25seSB3cml0ZUNhcGFjaXR5OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBVc2FnZVRyYWNrZXIge1xuICByZWFkb25seSBsaW1pdDogbnVtYmVyO1xuICByZWFkb25seSB0aW1lc1VzZWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2hhaW5OZXh0YWJsZSBleHRlbmRzIElDaGFpbmFibGUsIElOZXh0YWJsZSB7IH1cblxuLyoqXG4gKiBTZXRzIHVwIHVwIHRoZSBEeW5hbW9EQiB0YWJsZSB0aGF0IHN0b3JlcyB0aGUgU3RhdGUgTWFjaGluZSBzZW1hcGhvcmVzLlxuICogQ2FsbCBgZ2VuZXJhdGVTZW1hcGhvcmVkSm9iYCB0byBnZW5lcmF0ZSBzZW1hcGhvcmVkIGpvYnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZW1hcGhvcmVHZW5lcmF0b3IgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIC8qKlxuICAgKiBUaGUgRHluYW1vREIgdGFibGUgdXNlZCB0byBzdG9yZSBzZW1hcGhvcmVzLlxuICAgKi9cbiAgcHJpdmF0ZSBzZW1hcGhvcmVUYWJsZTogVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lcyBhbmQgYXNzb2NpYXRlZCBjb25jdXJyZW5jeSBsaW1pdHMgYW5kIG51bWJlciBvZiB1c2VzIG9mIHRoZSBzZW1wYWhvcmVzLlxuICAgKi9cbiAgcHJpdmF0ZSBzZW1hcGhvcmVUcmFja2VyOiBNYXA8c3RyaW5nLCBVc2FnZVRyYWNrZXI+O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogU2VtYXBob3JlR2VuZXJhdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuc2VtYXBob3JlVHJhY2tlciA9IG5ldyBNYXA8c3RyaW5nLCBVc2FnZVRyYWNrZXI+KCk7XG4gICAgdGhpcy5zZW1hcGhvcmVUYWJsZSA9IG5ldyBUYWJsZSh0aGlzLCAnU3RhdGVNYWNoaW5lU2VtcGFob3JlVGFibGUnLCB7XG4gICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICAgICAgbmFtZTogJ0xvY2tOYW1lJyxcbiAgICAgICAgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcsXG4gICAgICB9LFxuICAgICAgcmVhZENhcGFjaXR5OiBwcm9wcz8udGFibGVSZWFkV3JpdGVDYXBhY2l0eT8ucmVhZENhcGFjaXR5LFxuICAgICAgd3JpdGVDYXBhY2l0eTogcHJvcHM/LnRhYmxlUmVhZFdyaXRlQ2FwYWNpdHk/LndyaXRlQ2FwYWNpdHksXG4gICAgICBiaWxsaW5nTW9kZTogcHJvcHM/LnRhYmxlUmVhZFdyaXRlQ2FwYWNpdHkgPyBCaWxsaW5nTW9kZS5QUk9WSVNJT05FRCA6IEJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVCxcbiAgICB9KTtcblxuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBzZW1hcGhvcmUgZm9yIGEgU3RlcEZ1bmN0aW9uIGpvYiAob3IgY2hhaW5lZCBzZXQgb2Ygam9icykgdG8gbGltaXQgcGFyYWxsZWxpc20gYWNyb3NzIGV4ZWN1dGlvbnMuXG4gICAqIEBwYXJhbSBsb2NrTmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VtYXBob3JlLlxuICAgKiBAcGFyYW0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBmb3IgdGhlIGdpdmVuIGxvY2suXG4gICAqIEBwYXJhbSBqb2IgVGhlIGpvYiAob3IgY2hhaW5lZCBqb2JzKSB0byBiZSBzZW1hcGhvcmVkLlxuICAgKiBAcGFyYW0gbmV4dFN0YXRlIFRoZSBTdGF0ZSB0byBnbyB0byBhZnRlciB0aGUgc2VtYXBob3JlZCBqb2IgY29tcGxldGVzLlxuICAgKiBAcGFyYW0gcmV1c2VMb2NrIEV4cGxpY2lsaXR5IGFsbG93IHRoZSByZXVzZSBvZiBhIG5hbWVkIGxvY2sgZnJvbSBhIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGpvYi4gVGhyb3dzIGFuIGVycm9yIGlmIGEgZGlmZmVyZW50IGBsaW1pdGAgaXMgc3BlY2lmaWVkLiBEZWZhdWx0OiBmYWxzZS5cbiAgICogQHBhcmFtIGNvbW1lbnRzIEFkZHMgZGV0YWlsZWQgY29tbWVudHMgdG8gbG9jayByZWxhdGVkIHN0YXRlcy4gU2lnbmlmaWNhbnRseSBpbmNyZWFzZXMgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgc2l6ZS4gRGVmYXVsdDogZmFsc2UuXG4gICAqIEByZXR1cm5zIEEgU3RhdGVNYWNoaW5lRnJhZ21lbnQgdGhhdCBjYW4gY2hhaW5lZCB0byBvdGhlciBzdGF0ZXMgaW4gdGhlIFN0YXRlIE1hY2hpbmUuXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVTZW1hcGhvcmVkSm9iKFxuICAgIGxvY2tOYW1lOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIsIGpvYjogSUNoYWluTmV4dGFibGUsIG5leHRTdGF0ZTogU3RhdGUsIHJldXNlTG9jaz86IGJvb2xlYW4sIGNvbW1lbnRzPzogYm9vbGVhbixcbiAgKTogU3RhdGVNYWNoaW5lRnJhZ21lbnQge1xuICAgIGxldCBsb2NrSW5mbyA9IHRoaXMuc2VtYXBob3JlVHJhY2tlci5nZXQobG9ja05hbWUpO1xuICAgIGlmIChsb2NrSW5mbykge1xuICAgICAgaWYgKHJldXNlTG9jaykge1xuICAgICAgICBpZiAobG9ja0luZm8ubGltaXQgIT0gbGltaXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSByZXVzZWQgXFxgbG9ja05hbWVcXGAgXCIke2xvY2tOYW1lfVwiIHdhcyBnaXZlbiBhIGRpZmZlcmVudCBcXGBsaW1pdFxcYCB0aGFuIHByZXZpb3VzbHkgZGVmaW5lZC4gR2l2ZW46ICR7bGltaXR9LCBQcmV2aW91czogJHtsb2NrSW5mby5saW1pdH0uYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9ja0luZm8gPSB7IGxpbWl0OiBsb2NrSW5mby5saW1pdCwgdGltZXNVc2VkOiBsb2NrSW5mby50aW1lc1VzZWQgKyAxIH07XG4gICAgICAgICAgdGhpcy5zZW1hcGhvcmVUcmFja2VyLnNldChsb2NrTmFtZSwgbG9ja0luZm8pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcXGBsb2NrTmFtZVxcYCBcIiR7bG9ja05hbWV9XCIgd2FzIHJldXNlZCB3aXRob3V0IGV4cGxpY2l0bHkgYWxsb3dpbmcgcmV1c2UuIFNldCBcXGByZXVzZUxvY2tcXGAgdG8gXFxgdHJ1ZVxcYCBpZiB5b3Ugd2FudCB0byByZXVzZSB0aGUgbG9jay5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9ja0luZm8gPSB7IGxpbWl0OiBsaW1pdCwgdGltZXNVc2VkOiAxIH07XG4gICAgICB0aGlzLnNlbWFwaG9yZVRyYWNrZXIuc2V0KGxvY2tOYW1lLCBsb2NrSW5mbyk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0TG9jayA9IG5ldyBQYXJhbGxlbCh0aGlzLCBgR2V0ICR7bG9ja05hbWV9IExvY2s6ICR7bG9ja0luZm8udGltZXNVc2VkfWAsIHsgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCB9KTtcbiAgICBjb25zdCBhY3F1aXJlTG9jayA9IG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGBBY3F1aXJlICR7bG9ja05hbWV9IExvY2s6ICR7bG9ja0luZm8udGltZXNVc2VkfWAsXG4gICAgICB7XG4gICAgICAgIGNvbW1lbnQ6IGNvbW1lbnRzID8gYEFjcXVpcmUgYSBsb2NrIHVzaW5nIGEgY29uZGl0aW9uYWwgdXBkYXRlIHRvIER5bmFtb0RCLiBUaGlzIHVwZGF0ZSB3aWxsIGRvIHR3byB0aGluZ3M6XG4gICAgICAgICAgMSkgaW5jcmVtZW50IGEgY291bnRlciBmb3IgdGhlIG51bWJlciBvZiBoZWxkIGxvY2tzXG4gICAgICAgICAgMikgYWRkIGFuIGF0dHJpYnV0ZSB0byB0aGUgRHluYW1vREIgSXRlbSB3aXRoIGEgdW5pcXVlIGtleSBmb3IgdGhpcyBleGVjdXRpb24gYW5kIHdpdGggYSB2YWx1ZSBvZiB0aGUgdGltZSB3aGVuIHRoZSBsb2NrIHdhcyBBY3F1aXJlZFxuICAgICAgICAgIFRoZSBVcGRhdGUgaW5jbHVkZXMgYSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQgd2lsbCBmYWlsIHVuZGVyIHR3byBjaXJjdW1zdGFuY2VzOlxuICAgICAgICAgIDEpIGlmIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb2NrcyBoYXZlIGFscmVhZHkgYmVlbiBkaXN0cmlidXRlZFxuICAgICAgICAgIDIpIGlmIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBhbHJlYWR5IG93bnMgYSBsb2NrLiBUaGUgbGF0dGVyIGNoZWNrIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIHNhbWUgZXhlY3V0aW9uIGRvZXNuJ3QgaW5jcmVhc2UgdGhlIGNvdW50ZXIgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICBJZiBlaXRoZXIgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgdGhlbiB0aGUgdGFzayB3aWxsIGZhaWwgd2l0aCBhIER5bmFtb0RCLkNvbmRpdGlvbmFsQ2hlY2tGYWlsZWRFeGNlcHRpb24gZXJyb3IsIHJldHJ5IGEgZmV3IHRpbWVzLCB0aGVuIGlmIGl0IGlzIHN0aWxsIG5vdCBzdWNjZXNzZnVsIFxcXG4gICAgICAgICAgaXQgd2lsbCBtb3ZlIG9mZiB0byBhbm90aGVyIGJyYW5jaCBvZiB0aGUgd29ya2Zsb3cuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCBhIGdpdmVuIGxvY2tuYW1lIGhhcyBiZWVuIHVzZWQsIHRoZXJlIHdpbGwgbm90IGJlIGEgcm93IGluIER5bmFtb0RCIFxcXG4gICAgICAgICAgc28gdGhlIHVwZGF0ZSB3aWxsIGZhaWwgd2l0aCBEeW5hbW9EQi5BbWF6b25EeW5hbW9EQkV4Y2VwdGlvbi4gSW4gdGhhdCBjYXNlLCB0aGlzIHN0YXRlIHNlbmRzIHRoZSB3b3JrZmxvdyB0byBzdGF0ZSB0aGF0IHdpbGwgY3JlYXRlIHRoYXQgcm93IHRvIGluaXRpYWxpemUuXG4gICAgICAgICAgYCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdGFibGU6IHRoaXMuc2VtYXBob3JlVGFibGUsXG4gICAgICAgIGtleTogeyBMb2NrTmFtZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhsb2NrTmFtZSkgfSxcbiAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzOiB7XG4gICAgICAgICAgJyNjdXJyZW50bG9ja2NvdW50JzogJ2N1cnJlbnRsb2NrY291bnQnLFxuICAgICAgICAgICcjbG9ja293bmVyaWQuJCc6ICckJC5FeGVjdXRpb24uSWQnLFxuICAgICAgICB9LFxuICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgJzppbmNyZWFzZSc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21OdW1iZXIoMSksXG4gICAgICAgICAgJzpsaW1pdCc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21OdW1iZXIobGltaXQpLFxuICAgICAgICAgICc6bG9ja2FjcXVpcmVkdGltZSc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQkLlN0YXRlLkVudGVyZWRUaW1lJykpLFxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUICNjdXJyZW50bG9ja2NvdW50ID0gI2N1cnJlbnRsb2NrY291bnQgKyA6aW5jcmVhc2UsICNsb2Nrb3duZXJpZCA9IDpsb2NrYWNxdWlyZWR0aW1lJyxcbiAgICAgICAgY29uZGl0aW9uRXhwcmVzc2lvbjogJ2N1cnJlbnRsb2NrY291bnQgPD4gOmxpbWl0IGFuZCBhdHRyaWJ1dGVfbm90X2V4aXN0cygjbG9ja293bmVyaWQpJyxcbiAgICAgICAgcmV0dXJuVmFsdWVzOiBEeW5hbW9SZXR1cm5WYWx1ZXMuVVBEQVRFRF9ORVcsXG4gICAgICAgIHJlc3VsdFBhdGg6ICckLmxvY2tpbmZvLmFjcXVpcmVsb2NrJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBpbml0aWFsaXplTG9ja0l0ZW0gPSBuZXcgRHluYW1vUHV0SXRlbSh0aGlzLCBgSW5pdGlhbGl6ZSAke2xvY2tOYW1lfSBMb2NrIEl0ZW06ICR7bG9ja0luZm8udGltZXNVc2VkfWAsIHtcbiAgICAgIGNvbW1lbnQ6IGNvbW1lbnRzID8gYFRoaXMgc3RhdGUgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBhbiBpdGVtIGhhc24ndCBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbG9jayB5ZXQuIFxcXG4gICAgICBJbiB0aGF0IGNhc2UsIGl0IHdpbGwgaW5zZXJ0IGFuIGluaXRpYWwgaXRlbSB0aGF0IGluY2x1ZGVzIHRoZSBsb2NrIG5hbWUgYXMgdGhlIGtleSBhbmQgY3VycmVudGxvY2tjb3VudCBvZiAwLiBcXCBcbiAgICAgIFRoZSBQdXQgdG8gRHluYW1vREIgaW5jbHVkZXMgYSBjb25kaXRvbmFsIGV4cHJlc3Npb24gdG8gZmFpbCBpZiB0aGUgYW4gaXRlbSB3aXRoIHRoYXQga2V5IGFscmVhZHkgZXhpc3RzLCB3aGljaCBhdm9pZHMgYSByYWNlIGNvbmRpdGlvbiBpZiBtdWx0aXBsZSBleGVjdXRpb25zIHN0YXJ0IGF0IHRoZSBzYW1lIHRpbWUuIFxcIFxuICAgICAgVGhlcmUgYXJlIG90aGVyIHJlYXNvbnMgdGhhdCB0aGUgcHJldmlvdXMgc3RhdGUgY291bGQgZmFpbCBhbmQgZW5kIHVwIGhlcmUsIHNvIHRoaXMgaXMgc2FmZSBpbiB0aG9zZSBjYXNlcyB0b28uYCA6IHVuZGVmaW5lZCxcbiAgICAgIHRhYmxlOiB0aGlzLnNlbWFwaG9yZVRhYmxlLFxuICAgICAgaXRlbToge1xuICAgICAgICBMb2NrTmFtZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhsb2NrTmFtZSksXG4gICAgICAgIGN1cnJlbnRsb2NrY291bnQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21OdW1iZXIoMCksXG4gICAgICB9LFxuICAgICAgY29uZGl0aW9uRXhwcmVzc2lvbjogJ0xvY2tOYW1lIDw+IDpsb2NrbmFtZScsXG4gICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICc6bG9ja25hbWUnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKGxvY2tOYW1lKSxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0Q3VycmVudExvY2tSZWNvcmQgPSBuZXcgRHluYW1vR2V0SXRlbSh0aGlzLCBgR2V0IEN1cnJlbnQgJHtsb2NrTmFtZX0gTG9jayBSZWNvcmQ6ICR7bG9ja0luZm8udGltZXNVc2VkfWAsIHtcbiAgICAgIGNvbW1lbnQ6IGNvbW1lbnRzID8gJ1RoaXMgc3RhdGUgaXMgY2FsbGVkIHdoZW4gdGhlIGV4ZWN1dGlvbiBpcyB1bmFibGUgdG8gYWNxdWlyZSBhIGxvY2sgYmVjYXVzZSB0aGVyZSBsaW1pdCBoYXMgZWl0aGVyIGJlZW4gZXhjZWVkZWQgb3IgYmVjYXVzZSB0aGlzIGV4ZWN1dGlvbiBhbHJlYWR5IGhvbGRzIGEgbG9jay4gXFxcbiAgICAgIEluIHRoYXQgY2FzZSwgdGhpcyB0YXNrIGxvYWRzIGluZm8gZnJvbSBEREIgZm9yIHRoZSBjdXJyZW50IGxvY2sgaXRlbSBzbyB0aGF0IHRoZSByaWdodCBkZWNpc2lvbiBjYW4gYmUgbWFkZSBpbiBzdWJzZXF1ZW50IHN0YXRlcy4nOiB1bmRlZmluZWQsXG4gICAgICB0YWJsZTogdGhpcy5zZW1hcGhvcmVUYWJsZSxcbiAgICAgIGtleTogeyBMb2NrTmFtZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhsb2NrTmFtZSkgfSxcbiAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lczogeyAnI2xvY2tvd25lcmlkLiQnOiAnJCQuRXhlY3V0aW9uLklkJyB9LFxuICAgICAgcHJvamVjdGlvbkV4cHJlc3Npb246IFtuZXcgRHluYW1vUHJvamVjdGlvbkV4cHJlc3Npb24oKS53aXRoQXR0cmlidXRlKCcjbG9ja293bmVyaWQnKV0sXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICAnSXRlbS4kJzogJyQuSXRlbScsXG4gICAgICAgICdJdGVtU3RyaW5nLiQnOiAnU3RhdGVzLkpzb25Ub1N0cmluZygkLkl0ZW0pJyxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC5sb2NraW5mby5jdXJyZW50bG9ja2l0ZW0nLFxuICAgIH0pO1xuICAgIGNvbnN0IGNoZWNrSWZMb2NrQWNxdWlyZWQgPSBuZXcgQ2hvaWNlKHRoaXMsIGBDaGVjayBpZiAke2xvY2tOYW1lfSBMb2NrIEFscmVhZHkgQWNxdWlyZWQ6ICR7bG9ja0luZm8udGltZXNVc2VkfWAsIHtcbiAgICAgIGNvbW1lbnQ6IGNvbW1lbnRzID8gYFRoaXMgc3RhdGUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgY3VycmVudCBleGVjdXRpb24gYWxyZWFkeSBob2xkcyBhIGxvY2suIEl0IGNhbiB0ZWxsIHRoYXQgYnkgbG9va2luZyBmb3IgWiwgd2hpY2ggd2lsbCBiZSBpbmRpY2F0aXZlIG9mIHRoZSB0aW1lc3RhbXAgdmFsdWUuIFxcIFxuICAgICAgVGhhdCB3aWxsIG9ubHkgYmUgdGhlcmUgaW4gdGhlIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSBEREIgaWYgdGhpcyBleGVjdXRpb24gaG9sZHMgYSBsb2NrLmA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBjb25zdCBjb250aW51ZUJlY2F1c2VMb2NrV2FzQWxyZWFkeUFjcXVpcmVkID0gbmV3IFBhc3ModGhpcywgYENvbnRpbnVlIEJlY2F1c2UgJHtsb2NrTmFtZX0gTG9jayBXYXMgQWxyZWFkeSBBY3F1aXJlZDogJHtsb2NrSW5mby50aW1lc1VzZWR9YCwge1xuICAgICAgY29tbWVudDogY29tbWVudHMgPyAnSW4gdGhpcyBzdGF0ZSwgd2UgaGF2ZSBjb25maW1lZCB0aGF0IGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBzbyB3ZSBwYXNzIHRoZSBvcmlnaW5hbCBleGVjdXRpb24gaW5wdXQgaW50byB0aGUgdGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgd29yay4nIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIGNvbnN0IHdhaXRUb0dldExvY2sgPSBuZXcgV2FpdCh0aGlzLCBgV2FpdCB0byBHZXQgJHtsb2NrTmFtZX0gTG9jazogJHtsb2NrSW5mby50aW1lc1VzZWR9YCwge1xuICAgICAgY29tbWVudDogY29tbWVudHMgPyAnSWYgdGhlIGxvY2sgaW5kZWVkIG5vdCBiZWVuIHN1Y2Nlc2Z1bGx5IEFjcXVpcmVkLCB0aGVuIHdhaXQgZm9yIGEgYml0IGJlZm9yZSB0cnlpbmcgYWdhaW4uJyA6IHVuZGVmaW5lZCxcbiAgICAgIHRpbWU6IFdhaXRUaW1lLmR1cmF0aW9uKER1cmF0aW9uLnNlY29uZHMoMykpLFxuICAgIH0pO1xuICAgIGFjcXVpcmVMb2NrLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ0R5bmFtb0RCLkFtYXpvbkR5bmFtb0RCRXhjZXB0aW9uJ10sIG1heEF0dGVtcHRzOiAwIH0pXG4gICAgICAuYWRkUmV0cnkoeyBtYXhBdHRlbXB0czogNiwgYmFja29mZlJhdGU6IDIgfSlcbiAgICAgIC5hZGRDYXRjaChpbml0aWFsaXplTG9ja0l0ZW0sIHsgZXJyb3JzOiBbJ0R5bmFtb0RCLkFtYXpvbkR5bmFtb0RCRXhjZXB0aW9uJ10sIHJlc3VsdFBhdGg6ICckLmxvY2tpbmZvLmFjcXVpc2l0aW9uZXJyb3InIH0pXG4gICAgICAuYWRkQ2F0Y2goZ2V0Q3VycmVudExvY2tSZWNvcmQsIHsgZXJyb3JzOiBbJ0R5bmFtb0RCLkNvbmRpdGlvbmFsQ2hlY2tGYWlsZWRFeGNlcHRpb24nXSwgcmVzdWx0UGF0aDogJyQubG9ja2luZm8uYWNxdWlzaXRpb25lcnJvcicgfSk7XG4gICAgaW5pdGlhbGl6ZUxvY2tJdGVtLmFkZENhdGNoKGFjcXVpcmVMb2NrLCB7IHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQgfSk7XG4gICAgZ2V0Q3VycmVudExvY2tSZWNvcmQubmV4dChjaGVja0lmTG9ja0FjcXVpcmVkKTtcbiAgICBjaGVja0lmTG9ja0FjcXVpcmVkLndoZW4oQ29uZGl0aW9uLmFuZChcbiAgICAgIENvbmRpdGlvbi5pc1ByZXNlbnQoJyQubG9ja2luZm8uY3VycmVudGxvY2tpdGVtLkl0ZW1TdHJpbmcnKSxcbiAgICAgIENvbmRpdGlvbi5zdHJpbmdNYXRjaGVzKCckLmxvY2tpbmZvLmN1cnJlbnRsb2NraXRlbS5JdGVtU3RyaW5nJywgJypaJykpLCBjb250aW51ZUJlY2F1c2VMb2NrV2FzQWxyZWFkeUFjcXVpcmVkLFxuICAgICk7XG4gICAgY2hlY2tJZkxvY2tBY3F1aXJlZC5vdGhlcndpc2Uod2FpdFRvR2V0TG9jayk7XG4gICAgd2FpdFRvR2V0TG9jay5uZXh0KGFjcXVpcmVMb2NrKTtcblxuICAgIGNvbnN0IHJlbGVhc2VMb2NrID0gbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYFJlbGVhc2UgJHtsb2NrTmFtZX0gTG9jazogJHtsb2NrSW5mby50aW1lc1VzZWR9YCwge1xuICAgICAgdGFibGU6IHRoaXMuc2VtYXBob3JlVGFibGUsXG4gICAgICBrZXk6IHsgTG9ja05hbWU6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcobG9ja05hbWUpIH0sXG4gICAgICBleHByZXNzaW9uQXR0cmlidXRlTmFtZXM6IHtcbiAgICAgICAgJyNjdXJyZW50bG9ja2NvdW50JzogJ2N1cnJlbnRsb2NrY291bnQnLFxuICAgICAgICAnI2xvY2tvd25lcmlkLiQnOiAnJCQuRXhlY3V0aW9uLklkJyxcbiAgICAgIH0sXG4gICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICc6ZGVjcmVhc2UnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tTnVtYmVyKDEpLFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgI2N1cnJlbnRsb2NrY291bnQgPSAjY3VycmVudGxvY2tjb3VudCAtIDpkZWNyZWFzZSBSRU1PVkUgI2xvY2tvd25lcmlkJyxcbiAgICAgIGNvbmRpdGlvbkV4cHJlc3Npb246ICdhdHRyaWJ1dGVfZXhpc3RzKCNsb2Nrb3duZXJpZCknLFxuICAgICAgcmV0dXJuVmFsdWVzOiBEeW5hbW9SZXR1cm5WYWx1ZXMuVVBEQVRFRF9ORVcsXG4gICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgIH0pO1xuXG4gICAgcmVsZWFzZUxvY2suYWRkUmV0cnkoeyBlcnJvcnM6IFsnRHluYW1vREIuQ29uZGl0aW9uYWxDaGVja0ZhaWxlZEV4Y2VwdGlvbiddLCBtYXhBdHRlbXB0czogMCB9KVxuICAgICAgLmFkZFJldHJ5KHsgbWF4QXR0ZW1wdHM6IDUsIGJhY2tvZmZSYXRlOiAxLjUgfSlcbiAgICAgIC5hZGRDYXRjaChuZXh0U3RhdGUsIHsgZXJyb3JzOiBbJ0R5bmFtb0RCLkNvbmRpdGlvbmFsQ2hlY2tGYWlsZWRFeGNlcHRpb24nXSwgcmVzdWx0UGF0aDogJyQubG9ja2luZm8uYWNxdWlzaXRpb25lcnJvcicgfSlcbiAgICAgIC5uZXh0KG5leHRTdGF0ZSk7XG4gICAgZ2V0TG9jay5icmFuY2goYWNxdWlyZUxvY2spO1xuICAgIGdldExvY2suZW5kU3RhdGVzLmZvckVhY2goaiA9PiBqLm5leHQoam9iKSk7XG4gICAgam9iLm5leHQocmVsZWFzZUxvY2spO1xuICAgIGNsYXNzIFNlbWFwaG9yZWRKb2IgZXh0ZW5kcyBTdGF0ZU1hY2hpbmVGcmFnbWVudCB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhcnRTdGF0ZSA9IGdldExvY2s7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZW5kU3RhdGVzID0gbmV4dFN0YXRlLmVuZFN0YXRlcztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBTZW1hcGhvcmVkSm9iKHRoaXMsIGAke2xvY2tOYW1lfSR7bG9ja0luZm8udGltZXNVc2VkfWApO1xuICB9XG59XG4iXX0=
|
|
176
|
+
Semaphore[_a] = { fqn: "@dontirun/state-machine-semaphore.Semaphore", version: "0.1.2" };
|
|
177
|
+
/**
|
|
178
|
+
* The names and associated concurrency limits and number of uses of the sempahores.
|
|
179
|
+
*/
|
|
180
|
+
Semaphore.semaphoreTracker = new Map();
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBcUQ7QUFDckQsMkRBQTZFO0FBQzdFLHFFQUFnSztBQUNoSyxpRkFBMks7QUF3RDNLOztHQUVHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsd0NBQW9CO0lBb0JqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFCO1FBQzdELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFWbkI7O1dBRUc7UUFDSyxjQUFTLEdBQUcsNERBQTRELENBQUM7UUFRL0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDbkIsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLEtBQUssQ0FBQyxRQUFRLHFFQUFxRSxLQUFLLENBQUMsS0FBSyxlQUFlLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2lCQUM3SztxQkFBTTtvQkFDTCxRQUFRLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDeEUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUM1QzthQUNGO2lCQUFNO2dCQUNMLE1BQU0sSUFB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QUFXLENBQUMsQ0FBQyxDQUFDLDBCQUFXLENBQUMsZUFBZTthQUNsRyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7O0FBckxILDhCQXNMQzs7O0FBcExDOztHQUVHO0FBQ1ksMEJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgTmFtZXMsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgVGFibGUsIEJpbGxpbmdNb2RlLCBBdHRyaWJ1dGVUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiJztcbmltcG9ydCB7IFBhcmFsbGVsLCBTdGF0ZU1hY2hpbmVGcmFnbWVudCwgSnNvblBhdGgsIENob2ljZSwgUGFzcywgV2FpdCwgV2FpdFRpbWUsIENvbmRpdGlvbiwgU3RhdGUsIElDaGFpbmFibGUsIElOZXh0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IER5bmFtb0F0dHJpYnV0ZVZhbHVlLCBEeW5hbW9HZXRJdGVtLCBEeW5hbW9Qcm9qZWN0aW9uRXhwcmVzc2lvbiwgRHluYW1vUHV0SXRlbSwgRHluYW1vUmV0dXJuVmFsdWVzLCBEeW5hbW9VcGRhdGVJdGVtIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGNyZWF0aW5nIGEgU2VtYXBob3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYXBob3JlUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlbWFwaG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2tOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBleGVjdXRpb25zIGZvciB0aGUgZ2l2ZW4gbG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgam9iIChvciBjaGFpbmVkIGpvYnMpIHRvIGJlIHNlbWFwaG9yZWQuXG4gICAqL1xuICByZWFkb25seSBqb2I6IElDaGFpbk5leHRhYmxlO1xuICAvKipcbiAgICogVGhlIFN0YXRlIHRvIGdvIHRvIGFmdGVyIHRoZSBzZW1hcGhvcmVkIGpvYiBjb21wbGV0ZXMuXG4gICAqL1xuICByZWFkb25seSBuZXh0U3RhdGU6IFN0YXRlO1xuICAvKipcbiAgICogIEV4cGxpY2lsaXR5IGFsbG93IHRoZSByZXVzZSBvZiBhIG5hbWVkIGxvY2sgZnJvbSBhIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGpvYi4gVGhyb3dzIGFuIGVycm9yIGlmIGEgZGlmZmVyZW50IGBsaW1pdGAgaXMgc3BlY2lmaWVkLiBEZWZhdWx0OiBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IHJldXNlTG9jaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBZGQgZGV0YWlsZWQgY29tbWVudHMgdG8gbG9jayByZWxhdGVkIHN0YXRlcy4gU2lnbmlmaWNhbnRseSBpbmNyZWFzZXMgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgc2l6ZS4gRGVmYXVsdDogZmFsc2UuXG4gICAqL1xuICByZWFkb25seSBjb21tZW50cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHNldCB0aGUgRHluYW1vREIgdGFibGUgdG8gaGF2ZSBhIHNwZWNpZmljIHJlYWQvd3JpdGUgY2FwYWNpdHkgd2l0aCBQUk9WSVNJT05FRCBiaWxsaW5nLlxuICAgKiBOb3RlOiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIHNldCBvbiB0aGUgZmlyc3QgaW5zdGFudGlhdGlvbiBvZiBhIGBTZW1hcGhvcmVgIHBlciBzdGFja1xuICAgKiBAZGVmYXVsdCBQQVlfUEVSX1JFUVVFU1RcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlUmVhZFdyaXRlQ2FwYWNpdHk/OiBUYWJsZVJlYWRXcml0ZUNhcGFjaXR5O1xufVxuXG4vKipcbiAqIFJlYWQgYW5kIHdyaXRlIGNhcGFjaXR5IGZvciBhIFBST1ZJU0lPTkVEIGJpbGxpbmcgRHluYW1vREIgdGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVSZWFkV3JpdGVDYXBhY2l0eSB7XG4gIHJlYWRvbmx5IHJlYWRDYXBhY2l0eTogbnVtYmVyO1xuICByZWFkb25seSB3cml0ZUNhcGFjaXR5OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBVc2FnZVRyYWNrZXIge1xuICByZWFkb25seSBsaW1pdDogbnVtYmVyO1xuICByZWFkb25seSB0aW1lc1VzZWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2hhaW5OZXh0YWJsZSBleHRlbmRzIElDaGFpbmFibGUsIElOZXh0YWJsZSB7IH1cblxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHNlbWFwaG9yZSBmb3IgYSBTdGVwRnVuY3Rpb24gam9iIChvciBjaGFpbmVkIHNldCBvZiBqb2JzKSB0byBsaW1pdCBwYXJhbGxlbGlzbSBhY3Jvc3MgZXhlY3V0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlbWFwaG9yZSBleHRlbmRzIFN0YXRlTWFjaGluZUZyYWdtZW50IHtcblxuICAvKipcbiAgICogVGhlIG5hbWVzIGFuZCBhc3NvY2lhdGVkIGNvbmN1cnJlbmN5IGxpbWl0cyBhbmQgbnVtYmVyIG9mIHVzZXMgb2YgdGhlIHNlbXBhaG9yZXMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBzZW1hcGhvcmVUcmFja2VyID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFVzYWdlVHJhY2tlcj4+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBEeW5hbW9EQiB0YWJsZSB1c2VkIHRvIHN0b3JlIHNlbWFwaG9yZXMuXG4gICAqL1xuICBwcml2YXRlIHNlbWFwaG9yZVRhYmxlOiBUYWJsZTtcbiAgLyoqXG4gICAqIFRoZSBEeW5hbW9EQiB0YWJsZSB1c2VkIHRvIHN0b3JlIHNlbWFwaG9yZXMuXG4gICAqL1xuICBwcml2YXRlIHRhYmxlTmFtZSA9ICdTdGF0ZU1hY2hpbmVTZW1wYWhvcmVUYWJsZTkyMDc1MWE2NWE1ODRlOGFiNzU4MzQ2MGY2ZGI2ODZhJztcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhcnRTdGF0ZTogU3RhdGU7XG4gIHB1YmxpYyByZWFkb25seSBlbmRTdGF0ZXM6IElOZXh0YWJsZVtdO1xuXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNlbWFwaG9yZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdCBzdGFja1RyYWNrZXIgPSB0aGlzLnNldFVwTWFwKCk7XG4gICAgdGhpcy5zZW1hcGhvcmVUYWJsZSA9IHRoaXMuZW5zdXJlVGFibGUocHJvcHMpO1xuICAgIGxldCBsb2NrSW5mbyA9IHN0YWNrVHJhY2tlci5nZXQocHJvcHMubG9ja05hbWUpO1xuICAgIGlmIChsb2NrSW5mbykge1xuICAgICAgaWYgKHByb3BzLnJldXNlTG9jaykge1xuICAgICAgICBpZiAobG9ja0luZm8ubGltaXQgIT0gcHJvcHMubGltaXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSByZXVzZWQgXFxgbG9ja05hbWVcXGAgXCIke3Byb3BzLmxvY2tOYW1lfVwiIHdhcyBnaXZlbiBhIGRpZmZlcmVudCBcXGBsaW1pdFxcYCB0aGFuIHByZXZpb3VzbHkgZGVmaW5lZC4gR2l2ZW46ICR7cHJvcHMubGltaXR9LCBQcmV2aW91czogJHtsb2NrSW5mby5saW1pdH0uYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9ja0luZm8gPSB7IGxpbWl0OiBsb2NrSW5mby5saW1pdCwgdGltZXNVc2VkOiBsb2NrSW5mby50aW1lc1VzZWQgKyAxIH07XG4gICAgICAgICAgc3RhY2tUcmFja2VyLnNldChwcm9wcy5sb2NrTmFtZSwgbG9ja0luZm8pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcXGBsb2NrTmFtZVxcYCBcIiR7cHJvcHMubG9ja05hbWV9XCIgd2FzIHJldXNlZCB3aXRob3V0IGV4cGxpY2l0bHkgYWxsb3dpbmcgcmV1c2UuIFNldCBcXGByZXVzZUxvY2tcXGAgdG8gXFxgdHJ1ZVxcYCBpZiB5b3Ugd2FudCB0byByZXVzZSB0aGUgbG9jay5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9ja0luZm8gPSB7IGxpbWl0OiBwcm9wcy5saW1pdCwgdGltZXNVc2VkOiAxIH07XG4gICAgICBzdGFja1RyYWNrZXIuc2V0KHByb3BzLmxvY2tOYW1lLCBsb2NrSW5mbyk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0TG9jayA9IG5ldyBQYXJhbGxlbCh0aGlzLCBgR2V0ICR7cHJvcHMubG9ja05hbWV9IExvY2s6ICR7bG9ja0luZm8udGltZXNVc2VkfWAsIHsgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCB9KTtcbiAgICBjb25zdCBhY3F1aXJlTG9jayA9IG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGBBY3F1aXJlICR7cHJvcHMubG9ja05hbWV9IExvY2s6ICR7bG9ja0luZm8udGltZXNVc2VkfWAsXG4gICAgICB7XG4gICAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnRzID8gYEFjcXVpcmUgYSBsb2NrIHVzaW5nIGEgY29uZGl0aW9uYWwgdXBkYXRlIHRvIER5bmFtb0RCLiBUaGlzIHVwZGF0ZSB3aWxsIGRvIHR3byB0aGluZ3M6XG4gICAgICAgICAgMSkgaW5jcmVtZW50IGEgY291bnRlciBmb3IgdGhlIG51bWJlciBvZiBoZWxkIGxvY2tzXG4gICAgICAgICAgMikgYWRkIGFuIGF0dHJpYnV0ZSB0byB0aGUgRHluYW1vREIgSXRlbSB3aXRoIGEgdW5pcXVlIGtleSBmb3IgdGhpcyBleGVjdXRpb24gYW5kIHdpdGggYSB2YWx1ZSBvZiB0aGUgdGltZSB3aGVuIHRoZSBsb2NrIHdhcyBBY3F1aXJlZFxuICAgICAgICAgIFRoZSBVcGRhdGUgaW5jbHVkZXMgYSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRoYXQgd2lsbCBmYWlsIHVuZGVyIHR3byBjaXJjdW1zdGFuY2VzOlxuICAgICAgICAgIDEpIGlmIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb2NrcyBoYXZlIGFscmVhZHkgYmVlbiBkaXN0cmlidXRlZFxuICAgICAgICAgIDIpIGlmIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBhbHJlYWR5IG93bnMgYSBsb2NrLiBUaGUgbGF0dGVyIGNoZWNrIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIHNhbWUgZXhlY3V0aW9uIGRvZXNuJ3QgaW5jcmVhc2UgdGhlIGNvdW50ZXIgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICBJZiBlaXRoZXIgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgdGhlbiB0aGUgdGFzayB3aWxsIGZhaWwgd2l0aCBhIER5bmFtb0RCLkNvbmRpdGlvbmFsQ2hlY2tGYWlsZWRFeGNlcHRpb24gZXJyb3IsIHJldHJ5IGEgZmV3IHRpbWVzLCB0aGVuIGlmIGl0IGlzIHN0aWxsIG5vdCBzdWNjZXNzZnVsIFxcXG4gICAgICAgICAgaXQgd2lsbCBtb3ZlIG9mZiB0byBhbm90aGVyIGJyYW5jaCBvZiB0aGUgd29ya2Zsb3cuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCBhIGdpdmVuIGxvY2tuYW1lIGhhcyBiZWVuIHVzZWQsIHRoZXJlIHdpbGwgbm90IGJlIGEgcm93IGluIER5bmFtb0RCIFxcXG4gICAgICAgICAgc28gdGhlIHVwZGF0ZSB3aWxsIGZhaWwgd2l0aCBEeW5hbW9EQi5BbWF6b25EeW5hbW9EQkV4Y2VwdGlvbi4gSW4gdGhhdCBjYXNlLCB0aGlzIHN0YXRlIHNlbmRzIHRoZSB3b3JrZmxvdyB0byBzdGF0ZSB0aGF0IHdpbGwgY3JlYXRlIHRoYXQgcm93IHRvIGluaXRpYWxpemUuXG4gICAgICAgICAgYCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdGFibGU6IHRoaXMuc2VtYXBob3JlVGFibGUsXG4gICAgICAgIGtleTogeyBMb2NrTmFtZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhwcm9wcy5sb2NrTmFtZSkgfSxcbiAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzOiB7XG4gICAgICAgICAgJyNjdXJyZW50bG9ja2NvdW50JzogJ2N1cnJlbnRsb2NrY291bnQnLFxuICAgICAgICAgICcjbG9ja293bmVyaWQuJCc6ICckJC5FeGVjdXRpb24uSWQnLFxuICAgICAgICB9LFxuICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgJzppbmNyZWFzZSc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21OdW1iZXIoMSksXG4gICAgICAgICAgJzpsaW1pdCc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21OdW1iZXIocHJvcHMubGltaXQpLFxuICAgICAgICAgICc6bG9ja2FjcXVpcmVkdGltZSc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQkLlN0YXRlLkVudGVyZWRUaW1lJykpLFxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUICNjdXJyZW50bG9ja2NvdW50ID0gI2N1cnJlbnRsb2NrY291bnQgKyA6aW5jcmVhc2UsICNsb2Nrb3duZXJpZCA9IDpsb2NrYWNxdWlyZWR0aW1lJyxcbiAgICAgICAgY29uZGl0aW9uRXhwcmVzc2lvbjogJ2N1cnJlbnRsb2NrY291bnQgPD4gOmxpbWl0IGFuZCBhdHRyaWJ1dGVfbm90X2V4aXN0cygjbG9ja293bmVyaWQpJyxcbiAgICAgICAgcmV0dXJuVmFsdWVzOiBEeW5hbW9SZXR1cm5WYWx1ZXMuVVBEQVRFRF9ORVcsXG4gICAgICAgIHJlc3VsdFBhdGg6ICckLmxvY2tpbmZvLmFjcXVpcmVsb2NrJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBpbml0aWFsaXplTG9ja0l0ZW0gPSBuZXcgRHluYW1vUHV0SXRlbSh0aGlzLCBgSW5pdGlhbGl6ZSAke3Byb3BzLmxvY2tOYW1lfSBMb2NrIEl0ZW06ICR7bG9ja0luZm8udGltZXNVc2VkfWAsIHtcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnRzID8gYFRoaXMgc3RhdGUgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBhbiBpdGVtIGhhc24ndCBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbG9jayB5ZXQuIFxcXG4gICAgICBJbiB0aGF0IGNhc2UsIGl0IHdpbGwgaW5zZXJ0IGFuIGluaXRpYWwgaXRlbSB0aGF0IGluY2x1ZGVzIHRoZSBsb2NrIG5hbWUgYXMgdGhlIGtleSBhbmQgY3VycmVudGxvY2tjb3VudCBvZiAwLiBcXCBcbiAgICAgIFRoZSBQdXQgdG8gRHluYW1vREIgaW5jbHVkZXMgYSBjb25kaXRvbmFsIGV4cHJlc3Npb24gdG8gZmFpbCBpZiB0aGUgYW4gaXRlbSB3aXRoIHRoYXQga2V5IGFscmVhZHkgZXhpc3RzLCB3aGljaCBhdm9pZHMgYSByYWNlIGNvbmRpdGlvbiBpZiBtdWx0aXBsZSBleGVjdXRpb25zIHN0YXJ0IGF0IHRoZSBzYW1lIHRpbWUuIFxcIFxuICAgICAgVGhlcmUgYXJlIG90aGVyIHJlYXNvbnMgdGhhdCB0aGUgcHJldmlvdXMgc3RhdGUgY291bGQgZmFpbCBhbmQgZW5kIHVwIGhlcmUsIHNvIHRoaXMgaXMgc2FmZSBpbiB0aG9zZSBjYXNlcyB0b28uYCA6IHVuZGVmaW5lZCxcbiAgICAgIHRhYmxlOiB0aGlzLnNlbWFwaG9yZVRhYmxlLFxuICAgICAgaXRlbToge1xuICAgICAgICBMb2NrTmFtZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhwcm9wcy5sb2NrTmFtZSksXG4gICAgICAgIGN1cnJlbnRsb2NrY291bnQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21OdW1iZXIoMCksXG4gICAgICB9LFxuICAgICAgY29uZGl0aW9uRXhwcmVzc2lvbjogJ0xvY2tOYW1lIDw+IDpsb2NrbmFtZScsXG4gICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICc6bG9ja25hbWUnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKHByb3BzLmxvY2tOYW1lKSxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0Q3VycmVudExvY2tSZWNvcmQgPSBuZXcgRHluYW1vR2V0SXRlbSh0aGlzLCBgR2V0IEN1cnJlbnQgJHtwcm9wcy5sb2NrTmFtZX0gTG9jayBSZWNvcmQ6ICR7bG9ja0luZm8udGltZXNVc2VkfWAsIHtcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnRzID8gJ1RoaXMgc3RhdGUgaXMgY2FsbGVkIHdoZW4gdGhlIGV4ZWN1dGlvbiBpcyB1bmFibGUgdG8gYWNxdWlyZSBhIGxvY2sgYmVjYXVzZSB0aGVyZSBsaW1pdCBoYXMgZWl0aGVyIGJlZW4gZXhjZWVkZWQgb3IgYmVjYXVzZSB0aGlzIGV4ZWN1dGlvbiBhbHJlYWR5IGhvbGRzIGEgbG9jay4gXFxcbiAgICAgIEluIHRoYXQgY2FzZSwgdGhpcyB0YXNrIGxvYWRzIGluZm8gZnJvbSBEREIgZm9yIHRoZSBjdXJyZW50IGxvY2sgaXRlbSBzbyB0aGF0IHRoZSByaWdodCBkZWNpc2lvbiBjYW4gYmUgbWFkZSBpbiBzdWJzZXF1ZW50IHN0YXRlcy4nOiB1bmRlZmluZWQsXG4gICAgICB0YWJsZTogdGhpcy5zZW1hcGhvcmVUYWJsZSxcbiAgICAgIGtleTogeyBMb2NrTmFtZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhwcm9wcy5sb2NrTmFtZSkgfSxcbiAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lczogeyAnI2xvY2tvd25lcmlkLiQnOiAnJCQuRXhlY3V0aW9uLklkJyB9LFxuICAgICAgcHJvamVjdGlvbkV4cHJlc3Npb246IFtuZXcgRHluYW1vUHJvamVjdGlvbkV4cHJlc3Npb24oKS53aXRoQXR0cmlidXRlKCcjbG9ja293bmVyaWQnKV0sXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICAnSXRlbS4kJzogJyQuSXRlbScsXG4gICAgICAgICdJdGVtU3RyaW5nLiQnOiAnU3RhdGVzLkpzb25Ub1N0cmluZygkLkl0ZW0pJyxcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiAnJC5sb2NraW5mby5jdXJyZW50bG9ja2l0ZW0nLFxuICAgIH0pO1xuICAgIGNvbnN0IGNoZWNrSWZMb2NrQWNxdWlyZWQgPSBuZXcgQ2hvaWNlKHRoaXMsIGBDaGVjayBpZiAke3Byb3BzLmxvY2tOYW1lfSBMb2NrIEFscmVhZHkgQWNxdWlyZWQ6ICR7bG9ja0luZm8udGltZXNVc2VkfWAsIHtcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnRzID8gYFRoaXMgc3RhdGUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgY3VycmVudCBleGVjdXRpb24gYWxyZWFkeSBob2xkcyBhIGxvY2suIEl0IGNhbiB0ZWxsIHRoYXQgYnkgbG9va2luZyBmb3IgWiwgd2hpY2ggd2lsbCBiZSBpbmRpY2F0aXZlIG9mIHRoZSB0aW1lc3RhbXAgdmFsdWUuIFxcIFxuICAgICAgVGhhdCB3aWxsIG9ubHkgYmUgdGhlcmUgaW4gdGhlIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSBEREIgaWYgdGhpcyBleGVjdXRpb24gaG9sZHMgYSBsb2NrLmA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBjb25zdCBjb250aW51ZUJlY2F1c2VMb2NrV2FzQWxyZWFkeUFjcXVpcmVkID0gbmV3IFBhc3ModGhpcywgYENvbnRpbnVlIEJlY2F1c2UgJHtwcm9wcy5sb2NrTmFtZX0gTG9jayBXYXMgQWxyZWFkeSBBY3F1aXJlZDogJHtsb2NrSW5mby50aW1lc1VzZWR9YCwge1xuICAgICAgY29tbWVudDogcHJvcHMuY29tbWVudHMgPyAnSW4gdGhpcyBzdGF0ZSwgd2UgaGF2ZSBjb25maW1lZCB0aGF0IGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBzbyB3ZSBwYXNzIHRoZSBvcmlnaW5hbCBleGVjdXRpb24gaW5wdXQgaW50byB0aGUgdGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgd29yay4nIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIGNvbnN0IHdhaXRUb0dldExvY2sgPSBuZXcgV2FpdCh0aGlzLCBgV2FpdCB0byBHZXQgJHtwcm9wcy5sb2NrTmFtZX0gTG9jazogJHtsb2NrSW5mby50aW1lc1VzZWR9YCwge1xuICAgICAgY29tbWVudDogcHJvcHMuY29tbWVudHMgPyAnSWYgdGhlIGxvY2sgaW5kZWVkIG5vdCBiZWVuIHN1Y2Nlc2Z1bGx5IEFjcXVpcmVkLCB0aGVuIHdhaXQgZm9yIGEgYml0IGJlZm9yZSB0cnlpbmcgYWdhaW4uJyA6IHVuZGVmaW5lZCxcbiAgICAgIHRpbWU6IFdhaXRUaW1lLmR1cmF0aW9uKER1cmF0aW9uLnNlY29uZHMoMykpLFxuICAgIH0pO1xuICAgIGFjcXVpcmVMb2NrLmFkZFJldHJ5KHsgZXJyb3JzOiBbJ0R5bmFtb0RCLkFtYXpvbkR5bmFtb0RCRXhjZXB0aW9uJ10sIG1heEF0dGVtcHRzOiAwIH0pXG4gICAgICAuYWRkUmV0cnkoeyBtYXhBdHRlbXB0czogNiwgYmFja29mZlJhdGU6IDIgfSlcbiAgICAgIC5hZGRDYXRjaChpbml0aWFsaXplTG9ja0l0ZW0sIHsgZXJyb3JzOiBbJ0R5bmFtb0RCLkFtYXpvbkR5bmFtb0RCRXhjZXB0aW9uJ10sIHJlc3VsdFBhdGg6ICckLmxvY2tpbmZvLmFjcXVpc2l0aW9uZXJyb3InIH0pXG4gICAgICAuYWRkQ2F0Y2goZ2V0Q3VycmVudExvY2tSZWNvcmQsIHsgZXJyb3JzOiBbJ0R5bmFtb0RCLkNvbmRpdGlvbmFsQ2hlY2tGYWlsZWRFeGNlcHRpb24nXSwgcmVzdWx0UGF0aDogJyQubG9ja2luZm8uYWNxdWlzaXRpb25lcnJvcicgfSk7XG4gICAgaW5pdGlhbGl6ZUxvY2tJdGVtLmFkZENhdGNoKGFjcXVpcmVMb2NrLCB7IHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQgfSk7XG4gICAgZ2V0Q3VycmVudExvY2tSZWNvcmQubmV4dChjaGVja0lmTG9ja0FjcXVpcmVkKTtcbiAgICBjaGVja0lmTG9ja0FjcXVpcmVkLndoZW4oQ29uZGl0aW9uLmFuZChcbiAgICAgIENvbmRpdGlvbi5pc1ByZXNlbnQoJyQubG9ja2luZm8uY3VycmVudGxvY2tpdGVtLkl0ZW1TdHJpbmcnKSxcbiAgICAgIENvbmRpdGlvbi5zdHJpbmdNYXRjaGVzKCckLmxvY2tpbmZvLmN1cnJlbnRsb2NraXRlbS5JdGVtU3RyaW5nJywgJypaJykpLCBjb250aW51ZUJlY2F1c2VMb2NrV2FzQWxyZWFkeUFjcXVpcmVkLFxuICAgICk7XG4gICAgY2hlY2tJZkxvY2tBY3F1aXJlZC5vdGhlcndpc2Uod2FpdFRvR2V0TG9jayk7XG4gICAgd2FpdFRvR2V0TG9jay5uZXh0KGFjcXVpcmVMb2NrKTtcblxuICAgIGNvbnN0IHJlbGVhc2VMb2NrID0gbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYFJlbGVhc2UgJHtwcm9wcy5sb2NrTmFtZX0gTG9jazogJHtsb2NrSW5mby50aW1lc1VzZWR9YCwge1xuICAgICAgdGFibGU6IHRoaXMuc2VtYXBob3JlVGFibGUsXG4gICAgICBrZXk6IHsgTG9ja05hbWU6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcocHJvcHMubG9ja05hbWUpIH0sXG4gICAgICBleHByZXNzaW9uQXR0cmlidXRlTmFtZXM6IHtcbiAgICAgICAgJyNjdXJyZW50bG9ja2NvdW50JzogJ2N1cnJlbnRsb2NrY291bnQnLFxuICAgICAgICAnI2xvY2tvd25lcmlkLiQnOiAnJCQuRXhlY3V0aW9uLklkJyxcbiAgICAgIH0sXG4gICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICc6ZGVjcmVhc2UnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tTnVtYmVyKDEpLFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgI2N1cnJlbnRsb2NrY291bnQgPSAjY3VycmVudGxvY2tjb3VudCAtIDpkZWNyZWFzZSBSRU1PVkUgI2xvY2tvd25lcmlkJyxcbiAgICAgIGNvbmRpdGlvbkV4cHJlc3Npb246ICdhdHRyaWJ1dGVfZXhpc3RzKCNsb2Nrb3duZXJpZCknLFxuICAgICAgcmV0dXJuVmFsdWVzOiBEeW5hbW9SZXR1cm5WYWx1ZXMuVVBEQVRFRF9ORVcsXG4gICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgIH0pO1xuXG4gICAgcmVsZWFzZUxvY2suYWRkUmV0cnkoeyBlcnJvcnM6IFsnRHluYW1vREIuQ29uZGl0aW9uYWxDaGVja0ZhaWxlZEV4Y2VwdGlvbiddLCBtYXhBdHRlbXB0czogMCB9KVxuICAgICAgLmFkZFJldHJ5KHsgbWF4QXR0ZW1wdHM6IDUsIGJhY2tvZmZSYXRlOiAxLjUgfSlcbiAgICAgIC5hZGRDYXRjaChwcm9wcy5uZXh0U3RhdGUsIHsgZXJyb3JzOiBbJ0R5bmFtb0RCLkNvbmRpdGlvbmFsQ2hlY2tGYWlsZWRFeGNlcHRpb24nXSwgcmVzdWx0UGF0aDogJyQubG9ja2luZm8uYWNxdWlzaXRpb25lcnJvcicgfSlcbiAgICAgIC5uZXh0KHByb3BzLm5leHRTdGF0ZSk7XG4gICAgZ2V0TG9jay5icmFuY2goYWNxdWlyZUxvY2spO1xuICAgIGdldExvY2suZW5kU3RhdGVzLmZvckVhY2goaiA9PiBqLm5leHQocHJvcHMuam9iKSk7XG4gICAgcHJvcHMuam9iLm5leHQocmVsZWFzZUxvY2spO1xuXG4gICAgdGhpcy5zdGFydFN0YXRlID0gZ2V0TG9jaztcbiAgICB0aGlzLmVuZFN0YXRlcyA9IHByb3BzLm5leHRTdGF0ZS5lbmRTdGF0ZXM7XG4gIH1cblxuICBwcml2YXRlIHNldFVwTWFwKCk6IE1hcDxzdHJpbmcsIFVzYWdlVHJhY2tlcj4ge1xuICAgIGNvbnN0IHN0YWNrSWQgPSBOYW1lcy51bmlxdWVJZChTdGFjay5vZih0aGlzKSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBTdGFjay5vZih0aGlzKS5ub2RlLnRyeUZpbmRDaGlsZCh0aGlzLnRhYmxlTmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gPE1hcDxzdHJpbmcsIFVzYWdlVHJhY2tlcj4+KFNlbWFwaG9yZS5zZW1hcGhvcmVUcmFja2VyLmdldChzdGFja0lkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG0gPSBuZXcgTWFwPHN0cmluZywgVXNhZ2VUcmFja2VyPigpO1xuICAgICAgU2VtYXBob3JlLnNlbWFwaG9yZVRyYWNrZXIuc2V0KHN0YWNrSWQsIG0pO1xuICAgICAgcmV0dXJuIG07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVUYWJsZShwcm9wczogU2VtYXBob3JlUHJvcHMpOiBUYWJsZSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBTdGFjay5vZih0aGlzKS5ub2RlLnRyeUZpbmRDaGlsZCh0aGlzLnRhYmxlTmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAvLyBKdXN0IGFzc3VtZSB0aGlzIGlzIHRydWVcbiAgICAgIHJldHVybiBleGlzdGluZyBhcyBUYWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBUYWJsZShTdGFjay5vZih0aGlzKSwgdGhpcy50YWJsZU5hbWUsIHtcbiAgICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgICAgbmFtZTogJ0xvY2tOYW1lJyxcbiAgICAgICAgICB0eXBlOiBBdHRyaWJ1dGVUeXBlLlNUUklORyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZENhcGFjaXR5OiBwcm9wcy50YWJsZVJlYWRXcml0ZUNhcGFjaXR5Py5yZWFkQ2FwYWNpdHksXG4gICAgICAgIHdyaXRlQ2FwYWNpdHk6IHByb3BzLnRhYmxlUmVhZFdyaXRlQ2FwYWNpdHk/LndyaXRlQ2FwYWNpdHksXG4gICAgICAgIGJpbGxpbmdNb2RlOiBwcm9wcy50YWJsZVJlYWRXcml0ZUNhcGFjaXR5ID8gQmlsbGluZ01vZGUuUFJPVklTSU9ORUQgOiBCaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -53,11 +53,11 @@
|
|
|
53
53
|
"jest-junit": "^13",
|
|
54
54
|
"jsii": "^1.63.2",
|
|
55
55
|
"jsii-diff": "^1.63.2",
|
|
56
|
-
"jsii-docgen": "^7.0.
|
|
56
|
+
"jsii-docgen": "^7.0.65",
|
|
57
57
|
"jsii-pacmak": "^1.63.2",
|
|
58
58
|
"json-schema": "^0.4.0",
|
|
59
59
|
"npm-check-updates": "^15",
|
|
60
|
-
"projen": "^0.
|
|
60
|
+
"projen": "^0.61.2",
|
|
61
61
|
"standard-version": "^9",
|
|
62
62
|
"ts-jest": "^27",
|
|
63
63
|
"typescript": "^4.7.4"
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
],
|
|
75
75
|
"main": "lib/index.js",
|
|
76
76
|
"license": "Apache-2.0",
|
|
77
|
-
"version": "0.
|
|
77
|
+
"version": "0.1.2",
|
|
78
78
|
"jest": {
|
|
79
79
|
"testMatch": [
|
|
80
80
|
"<rootDir>/src/**/__tests__/**/*.ts?(x)",
|