@workflow/next 5.0.0-beta.37 → 5.0.0-beta.38
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/dist/builder-eager.d.ts.map +1 -1
- package/dist/builder-eager.js +1 -26
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -63
- package/dist/loader.d.ts +1 -2
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +16 -26
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAoCA,wBAAsB,mBAAmB,CACvC,cAAc,CAAC,EAAE,cAAc,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAoCA,wBAAsB,mBAAmB,CACvC,cAAc,CAAC,EAAE,cAAc,oBAAoB,CAAC,gBA8rBrD"}
|
package/dist/builder-eager.js
CHANGED
|
@@ -83,7 +83,6 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
83
83
|
interimBundleCtx: combinedResult.interimBundleCtx,
|
|
84
84
|
bundleFinal: combinedResult.bundleFinal,
|
|
85
85
|
};
|
|
86
|
-
let workflowInterimBundleText = combinedResult.workflowInterimBundleText;
|
|
87
86
|
let discoveredEntries = combinedResult.discoveredEntries;
|
|
88
87
|
let stepsManifest = combinedResult.stepsManifest;
|
|
89
88
|
let workflowsManifest = combinedResult.workflowsManifest;
|
|
@@ -168,7 +167,6 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
168
167
|
if (!workflowOutput) {
|
|
169
168
|
throw new Error('Invariant: expected workflow output from hot rebuild');
|
|
170
169
|
}
|
|
171
|
-
workflowInterimBundleText = workflowOutput;
|
|
172
170
|
await workflowsCtx.bundleFinal(workflowOutput);
|
|
173
171
|
await writeManifest(mergeCombinedManifest(stepsManifest));
|
|
174
172
|
};
|
|
@@ -183,7 +181,6 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
183
181
|
discoveredEntries = newCombined.discoveredEntries;
|
|
184
182
|
stepsManifest = newCombined.stepsManifest;
|
|
185
183
|
workflowsManifest = newCombined.workflowsManifest;
|
|
186
|
-
workflowInterimBundleText = newCombined.workflowInterimBundleText;
|
|
187
184
|
if (!newCombined?.interimBundleCtx || !newCombined?.bundleFinal) {
|
|
188
185
|
throw new Error('Invariant: expected workflows bundle context after rebuild');
|
|
189
186
|
}
|
|
@@ -287,19 +284,6 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
287
284
|
const hasFileChanges = ({ addedFiles, modifiedFiles, removedFiles, }) => addedFiles.length > 0 ||
|
|
288
285
|
modifiedFiles.length > 0 ||
|
|
289
286
|
removedFiles.length > 0;
|
|
290
|
-
const stepExecutionFilesChanged = (fileChanges) => {
|
|
291
|
-
const stepEntryFiles = [...discoveredEntries.discoveredSteps].map(normalizePath);
|
|
292
|
-
if (stepEntryFiles.length === 0) {
|
|
293
|
-
return false;
|
|
294
|
-
}
|
|
295
|
-
const changedFiles = unique([
|
|
296
|
-
...fileChanges.modifiedFiles,
|
|
297
|
-
...fileChanges.addedFiles,
|
|
298
|
-
...fileChanges.removedFiles,
|
|
299
|
-
]).map(normalizePath);
|
|
300
|
-
return changedFiles.some((changedFile) => stepEntryFiles.includes(changedFile) ||
|
|
301
|
-
stepEntryFiles.some((stepFile) => parentHasChild(stepFile, changedFile)));
|
|
302
|
-
};
|
|
303
287
|
const logDevHmr = (...args) => {
|
|
304
288
|
if (process.env.WORKFLOW_DEV_HMR_LOGS === '1') {
|
|
305
289
|
console.log(...args);
|
|
@@ -331,15 +315,6 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
331
315
|
for (const [file, snapshot] of decision.snapshots || []) {
|
|
332
316
|
sourceSnapshots.set(file, snapshot);
|
|
333
317
|
}
|
|
334
|
-
if (!stepsCtx &&
|
|
335
|
-
workflowInterimBundleText &&
|
|
336
|
-
stepExecutionFilesChanged(fileChanges)) {
|
|
337
|
-
// Source step registrations keep stable imports, so Turbopack
|
|
338
|
-
// can leave the generated flow route cached after a
|
|
339
|
-
// step-body-only edit. Refresh the route wrapper without
|
|
340
|
-
// rediscovering entries or rebuilding the workflow VM.
|
|
341
|
-
await workflowsCtx.bundleFinal(workflowInterimBundleText);
|
|
342
|
-
}
|
|
343
318
|
return;
|
|
344
319
|
}
|
|
345
320
|
if (decision.kind === 'full') {
|
|
@@ -571,4 +546,4 @@ async function getNextBuilderEager(buildersModule) {
|
|
|
571
546
|
CachedNextBuilderEager = NextBuilder;
|
|
572
547
|
return NextBuilder;
|
|
573
548
|
}
|
|
574
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBb0NBLGtEQW11QkM7QUF2d0JELHFDQUFpRDtBQUNqRCwrQ0FTMEI7QUFDMUIseUNBQXlFO0FBS3pFLHdEQUFnQztBQUVoQyx1REFBK0Q7QUFDL0QseURBTzRCO0FBRTVCLElBQUksc0JBQTJCLENBQUM7QUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUV2RCxDQUFDO0FBRWhCLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0Usb0VBQW9FO0FBQzdELEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsY0FBb0Q7SUFFcEQsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzNCLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sRUFDSixXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsY0FBYyxHQUNmLEdBQUcsY0FBYztRQUNsQixDQUFDLE1BQU0sU0FBUyxDQUFzQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxXQUFZLFNBQVEsZ0JBQWdCO1FBTXhDLEtBQUssQ0FBQyxLQUFLO1lBQ1QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoRCxNQUFNLG9CQUFvQixHQUFHLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUV4RSxrQ0FBa0M7WUFDbEMsTUFBTSxJQUFBLGdCQUFLLEVBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdkIsb0VBQW9FO2dCQUNwRSxNQUFN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QztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc3RhbnRzLCB0eXBlIERpcmVudCB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgYWNjZXNzLFxuICBjb3B5RmlsZSxcbiAgbWtkaXIsXG4gIHJlYWRkaXIsXG4gIHJlYWxwYXRoLFxuICBybSxcbiAgc3RhdCxcbiAgd3JpdGVGaWxlLFxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGV4dG5hbWUsIGlzQWJzb2x1dGUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHtcbiAgTmV4dENvbmZpZyBhcyBCdWlsZGVyTmV4dENvbmZpZyxcbiAgV29ya2Zsb3dNYW5pZmVzdCxcbn0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCBjaG9raWRhciBmcm9tICdjaG9raWRhcic7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWcgYXMgUHJvamVjdE5leHRDb25maWcgfSBmcm9tICduZXh0JztcbmltcG9ydCB7IGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlIH0gZnJvbSAnLi93YXRjaC1pZ25vcmUuanMnO1xuaW1wb3J0IHtcbiAgY2xhc3NpZnlSZWJ1aWxkLFxuICBjcmVhdGVTb3VyY2VTbmFwc2hvdCxcbiAgdHlwZSBGaWxlQ2hhbmdlcyxcbiAgZ2V0UmVsZXZhbnRGaWxlcyxcbiAgcmVwbGFjZVNvdXJjZVNuYXBzaG90cyxcbiAgdHlwZSBTb3VyY2VTbmFwc2hvdCxcbn0gZnJvbSAnLi93YXRjaC1yZWJ1aWxkLmpzJztcblxubGV0IENhY2hlZE5leHRCdWlsZGVyRWFnZXI6IGFueTtcbmNvbnN0IGltcG9ydEVzbSA9IG5ldyBGdW5jdGlvbignc3BlY2lmaWVyJywgJ3JldHVybiBpbXBvcnQoc3BlY2lmaWVyKScpIGFzIDxUPihcbiAgc3BlY2lmaWVyOiBzdHJpbmdcbikgPT4gUHJvbWlzZTxUPjtcblxuLy8gQ3JlYXRlIHRoZSBlYWdlciBOZXh0IGJ1aWxkZXIgZHluYW1pY2FsbHkgYnkgZXh0ZW5kaW5nIHRoZSBFU00gQmFzZUJ1aWxkZXIuXG4vLyBFeHBvcnRlZCBhcyBnZXROZXh0QnVpbGRlckVhZ2VyKCkgdG8gYWxsb3cgQ29tbW9uSlMgbW9kdWxlcyB0byBpbXBvcnQgZnJvbVxuLy8gdGhlIEVTTSBAd29ya2Zsb3cvYnVpbGRlcnMgcGFja2FnZSB2aWEgZHluYW1pYyBpbXBvcnQgYXQgcnVudGltZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXROZXh0QnVpbGRlckVhZ2VyKFxuICBidWlsZGVyc01vZHVsZT86IHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpXG4pIHtcbiAgaWYgKENhY2hlZE5leHRCdWlsZGVyRWFnZXIpIHtcbiAgICByZXR1cm4gQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBCYXNlQnVpbGRlcjogQmFzZUJ1aWxkZXJDbGFzcyxcbiAgICBnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcixcbiAgICBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zLFxuICAgIHBhcmVudEhhc0NoaWxkLFxuICB9ID0gYnVpbGRlcnNNb2R1bGUgPz9cbiAgKGF3YWl0IGltcG9ydEVzbTx0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKT4oJ0B3b3JrZmxvdy9idWlsZGVycycpKTtcblxuICBjbGFzcyBOZXh0QnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyQ2xhc3Mge1xuICAgIHByb3RlY3RlZCBkZWNsYXJlIGNvbmZpZzogQnVpbGRlck5leHRDb25maWcgJiB7XG4gICAgICBwYWdlRXh0ZW5zaW9uczogTm9uTnVsbGFibGU8UHJvamVjdE5leHRDb25maWdbJ3BhZ2VFeHRlbnNpb25zJ10+O1xuICAgICAgZGlzdERpcjogc3RyaW5nO1xuICAgIH07XG5cbiAgICBhc3luYyBidWlsZCgpIHtcbiAgICAgIGNvbnN0IG91dHB1dERpciA9IGF3YWl0IHRoaXMuZmluZEFwcERpcmVjdG9yeSgpO1xuICAgICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKG91dHB1dERpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3JpZXMgZXhpc3RcbiAgICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmICghdGhpcy5jb25maWcud2F0Y2gpIHtcbiAgICAgICAgLy8gUHJvZHVjdGlvbiBidWlsZCBjYWNoZXMgbWF5IHN0aWxsIGNvbnRhaW4gdGhlIHJldGlyZWQgc3RlcCByb3V0ZS5cbiAgICAgICAgYXdhaXQgcm0oam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3N0ZXAnKSwge1xuICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJy5naXRpZ25vcmUnKSwgJyonKTtcblxuICAgICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHRoaXMuZ2V0SW5wdXRGaWxlcygpO1xuICAgICAgY29uc3QgdHNjb25maWdQYXRoID0gYXdhaXQgdGhpcy5maW5kVHNDb25maWdQYXRoKCk7XG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGlucHV0RmlsZXMsXG4gICAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgICB9O1xuXG4gICAgICAvLyBWMjogQnVpbGQgY29tYmluZWQgcm91dGUgKHJlcGxhY2VzIHNlcGFyYXRlIHN0ZXAgKyBmbG93IHJvdXRlcylcbiAgICAgIGNvbnN0IGNvbWJpbmVkUmVzdWx0ID0gYXdhaXQgdGhpcy5idWlsZENvbWJpbmVkRnVuY3Rpb24ob3B0aW9ucyk7XG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va1JvdXRlKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG5cbiAgICAgIGNvbnN0IHdyaXRlTWFuaWZlc3QgPSBhc3luYyAoXG4gICAgICAgIHNvdXJjZU1hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0IHwgdW5kZWZpbmVkXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSB7XG4gICAgICAgICAgc3RlcHM6IHsgLi4uc291cmNlTWFuaWZlc3Q/LnN0ZXBzIH0sXG4gICAgICAgICAgd29ya2Zsb3dzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py53b3JrZmxvd3MgfSxcbiAgICAgICAgICBjbGFzc2VzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py5jbGFzc2VzIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV3JpdGUgbWFuaWZlc3RcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dCdW5kbGVQYXRoID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cvcm91dGUuanMnKTtcbiAgICAgICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICAgICAgd29ya2Zsb3dCdW5kbGVQYXRoLFxuICAgICAgICAgIG1hbmlmZXN0RGlyOiB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRXhwb3NlIG1hbmlmZXN0IGFzIGEgc3RhdGljIGZpbGUgd2hlbiBXT1JLRkxPV19QVUJMSUNfTUFOSUZFU1Q9MS5cbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkRXhwb3NlUHVibGljTWFuaWZlc3QgJiYgbWFuaWZlc3RKc29uKSB7XG4gICAgICAgICAgY29uc3QgcHVibGljTWFuaWZlc3REaXIgPSBqb2luKFxuICAgICAgICAgICAgdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgICAgICdwdWJsaWMvLndlbGwta25vd24vd29ya2Zsb3cvdjEnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCBta2RpcihwdWJsaWNNYW5pZmVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHB1YmxpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBjb3B5RmlsZShcbiAgICAgICAgICAgIGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgICAgICBqb2luKHB1YmxpY01hbmlmZXN0RGlyLCAnbWFuaWZlc3QuanNvbicpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgd3JpdGVNYW5pZmVzdChjb21iaW5lZFJlc3VsdD8ubWFuaWZlc3QpO1xuXG4gICAgICBhd2FpdCB0aGlzLndyaXRlRnVuY3Rpb25zQ29uZmlnKG91dHB1dERpcik7XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZy53YXRjaCkge1xuICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgd2F0Y2ggbW9kZSBmb3IgY29tYmluZWQgYnVuZGxlXG4gICAgICAgIC8vIEZvciBub3csIGZhbGwgYmFjayB0byBmdWxsIHJlYnVpbGQgb24gZmlsZSBjaGFuZ2VzXG4gICAgICAgIGlmICghY29tYmluZWRSZXN1bHQ/LmludGVyaW1CdW5kbGVDdHggfHwgIWNvbWJpbmVkUmVzdWx0LmJ1bmRsZUZpbmFsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0ludmFyaWFudDogZXhwZWN0ZWQgd29ya2Zsb3cgYnVpbGQgY29udGV4dCBpbiB3YXRjaCBtb2RlJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGVwIHJlZ2lzdHJhdGlvbnMgbWF5IGJlIGVtaXR0ZWQgYXMgc291cmNlIGltcG9ydHMgd2l0aG91dCBhblxuICAgICAgICAvLyBlc2J1aWxkIGNvbnRleHQgd2hlbiBleHRlcm5hbGl6ZU5vblN0ZXBzIGlzIGVuYWJsZWQuXG4gICAgICAgIGxldCBzdGVwc0N0eCA9IGNvbWJpbmVkUmVzdWx0LnN0ZXBzQ29udGV4dDtcbiAgICAgICAgbGV0IHdvcmtmbG93c0N0eCA9IHtcbiAgICAgICAgICBpbnRlcmltQnVuZGxlQ3R4OiBjb21iaW5lZFJlc3VsdC5pbnRlcmltQnVuZGxlQ3R4LFxuICAgICAgICAgIGJ1bmRsZUZpbmFsOiBjb21iaW5lZFJlc3VsdC5idW5kbGVGaW5hbCxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHdvcmtmbG93SW50ZXJpbUJ1bmRsZVRleHQgPVxuICAgICAgICAgIGNvbWJpbmVkUmVzdWx0LndvcmtmbG93SW50ZXJpbUJ1bmRsZVRleHQ7XG4gICAgICAgIGxldCBkaXNjb3ZlcmVkRW50cmllcyA9IGNvbWJpbmVkUmVzdWx0LmRpc2NvdmVyZWRFbnRyaWVzO1xuICAgICAgICBsZXQgc3RlcHNNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LnN0ZXBzTWFuaWZlc3Q7XG4gICAgICAgIGxldCB3b3JrZmxvd3NNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LndvcmtmbG93c01hbmlmZXN0O1xuICAgICAgICBjb25zdCBzdGVwc091dGZpbGUgPSBqb2luKFxuICAgICAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAgICdmbG93JyxcbiAgICAgICAgICAnX19zdGVwX3JlZ2lzdHJhdGlvbnMuanMnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplUGF0aCA9IChwYXRobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgIChpc0Fic29sdXRlKHBhdGhuYW1lKVxuICAgICAgICAgICAgPyBwYXRobmFtZVxuICAgICAgICAgICAgOiByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIHBhdGhuYW1lKVxuICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBjb25zdCBzb3VyY2VTbmFwc2hvdHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+KCk7XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hhYmxlRXh0ZW5zaW9ucyA9IG5ldyBTZXQoW1xuICAgICAgICAgICcuanMnLFxuICAgICAgICAgICcuanN4JyxcbiAgICAgICAgICAnLnRzJyxcbiAgICAgICAgICAnLnRzeCcsXG4gICAgICAgICAgJy5tdHMnLFxuICAgICAgICAgICcuY3RzJyxcbiAgICAgICAgICAnLmNqcycsXG4gICAgICAgICAgJy5tanMnLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEdlbmVyYXRlZERpciA9IHdvcmtmbG93R2VuZXJhdGVkRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERpc3REaXIgPSBub3JtYWxpemVQYXRoKHRoaXMuY29uZmlnLmRpc3REaXIpO1xuXG4gICAgICAgIC8vIFBydW5lIHRoZSBkZXYgd2F0Y2ggc2V0IHRvIGtlZXAgY2hva2lkYXIgZnJvbSByZWdpc3RlcmluZyBhblxuICAgICAgICAvLyBmcy53YXRjaCBwZXIgZGlyZWN0b3J5IGFjcm9zcyB0aGUgd2hvbGUgcHJvamVjdCB0cmVlIChjaG9raWRhciA0XG4gICAgICAgIC8vIGRyb3BwZWQgZnNldmVudHMsIHNvIG9uIG1hY09TIHRoYXQgZXhoYXVzdHMgdGhlIGZkIGxpbWl0IC0+IEVNRklMRVxuICAgICAgICAvLyBvbiBsYXJnZSBtb25vcmVwb3MpLiBUaGlzIGhvbm9ycyBgLmdpdGlnbm9yZWAgYW5kIHRoZVxuICAgICAgICAvLyBXT1JLRkxPV19ERVZfV0FUQ0hfSUdOT1JFRF9QQVRIUyBlbnYgdmFyIGluIGFkZGl0aW9uIHRvIHRoZVxuICAgICAgICAvLyBidWlsdC1pbiBmcmFnbWVudHMuIFRoZSBnZW5lcmF0ZWQgd29ya2Zsb3cgZGlyIGlzIHBhc3NlZCBhcyBhblxuICAgICAgICAvLyBleHRyYSBmcmFnbWVudCBzbyBpdCBpcyBwcnVuZWQgcmVnYXJkbGVzcyBvZiBgLmdpdGlnbm9yZWAuXG4gICAgICAgIGNvbnN0IGlzSWdub3JlZFdhdGNoUGF0aCA9IGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlKHtcbiAgICAgICAgICB3b3JraW5nRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgIHByb2plY3RSb290OiB0aGlzLnRyYW5zZm9ybVByb2plY3RSb290LFxuICAgICAgICAgIGV4dHJhRnJhZ21lbnRzOiBbbm9ybWFsaXplZEdlbmVyYXRlZERpcl0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQgPSAobm9ybWFsaXplZFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoID09PSBub3JtYWxpemVkRGlzdERpciB8fFxuICAgICAgICAgICAgbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChgJHtub3JtYWxpemVkRGlzdERpcn0vYClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXNJZ25vcmVkV2F0Y2hQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcmVidWlsZFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgY29uc3QgZW5xdWV1ZSA9ICh0YXNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XG4gICAgICAgICAgcmVidWlsZFF1ZXVlID0gcmVidWlsZFF1ZXVlLnRoZW4odGFzaykuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcHJvY2VzcyBmaWxlIGNoYW5nZScsIGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVidWlsZFF1ZXVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlYWRTb3VyY2VTbmFwc2hvdCA9IChmaWxlOiBzdHJpbmcpID0+XG4gICAgICAgICAgY3JlYXRlU291cmNlU25hcHNob3QoeyBmaWxlLCBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlZnJlc2hTb3VyY2VTbmFwc2hvdHMgPSAoKSA9PlxuICAgICAgICAgIHJlcGxhY2VTb3VyY2VTbmFwc2hvdHMoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbWVyZ2VDb21iaW5lZE1hbmlmZXN0ID0gKFxuICAgICAgICAgIG5leHRTdGVwc01hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0XG4gICAgICAgICk6IFdvcmtmbG93TWFuaWZlc3QgPT4gKHtcbiAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdCxcbiAgICAgICAgICB3b3JrZmxvd3M6IHtcbiAgICAgICAgICAgIC4uLm5leHRTdGVwc01hbmlmZXN0LndvcmtmbG93cyxcbiAgICAgICAgICAgIC4uLndvcmtmbG93c01hbmlmZXN0LndvcmtmbG93cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICAgIC4uLm5leHRTdGVwc01hbmlmZXN0LmNsYXNzZXMsXG4gICAgICAgICAgICAuLi53b3JrZmxvd3NNYW5pZmVzdC5jbGFzc2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhvdFJlYnVpbGQgPSBhc3luYyAocmVmcmVzaFN0ZXBSZWdpc3RyYXRpb25zOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKHN0ZXBzQ3R4KSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN0ZXBzQ3R4LnJlYnVpbGQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0ZXBzTWFuaWZlc3QgPSBhd2FpdCB0aGlzLmNyZWF0ZVN0ZXBTb3VyY2VSZWdpc3RyYXRpb25GaWxlKHtcbiAgICAgICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICAgICAgb3V0ZmlsZTogc3RlcHNPdXRmaWxlLFxuICAgICAgICAgICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dSZXN1bHQgPSBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5yZWJ1aWxkKCk7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dPdXRwdXQgPSB3b3JrZmxvd1Jlc3VsdC5vdXRwdXRGaWxlcz8uWzBdPy50ZXh0O1xuICAgICAgICAgIGlmICghd29ya2Zsb3dPdXRwdXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0ludmFyaWFudDogZXhwZWN0ZWQgd29ya2Zsb3cgb3V0cHV0IGZyb20gaG90IHJlYnVpbGQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdvcmtmbG93SW50ZXJpbUJ1bmRsZVRleHQgPSB3b3JrZmxvd091dHB1dDtcbiAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguYnVuZGxlRmluYWwod29ya2Zsb3dPdXRwdXQpO1xuICAgICAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QobWVyZ2VDb21iaW5lZE1hbmlmZXN0KHN0ZXBzTWFuaWZlc3QpKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmdWxsUmVidWlsZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNsZWFyRGlzY292ZXJlZEVudHJpZXNDYWNoZSgpO1xuICAgICAgICAgIGNvbnN0IG5ld0lucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgICAgICBvcHRpb25zLmlucHV0RmlsZXMgPSBuZXdJbnB1dEZpbGVzO1xuXG4gICAgICAgICAgYXdhaXQgc3RlcHNDdHg/LmRpc3Bvc2UoKTtcbiAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBuZXdDb21iaW5lZCA9IGF3YWl0IHRoaXMuYnVpbGRDb21iaW5lZEZ1bmN0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgIHN0ZXBzQ3R4ID0gbmV3Q29tYmluZWQuc3RlcHNDb250ZXh0O1xuICAgICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzID0gbmV3Q29tYmluZWQuZGlzY292ZXJlZEVudHJpZXM7XG4gICAgICAgICAgc3RlcHNNYW5pZmVzdCA9IG5ld0NvbWJpbmVkLnN0ZXBzTWFuaWZlc3Q7XG4gICAgICAgICAgd29ya2Zsb3dzTWFuaWZlc3QgPSBuZXdDb21iaW5lZC53b3JrZmxvd3NNYW5pZmVzdDtcbiAgICAgICAgICB3b3JrZmxvd0ludGVyaW1CdW5kbGVUZXh0ID0gbmV3Q29tYmluZWQud29ya2Zsb3dJbnRlcmltQnVuZGxlVGV4dDtcblxuICAgICAgICAgIGlmICghbmV3Q29tYmluZWQ/LmludGVyaW1CdW5kbGVDdHggfHwgIW5ld0NvbWJpbmVkPy5idW5kbGVGaW5hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCB3b3JrZmxvd3MgYnVuZGxlIGNvbnRleHQgYWZ0ZXIgcmVidWlsZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdvcmtmbG93c0N0eCA9IHtcbiAgICAgICAgICAgIGludGVyaW1CdW5kbGVDdHg6IG5ld0NvbWJpbmVkLmludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgICAgICBidW5kbGVGaW5hbDogbmV3Q29tYmluZWQuYnVuZGxlRmluYWwsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QobmV3Q29tYmluZWQubWFuaWZlc3QpO1xuICAgICAgICAgIGF3YWl0IHJlZnJlc2hTb3VyY2VTbmFwc2hvdHMoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpc1dhdGNoYWJsZUZpbGUgPSAocGF0aDogc3RyaW5nKSA9PlxuICAgICAgICAgIHdhdGNoYWJsZUV4dGVuc2lvbnMuaGFzKGV4dG5hbWUocGF0aCkpO1xuXG4gICAgICAgIGNvbnN0IHJlYWRLbm93bkZpbGVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgY29uc3QgYWxpYXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgICAgY29uc3QgcmVsZXZhbnRGaWxlcyA9IGdldFJlbGV2YW50RmlsZXMoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgYWRkS25vd25GaWxlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCByZWFsRmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJlYWxGaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoYXdhaXQgcmVhbHBhdGgoZmlsZVBhdGgpKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICAgICAgY29uc3QgY2Fub25pY2FsUGF0aCA9IHJlbGV2YW50RmlsZXMuaGFzKHJlYWxGaWxlUGF0aClcbiAgICAgICAgICAgICAgPyByZWFsRmlsZVBhdGhcbiAgICAgICAgICAgICAgOiBmaWxlUGF0aDtcbiAgICAgICAgICAgIGZpbGVzLmFkZChjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICAgIGFsaWFzZXMuc2V0KGZpbGVQYXRoLCBjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICAgIGFsaWFzZXMuc2V0KHJlYWxGaWxlUGF0aCwgY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsUGF0aDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgdmlzaXQgPSBhc3luYyAoZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGxldCBkaXJlbnRzOiBEaXJlbnQ8c3RyaW5nPltdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZGlyZW50cyA9IGF3YWl0IHJlYWRkaXIoZGlyZWN0b3J5LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZGlyZW50cy5tYXAoYXN5bmMgKGRpcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChqb2luKGRpcmVjdG9yeSwgZGlyZW50Lm5hbWUpKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhGcmFnbWVudChmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHZpc2l0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgc3RhdHM6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2Ygc3RhdD4+O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBzdGF0cyA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCB2aXNpdChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0cy5pc0ZpbGUoKSB8fCAhaXNXYXRjaGFibGVGaWxlKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IGFkZEtub3duRmlsZShmaWxlUGF0aCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhd2FpdCB2aXNpdCh0aGlzLmNvbmZpZy53b3JraW5nRGlyKTtcbiAgICAgICAgICByZXR1cm4geyBmaWxlcywgYWxpYXNlcywgYWRkS25vd25GaWxlIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWVyZ2VGaWxlQ2hhbmdlcyA9IChcbiAgICAgICAgICBsZWZ0OiBGaWxlQ2hhbmdlcyxcbiAgICAgICAgICByaWdodDogRmlsZUNoYW5nZXNcbiAgICAgICAgKTogRmlsZUNoYW5nZXMgPT4gKHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiB1bmlxdWUoWy4uLmxlZnQuYWRkZWRGaWxlcywgLi4ucmlnaHQuYWRkZWRGaWxlc10pLFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi5sZWZ0Lm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgICAuLi5yaWdodC5tb2RpZmllZEZpbGVzLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHJlbW92ZWRGaWxlczogdW5pcXVlKFsuLi5sZWZ0LnJlbW92ZWRGaWxlcywgLi4ucmlnaHQucmVtb3ZlZEZpbGVzXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZSA9IChwYXRoczogc3RyaW5nW10pID0+IFsuLi5uZXcgU2V0KHBhdGhzKV07XG5cbiAgICAgICAgY29uc3QgY2xhc3NpZnlGaWxlQ2hhbmdlcyA9ICh7XG4gICAgICAgICAgY2hhbmdlZEZpbGVzLFxuICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLFxuICAgICAgICB9OiB7XG4gICAgICAgICAgY2hhbmdlZEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgICAgICBrbm93bkZpbGVzOiBTZXQ8c3RyaW5nPjtcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICB9KTogRmlsZUNoYW5nZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGFkZGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgbW9kaWZpZWRGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiB1bmlxdWUoY2hhbmdlZEZpbGVzKSkge1xuICAgICAgICAgICAgaWYgKGtub3duRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgICAgICAgIG1vZGlmaWVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZGVkRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgICAga25vd25GaWxlcy5hZGQoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHJlbW92ZWRGaWxlcykge1xuICAgICAgICAgICAga25vd25GaWxlcy5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFkZGVkRmlsZXMsXG4gICAgICAgICAgICBtb2RpZmllZEZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiB1bmlxdWUocmVtb3ZlZEZpbGVzKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhc0ZpbGVDaGFuZ2VzID0gKHtcbiAgICAgICAgICBhZGRlZEZpbGVzLFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzLFxuICAgICAgICB9OiBGaWxlQ2hhbmdlcykgPT5cbiAgICAgICAgICBhZGRlZEZpbGVzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICByZW1vdmVkRmlsZXMubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3Qgc3RlcEV4ZWN1dGlvbkZpbGVzQ2hhbmdlZCA9IChmaWxlQ2hhbmdlczogRmlsZUNoYW5nZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwRW50cnlGaWxlcyA9IFsuLi5kaXNjb3ZlcmVkRW50cmllcy5kaXNjb3ZlcmVkU3RlcHNdLm1hcChcbiAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGhcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChzdGVwRW50cnlGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY2hhbmdlZEZpbGVzID0gdW5pcXVlKFtcbiAgICAgICAgICAgIC4uLmZpbGVDaGFuZ2VzLm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgICAuLi5maWxlQ2hhbmdlcy5hZGRlZEZpbGVzLFxuICAgICAgICAgICAgLi4uZmlsZUNoYW5nZXMucmVtb3ZlZEZpbGVzLFxuICAgICAgICAgIF0pLm1hcChub3JtYWxpemVQYXRoKTtcblxuICAgICAgICAgIHJldHVybiBjaGFuZ2VkRmlsZXMuc29tZShcbiAgICAgICAgICAgIChjaGFuZ2VkRmlsZSkgPT5cbiAgICAgICAgICAgICAgc3RlcEVudHJ5RmlsZXMuaW5jbHVkZXMoY2hhbmdlZEZpbGUpIHx8XG4gICAgICAgICAgICAgIHN0ZXBFbnRyeUZpbGVzLnNvbWUoKHN0ZXBGaWxlKSA9PlxuICAgICAgICAgICAgICAgIHBhcmVudEhhc0NoaWxkKHN0ZXBGaWxlLCBjaGFuZ2VkRmlsZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxvZ0RldkhtciA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuV09SS0ZMT1dfREVWX0hNUl9MT0dTID09PSAnMScpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCByZWZyZXNoU291cmNlU25hcHNob3RzKCk7XG4gICAgICAgIGxldCB7XG4gICAgICAgICAgZmlsZXM6IGtub3duRmlsZXMsXG4gICAgICAgICAgYWxpYXNlczoga25vd25GaWxlQWxpYXNlcyxcbiAgICAgICAgICBhZGRLbm93bkZpbGU6IHJlbWVtYmVyS25vd25GaWxlLFxuICAgICAgICB9ID0gYXdhaXQgcmVhZEtub3duRmlsZXMoKTtcblxuICAgICAgICBjb25zdCByZWZyZXNoS25vd25GaWxlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0S25vd24gPSBhd2FpdCByZWFkS25vd25GaWxlcygpO1xuICAgICAgICAgIGtub3duRmlsZXMgPSBuZXh0S25vd24uZmlsZXM7XG4gICAgICAgICAga25vd25GaWxlQWxpYXNlcyA9IG5leHRLbm93bi5hbGlhc2VzO1xuICAgICAgICAgIHJlbWVtYmVyS25vd25GaWxlID0gbmV4dEtub3duLmFkZEtub3duRmlsZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcm9jZXNzRmlsZUNoYW5nZXMgPSBhc3luYyAoZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgaWYgKCFoYXNGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkZWNpc2lvbiA9IGF3YWl0IGNsYXNzaWZ5UmVidWlsZCh7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgIGZpbGVDaGFuZ2VzLFxuICAgICAgICAgICAgaW5wdXRGaWxlczogb3B0aW9ucy5pbnB1dEZpbGVzLFxuICAgICAgICAgICAgbm9ybWFsaXplUGF0aCxcbiAgICAgICAgICAgIHBhcmVudEhhc0NoaWxkLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGRlY2lzaW9uLmtpbmQgPT09ICdub25lJykge1xuICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiBza2lwJyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtmaWxlLCBzbmFwc2hvdF0gb2YgZGVjaXNpb24uc25hcHNob3RzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgc25hcHNob3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhc3RlcHNDdHggJiZcbiAgICAgICAgICAgICAgd29ya2Zsb3dJbnRlcmltQnVuZGxlVGV4dCAmJlxuICAgICAgICAgICAgICBzdGVwRXhlY3V0aW9uRmlsZXNDaGFuZ2VkKGZpbGVDaGFuZ2VzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIFNvdXJjZSBzdGVwIHJlZ2lzdHJhdGlvbnMga2VlcCBzdGFibGUgaW1wb3J0cywgc28gVHVyYm9wYWNrXG4gICAgICAgICAgICAgIC8vIGNhbiBsZWF2ZSB0aGUgZ2VuZXJhdGVkIGZsb3cgcm91dGUgY2FjaGVkIGFmdGVyIGFcbiAgICAgICAgICAgICAgLy8gc3RlcC1ib2R5LW9ubHkgZWRpdC4gUmVmcmVzaCB0aGUgcm91dGUgd3JhcHBlciB3aXRob3V0XG4gICAgICAgICAgICAgIC8vIHJlZGlzY292ZXJpbmcgZW50cmllcyBvciByZWJ1aWxkaW5nIHRoZSB3b3JrZmxvdyBWTS5cbiAgICAgICAgICAgICAgYXdhaXQgd29ya2Zsb3dzQ3R4LmJ1bmRsZUZpbmFsKHdvcmtmbG93SW50ZXJpbUJ1bmRsZVRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVjaXNpb24ua2luZCA9PT0gJ2Z1bGwnKSB7XG4gICAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IGZ1bGwgcmVkaXNjb3ZlcnknKTtcbiAgICAgICAgICAgIGF3YWl0IGZ1bGxSZWJ1aWxkKCk7XG4gICAgICAgICAgICBhd2FpdCByZWZyZXNoS25vd25GaWxlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvZ0RldkhtcihcbiAgICAgICAgICAgIGB3b3JrZmxvdyBkZXYgaG1yOiBob3QgcmVidWlsZCR7ZGVjaXNpb24ucmVmcmVzaFN0ZXBSZWdpc3RyYXRpb25zID8gJyB3aXRoIHN0ZXAgcmVnaXN0cmF0aW9uIHJlZnJlc2gnIDogJyd9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgaG90UmVidWlsZChkZWNpc2lvbi5yZWZyZXNoU3RlcFJlZ2lzdHJhdGlvbnMpO1xuICAgICAgICAgIGZvciAoY29uc3QgW2ZpbGUsIHNuYXBzaG90XSBvZiBkZWNpc2lvbi5zbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIHNvdXJjZVNuYXBzaG90cy5zZXQoZmlsZSwgc25hcHNob3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcGVuZGluZ0ZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICBhZGRlZEZpbGVzOiBbXSxcbiAgICAgICAgICBtb2RpZmllZEZpbGVzOiBbXSxcbiAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgZmx1c2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3Qgc2NoZWR1bGVGaWxlQ2hhbmdlcyA9IChmaWxlQ2hhbmdlczogRmlsZUNoYW5nZXMpID0+IHtcbiAgICAgICAgICBwZW5kaW5nRmlsZUNoYW5nZXMgPSBtZXJnZUZpbGVDaGFuZ2VzKFxuICAgICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzLFxuICAgICAgICAgICAgZmlsZUNoYW5nZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChmbHVzaFRpbWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gcGVuZGluZ0ZpbGVDaGFuZ2VzO1xuICAgICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzID0ge1xuICAgICAgICAgICAgICBhZGRlZEZpbGVzOiBbXSxcbiAgICAgICAgICAgICAgbW9kaWZpZWRGaWxlczogW10sXG4gICAgICAgICAgICAgIHJlbW92ZWRGaWxlczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZmx1c2hUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGVucXVldWUoKCkgPT4gcHJvY2Vzc0ZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKSk7XG4gICAgICAgICAgfSwgMTApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc29sdmVFeGlzdGluZ0V2ZW50UGF0aCA9IGFzeW5jIChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBrbm93blBhdGggPSBrbm93bkZpbGVBbGlhc2VzLmdldChub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgaWYgKGtub3duUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGtub3duUGF0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhbEZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChhd2FpdCByZWFscGF0aChub3JtYWxpemVkUGF0aCkpO1xuICAgICAgICAgICAgcmV0dXJuIGtub3duRmlsZUFsaWFzZXMuZ2V0KHJlYWxGaWxlUGF0aCkgPz8gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZUZpbGVBZGRlZCA9IGFzeW5jIChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleGlzdGluZ1BhdGggPSBhd2FpdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGgobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGNvbnN0IHdhc0tub3duID0gZXhpc3RpbmdQYXRoID8ga25vd25GaWxlcy5oYXMoZXhpc3RpbmdQYXRoKSA6IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSBhd2FpdCByZW1lbWJlcktub3duRmlsZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAga25vd25GaWxlcy5hZGQoY2Fub25pY2FsUGF0aCk7XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyh7XG4gICAgICAgICAgICBhZGRlZEZpbGVzOiB3YXNLbm93biA/IFtdIDogW2Nhbm9uaWNhbFBhdGhdLFxuICAgICAgICAgICAgbW9kaWZpZWRGaWxlczogd2FzS25vd24gPyBbY2Fub25pY2FsUGF0aF0gOiBbXSxcbiAgICAgICAgICAgIHJlbW92ZWRGaWxlczogW10sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZWQgPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSBhd2FpdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGgocGF0aG5hbWUpO1xuICAgICAgICAgIGlmICghY2Fub25pY2FsUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbGVDaGFuZ2VzID0gY2xhc3NpZnlGaWxlQ2hhbmdlcyh7XG4gICAgICAgICAgICBjaGFuZ2VkRmlsZXM6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICgha25vd25GaWxlQWxpYXNlcy5oYXMoY2Fub25pY2FsUGF0aCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlbWVtYmVyS25vd25GaWxlKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY2hlZHVsZUZpbGVDaGFuZ2VzKGZpbGVDaGFuZ2VzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYW5kbGVGaWxlUmVtb3ZlZCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWlzV2F0Y2hhYmxlRmlsZShub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID1cbiAgICAgICAgICAgIGtub3duRmlsZUFsaWFzZXMuZ2V0KG5vcm1hbGl6ZWRQYXRoKSA/PyBub3JtYWxpemVkUGF0aDtcbiAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNsYXNzaWZ5RmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgY2hhbmdlZEZpbGVzOiBbXSxcbiAgICAgICAgICAgIGtub3duRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBrbm93bkZpbGVBbGlhc2VzLmRlbGV0ZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hlciA9IGNob2tpZGFyLndhdGNoKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIHtcbiAgICAgICAgICBpZ25vcmVJbml0aWFsOiB0cnVlLFxuICAgICAgICAgIGZvbGxvd1N5bWxpbmtzOiB0cnVlLFxuICAgICAgICAgIGlnbm9yZWQ6IChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKFN0cmluZyhwYXRobmFtZSkpO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uICYmICF3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdhdGNoZXIub24oJ2FkZCcsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIHZvaWQgaGFuZGxlRmlsZUFkZGVkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ2NoYW5nZScsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIHZvaWQgaGFuZGxlRmlsZUNoYW5nZWQocGF0aG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2F0Y2hlci5vbigndW5saW5rJywgKHBhdGhuYW1lKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRmlsZVJlbW92ZWQocGF0aG5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2F0Y2hlci5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdXb3JrZmxvdyBkZXYgd2F0Y2hlciBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogcmVhZHknKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldElucHV0RmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHN1cGVyLmdldElucHV0RmlsZXMoKTtcbiAgICAgIHJldHVybiBpbnB1dEZpbGVzLmZpbHRlcigoZmlsZSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHJlbGF0aXZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIGZpbGUpLnJlcGxhY2VBbGwoXG4gICAgICAgICAgJ1xcXFwnLFxuICAgICAgICAgICcvJ1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1hdGNoIEFwcCBSb3V0ZXIgcm91dGUsIHBhZ2UsIGFuZCBsYXlvdXQgZW50cnlwb2ludHMgaW4gYXBwLyBvciBzcmMvYXBwLy5cbiAgICAgICAgaWYgKC9eKD86YXBwfHNyY1xcL2FwcClcXC8oPzouKlxcLyk/KD86cm91dGV8cGFnZXxsYXlvdXQpXFwuLy50ZXN0KGVudHJ5KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWF0Y2ggZXZlcnkgUGFnZXMgUm91dGVyIGVudHJ5cG9pbnQgaW4gcGFnZXMvIG9yIHNyYy9wYWdlcy8uXG4gICAgICAgIGlmICgvXig/OnBhZ2VzfHNyY1xcL3BhZ2VzKVxcLy8udGVzdChlbnRyeSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hdGNoIE5leHQuanMgcm9vdCBlbnRyeXBvaW50cyBhdCB0aGUgcHJvamVjdCByb290IG9yIHVuZGVyIHNyYy8uXG4gICAgICAgIHJldHVybiBbJ2luc3RydW1lbnRhdGlvbicsICdtaWRkbGV3YXJlJywgJ3Byb3h5J10uc29tZSgobmFtZSkgPT5cbiAgICAgICAgICB0aGlzLmNvbmZpZy5wYWdlRXh0ZW5zaW9ucy5zb21lKFxuICAgICAgICAgICAgKGV4dGVuc2lvbikgPT5cbiAgICAgICAgICAgICAgZW50cnkgPT09IGAke25hbWV9LiR7ZXh0ZW5zaW9ufWAgfHxcbiAgICAgICAgICAgICAgZW50cnkgPT09IGBzcmMvJHtuYW1lfS4ke2V4dGVuc2lvbn1gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB3cml0ZUZ1bmN0aW9uc0NvbmZpZyhvdXRwdXREaXI6IHN0cmluZykge1xuICAgICAgLy8gd2UgZG9uJ3QgcnVuIHRoaXMgaW4gZGV2ZWxvcG1lbnQgbW9kZSBhcyBpdCdzIG5vdCBuZWVkZWRcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFYyIGNvbWJpbmVkIGNvbmZpZzogc2luZ2xlIHRyaWdnZXIgaGFuZGxlcyBib3RoIHdvcmtmbG93IGFuZCBzdGVwIGV4ZWN1dGlvbi5cbiAgICAgIC8vIFRoZSBzdGVwIHJvdXRlIG5vIGxvbmdlciBuZWVkcyBpdHMgb3duIHRyaWdnZXIgc2luY2Ugc3RlcHMgYXJlIGV4ZWN1dGVkXG4gICAgICAvLyBpbmxpbmUgYnkgdGhlIGNvbWJpbmVkIGhhbmRsZXIgb3IgcXVldWVkIGJhY2sgdG8gX193a2Zfd29ya2Zsb3dfKiB3aXRoIHN0ZXBJZC5cbiAgICAgIGNvbnN0IGdlbmVyYXRlZENvbmZpZyA9IHtcbiAgICAgICAgdmVyc2lvbjogJzAnLFxuICAgICAgICB3b3JrZmxvd3M6IHtcbiAgICAgICAgICBtYXhEdXJhdGlvbjogJ21heCcsXG4gICAgICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgICAgam9pbihvdXRwdXREaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy92MS9jb25maWcuanNvbicpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShnZW5lcmF0ZWRDb25maWcsIG51bGwsIDIpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFYyOiBCdWlsZCBjb21iaW5lZCByb3V0ZSB0aGF0IGhhbmRsZXMgYm90aCB3b3JrZmxvdyBhbmQgc3RlcCBleGVjdXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBidWlsZENvbWJpbmVkRnVuY3Rpb24oe1xuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgIH06IHtcbiAgICAgIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICAgIHRzY29uZmlnUGF0aD86IHN0cmluZztcbiAgICB9KSB7XG4gICAgICBjb25zdCBmbG93Um91dGVEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdycpO1xuICAgICAgYXdhaXQgbWtkaXIoZmxvd1JvdXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlQ29tYmluZWRCdW5kbGUoe1xuICAgICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICBzdGVwc091dGZpbGU6IGpvaW4oZmxvd1JvdXRlRGlyLCAnX19zdGVwX3JlZ2lzdHJhdGlvbnMuanMnKSxcbiAgICAgICAgZmxvd091dGZpbGU6IGpvaW4oZmxvd1JvdXRlRGlyLCAncm91dGUuanMnKSxcbiAgICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IGZhbHNlLFxuICAgICAgICBleHRlcm5hbGl6ZU5vblN0ZXBzOiB0cnVlLFxuICAgICAgICBzb3VyY2VTdGVwUmVnaXN0cmF0aW9uSW1wb3J0czogdHJ1ZSxcbiAgICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBidWlsZFdlYmhvb2tSb3V0ZSh7XG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICB9OiB7XG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcjogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHdlYmhvb2tSb3V0ZUZpbGUgPSBqb2luKFxuICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgJ3dlYmhvb2svW3Rva2VuXS9yb3V0ZS5qcydcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgICBvdXRmaWxlOiB3ZWJob29rUm91dGVGaWxlLFxuICAgICAgICBidW5kbGU6IGZhbHNlLCAvLyBOZXh0LmpzIGRvZXNuJ3QgbmVlZCBidW5kbGluZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kQXBwRGlyZWN0b3J5KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBjb25zdCBhcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdhcHAnKTtcbiAgICAgIGNvbnN0IHNyY0FwcERpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9hcHAnKTtcbiAgICAgIGNvbnN0IHBhZ2VzRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAncGFnZXMnKTtcbiAgICAgIGNvbnN0IHNyY1BhZ2VzRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnc3JjL3BhZ2VzJyk7XG5cbiAgICAgIC8vIEhlbHBlciB0byBjaGVjayBpZiBhIHBhdGggZXhpc3RzIGFuZCBpcyBhIGRpcmVjdG9yeVxuICAgICAgY29uc3QgaXNEaXJlY3RvcnkgPSBhc3luYyAocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWNjZXNzKHBhdGgsIGNvbnN0YW50cy5GX09LKTtcbiAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgICAgICAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3Rvcnk6ICR7cGF0aH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubWVzc2FnZS5pbmNsdWRlcygnbm90IGEgZGlyZWN0b3J5JykpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gQ2hlY2sgaWYgYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShhcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBhcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHNyYy9hcHAgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY0FwcERpcikpIHtcbiAgICAgICAgcmV0dXJuIHNyY0FwcERpcjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbm8gYXBwIGRpcmVjdG9yeSBleGlzdHMsIGNoZWNrIGZvciBwYWdlcyBkaXJlY3RvcnkgYW5kIGNyZWF0ZSBhcHAgbmV4dCB0byBpdFxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHBhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgYXBwIGRpcmVjdG9yeSBuZXh0IHRvIHBhZ2VzIGRpcmVjdG9yeVxuICAgICAgICBhd2FpdCBta2RpcihhcHBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3Rvcnkoc3JjUGFnZXNEaXIpKSB7XG4gICAgICAgIC8vIENyZWF0ZSBzcmMvYXBwIGRpcmVjdG9yeSBuZXh0IHRvIHNyYy9wYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoc3JjQXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIHNyY0FwcERpcjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgTmV4dC5qcyBhcHAgb3IgcGFnZXMgZGlyZWN0b3J5LiBFeHBlY3RlZCBvbmUgb2Y6IFwiYXBwXCIsIFwic3JjL2FwcFwiLCBcInBhZ2VzXCIsIG9yIFwic3JjL3BhZ2VzXCIgdG8gZXhpc3QuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBDYWNoZWROZXh0QnVpbGRlckVhZ2VyID0gTmV4dEJ1aWxkZXI7XG4gIHJldHVybiBOZXh0QnVpbGRlcjtcbn1cbiJdfQ==
|
|
549
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBb0NBLGtEQStyQkM7QUFudUJELHFDQUFpRDtBQUNqRCwrQ0FTMEI7QUFDMUIseUNBQXlFO0FBS3pFLHdEQUFnQztBQUVoQyx1REFBK0Q7QUFDL0QseURBTzRCO0FBRTVCLElBQUksc0JBQTJCLENBQUM7QUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUV2RCxDQUFDO0FBRWhCLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0Usb0VBQW9FO0FBQzdELEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsY0FBb0Q7SUFFcEQsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzNCLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sRUFDSixXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsY0FBYyxHQUNmLEdBQUcsY0FBYztRQUNsQixDQUFDLE1BQU0sU0FBUyxDQUFzQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxXQUFZLFNBQVEsZ0JBQWdCO1FBTXhDLEtBQUssQ0FBQyxLQUFLO1lBQ1QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoRCxNQUFNLG9CQUFvQixHQUFHLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUV4RSxrQ0FBa0M7WUFDbEMsTUFBTSxJQUFBLGdCQUFLLEVBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdkIsb0VBQW9FO2dCQUNwRSxNQUFN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QUFXLENBQUM7SUFDckMsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnN0YW50cywgdHlwZSBEaXJlbnQgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGFjY2VzcyxcbiAgY29weUZpbGUsXG4gIG1rZGlyLFxuICByZWFkZGlyLFxuICByZWFscGF0aCxcbiAgcm0sXG4gIHN0YXQsXG4gIHdyaXRlRmlsZSxcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBleHRuYW1lLCBpc0Fic29sdXRlLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7XG4gIE5leHRDb25maWcgYXMgQnVpbGRlck5leHRDb25maWcsXG4gIFdvcmtmbG93TWFuaWZlc3QsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgY2hva2lkYXIgZnJvbSAnY2hva2lkYXInO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIGFzIFByb2plY3ROZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCc7XG5pbXBvcnQgeyBjcmVhdGVXYXRjaElnbm9yZVByZWRpY2F0ZSB9IGZyb20gJy4vd2F0Y2gtaWdub3JlLmpzJztcbmltcG9ydCB7XG4gIGNsYXNzaWZ5UmVidWlsZCxcbiAgY3JlYXRlU291cmNlU25hcHNob3QsXG4gIHR5cGUgRmlsZUNoYW5nZXMsXG4gIGdldFJlbGV2YW50RmlsZXMsXG4gIHJlcGxhY2VTb3VyY2VTbmFwc2hvdHMsXG4gIHR5cGUgU291cmNlU25hcHNob3QsXG59IGZyb20gJy4vd2F0Y2gtcmVidWlsZC5qcyc7XG5cbmxldCBDYWNoZWROZXh0QnVpbGRlckVhZ2VyOiBhbnk7XG5jb25zdCBpbXBvcnRFc20gPSBuZXcgRnVuY3Rpb24oJ3NwZWNpZmllcicsICdyZXR1cm4gaW1wb3J0KHNwZWNpZmllciknKSBhcyA8VD4oXG4gIHNwZWNpZmllcjogc3RyaW5nXG4pID0+IFByb21pc2U8VD47XG5cbi8vIENyZWF0ZSB0aGUgZWFnZXIgTmV4dCBidWlsZGVyIGR5bmFtaWNhbGx5IGJ5IGV4dGVuZGluZyB0aGUgRVNNIEJhc2VCdWlsZGVyLlxuLy8gRXhwb3J0ZWQgYXMgZ2V0TmV4dEJ1aWxkZXJFYWdlcigpIHRvIGFsbG93IENvbW1vbkpTIG1vZHVsZXMgdG8gaW1wb3J0IGZyb21cbi8vIHRoZSBFU00gQHdvcmtmbG93L2J1aWxkZXJzIHBhY2thZ2UgdmlhIGR5bmFtaWMgaW1wb3J0IGF0IHJ1bnRpbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TmV4dEJ1aWxkZXJFYWdlcihcbiAgYnVpbGRlcnNNb2R1bGU/OiB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKVxuKSB7XG4gIGlmIChDYWNoZWROZXh0QnVpbGRlckVhZ2VyKSB7XG4gICAgcmV0dXJuIENhY2hlZE5leHRCdWlsZGVyRWFnZXI7XG4gIH1cblxuICBjb25zdCB7XG4gICAgQmFzZUJ1aWxkZXI6IEJhc2VCdWlsZGVyQ2xhc3MsXG4gICAgZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIsXG4gICAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyxcbiAgICBwYXJlbnRIYXNDaGlsZCxcbiAgfSA9IGJ1aWxkZXJzTW9kdWxlID8/XG4gIChhd2FpdCBpbXBvcnRFc208dHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJyk+KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSk7XG5cbiAgY2xhc3MgTmV4dEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlckNsYXNzIHtcbiAgICBwcm90ZWN0ZWQgZGVjbGFyZSBjb25maWc6IEJ1aWxkZXJOZXh0Q29uZmlnICYge1xuICAgICAgcGFnZUV4dGVuc2lvbnM6IE5vbk51bGxhYmxlPFByb2plY3ROZXh0Q29uZmlnWydwYWdlRXh0ZW5zaW9ucyddPjtcbiAgICAgIGRpc3REaXI6IHN0cmluZztcbiAgICB9O1xuXG4gICAgYXN5bmMgYnVpbGQoKSB7XG4gICAgICBjb25zdCBvdXRwdXREaXIgPSBhd2FpdCB0aGlzLmZpbmRBcHBEaXJlY3RvcnkoKTtcbiAgICAgIGNvbnN0IHdvcmtmbG93R2VuZXJhdGVkRGlyID0gam9pbihvdXRwdXREaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy92MScpO1xuXG4gICAgICAvLyBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yaWVzIGV4aXN0XG4gICAgICBhd2FpdCBta2Rpcih3b3JrZmxvd0dlbmVyYXRlZERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnLndhdGNoKSB7XG4gICAgICAgIC8vIFByb2R1Y3Rpb24gYnVpbGQgY2FjaGVzIG1heSBzdGlsbCBjb250YWluIHRoZSByZXRpcmVkIHN0ZXAgcm91dGUuXG4gICAgICAgIGF3YWl0IHJtKGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdzdGVwJyksIHtcbiAgICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICcuZ2l0aWdub3JlJyksICcqJyk7XG5cbiAgICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgIGNvbnN0IHRzY29uZmlnUGF0aCA9IGF3YWl0IHRoaXMuZmluZFRzQ29uZmlnUGF0aCgpO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgfTtcblxuICAgICAgLy8gVjI6IEJ1aWxkIGNvbWJpbmVkIHJvdXRlIChyZXBsYWNlcyBzZXBhcmF0ZSBzdGVwICsgZmxvdyByb3V0ZXMpXG4gICAgICBjb25zdCBjb21iaW5lZFJlc3VsdCA9IGF3YWl0IHRoaXMuYnVpbGRDb21iaW5lZEZ1bmN0aW9uKG9wdGlvbnMpO1xuICAgICAgYXdhaXQgdGhpcy5idWlsZFdlYmhvb2tSb3V0ZSh7IHdvcmtmbG93R2VuZXJhdGVkRGlyIH0pO1xuXG4gICAgICBjb25zdCB3cml0ZU1hbmlmZXN0ID0gYXN5bmMgKFxuICAgICAgICBzb3VyY2VNYW5pZmVzdDogV29ya2Zsb3dNYW5pZmVzdCB8IHVuZGVmaW5lZFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0ID0ge1xuICAgICAgICAgIHN0ZXBzOiB7IC4uLnNvdXJjZU1hbmlmZXN0Py5zdGVwcyB9LFxuICAgICAgICAgIHdvcmtmbG93czogeyAuLi5zb3VyY2VNYW5pZmVzdD8ud29ya2Zsb3dzIH0sXG4gICAgICAgICAgY2xhc3NlczogeyAuLi5zb3VyY2VNYW5pZmVzdD8uY2xhc3NlcyB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdyaXRlIG1hbmlmZXN0XG4gICAgICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdmbG93L3JvdXRlLmpzJyk7XG4gICAgICAgIGNvbnN0IG1hbmlmZXN0SnNvbiA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuaWZlc3Qoe1xuICAgICAgICAgIHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICAgICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgICAgIGlmICh0aGlzLnNob3VsZEV4cG9zZVB1YmxpY01hbmlmZXN0ICYmIG1hbmlmZXN0SnNvbikge1xuICAgICAgICAgIGNvbnN0IHB1YmxpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLndvcmtpbmdEaXIsXG4gICAgICAgICAgICAncHVibGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgbWtkaXIocHVibGljTWFuaWZlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihwdWJsaWNNYW5pZmVzdERpciwgJy5naXRpZ25vcmUnKSwgJyonKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgICAgICBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnbWFuaWZlc3QuanNvbicpLFxuICAgICAgICAgICAgam9pbihwdWJsaWNNYW5pZmVzdERpciwgJ21hbmlmZXN0Lmpzb24nKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QoY29tYmluZWRSZXN1bHQ/Lm1hbmlmZXN0KTtcblxuICAgICAgYXdhaXQgdGhpcy53cml0ZUZ1bmN0aW9uc0NvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgICBpZiAodGhpcy5jb25maWcud2F0Y2gpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHdhdGNoIG1vZGUgZm9yIGNvbWJpbmVkIGJ1bmRsZVxuICAgICAgICAvLyBGb3Igbm93LCBmYWxsIGJhY2sgdG8gZnVsbCByZWJ1aWxkIG9uIGZpbGUgY2hhbmdlc1xuICAgICAgICBpZiAoIWNvbWJpbmVkUmVzdWx0Py5pbnRlcmltQnVuZGxlQ3R4IHx8ICFjb21iaW5lZFJlc3VsdC5idW5kbGVGaW5hbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93IGJ1aWxkIGNvbnRleHQgaW4gd2F0Y2ggbW9kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcCByZWdpc3RyYXRpb25zIG1heSBiZSBlbWl0dGVkIGFzIHNvdXJjZSBpbXBvcnRzIHdpdGhvdXQgYW5cbiAgICAgICAgLy8gZXNidWlsZCBjb250ZXh0IHdoZW4gZXh0ZXJuYWxpemVOb25TdGVwcyBpcyBlbmFibGVkLlxuICAgICAgICBsZXQgc3RlcHNDdHggPSBjb21iaW5lZFJlc3VsdC5zdGVwc0NvbnRleHQ7XG4gICAgICAgIGxldCB3b3JrZmxvd3NDdHggPSB7XG4gICAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eDogY29tYmluZWRSZXN1bHQuaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgICBidW5kbGVGaW5hbDogY29tYmluZWRSZXN1bHQuYnVuZGxlRmluYWwsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkaXNjb3ZlcmVkRW50cmllcyA9IGNvbWJpbmVkUmVzdWx0LmRpc2NvdmVyZWRFbnRyaWVzO1xuICAgICAgICBsZXQgc3RlcHNNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LnN0ZXBzTWFuaWZlc3Q7XG4gICAgICAgIGxldCB3b3JrZmxvd3NNYW5pZmVzdCA9IGNvbWJpbmVkUmVzdWx0LndvcmtmbG93c01hbmlmZXN0O1xuICAgICAgICBjb25zdCBzdGVwc091dGZpbGUgPSBqb2luKFxuICAgICAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAgICdmbG93JyxcbiAgICAgICAgICAnX19zdGVwX3JlZ2lzdHJhdGlvbnMuanMnXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplUGF0aCA9IChwYXRobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgIChpc0Fic29sdXRlKHBhdGhuYW1lKVxuICAgICAgICAgICAgPyBwYXRobmFtZVxuICAgICAgICAgICAgOiByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsIHBhdGhuYW1lKVxuICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBjb25zdCBzb3VyY2VTbmFwc2hvdHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlU25hcHNob3Q+KCk7XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hhYmxlRXh0ZW5zaW9ucyA9IG5ldyBTZXQoW1xuICAgICAgICAgICcuanMnLFxuICAgICAgICAgICcuanN4JyxcbiAgICAgICAgICAnLnRzJyxcbiAgICAgICAgICAnLnRzeCcsXG4gICAgICAgICAgJy5tdHMnLFxuICAgICAgICAgICcuY3RzJyxcbiAgICAgICAgICAnLmNqcycsXG4gICAgICAgICAgJy5tanMnLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEdlbmVyYXRlZERpciA9IHdvcmtmbG93R2VuZXJhdGVkRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERpc3REaXIgPSBub3JtYWxpemVQYXRoKHRoaXMuY29uZmlnLmRpc3REaXIpO1xuXG4gICAgICAgIC8vIFBydW5lIHRoZSBkZXYgd2F0Y2ggc2V0IHRvIGtlZXAgY2hva2lkYXIgZnJvbSByZWdpc3RlcmluZyBhblxuICAgICAgICAvLyBmcy53YXRjaCBwZXIgZGlyZWN0b3J5IGFjcm9zcyB0aGUgd2hvbGUgcHJvamVjdCB0cmVlIChjaG9raWRhciA0XG4gICAgICAgIC8vIGRyb3BwZWQgZnNldmVudHMsIHNvIG9uIG1hY09TIHRoYXQgZXhoYXVzdHMgdGhlIGZkIGxpbWl0IC0+IEVNRklMRVxuICAgICAgICAvLyBvbiBsYXJnZSBtb25vcmVwb3MpLiBUaGlzIGhvbm9ycyBgLmdpdGlnbm9yZWAgYW5kIHRoZVxuICAgICAgICAvLyBXT1JLRkxPV19ERVZfV0FUQ0hfSUdOT1JFRF9QQVRIUyBlbnYgdmFyIGluIGFkZGl0aW9uIHRvIHRoZVxuICAgICAgICAvLyBidWlsdC1pbiBmcmFnbWVudHMuIFRoZSBnZW5lcmF0ZWQgd29ya2Zsb3cgZGlyIGlzIHBhc3NlZCBhcyBhblxuICAgICAgICAvLyBleHRyYSBmcmFnbWVudCBzbyBpdCBpcyBwcnVuZWQgcmVnYXJkbGVzcyBvZiBgLmdpdGlnbm9yZWAuXG4gICAgICAgIGNvbnN0IGlzSWdub3JlZFdhdGNoUGF0aCA9IGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlKHtcbiAgICAgICAgICB3b3JraW5nRGlyOiB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgIHByb2plY3RSb290OiB0aGlzLnRyYW5zZm9ybVByb2plY3RSb290LFxuICAgICAgICAgIGV4dHJhRnJhZ21lbnRzOiBbbm9ybWFsaXplZEdlbmVyYXRlZERpcl0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhhc0lnbm9yZWRQYXRoRnJhZ21lbnQgPSAobm9ybWFsaXplZFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoID09PSBub3JtYWxpemVkRGlzdERpciB8fFxuICAgICAgICAgICAgbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChgJHtub3JtYWxpemVkRGlzdERpcn0vYClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXNJZ25vcmVkV2F0Y2hQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcmVidWlsZFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgY29uc3QgZW5xdWV1ZSA9ICh0YXNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XG4gICAgICAgICAgcmVidWlsZFF1ZXVlID0gcmVidWlsZFF1ZXVlLnRoZW4odGFzaykuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcHJvY2VzcyBmaWxlIGNoYW5nZScsIGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVidWlsZFF1ZXVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlYWRTb3VyY2VTbmFwc2hvdCA9IChmaWxlOiBzdHJpbmcpID0+XG4gICAgICAgICAgY3JlYXRlU291cmNlU25hcHNob3QoeyBmaWxlLCBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlZnJlc2hTb3VyY2VTbmFwc2hvdHMgPSAoKSA9PlxuICAgICAgICAgIHJlcGxhY2VTb3VyY2VTbmFwc2hvdHMoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICBub3JtYWxpemVQYXRoLFxuICAgICAgICAgICAgcmVhZFNuYXBzaG90OiByZWFkU291cmNlU25hcHNob3QsXG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbWVyZ2VDb21iaW5lZE1hbmlmZXN0ID0gKFxuICAgICAgICAgIG5leHRTdGVwc01hbmlmZXN0OiBXb3JrZmxvd01hbmlmZXN0XG4gICAgICAgICk6IFdvcmtmbG93TWFuaWZlc3QgPT4gKHtcbiAgICAgICAgICAuLi5uZXh0U3RlcHNNYW5pZmVzdCxcbiAgICAgICAgICB3b3JrZmxvd3M6IHtcbiAgICAgICAgICAgIC4uLm5leHRTdGVwc01hbmlmZXN0LndvcmtmbG93cyxcbiAgICAgICAgICAgIC4uLndvcmtmbG93c01hbmlmZXN0LndvcmtmbG93cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgICAgIC4uLm5leHRTdGVwc01hbmlmZXN0LmNsYXNzZXMsXG4gICAgICAgICAgICAuLi53b3JrZmxvd3NNYW5pZmVzdC5jbGFzc2VzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhvdFJlYnVpbGQgPSBhc3luYyAocmVmcmVzaFN0ZXBSZWdpc3RyYXRpb25zOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucykge1xuICAgICAgICAgICAgaWYgKHN0ZXBzQ3R4KSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN0ZXBzQ3R4LnJlYnVpbGQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0ZXBzTWFuaWZlc3QgPSBhd2FpdCB0aGlzLmNyZWF0ZVN0ZXBTb3VyY2VSZWdpc3RyYXRpb25GaWxlKHtcbiAgICAgICAgICAgICAgICBpbnB1dEZpbGVzOiBvcHRpb25zLmlucHV0RmlsZXMsXG4gICAgICAgICAgICAgICAgb3V0ZmlsZTogc3RlcHNPdXRmaWxlLFxuICAgICAgICAgICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dSZXN1bHQgPSBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5yZWJ1aWxkKCk7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dPdXRwdXQgPSB3b3JrZmxvd1Jlc3VsdC5vdXRwdXRGaWxlcz8uWzBdPy50ZXh0O1xuICAgICAgICAgIGlmICghd29ya2Zsb3dPdXRwdXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0ludmFyaWFudDogZXhwZWN0ZWQgd29ya2Zsb3cgb3V0cHV0IGZyb20gaG90IHJlYnVpbGQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHdvcmtmbG93c0N0eC5idW5kbGVGaW5hbCh3b3JrZmxvd091dHB1dCk7XG4gICAgICAgICAgYXdhaXQgd3JpdGVNYW5pZmVzdChtZXJnZUNvbWJpbmVkTWFuaWZlc3Qoc3RlcHNNYW5pZmVzdCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGZ1bGxSZWJ1aWxkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2xlYXJEaXNjb3ZlcmVkRW50cmllc0NhY2hlKCk7XG4gICAgICAgICAgY29uc3QgbmV3SW5wdXRGaWxlcyA9IGF3YWl0IHRoaXMuZ2V0SW5wdXRGaWxlcygpO1xuICAgICAgICAgIG9wdGlvbnMuaW5wdXRGaWxlcyA9IG5ld0lucHV0RmlsZXM7XG5cbiAgICAgICAgICBhd2FpdCBzdGVwc0N0eD8uZGlzcG9zZSgpO1xuICAgICAgICAgIGF3YWl0IHdvcmtmbG93c0N0eC5pbnRlcmltQnVuZGxlQ3R4LmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGNvbnN0IG5ld0NvbWJpbmVkID0gYXdhaXQgdGhpcy5idWlsZENvbWJpbmVkRnVuY3Rpb24ob3B0aW9ucyk7XG4gICAgICAgICAgc3RlcHNDdHggPSBuZXdDb21iaW5lZC5zdGVwc0NvbnRleHQ7XG4gICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMgPSBuZXdDb21iaW5lZC5kaXNjb3ZlcmVkRW50cmllcztcbiAgICAgICAgICBzdGVwc01hbmlmZXN0ID0gbmV3Q29tYmluZWQuc3RlcHNNYW5pZmVzdDtcbiAgICAgICAgICB3b3JrZmxvd3NNYW5pZmVzdCA9IG5ld0NvbWJpbmVkLndvcmtmbG93c01hbmlmZXN0O1xuXG4gICAgICAgICAgaWYgKCFuZXdDb21iaW5lZD8uaW50ZXJpbUJ1bmRsZUN0eCB8fCAhbmV3Q29tYmluZWQ/LmJ1bmRsZUZpbmFsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHdvcmtmbG93cyBidW5kbGUgY29udGV4dCBhZnRlciByZWJ1aWxkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya2Zsb3dzQ3R4ID0ge1xuICAgICAgICAgICAgaW50ZXJpbUJ1bmRsZUN0eDogbmV3Q29tYmluZWQuaW50ZXJpbUJ1bmRsZUN0eCxcbiAgICAgICAgICAgIGJ1bmRsZUZpbmFsOiBuZXdDb21iaW5lZC5idW5kbGVGaW5hbCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYXdhaXQgd3JpdGVNYW5pZmVzdChuZXdDb21iaW5lZC5tYW5pZmVzdCk7XG4gICAgICAgICAgYXdhaXQgcmVmcmVzaFNvdXJjZVNuYXBzaG90cygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGlzV2F0Y2hhYmxlRmlsZSA9IChwYXRoOiBzdHJpbmcpID0+XG4gICAgICAgICAgd2F0Y2hhYmxlRXh0ZW5zaW9ucy5oYXMoZXh0bmFtZShwYXRoKSk7XG5cbiAgICAgICAgY29uc3QgcmVhZEtub3duRmlsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICBjb25zdCBhbGlhc2VzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgICBjb25zdCByZWxldmFudEZpbGVzID0gZ2V0UmVsZXZhbnRGaWxlcyh7XG4gICAgICAgICAgICBkaXNjb3ZlcmVkRW50cmllcyxcbiAgICAgICAgICAgIGlucHV0RmlsZXM6IG9wdGlvbnMuaW5wdXRGaWxlcyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBhZGRLbm93bkZpbGUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWxGaWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVhbEZpbGVQYXRoID0gbm9ybWFsaXplUGF0aChhd2FpdCByZWFscGF0aChmaWxlUGF0aCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gcmVsZXZhbnRGaWxlcy5oYXMocmVhbEZpbGVQYXRoKVxuICAgICAgICAgICAgICA/IHJlYWxGaWxlUGF0aFxuICAgICAgICAgICAgICA6IGZpbGVQYXRoO1xuICAgICAgICAgICAgZmlsZXMuYWRkKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgICAgYWxpYXNlcy5zZXQoZmlsZVBhdGgsIGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgICAgYWxpYXNlcy5zZXQocmVhbEZpbGVQYXRoLCBjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxQYXRoO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB2aXNpdCA9IGFzeW5jIChkaXJlY3Rvcnk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgbGV0IGRpcmVudHM6IERpcmVudDxzdHJpbmc+W107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBkaXJlbnRzID0gYXdhaXQgcmVhZGRpcihkaXJlY3RvcnksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBkaXJlbnRzLm1hcChhc3luYyAoZGlyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBub3JtYWxpemVQYXRoKGpvaW4oZGlyZWN0b3J5LCBkaXJlbnQubmFtZSkpO1xuICAgICAgICAgICAgICAgIGlmIChoYXNJZ25vcmVkUGF0aEZyYWdtZW50KGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgdmlzaXQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBzdGF0czogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBzdGF0Pj47XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHN0YXRzID0gYXdhaXQgc3RhdChmaWxlUGF0aCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHZpc2l0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRzLmlzRmlsZSgpIHx8ICFpc1dhdGNoYWJsZUZpbGUoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXdhaXQgYWRkS25vd25GaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGF3YWl0IHZpc2l0KHRoaXMuY29uZmlnLndvcmtpbmdEaXIpO1xuICAgICAgICAgIHJldHVybiB7IGZpbGVzLCBhbGlhc2VzLCBhZGRLbm93bkZpbGUgfTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtZXJnZUZpbGVDaGFuZ2VzID0gKFxuICAgICAgICAgIGxlZnQ6IEZpbGVDaGFuZ2VzLFxuICAgICAgICAgIHJpZ2h0OiBGaWxlQ2hhbmdlc1xuICAgICAgICApOiBGaWxlQ2hhbmdlcyA9PiAoe1xuICAgICAgICAgIGFkZGVkRmlsZXM6IHVuaXF1ZShbLi4ubGVmdC5hZGRlZEZpbGVzLCAuLi5yaWdodC5hZGRlZEZpbGVzXSksXG4gICAgICAgICAgbW9kaWZpZWRGaWxlczogdW5pcXVlKFtcbiAgICAgICAgICAgIC4uLmxlZnQubW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICAgIC4uLnJpZ2h0Lm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgXSksXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzOiB1bmlxdWUoWy4uLmxlZnQucmVtb3ZlZEZpbGVzLCAuLi5yaWdodC5yZW1vdmVkRmlsZXNdKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlID0gKHBhdGhzOiBzdHJpbmdbXSkgPT4gWy4uLm5ldyBTZXQocGF0aHMpXTtcblxuICAgICAgICBjb25zdCBjbGFzc2lmeUZpbGVDaGFuZ2VzID0gKHtcbiAgICAgICAgICBjaGFuZ2VkRmlsZXMsXG4gICAgICAgICAga25vd25GaWxlcyxcbiAgICAgICAgICByZW1vdmVkRmlsZXMsXG4gICAgICAgIH06IHtcbiAgICAgICAgICBjaGFuZ2VkRmlsZXM6IHN0cmluZ1tdO1xuICAgICAgICAgIGtub3duRmlsZXM6IFNldDxzdHJpbmc+O1xuICAgICAgICAgIHJlbW92ZWRGaWxlczogc3RyaW5nW107XG4gICAgICAgIH0pOiBGaWxlQ2hhbmdlcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWRkZWRGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBtb2RpZmllZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHVuaXF1ZShjaGFuZ2VkRmlsZXMpKSB7XG4gICAgICAgICAgICBpZiAoa25vd25GaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICAgICAgbW9kaWZpZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgICBrbm93bkZpbGVzLmFkZChmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgcmVtb3ZlZEZpbGVzKSB7XG4gICAgICAgICAgICBrbm93bkZpbGVzLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkZWRGaWxlcyxcbiAgICAgICAgICAgIG1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IHVuaXF1ZShyZW1vdmVkRmlsZXMpLFxuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFzRmlsZUNoYW5nZXMgPSAoe1xuICAgICAgICAgIGFkZGVkRmlsZXMsXG4gICAgICAgICAgbW9kaWZpZWRGaWxlcyxcbiAgICAgICAgICByZW1vdmVkRmlsZXMsXG4gICAgICAgIH06IEZpbGVDaGFuZ2VzKSA9PlxuICAgICAgICAgIGFkZGVkRmlsZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIG1vZGlmaWVkRmlsZXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHJlbW92ZWRGaWxlcy5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBsb2dEZXZIbXIgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LldPUktGTE9XX0RFVl9ITVJfTE9HUyA9PT0gJzEnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyguLi5hcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgcmVmcmVzaFNvdXJjZVNuYXBzaG90cygpO1xuICAgICAgICBsZXQge1xuICAgICAgICAgIGZpbGVzOiBrbm93bkZpbGVzLFxuICAgICAgICAgIGFsaWFzZXM6IGtub3duRmlsZUFsaWFzZXMsXG4gICAgICAgICAgYWRkS25vd25GaWxlOiByZW1lbWJlcktub3duRmlsZSxcbiAgICAgICAgfSA9IGF3YWl0IHJlYWRLbm93bkZpbGVzKCk7XG5cbiAgICAgICAgY29uc3QgcmVmcmVzaEtub3duRmlsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dEtub3duID0gYXdhaXQgcmVhZEtub3duRmlsZXMoKTtcbiAgICAgICAgICBrbm93bkZpbGVzID0gbmV4dEtub3duLmZpbGVzO1xuICAgICAgICAgIGtub3duRmlsZUFsaWFzZXMgPSBuZXh0S25vd24uYWxpYXNlcztcbiAgICAgICAgICByZW1lbWJlcktub3duRmlsZSA9IG5leHRLbm93bi5hZGRLbm93bkZpbGU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc0ZpbGVDaGFuZ2VzID0gYXN5bmMgKGZpbGVDaGFuZ2VzOiBGaWxlQ2hhbmdlcykgPT4ge1xuICAgICAgICAgIGlmICghaGFzRmlsZUNoYW5nZXMoZmlsZUNoYW5nZXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVjaXNpb24gPSBhd2FpdCBjbGFzc2lmeVJlYnVpbGQoe1xuICAgICAgICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgICAgICAgICBmaWxlQ2hhbmdlcyxcbiAgICAgICAgICAgIGlucHV0RmlsZXM6IG9wdGlvbnMuaW5wdXRGaWxlcyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgsXG4gICAgICAgICAgICBwYXJlbnRIYXNDaGlsZCxcbiAgICAgICAgICAgIHJlYWRTbmFwc2hvdDogcmVhZFNvdXJjZVNuYXBzaG90LFxuICAgICAgICAgICAgc291cmNlU25hcHNob3RzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChkZWNpc2lvbi5raW5kID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIGxvZ0Rldkhtcignd29ya2Zsb3cgZGV2IGhtcjogc2tpcCcpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbZmlsZSwgc25hcHNob3RdIG9mIGRlY2lzaW9uLnNuYXBzaG90cyB8fCBbXSkge1xuICAgICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMuc2V0KGZpbGUsIHNuYXBzaG90KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRlY2lzaW9uLmtpbmQgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgbG9nRGV2SG1yKCd3b3JrZmxvdyBkZXYgaG1yOiBmdWxsIHJlZGlzY292ZXJ5Jyk7XG4gICAgICAgICAgICBhd2FpdCBmdWxsUmVidWlsZCgpO1xuICAgICAgICAgICAgYXdhaXQgcmVmcmVzaEtub3duRmlsZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dEZXZIbXIoXG4gICAgICAgICAgICBgd29ya2Zsb3cgZGV2IGhtcjogaG90IHJlYnVpbGQke2RlY2lzaW9uLnJlZnJlc2hTdGVwUmVnaXN0cmF0aW9ucyA/ICcgd2l0aCBzdGVwIHJlZ2lzdHJhdGlvbiByZWZyZXNoJyA6ICcnfWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IGhvdFJlYnVpbGQoZGVjaXNpb24ucmVmcmVzaFN0ZXBSZWdpc3RyYXRpb25zKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtmaWxlLCBzbmFwc2hvdF0gb2YgZGVjaXNpb24uc25hcHNob3RzKSB7XG4gICAgICAgICAgICBzb3VyY2VTbmFwc2hvdHMuc2V0KGZpbGUsIHNuYXBzaG90KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHBlbmRpbmdGaWxlQ2hhbmdlczogRmlsZUNoYW5nZXMgPSB7XG4gICAgICAgICAgYWRkZWRGaWxlczogW10sXG4gICAgICAgICAgbW9kaWZpZWRGaWxlczogW10sXG4gICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZsdXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IHNjaGVkdWxlRmlsZUNoYW5nZXMgPSAoZmlsZUNoYW5nZXM6IEZpbGVDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgcGVuZGluZ0ZpbGVDaGFuZ2VzID0gbWVyZ2VGaWxlQ2hhbmdlcyhcbiAgICAgICAgICAgIHBlbmRpbmdGaWxlQ2hhbmdlcyxcbiAgICAgICAgICAgIGZpbGVDaGFuZ2VzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZmx1c2hUaW1lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IHBlbmRpbmdGaWxlQ2hhbmdlcztcbiAgICAgICAgICAgIHBlbmRpbmdGaWxlQ2hhbmdlcyA9IHtcbiAgICAgICAgICAgICAgYWRkZWRGaWxlczogW10sXG4gICAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IFtdLFxuICAgICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZsdXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlbnF1ZXVlKCgpID0+IHByb2Nlc3NGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcykpO1xuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXNvbHZlRXhpc3RpbmdFdmVudFBhdGggPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qga25vd25QYXRoID0ga25vd25GaWxlQWxpYXNlcy5nZXQobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGlmIChrbm93blBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBrbm93blBhdGg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWxGaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoYXdhaXQgcmVhbHBhdGgobm9ybWFsaXplZFBhdGgpKTtcbiAgICAgICAgICAgIHJldHVybiBrbm93bkZpbGVBbGlhc2VzLmdldChyZWFsRmlsZVBhdGgpID8/IG5vcm1hbGl6ZWRQYXRoO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYW5kbGVGaWxlQWRkZWQgPSBhc3luYyAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdQYXRoID0gYXdhaXQgcmVzb2x2ZUV4aXN0aW5nRXZlbnRQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICBjb25zdCB3YXNLbm93biA9IGV4aXN0aW5nUGF0aCA/IGtub3duRmlsZXMuaGFzKGV4aXN0aW5nUGF0aCkgOiBmYWxzZTtcbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gYXdhaXQgcmVtZW1iZXJLbm93bkZpbGUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIGtub3duRmlsZXMuYWRkKGNhbm9uaWNhbFBhdGgpO1xuICAgICAgICAgIHNjaGVkdWxlRmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgYWRkZWRGaWxlczogd2FzS25vd24gPyBbXSA6IFtjYW5vbmljYWxQYXRoXSxcbiAgICAgICAgICAgIG1vZGlmaWVkRmlsZXM6IHdhc0tub3duID8gW2Nhbm9uaWNhbFBhdGhdIDogW10sXG4gICAgICAgICAgICByZW1vdmVkRmlsZXM6IFtdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2VkID0gYXN5bmMgKHBhdGhuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5vbmljYWxQYXRoID0gYXdhaXQgcmVzb2x2ZUV4aXN0aW5nRXZlbnRQYXRoKHBhdGhuYW1lKTtcbiAgICAgICAgICBpZiAoIWNhbm9uaWNhbFBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmaWxlQ2hhbmdlcyA9IGNsYXNzaWZ5RmlsZUNoYW5nZXMoe1xuICAgICAgICAgICAgY2hhbmdlZEZpbGVzOiBbY2Fub25pY2FsUGF0aF0sXG4gICAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIWtub3duRmlsZUFsaWFzZXMuaGFzKGNhbm9uaWNhbFBhdGgpKSB7XG4gICAgICAgICAgICBhd2FpdCByZW1lbWJlcktub3duRmlsZShjYW5vbmljYWxQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2NoZWR1bGVGaWxlQ2hhbmdlcyhmaWxlQ2hhbmdlcyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlRmlsZVJlbW92ZWQgPSAocGF0aG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRobmFtZSk7XG4gICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUobm9ybWFsaXplZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2Fub25pY2FsUGF0aCA9XG4gICAgICAgICAgICBrbm93bkZpbGVBbGlhc2VzLmdldChub3JtYWxpemVkUGF0aCkgPz8gbm9ybWFsaXplZFBhdGg7XG4gICAgICAgICAgY29uc3QgZmlsZUNoYW5nZXMgPSBjbGFzc2lmeUZpbGVDaGFuZ2VzKHtcbiAgICAgICAgICAgIGNoYW5nZWRGaWxlczogW10sXG4gICAgICAgICAgICBrbm93bkZpbGVzLFxuICAgICAgICAgICAgcmVtb3ZlZEZpbGVzOiBbY2Fub25pY2FsUGF0aF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAga25vd25GaWxlQWxpYXNlcy5kZWxldGUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgIHNjaGVkdWxlRmlsZUNoYW5nZXMoZmlsZUNoYW5nZXMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHdhdGNoZXIgPSBjaG9raWRhci53YXRjaCh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCB7XG4gICAgICAgICAgaWdub3JlSW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgICBmb2xsb3dTeW1saW5rczogdHJ1ZSxcbiAgICAgICAgICBpZ25vcmVkOiAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChTdHJpbmcocGF0aG5hbWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUobm9ybWFsaXplZFBhdGgpO1xuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhd2F0Y2hhYmxlRXh0ZW5zaW9ucy5oYXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYXNJZ25vcmVkUGF0aEZyYWdtZW50KG5vcm1hbGl6ZWRQYXRoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB3YXRjaGVyLm9uKCdhZGQnLCAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICB2b2lkIGhhbmRsZUZpbGVBZGRlZChwYXRobmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB3YXRjaGVyLm9uKCdjaGFuZ2UnLCAocGF0aG5hbWUpID0+IHtcbiAgICAgICAgICB2b2lkIGhhbmRsZUZpbGVDaGFuZ2VkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ3VubGluaycsIChwYXRobmFtZSkgPT4ge1xuICAgICAgICAgIGhhbmRsZUZpbGVSZW1vdmVkKHBhdGhuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdhdGNoZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignV29ya2Zsb3cgZGV2IHdhdGNoZXIgZXJyb3InLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICB3YXRjaGVyLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICBsb2dEZXZIbXIoJ3dvcmtmbG93IGRldiBobXI6IHJlYWR5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRJbnB1dEZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCBzdXBlci5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICByZXR1cm4gaW5wdXRGaWxlcy5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSByZWxhdGl2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCBmaWxlKS5yZXBsYWNlQWxsKFxuICAgICAgICAgICdcXFxcJyxcbiAgICAgICAgICAnLydcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBNYXRjaCBBcHAgUm91dGVyIHJvdXRlLCBwYWdlLCBhbmQgbGF5b3V0IGVudHJ5cG9pbnRzIGluIGFwcC8gb3Igc3JjL2FwcC8uXG4gICAgICAgIGlmICgvXig/OmFwcHxzcmNcXC9hcHApXFwvKD86LipcXC8pPyg/OnJvdXRlfHBhZ2V8bGF5b3V0KVxcLi8udGVzdChlbnRyeSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hdGNoIGV2ZXJ5IFBhZ2VzIFJvdXRlciBlbnRyeXBvaW50IGluIHBhZ2VzLyBvciBzcmMvcGFnZXMvLlxuICAgICAgICBpZiAoL14oPzpwYWdlc3xzcmNcXC9wYWdlcylcXC8vLnRlc3QoZW50cnkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYXRjaCBOZXh0LmpzIHJvb3QgZW50cnlwb2ludHMgYXQgdGhlIHByb2plY3Qgcm9vdCBvciB1bmRlciBzcmMvLlxuICAgICAgICByZXR1cm4gWydpbnN0cnVtZW50YXRpb24nLCAnbWlkZGxld2FyZScsICdwcm94eSddLnNvbWUoKG5hbWUpID0+XG4gICAgICAgICAgdGhpcy5jb25maWcucGFnZUV4dGVuc2lvbnMuc29tZShcbiAgICAgICAgICAgIChleHRlbnNpb24pID0+XG4gICAgICAgICAgICAgIGVudHJ5ID09PSBgJHtuYW1lfS4ke2V4dGVuc2lvbn1gIHx8XG4gICAgICAgICAgICAgIGVudHJ5ID09PSBgc3JjLyR7bmFtZX0uJHtleHRlbnNpb259YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyOiBzdHJpbmcpIHtcbiAgICAgIC8vIHdlIGRvbid0IHJ1biB0aGlzIGluIGRldmVsb3BtZW50IG1vZGUgYXMgaXQncyBub3QgbmVlZGVkXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWMiBjb21iaW5lZCBjb25maWc6IHNpbmdsZSB0cmlnZ2VyIGhhbmRsZXMgYm90aCB3b3JrZmxvdyBhbmQgc3RlcCBleGVjdXRpb24uXG4gICAgICAvLyBUaGUgc3RlcCByb3V0ZSBubyBsb25nZXIgbmVlZHMgaXRzIG93biB0cmlnZ2VyIHNpbmNlIHN0ZXBzIGFyZSBleGVjdXRlZFxuICAgICAgLy8gaW5saW5lIGJ5IHRoZSBjb21iaW5lZCBoYW5kbGVyIG9yIHF1ZXVlZCBiYWNrIHRvIF9fd2tmX3dvcmtmbG93Xyogd2l0aCBzdGVwSWQuXG4gICAgICBjb25zdCBnZW5lcmF0ZWRDb25maWcgPSB7XG4gICAgICAgIHZlcnNpb246ICcwJyxcbiAgICAgICAgd29ya2Zsb3dzOiB7XG4gICAgICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzOiBbZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIoKV0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICAgIGpvaW4ob3V0cHV0RGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEvY29uZmlnLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZ2VuZXJhdGVkQ29uZmlnLCBudWxsLCAyKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWMjogQnVpbGQgY29tYmluZWQgcm91dGUgdGhhdCBoYW5kbGVzIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRDb21iaW5lZEZ1bmN0aW9uKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICB9OiB7XG4gICAgICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyOiBzdHJpbmc7XG4gICAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gICAgfSkge1xuICAgICAgY29uc3QgZmxvd1JvdXRlRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cnKTtcbiAgICAgIGF3YWl0IG1rZGlyKGZsb3dSb3V0ZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgICAgZm9ybWF0OiAnZXNtJyxcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgc3RlcHNPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJyksXG4gICAgICAgIGZsb3dPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ3JvdXRlLmpzJyksXG4gICAgICAgIGJ1bmRsZUZpbmFsT3V0cHV0OiBmYWxzZSxcbiAgICAgICAgZXh0ZXJuYWxpemVOb25TdGVwczogdHJ1ZSxcbiAgICAgICAgc291cmNlU3RlcFJlZ2lzdHJhdGlvbkltcG9ydHM6IHRydWUsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRXZWJob29rUm91dGUoe1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgfToge1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB3ZWJob29rUm91dGVGaWxlID0gam9pbihcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICd3ZWJob29rL1t0b2tlbl0vcm91dGUuanMnXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVXZWJob29rQnVuZGxlKHtcbiAgICAgICAgb3V0ZmlsZTogd2ViaG9va1JvdXRlRmlsZSxcbiAgICAgICAgYnVuZGxlOiBmYWxzZSwgLy8gTmV4dC5qcyBkb2Vzbid0IG5lZWQgYnVuZGxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZEFwcERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgYXBwRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnYXBwJyk7XG4gICAgICBjb25zdCBzcmNBcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdzcmMvYXBwJyk7XG4gICAgICBjb25zdCBwYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3BhZ2VzJyk7XG4gICAgICBjb25zdCBzcmNQYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9wYWdlcycpO1xuXG4gICAgICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgYSBwYXRoIGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gYXN5bmMgKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgICAgICAgIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5OiAke3BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhIGRpcmVjdG9yeScpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIGFwcCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3RvcnkoYXBwRGlyKSkge1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBzcmMvYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShzcmNBcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGFwcCBkaXJlY3RvcnkgZXhpc3RzLCBjaGVjayBmb3IgcGFnZXMgZGlyZWN0b3J5IGFuZCBjcmVhdGUgYXBwIG5leHQgdG8gaXRcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYWdlc0RpcikpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFwcCBkaXJlY3RvcnkgbmV4dCB0byBwYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoYXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIGFwcERpcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY1BhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgc3JjL2FwcCBkaXJlY3RvcnkgbmV4dCB0byBzcmMvcGFnZXMgZGlyZWN0b3J5XG4gICAgICAgIGF3YWl0IG1rZGlyKHNyY0FwcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIE5leHQuanMgYXBwIG9yIHBhZ2VzIGRpcmVjdG9yeS4gRXhwZWN0ZWQgb25lIG9mOiBcImFwcFwiLCBcInNyYy9hcHBcIiwgXCJwYWdlc1wiLCBvciBcInNyYy9wYWdlc1wiIHRvIGV4aXN0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlciA9IE5leHRCdWlsZGVyO1xuICByZXR1cm4gTmV4dEJ1aWxkZXI7XG59XG4iXX0=
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AA4TvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;KACjE,CAAC;CACE,IAkBJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBAkOrC"}
|
package/dist/index.js
CHANGED
|
@@ -54,14 +54,6 @@ const VERCEL_WORLD_SERVER_EXTERNAL_PACKAGES = [
|
|
|
54
54
|
VERCEL_WORLD_PACKAGE,
|
|
55
55
|
...VERCEL_WORLD_DEPENDENCY_PACKAGES,
|
|
56
56
|
];
|
|
57
|
-
const WORKFLOW_SERVER_TRANSPILE_PACKAGES = [
|
|
58
|
-
'workflow',
|
|
59
|
-
'@workflow/core',
|
|
60
|
-
'@workflow/serde',
|
|
61
|
-
'@workflow/errors',
|
|
62
|
-
'@workflow/utils',
|
|
63
|
-
'@workflow/ai',
|
|
64
|
-
];
|
|
65
57
|
const useWorkflowPattern = /^\s*(['"])use workflow\1;?\s*$/m;
|
|
66
58
|
const useStepPattern = /^\s*(['"])use step\1;?\s*$/m;
|
|
67
59
|
const workflowSerdeImportPattern = /from\s+(['"])@workflow\/serde\1/;
|
|
@@ -276,16 +268,21 @@ function registerWorkflowDiagnosticsManifestCopy(metadata) {
|
|
|
276
268
|
globalWithMarker[marker].push(metadata);
|
|
277
269
|
}
|
|
278
270
|
function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
271
|
+
if (!process.env.VERCEL_DEPLOYMENT_ID) {
|
|
272
|
+
if (!process.env.WORKFLOW_TARGET_WORLD) {
|
|
273
|
+
process.env.WORKFLOW_TARGET_WORLD = 'local';
|
|
274
|
+
process.env.WORKFLOW_LOCAL_DATA_DIR = '.next/workflow-data';
|
|
275
|
+
}
|
|
284
276
|
const maybePort = workflows?.local?.port;
|
|
285
277
|
if (maybePort) {
|
|
286
278
|
process.env.PORT = maybePort.toString();
|
|
287
279
|
}
|
|
288
280
|
}
|
|
281
|
+
else {
|
|
282
|
+
if (!process.env.WORKFLOW_TARGET_WORLD) {
|
|
283
|
+
process.env.WORKFLOW_TARGET_WORLD = 'vercel';
|
|
284
|
+
}
|
|
285
|
+
}
|
|
289
286
|
return async function buildConfig(phase, ctx) {
|
|
290
287
|
if (phase === 'phase-development-server' ||
|
|
291
288
|
phase === 'phase-production-build') {
|
|
@@ -305,19 +302,6 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
305
302
|
nextConfig = Object.assign({}, nextConfig);
|
|
306
303
|
const workflowBasePath = nextConfig.basePath;
|
|
307
304
|
setWorkflowBasePath(workflowBasePath);
|
|
308
|
-
nextConfig.env = {
|
|
309
|
-
...nextConfig.env,
|
|
310
|
-
WORKFLOW_TARGET_WORLD: workflowTargetWorld,
|
|
311
|
-
};
|
|
312
|
-
const workingDir = process.cwd();
|
|
313
|
-
const workflowTargetWorldWebpackAlias = (0, builders_1.resolveWorkflowTargetWorldAlias)({
|
|
314
|
-
workingDir,
|
|
315
|
-
targetWorld: workflowTargetWorld,
|
|
316
|
-
});
|
|
317
|
-
const workflowTargetWorldIsPath = (0, builders_1.isWorkflowTargetWorldPath)(workflowTargetWorld);
|
|
318
|
-
const workflowTargetWorldTranspilePackages = workflowTargetWorld === VERCEL_WORLD_PACKAGE || workflowTargetWorldIsPath
|
|
319
|
-
? []
|
|
320
|
-
: [workflowTargetWorld];
|
|
321
305
|
nextConfig.serverExternalPackages = [
|
|
322
306
|
...new Set([
|
|
323
307
|
...(nextConfig.serverExternalPackages || []),
|
|
@@ -327,13 +311,6 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
327
311
|
...VERCEL_WORLD_SERVER_EXTERNAL_PACKAGES,
|
|
328
312
|
]),
|
|
329
313
|
];
|
|
330
|
-
nextConfig.transpilePackages = [
|
|
331
|
-
...new Set([
|
|
332
|
-
...(nextConfig.transpilePackages || []),
|
|
333
|
-
...WORKFLOW_SERVER_TRANSPILE_PACKAGES,
|
|
334
|
-
...workflowTargetWorldTranspilePackages,
|
|
335
|
-
]),
|
|
336
|
-
];
|
|
337
314
|
const existingCompiler = nextConfig.compiler ?? {};
|
|
338
315
|
const existingRunAfterProductionCompile = existingCompiler.runAfterProductionCompile;
|
|
339
316
|
const configuredServerExternalPackages = Array.isArray(nextConfig.serverExternalPackages)
|
|
@@ -371,13 +348,8 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
371
348
|
if (!nextConfig.turbopack.rules) {
|
|
372
349
|
nextConfig.turbopack.rules = {};
|
|
373
350
|
}
|
|
374
|
-
nextConfig.turbopack.resolveAlias = {
|
|
375
|
-
...(nextConfig.turbopack.resolveAlias || {}),
|
|
376
|
-
[builders_1.WORKFLOW_WORLD_TARGET_MODULE]: workflowTargetWorldIsPath
|
|
377
|
-
? workflowTargetWorldWebpackAlias
|
|
378
|
-
: workflowTargetWorld,
|
|
379
|
-
};
|
|
380
351
|
const existingRules = nextConfig.turbopack.rules;
|
|
352
|
+
const workingDir = process.cwd();
|
|
381
353
|
const nextVersion = resolveNextVersion(workingDir);
|
|
382
354
|
const configuredProjectRoot = nextConfig.outputFileTracingRoot ?? nextConfig.turbopack?.root;
|
|
383
355
|
const projectRoot = configuredProjectRoot
|
|
@@ -459,7 +431,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
459
431
|
// Match files with workflow directives or custom serialization patterns
|
|
460
432
|
// Uses backreferences (\2, \3) to ensure matching quote types
|
|
461
433
|
{
|
|
462
|
-
content: /(use workflow|use step
|
|
434
|
+
content: /(use workflow|use step|from\s+(['"])@workflow\/serde\2|Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\3\s*\))/,
|
|
463
435
|
},
|
|
464
436
|
],
|
|
465
437
|
},
|
|
@@ -471,10 +443,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
471
443
|
// configure the loader for webpack
|
|
472
444
|
const existingWebpackModify = nextConfig.webpack;
|
|
473
445
|
nextConfig.webpack = (...args) => {
|
|
474
|
-
|
|
475
|
-
webpackConfig = existingWebpackModify
|
|
476
|
-
? (existingWebpackModify(...args) ?? webpackConfig)
|
|
477
|
-
: webpackConfig;
|
|
446
|
+
const [webpackConfig] = args;
|
|
478
447
|
if (!webpackConfig.module) {
|
|
479
448
|
webpackConfig.module = {};
|
|
480
449
|
}
|
|
@@ -487,24 +456,9 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
487
456
|
test: /.*\.(mjs|cjs|cts|ts|tsx|js|jsx)$/,
|
|
488
457
|
loader: loaderPath,
|
|
489
458
|
});
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
webpackConfig.resolve.alias = [
|
|
494
|
-
...existingAlias,
|
|
495
|
-
{
|
|
496
|
-
name: builders_1.WORKFLOW_WORLD_TARGET_MODULE,
|
|
497
|
-
alias: workflowTargetWorldWebpackAlias,
|
|
498
|
-
},
|
|
499
|
-
];
|
|
500
|
-
}
|
|
501
|
-
else {
|
|
502
|
-
webpackConfig.resolve.alias = {
|
|
503
|
-
...(existingAlias || {}),
|
|
504
|
-
[builders_1.WORKFLOW_WORLD_TARGET_MODULE]: workflowTargetWorldWebpackAlias,
|
|
505
|
-
};
|
|
506
|
-
}
|
|
507
|
-
return webpackConfig;
|
|
459
|
+
return existingWebpackModify
|
|
460
|
+
? (existingWebpackModify(...args) ?? webpackConfig)
|
|
461
|
+
: webpackConfig;
|
|
508
462
|
};
|
|
509
463
|
// only run this in the main process so it only runs once
|
|
510
464
|
// as Next.js uses child processes for different builds
|
|
@@ -517,4 +471,4 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
517
471
|
return nextConfig;
|
|
518
472
|
};
|
|
519
473
|
}
|
|
520
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErVUEsb0NBdVRDO0FBdG9CRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUN0RCxpREFPNEI7QUFFNUIsb0RBQTRCO0FBQzVCLDZDQUE4QztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUM7QUFDRixNQUFNLHFDQUFxQyxHQUFHO0lBQzVDLG9CQUFvQjtJQUNwQixHQUFHLGdDQUFnQztDQUNwQyxDQUFDO0FBQ0YsTUFBTSxrQ0FBa0MsR0FBRztJQUN6QyxVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLGNBQWM7Q0FDZixDQUFDO0FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxNQUFNLDBCQUEwQixHQUFHLGlDQUFpQyxDQUFDO0FBQ3JFLE1BQU0sMEJBQTBCLEdBQzlCLG9FQUFvRSxDQUFDO0FBQ3ZFLE1BQU0sb0NBQW9DLEdBQ3hDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN6RSxNQUFNLHVDQUF1QyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFDbEUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDL0QsTUFBTSxZQUFZLEdBQUcsVUFDZSxDQUFDO0FBRXJD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QztpQkFDRixDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHO29CQUM1QixHQUFHLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyx1Q0FBNEIsQ0FBQyxFQUFFLCtCQUErQjtpQkFDaEUsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDLENBQUM7UUFDRix5REFBeUQ7UUFDekQsdURBQXVEO1FBQ3ZELElBQ0UsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQjtZQUN4QyxLQUFLLEtBQUsseUJBQXlCLEVBQ25DLENBQUM7WUFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7WUFFbkQsTUFBTSxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxHQUFHLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3B5RmlsZVN5bmMsIG1rZGlyU3luYywgc3RhdFN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNvcHlGaWxlLCBta2RpciwgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUsIGlzQWJzb2x1dGUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtcbiAgZW5zdXJlV29ya2Zsb3dUYXJnZXRXb3JsZEVudixcbiAgaXNXb3JrZmxvd1RhcmdldFdvcmxkUGF0aCxcbiAgcmVzb2x2ZUNvbmZpZ3VyZWRQcm9qZWN0Um9vdCxcbiAgcmVzb2x2ZVByb2plY3RSb290LFxuICByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzLFxuICBXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFLFxufSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBnZXROZXh0QnVpbGRlciB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5cbmNvbnN0IFZFUkNFTF9XT1JMRF9QQUNLQUdFID0gJ0B3b3JrZmxvdy93b3JsZC12ZXJjZWwnO1xuY29uc3QgVkVSQ0VMX1dPUkxEX0RFUEVOREVOQ1lfUEFDS0FHRVMgPSBbXG4gICdAdmVyY2VsL3F1ZXVlJyxcbiAgJ0B2ZXJjZWwvb2lkYycsXG4gICdAdmVyY2VsL2NsaS1hdXRoJyxcbiAgJ0BuYXBpLXJzL2tleXJpbmcnLFxuXTtcbmNvbnN0IFZFUkNFTF9XT1JMRF9TRVJWRVJfRVhURVJOQUxfUEFDS0FHRVMgPSBbXG4gIFZFUkNFTF9XT1JMRF9QQUNLQUdFLFxuICAuLi5WRVJDRUxfV09STERfREVQRU5ERU5DWV9QQUNLQUdFUyxcbl07XG5jb25zdCBXT1JLRkxPV19TRVJWRVJfVFJBTlNQSUxFX1BBQ0tBR0VTID0gW1xuICAnd29ya2Zsb3cnLFxuICAnQHdvcmtmbG93L2NvcmUnLFxuICAnQHdvcmtmbG93L3NlcmRlJyxcbiAgJ0B3b3JrZmxvdy9lcnJvcnMnLFxuICAnQHdvcmtmbG93L3V0aWxzJyxcbiAgJ0B3b3JrZmxvdy9haScsXG5dO1xuY29uc3QgdXNlV29ya2Zsb3dQYXR0ZXJuID0gL15cXHMqKFsnXCJdKXVzZSB3b3JrZmxvd1xcMTs/XFxzKiQvbTtcbmNvbnN0IHVzZVN0ZXBQYXR0ZXJuID0gL15cXHMqKFsnXCJdKXVzZSBzdGVwXFwxOz9cXHMqJC9tO1xuY29uc3Qgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4gPSAvZnJvbVxccysoWydcIl0pQHdvcmtmbG93XFwvc2VyZGVcXDEvO1xuY29uc3Qgd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4gPVxuICAvU3ltYm9sXFwuZm9yXFxzKlxcKFxccyooWydcIl0pd29ya2Zsb3ctKD86c2VyaWFsaXplfGRlc2VyaWFsaXplKVxcMVxccypcXCkvO1xuY29uc3Qgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuID1cbiAgL1xcW1xccypXT1JLRkxPV18oPzpTRVJJQUxJWkV8REVTRVJJQUxJWkUpXFxzKlxcXS87XG5cbmNvbnN0IFBTRVVET19FWFRFUk5BTF9QQUNLQUdFUyA9IG5ldyBTZXQoWydzZXJ2ZXItb25seScsICdjbGllbnQtb25seSddKTtcbmNvbnN0IHdhcm5lZEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuY29uc3QgQkFTRV9QQVRIX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy9jb3JlL2Jhc2VQYXRoJyk7XG5jb25zdCBnbG9iYWxDb25maWcgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICZcbiAgUmVjb3JkPHN5bWJvbCwgc3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuLy8gS2VlcCB0aGlzIGxvY2FsOiBAd29ya2Zsb3cvbmV4dCBpcyBDb21tb25KUywgd2hpbGUgQHdvcmtmbG93L3V0aWxzIGlzIEVTTS1vbmx5LlxuZnVuY3Rpb24gc2V0V29ya2Zsb3dCYXNlUGF0aChiYXNlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGdsb2JhbENvbmZpZ1tCQVNFX1BBVEhfU1lNQk9MXSA9IGJhc2VQYXRoID8/ICcnO1xufVxuXG5pbnRlcmZhY2UgV29ya2Zsb3dQYXR0ZXJuTWF0Y2gge1xuICBoYXNVc2VXb3JrZmxvdzogYm9vbGVhbjtcbiAgaGFzVXNlU3RlcDogYm9vbGVhbjtcbiAgaGFzU2VyZGU6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZSB7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gIGhhc1VzZVdvcmtmbG93OiBib29sZWFuO1xuICBoYXNVc2VTdGVwOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1Jlc29sdmFibGVQYWNrYWdlU3BlY2lmaWVyKHNwZWNpZmllcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLicpIHx8IHNwZWNpZmllci5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCckJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHNwZWNpZmllci5pbmNsdWRlcygnKicpIHx8IHNwZWNpZmllci5pbmNsdWRlcygnOicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlOiBzdHJpbmcpOiBXb3JrZmxvd1BhdHRlcm5NYXRjaCB7XG4gIGNvbnN0IGhhc1VzZVdvcmtmbG93ID0gdXNlV29ya2Zsb3dQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzVXNlU3RlcCA9IHVzZVN0ZXBQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVJbXBvcnQgPSB3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlU3ltYm9sID0gd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZUNvbXB1dGVkUHJvcGVydHkgPVxuICAgIHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybi50ZXN0KHNvdXJjZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNVc2VXb3JrZmxvdyxcbiAgICBoYXNVc2VTdGVwLFxuICAgIGhhc1NlcmRlOiBoYXNTZXJkZUltcG9ydCB8fCBoYXNTZXJkZVN5bWJvbCB8fCBoYXNTZXJkZUNvbXB1dGVkUHJvcGVydHksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldElzc3VlTGFiZWxzKGRldGVjdGVkOiBEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoZGV0ZWN0ZWQuaGFzVXNlV29ya2Zsb3cpIHtcbiAgICBpc3N1ZXMucHVzaCgnXCJ1c2Ugd29ya2Zsb3dcIiBmdW5jdGlvbnMnKTtcbiAgfVxuICBpZiAoZGV0ZWN0ZWQuaGFzVXNlU3RlcCkge1xuICAgIGlzc3Vlcy5wdXNoKCdcInVzZSBzdGVwXCIgZnVuY3Rpb25zJyk7XG4gIH1cbiAgaWYgKGRldGVjdGVkLmhhc1NlcmRlKSB7XG4gICAgaXNzdWVzLnB1c2goJ3NlcmlhbGl6YXRpb24gY2xhc3NlcycpO1xuICB9XG4gIHJldHVybiBpc3N1ZXM7XG59XG5cbmZ1bmN0aW9uIGhhc1dvcmtmbG93U2VyZGVEZXBlbmRlbmN5KHBhY2thZ2VKc29uOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZXBlbmRlbmNpZXMgPSBpc1BsYWluT2JqZWN0KHBhY2thZ2VKc29uLmRlcGVuZGVuY2llcylcbiAgICA/IHBhY2thZ2VKc29uLmRlcGVuZGVuY2llc1xuICAgIDoge307XG4gIGNvbnN0IHBlZXJEZXBlbmRlbmNpZXMgPSBpc1BsYWluT2JqZWN0KHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXMpXG4gICAgPyBwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzXG4gICAgOiB7fTtcblxuICByZXR1cm4gKFxuICAgIE9iamVjdC5oYXNPd24oZGVwZW5kZW5jaWVzLCAnQHdvcmtmbG93L3NlcmRlJykgfHxcbiAgICBPYmplY3QuaGFzT3duKHBlZXJEZXBlbmRlbmNpZXMsICdAd29ya2Zsb3cvc2VyZGUnKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UoXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZSB8IG51bGw+IHtcbiAgaWYgKCFpc1Jlc29sdmFibGVQYWNrYWdlU3BlY2lmaWVyKHBhY2thZ2VOYW1lKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IGhhc1VzZVdvcmtmbG93ID0gZmFsc2U7XG4gIGxldCBoYXNVc2VTdGVwID0gZmFsc2U7XG4gIGxldCBoYXNTZXJkZSA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcmVxdWlyZS5yZXNvbHZlKGAke3BhY2thZ2VOYW1lfS9wYWNrYWdlLmpzb25gLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHBhY2thZ2VKc29uU291cmNlID0gYXdhaXQgcmVhZEZpbGUocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Tb3VyY2UpIGFzIHVua25vd247XG4gICAgaGFzU2VyZGUgPSBoYXNXb3JrZmxvd1NlcmRlRGVwZW5kZW5jeShwYWNrYWdlSnNvbik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIENvbnRpbnVlIHRvIHNvdXJjZSBzY2FubmluZy5cbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW50cnlQYXRoID0gcmVxdWlyZS5yZXNvbHZlKHBhY2thZ2VOYW1lLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKGVudHJ5UGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGF0dGVybnMgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgaGFzVXNlV29ya2Zsb3cgPSBwYXR0ZXJucy5oYXNVc2VXb3JrZmxvdztcbiAgICBoYXNVc2VTdGVwID0gcGF0dGVybnMuaGFzVXNlU3RlcDtcbiAgICBoYXNTZXJkZSB8fD0gcGF0dGVybnMuaGFzU2VyZGU7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIFVzZSB3aGljaGV2ZXIgc2lnbmFsIHdlIGFscmVhZHkgaGF2ZS5cbiAgfVxuXG4gIGlmICghaGFzVXNlV29ya2Zsb3cgJiYgIWhhc1VzZVN0ZXAgJiYgIWhhc1NlcmRlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhY2thZ2VOYW1lLFxuICAgIGhhc1VzZVdvcmtmbG93LFxuICAgIGhhc1VzZVN0ZXAsXG4gICAgaGFzU2VyZGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHdhcm5BYm91dEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyhcbiAgZGV0ZWN0ZWRQYWNrYWdlczogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VbXVxuKTogdm9pZCB7XG4gIGNvbnN0IG5ld2x5RGV0ZWN0ZWRQYWNrYWdlcyA9IGRldGVjdGVkUGFja2FnZXMuZmlsdGVyKCh7IHBhY2thZ2VOYW1lIH0pID0+IHtcbiAgICByZXR1cm4gIXdhcm5lZEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5oYXMocGFja2FnZU5hbWUpO1xuICB9KTtcblxuICBpZiAobmV3bHlEZXRlY3RlZFBhY2thZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgeyBwYWNrYWdlTmFtZSB9IG9mIG5ld2x5RGV0ZWN0ZWRQYWNrYWdlcykge1xuICAgIHdhcm5lZEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5hZGQocGFja2FnZU5hbWUpO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZURlc2NyaXB0aW9ucyA9IG5ld2x5RGV0ZWN0ZWRQYWNrYWdlc1xuICAgIC5tYXAoXG4gICAgICAoZGV0ZWN0ZWQpID0+XG4gICAgICAgIGBcIiR7ZGV0ZWN0ZWQucGFja2FnZU5hbWV9XCIgKCR7Z2V0SXNzdWVMYWJlbHMoZGV0ZWN0ZWQpLmpvaW4oJywgJyl9KWBcbiAgICApXG4gICAgLmpvaW4oJywgJyk7XG4gIGNvbnN0IHBhY2thZ2VOYW1lcyA9IG5ld2x5RGV0ZWN0ZWRQYWNrYWdlc1xuICAgIC5tYXAoKGRldGVjdGVkKSA9PiBgXCIke2RldGVjdGVkLnBhY2thZ2VOYW1lfVwiYClcbiAgICAuam9pbignLCAnKTtcblxuICBjb25zb2xlLndhcm4oXG4gICAgYFxcbuKaoCBXb3JrZmxvdyBmb3VuZCB3b3JrZmxvdyBjb2RlIGluIHNlcnZlckV4dGVybmFsUGFja2FnZXM6ICR7cGFja2FnZURlc2NyaXB0aW9uc30uYCArXG4gICAgICBgXFxuICBXb3JrZmxvdyByZW1vdmVkIHRoZSBhZmZlY3RlZCBlbnRyaWVzIGZyb20gc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyBmb3IgdGhpcyBidWlsZCBhbmQgaXMgY29tcGlsaW5nIHRoZSBwYWNrYWdlcyBhbnl3YXkuYCArXG4gICAgICBgXFxuICBSZW1vdmUgJHtwYWNrYWdlTmFtZXN9IGZyb20gc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyBpbiBuZXh0LmNvbmZpZyB0byBzaWxlbmNlIHRoaXMgd2FybmluZy5cXG5gXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOZXh0VmVyc2lvbih3b3JraW5nRGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBlcnJvcnM6IHVua25vd25bXSA9IFtdO1xuXG4gIC8vIFRyeSByZXNvbHZpbmcgZnJvbSB0aGUgY29uc3VtaW5nIHByb2plY3QncyB3b3JraW5nIGRpcmVjdG9yeSBmaXJzdC5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vbm9yZXBvIHNldHVwcyB3aGVyZSBgbmV4dGAgbWF5IG5vdCBiZSBob2lzdGVkIHRvIHRoZVxuICAvLyBzYW1lIGxvY2F0aW9uIGFzIGBAd29ya2Zsb3cvbmV4dGAuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcmVxdWlyZS5yZXNvbHZlKCduZXh0L3BhY2thZ2UuanNvbicsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3QgcmVzb2x2ZWRQYWNrYWdlSnNvbiA9IHJlcXVpcmUocGFja2FnZUpzb25QYXRoKSBhcyB7XG4gICAgICB2ZXJzaW9uPzogdW5rbm93bjtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgcmVzb2x2ZWRQYWNrYWdlSnNvbi52ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJlc29sdmVkUGFja2FnZUpzb24udmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byByZXNvbHZpbmcgcmVsYXRpdmUgdG8gdGhpcyBwYWNrYWdlJ3MgbG9jYXRpb24uXG4gIHRyeSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IChyZXF1aXJlKCduZXh0L3BhY2thZ2UuanNvbicpIGFzIHsgdmVyc2lvbj86IHVua25vd24gfSlcbiAgICAgIC52ZXJzaW9uO1xuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9ycy5wdXNoKGUpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgIGVycm9ycyxcbiAgICBgQ291bGQgbm90IHJlc29sdmUgTmV4dC5qcyB2ZXJzaW9uLiBFbnN1cmUgXFxgbmV4dFxcYCBpcyBpbnN0YWxsZWQgaW4geW91ciBwcm9qZWN0ICh3b3JraW5nIGRpcmVjdG9yeTogJHt3b3JraW5nRGlyfSkuYFxuICApO1xufVxuXG5mdW5jdGlvbiBmaWxlRXhpc3RzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXRzID0gc3RhdFN5bmMocGF0aCk7XG4gICAgcmV0dXJuIHN0YXRzLmlzRmlsZSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyh7XG4gIHByb2plY3REaXIsXG4gIGRpc3REaXIsXG59OiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHsgbWFuaWZlc3RQYXRoOiBzdHJpbmc7IGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hbmlmZXN0Q2FuZGlkYXRlcyA9IFtcbiAgICBqb2luKHByb2plY3REaXIsICdhcHAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICAgIGpvaW4ocHJvamVjdERpciwgJ3NyYy9hcHAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICAgIGpvaW4ocHJvamVjdERpciwgJ3B1YmxpYy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gIF07XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IG1hbmlmZXN0Q2FuZGlkYXRlcy5maW5kKGZpbGVFeGlzdHMpO1xuXG4gIGlmICghbWFuaWZlc3RQYXRoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWREaXN0RGlyID0gaXNBYnNvbHV0ZShkaXN0RGlyKVxuICAgID8gZGlzdERpclxuICAgIDogam9pbihwcm9qZWN0RGlyLCBkaXN0RGlyKTtcbiAgY29uc3QgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggPSBqb2luKFxuICAgIHJlc29sdmVkRGlzdERpcixcbiAgICAnZGlhZ25vc3RpY3MnLFxuICAgICd3b3JrZmxvd3MtbWFuaWZlc3QuanNvbidcbiAgKTtcbiAgcmV0dXJuIHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0KG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYXRocyA9IGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMobWV0YWRhdGEpO1xuICBpZiAoIXBhdGhzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH0gPSBwYXRocztcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShkaWFnbm9zdGljc01hbmlmZXN0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBjb3B5RmlsZShtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKTtcbn1cblxuZnVuY3Rpb24gY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdFN5bmMobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogdm9pZCB7XG4gIGNvbnN0IHBhdGhzID0gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyhtZXRhZGF0YSk7XG4gIGlmICghcGF0aHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfSA9IHBhdGhzO1xuICBta2RpclN5bmMoZGlybmFtZShkaWFnbm9zdGljc01hbmlmZXN0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb3B5RmlsZVN5bmMobWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyV29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29weShtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB2b2lkIHtcbiAgY29uc3QgbWFya2VyID0gJ19fd29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29waWVzJztcbiAgY29uc3QgZ2xvYmFsV2l0aE1hcmtlciA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgW21hcmtlcl0/OiBBcnJheTx7IHByb2plY3REaXI6IHN0cmluZzsgZGlzdERpcjogc3RyaW5nIH0+O1xuICB9O1xuXG4gIGlmICghZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdKSB7XG4gICAgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdID0gW107XG4gICAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb3B5TWV0YWRhdGEgb2YgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdIHx8IFtdKSB7XG4gICAgICAgIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RTeW5jKGNvcHlNZXRhZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0ucHVzaChtZXRhZGF0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoV29ya2Zsb3coXG4gIG5leHRDb25maWdPckZuOlxuICAgIHwgTmV4dENvbmZpZ1xuICAgIHwgKChcbiAgICAgICAgcGhhc2U6IHN0cmluZyxcbiAgICAgICAgY3R4OiB7IGRlZmF1bHRDb25maWc6IE5leHRDb25maWcgfVxuICAgICAgKSA9PiBQcm9taXNlPE5leHRDb25maWc+KSxcbiAge1xuICAgIHdvcmtmbG93cyxcbiAgfToge1xuICAgIHdvcmtmbG93cz86IHtcbiAgICAgIGxvY2FsPzoge1xuICAgICAgICBwb3J0PzogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICogQ29udHJvbHMgaG93IHNvdXJjZSBtYXBzIGFyZSBlbWl0dGVkIGZvciB3b3JrZmxvdyBidW5kbGVzLiBBY2NlcHRzXG4gICAgICAgKiB0aGUgc2FtZSB2YWx1ZXMgYXMgZXNidWlsZCdzIGBzb3VyY2VtYXBgIG9wdGlvbjogYHRydWVgL2AnaW5saW5lJ2BcbiAgICAgICAqIChkZWZhdWx0KSwgYCdsaW5rZWQnYCwgYCdleHRlcm5hbCdgLCBgJ2JvdGgnYCwgb3IgYGZhbHNlYCB0byBvbWl0XG4gICAgICAgKiBzb3VyY2UgbWFwcy4gQ2FuIGFsc28gYmUgc2V0IHZpYSB0aGUgYFdPUktGTE9XX1NPVVJDRU1BUGBcbiAgICAgICAqIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgICAgICovXG4gICAgICBzb3VyY2VtYXA/OiBib29sZWFuIHwgJ2lubGluZScgfCAnbGlua2VkJyB8ICdleHRlcm5hbCcgfCAnYm90aCc7XG4gICAgfTtcbiAgfSA9IHt9XG4pIHtcbiAgY29uc3Qgd29ya2Zsb3dUYXJnZXRXb3JsZCA9IGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYoKTtcbiAgaWYgKHdvcmtmbG93VGFyZ2V0V29ybGQgPT09ICdAd29ya2Zsb3cvd29ybGQtbG9jYWwnKSB7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfREFUQV9ESVIgPz89ICcubmV4dC93b3JrZmxvdy1kYXRhJztcblxuICAgIC8vIGB3b3JrZmxvd3MubG9jYWwucG9ydGAgY29uZmlndXJlcyB3aGVyZSB0aGUgbG9jYWwgd29ybGQgYWRkcmVzc2VzIGl0cyBvd25cbiAgICAvLyBxdWV1ZSBjYWxsYmFja3MsIHNvIGl0IG9ubHkgYXBwbGllcyB3aGVuIHRoYXQgd29ybGQgaXMgdGhlIHRhcmdldC5cbiAgICBjb25zdCBtYXliZVBvcnQgPSB3b3JrZmxvd3M/LmxvY2FsPy5wb3J0O1xuICAgIGlmIChtYXliZVBvcnQpIHtcbiAgICAgIHByb2Nlc3MuZW52LlBPUlQgPSBtYXliZVBvcnQudG9TdHJpbmcoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gYnVpbGRDb25maWcoXG4gICAgcGhhc2U6IHN0cmluZyxcbiAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICkge1xuICAgIGlmIChcbiAgICAgIHBoYXNlID09PSAncGhhc2UtZGV2ZWxvcG1lbnQtc2VydmVyJyB8fFxuICAgICAgcGhhc2UgPT09ICdwaGFzZS1wcm9kdWN0aW9uLWJ1aWxkJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBwcmV3YXJtV29ya2Zsb3dTd2NQbHVnaW5DYWNoZSB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICAnLi9zd2MtcGx1Z2luLWNhY2hlLmpzJ1xuICAgICAgKTtcbiAgICAgIC8vIExvYWRlciB3b3JrZXJzIGluaGVyaXQgdGhpcyBjd2QgYW5kIHJlYWQgZnJvbSB0aGUgc2FtZSBTV0MgY2FjaGUuXG4gICAgICBwcmV3YXJtV29ya2Zsb3dTd2NQbHVnaW5DYWNoZShwcm9jZXNzLmN3ZCgpKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZXJQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCcuL2xvYWRlcicpO1xuICAgIGxldCBuZXh0Q29uZmlnOiBOZXh0Q29uZmlnO1xuXG4gICAgaWYgKHR5cGVvZiBuZXh0Q29uZmlnT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV4dENvbmZpZyA9IGF3YWl0IG5leHRDb25maWdPckZuKHBoYXNlLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q29uZmlnID0gbmV4dENvbmZpZ09yRm47XG4gICAgfVxuICAgIC8vIHNoYWxsb3cgY2xvbmUgdG8gYXZvaWQgcmVhZC1vbmx5IG9uIHRvcC1sZXZlbFxuICAgIG5leHRDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0Q29uZmlnKTtcbiAgICBjb25zdCB3b3JrZmxvd0Jhc2VQYXRoID0gbmV4dENvbmZpZy5iYXNlUGF0aDtcbiAgICBzZXRXb3JrZmxvd0Jhc2VQYXRoKHdvcmtmbG93QmFzZVBhdGgpO1xuICAgIG5leHRDb25maWcuZW52ID0ge1xuICAgICAgLi4ubmV4dENvbmZpZy5lbnYsXG4gICAgICBXT1JLRkxPV19UQVJHRVRfV09STEQ6IHdvcmtmbG93VGFyZ2V0V29ybGQsXG4gICAgfTtcbiAgICBjb25zdCB3b3JraW5nRGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCB3b3JrZmxvd1RhcmdldFdvcmxkV2VicGFja0FsaWFzID0gcmVzb2x2ZVdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcyh7XG4gICAgICB3b3JraW5nRGlyLFxuICAgICAgdGFyZ2V0V29ybGQ6IHdvcmtmbG93VGFyZ2V0V29ybGQsXG4gICAgfSk7XG4gICAgY29uc3Qgd29ya2Zsb3dUYXJnZXRXb3JsZElzUGF0aCA9XG4gICAgICBpc1dvcmtmbG93VGFyZ2V0V29ybGRQYXRoKHdvcmtmbG93VGFyZ2V0V29ybGQpO1xuICAgIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGRUcmFuc3BpbGVQYWNrYWdlcyA9XG4gICAgICB3b3JrZmxvd1RhcmdldFdvcmxkID09PSBWRVJDRUxfV09STERfUEFDS0FHRSB8fCB3b3JrZmxvd1RhcmdldFdvcmxkSXNQYXRoXG4gICAgICAgID8gW11cbiAgICAgICAgOiBbd29ya2Zsb3dUYXJnZXRXb3JsZF07XG4gICAgbmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID0gW1xuICAgICAgLi4ubmV3IFNldChbXG4gICAgICAgIC4uLihuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgfHwgW10pLFxuICAgICAgICAvLyBLZWVwIHRoZSBWZXJjZWwgd29ybGQgYW5kIGl0cyBuYXRpdmUtcHJvbmUgZGVwZW5kZW5jaWVzIGV4dGVybmFsIHNvXG4gICAgICAgIC8vIGxvY2FsIGJ1aWxkcyBkbyBub3QgdHJ5IHRvIHBhcnNlIEB2ZXJjZWwvcXVldWUncyBrZXlyaW5nIGRlcGVuZGVuY3lcbiAgICAgICAgLy8gdHJlZS5cbiAgICAgICAgLi4uVkVSQ0VMX1dPUkxEX1NFUlZFUl9FWFRFUk5BTF9QQUNLQUdFUyxcbiAgICAgIF0pLFxuICAgIF07XG4gICAgbmV4dENvbmZpZy50cmFuc3BpbGVQYWNrYWdlcyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoW1xuICAgICAgICAuLi4obmV4dENvbmZpZy50cmFuc3BpbGVQYWNrYWdlcyB8fCBbXSksXG4gICAgICAgIC4uLldPUktGTE9XX1NFUlZFUl9UUkFOU1BJTEVfUEFDS0FHRVMsXG4gICAgICAgIC4uLndvcmtmbG93VGFyZ2V0V29ybGRUcmFuc3BpbGVQYWNrYWdlcyxcbiAgICAgIF0pLFxuICAgIF07XG4gICAgY29uc3QgZXhpc3RpbmdDb21waWxlciA9IG5leHRDb25maWcuY29tcGlsZXIgPz8ge307XG4gICAgY29uc3QgZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlID0gKFxuICAgICAgZXhpc3RpbmdDb21waWxlciBhcyB7XG4gICAgICAgIHJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU/OiAobWV0YWRhdGE6IHtcbiAgICAgICAgICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gICAgICAgICAgZGlzdERpcjogc3RyaW5nO1xuICAgICAgICB9KSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgICAgfVxuICAgICkucnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZTtcblxuICAgIGNvbnN0IGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID0gQXJyYXkuaXNBcnJheShcbiAgICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlc1xuICAgIClcbiAgICAgID8gbmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzXG4gICAgICA6IFtdO1xuICAgIGxldCBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID0gY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXM7XG5cbiAgICBpZiAoY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzOiBEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHBhY2thZ2VOYW1lIG9mIGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzKSB7XG4gICAgICAgIGlmIChQU0VVRE9fRVhURVJOQUxfUEFDS0FHRVMuaGFzKHBhY2thZ2VOYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkZXRlY3RlZCA9IGF3YWl0IGRldGVjdFNlcnZlckV4dGVybmFsUGFja2FnZShcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgcHJvY2Vzcy5jd2QoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGRldGVjdGVkKSB7XG4gICAgICAgICAgICBkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMucHVzaChkZXRlY3RlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBOZXZlciBibG9jayBjb25maWcgZ2VuZXJhdGlvbi5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFBhY2thZ2VzID0gbmV3IFNldChcbiAgICAgICAgICBkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMubWFwKChkZXRlY3RlZCkgPT4gZGV0ZWN0ZWQucGFja2FnZU5hbWUpXG4gICAgICAgICk7XG4gICAgICAgIGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMgPVxuICAgICAgICAgIGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmZpbHRlcihcbiAgICAgICAgICAgIChwYWNrYWdlTmFtZSkgPT4gIXJlbW92ZWRQYWNrYWdlcy5oYXMocGFja2FnZU5hbWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgbmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID0gZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcztcbiAgICAgICAgd2FybkFib3V0QXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzKGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uZmlndXJlIHRoZSBsb2FkZXIgaWYgdHVyYm9wYWNrIGlzIGJlaW5nIHVzZWRcbiAgICBpZiAoIW5leHRDb25maWcudHVyYm9wYWNrKSB7XG4gICAgICBuZXh0Q29uZmlnLnR1cmJvcGFjayA9IHt9O1xuICAgIH1cbiAgICBpZiAoIW5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzKSB7XG4gICAgICBuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcyA9IHt9O1xuICAgIH1cbiAgICBuZXh0Q29uZmlnLnR1cmJvcGFjay5yZXNvbHZlQWxpYXMgPSB7XG4gICAgICAuLi4oKG5leHRDb25maWcudHVyYm9wYWNrLnJlc29sdmVBbGlhcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfHwge30pLFxuICAgICAgW1dPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEVdOiB3b3JrZmxvd1RhcmdldFdvcmxkSXNQYXRoXG4gICAgICAgID8gd29ya2Zsb3dUYXJnZXRXb3JsZFdlYnBhY2tBbGlhc1xuICAgICAgICA6IHdvcmtmbG93VGFyZ2V0V29ybGQsXG4gICAgfTtcbiAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMgYXMgYW55O1xuICAgIGNvbnN0IG5leHRWZXJzaW9uID0gcmVzb2x2ZU5leHRWZXJzaW9uKHdvcmtpbmdEaXIpO1xuICAgIGNvbnN0IGNvbmZpZ3VyZWRQcm9qZWN0Um9vdCA9XG4gICAgICBuZXh0Q29uZmlnLm91dHB1dEZpbGVUcmFjaW5nUm9vdCA/PyBuZXh0Q29uZmlnLnR1cmJvcGFjaz8ucm9vdDtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IGNvbmZpZ3VyZWRQcm9qZWN0Um9vdFxuICAgICAgPyByZXNvbHZlQ29uZmlndXJlZFByb2plY3RSb290KHdvcmtpbmdEaXIsIGNvbmZpZ3VyZWRQcm9qZWN0Um9vdClcbiAgICAgIDogcmVzb2x2ZVByb2plY3RSb290KHdvcmtpbmdEaXIpO1xuICAgIGNvbnN0IHN1cHBvcnRzVHVyYm9Db25kaXRpb24gPSBzZW12ZXIuZ3RlKG5leHRWZXJzaW9uLCAndjE2LjAuMCcpO1xuXG4gICAgY29uc3Qgc2hvdWxkV2F0Y2ggPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JztcbiAgICBsZXQgd29ya2Zsb3dCdWlsZGVyUHJvbWlzZTogUHJvbWlzZTxhbnk+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRpc3REaXIgPSBuZXh0Q29uZmlnLmRpc3REaXIgfHwgJy5uZXh0JztcblxuICAgIG5leHRDb25maWcuY29tcGlsZXIgPSB7XG4gICAgICAuLi5leGlzdGluZ0NvbXBpbGVyLFxuICAgICAgcnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZTogYXN5bmMgKG1ldGFkYXRhKSA9PiB7XG4gICAgICAgIGlmIChleGlzdGluZ1J1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGUpIHtcbiAgICAgICAgICBhd2FpdCBleGlzdGluZ1J1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGUobWV0YWRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3QobWV0YWRhdGEpO1xuICAgICAgICByZWdpc3RlcldvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdENvcHkobWV0YWRhdGEpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0V29ya2Zsb3dCdWlsZGVyID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCF3b3JrZmxvd0J1aWxkZXJQcm9taXNlKSB7XG4gICAgICAgIHdvcmtmbG93QnVpbGRlclByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IE5leHRCdWlsZGVyID0gYXdhaXQgZ2V0TmV4dEJ1aWxkZXIobmV4dFZlcnNpb24pO1xuICAgICAgICAgIHJldHVybiBuZXcgTmV4dEJ1aWxkZXIoe1xuICAgICAgICAgICAgd2F0Y2g6IHNob3VsZFdhdGNoLFxuICAgICAgICAgICAgLy8gZ2V0SW5wdXRGaWxlcyBmaWx0ZXJzIHRoZSBwcm9qZWN0IHRvIE5leHQuanMgZW50cnlwb2ludHNcbiAgICAgICAgICAgIGRpcnM6IFsnLiddLFxuICAgICAgICAgICAgcGFnZUV4dGVuc2lvbnM6IG5leHRDb25maWcucGFnZUV4dGVuc2lvbnMgPz8gW1xuICAgICAgICAgICAgICAndHN4JyxcbiAgICAgICAgICAgICAgJ3RzJyxcbiAgICAgICAgICAgICAgJ2pzeCcsXG4gICAgICAgICAgICAgICdqcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXJSb290OiB3b3JraW5nRGlyLFxuICAgICAgICAgICAgd29ya2luZ0RpcixcbiAgICAgICAgICAgIGRpc3REaXIsXG4gICAgICAgICAgICBiYXNlUGF0aDogd29ya2Zsb3dCYXNlUGF0aCxcbiAgICAgICAgICAgIGRpYWdub3N0aWNzRGlyOiBgJHtkaXN0RGlyfS9kaWFnbm9zdGljc2AsXG4gICAgICAgICAgICBidWlsZFRhcmdldDogJ25leHQnLFxuICAgICAgICAgICAgd29ya2Zsb3dzQnVuZGxlUGF0aDogJycsIC8vIG5vdCB1c2VkIGluIGJhc2VcbiAgICAgICAgICAgIHN0ZXBzQnVuZGxlUGF0aDogJycsIC8vIG5vdCB1c2VkIGluIGJhc2VcbiAgICAgICAgICAgIHdlYmhvb2tCdW5kbGVQYXRoOiAnJywgLy8gbm9kZSB1c2VkIGluIGJhc2VcbiAgICAgICAgICAgIHNvdXJjZW1hcDogd29ya2Zsb3dzPy5zb3VyY2VtYXAsXG4gICAgICAgICAgICBleHRlcm5hbFBhY2thZ2VzOiBbXG4gICAgICAgICAgICAgIC8vIHNlcnZlci1vbmx5IGFuZCBjbGllbnQtb25seSBhcmUgcHNldWRvLXBhY2thZ2VzIGhhbmRsZWQgYnkgTmV4dC5qc1xuICAgICAgICAgICAgICAvLyBkdXJpbmcgaXRzIGJ1aWxkIHByb2Nlc3MuIFdlIG1hcmsgdGhlbSBhcyBleHRlcm5hbCB0byBwcmV2ZW50IGVzYnVpbGRcbiAgICAgICAgICAgICAgLy8gZnJvbSBmYWlsaW5nIHdoZW4gYnVuZGxpbmcgY29kZSB0aGF0IGltcG9ydHMgdGhlbS5cbiAgICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvZ2V0dGluZy1zdGFydGVkL3NlcnZlci1hbmQtY2xpZW50LWNvbXBvbmVudHNcbiAgICAgICAgICAgICAgJ3NlcnZlci1vbmx5JyxcbiAgICAgICAgICAgICAgJ2NsaWVudC1vbmx5JyxcbiAgICAgICAgICAgICAgLi4uZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3b3JrZmxvd0J1aWxkZXJQcm9taXNlO1xuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbXG4gICAgICAnKi50c3gnLFxuICAgICAgJyoudHMnLFxuICAgICAgJyouanN4JyxcbiAgICAgICcqLmpzJyxcbiAgICAgICcqLm1qcycsXG4gICAgICAnKi5tdHMnLFxuICAgICAgJyouY2pzJyxcbiAgICAgICcqLmN0cycsXG4gICAgXSkge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXNba2V5XSA9IHtcbiAgICAgICAgLi4uKHN1cHBvcnRzVHVyYm9Db25kaXRpb25cbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiB7XG4gICAgICAgICAgICAgICAgLy8gVXNlICdhbGwnIHRvIGNvbWJpbmU6IG11c3QgbWF0Y2ggY29udGVudCBBTkQgbXVzdCBOT1QgYmUgaW4gZ2VuZXJhdGVkIHBhdGhcbiAgICAgICAgICAgICAgICAvLyBNZXJnZSB3aXRoIGFueSBleGlzdGluZyAnYWxsJyBjb25kaXRpb25zIGZyb20gdXNlciBjb25maWdcbiAgICAgICAgICAgICAgICBhbGw6IFtcbiAgICAgICAgICAgICAgICAgIC4uLihleGlzdGluZ1J1bGVzW2tleV0/LmNvbmRpdGlvbj8uYWxsIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzIGZyb20gdHJhbnNmb3JtYXRpb25cbiAgICAgICAgICAgICAgICAgIHsgbm90OiB7IHBhdGg6IC9bL1xcXFxdXFwud2VsbC1rbm93blsvXFxcXF13b3JrZmxvd1svXFxcXF0vIH0gfSxcbiAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGZpbGVzIHdpdGggd29ya2Zsb3cgZGlyZWN0aXZlcyBvciBjdXN0b20gc2VyaWFsaXphdGlvbiBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgLy8gVXNlcyBiYWNrcmVmZXJlbmNlcyAoXFwyLCBcXDMpIHRvIGVuc3VyZSBtYXRjaGluZyBxdW90ZSB0eXBlc1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OlxuICAgICAgICAgICAgICAgICAgICAgIC8odXNlIHdvcmtmbG93fHVzZSBzdGVwfEB3b3JrZmxvd1xcL2NvcmVcXC9ydW50aW1lXFwvd29ybGQtdGFyZ2V0fGZyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwyfFN5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDNcXHMqXFwpKS8sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGxvYWRlcnM6IFsuLi4oZXhpc3RpbmdSdWxlc1trZXldPy5sb2FkZXJzIHx8IFtdKSwgbG9hZGVyUGF0aF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9hZGVyIGZvciB3ZWJwYWNrXG4gICAgY29uc3QgZXhpc3RpbmdXZWJwYWNrTW9kaWZ5ID0gbmV4dENvbmZpZy53ZWJwYWNrO1xuICAgIG5leHRDb25maWcud2VicGFjayA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBsZXQgW3dlYnBhY2tDb25maWddID0gYXJncztcbiAgICAgIHdlYnBhY2tDb25maWcgPSBleGlzdGluZ1dlYnBhY2tNb2RpZnlcbiAgICAgICAgPyAoZXhpc3RpbmdXZWJwYWNrTW9kaWZ5KC4uLmFyZ3MpID8/IHdlYnBhY2tDb25maWcpXG4gICAgICAgIDogd2VicGFja0NvbmZpZztcblxuICAgICAgaWYgKCF3ZWJwYWNrQ29uZmlnLm1vZHVsZSkge1xuICAgICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZSA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKCF3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcykge1xuICAgICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcyA9IFtdO1xuICAgICAgfVxuICAgICAgLy8gbG9hZGVycyBpbiB3ZWJwYWNrIGFwcGx5IGJvdHRvbS0+dXAgc28gZW5zdXJlXG4gICAgICAvLyBvdXJzIGNvbWVzIGJlZm9yZSB0aGUgZGVmYXVsdCBzd2MgdHJhbnNmb3JtXG4gICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcy5wdXNoKHtcbiAgICAgICAgdGVzdDogLy4qXFwuKG1qc3xjanN8Y3RzfHRzfHRzeHxqc3xqc3gpJC8sXG4gICAgICAgIGxvYWRlcjogbG9hZGVyUGF0aCxcbiAgICAgIH0pO1xuXG4gICAgICB3ZWJwYWNrQ29uZmlnLnJlc29sdmUgfHw9IHt9O1xuICAgICAgY29uc3QgZXhpc3RpbmdBbGlhcyA9IHdlYnBhY2tDb25maWcucmVzb2x2ZS5hbGlhcztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nQWxpYXMpKSB7XG4gICAgICAgIHdlYnBhY2tDb25maWcucmVzb2x2ZS5hbGlhcyA9IFtcbiAgICAgICAgICAuLi5leGlzdGluZ0FsaWFzLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFdPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEUsXG4gICAgICAgICAgICBhbGlhczogd29ya2Zsb3dUYXJnZXRXb3JsZFdlYnBhY2tBbGlhcyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5yZXNvbHZlLmFsaWFzID0ge1xuICAgICAgICAgIC4uLihleGlzdGluZ0FsaWFzIHx8IHt9KSxcbiAgICAgICAgICBbV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRV06IHdvcmtmbG93VGFyZ2V0V29ybGRXZWJwYWNrQWxpYXMsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3ZWJwYWNrQ29uZmlnO1xuICAgIH07XG4gICAgLy8gb25seSBydW4gdGhpcyBpbiB0aGUgbWFpbiBwcm9jZXNzIHNvIGl0IG9ubHkgcnVucyBvbmNlXG4gICAgLy8gYXMgTmV4dC5qcyB1c2VzIGNoaWxkIHByb2Nlc3NlcyBmb3IgZGlmZmVyZW50IGJ1aWxkc1xuICAgIGlmIChcbiAgICAgICFwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX1BSSVZBVEVfQlVJTFQgJiZcbiAgICAgIHBoYXNlICE9PSAncGhhc2UtcHJvZHVjdGlvbi1zZXJ2ZXInXG4gICAgKSB7XG4gICAgICBjb25zdCB3b3JrZmxvd0J1aWxkZXIgPSBhd2FpdCBnZXRXb3JrZmxvd0J1aWxkZXIoKTtcblxuICAgICAgYXdhaXQgd29ya2Zsb3dCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX1BSSVZBVEVfQlVJTFQgPSAnMSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDb25maWc7XG4gIH07XG59XG4iXX0=
|
|
474
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtVUEsb0NBNFFDO0FBL2tCRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUN0RCxpREFHNEI7QUFFNUIsb0RBQTRCO0FBQzVCLDZDQUE4QztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUM7QUFDRixNQUFNLHFDQUFxQyxHQUFHO0lBQzVDLG9CQUFvQjtJQUNwQixHQUFHLGdDQUFnQztDQUNwQyxDQUFDO0FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxNQUFNLDBCQUEwQixHQUFHLGlDQUFpQyxDQUFDO0FBQ3JFLE1BQU0sMEJBQTBCLEdBQzlCLG9FQUFvRSxDQUFDO0FBQ3ZFLE1BQU0sb0NBQW9DLEdBQ3hDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN6RSxNQUFNLHVDQUF1QyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFDbEUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDL0QsTUFBTSxZQUFZLEdBQUcsVUFDZSxDQUFDO0FBRXJDLGtGQUFrRjtBQUNsRixTQUFTLG1CQUFtQixDQUFDLFFBQTRCO0lBQ3ZELFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQWVE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Q0FBQztnQkFDbkQsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNwQixDQUFDLENBQUM7UUFDRix5REFBeUQ7UUFDekQsdURBQXVEO1FBQ3ZELElBQ0UsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQjtZQUN4QyxLQUFLLEtBQUsseUJBQXlCLEVBQ25DLENBQUM7WUFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7WUFFbkQsTUFBTSxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxHQUFHLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3B5RmlsZVN5bmMsIG1rZGlyU3luYywgc3RhdFN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNvcHlGaWxlLCBta2RpciwgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUsIGlzQWJzb2x1dGUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZUNvbmZpZ3VyZWRQcm9qZWN0Um9vdCxcbiAgcmVzb2x2ZVByb2plY3RSb290LFxufSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBnZXROZXh0QnVpbGRlciB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5cbmNvbnN0IFZFUkNFTF9XT1JMRF9QQUNLQUdFID0gJ0B3b3JrZmxvdy93b3JsZC12ZXJjZWwnO1xuY29uc3QgVkVSQ0VMX1dPUkxEX0RFUEVOREVOQ1lfUEFDS0FHRVMgPSBbXG4gICdAdmVyY2VsL3F1ZXVlJyxcbiAgJ0B2ZXJjZWwvb2lkYycsXG4gICdAdmVyY2VsL2NsaS1hdXRoJyxcbiAgJ0BuYXBpLXJzL2tleXJpbmcnLFxuXTtcbmNvbnN0IFZFUkNFTF9XT1JMRF9TRVJWRVJfRVhURVJOQUxfUEFDS0FHRVMgPSBbXG4gIFZFUkNFTF9XT1JMRF9QQUNLQUdFLFxuICAuLi5WRVJDRUxfV09STERfREVQRU5ERU5DWV9QQUNLQUdFUyxcbl07XG5jb25zdCB1c2VXb3JrZmxvd1BhdHRlcm4gPSAvXlxccyooWydcIl0pdXNlIHdvcmtmbG93XFwxOz9cXHMqJC9tO1xuY29uc3QgdXNlU3RlcFBhdHRlcm4gPSAvXlxccyooWydcIl0pdXNlIHN0ZXBcXDE7P1xccyokL207XG5jb25zdCB3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybiA9IC9mcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMS87XG5jb25zdCB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybiA9XG4gIC9TeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwxXFxzKlxcKS87XG5jb25zdCB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4gPVxuICAvXFxbXFxzKldPUktGTE9XXyg/OlNFUklBTElaRXxERVNFUklBTElaRSlcXHMqXFxdLztcblxuY29uc3QgUFNFVURPX0VYVEVSTkFMX1BBQ0tBR0VTID0gbmV3IFNldChbJ3NlcnZlci1vbmx5JywgJ2NsaWVudC1vbmx5J10pO1xuY29uc3Qgd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5jb25zdCBCQVNFX1BBVEhfU1lNQk9MID0gU3ltYm9sLmZvcignQHdvcmtmbG93L2NvcmUvYmFzZVBhdGgnKTtcbmNvbnN0IGdsb2JhbENvbmZpZyA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJlxuICBSZWNvcmQ8c3ltYm9sLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG4vLyBLZWVwIHRoaXMgbG9jYWw6IEB3b3JrZmxvdy9uZXh0IGlzIENvbW1vbkpTLCB3aGlsZSBAd29ya2Zsb3cvdXRpbHMgaXMgRVNNLW9ubHkuXG5mdW5jdGlvbiBzZXRXb3JrZmxvd0Jhc2VQYXRoKGJhc2VQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgZ2xvYmFsQ29uZmlnW0JBU0VfUEFUSF9TWU1CT0xdID0gYmFzZVBhdGggPz8gJyc7XG59XG5cbmludGVyZmFjZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCB7XG4gIGhhc1VzZVdvcmtmbG93OiBib29sZWFuO1xuICBoYXNVc2VTdGVwOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlIHtcbiAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVzb2x2YWJsZVBhY2thZ2VTcGVjaWZpZXIoc3BlY2lmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCcuJykgfHwgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc3BlY2lmaWVyLmluY2x1ZGVzKCcqJykgfHwgc3BlY2lmaWVyLmluY2x1ZGVzKCc6JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgY29uc3QgaGFzVXNlV29ya2Zsb3cgPSB1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNVc2VTdGVwID0gdXNlU3RlcFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZUltcG9ydCA9IHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVTeW1ib2wgPSB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSA9XG4gICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3Qoc291cmNlKTtcblxuICByZXR1cm4ge1xuICAgIGhhc1VzZVdvcmtmbG93LFxuICAgIGhhc1VzZVN0ZXAsXG4gICAgaGFzU2VyZGU6IGhhc1NlcmRlSW1wb3J0IHx8IGhhc1NlcmRlU3ltYm9sIHx8IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNzdWVMYWJlbHMoZGV0ZWN0ZWQ6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlKTogc3RyaW5nW10ge1xuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gIGlmIChkZXRlY3RlZC5oYXNVc2VXb3JrZmxvdykge1xuICAgIGlzc3Vlcy5wdXNoKCdcInVzZSB3b3JrZmxvd1wiIGZ1bmN0aW9ucycpO1xuICB9XG4gIGlmIChkZXRlY3RlZC5oYXNVc2VTdGVwKSB7XG4gICAgaXNzdWVzLnB1c2goJ1widXNlIHN0ZXBcIiBmdW5jdGlvbnMnKTtcbiAgfVxuICBpZiAoZGV0ZWN0ZWQuaGFzU2VyZGUpIHtcbiAgICBpc3N1ZXMucHVzaCgnc2VyaWFsaXphdGlvbiBjbGFzc2VzJyk7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlcztcbn1cblxuZnVuY3Rpb24gaGFzV29ya2Zsb3dTZXJkZURlcGVuZGVuY3kocGFja2FnZUpzb246IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhY2thZ2VKc29uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IGlzUGxhaW5PYmplY3QocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzKVxuICAgID8gcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzXG4gICAgOiB7fTtcbiAgY29uc3QgcGVlckRlcGVuZGVuY2llcyA9IGlzUGxhaW5PYmplY3QocGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcylcbiAgICA/IHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXNcbiAgICA6IHt9O1xuXG4gIHJldHVybiAoXG4gICAgT2JqZWN0Lmhhc093bihkZXBlbmRlbmNpZXMsICdAd29ya2Zsb3cvc2VyZGUnKSB8fFxuICAgIE9iamVjdC5oYXNPd24ocGVlckRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdFNlcnZlckV4dGVybmFsUGFja2FnZShcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlIHwgbnVsbD4ge1xuICBpZiAoIWlzUmVzb2x2YWJsZVBhY2thZ2VTcGVjaWZpZXIocGFja2FnZU5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgaGFzVXNlV29ya2Zsb3cgPSBmYWxzZTtcbiAgbGV0IGhhc1VzZVN0ZXAgPSBmYWxzZTtcbiAgbGV0IGhhc1NlcmRlID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoYCR7cGFja2FnZU5hbWV9L3BhY2thZ2UuanNvbmAsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3QgcGFja2FnZUpzb25Tb3VyY2UgPSBhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvblNvdXJjZSkgYXMgdW5rbm93bjtcbiAgICBoYXNTZXJkZSA9IGhhc1dvcmtmbG93U2VyZGVEZXBlbmRlbmN5KHBhY2thZ2VKc29uKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQmVzdC1lZmZvcnQgb25seS4gQ29udGludWUgdG8gc291cmNlIHNjYW5uaW5nLlxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyeVBhdGggPSByZXF1aXJlLnJlc29sdmUocGFja2FnZU5hbWUsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUoZW50cnlQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBwYXR0ZXJucyA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICBoYXNVc2VXb3JrZmxvdyA9IHBhdHRlcm5zLmhhc1VzZVdvcmtmbG93O1xuICAgIGhhc1VzZVN0ZXAgPSBwYXR0ZXJucy5oYXNVc2VTdGVwO1xuICAgIGhhc1NlcmRlIHx8PSBwYXR0ZXJucy5oYXNTZXJkZTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQmVzdC1lZmZvcnQgb25seS4gVXNlIHdoaWNoZXZlciBzaWduYWwgd2UgYWxyZWFkeSBoYXZlLlxuICB9XG5cbiAgaWYgKCFoYXNVc2VXb3JrZmxvdyAmJiAhaGFzVXNlU3RlcCAmJiAhaGFzU2VyZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFja2FnZU5hbWUsXG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0QXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzKFxuICBkZXRlY3RlZFBhY2thZ2VzOiBEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZVtdXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV3bHlEZXRlY3RlZFBhY2thZ2VzID0gZGV0ZWN0ZWRQYWNrYWdlcy5maWx0ZXIoKHsgcGFja2FnZU5hbWUgfSkgPT4ge1xuICAgIHJldHVybiAhd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSk7XG4gIH0pO1xuXG4gIGlmIChuZXdseURldGVjdGVkUGFja2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCB7IHBhY2thZ2VOYW1lIH0gb2YgbmV3bHlEZXRlY3RlZFBhY2thZ2VzKSB7XG4gICAgd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmFkZChwYWNrYWdlTmFtZSk7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlRGVzY3JpcHRpb25zID0gbmV3bHlEZXRlY3RlZFBhY2thZ2VzXG4gICAgLm1hcChcbiAgICAgIChkZXRlY3RlZCkgPT5cbiAgICAgICAgYFwiJHtkZXRlY3RlZC5wYWNrYWdlTmFtZX1cIiAoJHtnZXRJc3N1ZUxhYmVscyhkZXRlY3RlZCkuam9pbignLCAnKX0pYFxuICAgIClcbiAgICAuam9pbignLCAnKTtcbiAgY29uc3QgcGFja2FnZU5hbWVzID0gbmV3bHlEZXRlY3RlZFBhY2thZ2VzXG4gICAgLm1hcCgoZGV0ZWN0ZWQpID0+IGBcIiR7ZGV0ZWN0ZWQucGFja2FnZU5hbWV9XCJgKVxuICAgIC5qb2luKCcsICcpO1xuXG4gIGNvbnNvbGUud2FybihcbiAgICBgXFxu4pqgIFdvcmtmbG93IGZvdW5kIHdvcmtmbG93IGNvZGUgaW4gc2VydmVyRXh0ZXJuYWxQYWNrYWdlczogJHtwYWNrYWdlRGVzY3JpcHRpb25zfS5gICtcbiAgICAgIGBcXG4gIFdvcmtmbG93IHJlbW92ZWQgdGhlIGFmZmVjdGVkIGVudHJpZXMgZnJvbSBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIGZvciB0aGlzIGJ1aWxkIGFuZCBpcyBjb21waWxpbmcgdGhlIHBhY2thZ2VzIGFueXdheS5gICtcbiAgICAgIGBcXG4gIFJlbW92ZSAke3BhY2thZ2VOYW1lc30gZnJvbSBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIGluIG5leHQuY29uZmlnIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLlxcbmBcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5leHRWZXJzaW9uKHdvcmtpbmdEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG5cbiAgLy8gVHJ5IHJlc29sdmluZyBmcm9tIHRoZSBjb25zdW1pbmcgcHJvamVjdCdzIHdvcmtpbmcgZGlyZWN0b3J5IGZpcnN0LlxuICAvLyBUaGlzIGhhbmRsZXMgbW9ub3JlcG8gc2V0dXBzIHdoZXJlIGBuZXh0YCBtYXkgbm90IGJlIGhvaXN0ZWQgdG8gdGhlXG4gIC8vIHNhbWUgbG9jYXRpb24gYXMgYEB3b3JrZmxvdy9uZXh0YC5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoJ25leHQvcGFja2FnZS5qc29uJywge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlZFBhY2thZ2VKc29uID0gcmVxdWlyZShwYWNrYWdlSnNvblBhdGgpIGFzIHtcbiAgICAgIHZlcnNpb24/OiB1bmtub3duO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiByZXNvbHZlZFBhY2thZ2VKc29uLnZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRQYWNrYWdlSnNvbi52ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9ycy5wdXNoKGUpO1xuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIHJlc29sdmluZyByZWxhdGl2ZSB0byB0aGlzIHBhY2thZ2UncyBsb2NhdGlvbi5cbiAgdHJ5IHtcbiAgICBjb25zdCB2ZXJzaW9uID0gKHJlcXVpcmUoJ25leHQvcGFja2FnZS5qc29uJykgYXMgeyB2ZXJzaW9uPzogdW5rbm93biB9KVxuICAgICAgLnZlcnNpb247XG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JzLnB1c2goZSk7XG4gIH1cblxuICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgZXJyb3JzLFxuICAgIGBDb3VsZCBub3QgcmVzb2x2ZSBOZXh0LmpzIHZlcnNpb24uIEVuc3VyZSBcXGBuZXh0XFxgIGlzIGluc3RhbGxlZCBpbiB5b3VyIHByb2plY3QgKHdvcmtpbmcgZGlyZWN0b3J5OiAke3dvcmtpbmdEaXJ9KS5gXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbGVFeGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHMgPSBzdGF0U3luYyhwYXRoKTtcbiAgICByZXR1cm4gc3RhdHMuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKHtcbiAgcHJvamVjdERpcixcbiAgZGlzdERpcixcbn06IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogeyBtYW5pZmVzdFBhdGg6IHN0cmluZzsgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGg6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWFuaWZlc3RDYW5kaWRhdGVzID0gW1xuICAgIGpvaW4ocHJvamVjdERpciwgJ2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gICAgam9pbihwcm9qZWN0RGlyLCAnc3JjL2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gICAgam9pbihwcm9qZWN0RGlyLCAncHVibGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgXTtcbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gbWFuaWZlc3RDYW5kaWRhdGVzLmZpbmQoZmlsZUV4aXN0cyk7XG5cbiAgaWYgKCFtYW5pZmVzdFBhdGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNvbHZlZERpc3REaXIgPSBpc0Fic29sdXRlKGRpc3REaXIpXG4gICAgPyBkaXN0RGlyXG4gICAgOiBqb2luKHByb2plY3REaXIsIGRpc3REaXIpO1xuICBjb25zdCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCA9IGpvaW4oXG4gICAgcmVzb2x2ZWREaXN0RGlyLFxuICAgICdkaWFnbm9zdGljcycsXG4gICAgJ3dvcmtmbG93cy1tYW5pZmVzdC5qc29uJ1xuICApO1xuICByZXR1cm4geyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3QobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhdGhzID0gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyhtZXRhZGF0YSk7XG4gIGlmICghcGF0aHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfSA9IHBhdGhzO1xuICBhd2FpdCBta2RpcihkaXJuYW1lKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNvcHlGaWxlKG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpO1xufVxuXG5mdW5jdGlvbiBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0U3luYyhtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB2b2lkIHtcbiAgY29uc3QgcGF0aHMgPSBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKG1ldGFkYXRhKTtcbiAgaWYgKCFwYXRocykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9ID0gcGF0aHM7XG4gIG1rZGlyU3luYyhkaXJuYW1lKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvcHlGaWxlU3luYyhtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHZvaWQge1xuICBjb25zdCBtYXJrZXIgPSAnX193b3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3BpZXMnO1xuICBjb25zdCBnbG9iYWxXaXRoTWFya2VyID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICBbbWFya2VyXT86IEFycmF5PHsgcHJvamVjdERpcjogc3RyaW5nOyBkaXN0RGlyOiBzdHJpbmcgfT47XG4gIH07XG5cbiAgaWYgKCFnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0pIHtcbiAgICBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0gPSBbXTtcbiAgICBwcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvcHlNZXRhZGF0YSBvZiBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0gfHwgW10pIHtcbiAgICAgICAgY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdFN5bmMoY29weU1ldGFkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXS5wdXNoKG1ldGFkYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhXb3JrZmxvdyhcbiAgbmV4dENvbmZpZ09yRm46XG4gICAgfCBOZXh0Q29uZmlnXG4gICAgfCAoKFxuICAgICAgICBwaGFzZTogc3RyaW5nLFxuICAgICAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICAgICApID0+IFByb21pc2U8TmV4dENvbmZpZz4pLFxuICB7XG4gICAgd29ya2Zsb3dzLFxuICB9OiB7XG4gICAgd29ya2Zsb3dzPzoge1xuICAgICAgbG9jYWw/OiB7XG4gICAgICAgIHBvcnQ/OiBudW1iZXI7XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBDb250cm9scyBob3cgc291cmNlIG1hcHMgYXJlIGVtaXR0ZWQgZm9yIHdvcmtmbG93IGJ1bmRsZXMuIEFjY2VwdHNcbiAgICAgICAqIHRoZSBzYW1lIHZhbHVlcyBhcyBlc2J1aWxkJ3MgYHNvdXJjZW1hcGAgb3B0aW9uOiBgdHJ1ZWAvYCdpbmxpbmUnYFxuICAgICAgICogKGRlZmF1bHQpLCBgJ2xpbmtlZCdgLCBgJ2V4dGVybmFsJ2AsIGAnYm90aCdgLCBvciBgZmFsc2VgIHRvIG9taXRcbiAgICAgICAqIHNvdXJjZSBtYXBzLiBDYW4gYWxzbyBiZSBzZXQgdmlhIHRoZSBgV09SS0ZMT1dfU09VUkNFTUFQYFxuICAgICAgICogZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAgICAgKi9cbiAgICAgIHNvdXJjZW1hcD86IGJvb2xlYW4gfCAnaW5saW5lJyB8ICdsaW5rZWQnIHwgJ2V4dGVybmFsJyB8ICdib3RoJztcbiAgICB9O1xuICB9ID0ge31cbikge1xuICBpZiAoIXByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgaWYgKCFwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQpIHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCA9ICdsb2NhbCc7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9EQVRBX0RJUiA9ICcubmV4dC93b3JrZmxvdy1kYXRhJztcbiAgICB9XG4gICAgY29uc3QgbWF5YmVQb3J0ID0gd29ya2Zsb3dzPy5sb2NhbD8ucG9ydDtcbiAgICBpZiAobWF5YmVQb3J0KSB7XG4gICAgICBwcm9jZXNzLmVudi5QT1JUID0gbWF5YmVQb3J0LnRvU3RyaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEKSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQgPSAndmVyY2VsJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gYnVpbGRDb25maWcoXG4gICAgcGhhc2U6IHN0cmluZyxcbiAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICkge1xuICAgIGlmIChcbiAgICAgIHBoYXNlID09PSAncGhhc2UtZGV2ZWxvcG1lbnQtc2VydmVyJyB8fFxuICAgICAgcGhhc2UgPT09ICdwaGFzZS1wcm9kdWN0aW9uLWJ1aWxkJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBwcmV3YXJtV29ya2Zsb3dTd2NQbHVnaW5DYWNoZSB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICAnLi9zd2MtcGx1Z2luLWNhY2hlLmpzJ1xuICAgICAgKTtcbiAgICAgIC8vIExvYWRlciB3b3JrZXJzIGluaGVyaXQgdGhpcyBjd2QgYW5kIHJlYWQgZnJvbSB0aGUgc2FtZSBTV0MgY2FjaGUuXG4gICAgICBwcmV3YXJtV29ya2Zsb3dTd2NQbHVnaW5DYWNoZShwcm9jZXNzLmN3ZCgpKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZXJQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCcuL2xvYWRlcicpO1xuICAgIGxldCBuZXh0Q29uZmlnOiBOZXh0Q29uZmlnO1xuXG4gICAgaWYgKHR5cGVvZiBuZXh0Q29uZmlnT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV4dENvbmZpZyA9IGF3YWl0IG5leHRDb25maWdPckZuKHBoYXNlLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q29uZmlnID0gbmV4dENvbmZpZ09yRm47XG4gICAgfVxuICAgIC8vIHNoYWxsb3cgY2xvbmUgdG8gYXZvaWQgcmVhZC1vbmx5IG9uIHRvcC1sZXZlbFxuICAgIG5leHRDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0Q29uZmlnKTtcbiAgICBjb25zdCB3b3JrZmxvd0Jhc2VQYXRoID0gbmV4dENvbmZpZy5iYXNlUGF0aDtcbiAgICBzZXRXb3JrZmxvd0Jhc2VQYXRoKHdvcmtmbG93QmFzZVBhdGgpO1xuICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoW1xuICAgICAgICAuLi4obmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIHx8IFtdKSxcbiAgICAgICAgLy8gS2VlcCB0aGUgVmVyY2VsIHdvcmxkIGFuZCBpdHMgbmF0aXZlLXByb25lIGRlcGVuZGVuY2llcyBleHRlcm5hbCBzb1xuICAgICAgICAvLyBsb2NhbCBidWlsZHMgZG8gbm90IHRyeSB0byBwYXJzZSBAdmVyY2VsL3F1ZXVlJ3Mga2V5cmluZyBkZXBlbmRlbmN5XG4gICAgICAgIC8vIHRyZWUuXG4gICAgICAgIC4uLlZFUkNFTF9XT1JMRF9TRVJWRVJfRVhURVJOQUxfUEFDS0FHRVMsXG4gICAgICBdKSxcbiAgICBdO1xuICAgIGNvbnN0IGV4aXN0aW5nQ29tcGlsZXIgPSBuZXh0Q29uZmlnLmNvbXBpbGVyID8/IHt9O1xuICAgIGNvbnN0IGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZSA9IChcbiAgICAgIGV4aXN0aW5nQ29tcGlsZXIgYXMge1xuICAgICAgICBydW5BZnRlclByb2R1Y3Rpb25Db21waWxlPzogKG1ldGFkYXRhOiB7XG4gICAgICAgICAgcHJvamVjdERpcjogc3RyaW5nO1xuICAgICAgICAgIGRpc3REaXI6IHN0cmluZztcbiAgICAgICAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICAgIH1cbiAgICApLnJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU7XG5cbiAgICBjb25zdCBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IEFycmF5LmlzQXJyYXkoXG4gICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICApXG4gICAgICA/IG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlc1xuICAgICAgOiBbXTtcbiAgICBsZXQgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuXG4gICAgaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlczogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBwYWNrYWdlTmFtZSBvZiBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcykge1xuICAgICAgICBpZiAoUFNFVURPX0VYVEVSTkFMX1BBQ0tBR0VTLmhhcyhwYWNrYWdlTmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGV0ZWN0ZWQgPSBhd2FpdCBkZXRlY3RTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UoXG4gICAgICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgICAgIHByb2Nlc3MuY3dkKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChkZXRlY3RlZCkge1xuICAgICAgICAgICAgZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzLnB1c2goZGV0ZWN0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gQmVzdC1lZmZvcnQgb25seS4gTmV2ZXIgYmxvY2sgY29uZmlnIGdlbmVyYXRpb24uXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQYWNrYWdlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzLm1hcCgoZGV0ZWN0ZWQpID0+IGRldGVjdGVkLnBhY2thZ2VOYW1lKVxuICAgICAgICApO1xuICAgICAgICBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID1cbiAgICAgICAgICBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5maWx0ZXIoXG4gICAgICAgICAgICAocGFja2FnZU5hbWUpID0+ICFyZW1vdmVkUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKVxuICAgICAgICAgICk7XG4gICAgICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXM7XG4gICAgICAgIHdhcm5BYm91dEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyhkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9hZGVyIGlmIHR1cmJvcGFjayBpcyBiZWluZyB1c2VkXG4gICAgaWYgKCFuZXh0Q29uZmlnLnR1cmJvcGFjaykge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcykge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzIGFzIGFueTtcbiAgICBjb25zdCB3b3JraW5nRGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBuZXh0VmVyc2lvbiA9IHJlc29sdmVOZXh0VmVyc2lvbih3b3JraW5nRGlyKTtcbiAgICBjb25zdCBjb25maWd1cmVkUHJvamVjdFJvb3QgPVxuICAgICAgbmV4dENvbmZpZy5vdXRwdXRGaWxlVHJhY2luZ1Jvb3QgPz8gbmV4dENvbmZpZy50dXJib3BhY2s/LnJvb3Q7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBjb25maWd1cmVkUHJvamVjdFJvb3RcbiAgICAgID8gcmVzb2x2ZUNvbmZpZ3VyZWRQcm9qZWN0Um9vdCh3b3JraW5nRGlyLCBjb25maWd1cmVkUHJvamVjdFJvb3QpXG4gICAgICA6IHJlc29sdmVQcm9qZWN0Um9vdCh3b3JraW5nRGlyKTtcbiAgICBjb25zdCBzdXBwb3J0c1R1cmJvQ29uZGl0aW9uID0gc2VtdmVyLmd0ZShuZXh0VmVyc2lvbiwgJ3YxNi4wLjAnKTtcblxuICAgIGNvbnN0IHNob3VsZFdhdGNoID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG4gICAgbGV0IHdvcmtmbG93QnVpbGRlclByb21pc2U6IFByb21pc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkaXN0RGlyID0gbmV4dENvbmZpZy5kaXN0RGlyIHx8ICcubmV4dCc7XG5cbiAgICBuZXh0Q29uZmlnLmNvbXBpbGVyID0ge1xuICAgICAgLi4uZXhpc3RpbmdDb21waWxlcixcbiAgICAgIHJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU6IGFzeW5jIChtZXRhZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKSB7XG4gICAgICAgICAgYXdhaXQgZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKG1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0KG1ldGFkYXRhKTtcbiAgICAgICAgcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGdldFdvcmtmbG93QnVpbGRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSkge1xuICAgICAgICB3b3JrZmxvd0J1aWxkZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBOZXh0QnVpbGRlciA9IGF3YWl0IGdldE5leHRCdWlsZGVyKG5leHRWZXJzaW9uKTtcbiAgICAgICAgICByZXR1cm4gbmV3IE5leHRCdWlsZGVyKHtcbiAgICAgICAgICAgIHdhdGNoOiBzaG91bGRXYXRjaCxcbiAgICAgICAgICAgIC8vIGdldElucHV0RmlsZXMgZmlsdGVycyB0aGUgcHJvamVjdCB0byBOZXh0LmpzIGVudHJ5cG9pbnRzXG4gICAgICAgICAgICBkaXJzOiBbJy4nXSxcbiAgICAgICAgICAgIHBhZ2VFeHRlbnNpb25zOiBuZXh0Q29uZmlnLnBhZ2VFeHRlbnNpb25zID8/IFtcbiAgICAgICAgICAgICAgJ3RzeCcsXG4gICAgICAgICAgICAgICd0cycsXG4gICAgICAgICAgICAgICdqc3gnLFxuICAgICAgICAgICAgICAnanMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByb2plY3RSb290LFxuICAgICAgICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogd29ya2luZ0RpcixcbiAgICAgICAgICAgIHdvcmtpbmdEaXIsXG4gICAgICAgICAgICBkaXN0RGlyLFxuICAgICAgICAgICAgYmFzZVBhdGg6IHdvcmtmbG93QmFzZVBhdGgsXG4gICAgICAgICAgICBkaWFnbm9zdGljc0RpcjogYCR7ZGlzdERpcn0vZGlhZ25vc3RpY3NgLFxuICAgICAgICAgICAgYnVpbGRUYXJnZXQ6ICduZXh0JyxcbiAgICAgICAgICAgIHdvcmtmbG93c0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzdGVwc0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICB3ZWJob29rQnVuZGxlUGF0aDogJycsIC8vIG5vZGUgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzb3VyY2VtYXA6IHdvcmtmbG93cz8uc291cmNlbWFwLFxuICAgICAgICAgICAgZXh0ZXJuYWxQYWNrYWdlczogW1xuICAgICAgICAgICAgICAvLyBzZXJ2ZXItb25seSBhbmQgY2xpZW50LW9ubHkgYXJlIHBzZXVkby1wYWNrYWdlcyBoYW5kbGVkIGJ5IE5leHQuanNcbiAgICAgICAgICAgICAgLy8gZHVyaW5nIGl0cyBidWlsZCBwcm9jZXNzLiBXZSBtYXJrIHRoZW0gYXMgZXh0ZXJuYWwgdG8gcHJldmVudCBlc2J1aWxkXG4gICAgICAgICAgICAgIC8vIGZyb20gZmFpbGluZyB3aGVuIGJ1bmRsaW5nIGNvZGUgdGhhdCBpbXBvcnRzIHRoZW0uXG4gICAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2dldHRpbmctc3RhcnRlZC9zZXJ2ZXItYW5kLWNsaWVudC1jb21wb25lbnRzXG4gICAgICAgICAgICAgICdzZXJ2ZXItb25seScsXG4gICAgICAgICAgICAgICdjbGllbnQtb25seScsXG4gICAgICAgICAgICAgIC4uLmVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya2Zsb3dCdWlsZGVyUHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgW1xuICAgICAgJyoudHN4JyxcbiAgICAgICcqLnRzJyxcbiAgICAgICcqLmpzeCcsXG4gICAgICAnKi5qcycsXG4gICAgICAnKi5tanMnLFxuICAgICAgJyoubXRzJyxcbiAgICAgICcqLmNqcycsXG4gICAgICAnKi5jdHMnLFxuICAgIF0pIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzW2tleV0gPSB7XG4gICAgICAgIC4uLihzdXBwb3J0c1R1cmJvQ29uZGl0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbjoge1xuICAgICAgICAgICAgICAgIC8vIFVzZSAnYWxsJyB0byBjb21iaW5lOiBtdXN0IG1hdGNoIGNvbnRlbnQgQU5EIG11c3QgTk9UIGJlIGluIGdlbmVyYXRlZCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gTWVyZ2Ugd2l0aCBhbnkgZXhpc3RpbmcgJ2FsbCcgY29uZGl0aW9ucyBmcm9tIHVzZXIgY29uZmlnXG4gICAgICAgICAgICAgICAgYWxsOiBbXG4gICAgICAgICAgICAgICAgICAuLi4oZXhpc3RpbmdSdWxlc1trZXldPy5jb25kaXRpb24/LmFsbCB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBmcm9tIHRyYW5zZm9ybWF0aW9uXG4gICAgICAgICAgICAgICAgICB7IG5vdDogeyBwYXRoOiAvWy9cXFxcXVxcLndlbGwta25vd25bL1xcXFxdd29ya2Zsb3dbL1xcXFxdLyB9IH0sXG4gICAgICAgICAgICAgICAgICAvLyBNYXRjaCBmaWxlcyB3aXRoIHdvcmtmbG93IGRpcmVjdGl2ZXMgb3IgY3VzdG9tIHNlcmlhbGl6YXRpb24gcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgIC8vIFVzZXMgYmFja3JlZmVyZW5jZXMgKFxcMiwgXFwzKSB0byBlbnN1cmUgbWF0Y2hpbmcgcXVvdGUgdHlwZXNcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAvKHVzZSB3b3JrZmxvd3x1c2Ugc3RlcHxmcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMnxTeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwzXFxzKlxcKSkvLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICBsb2FkZXJzOiBbLi4uKGV4aXN0aW5nUnVsZXNba2V5XT8ubG9hZGVycyB8fCBbXSksIGxvYWRlclBhdGhdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBmb3Igd2VicGFja1xuICAgIGNvbnN0IGV4aXN0aW5nV2VicGFja01vZGlmeSA9IG5leHRDb25maWcud2VicGFjaztcbiAgICBuZXh0Q29uZmlnLndlYnBhY2sgPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgW3dlYnBhY2tDb25maWddID0gYXJncztcbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIC8vIGxvYWRlcnMgaW4gd2VicGFjayBhcHBseSBib3R0b20tPnVwIHNvIGVuc3VyZVxuICAgICAgLy8gb3VycyBjb21lcyBiZWZvcmUgdGhlIGRlZmF1bHQgc3djIHRyYW5zZm9ybVxuICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMucHVzaCh7XG4gICAgICAgIHRlc3Q6IC8uKlxcLihtanN8Y2pzfGN0c3x0c3x0c3h8anN8anN4KSQvLFxuICAgICAgICBsb2FkZXI6IGxvYWRlclBhdGgsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGV4aXN0aW5nV2VicGFja01vZGlmeVxuICAgICAgICA/IChleGlzdGluZ1dlYnBhY2tNb2RpZnkoLi4uYXJncykgPz8gd2VicGFja0NvbmZpZylcbiAgICAgICAgOiB3ZWJwYWNrQ29uZmlnO1xuICAgIH07XG4gICAgLy8gb25seSBydW4gdGhpcyBpbiB0aGUgbWFpbiBwcm9jZXNzIHNvIGl0IG9ubHkgcnVucyBvbmNlXG4gICAgLy8gYXMgTmV4dC5qcyB1c2VzIGNoaWxkIHByb2Nlc3NlcyBmb3IgZGlmZmVyZW50IGJ1aWxkc1xuICAgIGlmIChcbiAgICAgICFwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX1BSSVZBVEVfQlVJTFQgJiZcbiAgICAgIHBoYXNlICE9PSAncGhhc2UtcHJvZHVjdGlvbi1zZXJ2ZXInXG4gICAgKSB7XG4gICAgICBjb25zdCB3b3JrZmxvd0J1aWxkZXIgPSBhd2FpdCBnZXRXb3JrZmxvd0J1aWxkZXIoKTtcblxuICAgICAgYXdhaXQgd29ya2Zsb3dCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX1BSSVZBVEVfQlVJTFQgPSAnMSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDb25maWc7XG4gIH07XG59XG4iXX0=
|
package/dist/loader.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export declare function injectWorkflowTargetWorldImport(source: string, buildersModule?: Pick<typeof import('@workflow/builders'), 'ensureWorkflowTargetWorldEnv' | 'WORKFLOW_WORLD_TARGET_MODULE'>): Promise<string>;
|
|
2
1
|
export declare function getLoaderSourceMapOptions(filename: string, sourceMap: any): {
|
|
3
2
|
inputSourceMap: any;
|
|
4
3
|
sourceMaps: boolean;
|
|
@@ -10,6 +9,6 @@ type WorkflowLoaderContext = {
|
|
|
10
9
|
addDependency?: (dependency: string) => void;
|
|
11
10
|
addBuildDependency?: (dependency: string) => void;
|
|
12
11
|
};
|
|
13
|
-
export default function workflowLoader(this: WorkflowLoaderContext, source: string | Buffer, sourceMap: any): string | Promise<string> |
|
|
12
|
+
export default function workflowLoader(this: WorkflowLoaderContext, source: string | Buffer, sourceMap: any): string | Promise<string> | void;
|
|
14
13
|
export {};
|
|
15
14
|
//# sourceMappingURL=loader.d.ts.map
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AA0MA,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;;;;EAOzE;AAKD,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CACZ,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,KACZ,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAwGjC"}
|
package/dist/loader.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.injectWorkflowTargetWorldImport = injectWorkflowTargetWorldImport;
|
|
4
3
|
exports.getLoaderSourceMapOptions = getLoaderSourceMapOptions;
|
|
5
4
|
exports.default = workflowLoader;
|
|
6
5
|
const node_fs_1 = require("node:fs");
|
|
@@ -93,26 +92,6 @@ async function resolveWorkflowAliasPath(filePath, workingDir) {
|
|
|
93
92
|
const { resolveWorkflowAliasRelativePath } = await getBuildersModule();
|
|
94
93
|
return resolveWorkflowAliasRelativePath(filePath, workingDir);
|
|
95
94
|
}
|
|
96
|
-
async function injectWorkflowTargetWorldImport(source, buildersModule) {
|
|
97
|
-
const targetModule = buildersModule?.WORKFLOW_WORLD_TARGET_MODULE ??
|
|
98
|
-
'@workflow/core/runtime/world-target';
|
|
99
|
-
if (!source.includes(targetModule)) {
|
|
100
|
-
return source;
|
|
101
|
-
}
|
|
102
|
-
const { ensureWorkflowTargetWorldEnv, WORKFLOW_WORLD_TARGET_MODULE } = buildersModule ?? (await getBuildersModule());
|
|
103
|
-
return source.replaceAll(WORKFLOW_WORLD_TARGET_MODULE, ensureWorkflowTargetWorldEnv());
|
|
104
|
-
}
|
|
105
|
-
function parseTransformMap(resultMap, fallbackMap) {
|
|
106
|
-
if (typeof resultMap !== 'string') {
|
|
107
|
-
return resultMap || fallbackMap;
|
|
108
|
-
}
|
|
109
|
-
try {
|
|
110
|
-
return JSON.parse(resultMap);
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
return resultMap;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
95
|
async function getRelativeFilenameForSwc(filename, workingDir) {
|
|
117
96
|
const normalizedWorkingDir = workingDir
|
|
118
97
|
.replace(/\\/g, '/')
|
|
@@ -171,17 +150,17 @@ function workflowLoader(source, sourceMap) {
|
|
|
171
150
|
const normalizedSource = source.toString();
|
|
172
151
|
const workingDir = process.cwd();
|
|
173
152
|
const swcPluginPath = registerTransformDependencies(this);
|
|
174
|
-
const sourceForTransform =
|
|
153
|
+
const sourceForTransform = normalizedSource;
|
|
175
154
|
const isGeneratedWorkflowFile = await checkGeneratedFile(filename);
|
|
176
155
|
// Skip generated workflow route files to avoid re-processing them.
|
|
177
156
|
if (isGeneratedWorkflowFile) {
|
|
178
|
-
return { code:
|
|
157
|
+
return { code: normalizedSource, map: sourceMap };
|
|
179
158
|
}
|
|
180
159
|
// Detect workflow patterns in the source code.
|
|
181
160
|
const patterns = await detectPatterns(sourceForTransform);
|
|
182
161
|
// Check if file needs transformation based on patterns and path
|
|
183
162
|
if (!(await checkShouldTransform(filename, patterns))) {
|
|
184
|
-
return { code:
|
|
163
|
+
return { code: normalizedSource, map: sourceMap };
|
|
185
164
|
}
|
|
186
165
|
const isTypeScript = filename.endsWith('.ts') ||
|
|
187
166
|
filename.endsWith('.tsx') ||
|
|
@@ -231,7 +210,18 @@ function workflowLoader(source, sourceMap) {
|
|
|
231
210
|
minify: false,
|
|
232
211
|
...getLoaderSourceMapOptions(filename, sourceMap),
|
|
233
212
|
});
|
|
234
|
-
|
|
213
|
+
let transformedMap = sourceMap;
|
|
214
|
+
if (typeof result.map === 'string') {
|
|
215
|
+
try {
|
|
216
|
+
transformedMap = JSON.parse(result.map);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
transformedMap = result.map;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else if (result.map) {
|
|
223
|
+
transformedMap = result.map;
|
|
224
|
+
}
|
|
235
225
|
return { code: result.code, map: transformedMap };
|
|
236
226
|
};
|
|
237
227
|
if (!callback) {
|
|
@@ -243,4 +233,4 @@ function workflowLoader(source, sourceMap) {
|
|
|
243
233
|
callback(error instanceof Error ? error : new Error(String(error)));
|
|
244
234
|
});
|
|
245
235
|
}
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1KQSwwRUFxQkM7QUFxRUQsOERBT0M7QUFnQkQsaUNBb0dDO0FBeFdELHFDQUFxQztBQUNyQyx5Q0FBb0Q7QUFDcEQsb0NBQXNDO0FBTXRDLHlGQUF5RjtBQUN6RixNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUdsQyxDQUFDO0FBQ0oseUdBQXlHO0FBQ3pHLElBQUksb0JBQW9CLEdBQStDLElBQUksQ0FBQztBQUs1RSxJQUFJLDhCQUE4QixHQUFvQyxJQUFJLENBQUM7QUFFM0UsU0FBUyxzQkFBc0IsQ0FDN0IsYUFBb0MsRUFDcEMsY0FBc0I7SUFFdEIsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFrQixFQUFFLGNBQXNCO0lBQzdELElBQUksSUFBQSxvQkFBVSxFQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsK0JBQStCO0lBQ3RDLElBQUksOEJBQThCLEVBQUUsQ0FBQztRQUNuQyxPQUFPLDhCQUE4QixDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDOUQsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUM1QyxzQ0FBc0MsQ0FDdkMsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRW5FLCtEQUErRDtJQUMvRCxvRUFBb0U7SUFDcEUs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aUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsaUJBQWlCO2lCQUN0RDthQUNGO1lBQ0QsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3BELENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssR0FBRyxFQUFFO1NBQ1AsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pELEtBQUssQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLFFBQVEsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSAnQHN3Yy9jb3JlJztcblxudHlwZSBEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGggPVxuICBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLkRlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aDtcbnR5cGUgV29ya2Zsb3dQYXR0ZXJuTWF0Y2ggPSBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLldvcmtmbG93UGF0dGVybk1hdGNoO1xuXG4vLyBDYWNoZSBkZWNvcmF0b3Igb3B0aW9ucyBwZXIgd29ya2luZyBkaXJlY3RvcnkgdG8gYXZvaWQgcmVhZGluZyB0c2NvbmZpZyBmb3IgZXZlcnkgZmlsZVxuY29uc3QgZGVjb3JhdG9yT3B0aW9uc0NhY2hlID0gbmV3IE1hcDxcbiAgc3RyaW5nLFxuICBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD5cbj4oKTtcbi8vIENhY2hlIGZvciBzaGFyZWQgdXRpbGl0aWVzIGZyb20gQHdvcmtmbG93L2J1aWxkZXJzIChFU00gbW9kdWxlIGxvYWRlZCBkeW5hbWljYWxseSBpbiBDb21tb25KUyBjb250ZXh0KVxubGV0IGNhY2hlZEJ1aWxkZXJzTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSB8IG51bGwgPSBudWxsO1xudHlwZSBMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMgPSB7XG4gIHN3Y1BsdWdpblBhdGg6IHN0cmluZztcbiAgZmlsZXM6IHN0cmluZ1tdO1xufTtcbmxldCBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM6IExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiByZWdpc3RlckZpbGVEZXBlbmRlbmN5KFxuICBsb2FkZXJDb250ZXh0OiBXb3JrZmxvd0xvYWRlckNvbnRleHQsXG4gIGRlcGVuZGVuY3lQYXRoOiBzdHJpbmdcbik6IHZvaWQge1xuICBsb2FkZXJDb250ZXh0LmFkZERlcGVuZGVuY3k/LihkZXBlbmRlbmN5UGF0aCk7XG4gIGxvYWRlckNvbnRleHQuYWRkQnVpbGREZXBlbmRlbmN5Py4oZGVwZW5kZW5jeVBhdGgpO1xufVxuXG5mdW5jdGlvbiBhZGRJZkV4aXN0cyhmaWxlczogU2V0PHN0cmluZz4sIGRlcGVuZGVuY3lQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGV4aXN0c1N5bmMoZGVwZW5kZW5jeVBhdGgpKSB7XG4gICAgZmlsZXMuYWRkKGRlcGVuZGVuY3lQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKCk6IExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyB7XG4gIGlmIChjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMpIHtcbiAgICByZXR1cm4gY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzO1xuICB9XG5cbiAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L3N3Yy1wbHVnaW4nKTtcbiAgY29uc3Qgc3djUGx1Z2luQnVpbGRIYXNoUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShcbiAgICAnQHdvcmtmbG93L3N3Yy1wbHVnaW4vYnVpbGQtaGFzaC5qc29uJ1xuICApO1xuICBjb25zdCB3b3JrZmxvd0J1aWxkZXJzUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L2J1aWxkZXJzJyk7XG5cbiAgLy8gRGVyaXZlIHBhY2thZ2UuanNvbiBwYXRocyBmcm9tIHJlc29sdmVkIGVudHJ5cG9pbnRzIHRvIGF2b2lkXG4gIC8vIFR1cmJvcGFjayBsb2FkZXItZXZhbCBmYWlsdXJlcyBhcm91bmQgLi4vcGFja2FnZS5qc29uIHJlc29sdXRpb24uXG4gIGNvbnN0IHN3Y1BsdWdpblBhY2thZ2VKc29uUGF0aCA9IGpvaW4oZGlybmFtZShzd2NQbHVnaW5QYXRoKSwgJ3BhY2thZ2UuanNvbicpO1xuICBjb25zdCB3b3JrZmxvd0J1aWxkZXJzUGFja2FnZUpzb25QYXRoID0gam9pbihcbiAgICBkaXJuYW1lKHdvcmtmbG93QnVpbGRlcnNQYXRoKSxcbiAgICAnLi4vcGFja2FnZS5qc29uJ1xuICApO1xuXG4gIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICBfX2ZpbGVuYW1lLFxuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgc3djUGx1Z2luQnVpbGRIYXNoUGF0aCxcbiAgICB3b3JrZmxvd0J1aWxkZXJzUGF0aCxcbiAgXSk7XG4gIGFkZElmRXhpc3RzKGZpbGVzLCBzd2NQbHVnaW5QYWNrYWdlSnNvblBhdGgpO1xuICBhZGRJZkV4aXN0cyhmaWxlcywgd29ya2Zsb3dCdWlsZGVyc1BhY2thZ2VKc29uUGF0aCk7XG5cbiAgY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzID0ge1xuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgZmlsZXM6IEFycmF5LmZyb20oZmlsZXMpLFxuICB9O1xuICByZXR1cm4gY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlclRyYW5zZm9ybURlcGVuZGVuY2llcyhcbiAgbG9hZGVyQ29udGV4dDogV29ya2Zsb3dMb2FkZXJDb250ZXh0XG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGF0aWNEZXBlbmRlbmNpZXMgPSByZXNvbHZlTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKCk7XG4gIGZvciAoY29uc3QgZGVwZW5kZW5jeVBhdGggb2Ygc3RhdGljRGVwZW5kZW5jaWVzLmZpbGVzKSB7XG4gICAgcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeShsb2FkZXJDb250ZXh0LCBkZXBlbmRlbmN5UGF0aCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGljRGVwZW5kZW5jaWVzLnN3Y1BsdWdpblBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJ1aWxkZXJzTW9kdWxlKCk6IFByb21pc2U8XG4gIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpXG4+IHtcbiAgaWYgKGNhY2hlZEJ1aWxkZXJzTW9kdWxlKSB7XG4gICAgcmV0dXJuIGNhY2hlZEJ1aWxkZXJzTW9kdWxlO1xuICB9XG4gIC8vIER5bmFtaWMgaW1wb3J0IHRvIGhhbmRsZSBFU00gbW9kdWxlIGZyb20gQ29tbW9uSlMgY29udGV4dFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6IE5lZWQgdG8gdXNlIGV2YWwgaGVyZSB0byBhdm9pZCBUeXBlU2NyaXB0IGZyb20gdHJhbnNwaWxpbmcgdGhlIGltcG9ydCBzdGF0ZW1lbnQgaW50byBgcmVxdWlyZSgpYFxuICBjYWNoZWRCdWlsZGVyc01vZHVsZSA9IChhd2FpdCBldmFsKFxuICAgICdpbXBvcnQoXCJAd29ya2Zsb3cvYnVpbGRlcnNcIiknXG4gICkpIGFzIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpO1xuICByZXR1cm4gY2FjaGVkQnVpbGRlcnNNb2R1bGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldERlY29yYXRvck9wdGlvbnMoXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGg+IHtcbiAgY29uc3QgY2FjaGVkID0gZGVjb3JhdG9yT3B0aW9uc0NhY2hlLmdldCh3b3JraW5nRGlyKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICBjb25zdCBwcm9taXNlID0gKGFzeW5jICgpOiBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD4gPT4ge1xuICAgIGNvbnN0IHsgZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoIH0gPVxuICAgICAgYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgICByZXR1cm4gZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoKHdvcmtpbmdEaXIpO1xuICB9KSgpO1xuXG4gIGRlY29yYXRvck9wdGlvbnNDYWNoZS5zZXQod29ya2luZ0RpciwgcHJvbWlzZSk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8V29ya2Zsb3dQYXR0ZXJuTWF0Y2g+IHtcbiAgY29uc3QgeyBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja0dlbmVyYXRlZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUoZmlsZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja1Nob3VsZFRyYW5zZm9ybShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcGF0dGVybnM6IFdvcmtmbG93UGF0dGVybk1hdGNoXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBzaG91bGRUcmFuc2Zvcm1GaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gc2hvdWxkVHJhbnNmb3JtRmlsZShmaWxlUGF0aCwgcGF0dGVybnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZU1vZHVsZVNwZWNpZmllciB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoZmlsZVBhdGgsIHByb2plY3RSb290KS5tb2R1bGVTcGVjaWZpZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3JrZmxvd0FsaWFzUGF0aChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoZmlsZVBhdGgsIHdvcmtpbmdEaXIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5qZWN0V29ya2Zsb3dUYXJnZXRXb3JsZEltcG9ydChcbiAgc291cmNlOiBzdHJpbmcsXG4gIGJ1aWxkZXJzTW9kdWxlPzogUGljazxcbiAgICB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSxcbiAgICAnZW5zdXJlV29ya2Zsb3dUYXJnZXRXb3JsZEVudicgfCAnV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSdcbiAgPlxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgdGFyZ2V0TW9kdWxlID1cbiAgICBidWlsZGVyc01vZHVsZT8uV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSA/P1xuICAgICdAd29ya2Zsb3cvY29yZS9ydW50aW1lL3dvcmxkLXRhcmdldCc7XG4gIGlmICghc291cmNlLmluY2x1ZGVzKHRhcmdldE1vZHVsZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3QgeyBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52LCBXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFIH0gPVxuICAgIGJ1aWxkZXJzTW9kdWxlID8/IChhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpKTtcblxuICByZXR1cm4gc291cmNlLnJlcGxhY2VBbGwoXG4gICAgV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSxcbiAgICBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52KClcbiAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm1NYXAocmVzdWx0TWFwOiB1bmtub3duLCBmYWxsYmFja01hcDogYW55KTogYW55IHtcbiAgaWYgKHR5cGVvZiByZXN1bHRNYXAgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHJlc3VsdE1hcCB8fCBmYWxsYmFja01hcDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0TWFwKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHJlc3VsdE1hcDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZWxhdGl2ZUZpbGVuYW1lRm9yU3djKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gd29ya2luZ0RpclxuICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVwYXRoID0gZmlsZW5hbWUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIC8vIFdpbmRvd3MgZml4OiBVc2UgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uIHRvIHdvcmsgYXJvdW5kIGRyaXZlIGxldHRlciBjYXNpbmcgaXNzdWVzXG4gIGNvbnN0IGxvd2VyV2QgPSBub3JtYWxpemVkV29ya2luZ0Rpci50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBsb3dlclBhdGggPSBub3JtYWxpemVkRmlsZXBhdGgudG9Mb3dlckNhc2UoKTtcblxuICBsZXQgcmVsYXRpdmVGaWxlbmFtZTogc3RyaW5nO1xuICBpZiAobG93ZXJQYXRoLnN0YXJ0c1dpdGgoYCR7bG93ZXJXZH0vYCkpIHtcbiAgICAvLyBGaWxlIGlzIHVuZGVyIHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFudWFsbHkgY2FsY3VsYXRlIHJlbGF0aXZlIHBhdGhcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gbm9ybWFsaXplZEZpbGVwYXRoLnN1YnN0cmluZyhcbiAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLmxlbmd0aCArIDFcbiAgICApO1xuICB9IGVsc2UgaWYgKGxvd2VyUGF0aCA9PT0gbG93ZXJXZCkge1xuICAgIC8vIEZpbGUgSVMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IChzaG91bGRuJ3QgaGFwcGVuKVxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSAnLic7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHJlbGF0aXZlKCkgZm9yIGZpbGVzIG91dHNpZGUgd29ya2luZyBkaXJlY3RvcnlcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gcmVsYXRpdmUod29ya2luZ0RpciwgZmlsZW5hbWUpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgIGlmIChyZWxhdGl2ZUZpbGVuYW1lLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICBjb25zdCBhbGlhc2VkUmVsYXRpdmVQYXRoID0gYXdhaXQgcmVzb2x2ZVdvcmtmbG93QWxpYXNQYXRoKFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgd29ya2luZ0RpclxuICAgICAgKTtcbiAgICAgIGlmIChhbGlhc2VkUmVsYXRpdmVQYXRoKSB7XG4gICAgICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBhbGlhc2VkUmVsYXRpdmVQYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVsYXRpdmVGaWxlbmFtZSA9IHJlbGF0aXZlRmlsZW5hbWVcbiAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcuLicpXG4gICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5hbCBzYWZldHkgY2hlY2sgLSBlbnN1cmUgd2UgbmV2ZXIgcGFzcyBhbiBhYnNvbHV0ZSBwYXRoIHRvIFNXQ1xuICBpZiAocmVsYXRpdmVGaWxlbmFtZS5pbmNsdWRlcygnOicpIHx8IHJlbGF0aXZlRmlsZW5hbWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgcmFyZWx5IGhhcHBlbiwgYnV0IHVzZSBmaWxlbmFtZSBzcGxpdCBhcyBsYXN0IHJlc29ydFxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBub3JtYWxpemVkRmlsZXBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCAndW5rbm93bi50cyc7XG4gIH1cblxuICByZXR1cm4gcmVsYXRpdmVGaWxlbmFtZTtcbn1cblxuZnVuY3Rpb24gaXNOb2RlTW9kdWxlc1BhdGgoZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gLyg/Ol58Wy9cXFxcXSlub2RlX21vZHVsZXMoPzpbL1xcXFxdfCQpLy50ZXN0KGZpbGVuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvYWRlclNvdXJjZU1hcE9wdGlvbnMoZmlsZW5hbWU6IHN0cmluZywgc291cmNlTWFwOiBhbnkpIHtcbiAgY29uc3Qgc2hvdWxkRW1pdFNvdXJjZU1hcHMgPSAhaXNOb2RlTW9kdWxlc1BhdGgoZmlsZW5hbWUpO1xuICByZXR1cm4ge1xuICAgIGlucHV0U291cmNlTWFwOiBzaG91bGRFbWl0U291cmNlTWFwcyA/IChzb3VyY2VNYXAgPz8gZmFsc2UpIDogZmFsc2UsXG4gICAgc291cmNlTWFwczogc2hvdWxkRW1pdFNvdXJjZU1hcHMsXG4gICAgaW5saW5lU291cmNlc0NvbnRlbnQ6IHNob3VsZEVtaXRTb3VyY2VNYXBzLFxuICB9O1xufVxuXG4vLyBUaGlzIGxvYWRlciBhcHBsaWVzIHRoZSBcInVzZSB3b3JrZmxvd1wiL1widXNlIHN0ZXBcIiB0cmFuc2Zvcm0uXG4vLyBBbGwgZmlsZXMgdXNlIHN0ZXAgbW9kZTsgdGhlIFNXQyBwbHVnaW4gZGVjaWRlcyBwZXItZnVuY3Rpb24gd2hldGhlclxuLy8gdG8gZW1pdCB3b3JrZmxvdyBvciBzdGVwIGJpbmRpbmdzIGJhc2VkIG9uIHRoZSBzb3VyY2UncyBkaXJlY3RpdmVzLlxudHlwZSBXb3JrZmxvd0xvYWRlckNvbnRleHQgPSB7XG4gIHJlc291cmNlUGF0aDogc3RyaW5nO1xuICBhc3luYz86ICgpID0+IChcbiAgICBlcnJvcjogRXJyb3IgfCBudWxsLFxuICAgIGNvbnRlbnQ/OiBzdHJpbmcsXG4gICAgc291cmNlTWFwPzogYW55XG4gICkgPT4gdm9pZDtcbiAgYWRkRGVwZW5kZW5jeT86IChkZXBlbmRlbmN5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEJ1aWxkRGVwZW5kZW5jeT86IChkZXBlbmRlbmN5OiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3b3JrZmxvd0xvYWRlcihcbiAgdGhpczogV29ya2Zsb3dMb2FkZXJDb250ZXh0LFxuICBzb3VyY2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgc291cmNlTWFwOiBhbnlcbik6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5hc3luYz8uKCk7XG4gIGNvbnN0IHJ1biA9IGFzeW5jICgpOiBQcm9taXNlPHsgY29kZTogc3RyaW5nOyBtYXA6IGFueSB9PiA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnJlc291cmNlUGF0aDtcbiAgICBjb25zdCBub3JtYWxpemVkU291cmNlID0gc291cmNlLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKHRoaXMpO1xuICAgIGNvbnN0IHNvdXJjZUZvclRyYW5zZm9ybSA9XG4gICAgICBhd2FpdCBpbmplY3RXb3JrZmxvd1RhcmdldFdvcmxkSW1wb3J0KG5vcm1hbGl6ZWRTb3VyY2UpO1xuXG4gICAgY29uc3QgaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUgPSBhd2FpdCBjaGVja0dlbmVyYXRlZEZpbGUoZmlsZW5hbWUpO1xuICAgIC8vIFNraXAgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzIHRvIGF2b2lkIHJlLXByb2Nlc3NpbmcgdGhlbS5cbiAgICBpZiAoaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUpIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IHNvdXJjZUZvclRyYW5zZm9ybSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3Qgd29ya2Zsb3cgcGF0dGVybnMgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgIGNvbnN0IHBhdHRlcm5zID0gYXdhaXQgZGV0ZWN0UGF0dGVybnMoc291cmNlRm9yVHJhbnNmb3JtKTtcblxuICAgIC8vIENoZWNrIGlmIGZpbGUgbmVlZHMgdHJhbnNmb3JtYXRpb24gYmFzZWQgb24gcGF0dGVybnMgYW5kIHBhdGhcbiAgICBpZiAoIShhd2FpdCBjaGVja1Nob3VsZFRyYW5zZm9ybShmaWxlbmFtZSwgcGF0dGVybnMpKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogc291cmNlRm9yVHJhbnNmb3JtLCBtYXA6IHNvdXJjZU1hcCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlzVHlwZVNjcmlwdCA9XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzJykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcudHN4JykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcubXRzJykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcuY3RzJyk7XG5cbiAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgZmlsZW5hbWUgZm9yIFNXQyBwbHVnaW5cbiAgICAvLyBUaGUgU1dDIHBsdWdpbiB1c2VzIGZpbGVuYW1lIHRvIGdlbmVyYXRlIHdvcmtmbG93SWQsIHNvIGl0IG11c3QgYmUgcmVsYXRpdmVcbiAgICBjb25zdCByZWxhdGl2ZUZpbGVuYW1lID0gYXdhaXQgZ2V0UmVsYXRpdmVGaWxlbmFtZUZvclN3YyhcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgd29ya2luZ0RpclxuICAgICk7XG5cbiAgICAvLyBHZXQgZGVjb3JhdG9yIG9wdGlvbnMgZnJvbSB0c2NvbmZpZyAoY2FjaGVkIHBlciB3b3JraW5nIGRpcmVjdG9yeSlcbiAgICBjb25zdCB7IG9wdGlvbnM6IGRlY29yYXRvck9wdGlvbnMsIGNvbmZpZ1BhdGggfSA9XG4gICAgICBhd2FpdCBnZXREZWNvcmF0b3JPcHRpb25zKHdvcmtpbmdEaXIpO1xuICAgIGlmIChjb25maWdQYXRoKSB7XG4gICAgICByZWdpc3RlckZpbGVEZXBlbmRlbmN5KHRoaXMsIGNvbmZpZ1BhdGgpO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgbW9kdWxlIHNwZWNpZmllciBmb3IgcGFja2FnZXMgKG5vZGVfbW9kdWxlcyBvciB3b3Jrc3BhY2UgcGFja2FnZXMpXG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gYXdhaXQgZ2V0TW9kdWxlU3BlY2lmaWVyKGZpbGVuYW1lLCB3b3JraW5nRGlyKTtcbiAgICBjb25zdCBtb2RlID0gJ3N0ZXAnO1xuXG4gICAgLy8gVHJhbnNmb3JtIHdpdGggU1dDXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhbnNmb3JtKHNvdXJjZUZvclRyYW5zZm9ybSwge1xuICAgICAgZmlsZW5hbWU6IHJlbGF0aXZlRmlsZW5hbWUsXG4gICAgICBqc2M6IHtcbiAgICAgICAgcGFyc2VyOiB7XG4gICAgICAgICAgLi4uKGlzVHlwZVNjcmlwdFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICAgICAgICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzeCcpLFxuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9ycyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgc3ludGF4OiAnZWNtYXNjcmlwdCcsXG4gICAgICAgICAgICAgICAganN4OiBmaWxlbmFtZS5lbmRzV2l0aCgnLmpzeCcpLFxuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9ycyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICAgIGV4cGVyaW1lbnRhbDoge1xuICAgICAgICAgIGNhY2hlUm9vdDogam9pbih3b3JraW5nRGlyLCAnLnN3YycpLFxuICAgICAgICAgIHBsdWdpbnM6IFtbc3djUGx1Z2luUGF0aCwgeyBtb2RlLCBtb2R1bGVTcGVjaWZpZXIgfV1dLFxuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgICByZWFjdDoge1xuICAgICAgICAgICAgcnVudGltZTogJ3ByZXNlcnZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxlZ2FjeURlY29yYXRvcjogZGVjb3JhdG9yT3B0aW9ucy5sZWdhY3lEZWNvcmF0b3IsXG4gICAgICAgICAgZGVjb3JhdG9yTWV0YWRhdGE6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9yTWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbWluaWZ5OiBmYWxzZSxcbiAgICAgIC4uLmdldExvYWRlclNvdXJjZU1hcE9wdGlvbnMoZmlsZW5hbWUsIHNvdXJjZU1hcCksXG4gICAgfSk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZE1hcCA9IHBhcnNlVHJhbnNmb3JtTWFwKHJlc3VsdC5tYXAsIHNvdXJjZU1hcCk7XG5cbiAgICByZXR1cm4geyBjb2RlOiByZXN1bHQuY29kZSwgbWFwOiB0cmFuc2Zvcm1lZE1hcCB9O1xuICB9O1xuXG4gIGlmICghY2FsbGJhY2spIHtcbiAgICByZXR1cm4gcnVuKCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQuY29kZSk7XG4gIH1cblxuICB2b2lkIHJ1bigpXG4gICAgLnRoZW4oKHJlc3VsdCkgPT4gY2FsbGJhY2sobnVsbCwgcmVzdWx0LmNvZGUsIHJlc3VsdC5tYXApKVxuICAgIC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIGNhbGxiYWNrKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSk7XG4gICAgfSk7XG59XG4iXX0=
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTBNQSw4REFPQztBQWdCRCxpQ0E0R0M7QUE3VUQscUNBQXFDO0FBQ3JDLHlDQUFvRDtBQUNwRCxvQ0FBc0M7QUFNdEMseUZBQXlGO0FBQ3pGLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBR2xDLENBQUM7QUFDSix5R0FBeUc7QUFDekcsSUFBSSxvQkFBb0IsR0FBK0MsSUFBSSxDQUFDO0FBSzVFLElBQUksOEJBQThCLEdBQW9DLElBQUksQ0FBQztBQUUzRSxTQUFTLHNCQUFzQixDQUM3QixhQUFvQyxFQUNwQyxjQUFzQjtJQUV0QixhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWtCLEVBQUUsY0FBc0I7SUFDN0QsSUFBSSxJQUFBLG9CQUFVLEVBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUMvQixLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUywrQkFBK0I7SUFDdEMsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1FBQ25DLE9BQU8sOEJBQThCLENBQUM7SUFDeEMsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM5RCxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQzVDLHNDQUFzQyxDQUN2QyxDQUFDO0lBQ0YsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFbkUsK0RBQStEO0lBQy9ELG9FQUFvRTtJQUNwRSxNQUFNLHdCQUF3QixH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QUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsS0FBSyxHQUFHLEVBQUU7U0FDUCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekQsS0FBSyxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsUUFBUSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICdAc3djL2NvcmUnO1xuXG50eXBlIERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aCA9XG4gIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuRGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoO1xudHlwZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCA9IGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuV29ya2Zsb3dQYXR0ZXJuTWF0Y2g7XG5cbi8vIENhY2hlIGRlY29yYXRvciBvcHRpb25zIHBlciB3b3JraW5nIGRpcmVjdG9yeSB0byBhdm9pZCByZWFkaW5nIHRzY29uZmlnIGZvciBldmVyeSBmaWxlXG5jb25zdCBkZWNvcmF0b3JPcHRpb25zQ2FjaGUgPSBuZXcgTWFwPFxuICBzdHJpbmcsXG4gIFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPlxuPigpO1xuLy8gQ2FjaGUgZm9yIHNoYXJlZCB1dGlsaXRpZXMgZnJvbSBAd29ya2Zsb3cvYnVpbGRlcnMgKEVTTSBtb2R1bGUgbG9hZGVkIGR5bmFtaWNhbGx5IGluIENvbW1vbkpTIGNvbnRleHQpXG5sZXQgY2FjaGVkQnVpbGRlcnNNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpIHwgbnVsbCA9IG51bGw7XG50eXBlIExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyA9IHtcbiAgc3djUGx1Z2luUGF0aDogc3RyaW5nO1xuICBmaWxlczogc3RyaW5nW107XG59O1xubGV0IGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llczogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRmlsZURlcGVuZGVuY3koXG4gIGxvYWRlckNvbnRleHQ6IFdvcmtmbG93TG9hZGVyQ29udGV4dCxcbiAgZGVwZW5kZW5jeVBhdGg6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGxvYWRlckNvbnRleHQuYWRkRGVwZW5kZW5jeT8uKGRlcGVuZGVuY3lQYXRoKTtcbiAgbG9hZGVyQ29udGV4dC5hZGRCdWlsZERlcGVuZGVuY3k/LihkZXBlbmRlbmN5UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGFkZElmRXhpc3RzKGZpbGVzOiBTZXQ8c3RyaW5nPiwgZGVwZW5kZW5jeVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXhpc3RzU3luYyhkZXBlbmRlbmN5UGF0aCkpIHtcbiAgICBmaWxlcy5hZGQoZGVwZW5kZW5jeVBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMoKTogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHtcbiAgaWYgKGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcykge1xuICAgIHJldHVybiBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM7XG4gIH1cblxuICBjb25zdCBzd2NQbHVnaW5QYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvc3djLXBsdWdpbicpO1xuICBjb25zdCBzd2NQbHVnaW5CdWlsZEhhc2hQYXRoID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICdAd29ya2Zsb3cvc3djLXBsdWdpbi9idWlsZC1oYXNoLmpzb24nXG4gICk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvYnVpbGRlcnMnKTtcblxuICAvLyBEZXJpdmUgcGFja2FnZS5qc29uIHBhdGhzIGZyb20gcmVzb2x2ZWQgZW50cnlwb2ludHMgdG8gYXZvaWRcbiAgLy8gVHVyYm9wYWNrIGxvYWRlci1ldmFsIGZhaWx1cmVzIGFyb3VuZCAuLi9wYWNrYWdlLmpzb24gcmVzb2x1dGlvbi5cbiAgY29uc3Qgc3djUGx1Z2luUGFja2FnZUpzb25QYXRoID0gam9pbihkaXJuYW1lKHN3Y1BsdWdpblBhdGgpLCAncGFja2FnZS5qc29uJyk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYWNrYWdlSnNvblBhdGggPSBqb2luKFxuICAgIGRpcm5hbWUod29ya2Zsb3dCdWlsZGVyc1BhdGgpLFxuICAgICcuLi9wYWNrYWdlLmpzb24nXG4gICk7XG5cbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgIF9fZmlsZW5hbWUsXG4gICAgc3djUGx1Z2luUGF0aCxcbiAgICBzd2NQbHVnaW5CdWlsZEhhc2hQYXRoLFxuICAgIHdvcmtmbG93QnVpbGRlcnNQYXRoLFxuICBdKTtcbiAgYWRkSWZFeGlzdHMoZmlsZXMsIHN3Y1BsdWdpblBhY2thZ2VKc29uUGF0aCk7XG4gIGFkZElmRXhpc3RzKGZpbGVzLCB3b3JrZmxvd0J1aWxkZXJzUGFja2FnZUpzb25QYXRoKTtcblxuICBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMgPSB7XG4gICAgc3djUGx1Z2luUGF0aCxcbiAgICBmaWxlczogQXJyYXkuZnJvbShmaWxlcyksXG4gIH07XG4gIHJldHVybiBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKFxuICBsb2FkZXJDb250ZXh0OiBXb3JrZmxvd0xvYWRlckNvbnRleHRcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YXRpY0RlcGVuZGVuY2llcyA9IHJlc29sdmVMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMoKTtcbiAgZm9yIChjb25zdCBkZXBlbmRlbmN5UGF0aCBvZiBzdGF0aWNEZXBlbmRlbmNpZXMuZmlsZXMpIHtcbiAgICByZWdpc3RlckZpbGVEZXBlbmRlbmN5KGxvYWRlckNvbnRleHQsIGRlcGVuZGVuY3lQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0aWNEZXBlbmRlbmNpZXMuc3djUGx1Z2luUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QnVpbGRlcnNNb2R1bGUoKTogUHJvbWlzZTxcbiAgdHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJylcbj4ge1xuICBpZiAoY2FjaGVkQnVpbGRlcnNNb2R1bGUpIHtcbiAgICByZXR1cm4gY2FjaGVkQnVpbGRlcnNNb2R1bGU7XG4gIH1cbiAgLy8gRHluYW1pYyBpbXBvcnQgdG8gaGFuZGxlIEVTTSBtb2R1bGUgZnJvbSBDb21tb25KUyBjb250ZXh0XG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3NlY3VyaXR5L25vR2xvYmFsRXZhbDogTmVlZCB0byB1c2UgZXZhbCBoZXJlIHRvIGF2b2lkIFR5cGVTY3JpcHQgZnJvbSB0cmFuc3BpbGluZyB0aGUgaW1wb3J0IHN0YXRlbWVudCBpbnRvIGByZXF1aXJlKClgXG4gIGNhY2hlZEJ1aWxkZXJzTW9kdWxlID0gKGF3YWl0IGV2YWwoXG4gICAgJ2ltcG9ydChcIkB3b3JrZmxvdy9idWlsZGVyc1wiKSdcbiAgKSkgYXMgdHlwZW9mIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJyk7XG4gIHJldHVybiBjYWNoZWRCdWlsZGVyc01vZHVsZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RGVjb3JhdG9yT3B0aW9ucyhcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD4ge1xuICBjb25zdCBjYWNoZWQgPSBkZWNvcmF0b3JPcHRpb25zQ2FjaGUuZ2V0KHdvcmtpbmdEaXIpO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuXG4gIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgKCk6IFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPiA9PiB7XG4gICAgY29uc3QgeyBnZXREZWNvcmF0b3JPcHRpb25zRm9yRGlyZWN0b3J5V2l0aENvbmZpZ1BhdGggfSA9XG4gICAgICBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICAgIHJldHVybiBnZXREZWNvcmF0b3JPcHRpb25zRm9yRGlyZWN0b3J5V2l0aENvbmZpZ1BhdGgod29ya2luZ0Rpcik7XG4gIH0pKCk7XG5cbiAgZGVjb3JhdG9yT3B0aW9uc0NhY2hlLnNldCh3b3JraW5nRGlyLCBwcm9taXNlKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdFBhdHRlcm5zKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxXb3JrZmxvd1BhdHRlcm5NYXRjaD4ge1xuICBjb25zdCB7IGRldGVjdFdvcmtmbG93UGF0dGVybnMgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrR2VuZXJhdGVkRmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZShmaWxlUGF0aCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrU2hvdWxkVHJhbnNmb3JtKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwYXR0ZXJuczogV29ya2Zsb3dQYXR0ZXJuTWF0Y2hcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IHNob3VsZFRyYW5zZm9ybUZpbGUgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiBzaG91bGRUcmFuc2Zvcm1GaWxlKGZpbGVQYXRoLCBwYXR0ZXJucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE1vZHVsZVNwZWNpZmllcihcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyByZXNvbHZlTW9kdWxlU3BlY2lmaWVyIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gcmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlUGF0aCwgcHJvamVjdFJvb3QpLm1vZHVsZVNwZWNpZmllcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdvcmtmbG93QWxpYXNQYXRoKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGggfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aChmaWxlUGF0aCwgd29ya2luZ0Rpcik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlbGF0aXZlRmlsZW5hbWVGb3JTd2MoXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFdvcmtpbmdEaXIgPSB3b3JraW5nRGlyXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgIC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICBjb25zdCBub3JtYWxpemVkRmlsZXBhdGggPSBmaWxlbmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgLy8gV2luZG93cyBmaXg6IFVzZSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24gdG8gd29yayBhcm91bmQgZHJpdmUgbGV0dGVyIGNhc2luZyBpc3N1ZXNcbiAgY29uc3QgbG93ZXJXZCA9IG5vcm1hbGl6ZWRXb3JraW5nRGlyLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGxvd2VyUGF0aCA9IG5vcm1hbGl6ZWRGaWxlcGF0aC50b0xvd2VyQ2FzZSgpO1xuXG4gIGxldCByZWxhdGl2ZUZpbGVuYW1lOiBzdHJpbmc7XG4gIGlmIChsb3dlclBhdGguc3RhcnRzV2l0aChgJHtsb3dlcldkfS9gKSkge1xuICAgIC8vIEZpbGUgaXMgdW5kZXIgd29ya2luZyBkaXJlY3RvcnkgLSBtYW51YWxseSBjYWxjdWxhdGUgcmVsYXRpdmUgcGF0aFxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBub3JtYWxpemVkRmlsZXBhdGguc3Vic3RyaW5nKFxuICAgICAgbm9ybWFsaXplZFdvcmtpbmdEaXIubGVuZ3RoICsgMVxuICAgICk7XG4gIH0gZWxzZSBpZiAobG93ZXJQYXRoID09PSBsb3dlcldkKSB7XG4gICAgLy8gRmlsZSBJUyB0aGUgd29ya2luZyBkaXJlY3RvcnkgKHNob3VsZG4ndCBoYXBwZW4pXG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9ICcuJztcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgcmVsYXRpdmUoKSBmb3IgZmlsZXMgb3V0c2lkZSB3b3JraW5nIGRpcmVjdG9yeVxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSByZWxhdGl2ZSh3b3JraW5nRGlyLCBmaWxlbmFtZSkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgaWYgKHJlbGF0aXZlRmlsZW5hbWUuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZWRSZWxhdGl2ZVBhdGggPSBhd2FpdCByZXNvbHZlV29ya2Zsb3dBbGlhc1BhdGgoXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICB3b3JraW5nRGlyXG4gICAgICApO1xuICAgICAgaWYgKGFsaWFzZWRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgICAgcmVsYXRpdmVGaWxlbmFtZSA9IGFsaWFzZWRSZWxhdGl2ZVBhdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWxhdGl2ZUZpbGVuYW1lID0gcmVsYXRpdmVGaWxlbmFtZVxuICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gJy4uJylcbiAgICAgICAgICAuam9pbignLycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmFsIHNhZmV0eSBjaGVjayAtIGVuc3VyZSB3ZSBuZXZlciBwYXNzIGFuIGFic29sdXRlIHBhdGggdG8gU1dDXG4gIGlmIChyZWxhdGl2ZUZpbGVuYW1lLmluY2x1ZGVzKCc6JykgfHwgcmVsYXRpdmVGaWxlbmFtZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAvLyBUaGlzIHNob3VsZCByYXJlbHkgaGFwcGVuLCBidXQgdXNlIGZpbGVuYW1lIHNwbGl0IGFzIGxhc3QgcmVzb3J0XG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9IG5vcm1hbGl6ZWRGaWxlcGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8ICd1bmtub3duLnRzJztcbiAgfVxuXG4gIHJldHVybiByZWxhdGl2ZUZpbGVuYW1lO1xufVxuXG5mdW5jdGlvbiBpc05vZGVNb2R1bGVzUGF0aChmaWxlbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvKD86XnxbL1xcXFxdKW5vZGVfbW9kdWxlcyg/OlsvXFxcXF18JCkvLnRlc3QoZmlsZW5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9hZGVyU291cmNlTWFwT3B0aW9ucyhmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2VNYXA6IGFueSkge1xuICBjb25zdCBzaG91bGRFbWl0U291cmNlTWFwcyA9ICFpc05vZGVNb2R1bGVzUGF0aChmaWxlbmFtZSk7XG4gIHJldHVybiB7XG4gICAgaW5wdXRTb3VyY2VNYXA6IHNob3VsZEVtaXRTb3VyY2VNYXBzID8gKHNvdXJjZU1hcCA/PyBmYWxzZSkgOiBmYWxzZSxcbiAgICBzb3VyY2VNYXBzOiBzaG91bGRFbWl0U291cmNlTWFwcyxcbiAgICBpbmxpbmVTb3VyY2VzQ29udGVudDogc2hvdWxkRW1pdFNvdXJjZU1hcHMsXG4gIH07XG59XG5cbi8vIFRoaXMgbG9hZGVyIGFwcGxpZXMgdGhlIFwidXNlIHdvcmtmbG93XCIvXCJ1c2Ugc3RlcFwiIHRyYW5zZm9ybS5cbi8vIEFsbCBmaWxlcyB1c2Ugc3RlcCBtb2RlOyB0aGUgU1dDIHBsdWdpbiBkZWNpZGVzIHBlci1mdW5jdGlvbiB3aGV0aGVyXG4vLyB0byBlbWl0IHdvcmtmbG93IG9yIHN0ZXAgYmluZGluZ3MgYmFzZWQgb24gdGhlIHNvdXJjZSdzIGRpcmVjdGl2ZXMuXG50eXBlIFdvcmtmbG93TG9hZGVyQ29udGV4dCA9IHtcbiAgcmVzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIGFzeW5jPzogKCkgPT4gKFxuICAgIGVycm9yOiBFcnJvciB8IG51bGwsXG4gICAgY29udGVudD86IHN0cmluZyxcbiAgICBzb3VyY2VNYXA/OiBhbnlcbiAgKSA9PiB2b2lkO1xuICBhZGREZXBlbmRlbmN5PzogKGRlcGVuZGVuY3k6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkQnVpbGREZXBlbmRlbmN5PzogKGRlcGVuZGVuY3k6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdvcmtmbG93TG9hZGVyKFxuICB0aGlzOiBXb3JrZmxvd0xvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nIHwgQnVmZmVyLFxuICBzb3VyY2VNYXA6IGFueVxuKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgdm9pZCB7XG4gIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5hc3luYz8uKCk7XG4gIGNvbnN0IHJ1biA9IGFzeW5jICgpOiBQcm9taXNlPHsgY29kZTogc3RyaW5nOyBtYXA6IGFueSB9PiA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnJlc291cmNlUGF0aDtcbiAgICBjb25zdCBub3JtYWxpemVkU291cmNlID0gc291cmNlLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKHRoaXMpO1xuICAgIGNvbnN0IHNvdXJjZUZvclRyYW5zZm9ybSA9IG5vcm1hbGl6ZWRTb3VyY2U7XG5cbiAgICBjb25zdCBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZSA9IGF3YWl0IGNoZWNrR2VuZXJhdGVkRmlsZShmaWxlbmFtZSk7XG4gICAgLy8gU2tpcCBnZW5lcmF0ZWQgd29ya2Zsb3cgcm91dGUgZmlsZXMgdG8gYXZvaWQgcmUtcHJvY2Vzc2luZyB0aGVtLlxuICAgIGlmIChpc0dlbmVyYXRlZFdvcmtmbG93RmlsZSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogbm9ybWFsaXplZFNvdXJjZSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3Qgd29ya2Zsb3cgcGF0dGVybnMgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgIGNvbnN0IHBhdHRlcm5zID0gYXdhaXQgZGV0ZWN0UGF0dGVybnMoc291cmNlRm9yVHJhbnNmb3JtKTtcblxuICAgIC8vIENoZWNrIGlmIGZpbGUgbmVlZHMgdHJhbnNmb3JtYXRpb24gYmFzZWQgb24gcGF0dGVybnMgYW5kIHBhdGhcbiAgICBpZiAoIShhd2FpdCBjaGVja1Nob3VsZFRyYW5zZm9ybShmaWxlbmFtZSwgcGF0dGVybnMpKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogbm9ybWFsaXplZFNvdXJjZSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1R5cGVTY3JpcHQgPVxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy50cycpIHx8XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzeCcpIHx8XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLm10cycpIHx8XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLmN0cycpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHJlbGF0aXZlIGZpbGVuYW1lIGZvciBTV0MgcGx1Z2luXG4gICAgLy8gVGhlIFNXQyBwbHVnaW4gdXNlcyBmaWxlbmFtZSB0byBnZW5lcmF0ZSB3b3JrZmxvd0lkLCBzbyBpdCBtdXN0IGJlIHJlbGF0aXZlXG4gICAgY29uc3QgcmVsYXRpdmVGaWxlbmFtZSA9IGF3YWl0IGdldFJlbGF0aXZlRmlsZW5hbWVGb3JTd2MoXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHdvcmtpbmdEaXJcbiAgICApO1xuXG4gICAgLy8gR2V0IGRlY29yYXRvciBvcHRpb25zIGZyb20gdHNjb25maWcgKGNhY2hlZCBwZXIgd29ya2luZyBkaXJlY3RvcnkpXG4gICAgY29uc3QgeyBvcHRpb25zOiBkZWNvcmF0b3JPcHRpb25zLCBjb25maWdQYXRoIH0gPVxuICAgICAgYXdhaXQgZ2V0RGVjb3JhdG9yT3B0aW9ucyh3b3JraW5nRGlyKTtcbiAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeSh0aGlzLCBjb25maWdQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIG1vZHVsZSBzcGVjaWZpZXIgZm9yIHBhY2thZ2VzIChub2RlX21vZHVsZXMgb3Igd29ya3NwYWNlIHBhY2thZ2VzKVxuICAgIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IGF3YWl0IGdldE1vZHVsZVNwZWNpZmllcihmaWxlbmFtZSwgd29ya2luZ0Rpcik7XG4gICAgY29uc3QgbW9kZSA9ICdzdGVwJztcblxuICAgIC8vIFRyYW5zZm9ybSB3aXRoIFNXQ1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VGb3JUcmFuc2Zvcm0sIHtcbiAgICAgIGZpbGVuYW1lOiByZWxhdGl2ZUZpbGVuYW1lLFxuICAgICAganNjOiB7XG4gICAgICAgIHBhcnNlcjoge1xuICAgICAgICAgIC4uLihpc1R5cGVTY3JpcHRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgICAgICAgICAgIHRzeDogZmlsZW5hbWUuZW5kc1dpdGgoJy50c3gnKSxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBkZWNvcmF0b3JPcHRpb25zLmRlY29yYXRvcnMsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHN5bnRheDogJ2VjbWFzY3JpcHQnLFxuICAgICAgICAgICAgICAgIGpzeDogZmlsZW5hbWUuZW5kc1dpdGgoJy5qc3gnKSxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBkZWNvcmF0b3JPcHRpb25zLmRlY29yYXRvcnMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgICBleHBlcmltZW50YWw6IHtcbiAgICAgICAgICBjYWNoZVJvb3Q6IGpvaW4od29ya2luZ0RpciwgJy5zd2MnKSxcbiAgICAgICAgICBwbHVnaW5zOiBbW3N3Y1BsdWdpblBhdGgsIHsgbW9kZSwgbW9kdWxlU3BlY2lmaWVyIH1dXSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNmb3JtOiB7XG4gICAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICAgIHJ1bnRpbWU6ICdwcmVzZXJ2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsZWdhY3lEZWNvcmF0b3I6IGRlY29yYXRvck9wdGlvbnMubGVnYWN5RGVjb3JhdG9yLFxuICAgICAgICAgIGRlY29yYXRvck1ldGFkYXRhOiBkZWNvcmF0b3JPcHRpb25zLmRlY29yYXRvck1ldGFkYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICAuLi5nZXRMb2FkZXJTb3VyY2VNYXBPcHRpb25zKGZpbGVuYW1lLCBzb3VyY2VNYXApLFxuICAgIH0pO1xuXG4gICAgbGV0IHRyYW5zZm9ybWVkTWFwID0gc291cmNlTWFwO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0Lm1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRyYW5zZm9ybWVkTWFwID0gSlNPTi5wYXJzZShyZXN1bHQubWFwKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0cmFuc2Zvcm1lZE1hcCA9IHJlc3VsdC5tYXA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXN1bHQubWFwKSB7XG4gICAgICB0cmFuc2Zvcm1lZE1hcCA9IHJlc3VsdC5tYXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZTogcmVzdWx0LmNvZGUsIG1hcDogdHJhbnNmb3JtZWRNYXAgfTtcbiAgfTtcblxuICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHJ1bigpLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmNvZGUpO1xuICB9XG5cbiAgdm9pZCBydW4oKVxuICAgIC50aGVuKChyZXN1bHQpID0+IGNhbGxiYWNrKG51bGwsIHJlc3VsdC5jb2RlLCByZXN1bHQubWFwKSlcbiAgICAuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSkpO1xuICAgIH0pO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/next",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.38",
|
|
4
4
|
"description": "Next.js integration for Workflow SDK",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"chokidar": "4.0.3",
|
|
31
31
|
"ignore": "7.0.5",
|
|
32
32
|
"semver": "7.7.4",
|
|
33
|
-
"@workflow/builders": "5.0.0-beta.
|
|
34
|
-
"@workflow/core": "5.0.0-beta.
|
|
33
|
+
"@workflow/builders": "5.0.0-beta.38",
|
|
34
|
+
"@workflow/core": "5.0.0-beta.38",
|
|
35
35
|
"@workflow/swc-plugin": "5.0.0-beta.5"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|