@workflow/builders 4.1.0 → 4.1.1
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/apply-swc-transform.d.ts +7 -2
- package/dist/apply-swc-transform.d.ts.map +1 -1
- package/dist/apply-swc-transform.js +10 -4
- package/dist/base-builder-logging.test.d.ts +2 -0
- package/dist/base-builder-logging.test.d.ts.map +1 -0
- package/dist/base-builder-logging.test.js +99 -0
- package/dist/base-builder.d.ts +37 -14
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +296 -54
- package/dist/config-helpers.d.ts +2 -0
- package/dist/config-helpers.d.ts.map +1 -1
- package/dist/config-helpers.js +62 -1
- package/dist/config-helpers.test.d.ts +2 -0
- package/dist/config-helpers.test.d.ts.map +1 -0
- package/dist/config-helpers.test.js +17 -0
- package/dist/fast-discovery.d.ts +14 -0
- package/dist/fast-discovery.d.ts.map +1 -0
- package/dist/fast-discovery.js +663 -0
- package/dist/fast-discovery.test.d.ts +2 -0
- package/dist/fast-discovery.test.d.ts.map +1 -0
- package/dist/fast-discovery.test.js +338 -0
- package/dist/get-input-files.test.js +34 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/module-specifier.d.ts +13 -0
- package/dist/module-specifier.d.ts.map +1 -1
- package/dist/module-specifier.js +20 -1
- package/dist/standalone.d.ts.map +1 -1
- package/dist/standalone.js +4 -4
- package/dist/step-source-registration.test.d.ts +2 -0
- package/dist/step-source-registration.test.d.ts.map +1 -0
- package/dist/step-source-registration.test.js +82 -0
- package/dist/swc-esbuild-plugin.d.ts +1 -0
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +5 -3
- package/dist/swc-esbuild-plugin.test.js +25 -3
- package/dist/transform-utils.d.ts.map +1 -1
- package/dist/transform-utils.js +45 -6
- package/dist/transform-utils.test.js +92 -1
- package/dist/types.d.ts +8 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/vercel-build-output-api.d.ts.map +1 -1
- package/dist/vercel-build-output-api.js +8 -8
- package/dist/workflows-extractor.js +8 -3
- package/dist/workflows-extractor.test.d.ts +2 -0
- package/dist/workflows-extractor.test.d.ts.map +1 -0
- package/dist/workflows-extractor.test.js +70 -0
- package/package.json +3 -3
package/dist/transform-utils.js
CHANGED
|
@@ -15,6 +15,10 @@ export const workflowSerdeSymbolPattern = /Symbol\.for\s*\(\s*(['"])workflow-(?:
|
|
|
15
15
|
// e.g.: static [WORKFLOW_SERIALIZE](instance) { ... }
|
|
16
16
|
// This catches cases where the symbols are imported and used (even if bundled/re-exported)
|
|
17
17
|
export const workflowSerdeComputedPropertyPattern = /\[\s*WORKFLOW_(?:SERIALIZE|DESERIALIZE)\s*\]/;
|
|
18
|
+
const templateLiteralPattern = /`(?:\\[\s\S]|[^`\\])*`/g;
|
|
19
|
+
const commentPattern = /\/\*[\s\S]*?\*\/|\/\/[^\r\n]*/g;
|
|
20
|
+
const directiveLinePattern = /^\s*(['"])(use workflow|use step)\1;?\s*$/;
|
|
21
|
+
const stringDirectiveLinePattern = /^\s*(['"])[^'"]+\1;?\s*$/;
|
|
18
22
|
// Pattern to detect generated workflow route files that should be excluded
|
|
19
23
|
// These files are generated by the build process and should not be re-processed
|
|
20
24
|
export const generatedWorkflowPathPattern = /[/\\]\.well-known[/\\]workflow[/\\]/;
|
|
@@ -28,17 +32,52 @@ export const generatedWorkflowPathPattern = /[/\\]\.well-known[/\\]workflow[/\\]
|
|
|
28
32
|
// - monorepo packages/*/dist paths
|
|
29
33
|
// User npm packages with workflows/steps/serde SHOULD still be discovered.
|
|
30
34
|
export const workflowSdkPathPattern = /[/\\](?:node_modules[/\\](?:@workflow[/\\]|workflow[/\\]|\.pnpm[/\\][^/\\]+[/\\]node_modules[/\\](?:@workflow[/\\]|workflow[/\\]))|packages[/\\](?:builders|core|rollup|vite|next|nitro|serde|workflow|swc-plugin-workflow)[/\\])/;
|
|
35
|
+
function hasDirective(source, directive) {
|
|
36
|
+
let previousMeaningfulLine;
|
|
37
|
+
for (const line of source.split(/\r?\n/)) {
|
|
38
|
+
const trimmedLine = line.trim();
|
|
39
|
+
if (trimmedLine === '') {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const directiveMatch = directiveLinePattern.exec(trimmedLine);
|
|
43
|
+
if (directiveMatch) {
|
|
44
|
+
if (directiveMatch[2] === directive &&
|
|
45
|
+
(previousMeaningfulLine === undefined ||
|
|
46
|
+
previousMeaningfulLine.endsWith('{') ||
|
|
47
|
+
stringDirectiveLinePattern.test(previousMeaningfulLine))) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
previousMeaningfulLine = trimmedLine;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
previousMeaningfulLine = trimmedLine;
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
31
57
|
/**
|
|
32
58
|
* Detects workflow-related patterns in source code.
|
|
33
59
|
* @param source - The source code to analyze
|
|
34
60
|
* @returns Object with flags for each detected pattern
|
|
35
61
|
*/
|
|
36
62
|
export function detectWorkflowPatterns(source) {
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
63
|
+
const hasDirectiveSubstring = source.includes('use workflow') || source.includes('use step');
|
|
64
|
+
const sourceForDirectives = hasDirectiveSubstring && (source.includes('`') || source.includes('/'))
|
|
65
|
+
? source
|
|
66
|
+
.replace(templateLiteralPattern, (match) => match.replace(/[^\r\n]/g, ' '))
|
|
67
|
+
.replace(commentPattern, (match) => match.replace(/[^\r\n]/g, ' '))
|
|
68
|
+
: source;
|
|
69
|
+
const hasUseWorkflow = source.includes('use workflow') &&
|
|
70
|
+
hasDirective(sourceForDirectives, 'use workflow');
|
|
71
|
+
const hasUseStep = source.includes('use step') &&
|
|
72
|
+
hasDirective(sourceForDirectives, 'use step');
|
|
73
|
+
const hasSerdeImport = source.includes('@workflow/serde') &&
|
|
74
|
+
workflowSerdeImportPattern.test(source);
|
|
75
|
+
const hasSerdeSymbol = (source.includes('workflow-serialize') ||
|
|
76
|
+
source.includes('workflow-deserialize')) &&
|
|
77
|
+
workflowSerdeSymbolPattern.test(source);
|
|
78
|
+
const hasSerdeComputedProperty = (source.includes('WORKFLOW_SERIALIZE') ||
|
|
79
|
+
source.includes('WORKFLOW_DESERIALIZE')) &&
|
|
80
|
+
workflowSerdeComputedPropertyPattern.test(source);
|
|
42
81
|
return {
|
|
43
82
|
hasUseWorkflow,
|
|
44
83
|
hasUseStep,
|
|
@@ -99,4 +138,4 @@ export function shouldTransformFile(filePath, patterns) {
|
|
|
99
138
|
* and WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE computed property usage
|
|
100
139
|
*/
|
|
101
140
|
export const turbopackContentPattern = /(use workflow|use step|from\s+(['"])@workflow\/serde\2|Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\3\s*\)|\[\s*WORKFLOW_(?:SERIALIZE|DESERIALIZE)\s*\])/;
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RyYW5zZm9ybS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCwwR0FBMEc7QUFDMUcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsaUNBQWlDLENBQUM7QUFDcEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLDZCQUE2QixDQUFDO0FBRTVELDBFQUEwRTtBQUMxRSw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsaUNBQWlDLENBQUM7QUFFNUUsaUdBQWlHO0FBQ2pHLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FDckMsb0VBQW9FLENBQUM7QUFFdkUseUZBQXlGO0FBQ3pGLHNEQUFzRDtBQUN0RCwyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQy9DLDhDQUE4QyxDQUFDO0FBRWpELDJFQUEyRTtBQUMzRSxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQ3ZDLHFDQUFxQyxDQUFDO0FBRXhDLHVGQUF1RjtBQUN2RixtRkFBbUY7QUFDbkYsV0FBVztBQUNYLDZCQUE2QjtBQUM3Qiw0QkFBNEI7QUFDNUIseUVBQXlFO0FBQ3pFLHdFQUF3RTtBQUN4RSxtQ0FBbUM7QUFDbkMsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUNqQyxtT0FBbU8sQ0FBQztBQW9CdE87Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxNQUFjO0lBQ25ELE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RCxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLE1BQU0sY0FBYyxHQUFHLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxNQUFNLGNBQWMsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0QsTUFBTSx3QkFBd0IsR0FDNUIsb0NBQW9DLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXBELE9BQU87UUFDTCxjQUFjO1FBQ2QsVUFBVTtRQUNWLGNBQWM7UUFDZCxjQUFjO1FBQ2QsWUFBWSxFQUFFLGNBQWMsSUFBSSxVQUFVO1FBQzFDLFFBQVEsRUFBRSxjQUFjLElBQUksY0FBYyxJQUFJLHdCQUF3QjtLQUN2RSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsUUFBZ0I7SUFDdEQsT0FBTyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsUUFBZ0IsRUFDaEIsUUFBOEI7SUFFOUIsaURBQWlEO0lBQ2pELElBQUksdUJBQXVCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FDbEMseUtBQXlLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNoYXJlZCB1dGlsaXRpZXMgZm9yIGRldGVjdGluZyBmaWxlcyB0aGF0IG5lZWQgd29ya2Zsb3cgdHJhbnNmb3JtYXRpb24uXG4gKiBVc2VkIGJ5IGJ1aWxkZXJzLCByb2xsdXAgcGx1Z2luLCBOZXh0LmpzIGxvYWRlciwgYW5kIHZpdGUgcGx1Z2luLlxuICovXG5cbi8vIE1hdGNoZXM6ICd1c2Ugd29ya2Zsb3cnOyBcInVzZSB3b3JrZmxvd1wiOyAndXNlIHN0ZXAnOyBcInVzZSBzdGVwXCI7IGF0IGxpbmUgc3RhcnQgd2l0aCBvcHRpb25hbCB3aGl0ZXNwYWNlXG5leHBvcnQgY29uc3QgdXNlV29ya2Zsb3dQYXR0ZXJuID0gL15cXHMqKFsnXCJdKXVzZSB3b3JrZmxvd1xcMTs/XFxzKiQvbTtcbmV4cG9ydCBjb25zdCB1c2VTdGVwUGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugc3RlcFxcMTs/XFxzKiQvbTtcblxuLy8gTWF0Y2hlcyBpbXBvcnRzIGZyb20gJ0B3b3JrZmxvdy9zZXJkZScgKGZvciBjdXN0b20gY2xhc3Mgc2VyaWFsaXphdGlvbilcbi8vIGUuZy46IGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5leHBvcnQgY29uc3Qgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4gPSAvZnJvbVxccysoWydcIl0pQHdvcmtmbG93XFwvc2VyZGVcXDEvO1xuXG4vLyBNYXRjaGVzIGRpcmVjdCB1c2FnZSBvZiBTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKSBvciBTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXG4vLyBlLmcuOiBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LXNlcmlhbGl6ZScpXShpbnN0YW5jZSkgeyAuLi4gfVxuZXhwb3J0IGNvbnN0IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuID1cbiAgL1N5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDFcXHMqXFwpLztcblxuLy8gTWF0Y2hlcyB1c2FnZSBvZiBXT1JLRkxPV19TRVJJQUxJWkUgb3IgV09SS0ZMT1dfREVTRVJJQUxJWkUgYXMgY29tcHV0ZWQgcHJvcGVydHkgbmFtZXNcbi8vIGUuZy46IHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkgeyAuLi4gfVxuLy8gVGhpcyBjYXRjaGVzIGNhc2VzIHdoZXJlIHRoZSBzeW1ib2xzIGFyZSBpbXBvcnRlZCBhbmQgdXNlZCAoZXZlbiBpZiBidW5kbGVkL3JlLWV4cG9ydGVkKVxuZXhwb3J0IGNvbnN0IHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybiA9XG4gIC9cXFtcXHMqV09SS0ZMT1dfKD86U0VSSUFMSVpFfERFU0VSSUFMSVpFKVxccypcXF0vO1xuXG4vLyBQYXR0ZXJuIHRvIGRldGVjdCBnZW5lcmF0ZWQgd29ya2Zsb3cgcm91dGUgZmlsZXMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWRcbi8vIFRoZXNlIGZpbGVzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHNob3VsZCBub3QgYmUgcmUtcHJvY2Vzc2VkXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVkV29ya2Zsb3dQYXRoUGF0dGVybiA9XG4gIC9bL1xcXFxdXFwud2VsbC1rbm93blsvXFxcXF13b3JrZmxvd1svXFxcXF0vO1xuXG4vLyBQYXR0ZXJuIHRvIGRldGVjdCBAd29ya2Zsb3cgU0RLIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdHJhbnNmb3JtYXRpb25cbi8vIFRoZXNlIGFyZSBpbnRlcm5hbCBTREsgcGFja2FnZXMgdGhhdCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMgdXNlciBlbnRyeSBwb2ludHMuXG4vLyBNYXRjaGVzOlxuLy8gLSBub2RlX21vZHVsZXMvQHdvcmtmbG93Lypcbi8vIC0gbm9kZV9tb2R1bGVzL3dvcmtmbG93Lypcbi8vIC0gbm9kZV9tb2R1bGVzLy5wbnBtLy4uLi9ub2RlX21vZHVsZXMvQHdvcmtmbG93LyogKHBucG0gdmlydHVhbCBzdG9yZSlcbi8vIC0gbm9kZV9tb2R1bGVzLy5wbnBtLy4uLi9ub2RlX21vZHVsZXMvd29ya2Zsb3cvKiAocG5wbSB2aXJ0dWFsIHN0b3JlKVxuLy8gLSBtb25vcmVwbyBwYWNrYWdlcy8qL2Rpc3QgcGF0aHNcbi8vIFVzZXIgbnBtIHBhY2thZ2VzIHdpdGggd29ya2Zsb3dzL3N0ZXBzL3NlcmRlIFNIT1VMRCBzdGlsbCBiZSBkaXNjb3ZlcmVkLlxuZXhwb3J0IGNvbnN0IHdvcmtmbG93U2RrUGF0aFBhdHRlcm4gPVxuICAvWy9cXFxcXSg/Om5vZGVfbW9kdWxlc1svXFxcXF0oPzpAd29ya2Zsb3dbL1xcXFxdfHdvcmtmbG93Wy9cXFxcXXxcXC5wbnBtWy9cXFxcXVteL1xcXFxdK1svXFxcXF1ub2RlX21vZHVsZXNbL1xcXFxdKD86QHdvcmtmbG93Wy9cXFxcXXx3b3JrZmxvd1svXFxcXF0pKXxwYWNrYWdlc1svXFxcXF0oPzpidWlsZGVyc3xjb3JlfHJvbGx1cHx2aXRlfG5leHR8bml0cm98c2VyZGV8d29ya2Zsb3d8c3djLXBsdWdpbi13b3JrZmxvdylbL1xcXFxdKS87XG5cbi8qKlxuICogRGV0ZWN0cyB3b3JrZmxvdy1yZWxhdGVkIHBhdHRlcm5zIGluIHNvdXJjZSBjb2RlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgLyoqIEZpbGUgY29udGFpbnMgJ3VzZSB3b3JrZmxvdycgZGlyZWN0aXZlICovXG4gIGhhc1VzZVdvcmtmbG93OiBib29sZWFuO1xuICAvKiogRmlsZSBjb250YWlucyAndXNlIHN0ZXAnIGRpcmVjdGl2ZSAqL1xuICBoYXNVc2VTdGVwOiBib29sZWFuO1xuICAvKiogRmlsZSBjb250YWlucyBAd29ya2Zsb3cvc2VyZGUgaW1wb3J0ICovXG4gIGhhc1NlcmRlSW1wb3J0OiBib29sZWFuO1xuICAvKiogRmlsZSBjb250YWlucyBTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKSBvciBTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpICovXG4gIGhhc1NlcmRlU3ltYm9sOiBib29sZWFuO1xuICAvKiogRmlsZSBjb250YWlucyBhbnkgZGlyZWN0aXZlICgndXNlIHdvcmtmbG93JyBvciAndXNlIHN0ZXAnKSAqL1xuICBoYXNEaXJlY3RpdmU6IGJvb2xlYW47XG4gIC8qKiBGaWxlIGNvbnRhaW5zIGFueSBzZXJkZSBwYXR0ZXJuIChpbXBvcnQgb3IgU3ltYm9sLmZvcikgKi9cbiAgaGFzU2VyZGU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3b3JrZmxvdy1yZWxhdGVkIHBhdHRlcm5zIGluIHNvdXJjZSBjb2RlLlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2UgY29kZSB0byBhbmFseXplXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBmbGFncyBmb3IgZWFjaCBkZXRlY3RlZCBwYXR0ZXJuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZTogc3RyaW5nKTogV29ya2Zsb3dQYXR0ZXJuTWF0Y2gge1xuICBjb25zdCBoYXNVc2VXb3JrZmxvdyA9IHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1VzZVN0ZXAgPSB1c2VTdGVwUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlSW1wb3J0ID0gd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZVN5bWJvbCA9IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5ID1cbiAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZUltcG9ydCxcbiAgICBoYXNTZXJkZVN5bWJvbCxcbiAgICBoYXNEaXJlY3RpdmU6IGhhc1VzZVdvcmtmbG93IHx8IGhhc1VzZVN0ZXAsXG4gICAgaGFzU2VyZGU6IGhhc1NlcmRlSW1wb3J0IHx8IGhhc1NlcmRlU3ltYm9sIHx8IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZmlsZSBwYXRoIGlzIGEgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGUuXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgZmlsZSBwYXRoIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGlzIGEgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZShmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZW5lcmF0ZWRXb3JrZmxvd1BhdGhQYXR0ZXJuLnRlc3QoZmlsZVBhdGgpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBmaWxlIHBhdGggaXMgcGFydCBvZiB0aGUgQHdvcmtmbG93IFNESy5cbiAqIEBwYXJhbSBmaWxlUGF0aCAtIFRoZSBmaWxlIHBhdGggdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgaXMgcGFydCBvZiB0aGUgQHdvcmtmbG93IFNES1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXb3JrZmxvd1Nka0ZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gd29ya2Zsb3dTZGtQYXRoUGF0dGVybi50ZXN0KGZpbGVQYXRoKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZmlsZSBzaG91bGQgYmUgdHJhbnNmb3JtZWQgYmFzZWQgb24gaXRzIHBhdGggYW5kIGNvbnRlbnQgcGF0dGVybnMuXG4gKlxuICogTG9naWM6XG4gKiAtIEdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBhcmUgbmV2ZXIgdHJhbnNmb3JtZWRcbiAqIC0gRmlsZXMgd2l0aCBkaXJlY3RpdmVzICgndXNlIHdvcmtmbG93JyBvciAndXNlIHN0ZXAnKSBhcmUgYWx3YXlzIHRyYW5zZm9ybWVkXG4gKiAtIEZpbGVzIHdpdGggc2VyZGUgcGF0dGVybnMgYXJlIHRyYW5zZm9ybWVkLCB1bmxlc3MgdGhleSdyZSBAd29ya2Zsb3cgU0RLIGZpbGVzXG4gKiAgIChTREsgZmlsZXMgd2l0aCBzZXJkZSBwYXR0ZXJucyBhcmUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24sIG5vdCB1c2VyIGNvZGUpXG4gKlxuICogQHBhcmFtIGZpbGVQYXRoIC0gVGhlIGZpbGUgcGF0aCB0byBjaGVja1xuICogQHBhcmFtIHBhdHRlcm5zIC0gVGhlIGRldGVjdGVkIHBhdHRlcm5zIGZyb20gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucygpXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIHNob3VsZCBiZSB0cmFuc2Zvcm1lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkVHJhbnNmb3JtRmlsZShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcGF0dGVybnM6IFdvcmtmbG93UGF0dGVybk1hdGNoXG4pOiBib29sZWFuIHtcbiAgLy8gTmV2ZXIgdHJhbnNmb3JtIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlc1xuICBpZiAoaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQWx3YXlzIHRyYW5zZm9ybSBmaWxlcyB3aXRoIGRpcmVjdGl2ZXNcbiAgaWYgKHBhdHRlcm5zLmhhc0RpcmVjdGl2ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIGZpbGVzIHdpdGggc2VyZGUgcGF0dGVybnMsIHVubGVzcyB0aGV5J3JlIEB3b3JrZmxvdyBTREsgZmlsZXNcbiAgaWYgKHBhdHRlcm5zLmhhc1NlcmRlKSB7XG4gICAgcmV0dXJuICFpc1dvcmtmbG93U2RrRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29tYmluZWQgcmVnZXggcGF0dGVybiBmb3IgdHVyYm9wYWNrIGNvbnRlbnQgbWF0Y2hpbmcuXG4gKiBVc2VzIGJhY2tyZWZlcmVuY2VzIHRvIGVuc3VyZSBtYXRjaGluZyBxdW90ZSB0eXBlcy5cbiAqIE1hdGNoZXM6ICd1c2Ugd29ya2Zsb3cnLCAndXNlIHN0ZXAnLCBAd29ya2Zsb3cvc2VyZGUgaW1wb3J0cywgU3ltYm9sLmZvciBzZXJpYWxpemF0aW9uIHN5bWJvbHMsXG4gKiBhbmQgV09SS0ZMT1dfU0VSSUFMSVpFL1dPUktGTE9XX0RFU0VSSUFMSVpFIGNvbXB1dGVkIHByb3BlcnR5IHVzYWdlXG4gKi9cbmV4cG9ydCBjb25zdCB0dXJib3BhY2tDb250ZW50UGF0dGVybiA9XG4gIC8odXNlIHdvcmtmbG93fHVzZSBzdGVwfGZyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwyfFN5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDNcXHMqXFwpfFxcW1xccypXT1JLRkxPV18oPzpTRVJJQUxJWkV8REVTRVJJQUxJWkUpXFxzKlxcXSkvO1xuIl19
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RyYW5zZm9ybS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCwwR0FBMEc7QUFDMUcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsaUNBQWlDLENBQUM7QUFDcEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLDZCQUE2QixDQUFDO0FBRTVELDBFQUEwRTtBQUMxRSw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsaUNBQWlDLENBQUM7QUFFNUUsaUdBQWlHO0FBQ2pHLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FDckMsb0VBQW9FLENBQUM7QUFFdkUseUZBQXlGO0FBQ3pGLHNEQUFzRDtBQUN0RCwyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQy9DLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sc0JBQXNCLEdBQUcseUJBQXlCLENBQUM7QUFDekQsTUFBTSxjQUFjLEdBQUcsZ0NBQWdDLENBQUM7QUFDeEQsTUFBTSxvQkFBb0IsR0FBRywyQ0FBMkMsQ0FBQztBQUN6RSxNQUFNLDBCQUEwQixHQUFHLDBCQUEwQixDQUFDO0FBRTlELDJFQUEyRTtBQUMzRSxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQ3ZDLHFDQUFxQyxDQUFDO0FBRXhDLHVGQUF1RjtBQUN2RixtRkFBbUY7QUFDbkYsV0FBVztBQUNYLDZCQUE2QjtBQUM3Qiw0QkFBNEI7QUFDNUIseUVBQXlFO0FBQ3pFLHdFQUF3RTtBQUN4RSxtQ0FBbUM7QUFDbkMsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUNqQyxtT0FBbU8sQ0FBQztBQUV0TyxTQUFTLFlBQVksQ0FBQyxNQUFjLEVBQUUsU0FBc0M7SUFDMUUsSUFBSSxzQkFBMEMsQ0FBQztJQUUvQyxLQUFL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QXVCLENBQUMsUUFBZ0I7SUFDdEQsT0FBTyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsUUFBZ0IsRUFDaEIsUUFBOEI7SUFFOUIsaURBQWlEO0lBQ2pELElBQUksdUJBQXVCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FDbEMseUtBQXlLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNoYXJlZCB1dGlsaXRpZXMgZm9yIGRldGVjdGluZyBmaWxlcyB0aGF0IG5lZWQgd29ya2Zsb3cgdHJhbnNmb3JtYXRpb24uXG4gKiBVc2VkIGJ5IGJ1aWxkZXJzLCByb2xsdXAgcGx1Z2luLCBOZXh0LmpzIGxvYWRlciwgYW5kIHZpdGUgcGx1Z2luLlxuICovXG5cbi8vIE1hdGNoZXM6ICd1c2Ugd29ya2Zsb3cnOyBcInVzZSB3b3JrZmxvd1wiOyAndXNlIHN0ZXAnOyBcInVzZSBzdGVwXCI7IGF0IGxpbmUgc3RhcnQgd2l0aCBvcHRpb25hbCB3aGl0ZXNwYWNlXG5leHBvcnQgY29uc3QgdXNlV29ya2Zsb3dQYXR0ZXJuID0gL15cXHMqKFsnXCJdKXVzZSB3b3JrZmxvd1xcMTs/XFxzKiQvbTtcbmV4cG9ydCBjb25zdCB1c2VTdGVwUGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugc3RlcFxcMTs/XFxzKiQvbTtcblxuLy8gTWF0Y2hlcyBpbXBvcnRzIGZyb20gJ0B3b3JrZmxvdy9zZXJkZScgKGZvciBjdXN0b20gY2xhc3Mgc2VyaWFsaXphdGlvbilcbi8vIGUuZy46IGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5leHBvcnQgY29uc3Qgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4gPSAvZnJvbVxccysoWydcIl0pQHdvcmtmbG93XFwvc2VyZGVcXDEvO1xuXG4vLyBNYXRjaGVzIGRpcmVjdCB1c2FnZSBvZiBTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKSBvciBTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXG4vLyBlLmcuOiBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LXNlcmlhbGl6ZScpXShpbnN0YW5jZSkgeyAuLi4gfVxuZXhwb3J0IGNvbnN0IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuID1cbiAgL1N5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDFcXHMqXFwpLztcblxuLy8gTWF0Y2hlcyB1c2FnZSBvZiBXT1JLRkxPV19TRVJJQUxJWkUgb3IgV09SS0ZMT1dfREVTRVJJQUxJWkUgYXMgY29tcHV0ZWQgcHJvcGVydHkgbmFtZXNcbi8vIGUuZy46IHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkgeyAuLi4gfVxuLy8gVGhpcyBjYXRjaGVzIGNhc2VzIHdoZXJlIHRoZSBzeW1ib2xzIGFyZSBpbXBvcnRlZCBhbmQgdXNlZCAoZXZlbiBpZiBidW5kbGVkL3JlLWV4cG9ydGVkKVxuZXhwb3J0IGNvbnN0IHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybiA9XG4gIC9cXFtcXHMqV09SS0ZMT1dfKD86U0VSSUFMSVpFfERFU0VSSUFMSVpFKVxccypcXF0vO1xuXG5jb25zdCB0ZW1wbGF0ZUxpdGVyYWxQYXR0ZXJuID0gL2AoPzpcXFxcW1xcc1xcU118W15gXFxcXF0pKmAvZztcbmNvbnN0IGNvbW1lbnRQYXR0ZXJuID0gL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98XFwvXFwvW15cXHJcXG5dKi9nO1xuY29uc3QgZGlyZWN0aXZlTGluZVBhdHRlcm4gPSAvXlxccyooWydcIl0pKHVzZSB3b3JrZmxvd3x1c2Ugc3RlcClcXDE7P1xccyokLztcbmNvbnN0IHN0cmluZ0RpcmVjdGl2ZUxpbmVQYXR0ZXJuID0gL15cXHMqKFsnXCJdKVteJ1wiXStcXDE7P1xccyokLztcblxuLy8gUGF0dGVybiB0byBkZXRlY3QgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkXG4vLyBUaGVzZSBmaWxlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIGFuZCBzaG91bGQgbm90IGJlIHJlLXByb2Nlc3NlZFxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlZFdvcmtmbG93UGF0aFBhdHRlcm4gPVxuICAvWy9cXFxcXVxcLndlbGwta25vd25bL1xcXFxdd29ya2Zsb3dbL1xcXFxdLztcblxuLy8gUGF0dGVybiB0byBkZXRlY3QgQHdvcmtmbG93IFNESyBwYWNrYWdlcyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHRyYW5zZm9ybWF0aW9uXG4vLyBUaGVzZSBhcmUgaW50ZXJuYWwgU0RLIHBhY2thZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIHVzZXIgZW50cnkgcG9pbnRzLlxuLy8gTWF0Y2hlczpcbi8vIC0gbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy8qXG4vLyAtIG5vZGVfbW9kdWxlcy93b3JrZmxvdy8qXG4vLyAtIG5vZGVfbW9kdWxlcy8ucG5wbS8uLi4vbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy8qIChwbnBtIHZpcnR1YWwgc3RvcmUpXG4vLyAtIG5vZGVfbW9kdWxlcy8ucG5wbS8uLi4vbm9kZV9tb2R1bGVzL3dvcmtmbG93LyogKHBucG0gdmlydHVhbCBzdG9yZSlcbi8vIC0gbW9ub3JlcG8gcGFja2FnZXMvKi9kaXN0IHBhdGhzXG4vLyBVc2VyIG5wbSBwYWNrYWdlcyB3aXRoIHdvcmtmbG93cy9zdGVwcy9zZXJkZSBTSE9VTEQgc3RpbGwgYmUgZGlzY292ZXJlZC5cbmV4cG9ydCBjb25zdCB3b3JrZmxvd1Nka1BhdGhQYXR0ZXJuID1cbiAgL1svXFxcXF0oPzpub2RlX21vZHVsZXNbL1xcXFxdKD86QHdvcmtmbG93Wy9cXFxcXXx3b3JrZmxvd1svXFxcXF18XFwucG5wbVsvXFxcXF1bXi9cXFxcXStbL1xcXFxdbm9kZV9tb2R1bGVzWy9cXFxcXSg/OkB3b3JrZmxvd1svXFxcXF18d29ya2Zsb3dbL1xcXFxdKSl8cGFja2FnZXNbL1xcXFxdKD86YnVpbGRlcnN8Y29yZXxyb2xsdXB8dml0ZXxuZXh0fG5pdHJvfHNlcmRlfHdvcmtmbG93fHN3Yy1wbHVnaW4td29ya2Zsb3cpWy9cXFxcXSkvO1xuXG5mdW5jdGlvbiBoYXNEaXJlY3RpdmUoc291cmNlOiBzdHJpbmcsIGRpcmVjdGl2ZTogJ3VzZSB3b3JrZmxvdycgfCAndXNlIHN0ZXAnKSB7XG4gIGxldCBwcmV2aW91c01lYW5pbmdmdWxMaW5lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIHNvdXJjZS5zcGxpdCgvXFxyP1xcbi8pKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZExpbmUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXJlY3RpdmVNYXRjaCA9IGRpcmVjdGl2ZUxpbmVQYXR0ZXJuLmV4ZWModHJpbW1lZExpbmUpO1xuICAgIGlmIChkaXJlY3RpdmVNYXRjaCkge1xuICAgICAgaWYgKFxuICAgICAgICBkaXJlY3RpdmVNYXRjaFsyXSA9PT0gZGlyZWN0aXZlICYmXG4gICAgICAgIChwcmV2aW91c01lYW5pbmdmdWxMaW5lID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBwcmV2aW91c01lYW5pbmdmdWxMaW5lLmVuZHNXaXRoKCd7JykgfHxcbiAgICAgICAgICBzdHJpbmdEaXJlY3RpdmVMaW5lUGF0dGVybi50ZXN0KHByZXZpb3VzTWVhbmluZ2Z1bExpbmUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcHJldmlvdXNNZWFuaW5nZnVsTGluZSA9IHRyaW1tZWRMaW5lO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcHJldmlvdXNNZWFuaW5nZnVsTGluZSA9IHRyaW1tZWRMaW5lO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIERldGVjdHMgd29ya2Zsb3ctcmVsYXRlZCBwYXR0ZXJucyBpbiBzb3VyY2UgY29kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCB7XG4gIC8qKiBGaWxlIGNvbnRhaW5zICd1c2Ugd29ya2Zsb3cnIGRpcmVjdGl2ZSAqL1xuICBoYXNVc2VXb3JrZmxvdzogYm9vbGVhbjtcbiAgLyoqIEZpbGUgY29udGFpbnMgJ3VzZSBzdGVwJyBkaXJlY3RpdmUgKi9cbiAgaGFzVXNlU3RlcDogYm9vbGVhbjtcbiAgLyoqIEZpbGUgY29udGFpbnMgQHdvcmtmbG93L3NlcmRlIGltcG9ydCAqL1xuICBoYXNTZXJkZUltcG9ydDogYm9vbGVhbjtcbiAgLyoqIEZpbGUgY29udGFpbnMgU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJykgb3IgU3ltYm9sLmZvcignd29ya2Zsb3ctZGVzZXJpYWxpemUnKSAqL1xuICBoYXNTZXJkZVN5bWJvbDogYm9vbGVhbjtcbiAgLyoqIEZpbGUgY29udGFpbnMgYW55IGRpcmVjdGl2ZSAoJ3VzZSB3b3JrZmxvdycgb3IgJ3VzZSBzdGVwJykgKi9cbiAgaGFzRGlyZWN0aXZlOiBib29sZWFuO1xuICAvKiogRmlsZSBjb250YWlucyBhbnkgc2VyZGUgcGF0dGVybiAoaW1wb3J0IG9yIFN5bWJvbC5mb3IpICovXG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIERldGVjdHMgd29ya2Zsb3ctcmVsYXRlZCBwYXR0ZXJucyBpbiBzb3VyY2UgY29kZS5cbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIGNvZGUgdG8gYW5hbHl6ZVxuICogQHJldHVybnMgT2JqZWN0IHdpdGggZmxhZ3MgZm9yIGVhY2ggZGV0ZWN0ZWQgcGF0dGVyblxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgY29uc3QgaGFzRGlyZWN0aXZlU3Vic3RyaW5nID1cbiAgICBzb3VyY2UuaW5jbHVkZXMoJ3VzZSB3b3JrZmxvdycpIHx8IHNvdXJjZS5pbmNsdWRlcygndXNlIHN0ZXAnKTtcbiAgY29uc3Qgc291cmNlRm9yRGlyZWN0aXZlcyA9XG4gICAgaGFzRGlyZWN0aXZlU3Vic3RyaW5nICYmIChzb3VyY2UuaW5jbHVkZXMoJ2AnKSB8fCBzb3VyY2UuaW5jbHVkZXMoJy8nKSlcbiAgICAgID8gc291cmNlXG4gICAgICAgICAgLnJlcGxhY2UodGVtcGxhdGVMaXRlcmFsUGF0dGVybiwgKG1hdGNoKSA9PlxuICAgICAgICAgICAgbWF0Y2gucmVwbGFjZSgvW15cXHJcXG5dL2csICcgJylcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWVudFBhdHRlcm4sIChtYXRjaCkgPT4gbWF0Y2gucmVwbGFjZSgvW15cXHJcXG5dL2csICcgJykpXG4gICAgICA6IHNvdXJjZTtcbiAgY29uc3QgaGFzVXNlV29ya2Zsb3cgPVxuICAgIHNvdXJjZS5pbmNsdWRlcygndXNlIHdvcmtmbG93JykgJiZcbiAgICBoYXNEaXJlY3RpdmUoc291cmNlRm9yRGlyZWN0aXZlcywgJ3VzZSB3b3JrZmxvdycpO1xuICBjb25zdCBoYXNVc2VTdGVwID1cbiAgICBzb3VyY2UuaW5jbHVkZXMoJ3VzZSBzdGVwJykgJiZcbiAgICBoYXNEaXJlY3RpdmUoc291cmNlRm9yRGlyZWN0aXZlcywgJ3VzZSBzdGVwJyk7XG4gIGNvbnN0IGhhc1NlcmRlSW1wb3J0ID1cbiAgICBzb3VyY2UuaW5jbHVkZXMoJ0B3b3JrZmxvdy9zZXJkZScpICYmXG4gICAgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZVN5bWJvbCA9XG4gICAgKHNvdXJjZS5pbmNsdWRlcygnd29ya2Zsb3ctc2VyaWFsaXplJykgfHxcbiAgICAgIHNvdXJjZS5pbmNsdWRlcygnd29ya2Zsb3ctZGVzZXJpYWxpemUnKSkgJiZcbiAgICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSA9XG4gICAgKHNvdXJjZS5pbmNsdWRlcygnV09SS0ZMT1dfU0VSSUFMSVpFJykgfHxcbiAgICAgIHNvdXJjZS5pbmNsdWRlcygnV09SS0ZMT1dfREVTRVJJQUxJWkUnKSkgJiZcbiAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZUltcG9ydCxcbiAgICBoYXNTZXJkZVN5bWJvbCxcbiAgICBoYXNEaXJlY3RpdmU6IGhhc1VzZVdvcmtmbG93IHx8IGhhc1VzZVN0ZXAsXG4gICAgaGFzU2VyZGU6IGhhc1NlcmRlSW1wb3J0IHx8IGhhc1NlcmRlU3ltYm9sIHx8IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZmlsZSBwYXRoIGlzIGEgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGUuXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgZmlsZSBwYXRoIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIGlzIGEgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZShmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZW5lcmF0ZWRXb3JrZmxvd1BhdGhQYXR0ZXJuLnRlc3QoZmlsZVBhdGgpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBmaWxlIHBhdGggaXMgcGFydCBvZiB0aGUgQHdvcmtmbG93IFNESy5cbiAqIEBwYXJhbSBmaWxlUGF0aCAtIFRoZSBmaWxlIHBhdGggdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgaXMgcGFydCBvZiB0aGUgQHdvcmtmbG93IFNES1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXb3JrZmxvd1Nka0ZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gd29ya2Zsb3dTZGtQYXRoUGF0dGVybi50ZXN0KGZpbGVQYXRoKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZmlsZSBzaG91bGQgYmUgdHJhbnNmb3JtZWQgYmFzZWQgb24gaXRzIHBhdGggYW5kIGNvbnRlbnQgcGF0dGVybnMuXG4gKlxuICogTG9naWM6XG4gKiAtIEdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBhcmUgbmV2ZXIgdHJhbnNmb3JtZWRcbiAqIC0gRmlsZXMgd2l0aCBkaXJlY3RpdmVzICgndXNlIHdvcmtmbG93JyBvciAndXNlIHN0ZXAnKSBhcmUgYWx3YXlzIHRyYW5zZm9ybWVkXG4gKiAtIEZpbGVzIHdpdGggc2VyZGUgcGF0dGVybnMgYXJlIHRyYW5zZm9ybWVkLCB1bmxlc3MgdGhleSdyZSBAd29ya2Zsb3cgU0RLIGZpbGVzXG4gKiAgIChTREsgZmlsZXMgd2l0aCBzZXJkZSBwYXR0ZXJucyBhcmUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24sIG5vdCB1c2VyIGNvZGUpXG4gKlxuICogQHBhcmFtIGZpbGVQYXRoIC0gVGhlIGZpbGUgcGF0aCB0byBjaGVja1xuICogQHBhcmFtIHBhdHRlcm5zIC0gVGhlIGRldGVjdGVkIHBhdHRlcm5zIGZyb20gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucygpXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBmaWxlIHNob3VsZCBiZSB0cmFuc2Zvcm1lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkVHJhbnNmb3JtRmlsZShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcGF0dGVybnM6IFdvcmtmbG93UGF0dGVybk1hdGNoXG4pOiBib29sZWFuIHtcbiAgLy8gTmV2ZXIgdHJhbnNmb3JtIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlc1xuICBpZiAoaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQWx3YXlzIHRyYW5zZm9ybSBmaWxlcyB3aXRoIGRpcmVjdGl2ZXNcbiAgaWYgKHBhdHRlcm5zLmhhc0RpcmVjdGl2ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIGZpbGVzIHdpdGggc2VyZGUgcGF0dGVybnMsIHVubGVzcyB0aGV5J3JlIEB3b3JrZmxvdyBTREsgZmlsZXNcbiAgaWYgKHBhdHRlcm5zLmhhc1NlcmRlKSB7XG4gICAgcmV0dXJuICFpc1dvcmtmbG93U2RrRmlsZShmaWxlUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29tYmluZWQgcmVnZXggcGF0dGVybiBmb3IgdHVyYm9wYWNrIGNvbnRlbnQgbWF0Y2hpbmcuXG4gKiBVc2VzIGJhY2tyZWZlcmVuY2VzIHRvIGVuc3VyZSBtYXRjaGluZyBxdW90ZSB0eXBlcy5cbiAqIE1hdGNoZXM6ICd1c2Ugd29ya2Zsb3cnLCAndXNlIHN0ZXAnLCBAd29ya2Zsb3cvc2VyZGUgaW1wb3J0cywgU3ltYm9sLmZvciBzZXJpYWxpemF0aW9uIHN5bWJvbHMsXG4gKiBhbmQgV09SS0ZMT1dfU0VSSUFMSVpFL1dPUktGTE9XX0RFU0VSSUFMSVpFIGNvbXB1dGVkIHByb3BlcnR5IHVzYWdlXG4gKi9cbmV4cG9ydCBjb25zdCB0dXJib3BhY2tDb250ZW50UGF0dGVybiA9XG4gIC8odXNlIHdvcmtmbG93fHVzZSBzdGVwfGZyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwyfFN5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDNcXHMqXFwpfFxcW1xccypXT1JLRkxPV18oPzpTRVJJQUxJWkV8REVTRVJJQUxJWkUpXFxzKlxcXSkvO1xuIl19
|
|
@@ -261,6 +261,97 @@ describe('transform-utils patterns', () => {
|
|
|
261
261
|
expect(result.hasUseStep).toBe(true);
|
|
262
262
|
expect(result.hasSerde).toBe(true);
|
|
263
263
|
});
|
|
264
|
+
it('does not detect directives inside template literals', () => {
|
|
265
|
+
const source = `'use client';
|
|
266
|
+
const CODE_SNIPPET = \`import { sleep } from "workflow";
|
|
267
|
+
|
|
268
|
+
export async function handleUserSignup(email: string) {
|
|
269
|
+
"use workflow";
|
|
270
|
+
const user = await createUser(email);
|
|
271
|
+
}
|
|
272
|
+
\`;
|
|
273
|
+
export default function Page() { return null; }
|
|
274
|
+
`;
|
|
275
|
+
const result = detectWorkflowPatterns(source);
|
|
276
|
+
expect(result.hasUseWorkflow).toBe(false);
|
|
277
|
+
expect(result.hasDirective).toBe(false);
|
|
278
|
+
});
|
|
279
|
+
it('does not detect single-quoted step directives inside template literals', () => {
|
|
280
|
+
const source = `const CODE_SNIPPET = \`
|
|
281
|
+
export async function doThing() {
|
|
282
|
+
'use step';
|
|
283
|
+
}
|
|
284
|
+
\`;
|
|
285
|
+
`;
|
|
286
|
+
const result = detectWorkflowPatterns(source);
|
|
287
|
+
expect(result.hasUseStep).toBe(false);
|
|
288
|
+
expect(result.hasDirective).toBe(false);
|
|
289
|
+
});
|
|
290
|
+
it('does not detect directives inside comments', () => {
|
|
291
|
+
const source = `/*
|
|
292
|
+
export async function run() {
|
|
293
|
+
"use workflow";
|
|
294
|
+
}
|
|
295
|
+
*/
|
|
296
|
+
|
|
297
|
+
// 'use step';
|
|
298
|
+
export const value = 1;
|
|
299
|
+
`;
|
|
300
|
+
const result = detectWorkflowPatterns(source);
|
|
301
|
+
expect(result.hasUseWorkflow).toBe(false);
|
|
302
|
+
expect(result.hasUseStep).toBe(false);
|
|
303
|
+
expect(result.hasDirective).toBe(false);
|
|
304
|
+
});
|
|
305
|
+
it('does not detect directive-looking strings inside multiline calls', () => {
|
|
306
|
+
const source = `console.log(
|
|
307
|
+
"use step"
|
|
308
|
+
);
|
|
309
|
+
|
|
310
|
+
console.log(
|
|
311
|
+
'use workflow'
|
|
312
|
+
);
|
|
313
|
+
`;
|
|
314
|
+
const result = detectWorkflowPatterns(source);
|
|
315
|
+
expect(result.hasUseWorkflow).toBe(false);
|
|
316
|
+
expect(result.hasUseStep).toBe(false);
|
|
317
|
+
expect(result.hasDirective).toBe(false);
|
|
318
|
+
});
|
|
319
|
+
it('does not detect quoted directive-looking strings inside multiline calls', () => {
|
|
320
|
+
const source = `console.log(
|
|
321
|
+
'"use step"'
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
console.log(
|
|
325
|
+
"'use step'"
|
|
326
|
+
);
|
|
327
|
+
`;
|
|
328
|
+
const result = detectWorkflowPatterns(source);
|
|
329
|
+
expect(result.hasUseStep).toBe(false);
|
|
330
|
+
expect(result.hasDirective).toBe(false);
|
|
331
|
+
});
|
|
332
|
+
it('still detects real directives after template literals', () => {
|
|
333
|
+
const source = `const CODE_SNIPPET = \`
|
|
334
|
+
"use workflow";
|
|
335
|
+
\`;
|
|
336
|
+
|
|
337
|
+
export async function run() {
|
|
338
|
+
"use workflow";
|
|
339
|
+
}
|
|
340
|
+
`;
|
|
341
|
+
const result = detectWorkflowPatterns(source);
|
|
342
|
+
expect(result.hasUseWorkflow).toBe(true);
|
|
343
|
+
expect(result.hasDirective).toBe(true);
|
|
344
|
+
});
|
|
345
|
+
it('still detects directives after other directive prologue entries', () => {
|
|
346
|
+
const source = `export async function run() {
|
|
347
|
+
"use strict";
|
|
348
|
+
"use workflow";
|
|
349
|
+
}
|
|
350
|
+
`;
|
|
351
|
+
const result = detectWorkflowPatterns(source);
|
|
352
|
+
expect(result.hasUseWorkflow).toBe(true);
|
|
353
|
+
expect(result.hasDirective).toBe(true);
|
|
354
|
+
});
|
|
264
355
|
});
|
|
265
356
|
describe('isWorkflowSdkFile', () => {
|
|
266
357
|
it('matches direct @workflow package path in node_modules', () => {
|
|
@@ -280,4 +371,4 @@ describe('transform-utils patterns', () => {
|
|
|
280
371
|
});
|
|
281
372
|
});
|
|
282
373
|
});
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLXV0aWxzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNmb3JtLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsb0NBQW9DLEVBQ3BDLDBCQUEwQixFQUMxQiwwQkFBMEIsR0FDM0IsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUNwRCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDMUMsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUNyRSxNQUFNLE1BQU0sR0FBRyx1REFBdUQsQ0FBQztZQUN2RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUNyRSxNQUFNLE1BQU0sR0FBRyx1REFBdUQsQ0FBQztZQUN2RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxNQUFNLE1BQU0sR0FBRyw2RUFBNkUsQ0FBQztZQUM3RixNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLE1BQU0sR0FBRyw2REFBNkQsQ0FBQztZQUM3RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLENBQ0osMEJBQTBCLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQ3JFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUNKLDBCQUEwQixDQUFDLElBQUksQ0FDN0IsNENBQTRDLENBQzdDLENBQ0YsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDMUMsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLE1BQU0sR0FBRyx3REFBd0QsQ0FBQztZQUN4RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLE1BQU0sR0FBRyxzREFBc0QsQ0FBQztZQUN0RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtZQUN6QyxNQUFNLE1BQU0sR0FBRyx3REFBd0QsQ0FBQztZQUN4RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUNqRCxNQUFNLENBQ0osMEJBQTBCLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQ3RFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2IsTUFBTSxDQUNKLDBCQUEwQixDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUN0RSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUNqRCxNQUFNLE1BQU0sR0FBRzs7Ozs7Ozs7Ozs7Ozs7O09BZWQsQ0FBQztZQUNGLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO1lBQ2pELE1BQU0sQ0FDSiwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FDOUQsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDZCxNQUFNLENBQ0osMEJBQTBCLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQ3pFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtZQUNsRCxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2xFLEtBQUssQ0FDTixDQUFDO1lBQ0YsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRSxLQUFLLENBQ04sQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7WUFDbkQsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7Ozs7OztPQVlkLENBQUM7WUFDRixNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNELHdFQUF3RTtZQUN4RSw2REFBNkQ7WUFDN0QsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7Ozs7T0FVZCxDQUFDO1lBQ0YsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxrQ0FBa0M7WUFDbEMsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7Ozs7Ozs7O09BY2QsQ0FBQztZQUNGLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUNwRCxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQzdELE1BQU0sTUFBTSxHQUFHLDBDQUEwQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQy9ELE1BQU0sTUFBTSxHQUFHLHdDQUF3QyxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELE1BQU0sQ0FDSixvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FDcEUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDYixNQUFNLENBQ0osb0NBQW9DLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQ3hFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLDhEQUE4RDtZQUM5RCxNQUFNLE1BQU0sR0FBRzs7Ozs7Ozs7Ozs7Ozs7OztPQWdCZCxDQUFDO1lBQ0YsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRSxrRkFBa0Y7WUFDbEYsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUU7WUFDeEMsTUFBTSxDQUNKLG9DQUFvQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUN4RSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNkLE1BQU0sQ0FDSixvQ0FBb0MsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FDckUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzFDLE1BQU0sQ0FDSixvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FDcEUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDZCxNQUFNLENBQ0osb0NBQW9DLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQ3RFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxNQUFNLEdBQUcsdURBQXVELENBQUM7WUFDdkUsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLHdEQUF3RCxDQUFDO1lBQ3hFLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtZQUM5RCxNQUFNLE1BQU0sR0FBRywwQ0FBMEMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7WUFDakUsd0RBQXdEO1lBQ3hELE1BQU0sTUFBTSxHQUFHOzs7Ozs7Ozs7Ozs7OztPQWNkLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUU7WUFDdkQsTUFBTSxNQUFNLEdBQUc7Ozs7OztPQU1kLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7OztPQVNkLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQy9ELE1BQU0sQ0FDSixpQkFBaUIsQ0FDZiw0REFBNEQsQ0FDN0QsQ0FDRixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtZQUM5RCxNQUFNLENBQ0osaUJBQWlCLENBQUMsZ0RBQWdELENBQUMsQ0FDcEUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxDQUNKLGlCQUFpQixDQUNmLG9HQUFvRyxDQUNyRyxDQUNGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1lBQzFELE1BQU0sQ0FDSixpQkFBaUIsQ0FDZixrRkFBa0YsQ0FDbkYsQ0FDRixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLENBQ0osaUJBQWlCLENBQ2YsMEVBQTBFLENBQzNFLENBQ0YsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHtcbiAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyxcbiAgaXNXb3JrZmxvd1Nka0ZpbGUsXG4gIHVzZVN0ZXBQYXR0ZXJuLFxuICB1c2VXb3JrZmxvd1BhdHRlcm4sXG4gIHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybixcbiAgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4sXG4gIHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLFxufSBmcm9tICcuL3RyYW5zZm9ybS11dGlscy5qcyc7XG5cbmRlc2NyaWJlKCd0cmFuc2Zvcm0tdXRpbHMgcGF0dGVybnMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd1c2VXb3JrZmxvd1BhdHRlcm4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBcInVzZSB3b3JrZmxvd1wiIHdpdGggc2luZ2xlIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChgJ3VzZSB3b3JrZmxvdyc7YCkpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QodXNlV29ya2Zsb3dQYXR0ZXJuLnRlc3QoYCd1c2Ugd29ya2Zsb3cnYCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIFwidXNlIHdvcmtmbG93XCIgd2l0aCBkb3VibGUgcXVvdGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGBcInVzZSB3b3JrZmxvd1wiO2ApKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGBcInVzZSB3b3JrZmxvd1wiYCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGAgICd1c2Ugd29ya2Zsb3cnO2ApKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGBcXHRcInVzZSB3b3JrZmxvd1wiO2ApKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggaW5saW5lIHVzYWdlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGBjb25zdCB4ID0gJ3VzZSB3b3JrZmxvdyc7YCkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXNlU3RlcFBhdHRlcm4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBcInVzZSBzdGVwXCIgd2l0aCBzaW5nbGUgcXVvdGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVN0ZXBQYXR0ZXJuLnRlc3QoYCd1c2Ugc3RlcCc7YCkpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QodXNlU3RlcFBhdHRlcm4udGVzdChgJ3VzZSBzdGVwJ2ApKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBcInVzZSBzdGVwXCIgd2l0aCBkb3VibGUgcXVvdGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVN0ZXBQYXR0ZXJuLnRlc3QoYFwidXNlIHN0ZXBcIjtgKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdCh1c2VTdGVwUGF0dGVybi50ZXN0KGBcInVzZSBzdGVwXCJgKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgbWF0Y2ggaW1wb3J0IGZyb20gQHdvcmtmbG93L3NlcmRlIHdpdGggc2luZ2xlIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO2A7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBpbXBvcnQgZnJvbSBAd29ya2Zsb3cvc2VyZGUgd2l0aCBkb3VibGUgcXVvdGVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gXCJAd29ya2Zsb3cvc2VyZGVcIjtgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggaW1wb3J0IHdpdGggbXVsdGlwbGUgc3BlY2lmaWVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUsIFdPUktGTE9XX0RFU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggaW1wb3J0IHdpdGggdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBpbXBvcnQgdHlwZSB7IFNlcmlhbGl6YXRpb25TeW1ib2wgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO2A7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggc2ltaWxhciBidXQgZGlmZmVyZW50IHBhY2thZ2VzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybi50ZXN0KGBpbXBvcnQgeyB4IH0gZnJvbSAnQG90aGVyL3NlcmRlJztgKVxuICAgICAgKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChcbiAgICAgICAgICBgaW1wb3J0IHsgeCB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZS11dGlscyc7YFxuICAgICAgICApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBTeW1ib2wuZm9yIHdpdGggd29ya2Zsb3ctc2VyaWFsaXplJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyldKGluc3RhbmNlKSB7fWA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBTeW1ib2wuZm9yIHdpdGggd29ya2Zsb3ctZGVzZXJpYWxpemUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXShkYXRhKSB7fWA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCB3aXRoIGRvdWJsZSBxdW90ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgc3RhdGljIFtTeW1ib2wuZm9yKFwid29ya2Zsb3ctc2VyaWFsaXplXCIpXShpbnN0YW5jZSkge31gO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggd2l0aCB3aGl0ZXNwYWNlIHZhcmlhdGlvbnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3QoYFN5bWJvbC5mb3IoICd3b3JrZmxvdy1zZXJpYWxpemUnIClgKVxuICAgICAgKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGBTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpYClcbiAgICAgICkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggaW4gYSBmdWxsIGNsYXNzIGRlZmluaXRpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGV4cG9ydCBjbGFzcyBQb2ludCB7XG4gICAgICAgICAgY29uc3RydWN0b3IoeCwgeSkge1xuICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKV0oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHg6IGluc3RhbmNlLngsIHk6IGluc3RhbmNlLnkgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LWRlc2VyaWFsaXplJyldKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQoZGF0YS54LCBkYXRhLnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtYXRjaCBvdGhlciBTeW1ib2wuZm9yIHVzYWdlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGBTeW1ib2wuZm9yKCdvdGhlci1zeW1ib2wnKWApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGBTeW1ib2wuZm9yKCd3b3JrZmxvdy1zb21ldGhpbmctZWxzZScpYClcbiAgICAgICkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtYXRjaCBub24tU3ltYm9sLmZvciBwYXR0ZXJucycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGAnd29ya2Zsb3ctc2VyaWFsaXplJ2ApKS50b0JlKFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGB3b3JrZmxvdy1kZXNlcmlhbGl6ZWApKS50b0JlKFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvbWJpbmVkIGRldGVjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGRldGVjdCBmaWxlIHVzaW5nIGltcG9ydGVkIHN5bWJvbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSwgV09SS0ZMT1dfREVTRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuXG4gICAgICAgIGV4cG9ydCBjbGFzcyBNeUNsYXNzIHtcbiAgICAgICAgICBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBpbnN0YW5jZS52YWx1ZSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTXlDbGFzcyhkYXRhLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgICAgLy8gTm90ZTogd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4gd29uJ3QgbWF0Y2ggaGVyZSBiZWNhdXNlIHRoZSBzeW1ib2xzXG4gICAgICAvLyBhcmUgcmVmZXJlbmNlZCBieSBpZGVudGlmaWVyLCBub3QgZGlyZWN0bHkgYXMgU3ltYm9sLmZvcigpXG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGZpbGUgdXNpbmcgZGlyZWN0IFN5bWJvbC5mb3InLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGV4cG9ydCBjbGFzcyBQb2ludCB7XG4gICAgICAgICAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKV0oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHg6IGluc3RhbmNlLnggfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LWRlc2VyaWFsaXplJyldKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQoZGF0YS54KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBmaWxlIHdpdGggYm90aCBwYXR0ZXJucycsICgpID0+IHtcbiAgICAgIC8vIFRoaXMgd291bGQgYmUgdW51c3VhbCBidXQgdmFsaWRcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBcbiAgICAgICAgaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcblxuICAgICAgICBleHBvcnQgY2xhc3MgUG9pbnQge1xuICAgICAgICAgIC8vIFVzaW5nIGltcG9ydGVkIHN5bWJvbFxuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogaW5zdGFuY2UueCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVzaW5nIGRpcmVjdCBTeW1ib2wuZm9yXG4gICAgICAgICAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXShkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50KGRhdGEueCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBbV09SS0ZMT1dfU0VSSUFMSVpFXSBjb21wdXRlZCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2UpIHt9YDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBbV09SS0ZMT1dfREVTRVJJQUxJWkVdIGNvbXB1dGVkIHByb3BlcnR5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGEpIHt9YDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCB3aXRoIHdoaXRlc3BhY2UgaW5zaWRlIGJyYWNrZXRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChgWyBXT1JLRkxPV19TRVJJQUxJWkUgXWApXG4gICAgICApLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybi50ZXN0KGBbICBXT1JLRkxPV19ERVNFUklBTElaRSAgXWApXG4gICAgICApLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGluIGJ1bmRsZWQgY29kZSB3aGVyZSBzeW1ib2xzIGFyZSBpbXBvcnRlZCBmcm9tIGNodW5rcycsICgpID0+IHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIHBhdHRlcm4gc2VlbiBpbiBidW5kbGVkIHBhY2thZ2VzIGxpa2UganVzdC1iYXNoXG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGltcG9ydCB7XG4gICAgICAgICAgV09SS0ZMT1dfREVTRVJJQUxJWkUsXG4gICAgICAgICAgV09SS0ZMT1dfU0VSSUFMSVpFXG4gICAgICAgIH0gZnJvbSBcIi4vY2h1bmtzL2NodW5rLTQ1MzMyM1FZLmpzXCI7XG5cbiAgICAgICAgdmFyIEJhc2ggPSBjbGFzcyBfQmFzaCB7XG4gICAgICAgICAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmczogaW5zdGFuY2UuZnMgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGljIFtXT1JLRkxPV19ERVNFUklBTElaRV0oc2VyaWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUoX0Jhc2gucHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgIGZzOiB7IHZhbHVlOiBzZXJpYWxpemVkLmZzIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIGA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICAgIC8vIE5vdGU6IGltcG9ydCBwYXR0ZXJuIHdvbid0IG1hdGNoIGJlY2F1c2UgaXQncyBmcm9tIGEgY2h1bmssIG5vdCBAd29ya2Zsb3cvc2VyZGVcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggcGFydGlhbCBuYW1lcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3QoYFtXT1JLRkxPV19TRVJJQUxJWkVfRVhUUkFdYClcbiAgICAgICkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybi50ZXN0KGBbTVlfV09SS0ZMT1dfU0VSSUFMSVpFXWApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggc3RyaW5nIGxpdGVyYWxzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChgWydXT1JLRkxPV19TRVJJQUxJWkUnXWApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChgW1wiV09SS0ZMT1dfREVTRVJJQUxJWkVcIl1gKVxuICAgICAgKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RldGVjdFdvcmtmbG93UGF0dGVybnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBkZXRlY3QgaGFzU2VyZGUgZm9yIEB3b3JrZmxvdy9zZXJkZSBpbXBvcnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztgO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzU2VyZGVJbXBvcnQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBoYXNTZXJkZSBmb3IgU3ltYm9sLmZvciBwYXR0ZXJuJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyldKGluc3RhbmNlKSB7fWA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1NlcmRlKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZVN5bWJvbCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGhhc1NlcmRlIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBwYXR0ZXJuJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkge31gO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGhhc1NlcmRlIGZvciBidW5kbGVkIHRoaXJkLXBhcnR5IHBhY2thZ2VzJywgKCkgPT4ge1xuICAgICAgLy8gU2ltdWxhdGVzIGJ1bmRsZWQgb3V0cHV0IGZyb20gcGFja2FnZXMgbGlrZSBqdXN0LWJhc2hcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBcbiAgICAgICAgaW1wb3J0IHtcbiAgICAgICAgICBXT1JLRkxPV19ERVNFUklBTElaRSxcbiAgICAgICAgICBXT1JLRkxPV19TRVJJQUxJWkVcbiAgICAgICAgfSBmcm9tIFwiLi9jaHVua3MvY2h1bmstQUJDMTIzLmpzXCI7XG5cbiAgICAgICAgdmFyIE15Q2xhc3MgPSBjbGFzcyB7XG4gICAgICAgICAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiBpbnN0YW5jZS5kYXRhIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKHNlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTXlDbGFzcyhzZXJpYWxpemVkLmRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIGA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1NlcmRlKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgZGV0ZWN0IGhhc1NlcmRlIGZvciB1bnJlbGF0ZWQgY29kZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBcbiAgICAgICAgZXhwb3J0IGNsYXNzIFJlZ3VsYXJDbGFzcyB7XG4gICAgICAgICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1NlcmRlKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGJvdGggZGlyZWN0aXZlIGFuZCBzZXJkZSBwYXR0ZXJucycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBcbiAgICAgICAgJ3VzZSBzdGVwJztcbiAgICAgICAgaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbiAgICAgICAgXG4gICAgICAgIGV4cG9ydCBjbGFzcyBQb2ludCB7XG4gICAgICAgICAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4geyB4OiBpbnN0YW5jZS54IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNEaXJlY3RpdmUpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1VzZVN0ZXApLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1NlcmRlKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNXb3JrZmxvd1Nka0ZpbGUnLCAoKSA9PiB7XG4gICAgaXQoJ21hdGNoZXMgZGlyZWN0IEB3b3JrZmxvdyBwYWNrYWdlIHBhdGggaW4gbm9kZV9tb2R1bGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBpc1dvcmtmbG93U2RrRmlsZShcbiAgICAgICAgICAnL3RtcC9hcHAvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL2Rpc3Qvc2VyaWFsaXphdGlvbi5qcydcbiAgICAgICAgKVxuICAgICAgKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZGlyZWN0IHdvcmtmbG93IHBhY2thZ2UgcGF0aCBpbiBub2RlX21vZHVsZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGlzV29ya2Zsb3dTZGtGaWxlKCcvdG1wL2FwcC9ub2RlX21vZHVsZXMvd29ya2Zsb3cvZGlzdC9ydW50aW1lLmpzJylcbiAgICAgICkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIHBucG0gdmlydHVhbCBzdG9yZSBAd29ya2Zsb3cgcGFja2FnZSBwYXRoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBpc1dvcmtmbG93U2RrRmlsZShcbiAgICAgICAgICAnL3RtcC9hcHAvbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdytjb3JlQDQuMS4wL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZS9kaXN0L3NlcmlhbGl6YXRpb24uanMnXG4gICAgICAgIClcbiAgICAgICkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIHBucG0gdmlydHVhbCBzdG9yZSB3b3JrZmxvdyBwYWNrYWdlIHBhdGgnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGlzV29ya2Zsb3dTZGtGaWxlKFxuICAgICAgICAgICcvdG1wL2FwcC9ub2RlX21vZHVsZXMvLnBucG0vd29ya2Zsb3dANC4xLjAvbm9kZV9tb2R1bGVzL3dvcmtmbG93L2Rpc3QvcnVudGltZS5qcydcbiAgICAgICAgKVxuICAgICAgKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG1hdGNoIG5vbi13b3JrZmxvdyBwYWNrYWdlIGluIHBucG0gc3RvcmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGlzV29ya2Zsb3dTZGtGaWxlKFxuICAgICAgICAgICcvdG1wL2FwcC9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9sb2Rhc2guanMnXG4gICAgICAgIClcbiAgICAgICkudG9CZShmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
374
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLXV0aWxzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNmb3JtLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsb0NBQW9DLEVBQ3BDLDBCQUEwQixFQUMxQiwwQkFBMEIsR0FDM0IsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUNwRCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDMUMsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUNyRSxNQUFNLE1BQU0sR0FBRyx1REFBdUQsQ0FBQztZQUN2RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUNyRSxNQUFNLE1BQU0sR0FBRyx1REFBdUQsQ0FBQztZQUN2RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxNQUFNLE1BQU0sR0FBRyw2RUFBNkUsQ0FBQztZQUM3RixNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLE1BQU0sR0FBRyw2REFBNkQsQ0FBQztZQUM3RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLENBQ0osMEJBQTBCLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQ3JFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUNKLDBCQUEwQixDQUFDLElBQUksQ0FDN0IsNENBQTRDLENBQzdDLENBQ0YsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDMUMsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLE1BQU0sR0FBRyx3REFBd0QsQ0FBQztZQUN4RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLE1BQU0sR0FBRyxzREFBc0QsQ0FBQztZQUN0RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtZQUN6QyxNQUFNLE1BQU0sR0FBRyx3REFBd0QsQ0FBQztZQUN4RSxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUNqRCxNQUFNLENBQ0osMEJBQTBCLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQ3RFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2IsTUFBTSxDQUNKLDBCQUEwQixDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxDQUN0RSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUNqRCxNQUFNLE1BQU0sR0FBRzs7Ozs7Ozs7Ozs7Ozs7O09BZWQsQ0FBQztZQUNGLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO1lBQ2pELE1BQU0sQ0FDSiwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FDOUQsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDZCxNQUFNLENBQ0osMEJBQTBCLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQ3pFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtZQUNsRCxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2xFLEtBQUssQ0FDTixDQUFDO1lBQ0YsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRSxLQUFLLENBQ04sQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7WUFDbkQsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7Ozs7OztPQVlkLENBQUM7WUFDRixNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNELHdFQUF3RTtZQUN4RSw2REFBNkQ7WUFDN0QsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7Ozs7T0FVZCxDQUFDO1lBQ0YsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxrQ0FBa0M7WUFDbEMsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7Ozs7Ozs7O09BY2QsQ0FBQztZQUNGLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUNwRCxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQzdELE1BQU0sTUFBTSxHQUFHLDBDQUEwQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQy9ELE1BQU0sTUFBTSxHQUFHLHdDQUF3QyxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELE1BQU0sQ0FDSixvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FDcEUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDYixNQUFNLENBQ0osb0NBQW9DLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQ3hFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLDhEQUE4RDtZQUM5RCxNQUFNLE1BQU0sR0FBRzs7Ozs7Ozs7Ozs7Ozs7OztPQWdCZCxDQUFDO1lBQ0YsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRSxrRkFBa0Y7WUFDbEYsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUU7WUFDeEMsTUFBTSxDQUNKLG9DQUFvQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUN4RSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNkLE1BQU0sQ0FDSixvQ0FBb0MsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FDckUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzFDLE1BQU0sQ0FDSixvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FDcEUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDZCxNQUFNLENBQ0osb0NBQW9DLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQ3RFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxNQUFNLEdBQUcsdURBQXVELENBQUM7WUFDdkUsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLHdEQUF3RCxDQUFDO1lBQ3hFLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtZQUM5RCxNQUFNLE1BQU0sR0FBRywwQ0FBMEMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7WUFDakUsd0RBQXdEO1lBQ3hELE1BQU0sTUFBTSxHQUFHOzs7Ozs7Ozs7Ozs7OztPQWNkLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUU7WUFDdkQsTUFBTSxNQUFNLEdBQUc7Ozs7OztPQU1kLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7OztPQVNkLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7OztDQVNwQixDQUFDO1lBQ0ksTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0VBQXdFLEVBQUUsR0FBRyxFQUFFO1lBQ2hGLE1BQU0sTUFBTSxHQUFHOzs7OztDQUtwQixDQUFDO1lBQ0ksTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sTUFBTSxHQUFHOzs7Ozs7OztDQVFwQixDQUFDO1lBQ0ksTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1lBQzFFLE1BQU0sTUFBTSxHQUFHOzs7Ozs7O0NBT3BCLENBQUM7WUFDSSxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRSxHQUFHLEVBQUU7WUFDakYsTUFBTSxNQUFNLEdBQUc7Ozs7Ozs7Q0FPcEIsQ0FBQztZQUNJLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtZQUMvRCxNQUFNLE1BQU0sR0FBRzs7Ozs7OztDQU9wQixDQUFDO1lBQ0ksTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsR0FBRyxFQUFFO1lBQ3pFLE1BQU0sTUFBTSxHQUFHOzs7O0NBSXBCLENBQUM7WUFDSSxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQy9ELE1BQU0sQ0FDSixpQkFBaUIsQ0FDZiw0REFBNEQsQ0FDN0QsQ0FDRixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtZQUM5RCxNQUFNLENBQ0osaUJBQWlCLENBQUMsZ0RBQWdELENBQUMsQ0FDcEUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxDQUNKLGlCQUFpQixDQUNmLG9HQUFvRyxDQUNyRyxDQUNGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1lBQzFELE1BQU0sQ0FDSixpQkFBaUIsQ0FDZixrRkFBa0YsQ0FDbkYsQ0FDRixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLENBQ0osaUJBQWlCLENBQ2YsMEVBQTBFLENBQzNFLENBQ0YsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHtcbiAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyxcbiAgaXNXb3JrZmxvd1Nka0ZpbGUsXG4gIHVzZVN0ZXBQYXR0ZXJuLFxuICB1c2VXb3JrZmxvd1BhdHRlcm4sXG4gIHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybixcbiAgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4sXG4gIHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLFxufSBmcm9tICcuL3RyYW5zZm9ybS11dGlscy5qcyc7XG5cbmRlc2NyaWJlKCd0cmFuc2Zvcm0tdXRpbHMgcGF0dGVybnMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd1c2VXb3JrZmxvd1BhdHRlcm4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBcInVzZSB3b3JrZmxvd1wiIHdpdGggc2luZ2xlIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChgJ3VzZSB3b3JrZmxvdyc7YCkpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QodXNlV29ya2Zsb3dQYXR0ZXJuLnRlc3QoYCd1c2Ugd29ya2Zsb3cnYCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIFwidXNlIHdvcmtmbG93XCIgd2l0aCBkb3VibGUgcXVvdGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGBcInVzZSB3b3JrZmxvd1wiO2ApKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGBcInVzZSB3b3JrZmxvd1wiYCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGAgICd1c2Ugd29ya2Zsb3cnO2ApKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGBcXHRcInVzZSB3b3JrZmxvd1wiO2ApKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggaW5saW5lIHVzYWdlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGBjb25zdCB4ID0gJ3VzZSB3b3JrZmxvdyc7YCkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXNlU3RlcFBhdHRlcm4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBcInVzZSBzdGVwXCIgd2l0aCBzaW5nbGUgcXVvdGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVN0ZXBQYXR0ZXJuLnRlc3QoYCd1c2Ugc3RlcCc7YCkpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QodXNlU3RlcFBhdHRlcm4udGVzdChgJ3VzZSBzdGVwJ2ApKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBcInVzZSBzdGVwXCIgd2l0aCBkb3VibGUgcXVvdGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVzZVN0ZXBQYXR0ZXJuLnRlc3QoYFwidXNlIHN0ZXBcIjtgKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdCh1c2VTdGVwUGF0dGVybi50ZXN0KGBcInVzZSBzdGVwXCJgKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgbWF0Y2ggaW1wb3J0IGZyb20gQHdvcmtmbG93L3NlcmRlIHdpdGggc2luZ2xlIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO2A7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBpbXBvcnQgZnJvbSBAd29ya2Zsb3cvc2VyZGUgd2l0aCBkb3VibGUgcXVvdGVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gXCJAd29ya2Zsb3cvc2VyZGVcIjtgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggaW1wb3J0IHdpdGggbXVsdGlwbGUgc3BlY2lmaWVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUsIFdPUktGTE9XX0RFU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggaW1wb3J0IHdpdGggdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBpbXBvcnQgdHlwZSB7IFNlcmlhbGl6YXRpb25TeW1ib2wgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO2A7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggc2ltaWxhciBidXQgZGlmZmVyZW50IHBhY2thZ2VzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybi50ZXN0KGBpbXBvcnQgeyB4IH0gZnJvbSAnQG90aGVyL3NlcmRlJztgKVxuICAgICAgKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChcbiAgICAgICAgICBgaW1wb3J0IHsgeCB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZS11dGlscyc7YFxuICAgICAgICApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBTeW1ib2wuZm9yIHdpdGggd29ya2Zsb3ctc2VyaWFsaXplJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyldKGluc3RhbmNlKSB7fWA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBTeW1ib2wuZm9yIHdpdGggd29ya2Zsb3ctZGVzZXJpYWxpemUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXShkYXRhKSB7fWA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCB3aXRoIGRvdWJsZSBxdW90ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgc3RhdGljIFtTeW1ib2wuZm9yKFwid29ya2Zsb3ctc2VyaWFsaXplXCIpXShpbnN0YW5jZSkge31gO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggd2l0aCB3aGl0ZXNwYWNlIHZhcmlhdGlvbnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3QoYFN5bWJvbC5mb3IoICd3b3JrZmxvdy1zZXJpYWxpemUnIClgKVxuICAgICAgKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGBTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpYClcbiAgICAgICkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggaW4gYSBmdWxsIGNsYXNzIGRlZmluaXRpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGV4cG9ydCBjbGFzcyBQb2ludCB7XG4gICAgICAgICAgY29uc3RydWN0b3IoeCwgeSkge1xuICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKV0oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHg6IGluc3RhbmNlLngsIHk6IGluc3RhbmNlLnkgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LWRlc2VyaWFsaXplJyldKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQoZGF0YS54LCBkYXRhLnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtYXRjaCBvdGhlciBTeW1ib2wuZm9yIHVzYWdlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGBTeW1ib2wuZm9yKCdvdGhlci1zeW1ib2wnKWApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGBTeW1ib2wuZm9yKCd3b3JrZmxvdy1zb21ldGhpbmctZWxzZScpYClcbiAgICAgICkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtYXRjaCBub24tU3ltYm9sLmZvciBwYXR0ZXJucycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGAnd29ya2Zsb3ctc2VyaWFsaXplJ2ApKS50b0JlKFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGB3b3JrZmxvdy1kZXNlcmlhbGl6ZWApKS50b0JlKFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvbWJpbmVkIGRldGVjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGRldGVjdCBmaWxlIHVzaW5nIGltcG9ydGVkIHN5bWJvbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSwgV09SS0ZMT1dfREVTRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuXG4gICAgICAgIGV4cG9ydCBjbGFzcyBNeUNsYXNzIHtcbiAgICAgICAgICBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBpbnN0YW5jZS52YWx1ZSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTXlDbGFzcyhkYXRhLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgICAgLy8gTm90ZTogd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4gd29uJ3QgbWF0Y2ggaGVyZSBiZWNhdXNlIHRoZSBzeW1ib2xzXG4gICAgICAvLyBhcmUgcmVmZXJlbmNlZCBieSBpZGVudGlmaWVyLCBub3QgZGlyZWN0bHkgYXMgU3ltYm9sLmZvcigpXG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGZpbGUgdXNpbmcgZGlyZWN0IFN5bWJvbC5mb3InLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGV4cG9ydCBjbGFzcyBQb2ludCB7XG4gICAgICAgICAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKV0oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHg6IGluc3RhbmNlLnggfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LWRlc2VyaWFsaXplJyldKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQoZGF0YS54KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBmaWxlIHdpdGggYm90aCBwYXR0ZXJucycsICgpID0+IHtcbiAgICAgIC8vIFRoaXMgd291bGQgYmUgdW51c3VhbCBidXQgdmFsaWRcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBcbiAgICAgICAgaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcblxuICAgICAgICBleHBvcnQgY2xhc3MgUG9pbnQge1xuICAgICAgICAgIC8vIFVzaW5nIGltcG9ydGVkIHN5bWJvbFxuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogaW5zdGFuY2UueCB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVzaW5nIGRpcmVjdCBTeW1ib2wuZm9yXG4gICAgICAgICAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXShkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50KGRhdGEueCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBbV09SS0ZMT1dfU0VSSUFMSVpFXSBjb21wdXRlZCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2UpIHt9YDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBbV09SS0ZMT1dfREVTRVJJQUxJWkVdIGNvbXB1dGVkIHByb3BlcnR5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGEpIHt9YDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCB3aXRoIHdoaXRlc3BhY2UgaW5zaWRlIGJyYWNrZXRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChgWyBXT1JLRkxPV19TRVJJQUxJWkUgXWApXG4gICAgICApLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybi50ZXN0KGBbICBXT1JLRkxPV19ERVNFUklBTElaRSAgXWApXG4gICAgICApLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGluIGJ1bmRsZWQgY29kZSB3aGVyZSBzeW1ib2xzIGFyZSBpbXBvcnRlZCBmcm9tIGNodW5rcycsICgpID0+IHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIHBhdHRlcm4gc2VlbiBpbiBidW5kbGVkIHBhY2thZ2VzIGxpa2UganVzdC1iYXNoXG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGltcG9ydCB7XG4gICAgICAgICAgV09SS0ZMT1dfREVTRVJJQUxJWkUsXG4gICAgICAgICAgV09SS0ZMT1dfU0VSSUFMSVpFXG4gICAgICAgIH0gZnJvbSBcIi4vY2h1bmtzL2NodW5rLTQ1MzMyM1FZLmpzXCI7XG5cbiAgICAgICAgdmFyIEJhc2ggPSBjbGFzcyBfQmFzaCB7XG4gICAgICAgICAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmczogaW5zdGFuY2UuZnMgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGljIFtXT1JLRkxPV19ERVNFUklBTElaRV0oc2VyaWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUoX0Jhc2gucHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgIGZzOiB7IHZhbHVlOiBzZXJpYWxpemVkLmZzIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIGA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICAgIC8vIE5vdGU6IGltcG9ydCBwYXR0ZXJuIHdvbid0IG1hdGNoIGJlY2F1c2UgaXQncyBmcm9tIGEgY2h1bmssIG5vdCBAd29ya2Zsb3cvc2VyZGVcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggcGFydGlhbCBuYW1lcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3QoYFtXT1JLRkxPV19TRVJJQUxJWkVfRVhUUkFdYClcbiAgICAgICkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybi50ZXN0KGBbTVlfV09SS0ZMT1dfU0VSSUFMSVpFXWApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggc3RyaW5nIGxpdGVyYWxzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChgWydXT1JLRkxPV19TRVJJQUxJWkUnXWApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChgW1wiV09SS0ZMT1dfREVTRVJJQUxJWkVcIl1gKVxuICAgICAgKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RldGVjdFdvcmtmbG93UGF0dGVybnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBkZXRlY3QgaGFzU2VyZGUgZm9yIEB3b3JrZmxvdy9zZXJkZSBpbXBvcnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztgO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzU2VyZGVJbXBvcnQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBoYXNTZXJkZSBmb3IgU3ltYm9sLmZvciBwYXR0ZXJuJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyldKGluc3RhbmNlKSB7fWA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1NlcmRlKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZVN5bWJvbCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGhhc1NlcmRlIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBwYXR0ZXJuJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkge31gO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGhhc1NlcmRlIGZvciBidW5kbGVkIHRoaXJkLXBhcnR5IHBhY2thZ2VzJywgKCkgPT4ge1xuICAgICAgLy8gU2ltdWxhdGVzIGJ1bmRsZWQgb3V0cHV0IGZyb20gcGFja2FnZXMgbGlrZSBqdXN0LWJhc2hcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBcbiAgICAgICAgaW1wb3J0IHtcbiAgICAgICAgICBXT1JLRkxPV19ERVNFUklBTElaRSxcbiAgICAgICAgICBXT1JLRkxPV19TRVJJQUxJWkVcbiAgICAgICAgfSBmcm9tIFwiLi9jaHVua3MvY2h1bmstQUJDMTIzLmpzXCI7XG5cbiAgICAgICAgdmFyIE15Q2xhc3MgPSBjbGFzcyB7XG4gICAgICAgICAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiBpbnN0YW5jZS5kYXRhIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKHNlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTXlDbGFzcyhzZXJpYWxpemVkLmRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIGA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1NlcmRlKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgZGV0ZWN0IGhhc1NlcmRlIGZvciB1bnJlbGF0ZWQgY29kZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBcbiAgICAgICAgZXhwb3J0IGNsYXNzIFJlZ3VsYXJDbGFzcyB7XG4gICAgICAgICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1NlcmRlKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGJvdGggZGlyZWN0aXZlIGFuZCBzZXJkZSBwYXR0ZXJucycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBcbiAgICAgICAgJ3VzZSBzdGVwJztcbiAgICAgICAgaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbiAgICAgICAgXG4gICAgICAgIGV4cG9ydCBjbGFzcyBQb2ludCB7XG4gICAgICAgICAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4geyB4OiBpbnN0YW5jZS54IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNEaXJlY3RpdmUpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1VzZVN0ZXApLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1NlcmRlKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGRldGVjdCBkaXJlY3RpdmVzIGluc2lkZSB0ZW1wbGF0ZSBsaXRlcmFscycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGAndXNlIGNsaWVudCc7XG5jb25zdCBDT0RFX1NOSVBQRVQgPSBcXGBpbXBvcnQgeyBzbGVlcCB9IGZyb20gXCJ3b3JrZmxvd1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlVXNlclNpZ251cChlbWFpbDogc3RyaW5nKSB7XG4gIFwidXNlIHdvcmtmbG93XCI7XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBjcmVhdGVVc2VyKGVtYWlsKTtcbn1cblxcYDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhZ2UoKSB7IHJldHVybiBudWxsOyB9XG5gO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNVc2VXb3JrZmxvdykudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc0RpcmVjdGl2ZSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgZGV0ZWN0IHNpbmdsZS1xdW90ZWQgc3RlcCBkaXJlY3RpdmVzIGluc2lkZSB0ZW1wbGF0ZSBsaXRlcmFscycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBjb25zdCBDT0RFX1NOSVBQRVQgPSBcXGBcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb1RoaW5nKCkge1xuICAndXNlIHN0ZXAnO1xufVxuXFxgO1xuYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzVXNlU3RlcCkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc0RpcmVjdGl2ZSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgZGV0ZWN0IGRpcmVjdGl2ZXMgaW5zaWRlIGNvbW1lbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYC8qXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICBcInVzZSB3b3JrZmxvd1wiO1xufVxuKi9cblxuLy8gJ3VzZSBzdGVwJztcbmV4cG9ydCBjb25zdCB2YWx1ZSA9IDE7XG5gO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNVc2VXb3JrZmxvdykudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1VzZVN0ZXApLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNEaXJlY3RpdmUpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGRldGVjdCBkaXJlY3RpdmUtbG9va2luZyBzdHJpbmdzIGluc2lkZSBtdWx0aWxpbmUgY2FsbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgY29uc29sZS5sb2coXG4gIFwidXNlIHN0ZXBcIlxuKTtcblxuY29uc29sZS5sb2coXG4gICd1c2Ugd29ya2Zsb3cnXG4pO1xuYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzVXNlV29ya2Zsb3cpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNVc2VTdGVwKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzRGlyZWN0aXZlKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBkZXRlY3QgcXVvdGVkIGRpcmVjdGl2ZS1sb29raW5nIHN0cmluZ3MgaW5zaWRlIG11bHRpbGluZSBjYWxscycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBjb25zb2xlLmxvZyhcbiAgJ1widXNlIHN0ZXBcIidcbik7XG5cbmNvbnNvbGUubG9nKFxuICBcIid1c2Ugc3RlcCdcIlxuKTtcbmA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1VzZVN0ZXApLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNEaXJlY3RpdmUpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3N0aWxsIGRldGVjdHMgcmVhbCBkaXJlY3RpdmVzIGFmdGVyIHRlbXBsYXRlIGxpdGVyYWxzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYGNvbnN0IENPREVfU05JUFBFVCA9IFxcYFxuICBcInVzZSB3b3JrZmxvd1wiO1xuXFxgO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICBcInVzZSB3b3JrZmxvd1wiO1xufVxuYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzVXNlV29ya2Zsb3cpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc0RpcmVjdGl2ZSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzdGlsbCBkZXRlY3RzIGRpcmVjdGl2ZXMgYWZ0ZXIgb3RoZXIgZGlyZWN0aXZlIHByb2xvZ3VlIGVudHJpZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIFwidXNlIHdvcmtmbG93XCI7XG59XG5gO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNVc2VXb3JrZmxvdykudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzRGlyZWN0aXZlKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNXb3JrZmxvd1Nka0ZpbGUnLCAoKSA9PiB7XG4gICAgaXQoJ21hdGNoZXMgZGlyZWN0IEB3b3JrZmxvdyBwYWNrYWdlIHBhdGggaW4gbm9kZV9tb2R1bGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBpc1dvcmtmbG93U2RrRmlsZShcbiAgICAgICAgICAnL3RtcC9hcHAvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL2Rpc3Qvc2VyaWFsaXphdGlvbi5qcydcbiAgICAgICAgKVxuICAgICAgKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZGlyZWN0IHdvcmtmbG93IHBhY2thZ2UgcGF0aCBpbiBub2RlX21vZHVsZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGlzV29ya2Zsb3dTZGtGaWxlKCcvdG1wL2FwcC9ub2RlX21vZHVsZXMvd29ya2Zsb3cvZGlzdC9ydW50aW1lLmpzJylcbiAgICAgICkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIHBucG0gdmlydHVhbCBzdG9yZSBAd29ya2Zsb3cgcGFja2FnZSBwYXRoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBpc1dvcmtmbG93U2RrRmlsZShcbiAgICAgICAgICAnL3RtcC9hcHAvbm9kZV9tb2R1bGVzLy5wbnBtL0B3b3JrZmxvdytjb3JlQDQuMS4wL25vZGVfbW9kdWxlcy9Ad29ya2Zsb3cvY29yZS9kaXN0L3NlcmlhbGl6YXRpb24uanMnXG4gICAgICAgIClcbiAgICAgICkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIHBucG0gdmlydHVhbCBzdG9yZSB3b3JrZmxvdyBwYWNrYWdlIHBhdGgnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGlzV29ya2Zsb3dTZGtGaWxlKFxuICAgICAgICAgICcvdG1wL2FwcC9ub2RlX21vZHVsZXMvLnBucG0vd29ya2Zsb3dANC4xLjAvbm9kZV9tb2R1bGVzL3dvcmtmbG93L2Rpc3QvcnVudGltZS5qcydcbiAgICAgICAgKVxuICAgICAgKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG1hdGNoIG5vbi13b3JrZmxvdyBwYWNrYWdlIGluIHBucG0gc3RvcmUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGlzV29ya2Zsb3dTZGtGaWxlKFxuICAgICAgICAgICcvdG1wL2FwcC9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9sb2Rhc2guanMnXG4gICAgICAgIClcbiAgICAgICkudG9CZShmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
package/dist/types.d.ts
CHANGED
|
@@ -8,10 +8,16 @@ interface BaseWorkflowConfig {
|
|
|
8
8
|
dirs: string[];
|
|
9
9
|
workingDir: string;
|
|
10
10
|
/**
|
|
11
|
-
* Project root used for
|
|
12
|
-
*
|
|
11
|
+
* Project root used for tracing, discovery, and tsconfig lookup during SWC
|
|
12
|
+
* transforms. Defaults to `workingDir`.
|
|
13
13
|
*/
|
|
14
14
|
projectRoot?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Project root used for package and workspace module-specifier resolution
|
|
17
|
+
* during SWC transforms. Defaults to `projectRoot` when set, otherwise
|
|
18
|
+
* `workingDir`.
|
|
19
|
+
*/
|
|
20
|
+
moduleSpecifierRoot?: string;
|
|
15
21
|
clientBundlePath?: string;
|
|
16
22
|
externalPackages?: string[];
|
|
17
23
|
workflowManifestPath?: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,0FAOpB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;GAEG;AACH,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,0FAOpB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;GAEG;AACH,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAK7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAG5C,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAGhD,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAG1C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAGrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,WAAW,EAAE,YAAY,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,WAAW,EAAE,yBAAyB,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,kBAAkB;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,WAAW,EAAE,WAAW,CAAC;IAEzB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,kBAAkB;IACrD,WAAW,EAAE,OAAO,CAAC;IAErB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,kBAAkB;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,uBAAuB,GACvB,UAAU,GACV,UAAU,GACV,eAAe,GACf,WAAW,CAAC;AAEhB,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,IAAI,WAAW,CAEvB"}
|
package/dist/types.js
CHANGED
|
@@ -9,4 +9,4 @@ export const validBuildTargets = [
|
|
|
9
9
|
export function isValidBuildTarget(target) {
|
|
10
10
|
return !!target && validBuildTargets.includes(target);
|
|
11
11
|
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsWUFBWTtJQUNaLHlCQUF5QjtJQUN6QixNQUFNO0lBQ04sTUFBTTtJQUNOLFdBQVc7SUFDWCxPQUFPO0NBQ0MsQ0FBQztBQStIWCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE1BQTBCO0lBRTFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBcUIsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmFsaWRCdWlsZFRhcmdldHMgPSBbXG4gICdzdGFuZGFsb25lJyxcbiAgJ3ZlcmNlbC1idWlsZC1vdXRwdXQtYXBpJyxcbiAgJ25leHQnLFxuICAnbmVzdCcsXG4gICdzdmVsdGVraXQnLFxuICAnYXN0cm8nLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkVGFyZ2V0ID0gKHR5cGVvZiB2YWxpZEJ1aWxkVGFyZ2V0cylbbnVtYmVyXTtcblxuLyoqXG4gKiBDb21tb24gY29uZmlndXJhdGlvbiBvcHRpb25zIHNoYXJlZCBhY3Jvc3MgYWxsIGJ1aWxkZXIgdHlwZXMuXG4gKi9cbmludGVyZmFjZSBCYXNlV29ya2Zsb3dDb25maWcge1xuICB3YXRjaD86IGJvb2xlYW47XG4gIGRpcnM6IHN0cmluZ1tdO1xuICB3b3JraW5nRGlyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm9qZWN0IHJvb3QgdXNlZCBmb3IgdHJhY2luZywgZGlzY292ZXJ5LCBhbmQgdHNjb25maWcgbG9va3VwIGR1cmluZyBTV0NcbiAgICogdHJhbnNmb3Jtcy4gRGVmYXVsdHMgdG8gYHdvcmtpbmdEaXJgLlxuICAgKi9cbiAgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb2plY3Qgcm9vdCB1c2VkIGZvciBwYWNrYWdlIGFuZCB3b3Jrc3BhY2UgbW9kdWxlLXNwZWNpZmllciByZXNvbHV0aW9uXG4gICAqIGR1cmluZyBTV0MgdHJhbnNmb3Jtcy4gRGVmYXVsdHMgdG8gYHByb2plY3RSb290YCB3aGVuIHNldCwgb3RoZXJ3aXNlXG4gICAqIGB3b3JraW5nRGlyYC5cbiAgICovXG4gIG1vZHVsZVNwZWNpZmllclJvb3Q/OiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWxseSBnZW5lcmF0ZSBhIGNsaWVudCBsaWJyYXJ5IGZvciB3b3JrZmxvdyBleGVjdXRpb24uIFRoZSBwcmVmZXJyZWRcbiAgLy8gbWV0aG9kIG9mIHVzaW5nIHdvcmtmbG93IGlzIHRvIHVzZSBhIGxvYWRlciB3aXRoaW4gYSBmcmFtZXdvcmsgKGxpa2VcbiAgLy8gTmV4dEpTKSB0aGF0IHJlc29sdmVzIGNsaWVudCBiaW5kaW5ncyBvbiB0aGUgZmx5LlxuICBjbGllbnRCdW5kbGVQYXRoPzogc3RyaW5nO1xuXG4gIGV4dGVybmFsUGFja2FnZXM/OiBzdHJpbmdbXTtcblxuICB3b3JrZmxvd01hbmlmZXN0UGF0aD86IHN0cmluZztcblxuICAvLyBPcHRpb25hbCBwcmVmaXggZm9yIGRlYnVnIGZpbGVzIChlLmcuLCBcIl9cIiBmb3IgQXN0cm8gdG8gaWdub3JlIHRoZW0pXG4gIGRlYnVnRmlsZVByZWZpeD86IHN0cmluZztcblxuICAvLyBTdXBwcmVzcyBpbmZvcm1hdGlvbmFsIGxvZ3MgZW1pdHRlZCBieSBjcmVhdGVXb3JrZmxvd3NCdW5kbGUoKVxuICAvLyAoZS5nLiBpbnRlcm1lZGlhdGUvZmluYWwgd29ya2Zsb3cgYnVuZGxlIHRpbWluZyBsb2dzKS5cbiAgc3VwcHJlc3NDcmVhdGVXb3JrZmxvd3NCdW5kbGVMb2dzPzogYm9vbGVhbjtcblxuICAvLyBTdXBwcmVzcyBlc2J1aWxkIHdhcm5pbmdzIGVtaXR0ZWQgYnkgY3JlYXRlV29ya2Zsb3dzQnVuZGxlKCkuXG4gIHN1cHByZXNzQ3JlYXRlV29ya2Zsb3dzQnVuZGxlV2FybmluZ3M/OiBib29sZWFuO1xuXG4gIC8vIFN1cHByZXNzIGluZm9ybWF0aW9uYWwgbG9ncyBlbWl0dGVkIGJ5IGNyZWF0ZVdlYmhvb2tCdW5kbGUoKS5cbiAgc3VwcHJlc3NDcmVhdGVXZWJob29rQnVuZGxlTG9ncz86IGJvb2xlYW47XG5cbiAgLy8gU3VwcHJlc3MgaW5mb3JtYXRpb25hbCBsb2dzIGVtaXR0ZWQgYnkgY3JlYXRlTWFuaWZlc3QoKS5cbiAgc3VwcHJlc3NDcmVhdGVNYW5pZmVzdExvZ3M/OiBib29sZWFuO1xuXG4gIC8vIE5vZGUuanMgcnVudGltZSB2ZXJzaW9uIGZvciBWZXJjZWwgRnVuY3Rpb25zIChlLmcuLCBcIm5vZGVqczIyLnhcIiwgXCJub2RlanMyNC54XCIpXG4gIHJ1bnRpbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igc3RhbmRhbG9uZSAoQ0xJLWJhc2VkKSBidWlsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhbG9uZUNvbmZpZyBleHRlbmRzIEJhc2VXb3JrZmxvd0NvbmZpZyB7XG4gIGJ1aWxkVGFyZ2V0OiAnc3RhbmRhbG9uZSc7XG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgYnVpbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmNlbEJ1aWxkT3V0cHV0Q29uZmlnIGV4dGVuZHMgQmFzZVdvcmtmbG93Q29uZmlnIHtcbiAgYnVpbGRUYXJnZXQ6ICd2ZXJjZWwtYnVpbGQtb3V0cHV0LWFwaSc7XG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgTmV4dC5qcyBidWlsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dENvbmZpZyBleHRlbmRzIEJhc2VXb3JrZmxvd0NvbmZpZyB7XG4gIGJ1aWxkVGFyZ2V0OiAnbmV4dCc7XG4gIC8vIE5leHQuanMgYnVpbGRlciBjb21wdXRlcyBwYXRocyBkeW5hbWljYWxseSwgc28gdGhlc2UgYXJlIG5vdCB1c2VkXG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgU3ZlbHRlS2l0IGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdmVsdGVLaXRDb25maWcgZXh0ZW5kcyBCYXNlV29ya2Zsb3dDb25maWcge1xuICBidWlsZFRhcmdldDogJ3N2ZWx0ZWtpdCc7XG4gIC8vIFN2ZWx0ZUtpdCBidWlsZGVyIGNvbXB1dGVzIHBhdGhzIGR5bmFtaWNhbGx5LCBzbyB0aGVzZSBhcmUgbm90IHVzZWRcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBBc3RybyBidWlsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXN0cm9Db25maWcgZXh0ZW5kcyBCYXNlV29ya2Zsb3dDb25maWcge1xuICBidWlsZFRhcmdldDogJ2FzdHJvJztcbiAgLy8gQXN0cm8gYnVpbGRlciBjb21wdXRlcyBwYXRocyBkeW5hbWljYWxseSwgc28gdGhlc2UgYXJlIG5vdCB1c2VkXG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgTmVzdEpTIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXN0Q29uZmlnIGV4dGVuZHMgQmFzZVdvcmtmbG93Q29uZmlnIHtcbiAgYnVpbGRUYXJnZXQ6ICduZXN0JztcbiAgLy8gTmVzdEpTIGJ1aWxkZXIgY29tcHV0ZXMgcGF0aHMgZHluYW1pY2FsbHksIHNvIHRoZXNlIGFyZSBub3QgdXNlZFxuICBzdGVwc0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd29ya2Zsb3dzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3ZWJob29rQnVuZGxlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24gb2YgYWxsIGJ1aWxkZXIgY29uZmlndXJhdGlvbiB0eXBlcy5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dDb25maWcgPVxuICB8IFN0YW5kYWxvbmVDb25maWdcbiAgfCBWZXJjZWxCdWlsZE91dHB1dENvbmZpZ1xuICB8IE5leHRDb25maWdcbiAgfCBOZXN0Q29uZmlnXG4gIHwgU3ZlbHRlS2l0Q29uZmlnXG4gIHwgQXN0cm9Db25maWc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQnVpbGRUYXJnZXQoXG4gIHRhcmdldDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB0YXJnZXQgaXMgQnVpbGRUYXJnZXQge1xuICByZXR1cm4gISF0YXJnZXQgJiYgdmFsaWRCdWlsZFRhcmdldHMuaW5jbHVkZXModGFyZ2V0IGFzIEJ1aWxkVGFyZ2V0KTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAuDd,kBAAkB;YAgClB,sBAAsB;
|
|
1
|
+
{"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAuDd,kBAAkB;YAgClB,sBAAsB;YAgCtB,oBAAoB;YA0BpB,uBAAuB;CA4BtC"}
|
|
@@ -46,7 +46,7 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
|
|
|
46
46
|
await this.createClientLibrary();
|
|
47
47
|
}
|
|
48
48
|
async buildStepsFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
|
|
49
|
-
|
|
49
|
+
this.logBaseBuilderInfo('Creating Vercel Build Output API steps function');
|
|
50
50
|
const stepsFuncDir = join(workflowGeneratedDir, 'step.func');
|
|
51
51
|
await mkdir(stepsFuncDir, { recursive: true });
|
|
52
52
|
// Create steps bundle
|
|
@@ -66,7 +66,7 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
|
|
|
66
66
|
return manifest;
|
|
67
67
|
}
|
|
68
68
|
async buildWorkflowsFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
|
|
69
|
-
|
|
69
|
+
this.logBaseBuilderInfo('Creating Vercel Build Output API workflows function');
|
|
70
70
|
const workflowsFuncDir = join(workflowGeneratedDir, 'flow.func');
|
|
71
71
|
await mkdir(workflowsFuncDir, { recursive: true });
|
|
72
72
|
const { manifest } = await this.createWorkflowsBundle({
|
|
@@ -84,7 +84,7 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
|
|
|
84
84
|
return manifest;
|
|
85
85
|
}
|
|
86
86
|
async buildWebhookFunction({ workflowGeneratedDir, bundle = true, }) {
|
|
87
|
-
|
|
87
|
+
this.logBaseBuilderInfo('Creating Vercel Build Output API webhook function');
|
|
88
88
|
const webhookFuncDir = join(workflowGeneratedDir, 'webhook/[token].func');
|
|
89
89
|
// Bundle the webhook route with dependencies resolved
|
|
90
90
|
await this.createWebhookBundle({
|
|
@@ -110,10 +110,10 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
|
|
|
110
110
|
],
|
|
111
111
|
};
|
|
112
112
|
await writeFile(join(outputDir, 'config.json'), JSON.stringify(buildOutputConfig, null, 2));
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
this.logBaseBuilderInfo(`Build Output API created at ${outputDir}`);
|
|
114
|
+
this.logBaseBuilderInfo('Steps function available at /.well-known/workflow/v1/step');
|
|
115
|
+
this.logBaseBuilderInfo('Workflows function available at /.well-known/workflow/v1/flow');
|
|
116
|
+
this.logBaseBuilderInfo('Webhook function available at /.well-known/workflow/v1/webhook/[token]');
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE1BQU0sT0FBTywyQkFBNEIsU0FBUSxXQUFXO0lBQzFELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUUzRSxrQ0FBa0M7UUFDbEMsTUFBTSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHO1lBQ2QsVUFBVTtZQUNWLG9CQUFvQjtZQUNwQixZQUFZO1NBQ2IsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FB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U0FDN0QsQ0FBQyxDQUFDO1FBRUgsK0RBQStEO1FBQy9ELE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFO1lBQ3hDLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLFNBQWlCO1FBQ3JELDBDQUEwQztRQUMxQyxNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEdBQUcsRUFBRSwwREFBMEQ7b0JBQy9ELElBQUksRUFBRSwwQ0FBMEM7aUJBQ2pEO2FBQ0Y7U0FDRixDQUFDO1FBRUYsTUFBTSxTQUFTLENBQ2IsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsRUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQzNDLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUN6RSxPQUFPLENBQUMsR0FBRyxDQUNULCtEQUErRCxDQUNoRSxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDVCx3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcHlGaWxlLCBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IEJhc2VCdWlsZGVyIH0gZnJvbSAnLi9iYXNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgU1RFUF9RVUVVRV9UUklHR0VSLCBXT1JLRkxPV19RVUVVRV9UUklHR0VSIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5leHBvcnQgY2xhc3MgVmVyY2VsQnVpbGRPdXRwdXRBUElCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvdXRwdXREaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICcudmVyY2VsL291dHB1dCcpO1xuICAgIGNvbnN0IGZ1bmN0aW9uc0RpciA9IGpvaW4ob3V0cHV0RGlyLCAnZnVuY3Rpb25zJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKGZ1bmN0aW9uc0RpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAvLyBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yaWVzIGV4aXN0XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dHZW5lcmF0ZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHRoaXMuZ2V0SW5wdXRGaWxlcygpO1xuICAgIGNvbnN0IHRzY29uZmlnUGF0aCA9IGF3YWl0IHRoaXMuZmluZFRzQ29uZmlnUGF0aCgpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBpbnB1dEZpbGVzLFxuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgfTtcbiAgICBjb25zdCBzdGVwc01hbmlmZXN0ID0gYXdhaXQgdGhpcy5idWlsZFN0ZXBzRnVuY3Rpb24ob3B0aW9ucyk7XG4gICAgY29uc3Qgd29ya2Zsb3dzTWFuaWZlc3QgPSBhd2FpdCB0aGlzLmJ1aWxkV29ya2Zsb3dzRnVuY3Rpb24ob3B0aW9ucyk7XG4gICAgYXdhaXQgdGhpcy5idWlsZFdlYmhvb2tGdW5jdGlvbihvcHRpb25zKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUJ1aWxkT3V0cHV0Q29uZmlnKG91dHB1dERpcik7XG5cbiAgICAvLyBNZXJnZSBtYW5pZmVzdHMgZnJvbSBib3RoIGJ1bmRsZXNcbiAgICBjb25zdCBtYW5pZmVzdCA9IHtcbiAgICAgIHN0ZXBzOiB7IC4uLnN0ZXBzTWFuaWZlc3Quc3RlcHMsIC4uLndvcmtmbG93c01hbmlmZXN0LnN0ZXBzIH0sXG4gICAgICB3b3JrZmxvd3M6IHsgLi4uc3RlcHNNYW5pZmVzdC53b3JrZmxvd3MsIC4uLndvcmtmbG93c01hbmlmZXN0LndvcmtmbG93cyB9LFxuICAgICAgY2xhc3NlczogeyAuLi5zdGVwc01hbmlmZXN0LmNsYXNzZXMsIC4uLndvcmtmbG93c01hbmlmZXN0LmNsYXNzZXMgfSxcbiAgICB9O1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pZmllZCBtYW5pZmVzdFxuICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdmbG93LmZ1bmMvaW5kZXguanMnKTtcbiAgICBjb25zdCBtYW5pZmVzdEpzb24gPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmlmZXN0KHtcbiAgICAgIHdvcmtmbG93QnVuZGxlUGF0aCxcbiAgICAgIG1hbmlmZXN0RGlyOiB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgIG1hbmlmZXN0LFxuICAgIH0pO1xuXG4gICAgLy8gRXhwb3NlIG1hbmlmZXN0IGFzIGEgc3RhdGljIGZpbGUgd2hlbiBXT1JLRkxPV19QVUJMSUNfTUFOSUZFU1Q9MS5cbiAgICAvLyBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBzZXJ2ZXMgc3RhdGljIGZpbGVzIGZyb20gLnZlcmNlbC9vdXRwdXQvc3RhdGljL1xuICAgIGlmICh0aGlzLnNob3VsZEV4cG9zZVB1YmxpY01hbmlmZXN0ICYmIG1hbmlmZXN0SnNvbikge1xuICAgICAgY29uc3Qgc3RhdGljTWFuaWZlc3REaXIgPSBqb2luKFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgICdzdGF0aWMvLndlbGwta25vd24vd29ya2Zsb3cvdjEnXG4gICAgICApO1xuICAgICAgYXdhaXQgbWtkaXIoc3RhdGljTWFuaWZlc3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgaWYgKHByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oc3RhdGljTWFuaWZlc3REaXIsICcuZ2l0aWdub3JlJyksICcqJyk7XG4gICAgICB9XG4gICAgICBhd2FpdCBjb3B5RmlsZShcbiAgICAgICAgam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ21hbmlmZXN0Lmpzb24nKSxcbiAgICAgICAgam9pbihzdGF0aWNNYW5pZmVzdERpciwgJ21hbmlmZXN0Lmpzb24nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUNsaWVudExpYnJhcnkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRTdGVwc0Z1bmN0aW9uKHtcbiAgICBpbnB1dEZpbGVzLFxuICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgIHRzY29uZmlnUGF0aCxcbiAgfToge1xuICAgIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyOiBzdHJpbmc7XG4gICAgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuICB9KSB7XG4gICAgY29uc29sZS5sb2coJ0NyZWF0aW5nIFZlcmNlbCBCdWlsZCBPdXRwdXQgQVBJIHN0ZXBzIGZ1bmN0aW9uJyk7XG4gICAgY29uc3Qgc3RlcHNGdW5jRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3N0ZXAuZnVuYycpO1xuICAgIGF3YWl0IG1rZGlyKHN0ZXBzRnVuY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBDcmVhdGUgc3RlcHMgYnVuZGxlXG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYXdhaXQgdGhpcy5jcmVhdGVTdGVwc0J1bmRsZSh7XG4gICAgICBpbnB1dEZpbGVzLFxuICAgICAgb3V0ZmlsZTogam9pbihzdGVwc0Z1bmNEaXIsICdpbmRleC5qcycpLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHBhY2thZ2UuanNvbiBhbmQgLnZjLWNvbmZpZy5qc29uIGZvciBzdGVwcyBmdW5jdGlvblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlUGFja2FnZUpzb24oc3RlcHNGdW5jRGlyLCAnY29tbW9uanMnKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVZjQ29uZmlnKHN0ZXBzRnVuY0Rpciwge1xuICAgICAgc2hvdWxkQWRkU291cmNlbWFwU3VwcG9ydDogdHJ1ZSxcbiAgICAgIG1heER1cmF0aW9uOiAnbWF4JyxcbiAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzOiBbU1RFUF9RVUVVRV9UUklHR0VSXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFuaWZlc3Q7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV29ya2Zsb3dzRnVuY3Rpb24oe1xuICAgIGlucHV0RmlsZXMsXG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgdHNjb25maWdQYXRoLFxuICB9OiB7XG4gICAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICB0c2NvbmZpZ1BhdGg/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd29ya2Zsb3dzIGZ1bmN0aW9uJyk7XG4gICAgY29uc3Qgd29ya2Zsb3dzRnVuY0RpciA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdmbG93LmZ1bmMnKTtcbiAgICBhd2FpdCBta2Rpcih3b3JrZmxvd3NGdW5jRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGF3YWl0IHRoaXMuY3JlYXRlV29ya2Zsb3dzQnVuZGxlKHtcbiAgICAgIG91dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ2luZGV4LmpzJyksXG4gICAgICBpbnB1dEZpbGVzLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHBhY2thZ2UuanNvbiBhbmQgLnZjLWNvbmZpZy5qc29uIGZvciB3b3JrZmxvd3MgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdvcmtmbG93c0Z1bmNEaXIsICdjb21tb25qcycpO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlVmNDb25maWcod29ya2Zsb3dzRnVuY0Rpciwge1xuICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtXT1JLRkxPV19RVUVVRV9UUklHR0VSXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFuaWZlc3Q7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va0Z1bmN0aW9uKHtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICBidW5kbGUgPSB0cnVlLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coJ0NyZWF0aW5nIFZlcmNlbCBCdWlsZCBPdXRwdXQgQVBJIHdlYmhvb2sgZnVuY3Rpb24nKTtcbiAgICBjb25zdCB3ZWJob29rRnVuY0RpciA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICd3ZWJob29rL1t0b2tlbl0uZnVuYycpO1xuXG4gICAgLy8gQnVuZGxlIHRoZSB3ZWJob29rIHJvdXRlIHdpdGggZGVwZW5kZW5jaWVzIHJlc29sdmVkXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVXZWJob29rQnVuZGxlKHtcbiAgICAgIG91dGZpbGU6IGpvaW4od2ViaG9va0Z1bmNEaXIsICdpbmRleC5qcycpLFxuICAgICAgYnVuZGxlLCAvLyBCdWlsZCBPdXRwdXQgQVBJIG5lZWRzIGJ1bmRsaW5nIChleGNlcHQgaW4gdGVzdHMpXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIHdlYmhvb2sgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdlYmhvb2tGdW5jRGlyLCAnY29tbW9uanMnKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVZjQ29uZmlnKHdlYmhvb2tGdW5jRGlyLCB7XG4gICAgICBzaG91bGRBZGRIZWxwZXJzOiBmYWxzZSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkT3V0cHV0Q29uZmlnKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGNvbmZpZy5qc29uIGZvciBCdWlsZCBPdXRwdXQgQVBJXG4gICAgY29uc3QgYnVpbGRPdXRwdXRDb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAzLFxuICAgICAgcm91dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzcmM6ICdeXFxcXC9cXFxcLndlbGwta25vd25cXFxcL3dvcmtmbG93XFxcXC92MVxcXFwvd2ViaG9va1xcXFwvKFteXFxcXC9dKykkJyxcbiAgICAgICAgICBkZXN0OiAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svW3Rva2VuXScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKG91dHB1dERpciwgJ2NvbmZpZy5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShidWlsZE91dHB1dENvbmZpZywgbnVsbCwgMilcbiAgICApO1xuXG4gICAgY29uc29sZS5sb2coYEJ1aWxkIE91dHB1dCBBUEkgY3JlYXRlZCBhdCAke291dHB1dERpcn1gKTtcbiAgICBjb25zb2xlLmxvZygnU3RlcHMgZnVuY3Rpb24gYXZhaWxhYmxlIGF0IC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9zdGVwJyk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnV29ya2Zsb3dzIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvZmxvdydcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1dlYmhvb2sgZnVuY3Rpb24gYXZhaWxhYmxlIGF0IC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rL1t0b2tlbl0nXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE1BQU0sT0FBTywyQkFBNEIsU0FBUSxXQUFXO0lBQzFELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUUzRSxrQ0FBa0M7UUFDbEMsTUFBTSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHO1lBQ2QsVUFBVTtZQUNWLG9CQUFvQjtZQUNwQixZQUFZO1NBQ2IsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FB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LG9EQUFvRDtTQUM3RCxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFDL0QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7WUFDeEMsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsU0FBaUI7UUFDckQsMENBQTBDO1FBQzFDLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsR0FBRyxFQUFFLDBEQUEwRDtvQkFDL0QsSUFBSSxFQUFFLDBDQUEwQztpQkFDakQ7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLFNBQVMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDM0MsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLDJEQUEyRCxDQUM1RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUNyQiwrREFBK0QsQ0FDaEUsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FDckIsd0VBQXdFLENBQ3pFLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3B5RmlsZSwgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IFNURVBfUVVFVUVfVFJJR0dFUiwgV09SS0ZMT1dfUVVFVUVfVFJJR0dFUiB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuZXhwb3J0IGNsYXNzIFZlcmNlbEJ1aWxkT3V0cHV0QVBJQnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyIHtcbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3V0cHV0RGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnLnZlcmNlbC9vdXRwdXQnKTtcbiAgICBjb25zdCBmdW5jdGlvbnNEaXIgPSBqb2luKG91dHB1dERpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGNvbnN0IHdvcmtmbG93R2VuZXJhdGVkRGlyID0gam9pbihmdW5jdGlvbnNEaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy92MScpO1xuXG4gICAgLy8gRW5zdXJlIG91dHB1dCBkaXJlY3RvcmllcyBleGlzdFxuICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgIH07XG4gICAgY29uc3Qgc3RlcHNNYW5pZmVzdCA9IGF3YWl0IHRoaXMuYnVpbGRTdGVwc0Z1bmN0aW9uKG9wdGlvbnMpO1xuICAgIGNvbnN0IHdvcmtmbG93c01hbmlmZXN0ID0gYXdhaXQgdGhpcy5idWlsZFdvcmtmbG93c0Z1bmN0aW9uKG9wdGlvbnMpO1xuICAgIGF3YWl0IHRoaXMuYnVpbGRXZWJob29rRnVuY3Rpb24ob3B0aW9ucyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVCdWlsZE91dHB1dENvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgLy8gTWVyZ2UgbWFuaWZlc3RzIGZyb20gYm90aCBidW5kbGVzXG4gICAgY29uc3QgbWFuaWZlc3QgPSB7XG4gICAgICBzdGVwczogeyAuLi5zdGVwc01hbmlmZXN0LnN0ZXBzLCAuLi53b3JrZmxvd3NNYW5pZmVzdC5zdGVwcyB9LFxuICAgICAgd29ya2Zsb3dzOiB7IC4uLnN0ZXBzTWFuaWZlc3Qud29ya2Zsb3dzLCAuLi53b3JrZmxvd3NNYW5pZmVzdC53b3JrZmxvd3MgfSxcbiAgICAgIGNsYXNzZXM6IHsgLi4uc3RlcHNNYW5pZmVzdC5jbGFzc2VzLCAuLi53b3JrZmxvd3NNYW5pZmVzdC5jbGFzc2VzIH0sXG4gICAgfTtcblxuICAgIC8vIEdlbmVyYXRlIHVuaWZpZWQgbWFuaWZlc3RcbiAgICBjb25zdCB3b3JrZmxvd0J1bmRsZVBhdGggPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy5mdW5jL2luZGV4LmpzJyk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgLy8gVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgc2VydmVzIHN0YXRpYyBmaWxlcyBmcm9tIC52ZXJjZWwvb3V0cHV0L3N0YXRpYy9cbiAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgIGNvbnN0IHN0YXRpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAnc3RhdGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgKTtcbiAgICAgIGF3YWl0IG1rZGlyKHN0YXRpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHN0YXRpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgIGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgIGpvaW4oc3RhdGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVDbGllbnRMaWJyYXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkU3RlcHNGdW5jdGlvbih7XG4gICAgaW5wdXRGaWxlcyxcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICB0c2NvbmZpZ1BhdGgsXG4gIH06IHtcbiAgICBpbnB1dEZpbGVzOiBzdHJpbmdbXTtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcjogc3RyaW5nO1xuICAgIHRzY29uZmlnUGF0aD86IHN0cmluZztcbiAgfSkge1xuICAgIHRoaXMubG9nQmFzZUJ1aWxkZXJJbmZvKCdDcmVhdGluZyBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBzdGVwcyBmdW5jdGlvbicpO1xuICAgIGNvbnN0IHN0ZXBzRnVuY0RpciA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdzdGVwLmZ1bmMnKTtcbiAgICBhd2FpdCBta2RpcihzdGVwc0Z1bmNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHN0ZXBzIGJ1bmRsZVxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGF3YWl0IHRoaXMuY3JlYXRlU3RlcHNCdW5kbGUoe1xuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIG91dGZpbGU6IGpvaW4oc3RlcHNGdW5jRGlyLCAnaW5kZXguanMnKSxcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBwYWNrYWdlLmpzb24gYW5kIC52Yy1jb25maWcuanNvbiBmb3Igc3RlcHMgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHN0ZXBzRnVuY0RpciwgJ2NvbW1vbmpzJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyhzdGVwc0Z1bmNEaXIsIHtcbiAgICAgIHNob3VsZEFkZFNvdXJjZW1hcFN1cHBvcnQ6IHRydWUsXG4gICAgICBtYXhEdXJhdGlvbjogJ21heCcsXG4gICAgICBleHBlcmltZW50YWxUcmlnZ2VyczogW1NURVBfUVVFVUVfVFJJR0dFUl0sXG4gICAgICBydW50aW1lOiB0aGlzLmNvbmZpZy5ydW50aW1lLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hbmlmZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFdvcmtmbG93c0Z1bmN0aW9uKHtcbiAgICBpbnB1dEZpbGVzLFxuICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgIHRzY29uZmlnUGF0aCxcbiAgfToge1xuICAgIGlucHV0RmlsZXM6IHN0cmluZ1tdO1xuICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyOiBzdHJpbmc7XG4gICAgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuICB9KSB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd29ya2Zsb3dzIGZ1bmN0aW9uJ1xuICAgICk7XG4gICAgY29uc3Qgd29ya2Zsb3dzRnVuY0RpciA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdmbG93LmZ1bmMnKTtcbiAgICBhd2FpdCBta2Rpcih3b3JrZmxvd3NGdW5jRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGF3YWl0IHRoaXMuY3JlYXRlV29ya2Zsb3dzQnVuZGxlKHtcbiAgICAgIG91dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ2luZGV4LmpzJyksXG4gICAgICBpbnB1dEZpbGVzLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHBhY2thZ2UuanNvbiBhbmQgLnZjLWNvbmZpZy5qc29uIGZvciB3b3JrZmxvd3MgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdvcmtmbG93c0Z1bmNEaXIsICdjb21tb25qcycpO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlVmNDb25maWcod29ya2Zsb3dzRnVuY0Rpciwge1xuICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtXT1JLRkxPV19RVUVVRV9UUklHR0VSXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFuaWZlc3Q7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va0Z1bmN0aW9uKHtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICBidW5kbGUgPSB0cnVlLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd2ViaG9vayBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdlYmhvb2tGdW5jRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3dlYmhvb2svW3Rva2VuXS5mdW5jJyk7XG5cbiAgICAvLyBCdW5kbGUgdGhlIHdlYmhvb2sgcm91dGUgd2l0aCBkZXBlbmRlbmNpZXMgcmVzb2x2ZWRcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgb3V0ZmlsZTogam9pbih3ZWJob29rRnVuY0RpciwgJ2luZGV4LmpzJyksXG4gICAgICBidW5kbGUsIC8vIEJ1aWxkIE91dHB1dCBBUEkgbmVlZHMgYnVuZGxpbmcgKGV4Y2VwdCBpbiB0ZXN0cylcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBwYWNrYWdlLmpzb24gYW5kIC52Yy1jb25maWcuanNvbiBmb3Igd2ViaG9vayBmdW5jdGlvblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlUGFja2FnZUpzb24od2ViaG9va0Z1bmNEaXIsICdjb21tb25qcycpO1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlVmNDb25maWcod2ViaG9va0Z1bmNEaXIsIHtcbiAgICAgIHNob3VsZEFkZEhlbHBlcnM6IGZhbHNlLFxuICAgICAgcnVudGltZTogdGhpcy5jb25maWcucnVudGltZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlQnVpbGRPdXRwdXRDb25maWcob3V0cHV0RGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDcmVhdGUgY29uZmlnLmpzb24gZm9yIEJ1aWxkIE91dHB1dCBBUElcbiAgICBjb25zdCBidWlsZE91dHB1dENvbmZpZyA9IHtcbiAgICAgIHZlcnNpb246IDMsXG4gICAgICByb3V0ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNyYzogJ15cXFxcL1xcXFwud2VsbC1rbm93blxcXFwvd29ya2Zsb3dcXFxcL3YxXFxcXC93ZWJob29rXFxcXC8oW15cXFxcL10rKSQnLFxuICAgICAgICAgIGRlc3Q6ICcvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay9bdG9rZW5dJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGF3YWl0IHdyaXRlRmlsZShcbiAgICAgIGpvaW4ob3V0cHV0RGlyLCAnY29uZmlnLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGJ1aWxkT3V0cHV0Q29uZmlnLCBudWxsLCAyKVxuICAgICk7XG5cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhgQnVpbGQgT3V0cHV0IEFQSSBjcmVhdGVkIGF0ICR7b3V0cHV0RGlyfWApO1xuICAgIHRoaXMubG9nQmFzZUJ1aWxkZXJJbmZvKFxuICAgICAgJ1N0ZXBzIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvc3RlcCdcbiAgICApO1xuICAgIHRoaXMubG9nQmFzZUJ1aWxkZXJJbmZvKFxuICAgICAgJ1dvcmtmbG93cyBmdW5jdGlvbiBhdmFpbGFibGUgYXQgLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnXG4gICAgKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdXZWJob29rIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay9bdG9rZW5dJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
|