serverless-spy 2.2.0 → 2.2.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/.jsii +2 -2
- package/dist/releasetag.txt +1 -1
- package/lib/extension/dist/layer/nodejs/node_modules/interceptor.js +34110 -251
- package/lib/extension/dist/layer/nodejs/node_modules/interceptor.js.map +4 -4
- package/lib/listener/WsListener.js +27 -23
- package/lib/listener/WsListener.mjs +27 -23
- package/lib/listener/iot-connection.js +9 -2
- package/lib/listener/iot-connection.mjs +9 -2
- package/lib/src/ServerlessSpy.js +1 -1
- package/listener/WsListener.ts +30 -31
- package/listener/iot-connection.ts +8 -1
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/LICENSE +201 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/README.md +104 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-cjs/defaultProvider.js +1 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +125 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-cjs/remoteProvider.js +1 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-es/defaultProvider.js +39 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-es/index.js +1 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-es/remoteProvider.js +17 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-types/defaultProvider.d.ts +57 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-types/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-types/remoteProvider.d.ts +10 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/defaultProvider.d.ts +23 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/remoteProvider.d.ts +6 -0
- package/node_modules/@aws-sdk/client-dynamodb/node_modules/@aws-sdk/credential-provider-node/package.json +69 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/LICENSE +201 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/README.md +104 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-cjs/defaultProvider.js +1 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +125 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-cjs/remoteProvider.js +1 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-es/defaultProvider.js +39 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-es/index.js +1 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-es/remoteProvider.js +17 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-types/defaultProvider.d.ts +57 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-types/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-types/remoteProvider.d.ts +10 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/defaultProvider.d.ts +23 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/remoteProvider.d.ts +6 -0
- package/node_modules/@aws-sdk/client-eventbridge/node_modules/@aws-sdk/credential-provider-node/package.json +69 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/LICENSE +201 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/README.md +104 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-cjs/defaultProvider.js +1 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +125 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-cjs/remoteProvider.js +1 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-es/defaultProvider.js +39 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-es/index.js +1 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-es/remoteProvider.js +17 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-types/defaultProvider.d.ts +57 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-types/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-types/remoteProvider.d.ts +10 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/defaultProvider.d.ts +23 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/remoteProvider.d.ts +6 -0
- package/node_modules/@aws-sdk/client-lambda/node_modules/@aws-sdk/credential-provider-node/package.json +69 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/LICENSE +201 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/README.md +104 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-cjs/defaultProvider.js +1 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +125 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-cjs/remoteProvider.js +1 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-es/defaultProvider.js +39 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-es/index.js +1 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-es/remoteProvider.js +17 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-types/defaultProvider.d.ts +57 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-types/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-types/remoteProvider.d.ts +10 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/defaultProvider.d.ts +23 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/remoteProvider.d.ts +6 -0
- package/node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node/package.json +69 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/LICENSE +201 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/README.md +104 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-cjs/defaultProvider.js +1 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +125 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-cjs/remoteProvider.js +1 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-es/defaultProvider.js +39 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-es/index.js +1 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-es/remoteProvider.js +17 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-types/defaultProvider.d.ts +57 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-types/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-types/remoteProvider.d.ts +10 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/defaultProvider.d.ts +23 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/remoteProvider.d.ts +6 -0
- package/node_modules/@aws-sdk/client-sns/node_modules/@aws-sdk/credential-provider-node/package.json +69 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/LICENSE +201 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/README.md +104 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-cjs/defaultProvider.js +1 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +125 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-cjs/remoteProvider.js +1 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-es/defaultProvider.js +39 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-es/index.js +1 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-es/remoteProvider.js +17 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-types/defaultProvider.d.ts +57 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-types/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-types/remoteProvider.d.ts +10 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/defaultProvider.d.ts +23 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/remoteProvider.d.ts +6 -0
- package/node_modules/@aws-sdk/client-sqs/node_modules/@aws-sdk/credential-provider-node/package.json +69 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/LICENSE +201 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/README.md +104 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-cjs/defaultProvider.js +1 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +125 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-cjs/remoteProvider.js +1 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-es/defaultProvider.js +39 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-es/index.js +1 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-es/remoteProvider.js +17 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-types/defaultProvider.d.ts +57 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-types/index.d.ts +1 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-types/remoteProvider.d.ts +10 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/defaultProvider.d.ts +23 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/index.d.ts +1 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/dist-types/ts3.4/remoteProvider.d.ts +6 -0
- package/node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node/package.json +69 -0
- package/package.json +3 -3
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/LICENSE +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/README.md +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-cjs/defaultProvider.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-cjs/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-cjs/remoteProvider.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-es/defaultProvider.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-es/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-es/remoteProvider.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-types/defaultProvider.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-types/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-types/remoteProvider.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-types/ts3.4/defaultProvider.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/dist-types/ts3.4/remoteProvider.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node → client-cognito-identity/node_modules/@aws-sdk/credential-provider-node}/package.json +0 -0
|
@@ -168,35 +168,40 @@ class WsListener {
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
createWaitForXXXFunc(serviceKeyForFunction, functionContextAwsRequestId) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
return (paramsW) => {
|
|
172
|
+
let resolve;
|
|
173
|
+
const promise = new Promise((res) => {
|
|
174
|
+
resolve = res;
|
|
175
|
+
});
|
|
176
|
+
const tracker = {
|
|
174
177
|
finished: false,
|
|
178
|
+
// @ts-ignore
|
|
175
179
|
promiseResolve: resolve,
|
|
176
|
-
promiseReject: reject,
|
|
177
180
|
serviceKeyForFunction,
|
|
178
181
|
functionContextAwsRequestId,
|
|
179
182
|
};
|
|
180
|
-
});
|
|
181
|
-
return (paramsW) => {
|
|
182
183
|
tracker.condition = paramsW?.condition;
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
message
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
184
|
+
let timeoutPid;
|
|
185
|
+
const timer = new Promise((_, reject) => {
|
|
186
|
+
timeoutPid = setTimeout(() => {
|
|
187
|
+
if (tracker.finished)
|
|
188
|
+
return;
|
|
189
|
+
tracker.finished = true;
|
|
190
|
+
let message = `Timeout waiting for Serverless Spy message ${serviceKeyForFunction}.`;
|
|
191
|
+
if (tracker.possibleSpyMessageDataForDebugging) {
|
|
192
|
+
message += ` Similar matching spy event data: ${JSON.stringify(tracker.possibleSpyMessageDataForDebugging, null, 2)}`;
|
|
193
|
+
}
|
|
194
|
+
reject(new Error(message));
|
|
195
|
+
}, paramsW?.timoutMs || 10000);
|
|
195
196
|
});
|
|
196
197
|
if (!this.resolveTrackerInOldMessages(tracker)) {
|
|
197
198
|
this.trackers.push(tracker);
|
|
198
199
|
}
|
|
199
|
-
return promise
|
|
200
|
+
return Promise.race([promise, timer]).finally(() => {
|
|
201
|
+
if (!!timeoutPid) {
|
|
202
|
+
clearTimeout(timeoutPid);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
200
205
|
};
|
|
201
206
|
}
|
|
202
207
|
createProxy() {
|
|
@@ -204,10 +209,10 @@ class WsListener {
|
|
|
204
209
|
spyListener.stop = async () => {
|
|
205
210
|
await this.stop();
|
|
206
211
|
};
|
|
207
|
-
|
|
212
|
+
return new Proxy(spyListener, {
|
|
208
213
|
get: (target, objectKey) => {
|
|
209
214
|
if (target.hasOwnProperty(objectKey)) {
|
|
210
|
-
return target[objectKey];
|
|
215
|
+
return target[objectKey].bind(target);
|
|
211
216
|
}
|
|
212
217
|
else if (typeof objectKey === 'string' &&
|
|
213
218
|
objectKey.startsWith(this.functionPrefix)) {
|
|
@@ -216,7 +221,6 @@ class WsListener {
|
|
|
216
221
|
}
|
|
217
222
|
},
|
|
218
223
|
});
|
|
219
|
-
return proxy;
|
|
220
224
|
}
|
|
221
225
|
log(message, ...optionalParams) {
|
|
222
226
|
if (this.debugMode && !this.closed) {
|
|
@@ -225,4 +229,4 @@ class WsListener {
|
|
|
225
229
|
}
|
|
226
230
|
}
|
|
227
231
|
exports.WsListener = WsListener;
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3NMaXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpc3RlbmVyL1dzTGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQTJEO0FBRzNELG1DQUFtQztBQU1uQyxNQUFhLFVBQVU7SUFBdkI7UUFDVSxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBSXpCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUMzQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2xCLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQWtTL0QsQ0FBQztJQWhTUSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQW1DO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLElBQUEsOEJBQWEsRUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFDZCxNQUFNLENBQUMsa0JBQWtCLENBQzFCLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFRLEVBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE1BQU0scUJBQXFCLEdBQ3pCLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFDN0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtB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QUFHLGNBQWMsQ0FDbEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE3U0QsZ0NBNlNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGV2aWNlIH0gZnJvbSAnYXdzLWlvdC1kZXZpY2Utc2RrJztcbmltcG9ydCB7IGZyYWdtZW50LCBnZXRDb25uZWN0aW9uIH0gZnJvbSAnLi9pb3QtY29ubmVjdGlvbic7XG5pbXBvcnQgeyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXIgfSBmcm9tICcuL1NlcnZlcmxlc3NTcHlMaXN0ZW5lcic7XG5pbXBvcnQgeyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXJQYXJhbXMgfSBmcm9tICcuL1NlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcyc7XG5pbXBvcnQgeyBnZXRUb3BpYyB9IGZyb20gJy4vdG9waWMnO1xuaW1wb3J0IHsgV2FpdEZvclBhcmFtcyB9IGZyb20gJy4vV2FpdEZvclBhcmFtcyc7XG5pbXBvcnQgeyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudCB9IGZyb20gJy4uL2NvbW1vbi9zcHlFdmVudHMvRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQnO1xuaW1wb3J0IHsgU3B5RXZlbnQgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL1NweUV2ZW50JztcbmltcG9ydCB7IFNweU1lc3NhZ2UgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL1NweU1lc3NhZ2UnO1xuXG5leHBvcnQgY2xhc3MgV3NMaXN0ZW5lcjxUU3B5RXZlbnRzPiB7XG4gIHByaXZhdGUgbWVzc2FnZXM6IFNweU1lc3NhZ2VTdG9yYWdlW10gPSBbXTtcbiAgcHJpdmF0ZSB0cmFja2VyczogVHJhY2tlcltdID0gW107XG5cbiAgcHJpdmF0ZSBjb25uZWN0aW9uT3BlblJlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGNvbm5lY3Rpb25PcGVuUmVqZWN0PzogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBjbG9zZWQgPSB0cnVlO1xuICBwcml2YXRlIGZ1bmN0aW9uUHJlZml4ID0gJ3dhaXRGb3InO1xuICBwcml2YXRlIGRlYnVnTW9kZSA9IGZhbHNlO1xuICBwcml2YXRlIGNvbm5lY3Rpb246IGRldmljZSB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGZyYWdtZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8bnVtYmVyLCBmcmFnbWVudD4+KCk7XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0KHBhcmFtczogU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zKSB7XG4gICAgdGhpcy5kZWJ1Z01vZGUgPSAhIXBhcmFtcy5kZWJ1Z01vZGU7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGF3YWl0IGdldENvbm5lY3Rpb24oXG4gICAgICAgIHRoaXMuZGVidWdNb2RlLFxuICAgICAgICBwYXJhbXMuc2VydmVybGVzc1NweVdzVXJsXG4gICAgICApO1xuICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHRvcGljID0gZ2V0VG9waWMocGFyYW1zLnNjb3BlIHx8ICcjJyk7XG4gICAgICB0aGlzLmxvZyhgU3Vic2NyaWJpbmcgdG8gdG9waWMgJHt0b3BpY31gKTtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25PcGVuUmVzb2x2ZSA9XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk9wZW5SZXNvbHZlIHx8IHBhcmFtcy5jb25uZWN0aW9uT3BlblJlc29sdmU7XG4gICAgICBjb25zdCBsb2NhbENvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb247XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9nKCdDb25uZWN0aW9uIG9wZW5lZCcpO1xuICAgICAgICBsb2NhbENvbm5lY3Rpb24uc3Vic2NyaWJlKHRvcGljKTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25PcGVuUmVzb2x2ZSkge1xuICAgICAgICAgIGNvbm5lY3Rpb25PcGVuUmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5vbignbWVzc2FnZScsIChfdG9waWM6IHN0cmluZywgZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMubG9nKCdNZXNzYWdlIHJlY2VpdmVkJywgZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIGxldCBtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFmcmFnbWVudC5pZCkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGZyYWdtZW50LmRhdGEpIGFzIFNweU1lc3NhZ2VTdG9yYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBlbmRpbmcgPSB0aGlzLmZyYWdtZW50cy5nZXQoZnJhZ21lbnQuaWQpO1xuICAgICAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgICAgICBwZW5kaW5nID0gbmV3IE1hcCgpO1xuICAgICAgICAgIHRoaXMuZnJhZ21lbnRzLnNldChmcmFnbWVudC5pZCwgcGVuZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZy5zZXQoZnJhZ21lbnQuaW5kZXgsIGZyYWdtZW50KTtcblxuICAgICAgICBpZiAocGVuZGluZy5zaXplID09PSBmcmFnbWVudC5jb3VudCkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBbLi4ucGVuZGluZy52YWx1ZXMoKV1cbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleClcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0YSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICB0aGlzLmZyYWdtZW50cy5kZWxldGUoZnJhZ21lbnQuaWQpO1xuICAgICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGRhdGEpIGFzIFNweU1lc3NhZ2VTdG9yYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICBtZXNzYWdlLnNlcnZpY2VLZXlGb3JGdW5jdGlvbiA9IG1lc3NhZ2Uuc2VydmljZUtleS5yZXBsYWNlKC8jL2csICcnKTtcblxuICAgICAgICAgIGlmIChtZXNzYWdlLnNlcnZpY2VLZXkuc3RhcnRzV2l0aCgnRnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgbWVzc2FnZS5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQgPSAoXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YSBhcyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudFxuICAgICAgICAgICAgKS5jb250ZXh0LmF3c1JlcXVlc3RJZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5yZXNvbHZlT2xkVHJhY2tlcldpdGhOZXdNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nKCdDb25uZWN0aW9uIGNsb3NlZCcpO1xuXG4gICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb25uZWN0aW9uT3BlblJlamVjdCA9XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk9wZW5SZWplY3QgfHwgcGFyYW1zLmNvbm5lY3Rpb25PcGVuUmVqZWN0O1xuICAgICAgdGhpcy5jb25uZWN0aW9uLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvZygnQ29ubmVjdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgIGNvbm5lY3Rpb25PcGVuUmVqZWN0Py4oZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBjb25uZWN0aW9uJywgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdG9wKCkge1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24hLmVuZCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyOiBUcmFja2VyLCBtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSkge1xuICAgIGlmICh0cmFja2VyLmZpbmlzaGVkKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICAodHJhY2tlci5zZXJ2aWNlS2V5ICYmIHRyYWNrZXIuc2VydmljZUtleSA9PT0gbWVzc2FnZS5zZXJ2aWNlS2V5KSB8fFxuICAgICAgKHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uICYmXG4gICAgICAgIHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uID09PSBtZXNzYWdlLnNlcnZpY2VLZXlGb3JGdW5jdGlvbilcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaENvbmRpdGlvbih0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICB0cmFja2VyLmZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBzcHlBbmRKZXN0TWF0Y2hlcnM6IGFueSA9IHtcbiAgICAgICAgICBnZXREYXRhOiAoKSA9PiBtZXNzYWdlLmRhdGEsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2VydmljZUtleUZvckZ1bmN0aW9uID0gdHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb247XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gJiZcbiAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uc3RhcnRzV2l0aCgnRnVuY3Rpb24nKSAmJlxuICAgICAgICAgIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uZW5kc1dpdGgoJ1JlcXVlc3QnKSB8fFxuICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uLmVuZHNXaXRoKCdDb25zb2xlJykpXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbiA9IHNlcnZpY2VLZXlGb3JGdW5jdGlvbjtcblxuICAgICAgICAgIGlmIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbi5lbmRzV2l0aCgnUmVxdWVzdCcpKSB7XG4gICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbiA9IHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4ubGVuZ3RoIC0gJ1JlcXVlc3QnLmxlbmd0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluLmVuZHNXaXRoKCdDb25zb2xlJykpIHtcbiAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluID0gc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4uc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbi5sZW5ndGggLSAnQ29uc29sZScubGVuZ3RoXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNweUFuZEplc3RNYXRjaGVycy5mb2xsb3dlZEJ5Q29uc29sZSA9IChwYXJhbXNXOiBXYWl0Rm9yUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVXYWl0Rm9yWFhYRnVuYyhcbiAgICAgICAgICAgICAgYCR7c2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW59Q29uc29sZWAsXG4gICAgICAgICAgICAgIChtZXNzYWdlLmRhdGEgYXMgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQpLmNvbnRleHQuYXdzUmVxdWVzdElkXG4gICAgICAgICAgICApKHBhcmFtc1cpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzcHlBbmRKZXN0TWF0Y2hlcnMuZm9sbG93ZWRCeVJlc3BvbnNlID0gKHBhcmFtc1c6IFdhaXRGb3JQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdhaXRGb3JYWFhGdW5jKFxuICAgICAgICAgICAgICBgJHtzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbn1SZXNwb25zZWAsXG4gICAgICAgICAgICAgIChtZXNzYWdlLmRhdGEgYXMgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQpLmNvbnRleHQuYXdzUmVxdWVzdElkXG4gICAgICAgICAgICApKHBhcmFtc1cpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShzcHlBbmRKZXN0TWF0Y2hlcnMsIHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgb2JqZWN0S2V5OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuaGFzT3duUHJvcGVydHkob2JqZWN0S2V5KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W29iamVjdEtleV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdEtleSAhPT0gJ3RoZW4nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgamVzdEZ1bmN0aW9uVG9FeGVjdXRlID0gKGV4cGVjdChtZXNzYWdlLmRhdGEpIGFzIGFueSlbXG4gICAgICAgICAgICAgICAgICBvYmplY3RLZXlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGplc3RGdW5jdGlvblRvRXhlY3V0ZS5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyYWNrZXIucHJvbWlzZVJlc29sdmUocHJveHkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVHJhY2tlckluT2xkTWVzc2FnZXModHJhY2tlcjogVHJhY2tlcikge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiB0aGlzLm1lc3NhZ2VzKSB7XG4gICAgICBpZiAodGhpcy50cmFja2VyTWF0Y2hNZXNzYWdlKHRyYWNrZXIsIG1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU9sZFRyYWNrZXJXaXRoTmV3TWVzc2FnZShtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSkge1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnRyYWNrZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdHJhY2tlciA9IHRoaXMudHJhY2tlcnNbaW5kZXhdO1xuICAgICAgaWYgKHRoaXMudHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICB0aGlzLnRyYWNrZXJzID0gdGhpcy50cmFja2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHRyYWNrZXJNYXRjaENvbmRpdGlvbih0cmFja2VyOiBUcmFja2VyLCBtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSkge1xuICAgIGNvbnN0IG1hdGNoQ29uZGl0aW9uID1cbiAgICAgICh0cmFja2VyLmNvbmRpdGlvbiAmJiB0cmFja2VyLmNvbmRpdGlvbihtZXNzYWdlLmRhdGEpKSB8fFxuICAgICAgIXRyYWNrZXIuY29uZGl0aW9uO1xuXG4gICAgY29uc3QgbWF0Y2hSZXF1ZXN0SWQgPVxuICAgICAgKHRyYWNrZXIuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkICYmXG4gICAgICAgIHRyYWNrZXIuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkID09PVxuICAgICAgICAgIG1lc3NhZ2UuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkKSB8fFxuICAgICAgIXRyYWNrZXIuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkO1xuXG4gICAgaWYgKG1hdGNoQ29uZGl0aW9uICYmIG1hdGNoUmVxdWVzdElkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICAhbWF0Y2hDb25kaXRpb24gJiZcbiAgICAgICAgbWF0Y2hSZXF1ZXN0SWQgJiZcbiAgICAgICAgIXRyYWNrZXIucG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZ1xuICAgICAgKSB7XG4gICAgICAgIHRyYWNrZXIucG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZyA9IG1lc3NhZ2UuZGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdhaXRGb3JYWFhGdW5jKFxuICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbjogc3RyaW5nLFxuICAgIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZ1xuICApIHtcbiAgICBsZXQgdHJhY2tlcjogVHJhY2tlcjtcblxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cmFja2VyID0ge1xuICAgICAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgICAgIHByb21pc2VSZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICBwcm9taXNlUmVqZWN0OiByZWplY3QsXG4gICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbixcbiAgICAgICAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiAocGFyYW1zVz86IFdhaXRGb3JQYXJhbXM8U3B5RXZlbnQ+KSA9PiB7XG4gICAgICB0cmFja2VyLmNvbmRpdGlvbiA9IHBhcmFtc1c/LmNvbmRpdGlvbjtcblxuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRyYWNrZXIuZmluaXNoZWQpIHJldHVybjtcbiAgICAgICAgdHJhY2tlci5maW5pc2hlZCA9IHRydWU7XG4gICAgICAgIGxldCBtZXNzYWdlID0gYFRpbWVvdXQgd2FpdGluZyBmb3IgU2VydmVybGVzcyBTcHkgbWVzc2FnZSAke3NlcnZpY2VLZXlGb3JGdW5jdGlvbn0uYDtcblxuICAgICAgICBpZiAodHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgIFNpbWlsYXIgbWF0Y2hpbmcgc3B5IGV2ZW50IGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICB0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmcsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMlxuICAgICAgICAgICl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYWNrZXIucHJvbWlzZVJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgICAgfSwgcGFyYW1zVz8udGltb3V0TXMgfHwgMTAwMDApO1xuXG4gICAgICB2b2lkIHByb21pc2UuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLnJlc29sdmVUcmFja2VySW5PbGRNZXNzYWdlcyh0cmFja2VyKSkge1xuICAgICAgICB0aGlzLnRyYWNrZXJzLnB1c2godHJhY2tlcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlUHJveHkoKSB7XG4gICAgY29uc3Qgc3B5TGlzdGVuZXIgPSB7fSBhcyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXI8VFNweUV2ZW50cz47XG5cbiAgICBzcHlMaXN0ZW5lci5zdG9wID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNweUxpc3RlbmVyLCB7XG4gICAgICBnZXQ6ICh0YXJnZXQ6IGFueSwgb2JqZWN0S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShvYmplY3RLZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldFtvYmplY3RLZXldO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiBvYmplY3RLZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgb2JqZWN0S2V5LnN0YXJ0c1dpdGgodGhpcy5mdW5jdGlvblByZWZpeClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc2VydmljZUtleUZvckZ1bmN0aW9uID0gb2JqZWN0S2V5LnN1YnN0cmluZyhcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25QcmVmaXgubGVuZ3RoXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdhaXRGb3JYWFhGdW5jKHNlcnZpY2VLZXlGb3JGdW5jdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJveHkgYXMgU2VydmVybGVzc1NweUxpc3RlbmVyPFRTcHlFdmVudHM+O1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pIHtcbiAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgIXRoaXMuY2xvc2VkKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAnU1NQWScsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgLi4ub3B0aW9uYWxQYXJhbXNcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbnR5cGUgVHJhY2tlciA9IHtcbiAgcHJvbWlzZVJlc29sdmU6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIHByb21pc2VSZWplY3Q6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIGZpbmlzaGVkOiBib29sZWFuO1xuICBzZXJ2aWNlS2V5Pzogc3RyaW5nO1xuICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24/OiBzdHJpbmc7XG4gIGNvbmRpdGlvbj86IChkYXRhOiBhbnkpID0+IGJvb2xlYW47XG4gIHRpbW91dE1zPzogbnVtYmVyO1xuICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIHBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmc/OiBhbnk7XG59O1xuXG50eXBlIFNweU1lc3NhZ2VTdG9yYWdlID0gU3B5TWVzc2FnZSAmIHtcbiAgc2VydmljZUtleUZvckZ1bmN0aW9uOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZztcbn07XG4iXX0=
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3NMaXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpc3RlbmVyL1dzTGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQTJEO0FBRzNELG1DQUFtQztBQUtuQyxNQUFhLFVBQVU7SUFBdkI7UUFDVSxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBSXpCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUMzQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2xCLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQW1TL0QsQ0FBQztJQWpTUSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQW1DO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLElBQUEsOEJBQWEsRUFDbkMsSUFBSSxDQUFDLFNBQVMsRUFDZCxNQUFNLENBQUMsa0JBQWtCLENBQzFCLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFRLEVBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE1BQU0scUJBQXFCLEdBQ3pCLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFDN0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUM5QixlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLHFCQUFxQixFQUFFLENBQUM7b0JBQzFCLHFCQUFxQixFQUFFLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQWMsRUFBRSxJQUFZLEVBQUUsRUFBRTtnQkFDN0QsSUFBSSxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPO2dCQUV4QixJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLE9BQU8sR0FBa0MsU0FBUyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFzQixDQUFDO2dCQUMzRCxDQUFDO2dCQUVELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFdEMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt5QkFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO3lCQUNqQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7eUJBQ3hCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBc0IsQ0FBQztnQkFDbEQsQ0FBQztnQkFFRCxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBRXJFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDOUMsT0FBTyxDQUFDLDJCQUEyQixHQUNqQyxPQUFPLENBQUMsSUFDVCxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7b0JBQ3pCLENBQUM7b0JBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUU5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sb0JBQW9CLEdBQ3hCLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsb0JBQW9CLENBQUM7WUFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE9BQWdCLEVBQUUsT0FBMEI7UUFDdEUsSUFBSSxPQUFPLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFN0IsSUFDRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ2pFLENBQUMsT0FBTyxDQUFDLHFCQUFxQjtnQkFDNUIsT0FBTyxDQUFDLHFCQUFxQixLQUFLLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNsRSxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUV4QixNQUFNLGtCQUFrQixHQUFRO29CQUM5QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUk7aUJBQzVCLENBQUM7Z0JBRUYsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUM7Z0JBQzVELElBQ0UscUJBQXFCO29CQUNyQixxQkFBcUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO29CQUM1QyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7d0JBQ3hDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM1QyxDQUFDO29CQUNELElBQUksMEJBQTBCLEdBQUcscUJBQXFCLENBQUM7b0JBRXZELElBQUksMEJBQTBCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7d0JBQ25ELDBCQUEwQixHQUFHLDBCQUEwQixDQUFDLFNBQVMsQ0FDL0QsQ0FBQyxFQUNELDBCQUEwQixDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUNyRCxDQUFDO29CQUNKLENBQUM7eUJBQU0sSUFBSSwwQkFBMEIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUQsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUMsU0FBUyxDQUMvRCxDQUFDLEVBQ0QsMEJBQTBCLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQ3JELENBQUM7b0JBQ0osQ0FBQztvQkFFRCxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLE9BQXNCLEVBQUUsRUFBRTt3QkFDaEUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQzlCLEdBQUcsMEJBQTBCLFNBQVMsRUFDckMsT0FBTyxDQUFDLElBQWdDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FDL0QsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDYixDQUFDLENBQUM7b0JBRUYsa0JBQWtCLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxPQUFzQixFQUFFLEVBQUU7d0JBQ2pFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUM5QixHQUFHLDBCQUEwQixVQUFVLEVBQ3RDLE9BQU8sQ0FBQyxJQUFnQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQy9ELENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2IsQ0FBQyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUU7b0JBQzFDLEdBQUcsRUFBRSxVQUFVLE1BQVcsRUFBRSxTQUFpQjt3QkFDM0MsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7NEJBQ3JDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUMzQixDQUFDOzZCQUFNLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRSxDQUFDOzRCQUNoQyxPQUFPO2dDQUNMLE1BQU0scUJBQXFCLEdBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQVMsQ0FDekQsU0FBUyxDQUNWLENBQUM7Z0NBQ0YscUJBQXFCLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQ0FDbEQsT0FBTyxLQUFLLENBQUM7NEJBQ2YsQ0FBQyxDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQztpQkFDRixDQUFDLENBQUM7Z0JBRUgsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLDJCQUEyQixDQUFDLE9BQWdCO1FBQ2xELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sK0JBQStCLENBQUMsT0FBMEI7UUFDaEUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUFnQixFQUFFLE9BQTBCO1FBQ3hFLE1BQU0sY0FBYyxHQUNsQixDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBRXJCLE1BQU0sY0FBYyxHQUNsQixDQUFDLE9BQU8sQ0FBQywyQkFBMkI7WUFDbEMsT0FBTyxDQUFDLDJCQUEyQjtnQkFDakMsT0FBTyxDQUFDLDJCQUEyQixDQUFDO1lBQ3hDLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDO1FBRXZDLElBQUksY0FBYyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLENBQUM7WUFDTixJQUNFLENBQUMsY0FBYztnQkFDZixjQUFjO2dCQUNkLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxFQUMzQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxrQ0FBa0MsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzVELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQzFCLHFCQUE2QixFQUM3QiwyQkFBb0M7UUFFcEMsT0FBTyxDQUFDLE9BQXVCLEVBQUUsRUFBRTtZQUNqQyxJQUFJLE9BQWlELENBQUM7WUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFZO2dCQUN2QixRQUFRLEVBQUUsS0FBSztnQkFDZixhQUFhO2dCQUNiLGNBQWMsRUFBRSxPQUFPO2dCQUN2QixxQkFBcUI7Z0JBQ3JCLDJCQUEyQjthQUM1QixDQUFDO1lBRUYsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsU0FBUyxDQUFDO1lBRXZDLElBQUksVUFBc0MsQ0FBQztZQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDdEMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQzNCLElBQUksT0FBTyxDQUFDLFFBQVE7d0JBQUUsT0FBTztvQkFDN0IsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBQ3hCLElBQUksT0FBTyxHQUFHLDhDQUE4QyxxQkFBcUIsR0FBRyxDQUFDO29CQUVyRixJQUFJLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO3dCQUMvQyxPQUFPLElBQUkscUNBQXFDLElBQUksQ0FBQyxTQUFTLENBQzVELE9BQU8sQ0FBQyxrQ0FBa0MsRUFDMUMsSUFBSSxFQUNKLENBQUMsQ0FDRixFQUFFLENBQUM7b0JBQ04sQ0FBQztvQkFFRCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLElBQUksS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDakIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLFdBQVcsR0FBRyxFQUF1QyxDQUFDO1FBRTVELFdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDNUIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsT0FBTyxJQUFJLEtBQUssQ0FBb0MsV0FBVyxFQUFFO1lBQy9ELEdBQUcsRUFBRSxDQUFDLE1BQVcsRUFBRSxTQUFpQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNyQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7cUJBQU0sSUFDTCxPQUFPLFNBQVMsS0FBSyxRQUFRO29CQUM3QixTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDekMsQ0FBQztvQkFDRCxNQUFNLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUMzQixDQUFDO29CQUVGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEdBQUcsQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFxQjtRQUNuRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FDWCxNQUFNLEVBQ04sT0FBTyxFQUNQLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQ3hCLEdBQUcsY0FBYyxDQUNsQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQTlTRCxnQ0E4U0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXZpY2UgfSBmcm9tICdhd3MtaW90LWRldmljZS1zZGsnO1xuaW1wb3J0IHsgZnJhZ21lbnQsIGdldENvbm5lY3Rpb24gfSBmcm9tICcuL2lvdC1jb25uZWN0aW9uJztcbmltcG9ydCB7IFNlcnZlcmxlc3NTcHlMaXN0ZW5lciB9IGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyJztcbmltcG9ydCB7IFNlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcyB9IGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zJztcbmltcG9ydCB7IGdldFRvcGljIH0gZnJvbSAnLi90b3BpYyc7XG5pbXBvcnQgeyBXYWl0Rm9yUGFyYW1zIH0gZnJvbSAnLi9XYWl0Rm9yUGFyYW1zJztcbmltcG9ydCB7IEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50IH0gZnJvbSAnLi4vY29tbW9uL3NweUV2ZW50cy9GdW5jdGlvblJlcXVlc3RTcHlFdmVudCc7XG5pbXBvcnQgeyBTcHlNZXNzYWdlIH0gZnJvbSAnLi4vY29tbW9uL3NweUV2ZW50cy9TcHlNZXNzYWdlJztcblxuZXhwb3J0IGNsYXNzIFdzTGlzdGVuZXI8VFNweUV2ZW50cz4ge1xuICBwcml2YXRlIG1lc3NhZ2VzOiBTcHlNZXNzYWdlU3RvcmFnZVtdID0gW107XG4gIHByaXZhdGUgdHJhY2tlcnM6IFRyYWNrZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgY29ubmVjdGlvbk9wZW5SZXNvbHZlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uT3BlblJlamVjdD86IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gIHByaXZhdGUgY2xvc2VkID0gdHJ1ZTtcbiAgcHJpdmF0ZSBmdW5jdGlvblByZWZpeCA9ICd3YWl0Rm9yJztcbiAgcHJpdmF0ZSBkZWJ1Z01vZGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uOiBkZXZpY2UgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBmcmFnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgTWFwPG51bWJlciwgZnJhZ21lbnQ+PigpO1xuXG4gIHB1YmxpYyBhc3luYyBzdGFydChwYXJhbXM6IFNlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcykge1xuICAgIHRoaXMuZGVidWdNb2RlID0gISFwYXJhbXMuZGVidWdNb2RlO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gPSBhd2FpdCBnZXRDb25uZWN0aW9uKFxuICAgICAgICB0aGlzLmRlYnVnTW9kZSxcbiAgICAgICAgcGFyYW1zLnNlcnZlcmxlc3NTcHlXc1VybFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICBjb25zdCB0b3BpYyA9IGdldFRvcGljKHBhcmFtcy5zY29wZSB8fCAnIycpO1xuICAgICAgdGhpcy5sb2coYFN1YnNjcmliaW5nIHRvIHRvcGljICR7dG9waWN9YCk7XG4gICAgICBjb25zdCBjb25uZWN0aW9uT3BlblJlc29sdmUgPVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25PcGVuUmVzb2x2ZSB8fCBwYXJhbXMuY29ubmVjdGlvbk9wZW5SZXNvbHZlO1xuICAgICAgY29uc3QgbG9jYWxDb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9uO1xuICAgICAgdGhpcy5jb25uZWN0aW9uLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvZygnQ29ubmVjdGlvbiBvcGVuZWQnKTtcbiAgICAgICAgbG9jYWxDb25uZWN0aW9uLnN1YnNjcmliZSh0b3BpYyk7XG4gICAgICAgIGlmIChjb25uZWN0aW9uT3BlblJlc29sdmUpIHtcbiAgICAgICAgICBjb25uZWN0aW9uT3BlblJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ub24oJ21lc3NhZ2UnLCAoX3RvcGljOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgICAgICB0aGlzLmxvZygnTWVzc2FnZSByZWNlaXZlZCcsIGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICBsZXQgbWVzc2FnZTogU3B5TWVzc2FnZVN0b3JhZ2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghZnJhZ21lbnQuaWQpIHtcbiAgICAgICAgICBtZXNzYWdlID0gSlNPTi5wYXJzZShmcmFnbWVudC5kYXRhKSBhcyBTcHlNZXNzYWdlU3RvcmFnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwZW5kaW5nID0gdGhpcy5mcmFnbWVudHMuZ2V0KGZyYWdtZW50LmlkKTtcbiAgICAgICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICAgICAgcGVuZGluZyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICB0aGlzLmZyYWdtZW50cy5zZXQoZnJhZ21lbnQuaWQsIHBlbmRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHBlbmRpbmcuc2V0KGZyYWdtZW50LmluZGV4LCBmcmFnbWVudCk7XG5cbiAgICAgICAgaWYgKHBlbmRpbmcuc2l6ZSA9PT0gZnJhZ21lbnQuY291bnQpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gWy4uLnBlbmRpbmcudmFsdWVzKCldXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpXG4gICAgICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLmRhdGEpXG4gICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgICAgdGhpcy5mcmFnbWVudHMuZGVsZXRlKGZyYWdtZW50LmlkKTtcbiAgICAgICAgICBtZXNzYWdlID0gSlNPTi5wYXJzZShkYXRhKSBhcyBTcHlNZXNzYWdlU3RvcmFnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgbWVzc2FnZS5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSBtZXNzYWdlLnNlcnZpY2VLZXkucmVwbGFjZSgvIy9nLCAnJyk7XG5cbiAgICAgICAgICBpZiAobWVzc2FnZS5zZXJ2aWNlS2V5LnN0YXJ0c1dpdGgoJ0Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkID0gKFxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEgYXMgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnRcbiAgICAgICAgICAgICkuY29udGV4dC5hd3NSZXF1ZXN0SWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZU9sZFRyYWNrZXJXaXRoTmV3TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZygnQ29ubmVjdGlvbiBjbG9zZWQnKTtcblxuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29ubmVjdGlvbk9wZW5SZWplY3QgPVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25PcGVuUmVqZWN0IHx8IHBhcmFtcy5jb25uZWN0aW9uT3BlblJlamVjdDtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2coJ0Nvbm5lY3Rpb24gZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICBjb25uZWN0aW9uT3BlblJlamVjdD8uKGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgY29ubmVjdGlvbicsIGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RvcCgpIHtcbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5jb25uZWN0aW9uIS5lbmQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHRyYWNrZXJNYXRjaE1lc3NhZ2UodHJhY2tlcjogVHJhY2tlciwgbWVzc2FnZTogU3B5TWVzc2FnZVN0b3JhZ2UpIHtcbiAgICBpZiAodHJhY2tlci5maW5pc2hlZCkgcmV0dXJuO1xuXG4gICAgaWYgKFxuICAgICAgKHRyYWNrZXIuc2VydmljZUtleSAmJiB0cmFja2VyLnNlcnZpY2VLZXkgPT09IG1lc3NhZ2Uuc2VydmljZUtleSkgfHxcbiAgICAgICh0cmFja2VyLnNlcnZpY2VLZXlGb3JGdW5jdGlvbiAmJlxuICAgICAgICB0cmFja2VyLnNlcnZpY2VLZXlGb3JGdW5jdGlvbiA9PT0gbWVzc2FnZS5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24pXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy50cmFja2VyTWF0Y2hDb25kaXRpb24odHJhY2tlciwgbWVzc2FnZSkpIHtcbiAgICAgICAgdHJhY2tlci5maW5pc2hlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgc3B5QW5kSmVzdE1hdGNoZXJzOiBhbnkgPSB7XG4gICAgICAgICAgZ2V0RGF0YTogKCkgPT4gbWVzc2FnZS5kYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHNlcnZpY2VLZXlGb3JGdW5jdGlvbiA9IHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uICYmXG4gICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uLnN0YXJ0c1dpdGgoJ0Z1bmN0aW9uJykgJiZcbiAgICAgICAgICAoc2VydmljZUtleUZvckZ1bmN0aW9uLmVuZHNXaXRoKCdSZXF1ZXN0JykgfHxcbiAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbi5lbmRzV2l0aCgnQ29uc29sZScpKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4gPSBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb247XG5cbiAgICAgICAgICBpZiAoc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4uZW5kc1dpdGgoJ1JlcXVlc3QnKSkge1xuICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4gPSBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbi5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluLmxlbmd0aCAtICdSZXF1ZXN0Jy5sZW5ndGhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbi5lbmRzV2l0aCgnQ29uc29sZScpKSB7XG4gICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbiA9IHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4ubGVuZ3RoIC0gJ0NvbnNvbGUnLmxlbmd0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzcHlBbmRKZXN0TWF0Y2hlcnMuZm9sbG93ZWRCeUNvbnNvbGUgPSAocGFyYW1zVzogV2FpdEZvclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2FpdEZvclhYWEZ1bmMoXG4gICAgICAgICAgICAgIGAke3NlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWlufUNvbnNvbGVgLFxuICAgICAgICAgICAgICAobWVzc2FnZS5kYXRhIGFzIEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50KS5jb250ZXh0LmF3c1JlcXVlc3RJZFxuICAgICAgICAgICAgKShwYXJhbXNXKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc3B5QW5kSmVzdE1hdGNoZXJzLmZvbGxvd2VkQnlSZXNwb25zZSA9IChwYXJhbXNXOiBXYWl0Rm9yUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVXYWl0Rm9yWFhYRnVuYyhcbiAgICAgICAgICAgICAgYCR7c2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW59UmVzcG9uc2VgLFxuICAgICAgICAgICAgICAobWVzc2FnZS5kYXRhIGFzIEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50KS5jb250ZXh0LmF3c1JlcXVlc3RJZFxuICAgICAgICAgICAgKShwYXJhbXNXKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoc3B5QW5kSmVzdE1hdGNoZXJzLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIG9iamVjdEtleTogc3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KG9iamVjdEtleSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtvYmplY3RLZXldO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3RLZXkgIT09ICd0aGVuJykge1xuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGplc3RGdW5jdGlvblRvRXhlY3V0ZSA9IChleHBlY3QobWVzc2FnZS5kYXRhKSBhcyBhbnkpW1xuICAgICAgICAgICAgICAgICAgb2JqZWN0S2V5XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBqZXN0RnVuY3Rpb25Ub0V4ZWN1dGUuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0cmFja2VyLnByb21pc2VSZXNvbHZlKHByb3h5KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVRyYWNrZXJJbk9sZE1lc3NhZ2VzKHRyYWNrZXI6IFRyYWNrZXIpIHtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgdGhpcy5tZXNzYWdlcykge1xuICAgICAgaWYgKHRoaXMudHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVPbGRUcmFja2VyV2l0aE5ld01lc3NhZ2UobWVzc2FnZTogU3B5TWVzc2FnZVN0b3JhZ2UpIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy50cmFja2Vycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHRyYWNrZXIgPSB0aGlzLnRyYWNrZXJzW2luZGV4XTtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaE1lc3NhZ2UodHJhY2tlciwgbWVzc2FnZSkpIHtcbiAgICAgICAgdGhpcy50cmFja2VycyA9IHRoaXMudHJhY2tlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja2VyTWF0Y2hDb25kaXRpb24odHJhY2tlcjogVHJhY2tlciwgbWVzc2FnZTogU3B5TWVzc2FnZVN0b3JhZ2UpIHtcbiAgICBjb25zdCBtYXRjaENvbmRpdGlvbiA9XG4gICAgICAodHJhY2tlci5jb25kaXRpb24gJiYgdHJhY2tlci5jb25kaXRpb24obWVzc2FnZS5kYXRhKSkgfHxcbiAgICAgICF0cmFja2VyLmNvbmRpdGlvbjtcblxuICAgIGNvbnN0IG1hdGNoUmVxdWVzdElkID1cbiAgICAgICh0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCAmJlxuICAgICAgICB0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCA9PT1cbiAgICAgICAgICBtZXNzYWdlLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCkgfHxcbiAgICAgICF0cmFja2VyLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZDtcblxuICAgIGlmIChtYXRjaENvbmRpdGlvbiAmJiBtYXRjaFJlcXVlc3RJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgIW1hdGNoQ29uZGl0aW9uICYmXG4gICAgICAgIG1hdGNoUmVxdWVzdElkICYmXG4gICAgICAgICF0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmdcbiAgICAgICkge1xuICAgICAgICB0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmcgPSBtZXNzYWdlLmRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVXYWl0Rm9yWFhYRnVuYyhcbiAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb246IHN0cmluZyxcbiAgICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ/OiBzdHJpbmdcbiAgKSB7XG4gICAgcmV0dXJuIChwYXJhbXNXPzogV2FpdEZvclBhcmFtcykgPT4ge1xuICAgICAgbGV0IHJlc29sdmU6ICh2YWx1ZTogdm9pZCB8IFByb21pc2VMaWtlPGFueT4pID0+IHZvaWQ7XG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlcykgPT4ge1xuICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB0cmFja2VyOiBUcmFja2VyID0ge1xuICAgICAgICBmaW5pc2hlZDogZmFsc2UsXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcHJvbWlzZVJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbixcbiAgICAgICAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkLFxuICAgICAgfTtcblxuICAgICAgdHJhY2tlci5jb25kaXRpb24gPSBwYXJhbXNXPy5jb25kaXRpb247XG5cbiAgICAgIGxldCB0aW1lb3V0UGlkOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHRpbWVyID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICB0aW1lb3V0UGlkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRyYWNrZXIuZmluaXNoZWQpIHJldHVybjtcbiAgICAgICAgICB0cmFja2VyLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICBsZXQgbWVzc2FnZSA9IGBUaW1lb3V0IHdhaXRpbmcgZm9yIFNlcnZlcmxlc3MgU3B5IG1lc3NhZ2UgJHtzZXJ2aWNlS2V5Rm9yRnVuY3Rpb259LmA7XG5cbiAgICAgICAgICBpZiAodHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nKSB7XG4gICAgICAgICAgICBtZXNzYWdlICs9IGAgU2ltaWxhciBtYXRjaGluZyBzcHkgZXZlbnQgZGF0YTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgdHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAyXG4gICAgICAgICAgICApfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgIH0sIHBhcmFtc1c/LnRpbW91dE1zIHx8IDEwMDAwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMucmVzb2x2ZVRyYWNrZXJJbk9sZE1lc3NhZ2VzKHRyYWNrZXIpKSB7XG4gICAgICAgIHRoaXMudHJhY2tlcnMucHVzaCh0cmFja2VyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmFjZShbcHJvbWlzZSwgdGltZXJdKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgaWYgKCEhdGltZW91dFBpZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0UGlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVQcm94eSgpIHtcbiAgICBjb25zdCBzcHlMaXN0ZW5lciA9IHt9IGFzIFNlcnZlcmxlc3NTcHlMaXN0ZW5lcjxUU3B5RXZlbnRzPjtcblxuICAgIHNweUxpc3RlbmVyLnN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm94eTxTZXJ2ZXJsZXNzU3B5TGlzdGVuZXI8VFNweUV2ZW50cz4+KHNweUxpc3RlbmVyLCB7XG4gICAgICBnZXQ6ICh0YXJnZXQ6IGFueSwgb2JqZWN0S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShvYmplY3RLZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldFtvYmplY3RLZXldLmJpbmQodGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0eXBlb2Ygb2JqZWN0S2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIG9iamVjdEtleS5zdGFydHNXaXRoKHRoaXMuZnVuY3Rpb25QcmVmaXgpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHNlcnZpY2VLZXlGb3JGdW5jdGlvbiA9IG9iamVjdEtleS5zdWJzdHJpbmcoXG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9uUHJlZml4Lmxlbmd0aFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVXYWl0Rm9yWFhYRnVuYyhzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pIHtcbiAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgIXRoaXMuY2xvc2VkKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAnU1NQWScsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgLi4ub3B0aW9uYWxQYXJhbXNcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbnR5cGUgVHJhY2tlciA9IHtcbiAgcHJvbWlzZVJlc29sdmU6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIGZpbmlzaGVkOiBib29sZWFuO1xuICBzZXJ2aWNlS2V5Pzogc3RyaW5nO1xuICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24/OiBzdHJpbmc7XG4gIGNvbmRpdGlvbj86IChkYXRhOiBhbnkpID0+IGJvb2xlYW47XG4gIHRpbW91dE1zPzogbnVtYmVyO1xuICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIHBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmc/OiBhbnk7XG59O1xuXG50eXBlIFNweU1lc3NhZ2VTdG9yYWdlID0gU3B5TWVzc2FnZSAmIHtcbiAgc2VydmljZUtleUZvckZ1bmN0aW9uOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZztcbn07XG4iXX0=
|
|
@@ -165,35 +165,40 @@ export class WsListener {
|
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
createWaitForXXXFunc(serviceKeyForFunction, functionContextAwsRequestId) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
return (paramsW) => {
|
|
169
|
+
let resolve;
|
|
170
|
+
const promise = new Promise((res) => {
|
|
171
|
+
resolve = res;
|
|
172
|
+
});
|
|
173
|
+
const tracker = {
|
|
171
174
|
finished: false,
|
|
175
|
+
// @ts-ignore
|
|
172
176
|
promiseResolve: resolve,
|
|
173
|
-
promiseReject: reject,
|
|
174
177
|
serviceKeyForFunction,
|
|
175
178
|
functionContextAwsRequestId,
|
|
176
179
|
};
|
|
177
|
-
});
|
|
178
|
-
return (paramsW) => {
|
|
179
180
|
tracker.condition = paramsW?.condition;
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
message
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
181
|
+
let timeoutPid;
|
|
182
|
+
const timer = new Promise((_, reject) => {
|
|
183
|
+
timeoutPid = setTimeout(() => {
|
|
184
|
+
if (tracker.finished)
|
|
185
|
+
return;
|
|
186
|
+
tracker.finished = true;
|
|
187
|
+
let message = `Timeout waiting for Serverless Spy message ${serviceKeyForFunction}.`;
|
|
188
|
+
if (tracker.possibleSpyMessageDataForDebugging) {
|
|
189
|
+
message += ` Similar matching spy event data: ${JSON.stringify(tracker.possibleSpyMessageDataForDebugging, null, 2)}`;
|
|
190
|
+
}
|
|
191
|
+
reject(new Error(message));
|
|
192
|
+
}, paramsW?.timoutMs || 10000);
|
|
192
193
|
});
|
|
193
194
|
if (!this.resolveTrackerInOldMessages(tracker)) {
|
|
194
195
|
this.trackers.push(tracker);
|
|
195
196
|
}
|
|
196
|
-
return promise
|
|
197
|
+
return Promise.race([promise, timer]).finally(() => {
|
|
198
|
+
if (!!timeoutPid) {
|
|
199
|
+
clearTimeout(timeoutPid);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
197
202
|
};
|
|
198
203
|
}
|
|
199
204
|
createProxy() {
|
|
@@ -201,10 +206,10 @@ export class WsListener {
|
|
|
201
206
|
spyListener.stop = async () => {
|
|
202
207
|
await this.stop();
|
|
203
208
|
};
|
|
204
|
-
|
|
209
|
+
return new Proxy(spyListener, {
|
|
205
210
|
get: (target, objectKey) => {
|
|
206
211
|
if (target.hasOwnProperty(objectKey)) {
|
|
207
|
-
return target[objectKey];
|
|
212
|
+
return target[objectKey].bind(target);
|
|
208
213
|
}
|
|
209
214
|
else if (typeof objectKey === 'string' &&
|
|
210
215
|
objectKey.startsWith(this.functionPrefix)) {
|
|
@@ -213,7 +218,6 @@ export class WsListener {
|
|
|
213
218
|
}
|
|
214
219
|
},
|
|
215
220
|
});
|
|
216
|
-
return proxy;
|
|
217
221
|
}
|
|
218
222
|
log(message, ...optionalParams) {
|
|
219
223
|
if (this.debugMode && !this.closed) {
|
|
@@ -221,4 +225,4 @@ export class WsListener {
|
|
|
221
225
|
}
|
|
222
226
|
}
|
|
223
227
|
}
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3NMaXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpc3RlbmVyL1dzTGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFNbkMsTUFBTSxPQUFPLFVBQVU7SUFBdkI7UUFDVSxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBSXpCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUMzQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2xCLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQWtTL0QsQ0FBQztJQWhTUSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQW1DO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLGFBQWEsQ0FDbkMsSUFBSSxDQUFDLFNBQVMsRUFDZCxNQUFNLENBQUMsa0JBQWtCLENBQzFCLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE1BQU0scUJBQXFCLEdBQ3pCLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFDN0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxT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LE9BQU8sRUFDUCxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUN4QixHQUFHLGNBQWMsQ0FDbEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXZpY2UgfSBmcm9tICdhd3MtaW90LWRldmljZS1zZGsnO1xuaW1wb3J0IHsgZnJhZ21lbnQsIGdldENvbm5lY3Rpb24gfSBmcm9tICcuL2lvdC1jb25uZWN0aW9uJztcbmltcG9ydCB7IFNlcnZlcmxlc3NTcHlMaXN0ZW5lciB9IGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyJztcbmltcG9ydCB7IFNlcnZlcmxlc3NTcHlMaXN0ZW5lclBhcmFtcyB9IGZyb20gJy4vU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zJztcbmltcG9ydCB7IGdldFRvcGljIH0gZnJvbSAnLi90b3BpYyc7XG5pbXBvcnQgeyBXYWl0Rm9yUGFyYW1zIH0gZnJvbSAnLi9XYWl0Rm9yUGFyYW1zJztcbmltcG9ydCB7IEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50IH0gZnJvbSAnLi4vY29tbW9uL3NweUV2ZW50cy9GdW5jdGlvblJlcXVlc3RTcHlFdmVudCc7XG5pbXBvcnQgeyBTcHlFdmVudCB9IGZyb20gJy4uL2NvbW1vbi9zcHlFdmVudHMvU3B5RXZlbnQnO1xuaW1wb3J0IHsgU3B5TWVzc2FnZSB9IGZyb20gJy4uL2NvbW1vbi9zcHlFdmVudHMvU3B5TWVzc2FnZSc7XG5cbmV4cG9ydCBjbGFzcyBXc0xpc3RlbmVyPFRTcHlFdmVudHM+IHtcbiAgcHJpdmF0ZSBtZXNzYWdlczogU3B5TWVzc2FnZVN0b3JhZ2VbXSA9IFtdO1xuICBwcml2YXRlIHRyYWNrZXJzOiBUcmFja2VyW10gPSBbXTtcblxuICBwcml2YXRlIGNvbm5lY3Rpb25PcGVuUmVzb2x2ZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgY29ubmVjdGlvbk9wZW5SZWplY3Q/OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuICBwcml2YXRlIGNsb3NlZCA9IHRydWU7XG4gIHByaXZhdGUgZnVuY3Rpb25QcmVmaXggPSAnd2FpdEZvcic7XG4gIHByaXZhdGUgZGVidWdNb2RlID0gZmFsc2U7XG4gIHByaXZhdGUgY29ubmVjdGlvbjogZGV2aWNlIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgZnJhZ21lbnRzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxudW1iZXIsIGZyYWdtZW50Pj4oKTtcblxuICBwdWJsaWMgYXN5bmMgc3RhcnQocGFyYW1zOiBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXJQYXJhbXMpIHtcbiAgICB0aGlzLmRlYnVnTW9kZSA9ICEhcGFyYW1zLmRlYnVnTW9kZTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uID0gYXdhaXQgZ2V0Q29ubmVjdGlvbihcbiAgICAgICAgdGhpcy5kZWJ1Z01vZGUsXG4gICAgICAgIHBhcmFtcy5zZXJ2ZXJsZXNzU3B5V3NVcmxcbiAgICAgICk7XG4gICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgdG9waWMgPSBnZXRUb3BpYyhwYXJhbXMuc2NvcGUgfHwgJyMnKTtcbiAgICAgIHRoaXMubG9nKGBTdWJzY3JpYmluZyB0byB0b3BpYyAke3RvcGljfWApO1xuICAgICAgY29uc3QgY29ubmVjdGlvbk9wZW5SZXNvbHZlID1cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uT3BlblJlc29sdmUgfHwgcGFyYW1zLmNvbm5lY3Rpb25PcGVuUmVzb2x2ZTtcbiAgICAgIGNvbnN0IGxvY2FsQ29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbjtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2coJ0Nvbm5lY3Rpb24gb3BlbmVkJyk7XG4gICAgICAgIGxvY2FsQ29ubmVjdGlvbi5zdWJzY3JpYmUodG9waWMpO1xuICAgICAgICBpZiAoY29ubmVjdGlvbk9wZW5SZXNvbHZlKSB7XG4gICAgICAgICAgY29ubmVjdGlvbk9wZW5SZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb25uZWN0aW9uLm9uKCdtZXNzYWdlJywgKF90b3BpYzogc3RyaW5nLCBkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5sb2coJ01lc3NhZ2UgcmVjZWl2ZWQnLCBkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgbGV0IG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIWZyYWdtZW50LmlkKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2UoZnJhZ21lbnQuZGF0YSkgYXMgU3B5TWVzc2FnZVN0b3JhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGVuZGluZyA9IHRoaXMuZnJhZ21lbnRzLmdldChmcmFnbWVudC5pZCk7XG4gICAgICAgIGlmICghcGVuZGluZykge1xuICAgICAgICAgIHBlbmRpbmcgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgdGhpcy5mcmFnbWVudHMuc2V0KGZyYWdtZW50LmlkLCBwZW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBwZW5kaW5nLnNldChmcmFnbWVudC5pbmRleCwgZnJhZ21lbnQpO1xuXG4gICAgICAgIGlmIChwZW5kaW5nLnNpemUgPT09IGZyYWdtZW50LmNvdW50KSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IFsuLi5wZW5kaW5nLnZhbHVlcygpXVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KVxuICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRhKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgIHRoaXMuZnJhZ21lbnRzLmRlbGV0ZShmcmFnbWVudC5pZCk7XG4gICAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2UoZGF0YSkgYXMgU3B5TWVzc2FnZVN0b3JhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICAgIG1lc3NhZ2Uuc2VydmljZUtleUZvckZ1bmN0aW9uID0gbWVzc2FnZS5zZXJ2aWNlS2V5LnJlcGxhY2UoLyMvZywgJycpO1xuXG4gICAgICAgICAgaWYgKG1lc3NhZ2Uuc2VydmljZUtleS5zdGFydHNXaXRoKCdGdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBtZXNzYWdlLmZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZCA9IChcbiAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhIGFzIEZ1bmN0aW9uUmVxdWVzdFNweUV2ZW50XG4gICAgICAgICAgICApLmNvbnRleHQuYXdzUmVxdWVzdElkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICAgICAgICB0aGlzLnJlc29sdmVPbGRUcmFja2VyV2l0aE5ld01lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb25uZWN0aW9uLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2coJ0Nvbm5lY3Rpb24gY2xvc2VkJyk7XG5cbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25PcGVuUmVqZWN0ID1cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uT3BlblJlamVjdCB8fCBwYXJhbXMuY29ubmVjdGlvbk9wZW5SZWplY3Q7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9nKCdDb25uZWN0aW9uIGVycm9yOicsIGVycm9yKTtcbiAgICAgICAgY29ubmVjdGlvbk9wZW5SZWplY3Q/LihlcnJvcik7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0b3AoKSB7XG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuY29ubmVjdGlvbiEuZW5kKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja2VyTWF0Y2hNZXNzYWdlKHRyYWNrZXI6IFRyYWNrZXIsIG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlKSB7XG4gICAgaWYgKHRyYWNrZXIuZmluaXNoZWQpIHJldHVybjtcblxuICAgIGlmIChcbiAgICAgICh0cmFja2VyLnNlcnZpY2VLZXkgJiYgdHJhY2tlci5zZXJ2aWNlS2V5ID09PSBtZXNzYWdlLnNlcnZpY2VLZXkpIHx8XG4gICAgICAodHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gJiZcbiAgICAgICAgdHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPT09IG1lc3NhZ2Uuc2VydmljZUtleUZvckZ1bmN0aW9uKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMudHJhY2tlck1hdGNoQ29uZGl0aW9uKHRyYWNrZXIsIG1lc3NhZ2UpKSB7XG4gICAgICAgIHRyYWNrZXIuZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHNweUFuZEplc3RNYXRjaGVyczogYW55ID0ge1xuICAgICAgICAgIGdldERhdGE6ICgpID0+IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSB0cmFja2VyLnNlcnZpY2VLZXlGb3JGdW5jdGlvbjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbiAmJlxuICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbi5zdGFydHNXaXRoKCdGdW5jdGlvbicpICYmXG4gICAgICAgICAgKHNlcnZpY2VLZXlGb3JGdW5jdGlvbi5lbmRzV2l0aCgnUmVxdWVzdCcpIHx8XG4gICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uZW5kc1dpdGgoJ0NvbnNvbGUnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluID0gc2VydmljZUtleUZvckZ1bmN0aW9uO1xuXG4gICAgICAgICAgaWYgKHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluLmVuZHNXaXRoKCdSZXF1ZXN0JykpIHtcbiAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluID0gc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4uc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbi5sZW5ndGggLSAnUmVxdWVzdCcubGVuZ3RoXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4uZW5kc1dpdGgoJ0NvbnNvbGUnKSkge1xuICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4gPSBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbi5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluLmxlbmd0aCAtICdDb25zb2xlJy5sZW5ndGhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3B5QW5kSmVzdE1hdGNoZXJzLmZvbGxvd2VkQnlDb25zb2xlID0gKHBhcmFtc1c6IFdhaXRGb3JQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdhaXRGb3JYWFhGdW5jKFxuICAgICAgICAgICAgICBgJHtzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbn1Db25zb2xlYCxcbiAgICAgICAgICAgICAgKG1lc3NhZ2UuZGF0YSBhcyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudCkuY29udGV4dC5hd3NSZXF1ZXN0SWRcbiAgICAgICAgICAgICkocGFyYW1zVyk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHNweUFuZEplc3RNYXRjaGVycy5mb2xsb3dlZEJ5UmVzcG9uc2UgPSAocGFyYW1zVzogV2FpdEZvclBhcmFtcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2FpdEZvclhYWEZ1bmMoXG4gICAgICAgICAgICAgIGAke3NlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWlufVJlc3BvbnNlYCxcbiAgICAgICAgICAgICAgKG1lc3NhZ2UuZGF0YSBhcyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudCkuY29udGV4dC5hd3NSZXF1ZXN0SWRcbiAgICAgICAgICAgICkocGFyYW1zVyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNweUFuZEplc3RNYXRjaGVycywge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKHRhcmdldDogYW55LCBvYmplY3RLZXk6IHN0cmluZykge1xuICAgICAgICAgICAgaWYgKHRhcmdldC5oYXNPd25Qcm9wZXJ0eShvYmplY3RLZXkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0YXJnZXRbb2JqZWN0S2V5XTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0S2V5ICE9PSAndGhlbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqZXN0RnVuY3Rpb25Ub0V4ZWN1dGUgPSAoZXhwZWN0KG1lc3NhZ2UuZGF0YSkgYXMgYW55KVtcbiAgICAgICAgICAgICAgICAgIG9iamVjdEtleVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgamVzdEZ1bmN0aW9uVG9FeGVjdXRlLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJhY2tlci5wcm9taXNlUmVzb2x2ZShwcm94eSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUcmFja2VySW5PbGRNZXNzYWdlcyh0cmFja2VyOiBUcmFja2VyKSB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHRoaXMubWVzc2FnZXMpIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaE1lc3NhZ2UodHJhY2tlciwgbWVzc2FnZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlT2xkVHJhY2tlcldpdGhOZXdNZXNzYWdlKG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlKSB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMudHJhY2tlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCB0cmFja2VyID0gdGhpcy50cmFja2Vyc1tpbmRleF07XG4gICAgICBpZiAodGhpcy50cmFja2VyTWF0Y2hNZXNzYWdlKHRyYWNrZXIsIG1lc3NhZ2UpKSB7XG4gICAgICAgIHRoaXMudHJhY2tlcnMgPSB0aGlzLnRyYWNrZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tlck1hdGNoQ29uZGl0aW9uKHRyYWNrZXI6IFRyYWNrZXIsIG1lc3NhZ2U6IFNweU1lc3NhZ2VTdG9yYWdlKSB7XG4gICAgY29uc3QgbWF0Y2hDb25kaXRpb24gPVxuICAgICAgKHRyYWNrZXIuY29uZGl0aW9uICYmIHRyYWNrZXIuY29uZGl0aW9uKG1lc3NhZ2UuZGF0YSkpIHx8XG4gICAgICAhdHJhY2tlci5jb25kaXRpb247XG5cbiAgICBjb25zdCBtYXRjaFJlcXVlc3RJZCA9XG4gICAgICAodHJhY2tlci5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQgJiZcbiAgICAgICAgdHJhY2tlci5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQgPT09XG4gICAgICAgICAgbWVzc2FnZS5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQpIHx8XG4gICAgICAhdHJhY2tlci5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQ7XG5cbiAgICBpZiAobWF0Y2hDb25kaXRpb24gJiYgbWF0Y2hSZXF1ZXN0SWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgICFtYXRjaENvbmRpdGlvbiAmJlxuICAgICAgICBtYXRjaFJlcXVlc3RJZCAmJlxuICAgICAgICAhdHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nXG4gICAgICApIHtcbiAgICAgICAgdHJhY2tlci5wb3NzaWJsZVNweU1lc3NhZ2VEYXRhRm9yRGVidWdnaW5nID0gbWVzc2FnZS5kYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2FpdEZvclhYWEZ1bmMoXG4gICAgc2VydmljZUtleUZvckZ1bmN0aW9uOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkPzogc3RyaW5nXG4gICkge1xuICAgIGxldCB0cmFja2VyOiBUcmFja2VyO1xuXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyYWNrZXIgPSB7XG4gICAgICAgIGZpbmlzaGVkOiBmYWxzZSxcbiAgICAgICAgcHJvbWlzZVJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgIHByb21pc2VSZWplY3Q6IHJlamVjdCxcbiAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uLFxuICAgICAgICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIChwYXJhbXNXPzogV2FpdEZvclBhcmFtczxTcHlFdmVudD4pID0+IHtcbiAgICAgIHRyYWNrZXIuY29uZGl0aW9uID0gcGFyYW1zVz8uY29uZGl0aW9uO1xuXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodHJhY2tlci5maW5pc2hlZCkgcmV0dXJuO1xuICAgICAgICB0cmFja2VyLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBgVGltZW91dCB3YWl0aW5nIGZvciBTZXJ2ZXJsZXNzIFNweSBtZXNzYWdlICR7c2VydmljZUtleUZvckZ1bmN0aW9ufS5gO1xuXG4gICAgICAgIGlmICh0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmcpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGAgU2ltaWxhciBtYXRjaGluZyBzcHkgZXZlbnQgZGF0YTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHRyYWNrZXIucG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZyxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhY2tlci5wcm9taXNlUmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICB9LCBwYXJhbXNXPy50aW1vdXRNcyB8fCAxMDAwMCk7XG5cbiAgICAgIHZvaWQgcHJvbWlzZS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMucmVzb2x2ZVRyYWNrZXJJbk9sZE1lc3NhZ2VzKHRyYWNrZXIpKSB7XG4gICAgICAgIHRoaXMudHJhY2tlcnMucHVzaCh0cmFja2VyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVQcm94eSgpIHtcbiAgICBjb25zdCBzcHlMaXN0ZW5lciA9IHt9IGFzIFNlcnZlcmxlc3NTcHlMaXN0ZW5lcjxUU3B5RXZlbnRzPjtcblxuICAgIHNweUxpc3RlbmVyLnN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkoc3B5TGlzdGVuZXIsIHtcbiAgICAgIGdldDogKHRhcmdldDogYW55LCBvYmplY3RLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KG9iamVjdEtleSkpIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0W29iamVjdEtleV07XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdHlwZW9mIG9iamVjdEtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvYmplY3RLZXkuc3RhcnRzV2l0aCh0aGlzLmZ1bmN0aW9uUHJlZml4KVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gPSBvYmplY3RLZXkuc3Vic3RyaW5nKFxuICAgICAgICAgICAgdGhpcy5mdW5jdGlvblByZWZpeC5sZW5ndGhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlV2FpdEZvclhYWEZ1bmMoc2VydmljZUtleUZvckZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm94eSBhcyBTZXJ2ZXJsZXNzU3B5TGlzdGVuZXI8VFNweUV2ZW50cz47XG4gIH1cblxuICBwcml2YXRlIGxvZyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLmRlYnVnTW9kZSAmJiAhdGhpcy5jbG9zZWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICAgICdTU1BZJyxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAuLi5vcHRpb25hbFBhcmFtc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudHlwZSBUcmFja2VyID0ge1xuICBwcm9taXNlUmVzb2x2ZTogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgcHJvbWlzZVJlamVjdDogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgZmluaXNoZWQ6IGJvb2xlYW47XG4gIHNlcnZpY2VLZXk/OiBzdHJpbmc7XG4gIHNlcnZpY2VLZXlGb3JGdW5jdGlvbj86IHN0cmluZztcbiAgY29uZGl0aW9uPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgdGltb3V0TXM/OiBudW1iZXI7XG4gIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZztcbiAgcG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZz86IGFueTtcbn07XG5cbnR5cGUgU3B5TWVzc2FnZVN0b3JhZ2UgPSBTcHlNZXNzYWdlICYge1xuICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb246IHN0cmluZztcbiAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkPzogc3RyaW5nO1xufTtcbiJdfQ==
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3NMaXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpc3RlbmVyL1dzTGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFLbkMsTUFBTSxPQUFPLFVBQVU7SUFBdkI7UUFDVSxhQUFRLEdBQXdCLEVBQUUsQ0FBQztRQUNuQyxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBSXpCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUMzQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2xCLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQW1TL0QsQ0FBQztJQWpTUSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQW1DO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLGFBQWEsQ0FDbkMsSUFBSSxDQUFDLFNBQVMsRUFDZCxNQUFNLENBQUMsa0JBQWtCLENBQzFCLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE1BQU0scUJBQXFCLEdBQ3pCLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFDN0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUM5QixlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLHFCQUFxQixFQUFFLENBQUM7b0JBQzFCLHFCQUFxQixFQUFFLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQWMsRUFBRSxJQUFZLEVBQUUsRUFBRTtnQkFDN0QsSUFBSSxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPO2dCQUV4QixJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLE9BQU8sR0FBa0MsU0FBUyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFzQixDQUFDO2dCQUMzRCxDQUFDO2dCQUVELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFdEMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt5QkFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO3lCQUNqQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7eUJBQ3hCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBc0IsQ0FBQztnQkFDbEQsQ0FBQztnQkFFRCxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBRXJFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDOUMsT0FBTyxDQUFDLDJCQUEyQixHQUNqQyxPQUFPLENBQUMsSUFDVCxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7b0JBQ3pCLENBQUM7b0JBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUU5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sb0JBQW9CLEdBQ3hCLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsb0JBQW9CLENBQUM7WUFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE9BQWdCLEVBQUUsT0FBMEI7UUFDdEUsSUFBSSxPQUFPLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFN0IsSUFDRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ2pFLENBQUMsT0FBTyxDQUFDLHFCQUFxQjtnQkFDNUIsT0FBTyxDQUFDLHFCQUFxQixLQUFLLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUNsRSxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUV4QixNQUFNLGtCQUFrQixHQUFRO29CQUM5QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUk7aUJBQzVCLENBQUM7Z0JBRUYsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUM7Z0JBQzVELElBQ0UscUJBQXFCO29CQUNyQixxQkFBcUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO29CQUM1QyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7d0JBQ3hDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM1QyxDQUFDO29CQUNELElBQUksMEJBQTBCLEdBQUcscUJBQXFCLENBQUM7b0JBRXZELElBQUksMEJBQTBCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7d0JBQ25ELDBCQUEwQixHQUFHLDBCQUEwQixDQUFDLFNBQVMsQ0FDL0QsQ0FBQyxFQUNELDBCQUEwQixDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUNyRCxDQUFDO29CQUNKLENBQUM7eUJBQU0sSUFBSSwwQkFBMEIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUQsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUMsU0FBUyxDQUMvRCxDQUFDLEVBQ0QsMEJBQTBCLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQ3JELENBQUM7b0JBQ0osQ0FBQztvQkFFRCxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLE9BQXNCLEVBQUUsRUFBRTt3QkFDaEUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQzlCLEdBQUcsMEJBQTBCLFNBQVMsRUFDckMsT0FBTyxDQUFDLElBQWdDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FDL0QsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDYixDQUFDLENBQUM7b0JBRUYsa0JBQWtCLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxPQUFzQixFQUFFLEVBQUU7d0JBQ2pFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUM5QixHQUFHLDBCQUEwQixVQUFVLEVBQ3RDLE9BQU8sQ0FBQyxJQUFnQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQy9ELENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2IsQ0FBQyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUU7b0JBQzFDLEdBQUcsRUFBRSxVQUFVLE1BQVcsRUFBRSxTQUFpQjt3QkFDM0MsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7NEJBQ3JDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUMzQixDQUFDOzZCQUFNLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRSxDQUFDOzRCQUNoQyxPQUFPO2dDQUNMLE1BQU0scUJBQXFCLEdBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQVMsQ0FDekQsU0FBUyxDQUNWLENBQUM7Z0NBQ0YscUJBQXFCLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQ0FDbEQsT0FBTyxLQUFLLENBQUM7NEJBQ2YsQ0FBQyxDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQztpQkFDRixDQUFDLENBQUM7Z0JBRUgsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLDJCQUEyQixDQUFDLE9BQWdCO1FBQ2xELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sK0JBQStCLENBQUMsT0FBMEI7UUFDaEUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUFnQixFQUFFLE9BQTBCO1FBQ3hFLE1BQU0sY0FBYyxHQUNsQixDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBRXJCLE1BQU0sY0FBYyxHQUNsQixDQUFDLE9BQU8sQ0FBQywyQkFBMkI7WUFDbEMsT0FBTyxDQUFDLDJCQUEyQjtnQkFDakMsT0FBTyxDQUFDLDJCQUEyQixDQUFDO1lBQ3hDLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDO1FBRXZDLElBQUksY0FBYyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLENBQUM7WUFDTixJQUNFLENBQUMsY0FBYztnQkFDZixjQUFjO2dCQUNkLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxFQUMzQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxrQ0FBa0MsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzVELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQzFCLHFCQUE2QixFQUM3QiwyQkFBb0M7UUFFcEMsT0FBTyxDQUFDLE9BQXVCLEVBQUUsRUFBRTtZQUNqQyxJQUFJLE9BQWlELENBQUM7WUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFZO2dCQUN2QixRQUFRLEVBQUUsS0FBSztnQkFDZixhQUFhO2dCQUNiLGNBQWMsRUFBRSxPQUFPO2dCQUN2QixxQkFBcUI7Z0JBQ3JCLDJCQUEyQjthQUM1QixDQUFDO1lBRUYsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsU0FBUyxDQUFDO1lBRXZDLElBQUksVUFBc0MsQ0FBQztZQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDdEMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQzNCLElBQUksT0FBTyxDQUFDLFFBQVE7d0JBQUUsT0FBTztvQkFDN0IsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBQ3hCLElBQUksT0FBTyxHQUFHLDhDQUE4QyxxQkFBcUIsR0FBRyxDQUFDO29CQUVyRixJQUFJLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO3dCQUMvQyxPQUFPLElBQUkscUNBQXFDLElBQUksQ0FBQyxTQUFTLENBQzVELE9BQU8sQ0FBQyxrQ0FBa0MsRUFDMUMsSUFBSSxFQUNKLENBQUMsQ0FDRixFQUFFLENBQUM7b0JBQ04sQ0FBQztvQkFFRCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLElBQUksS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDakIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLFdBQVcsR0FBRyxFQUF1QyxDQUFDO1FBRTVELFdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDNUIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsT0FBTyxJQUFJLEtBQUssQ0FBb0MsV0FBVyxFQUFFO1lBQy9ELEdBQUcsRUFBRSxDQUFDLE1BQVcsRUFBRSxTQUFpQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNyQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7cUJBQU0sSUFDTCxPQUFPLFNBQVMsS0FBSyxRQUFRO29CQUM3QixTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDekMsQ0FBQztvQkFDRCxNQUFNLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUMzQixDQUFDO29CQUVGLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEdBQUcsQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFxQjtRQUNuRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FDWCxNQUFNLEVBQ04sT0FBTyxFQUNQLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQ3hCLEdBQUcsY0FBYyxDQUNsQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRldmljZSB9IGZyb20gJ2F3cy1pb3QtZGV2aWNlLXNkayc7XG5pbXBvcnQgeyBmcmFnbWVudCwgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJy4vaW90LWNvbm5lY3Rpb24nO1xuaW1wb3J0IHsgU2VydmVybGVzc1NweUxpc3RlbmVyIH0gZnJvbSAnLi9TZXJ2ZXJsZXNzU3B5TGlzdGVuZXInO1xuaW1wb3J0IHsgU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zIH0gZnJvbSAnLi9TZXJ2ZXJsZXNzU3B5TGlzdGVuZXJQYXJhbXMnO1xuaW1wb3J0IHsgZ2V0VG9waWMgfSBmcm9tICcuL3RvcGljJztcbmltcG9ydCB7IFdhaXRGb3JQYXJhbXMgfSBmcm9tICcuL1dhaXRGb3JQYXJhbXMnO1xuaW1wb3J0IHsgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL0Z1bmN0aW9uUmVxdWVzdFNweUV2ZW50JztcbmltcG9ydCB7IFNweU1lc3NhZ2UgfSBmcm9tICcuLi9jb21tb24vc3B5RXZlbnRzL1NweU1lc3NhZ2UnO1xuXG5leHBvcnQgY2xhc3MgV3NMaXN0ZW5lcjxUU3B5RXZlbnRzPiB7XG4gIHByaXZhdGUgbWVzc2FnZXM6IFNweU1lc3NhZ2VTdG9yYWdlW10gPSBbXTtcbiAgcHJpdmF0ZSB0cmFja2VyczogVHJhY2tlcltdID0gW107XG5cbiAgcHJpdmF0ZSBjb25uZWN0aW9uT3BlblJlc29sdmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGNvbm5lY3Rpb25PcGVuUmVqZWN0PzogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBjbG9zZWQgPSB0cnVlO1xuICBwcml2YXRlIGZ1bmN0aW9uUHJlZml4ID0gJ3dhaXRGb3InO1xuICBwcml2YXRlIGRlYnVnTW9kZSA9IGZhbHNlO1xuICBwcml2YXRlIGNvbm5lY3Rpb246IGRldmljZSB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGZyYWdtZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8bnVtYmVyLCBmcmFnbWVudD4+KCk7XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0KHBhcmFtczogU2VydmVybGVzc1NweUxpc3RlbmVyUGFyYW1zKSB7XG4gICAgdGhpcy5kZWJ1Z01vZGUgPSAhIXBhcmFtcy5kZWJ1Z01vZGU7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGF3YWl0IGdldENvbm5lY3Rpb24oXG4gICAgICAgIHRoaXMuZGVidWdNb2RlLFxuICAgICAgICBwYXJhbXMuc2VydmVybGVzc1NweVdzVXJsXG4gICAgICApO1xuICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHRvcGljID0gZ2V0VG9waWMocGFyYW1zLnNjb3BlIHx8ICcjJyk7XG4gICAgICB0aGlzLmxvZyhgU3Vic2NyaWJpbmcgdG8gdG9waWMgJHt0b3BpY31gKTtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25PcGVuUmVzb2x2ZSA9XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk9wZW5SZXNvbHZlIHx8IHBhcmFtcy5jb25uZWN0aW9uT3BlblJlc29sdmU7XG4gICAgICBjb25zdCBsb2NhbENvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb247XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9nKCdDb25uZWN0aW9uIG9wZW5lZCcpO1xuICAgICAgICBsb2NhbENvbm5lY3Rpb24uc3Vic2NyaWJlKHRvcGljKTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25PcGVuUmVzb2x2ZSkge1xuICAgICAgICAgIGNvbm5lY3Rpb25PcGVuUmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5vbignbWVzc2FnZScsIChfdG9waWM6IHN0cmluZywgZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMubG9nKCdNZXNzYWdlIHJlY2VpdmVkJywgZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIGxldCBtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFmcmFnbWVudC5pZCkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGZyYWdtZW50LmRhdGEpIGFzIFNweU1lc3NhZ2VTdG9yYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBlbmRpbmcgPSB0aGlzLmZyYWdtZW50cy5nZXQoZnJhZ21lbnQuaWQpO1xuICAgICAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgICAgICBwZW5kaW5nID0gbmV3IE1hcCgpO1xuICAgICAgICAgIHRoaXMuZnJhZ21lbnRzLnNldChmcmFnbWVudC5pZCwgcGVuZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZy5zZXQoZnJhZ21lbnQuaW5kZXgsIGZyYWdtZW50KTtcblxuICAgICAgICBpZiAocGVuZGluZy5zaXplID09PSBmcmFnbWVudC5jb3VudCkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBbLi4ucGVuZGluZy52YWx1ZXMoKV1cbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleClcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0YSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICB0aGlzLmZyYWdtZW50cy5kZWxldGUoZnJhZ21lbnQuaWQpO1xuICAgICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGRhdGEpIGFzIFNweU1lc3NhZ2VTdG9yYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICBtZXNzYWdlLnNlcnZpY2VLZXlGb3JGdW5jdGlvbiA9IG1lc3NhZ2Uuc2VydmljZUtleS5yZXBsYWNlKC8jL2csICcnKTtcblxuICAgICAgICAgIGlmIChtZXNzYWdlLnNlcnZpY2VLZXkuc3RhcnRzV2l0aCgnRnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgbWVzc2FnZS5mdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQgPSAoXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YSBhcyBGdW5jdGlvblJlcXVlc3RTcHlFdmVudFxuICAgICAgICAgICAgKS5jb250ZXh0LmF3c1JlcXVlc3RJZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5yZXNvbHZlT2xkVHJhY2tlcldpdGhOZXdNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nKCdDb25uZWN0aW9uIGNsb3NlZCcpO1xuXG4gICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb25uZWN0aW9uT3BlblJlamVjdCA9XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk9wZW5SZWplY3QgfHwgcGFyYW1zLmNvbm5lY3Rpb25PcGVuUmVqZWN0O1xuICAgICAgdGhpcy5jb25uZWN0aW9uLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvZygnQ29ubmVjdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgIGNvbm5lY3Rpb25PcGVuUmVqZWN0Py4oZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBjb25uZWN0aW9uJywgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdG9wKCkge1xuICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24hLmVuZCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyOiBUcmFja2VyLCBtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSkge1xuICAgIGlmICh0cmFja2VyLmZpbmlzaGVkKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICAodHJhY2tlci5zZXJ2aWNlS2V5ICYmIHRyYWNrZXIuc2VydmljZUtleSA9PT0gbWVzc2FnZS5zZXJ2aWNlS2V5KSB8fFxuICAgICAgKHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uICYmXG4gICAgICAgIHRyYWNrZXIuc2VydmljZUtleUZvckZ1bmN0aW9uID09PSBtZXNzYWdlLnNlcnZpY2VLZXlGb3JGdW5jdGlvbilcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrZXJNYXRjaENvbmRpdGlvbih0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICB0cmFja2VyLmZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBzcHlBbmRKZXN0TWF0Y2hlcnM6IGFueSA9IHtcbiAgICAgICAgICBnZXREYXRhOiAoKSA9PiBtZXNzYWdlLmRhdGEsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2VydmljZUtleUZvckZ1bmN0aW9uID0gdHJhY2tlci5zZXJ2aWNlS2V5Rm9yRnVuY3Rpb247XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24gJiZcbiAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uc3RhcnRzV2l0aCgnRnVuY3Rpb24nKSAmJlxuICAgICAgICAgIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb24uZW5kc1dpdGgoJ1JlcXVlc3QnKSB8fFxuICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uLmVuZHNXaXRoKCdDb25zb2xlJykpXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbiA9IHNlcnZpY2VLZXlGb3JGdW5jdGlvbjtcblxuICAgICAgICAgIGlmIChzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbi5lbmRzV2l0aCgnUmVxdWVzdCcpKSB7XG4gICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbiA9IHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4ubGVuZ3RoIC0gJ1JlcXVlc3QnLmxlbmd0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluLmVuZHNXaXRoKCdDb25zb2xlJykpIHtcbiAgICAgICAgICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbkNoYWluID0gc2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW4uc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbi5sZW5ndGggLSAnQ29uc29sZScubGVuZ3RoXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNweUFuZEplc3RNYXRjaGVycy5mb2xsb3dlZEJ5Q29uc29sZSA9IChwYXJhbXNXOiBXYWl0Rm9yUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVXYWl0Rm9yWFhYRnVuYyhcbiAgICAgICAgICAgICAgYCR7c2VydmljZUtleUZvckZ1bmN0aW9uQ2hhaW59Q29uc29sZWAsXG4gICAgICAgICAgICAgIChtZXNzYWdlLmRhdGEgYXMgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQpLmNvbnRleHQuYXdzUmVxdWVzdElkXG4gICAgICAgICAgICApKHBhcmFtc1cpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzcHlBbmRKZXN0TWF0Y2hlcnMuZm9sbG93ZWRCeVJlc3BvbnNlID0gKHBhcmFtc1c6IFdhaXRGb3JQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdhaXRGb3JYWFhGdW5jKFxuICAgICAgICAgICAgICBgJHtzZXJ2aWNlS2V5Rm9yRnVuY3Rpb25DaGFpbn1SZXNwb25zZWAsXG4gICAgICAgICAgICAgIChtZXNzYWdlLmRhdGEgYXMgRnVuY3Rpb25SZXF1ZXN0U3B5RXZlbnQpLmNvbnRleHQuYXdzUmVxdWVzdElkXG4gICAgICAgICAgICApKHBhcmFtc1cpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShzcHlBbmRKZXN0TWF0Y2hlcnMsIHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgb2JqZWN0S2V5OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuaGFzT3duUHJvcGVydHkob2JqZWN0S2V5KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W29iamVjdEtleV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdEtleSAhPT0gJ3RoZW4nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgamVzdEZ1bmN0aW9uVG9FeGVjdXRlID0gKGV4cGVjdChtZXNzYWdlLmRhdGEpIGFzIGFueSlbXG4gICAgICAgICAgICAgICAgICBvYmplY3RLZXlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGplc3RGdW5jdGlvblRvRXhlY3V0ZS5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyYWNrZXIucHJvbWlzZVJlc29sdmUocHJveHkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVHJhY2tlckluT2xkTWVzc2FnZXModHJhY2tlcjogVHJhY2tlcikge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiB0aGlzLm1lc3NhZ2VzKSB7XG4gICAgICBpZiAodGhpcy50cmFja2VyTWF0Y2hNZXNzYWdlKHRyYWNrZXIsIG1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU9sZFRyYWNrZXJXaXRoTmV3TWVzc2FnZShtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSkge1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnRyYWNrZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdHJhY2tlciA9IHRoaXMudHJhY2tlcnNbaW5kZXhdO1xuICAgICAgaWYgKHRoaXMudHJhY2tlck1hdGNoTWVzc2FnZSh0cmFja2VyLCBtZXNzYWdlKSkge1xuICAgICAgICB0aGlzLnRyYWNrZXJzID0gdGhpcy50cmFja2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHRyYWNrZXJNYXRjaENvbmRpdGlvbih0cmFja2VyOiBUcmFja2VyLCBtZXNzYWdlOiBTcHlNZXNzYWdlU3RvcmFnZSkge1xuICAgIGNvbnN0IG1hdGNoQ29uZGl0aW9uID1cbiAgICAgICh0cmFja2VyLmNvbmRpdGlvbiAmJiB0cmFja2VyLmNvbmRpdGlvbihtZXNzYWdlLmRhdGEpKSB8fFxuICAgICAgIXRyYWNrZXIuY29uZGl0aW9uO1xuXG4gICAgY29uc3QgbWF0Y2hSZXF1ZXN0SWQgPVxuICAgICAgKHRyYWNrZXIuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkICYmXG4gICAgICAgIHRyYWNrZXIuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkID09PVxuICAgICAgICAgIG1lc3NhZ2UuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkKSB8fFxuICAgICAgIXRyYWNrZXIuZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkO1xuXG4gICAgaWYgKG1hdGNoQ29uZGl0aW9uICYmIG1hdGNoUmVxdWVzdElkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICAhbWF0Y2hDb25kaXRpb24gJiZcbiAgICAgICAgbWF0Y2hSZXF1ZXN0SWQgJiZcbiAgICAgICAgIXRyYWNrZXIucG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZ1xuICAgICAgKSB7XG4gICAgICAgIHRyYWNrZXIucG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZyA9IG1lc3NhZ2UuZGF0YTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdhaXRGb3JYWFhGdW5jKFxuICAgIHNlcnZpY2VLZXlGb3JGdW5jdGlvbjogc3RyaW5nLFxuICAgIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gKHBhcmFtc1c/OiBXYWl0Rm9yUGFyYW1zKSA9PiB7XG4gICAgICBsZXQgcmVzb2x2ZTogKHZhbHVlOiB2b2lkIHwgUHJvbWlzZUxpa2U8YW55PikgPT4gdm9pZDtcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzKSA9PiB7XG4gICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRyYWNrZXI6IFRyYWNrZXIgPSB7XG4gICAgICAgIGZpbmlzaGVkOiBmYWxzZSxcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBwcm9taXNlUmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgc2VydmljZUtleUZvckZ1bmN0aW9uLFxuICAgICAgICBmdW5jdGlvbkNvbnRleHRBd3NSZXF1ZXN0SWQsXG4gICAgICB9O1xuXG4gICAgICB0cmFja2VyLmNvbmRpdGlvbiA9IHBhcmFtc1c/LmNvbmRpdGlvbjtcblxuICAgICAgbGV0IHRpbWVvdXRQaWQ6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdGltZXIgPSBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRpbWVvdXRQaWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodHJhY2tlci5maW5pc2hlZCkgcmV0dXJuO1xuICAgICAgICAgIHRyYWNrZXIuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgIGxldCBtZXNzYWdlID0gYFRpbWVvdXQgd2FpdGluZyBmb3IgU2VydmVybGVzcyBTcHkgbWVzc2FnZSAke3NlcnZpY2VLZXlGb3JGdW5jdGlvbn0uYDtcblxuICAgICAgICAgIGlmICh0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmcpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYCBTaW1pbGFyIG1hdGNoaW5nIHNweSBldmVudCBkYXRhOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICB0cmFja2VyLnBvc3NpYmxlU3B5TWVzc2FnZURhdGFGb3JEZWJ1Z2dpbmcsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICl9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgICAgfSwgcGFyYW1zVz8udGltb3V0TXMgfHwgMTAwMDApO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5yZXNvbHZlVHJhY2tlckluT2xkTWVzc2FnZXModHJhY2tlcikpIHtcbiAgICAgICAgdGhpcy50cmFja2Vycy5wdXNoKHRyYWNrZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCB0aW1lcl0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBpZiAoISF0aW1lb3V0UGlkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRQaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVByb3h5KCkge1xuICAgIGNvbnN0IHNweUxpc3RlbmVyID0ge30gYXMgU2VydmVybGVzc1NweUxpc3RlbmVyPFRTcHlFdmVudHM+O1xuXG4gICAgc3B5TGlzdGVuZXIuc3RvcCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb3h5PFNlcnZlcmxlc3NTcHlMaXN0ZW5lcjxUU3B5RXZlbnRzPj4oc3B5TGlzdGVuZXIsIHtcbiAgICAgIGdldDogKHRhcmdldDogYW55LCBvYmplY3RLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGFyZ2V0Lmhhc093blByb3BlcnR5KG9iamVjdEtleSkpIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0W29iamVjdEtleV0uYmluZCh0YXJnZXQpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiBvYmplY3RLZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgb2JqZWN0S2V5LnN0YXJ0c1dpdGgodGhpcy5mdW5jdGlvblByZWZpeClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgc2VydmljZUtleUZvckZ1bmN0aW9uID0gb2JqZWN0S2V5LnN1YnN0cmluZyhcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25QcmVmaXgubGVuZ3RoXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdhaXRGb3JYWFhGdW5jKHNlcnZpY2VLZXlGb3JGdW5jdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLmRlYnVnTW9kZSAmJiAhdGhpcy5jbG9zZWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICAgICdTU1BZJyxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAuLi5vcHRpb25hbFBhcmFtc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudHlwZSBUcmFja2VyID0ge1xuICBwcm9taXNlUmVzb2x2ZTogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgZmluaXNoZWQ6IGJvb2xlYW47XG4gIHNlcnZpY2VLZXk/OiBzdHJpbmc7XG4gIHNlcnZpY2VLZXlGb3JGdW5jdGlvbj86IHN0cmluZztcbiAgY29uZGl0aW9uPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgdGltb3V0TXM/OiBudW1iZXI7XG4gIGZ1bmN0aW9uQ29udGV4dEF3c1JlcXVlc3RJZD86IHN0cmluZztcbiAgcG9zc2libGVTcHlNZXNzYWdlRGF0YUZvckRlYnVnZ2luZz86IGFueTtcbn07XG5cbnR5cGUgU3B5TWVzc2FnZVN0b3JhZ2UgPSBTcHlNZXNzYWdlICYge1xuICBzZXJ2aWNlS2V5Rm9yRnVuY3Rpb246IHN0cmluZztcbiAgZnVuY3Rpb25Db250ZXh0QXdzUmVxdWVzdElkPzogc3RyaW5nO1xufTtcbiJdfQ==
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getConnection = void 0;
|
|
4
|
+
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
4
5
|
const aws_iot_device_sdk_1 = require("aws-iot-device-sdk");
|
|
5
6
|
function createLog(debugMode) {
|
|
6
7
|
return (message, ...optionalParams) => {
|
|
@@ -22,11 +23,17 @@ async function getConnection(debugMode, iotEndpoint) {
|
|
|
22
23
|
logError('No IoT endpoint could be found');
|
|
23
24
|
throw new Error('IoT Endpoint address not found');
|
|
24
25
|
}
|
|
26
|
+
const region = iotEndpoint.split('.')[2];
|
|
27
|
+
const provider = (0, credential_providers_1.fromNodeProviderChain)();
|
|
28
|
+
const credentials = await provider();
|
|
25
29
|
const connection = new aws_iot_device_sdk_1.device({
|
|
26
30
|
protocol: 'wss',
|
|
27
31
|
host: iotEndpoint,
|
|
28
|
-
region
|
|
32
|
+
region,
|
|
29
33
|
reconnectPeriod: 1,
|
|
34
|
+
accessKeyId: credentials.accessKeyId,
|
|
35
|
+
secretKey: credentials.secretAccessKey,
|
|
36
|
+
sessionToken: credentials.sessionToken,
|
|
30
37
|
});
|
|
31
38
|
connection.on('connect', () => {
|
|
32
39
|
log('IoT connected');
|
|
@@ -43,4 +50,4 @@ async function getConnection(debugMode, iotEndpoint) {
|
|
|
43
50
|
return connection;
|
|
44
51
|
}
|
|
45
52
|
exports.getConnection = getConnection;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW90LWNvbm5lY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saXN0ZW5lci9pb3QtY29ubmVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3RUFBc0U7QUFDdEUsMkRBQTRDO0FBSTVDLFNBQVMsU0FBUyxDQUFDLFNBQWtCO0lBQ25DLE9BQU8sQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFxQixFQUFFLEVBQUU7UUFDbkQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxjQUFjO0lBQ3JCLE9BQU8sQ0FBQyxPQUFlLEVBQUUsR0FBRyxjQUFxQixFQUFFLEVBQUU7UUFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVNLEtBQUssVUFBVSxhQUFhLENBQ2pDLFNBQWtCLEVBQ2xCLFdBQW1CO0lBRW5CLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNsQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6QyxNQUFNLFFBQVEsR0FBRyxJQUFBLDRDQUFxQixHQUFFLENBQUM7SUFDekMsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLEVBQUUsQ0FBQztJQUNyQyxNQUFNLFVBQVUsR0FBRyxJQUFJLDJCQUFNLENBQUM7UUFDNUIsUUFBUSxFQUFFLEtBQUs7UUFDZixJQUFJLEVBQUUsV0FBVztRQUNqQixNQUFNO1FBQ04sZUFBZSxFQUFFLENBQUM7UUFDbEIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXO1FBQ3BDLFNBQVMsRUFBRSxXQUFXLENBQUMsZUFBZTtRQUN0QyxZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVk7S0FDdkMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQzVCLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDN0IsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUMxQixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7UUFDOUIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBM0NELHNDQTJDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21Ob2RlUHJvdmlkZXJDaGFpbiB9IGZyb20gJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzJztcbmltcG9ydCB7IGRldmljZSB9IGZyb20gJ2F3cy1pb3QtZGV2aWNlLXNkayc7XG5cbmV4cG9ydCB0eXBlIGZyYWdtZW50ID0geyBpZDogc3RyaW5nOyBpbmRleDogbnVtYmVyOyBjb3VudDogbnVtYmVyOyBkYXRhOiBhbnkgfTtcblxuZnVuY3Rpb24gY3JlYXRlTG9nKGRlYnVnTW9kZTogYm9vbGVhbikge1xuICByZXR1cm4gKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gICAgaWYgKGRlYnVnTW9kZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnU1NQWScsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yTG9nKCkge1xuICByZXR1cm4gKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcignU1NQWScsIG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKTtcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbm5lY3Rpb24oXG4gIGRlYnVnTW9kZTogYm9vbGVhbixcbiAgaW90RW5kcG9pbnQ6IHN0cmluZ1xuKTogUHJvbWlzZTxkZXZpY2U+IHtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nKGRlYnVnTW9kZSk7XG4gIGNvbnN0IGxvZ0Vycm9yID0gY3JlYXRlRXJyb3JMb2coKTtcbiAgbG9nKCdVc2luZyBJb1QgZW5kcG9pbnQ6JywgaW90RW5kcG9pbnQpO1xuXG4gIGlmICghaW90RW5kcG9pbnQpIHtcbiAgICBsb2dFcnJvcignTm8gSW9UIGVuZHBvaW50IGNvdWxkIGJlIGZvdW5kJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJb1QgRW5kcG9pbnQgYWRkcmVzcyBub3QgZm91bmQnKTtcbiAgfVxuICBjb25zdCByZWdpb24gPSBpb3RFbmRwb2ludC5zcGxpdCgnLicpWzJdO1xuXG4gIGNvbnN0IHByb3ZpZGVyID0gZnJvbU5vZGVQcm92aWRlckNoYWluKCk7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgcHJvdmlkZXIoKTtcbiAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBkZXZpY2Uoe1xuICAgIHByb3RvY29sOiAnd3NzJyxcbiAgICBob3N0OiBpb3RFbmRwb2ludCxcbiAgICByZWdpb24sXG4gICAgcmVjb25uZWN0UGVyaW9kOiAxLFxuICAgIGFjY2Vzc0tleUlkOiBjcmVkZW50aWFscy5hY2Nlc3NLZXlJZCxcbiAgICBzZWNyZXRLZXk6IGNyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleSxcbiAgICBzZXNzaW9uVG9rZW46IGNyZWRlbnRpYWxzLnNlc3Npb25Ub2tlbixcbiAgfSk7XG5cbiAgY29ubmVjdGlvbi5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICBsb2coJ0lvVCBjb25uZWN0ZWQnKTtcbiAgfSk7XG5cbiAgY29ubmVjdGlvbi5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgbG9nRXJyb3IoJ0lvVCBlcnJvcicsIGVycik7XG4gIH0pO1xuXG4gIGNvbm5lY3Rpb24ub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGxvZygnSW9UIGNsb3NlZCcpO1xuICB9KTtcblxuICBjb25uZWN0aW9uLm9uKCdyZWNvbm5lY3QnLCAoKSA9PiB7XG4gICAgbG9nKCdJb1QgcmVjb25uZWN0ZWQnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59XG4iXX0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
1
2
|
import { device } from 'aws-iot-device-sdk';
|
|
2
3
|
function createLog(debugMode) {
|
|
3
4
|
return (message, ...optionalParams) => {
|
|
@@ -19,11 +20,17 @@ export async function getConnection(debugMode, iotEndpoint) {
|
|
|
19
20
|
logError('No IoT endpoint could be found');
|
|
20
21
|
throw new Error('IoT Endpoint address not found');
|
|
21
22
|
}
|
|
23
|
+
const region = iotEndpoint.split('.')[2];
|
|
24
|
+
const provider = fromNodeProviderChain();
|
|
25
|
+
const credentials = await provider();
|
|
22
26
|
const connection = new device({
|
|
23
27
|
protocol: 'wss',
|
|
24
28
|
host: iotEndpoint,
|
|
25
|
-
region
|
|
29
|
+
region,
|
|
26
30
|
reconnectPeriod: 1,
|
|
31
|
+
accessKeyId: credentials.accessKeyId,
|
|
32
|
+
secretKey: credentials.secretAccessKey,
|
|
33
|
+
sessionToken: credentials.sessionToken,
|
|
27
34
|
});
|
|
28
35
|
connection.on('connect', () => {
|
|
29
36
|
log('IoT connected');
|
|
@@ -39,4 +46,4 @@ export async function getConnection(debugMode, iotEndpoint) {
|
|
|
39
46
|
});
|
|
40
47
|
return connection;
|
|
41
48
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW90LWNvbm5lY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saXN0ZW5lci9pb3QtY29ubmVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJNUMsU0FBUyxTQUFTLENBQUMsU0FBa0I7SUFDbkMsT0FBTyxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQXFCLEVBQUUsRUFBRTtRQUNuRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGNBQWM7SUFDckIsT0FBTyxDQUFDLE9BQWUsRUFBRSxHQUFHLGNBQXFCLEVBQUUsRUFBRTtRQUNuRCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNwRCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQ2pDLFNBQWtCLEVBQ2xCLFdBQW1CO0lBRW5CLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNsQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6QyxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7SUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDNUIsUUFBUSxFQUFFLEtBQUs7UUFDZixJQUFJLEVBQUUsV0FBVztRQUNqQixNQUFNO1FBQ04sZUFBZSxFQUFFLENBQUM7UUFDbEIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXO1FBQ3BDLFNBQVMsRUFBRSxXQUFXLENBQUMsZUFBZTtRQUN0QyxZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVk7S0FDdkMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQzVCLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDN0IsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUMxQixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7UUFDOUIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnJvbU5vZGVQcm92aWRlckNoYWluIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xuaW1wb3J0IHsgZGV2aWNlIH0gZnJvbSAnYXdzLWlvdC1kZXZpY2Utc2RrJztcblxuZXhwb3J0IHR5cGUgZnJhZ21lbnQgPSB7IGlkOiBzdHJpbmc7IGluZGV4OiBudW1iZXI7IGNvdW50OiBudW1iZXI7IGRhdGE6IGFueSB9O1xuXG5mdW5jdGlvbiBjcmVhdGVMb2coZGVidWdNb2RlOiBib29sZWFuKSB7XG4gIHJldHVybiAobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHtcbiAgICBpZiAoZGVidWdNb2RlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdTU1BZJywgbWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JMb2coKSB7XG4gIHJldHVybiAobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCdTU1BZJywgbWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpO1xuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbihcbiAgZGVidWdNb2RlOiBib29sZWFuLFxuICBpb3RFbmRwb2ludDogc3RyaW5nXG4pOiBQcm9taXNlPGRldmljZT4ge1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2coZGVidWdNb2RlKTtcbiAgY29uc3QgbG9nRXJyb3IgPSBjcmVhdGVFcnJvckxvZygpO1xuICBsb2coJ1VzaW5nIElvVCBlbmRwb2ludDonLCBpb3RFbmRwb2ludCk7XG5cbiAgaWYgKCFpb3RFbmRwb2ludCkge1xuICAgIGxvZ0Vycm9yKCdObyBJb1QgZW5kcG9pbnQgY291bGQgYmUgZm91bmQnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lvVCBFbmRwb2ludCBhZGRyZXNzIG5vdCBmb3VuZCcpO1xuICB9XG4gIGNvbnN0IHJlZ2lvbiA9IGlvdEVuZHBvaW50LnNwbGl0KCcuJylbMl07XG5cbiAgY29uc3QgcHJvdmlkZXIgPSBmcm9tTm9kZVByb3ZpZGVyQ2hhaW4oKTtcbiAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCBwcm92aWRlcigpO1xuICBjb25zdCBjb25uZWN0aW9uID0gbmV3IGRldmljZSh7XG4gICAgcHJvdG9jb2w6ICd3c3MnLFxuICAgIGhvc3Q6IGlvdEVuZHBvaW50LFxuICAgIHJlZ2lvbixcbiAgICByZWNvbm5lY3RQZXJpb2Q6IDEsXG4gICAgYWNjZXNzS2V5SWQ6IGNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkLFxuICAgIHNlY3JldEtleTogY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5LFxuICAgIHNlc3Npb25Ub2tlbjogY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuLFxuICB9KTtcblxuICBjb25uZWN0aW9uLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgIGxvZygnSW9UIGNvbm5lY3RlZCcpO1xuICB9KTtcblxuICBjb25uZWN0aW9uLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICBsb2dFcnJvcignSW9UIGVycm9yJywgZXJyKTtcbiAgfSk7XG5cbiAgY29ubmVjdGlvbi5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgbG9nKCdJb1QgY2xvc2VkJyk7XG4gIH0pO1xuXG4gIGNvbm5lY3Rpb24ub24oJ3JlY29ubmVjdCcsICgpID0+IHtcbiAgICBsb2coJ0lvVCByZWNvbm5lY3RlZCcpO1xuICB9KTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn1cbiJdfQ==
|