@workflow/next 5.0.0-beta.2 → 5.0.0-beta.20

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/loader.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldNotifySocketForDiscoveredPattern = shouldNotifySocketForDiscoveredPattern;
3
4
  exports.default = workflowLoader;
4
5
  const node_fs_1 = require("node:fs");
5
6
  const promises_1 = require("node:fs/promises");
@@ -7,17 +8,47 @@ const node_net_1 = require("node:net");
7
8
  const node_path_1 = require("node:path");
8
9
  const core_1 = require("@swc/core");
9
10
  const socket_server_js_1 = require("./socket-server.js");
10
- const step_copy_utils_js_1 = require("./step-copy-utils.js");
11
11
  // Cache decorator options per working directory to avoid reading tsconfig for every file
12
12
  const decoratorOptionsCache = new Map();
13
13
  // Cache for shared utilities from @workflow/builders (ESM module loaded dynamically in CommonJS context)
14
14
  let cachedBuildersModule = null;
15
15
  let cachedLoaderStaticDependencies = null;
16
16
  const discoveredPatternStateByFilePath = new Map();
17
+ function shouldNotifySocketForDiscoveredPattern(patternStateChanged, patternState) {
18
+ return (patternStateChanged ||
19
+ patternState.hasWorkflow ||
20
+ patternState.hasStep ||
21
+ patternState.hasSerde);
22
+ }
17
23
  // Cache socket connection to avoid reconnecting on every file.
18
24
  let socketClientPromise = null;
19
25
  let socketClient = null;
20
26
  let socketClientKey = null;
27
+ /**
28
+ * Wrap a TCP connect failure with context about where the connection was
29
+ * attempted, where the credentials came from, and which source file was
30
+ * being processed when it failed. ECONNREFUSED is the common case here, and
31
+ * the message points the user at the most likely root cause (stale
32
+ * socket-info file).
33
+ */
34
+ function annotateConnectionError(originalError, credentials) {
35
+ const errorCode = originalError instanceof Error &&
36
+ 'code' in originalError &&
37
+ typeof originalError.code === 'string'
38
+ ? originalError.code
39
+ : undefined;
40
+ const errorMessage = originalError instanceof Error
41
+ ? originalError.message
42
+ : String(originalError);
43
+ const lines = [
44
+ `Workflow discovery socket connect failed: ${errorCode ?? errorMessage} (127.0.0.1:${credentials.port})`,
45
+ ];
46
+ const annotated = new Error(lines.join('\n'));
47
+ if (originalError instanceof Error) {
48
+ annotated.cause = originalError;
49
+ }
50
+ return annotated;
51
+ }
21
52
  const ROUTE_STUB_FILE_MARKER = 'WORKFLOW_ROUTE_STUB_FILE';
22
53
  const ROUTE_STUB_BUILD_WAIT_TIMEOUT_MS = 120_000;
23
54
  let pendingDeferredRouteStubBuildPromise = null;
@@ -63,7 +94,6 @@ function resolveLoaderStaticDependencies() {
63
94
  const files = new Set([
64
95
  __filename,
65
96
  require.resolve('./socket-server'),
66
- require.resolve('./step-copy-utils'),
67
97
  swcPluginPath,
68
98
  swcPluginBuildHashPath,
69
99
  workflowBuildersPath,
@@ -110,10 +140,10 @@ function getSocketInfoFilePath() {
110
140
  // Fallback for worker processes that don't inherit dynamic env updates
111
141
  // from the process that created the socket server.
112
142
  const distDir = process.env.WORKFLOW_NEXT_DIST_DIR || '.next';
113
- const cwdFallbackPath = (0, node_path_1.join)(process.cwd(), distDir, 'cache', 'workflow-socket.json');
143
+ const cwdFallbackPath = (0, node_path_1.join)(process.cwd(), distDir, socket_server_js_1.SOCKET_INFO_FILENAME);
114
144
  const projectRoot = process.env.WORKFLOW_PROJECT_ROOT;
115
145
  if (projectRoot) {
116
- const projectRootFallbackPath = (0, node_path_1.join)(projectRoot, distDir, 'cache', 'workflow-socket.json');
146
+ const projectRootFallbackPath = (0, node_path_1.join)(projectRoot, distDir, socket_server_js_1.SOCKET_INFO_FILENAME);
117
147
  if ((0, node_fs_1.existsSync)(projectRootFallbackPath)) {
118
148
  return projectRootFallbackPath;
119
149
  }
@@ -199,12 +229,12 @@ async function getSocketClient() {
199
229
  };
200
230
  const onError = (error) => {
201
231
  cleanup();
202
- reject(error);
232
+ reject(annotateConnectionError(error, socketCredentials));
203
233
  };
204
234
  const timeout = setTimeout(() => {
205
235
  cleanup();
206
236
  socket.destroy();
207
- reject(new Error('Socket connection timeout'));
237
+ reject(annotateConnectionError(new Error('Socket connection timeout'), socketCredentials));
208
238
  }, 1000);
209
239
  const cleanup = () => {
210
240
  clearTimeout(timeout);
@@ -273,7 +303,7 @@ async function createSocketConnection(socketCredentials, timeoutMs = 1_000) {
273
303
  const timeout = setTimeout(() => {
274
304
  cleanup();
275
305
  socket.destroy();
276
- reject(new Error('Socket connection timeout'));
306
+ reject(annotateConnectionError(new Error('Socket connection timeout'), socketCredentials));
277
307
  }, timeoutMs);
278
308
  const cleanup = () => {
279
309
  clearTimeout(timeout);
@@ -288,7 +318,7 @@ async function createSocketConnection(socketCredentials, timeoutMs = 1_000) {
288
318
  const onError = (error) => {
289
319
  cleanup();
290
320
  socket.destroy();
291
- reject(error);
321
+ reject(annotateConnectionError(error, socketCredentials));
292
322
  };
293
323
  socket.on('connect', onConnect);
294
324
  socket.on('error', onError);
@@ -444,10 +474,6 @@ async function getRelativeFilenameForSwc(filename, workingDir) {
444
474
  }
445
475
  return relativeFilename;
446
476
  }
447
- function stripDeferredStepSourceMetadataComment(source) {
448
- const metadataPattern = new RegExp(`^\\s*//\\s*${step_copy_utils_js_1.DEFERRED_STEP_SOURCE_METADATA_PREFIX}[A-Za-z0-9+/=]+\\s*\\r?\\n?`);
449
- return source.replace(metadataPattern, '');
450
- }
451
477
  function workflowLoader(source, sourceMap) {
452
478
  const callback = this.async?.();
453
479
  const run = async () => {
@@ -455,29 +481,12 @@ function workflowLoader(source, sourceMap) {
455
481
  const normalizedSource = source.toString();
456
482
  const workingDir = process.cwd();
457
483
  const swcPluginPath = registerTransformDependencies(this);
458
- const isDeferredStepCopyFile = (0, step_copy_utils_js_1.isDeferredStepCopyFilePath)(filename);
459
- const deferredStepSourceMetadata = isDeferredStepCopyFile
460
- ? (0, step_copy_utils_js_1.parseDeferredStepSourceMetadata)(normalizedSource)
461
- : null;
462
- const sourceWithoutDeferredMetadata = isDeferredStepCopyFile
463
- ? stripDeferredStepSourceMetadataComment(normalizedSource)
464
- : normalizedSource;
465
- const deferredSourceMapResult = isDeferredStepCopyFile
466
- ? (0, step_copy_utils_js_1.parseInlineSourceMapComment)(sourceWithoutDeferredMetadata)
467
- : {
468
- sourceWithoutMapComment: sourceWithoutDeferredMetadata,
469
- sourceMap: null,
470
- };
471
- const sourceForTransform = deferredSourceMapResult.sourceWithoutMapComment;
472
- const discoveryFilePath = deferredStepSourceMetadata?.absolutePath || filename;
473
- if (deferredStepSourceMetadata?.absolutePath) {
474
- // Ensure edits to the original source invalidate deferred step copies.
475
- registerFileDependency(this, deferredStepSourceMetadata.absolutePath);
476
- }
484
+ const sourceForTransform = normalizedSource;
477
485
  const isGeneratedWorkflowFile = await checkGeneratedFile(filename);
478
- // Skip generated workflow route files to avoid re-processing them, except
479
- // deferred route stubs which must wait for generated route output.
480
- if (isGeneratedWorkflowFile && !isDeferredStepCopyFile) {
486
+ // Skip generated workflow route files to avoid re-processing them.
487
+ // Deferred route stubs are a special case: wait for the generated route
488
+ // output to become available before returning.
489
+ if (isGeneratedWorkflowFile) {
481
490
  if (process.env.WORKFLOW_NEXT_LAZY_DISCOVERY === '1' &&
482
491
  isWorkflowRouteStubSource(normalizedSource)) {
483
492
  try {
@@ -497,25 +506,18 @@ function workflowLoader(source, sourceMap) {
497
506
  const patterns = await detectPatterns(sourceForTransform);
498
507
  // Always notify discovery tracking, even for `false/false`, so files that
499
508
  // previously had workflow/step usage are removed from the tracked sets.
500
- // Deferred step copy files must report using their original source path so
501
- // deferred rebuilds can react to source edits outside generated artifacts.
502
- if (!isDeferredStepCopyFile || deferredStepSourceMetadata?.absolutePath) {
503
- const hasSerde = patterns.hasSerde;
504
- const nextPatternState = {
505
- hasWorkflow: patterns.hasUseWorkflow,
506
- hasStep: patterns.hasUseStep,
507
- hasSerde,
508
- };
509
- const { shouldNotify } = updateDiscoveredPatternState(discoveryFilePath, nextPatternState);
510
- if (shouldNotify) {
511
- await notifySocketServer(discoveryFilePath, nextPatternState.hasWorkflow, nextPatternState.hasStep, nextPatternState.hasSerde);
512
- }
509
+ const nextPatternState = {
510
+ hasWorkflow: patterns.hasUseWorkflow,
511
+ hasStep: patterns.hasUseStep,
512
+ hasSerde: patterns.hasSerde,
513
+ };
514
+ const { shouldNotify } = updateDiscoveredPatternState(filename, nextPatternState);
515
+ if (shouldNotifySocketForDiscoveredPattern(shouldNotify, nextPatternState)) {
516
+ await notifySocketServer(filename, nextPatternState.hasWorkflow, nextPatternState.hasStep, nextPatternState.hasSerde);
513
517
  }
514
- if (!isDeferredStepCopyFile) {
515
- // Check if file needs transformation based on patterns and path
516
- if (!(await checkShouldTransform(filename, patterns))) {
517
- return { code: normalizedSource, map: sourceMap };
518
- }
518
+ // Check if file needs transformation based on patterns and path
519
+ if (!(await checkShouldTransform(filename, patterns))) {
520
+ return { code: normalizedSource, map: sourceMap };
519
521
  }
520
522
  const isTypeScript = filename.endsWith('.ts') ||
521
523
  filename.endsWith('.tsx') ||
@@ -523,16 +525,15 @@ function workflowLoader(source, sourceMap) {
523
525
  filename.endsWith('.cts');
524
526
  // Calculate relative filename for SWC plugin
525
527
  // The SWC plugin uses filename to generate workflowId, so it must be relative
526
- const relativeFilename = deferredStepSourceMetadata?.relativeFilename ||
527
- (await getRelativeFilenameForSwc(filename, workingDir));
528
+ const relativeFilename = await getRelativeFilenameForSwc(filename, workingDir);
528
529
  // Get decorator options from tsconfig (cached per working directory)
529
530
  const { options: decoratorOptions, configPath } = await getDecoratorOptions(workingDir);
530
531
  if (configPath) {
531
532
  registerFileDependency(this, configPath);
532
533
  }
533
534
  // Resolve module specifier for packages (node_modules or workspace packages)
534
- const moduleSpecifier = await getModuleSpecifier(deferredStepSourceMetadata?.absolutePath || filename, workingDir);
535
- const mode = isDeferredStepCopyFile ? 'step' : 'client';
535
+ const moduleSpecifier = await getModuleSpecifier(filename, workingDir);
536
+ const mode = 'step';
536
537
  // Transform with SWC
537
538
  const result = await (0, core_1.transform)(sourceForTransform, {
538
539
  filename: relativeFilename,
@@ -563,9 +564,7 @@ function workflowLoader(source, sourceMap) {
563
564
  },
564
565
  },
565
566
  minify: false,
566
- inputSourceMap: isDeferredStepCopyFile
567
- ? deferredSourceMapResult.sourceMap || sourceMap
568
- : sourceMap,
567
+ inputSourceMap: sourceMap,
569
568
  sourceMaps: true,
570
569
  inlineSourcesContent: true,
571
570
  });
@@ -592,4 +591,4 @@ function workflowLoader(source, sourceMap) {
592
591
  callback(error instanceof Error ? error : new Error(String(error)));
593
592
  });
594
593
  }
595
- //# sourceMappingURL=loader.js.map
594
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXVDQSx3RkFVQztBQTBtQkQsaUNBcUpDO0FBaHpCRCxxQ0FBcUM7QUFDckMsK0NBQTRDO0FBQzVDLHVDQUFnRDtBQUNoRCx5Q0FBb0Q7QUFDcEQsb0NBQXNDO0FBQ3RDLHlEQUs0QjtBQU01Qix5RkFBeUY7QUFDekYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFHbEMsQ0FBQztBQUNKLHlHQUF5RztBQUN6RyxJQUFJLG9CQUFvQixHQUErQyxJQUFJLENBQUM7QUFLNUUsSUFBSSw4QkFBOEIsR0FBb0MsSUFBSSxDQUFDO0FBTzNFLE1BQU0sZ0NBQWdDLEdBQUcsSUFBSSxHQUFHLEVBRzdDLENBQUM7QUFFSixTQUFnQixzQ0FBc0MsQ0FDcEQsbUJBQTRCLEVBQzVCLFlBQW9DO0lBRXBDLE9BQU8sQ0FDTCxtQkFBbUI7UUFDbkIsWUFBWSxDQUFDLFdBQVc7UUFDeEIsWUFBWSxDQUFDLE9BQU87UUFDcEIsWUFBWSxDQUFDLFFBQVEsQ0FDdEIsQ0FBQztBQUNKLENBQUM7QUFFRCwrREFBK0Q7QUFDL0QsSUFBSSxtQkFBbUIsR0FBa0MsSUFBSSxDQUFDO0FBQzlELElBQUksWUFBWSxHQUFrQixJQUFJLENBQUM7QUFDdkMsSUFBSSxlQUFlLEdBQWtCLElBQUksQ0FBQztBQU8xQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLHVCQUF1QixDQUM5QixhQUFzQixFQUN0QixXQUE4QjtJQUU5QixNQUFNLFNBQVMsR0FDYixhQUFhLFlBQVksS0FBSztRQUM5QixNQUFNLElBQUksYUFBYTtRQUN2QixPQUFRLGFBQW9DLENBQUMsSUFBSSxLQUFLLFFBQVE7UUFDNUQsQ0FBQyxDQUFHLGFBQWtDLENBQUMsSUFBZTtRQUN0RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLE1BQU0sWUFBWSxHQUNoQixhQUFhLFlBQVksS0FBSztRQUM1QixDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU87UUFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUU1QixNQUFNLEtBQUssR0FBRztRQUNaLDZDQUE2QyxTQUFTLElBQUksWUFBWSxlQUFlLFdBQVcsQ0FBQyxJQUFJLEdBQUc7S0FDekcsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLGFBQWEsWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUNsQyxTQUFpQyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUM7SUFDM0QsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLHNCQUFzQixHQUFHLDBCQUEwQixDQUFDO0FBQzFELE1BQU0sZ0NBQWdDLEdBQUcsT0FBTyxDQUFDO0FBQ2pELElBQUksb0NBQW9DLEdBQXlCLElBQUksQ0FBQztBQUV0RSxTQUFTLHNCQUFzQixDQUM3QixhQUFvQyxFQUNwQyxjQUFzQjtJQUV0QixhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLFFBQWdCLEVBQ2hCLFNBQWlDO0lBRWpDLE1BQU0sYUFBYSxHQUFHLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRSxNQUFNLGFBQWEsR0FDakIsU0FBUyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFFbkUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQ0UsYUFBYTtRQUNiLGFBQWEsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLFdBQVc7UUFDbkQsYUFBYSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsT0FBTztRQUMzQyxhQUFhLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQzdDLENBQUM7UUFDRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBa0IsRUFBRSxjQUFzQjtJQUM3RCxJQUFJLElBQUEsb0JBQVUsRUFBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQy9CLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLCtCQUErQjtJQUN0QyxJQUFJLDhCQUE4QixFQUFFLENBQUM7UUFDbkMsT0FBTyw4QkFBOEIsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlELE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FDNUMsc0NBQXNDLENBQ3ZDLENBQUM7SUFDRixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUVuRSwrREFBK0Q7SUFDL0Qsb0VBQW9FO0lBQ3BFLE1BQU0sd0JBQXdCLEdBQUcsSUFBQSxnQkFBSSxFQUFDLElBQUEsbUJBQU8sRUFBQyxhQUFhLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM5RSxNQUFNLCtCQUErQixHQUFHLElBQUEsZ0JBQUksRUFDMUMsSUFBQSxtQkFBTyxFQUFDLG9CQUFvQixDQUFDLEVBQzdCLGlCQUFpQixDQUNsQixDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQVM7UUFDNUIsVUFBVTtRQUNWLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDbEMsYUFBYTtRQUNiLHNCQUFzQjtRQUN0QixvQkFBb0I7S0FDckIsQ0FBQyxDQUFDO0lBQ0gsV0FBVyxDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLENBQUMsQ0FBQztJQUVwRCw4QkFBOEIsR0FBRztRQUMvQixhQUFhO1FBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ3pCLENBQUM7SUFDRixPQUFPLDhCQUE4QixDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLDZCQUE2QixDQUNwQyxhQUFvQztJQUVwQyxNQUFNLGtCQUFrQixHQUFHLCtCQUErQixFQUFFLENBQUM7SUFDN0QsS0FBSyxNQUFNLGNBQWMsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0RCxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELE9BQU8sa0JBQWtCLENBQUMsYUFBYSxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLFlBQXFCO0lBQzlDLElBQUksWUFBWSxJQUFJLFlBQVksSUFBSSxZQUFZLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDbEUsT0FBTztJQUNULENBQUM7SUFFRCxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDM0IsWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLENBQUM7QUFFRCxLQUFLLFVBQVUsa0JBQWtCLENBQy9CLE1BQWMsRUFDZCxPQUFlO0lBRWYsTUFBTSxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUM3QyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDZCxPQUFPO1lBQ1QsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLHFCQUFxQjtJQUM1QixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO0lBQzdELElBQUksY0FBYyxFQUFFLENBQUM7UUFDbkIsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSxtREFBbUQ7SUFDbkQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsSUFBSSxPQUFPLENBQUM7SUFDOUQsTUFBTSxlQUFlLEdBQUcsSUFBQSxnQkFBSSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsdUNBQW9CLENBQUMsQ0FBQztJQUMzRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO0lBQ3RELElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsTUFBTSx1QkFBdUIsR0FBRyxJQUFBLGdCQUFJLEVBQ2xDLFdBQVcsRUFDWCxPQUFPLEVBQ1AsdUNBQW9CLENBQ3JCLENBQUM7UUFDRixJQUFJLElBQUEsb0JBQVUsRUFBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyx1QkFBdUIsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUM7QUFFRCxTQUFTLDJCQUEyQjtJQUNsQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0lBQ3BELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7SUFDbkQsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDN0IsQ0FBQztBQUVELEtBQUssVUFBVSw0QkFBNEI7SUFDekMsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0lBQ25ELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxtQkFBUSxFQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUc1QixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQ2IsT0FBTyxNQUFNLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRO1lBQzdCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUNiLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxXQUFXO1lBQ2pCLFNBQVM7U0FDVixDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsb0JBQW9CO0lBQ2pDLE1BQU0sY0FBYyxHQUFHLDJCQUEyQixFQUFFLENBQUM7SUFDckQsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQixPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxNQUFNLDRCQUE0QixFQUFFLENBQUM7QUFDOUMsQ0FBQztBQUVELEtBQUssVUFBVSxlQUFlO0lBQzVCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3ZELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksWUFBWSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzVCLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BGLElBQUksZUFBZSxJQUFJLGVBQWUsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekIsbUJBQW1CLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNoQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBTyxFQUFDO29CQUNyQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDNUIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCLENBQUMsQ0FBQztnQkFFSCxzQkFBc0I7Z0JBQ3RCLE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7b0JBQzFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRTt3QkFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDeEIsT0FBTyxFQUFFLENBQUM7d0JBQ1YsT0FBTyxFQUFFLENBQUM7b0JBQ1osQ0FBQyxDQUFDO29CQUNGLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7d0JBQy9CLE9BQU8sRUFBRSxDQUFDO3dCQUNWLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxDQUFDLENBQUM7b0JBQ0YsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDOUIsT0FBTyxFQUFFLENBQUM7d0JBQ1YsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNqQixNQUFNLENBQ0osdUJBQXVCLENBQ3JCLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLEVBQ3RDLGlCQUFpQixDQUNsQixDQUNGLENBQUM7b0JBQ0osQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNULE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTt3QkFDbkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUN0QixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQzt3QkFDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQy9CLENBQUMsQ0FBQztvQkFFRixNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFDO2dCQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDdEIsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDdEIsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDO2dCQUVILFlBQVksR0FBRyxNQUFNLENBQUM7Z0JBQ3RCLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDbkMsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsaUJBQWlCLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLENBQUM7SUFDRCxPQUFPLG1CQUFtQixDQUFDO0FBQzdCLENBQUM7QUFFRCxLQUFLLFVBQVUsa0JBQWtCLENBQy9CLFFBQWdCLEVBQ2hCLFdBQW9CLEVBQ3BCLE9BQWdCLEVBQ2hCLFFBQWlCO0lBRWpCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3ZELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZCLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFlLEVBQUUsQ0FBQztJQUN2QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFrQjtRQUM3QixJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFdBQVc7UUFDWCxPQUFPO1FBQ1AsUUFBUTtLQUNULENBQUM7SUFDRixNQUFNLGlCQUFpQixHQUFHLElBQUEsbUNBQWdCLEVBQ3hDLE9BQU8sRUFDUCxpQkFBaUIsQ0FBQyxTQUFTLENBQzVCLENBQUM7SUFFRixJQUFJLENBQUM7UUFDSCxNQUFNLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLGVBQWUsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQUMsTUFBYztJQUMvQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsS0FBSyxVQUFVLHNCQUFzQixDQUNuQyxpQkFBb0MsRUFDcEMsU0FBUyxHQUFHLEtBQUs7SUFFakIsT0FBTyxNQUFNLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQU8sRUFBQztZQUNyQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtZQUM1QixJQUFJLEVBQUUsV0FBVztTQUNsQixDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzlCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FDSix1QkFBdUIsQ0FDckIsSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsRUFDdEMsaUJBQWlCLENBQ2xCLENBQ0YsQ0FBQztRQUNKLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNkLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNuQixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUMvQixPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxLQUFLLFVBQVUsNEJBQTRCLENBQ3pDLE1BQWMsRUFDZCxTQUFpQixFQUNqQixTQUFTLEdBQUcsZ0NBQWdDO0lBRTVDLE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDMUMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLENBQ0osSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FDbkUsQ0FBQztRQUNKLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNkLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNuQixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUMvQixPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDbkIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVwQyxNQUFNLE9BQU8sR0FBRyxJQUFBLCtCQUFZLEVBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLE9BQU8sRUFBRSxJQUFJLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztvQkFDdkMsT0FBTyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxFQUFFLENBQUM7b0JBQ1YsT0FBTztnQkFDVCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSxvQ0FBb0M7SUFDakQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLG9CQUFvQixFQUFFLENBQUM7SUFDdkQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdkIsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxrQkFBa0IsQ0FDdEIsTUFBTSxFQUNOLElBQUEsbUNBQWdCLEVBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQ3pFLENBQUM7UUFDRixNQUFNLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRSxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxtQ0FBbUM7SUFDaEQsSUFBSSxvQ0FBb0MsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sb0NBQW9DLENBQUM7SUFDOUMsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLG9DQUFvQyxFQUFFLENBQUM7SUFDOUQsb0NBQW9DLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDakUsSUFBSSxvQ0FBb0MsS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUM1RCxvQ0FBb0MsR0FBRyxJQUFJLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxvQ0FBb0MsQ0FBQztBQUM5QyxDQUFDO0FBRUQsS0FBSyxVQUFVLGlCQUFpQjtJQUc5QixJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDekIsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBQ0QsNERBQTREO0lBQzVELDRJQUE0STtJQUM1SSxvQkFBb0IsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUNoQyw4QkFBOEIsQ0FDL0IsQ0FBd0MsQ0FBQztJQUMxQyxPQUFPLG9CQUFvQixDQUFDO0FBQzlCLENBQUM7QUFFRCxLQUFLLFVBQVUsbUJBQW1CLENBQ2hDLFVBQWtCO0lBRWxCLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBSyxJQUE2QyxFQUFFO1FBQ25FLE1BQU0sRUFBRSw2Q0FBNkMsRUFBRSxHQUNyRCxNQUFNLGlCQUFpQixFQUFFLENBQUM7UUFDNUIsT0FBTyw2Q0FBNkMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRUwscUJBQXFCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUFjO0lBQzFDLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxHQUFHLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztJQUM3RCxPQUFPLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxLQUFLLFVBQVUsa0JBQWtCLENBQUMsUUFBZ0I7SUFDaEQsTUFBTSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsTUFBTSxpQkFBaUIsRUFBRSxDQUFDO0lBQzlELE9BQU8sdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELEtBQUssVUFBVSxvQkFBb0IsQ0FDakMsUUFBZ0IsRUFDaEIsUUFBOEI7SUFFOUIsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsTUFBTSxpQkFBaUIsRUFBRSxDQUFDO0lBQzFELE9BQU8sbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxLQUFLLFVBQVUsa0JBQWtCLENBQy9CLFFBQWdCLEVBQ2hCLFdBQW1CO0lBRW5CLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxHQUFHLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztJQUM3RCxPQUFPLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxlQUFlLENBQUM7QUFDdkUsQ0FBQztBQUVELEtBQUssVUFBVSx3QkFBd0IsQ0FDckMsUUFBZ0IsRUFDaEIsVUFBa0I7SUFFbEIsTUFBTSxFQUFFLGdDQUFnQyxFQUFFLEdBQUcsTUFBTSxpQkFBaUIsRUFBRSxDQUFDO0lBQ3ZFLE9BQU8sZ0NBQWdDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxLQUFLLFVBQVUseUJBQXlCLENBQ3RDLFFBQWdCLEVBQ2hCLFVBQWtCO0lBRWxCLE1BQU0sb0JBQW9CLEdBQUcsVUFBVTtTQUNwQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztTQUNuQixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFeEQseUZBQXlGO0lBQ3pGLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRW5ELElBQUksZ0JBQXdCLENBQUM7SUFDN0IsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hDLHFFQUFxRTtRQUNyRSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQzdDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ2hDLENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDakMsbURBQW1EO1FBQ25ELGdCQUFnQixHQUFHLEdBQUcsQ0FBQztJQUN6QixDQUFDO1NBQU0sQ0FBQztRQUNOLHFEQUFxRDtRQUNyRCxnQkFBZ0IsR0FBRyxJQUFBLG9CQUFRLEVBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEUsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sd0JBQXdCLENBQ3hELFFBQVEsRUFDUixVQUFVLENBQ1gsQ0FBQztZQUNGLElBQUksbUJBQW1CLEVBQUUsQ0FBQztnQkFDeEIsZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7WUFDekMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdCQUFnQixHQUFHLGdCQUFnQjtxQkFDaEMsS0FBSyxDQUFDLEdBQUcsQ0FBQztxQkFDVixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7cUJBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2RSxtRUFBbUU7UUFDbkUsZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLFlBQVksQ0FBQztJQUN6RSxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDO0FBZ0JELFNBQXdCLGNBQWMsQ0FFcEMsTUFBdUIsRUFDdkIsU0FBYztJQUVkLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sR0FBRyxHQUFHLEtBQUssSUFBeUMsRUFBRTtRQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQyxNQUFNLGFBQWEsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDO1FBRTVDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxtRUFBbUU7UUFDbkUsd0VBQXdFO1FBQ3hFLCtDQUErQztRQUMvQyxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDNUIsSUFDRSxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixLQUFLLEdBQUc7Z0JBQ2hELHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLEVBQzNDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDO29CQUNILE1BQU0sbUNBQW1DLEVBQUUsQ0FBQztvQkFDNUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLG1CQUFRLEVBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN6RCxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUNuRCxDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixPQUFPLENBQUMsSUFBSSxDQUNWLDBEQUEwRCxRQUFRLHFCQUFxQixFQUN2RixLQUFLLENBQ04sQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3BELENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCwwRUFBMEU7UUFDMUUsd0VBQXdFO1FBQ3hFLE1BQU0sZ0JBQWdCLEdBQTJCO1lBQy9DLFdBQVcsRUFBRSxRQUFRLENBQUMsY0FBYztZQUNwQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVU7WUFDNUIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1NBQzVCLENBQUM7UUFDRixNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsNEJBQTRCLENBQ25ELFFBQVEsRUFDUixnQkFBZ0IsQ0FDakIsQ0FBQztRQUNGLElBQ0Usc0NBQXNDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLEVBQ3RFLENBQUM7WUFDRCxNQUFNLGtCQUFrQixDQUN0QixRQUFRLEVBQ1IsZ0JBQWdCLENBQUMsV0FBVyxFQUM1QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQ3hCLGdCQUFnQixDQUFDLFFBQVEsQ0FDMUIsQ0FBQztRQUNKLENBQUM7UUFFRCxnRUFBZ0U7UUFDaEUsSUFBSSxDQUFDLENBQUMsTUFBTSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3BELENBQUM7UUFFRCxNQUFNLFlBQVksR0FDaEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDeEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDekIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDekIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU1Qiw2Q0FBNkM7UUFDN0MsOEVBQThFO1FBQzlFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSx5QkFBeUIsQ0FDdEQsUUFBUSxFQUNSLFVBQVUsQ0FDWCxDQUFDO1FBRUYscUVBQXFFO1FBQ3JFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLEdBQzdDLE1BQU0sbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLHNCQUFzQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsNkVBQTZFO1FBQzdFLE1BQU0sZUFBZSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUVwQixxQkFBcUI7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdCQUFTLEVBQUMsa0JBQWtCLEVBQUU7WUFDakQsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixHQUFHLEVBQUU7Z0JBQ0gsTUFBTSxFQUFFO29CQUNOLEdBQUcsQ0FBQyxZQUFZO3dCQUNkLENBQUMsQ0FBQzs0QkFDRSxNQUFNLEVBQUUsWUFBWTs0QkFDcEIsR0FBRyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDOzRCQUM5QixVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTt5QkFDeEM7d0JBQ0gsQ0FBQyxDQUFDOzRCQUNFLE1BQU0sRUFBRSxZQUFZOzRCQUNwQixHQUFHLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7NEJBQzlCLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVO3lCQUN4QyxDQUFDO2lCQUNQO2dCQUNELE1BQU0sRUFBRSxRQUFRO2dCQUNoQixZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztpQkFDdEQ7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRTt3QkFDTCxPQUFPLEVBQUUsVUFBVTtxQkFDcEI7b0JBQ0QsZUFBZSxFQUFFLGdCQUFnQixDQUFDLGVBQWU7b0JBQ2pELGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLGlCQUFpQjtpQkFDdEQ7YUFDRjtZQUNELE1BQU0sRUFBRSxLQUFLO1lBQ2IsY0FBYyxFQUFFLFNBQVM7WUFDekIsVUFBVSxFQUFFLElBQUk7WUFDaEIsb0JBQW9CLEVBQUUsSUFBSTtTQUMzQixDQUFDLENBQUM7UUFFSCxJQUFJLGNBQWMsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDO2dCQUNILGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLGNBQWMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDcEQsQ0FBQyxDQUFDO0lBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsS0FBSyxHQUFHLEVBQUU7U0FDUCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekQsS0FBSyxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsUUFBUSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgY29ubmVjdCwgdHlwZSBTb2NrZXQgfSBmcm9tICdub2RlOm5ldCc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtcbiAgcGFyc2VNZXNzYWdlLFxuICBTT0NLRVRfSU5GT19GSUxFTkFNRSxcbiAgdHlwZSBTb2NrZXRNZXNzYWdlLFxuICBzZXJpYWxpemVNZXNzYWdlLFxufSBmcm9tICcuL3NvY2tldC1zZXJ2ZXIuanMnO1xuXG50eXBlIERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aCA9XG4gIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuRGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoO1xudHlwZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCA9IGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuV29ya2Zsb3dQYXR0ZXJuTWF0Y2g7XG5cbi8vIENhY2hlIGRlY29yYXRvciBvcHRpb25zIHBlciB3b3JraW5nIGRpcmVjdG9yeSB0byBhdm9pZCByZWFkaW5nIHRzY29uZmlnIGZvciBldmVyeSBmaWxlXG5jb25zdCBkZWNvcmF0b3JPcHRpb25zQ2FjaGUgPSBuZXcgTWFwPFxuICBzdHJpbmcsXG4gIFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPlxuPigpO1xuLy8gQ2FjaGUgZm9yIHNoYXJlZCB1dGlsaXRpZXMgZnJvbSBAd29ya2Zsb3cvYnVpbGRlcnMgKEVTTSBtb2R1bGUgbG9hZGVkIGR5bmFtaWNhbGx5IGluIENvbW1vbkpTIGNvbnRleHQpXG5sZXQgY2FjaGVkQnVpbGRlcnNNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpIHwgbnVsbCA9IG51bGw7XG50eXBlIExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyA9IHtcbiAgc3djUGx1Z2luUGF0aDogc3RyaW5nO1xuICBmaWxlczogc3RyaW5nW107XG59O1xubGV0IGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llczogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHwgbnVsbCA9IG51bGw7XG5cbnR5cGUgRGlzY292ZXJlZFBhdHRlcm5TdGF0ZSA9IHtcbiAgaGFzV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1N0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufTtcbmNvbnN0IGRpc2NvdmVyZWRQYXR0ZXJuU3RhdGVCeUZpbGVQYXRoID0gbmV3IE1hcDxcbiAgc3RyaW5nLFxuICBEaXNjb3ZlcmVkUGF0dGVyblN0YXRlXG4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGROb3RpZnlTb2NrZXRGb3JEaXNjb3ZlcmVkUGF0dGVybihcbiAgcGF0dGVyblN0YXRlQ2hhbmdlZDogYm9vbGVhbixcbiAgcGF0dGVyblN0YXRlOiBEaXNjb3ZlcmVkUGF0dGVyblN0YXRlXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBwYXR0ZXJuU3RhdGVDaGFuZ2VkIHx8XG4gICAgcGF0dGVyblN0YXRlLmhhc1dvcmtmbG93IHx8XG4gICAgcGF0dGVyblN0YXRlLmhhc1N0ZXAgfHxcbiAgICBwYXR0ZXJuU3RhdGUuaGFzU2VyZGVcbiAgKTtcbn1cblxuLy8gQ2FjaGUgc29ja2V0IGNvbm5lY3Rpb24gdG8gYXZvaWQgcmVjb25uZWN0aW5nIG9uIGV2ZXJ5IGZpbGUuXG5sZXQgc29ja2V0Q2xpZW50UHJvbWlzZTogUHJvbWlzZTxTb2NrZXQgfCBudWxsPiB8IG51bGwgPSBudWxsO1xubGV0IHNvY2tldENsaWVudDogU29ja2V0IHwgbnVsbCA9IG51bGw7XG5sZXQgc29ja2V0Q2xpZW50S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxudHlwZSBTb2NrZXRDcmVkZW50aWFscyA9IHtcbiAgcG9ydDogbnVtYmVyO1xuICBhdXRoVG9rZW46IHN0cmluZztcbn07XG5cbi8qKlxuICogV3JhcCBhIFRDUCBjb25uZWN0IGZhaWx1cmUgd2l0aCBjb250ZXh0IGFib3V0IHdoZXJlIHRoZSBjb25uZWN0aW9uIHdhc1xuICogYXR0ZW1wdGVkLCB3aGVyZSB0aGUgY3JlZGVudGlhbHMgY2FtZSBmcm9tLCBhbmQgd2hpY2ggc291cmNlIGZpbGUgd2FzXG4gKiBiZWluZyBwcm9jZXNzZWQgd2hlbiBpdCBmYWlsZWQuIEVDT05OUkVGVVNFRCBpcyB0aGUgY29tbW9uIGNhc2UgaGVyZSwgYW5kXG4gKiB0aGUgbWVzc2FnZSBwb2ludHMgdGhlIHVzZXIgYXQgdGhlIG1vc3QgbGlrZWx5IHJvb3QgY2F1c2UgKHN0YWxlXG4gKiBzb2NrZXQtaW5mbyBmaWxlKS5cbiAqL1xuZnVuY3Rpb24gYW5ub3RhdGVDb25uZWN0aW9uRXJyb3IoXG4gIG9yaWdpbmFsRXJyb3I6IHVua25vd24sXG4gIGNyZWRlbnRpYWxzOiBTb2NrZXRDcmVkZW50aWFsc1xuKTogRXJyb3Ige1xuICBjb25zdCBlcnJvckNvZGUgPVxuICAgIG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICdjb2RlJyBpbiBvcmlnaW5hbEVycm9yICYmXG4gICAgdHlwZW9mIChvcmlnaW5hbEVycm9yIGFzIHsgY29kZT86IHVua25vd24gfSkuY29kZSA9PT0gJ3N0cmluZydcbiAgICAgID8gKChvcmlnaW5hbEVycm9yIGFzIHsgY29kZTogc3RyaW5nIH0pLmNvZGUgYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgb3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICA/IG9yaWdpbmFsRXJyb3IubWVzc2FnZVxuICAgICAgOiBTdHJpbmcob3JpZ2luYWxFcnJvcik7XG5cbiAgY29uc3QgbGluZXMgPSBbXG4gICAgYFdvcmtmbG93IGRpc2NvdmVyeSBzb2NrZXQgY29ubmVjdCBmYWlsZWQ6ICR7ZXJyb3JDb2RlID8/IGVycm9yTWVzc2FnZX0gKDEyNy4wLjAuMToke2NyZWRlbnRpYWxzLnBvcnR9KWAsXG4gIF07XG5cbiAgY29uc3QgYW5ub3RhdGVkID0gbmV3IEVycm9yKGxpbmVzLmpvaW4oJ1xcbicpKTtcbiAgaWYgKG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIChhbm5vdGF0ZWQgYXMgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2UgPSBvcmlnaW5hbEVycm9yO1xuICB9XG4gIHJldHVybiBhbm5vdGF0ZWQ7XG59XG5cbmNvbnN0IFJPVVRFX1NUVUJfRklMRV9NQVJLRVIgPSAnV09SS0ZMT1dfUk9VVEVfU1RVQl9GSUxFJztcbmNvbnN0IFJPVVRFX1NUVUJfQlVJTERfV0FJVF9USU1FT1VUX01TID0gMTIwXzAwMDtcbmxldCBwZW5kaW5nRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZFByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuZnVuY3Rpb24gcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeShcbiAgbG9hZGVyQ29udGV4dDogV29ya2Zsb3dMb2FkZXJDb250ZXh0LFxuICBkZXBlbmRlbmN5UGF0aDogc3RyaW5nXG4pOiB2b2lkIHtcbiAgbG9hZGVyQ29udGV4dC5hZGREZXBlbmRlbmN5Py4oZGVwZW5kZW5jeVBhdGgpO1xuICBsb2FkZXJDb250ZXh0LmFkZEJ1aWxkRGVwZW5kZW5jeT8uKGRlcGVuZGVuY3lQYXRoKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRGlzY292ZXJlZFBhdHRlcm5TdGF0ZShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgbmV4dFN0YXRlOiBEaXNjb3ZlcmVkUGF0dGVyblN0YXRlXG4pOiB7IHNob3VsZE5vdGlmeTogYm9vbGVhbjsgcHJldmlvdXNTdGF0ZT86IERpc2NvdmVyZWRQYXR0ZXJuU3RhdGUgfSB7XG4gIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBkaXNjb3ZlcmVkUGF0dGVyblN0YXRlQnlGaWxlUGF0aC5nZXQoZmlsZVBhdGgpO1xuICBjb25zdCBoYXNBbnlQYXR0ZXJuID1cbiAgICBuZXh0U3RhdGUuaGFzV29ya2Zsb3cgfHwgbmV4dFN0YXRlLmhhc1N0ZXAgfHwgbmV4dFN0YXRlLmhhc1NlcmRlO1xuXG4gIGlmICghaGFzQW55UGF0dGVybikge1xuICAgIGlmICghcHJldmlvdXNTdGF0ZSkge1xuICAgICAgcmV0dXJuIHsgc2hvdWxkTm90aWZ5OiBmYWxzZSB9O1xuICAgIH1cbiAgICBkaXNjb3ZlcmVkUGF0dGVyblN0YXRlQnlGaWxlUGF0aC5kZWxldGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiB7IHNob3VsZE5vdGlmeTogdHJ1ZSwgcHJldmlvdXNTdGF0ZSB9O1xuICB9XG5cbiAgaWYgKFxuICAgIHByZXZpb3VzU3RhdGUgJiZcbiAgICBwcmV2aW91c1N0YXRlLmhhc1dvcmtmbG93ID09PSBuZXh0U3RhdGUuaGFzV29ya2Zsb3cgJiZcbiAgICBwcmV2aW91c1N0YXRlLmhhc1N0ZXAgPT09IG5leHRTdGF0ZS5oYXNTdGVwICYmXG4gICAgcHJldmlvdXNTdGF0ZS5oYXNTZXJkZSA9PT0gbmV4dFN0YXRlLmhhc1NlcmRlXG4gICkge1xuICAgIHJldHVybiB7IHNob3VsZE5vdGlmeTogZmFsc2UsIHByZXZpb3VzU3RhdGUgfTtcbiAgfVxuXG4gIGRpc2NvdmVyZWRQYXR0ZXJuU3RhdGVCeUZpbGVQYXRoLnNldChmaWxlUGF0aCwgbmV4dFN0YXRlKTtcbiAgcmV0dXJuIHsgc2hvdWxkTm90aWZ5OiB0cnVlLCBwcmV2aW91c1N0YXRlIH07XG59XG5cbmZ1bmN0aW9uIGFkZElmRXhpc3RzKGZpbGVzOiBTZXQ8c3RyaW5nPiwgZGVwZW5kZW5jeVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXhpc3RzU3luYyhkZXBlbmRlbmN5UGF0aCkpIHtcbiAgICBmaWxlcy5hZGQoZGVwZW5kZW5jeVBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMoKTogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHtcbiAgaWYgKGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcykge1xuICAgIHJldHVybiBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM7XG4gIH1cblxuICBjb25zdCBzd2NQbHVnaW5QYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvc3djLXBsdWdpbicpO1xuICBjb25zdCBzd2NQbHVnaW5CdWlsZEhhc2hQYXRoID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICdAd29ya2Zsb3cvc3djLXBsdWdpbi9idWlsZC1oYXNoLmpzb24nXG4gICk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvYnVpbGRlcnMnKTtcblxuICAvLyBEZXJpdmUgcGFja2FnZS5qc29uIHBhdGhzIGZyb20gcmVzb2x2ZWQgZW50cnlwb2ludHMgdG8gYXZvaWRcbiAgLy8gVHVyYm9wYWNrIGxvYWRlci1ldmFsIGZhaWx1cmVzIGFyb3VuZCAuLi9wYWNrYWdlLmpzb24gcmVzb2x1dGlvbi5cbiAgY29uc3Qgc3djUGx1Z2luUGFja2FnZUpzb25QYXRoID0gam9pbihkaXJuYW1lKHN3Y1BsdWdpblBhdGgpLCAncGFja2FnZS5qc29uJyk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYWNrYWdlSnNvblBhdGggPSBqb2luKFxuICAgIGRpcm5hbWUod29ya2Zsb3dCdWlsZGVyc1BhdGgpLFxuICAgICcuLi9wYWNrYWdlLmpzb24nXG4gICk7XG5cbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgIF9fZmlsZW5hbWUsXG4gICAgcmVxdWlyZS5yZXNvbHZlKCcuL3NvY2tldC1zZXJ2ZXInKSxcbiAgICBzd2NQbHVnaW5QYXRoLFxuICAgIHN3Y1BsdWdpbkJ1aWxkSGFzaFBhdGgsXG4gICAgd29ya2Zsb3dCdWlsZGVyc1BhdGgsXG4gIF0pO1xuICBhZGRJZkV4aXN0cyhmaWxlcywgc3djUGx1Z2luUGFja2FnZUpzb25QYXRoKTtcbiAgYWRkSWZFeGlzdHMoZmlsZXMsIHdvcmtmbG93QnVpbGRlcnNQYWNrYWdlSnNvblBhdGgpO1xuXG4gIGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyA9IHtcbiAgICBzd2NQbHVnaW5QYXRoLFxuICAgIGZpbGVzOiBBcnJheS5mcm9tKGZpbGVzKSxcbiAgfTtcbiAgcmV0dXJuIGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcztcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMoXG4gIGxvYWRlckNvbnRleHQ6IFdvcmtmbG93TG9hZGVyQ29udGV4dFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdGljRGVwZW5kZW5jaWVzID0gcmVzb2x2ZUxvYWRlclN0YXRpY0RlcGVuZGVuY2llcygpO1xuICBmb3IgKGNvbnN0IGRlcGVuZGVuY3lQYXRoIG9mIHN0YXRpY0RlcGVuZGVuY2llcy5maWxlcykge1xuICAgIHJlZ2lzdGVyRmlsZURlcGVuZGVuY3kobG9hZGVyQ29udGV4dCwgZGVwZW5kZW5jeVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRpY0RlcGVuZGVuY2llcy5zd2NQbHVnaW5QYXRoO1xufVxuXG5mdW5jdGlvbiByZXNldFNvY2tldENsaWVudChjYWNoZWRTb2NrZXQ/OiBTb2NrZXQpOiB2b2lkIHtcbiAgaWYgKGNhY2hlZFNvY2tldCAmJiBzb2NrZXRDbGllbnQgJiYgc29ja2V0Q2xpZW50ICE9PSBjYWNoZWRTb2NrZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzb2NrZXRDbGllbnRQcm9taXNlID0gbnVsbDtcbiAgc29ja2V0Q2xpZW50ID0gbnVsbDtcbiAgc29ja2V0Q2xpZW50S2V5ID0gbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVTb2NrZXRNZXNzYWdlKFxuICBzb2NrZXQ6IFNvY2tldCxcbiAgbWVzc2FnZTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNvY2tldC53cml0ZShtZXNzYWdlLCAoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvRmlsZVBhdGgoKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ3VyZWRQYXRoID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09DS0VUX0lORk9fUEFUSDtcbiAgaWYgKGNvbmZpZ3VyZWRQYXRoKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3VyZWRQYXRoO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgZm9yIHdvcmtlciBwcm9jZXNzZXMgdGhhdCBkb24ndCBpbmhlcml0IGR5bmFtaWMgZW52IHVwZGF0ZXNcbiAgLy8gZnJvbSB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgdGhlIHNvY2tldCBzZXJ2ZXIuXG4gIGNvbnN0IGRpc3REaXIgPSBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX0RJU1RfRElSIHx8ICcubmV4dCc7XG4gIGNvbnN0IGN3ZEZhbGxiYWNrUGF0aCA9IGpvaW4ocHJvY2Vzcy5jd2QoKSwgZGlzdERpciwgU09DS0VUX0lORk9fRklMRU5BTUUpO1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuZW52LldPUktGTE9XX1BST0pFQ1RfUk9PVDtcbiAgaWYgKHByb2plY3RSb290KSB7XG4gICAgY29uc3QgcHJvamVjdFJvb3RGYWxsYmFja1BhdGggPSBqb2luKFxuICAgICAgcHJvamVjdFJvb3QsXG4gICAgICBkaXN0RGlyLFxuICAgICAgU09DS0VUX0lORk9fRklMRU5BTUVcbiAgICApO1xuICAgIGlmIChleGlzdHNTeW5jKHByb2plY3RSb290RmFsbGJhY2tQYXRoKSkge1xuICAgICAgcmV0dXJuIHByb2plY3RSb290RmFsbGJhY2tQYXRoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3dkRmFsbGJhY2tQYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRDcmVkZW50aWFsc0Zyb21FbnYoKTogU29ja2V0Q3JlZGVudGlhbHMgfCBudWxsIHtcbiAgY29uc3Qgc29ja2V0UG9ydCA9IHByb2Nlc3MuZW52LldPUktGTE9XX1NPQ0tFVF9QT1JUO1xuICBjb25zdCBhdXRoVG9rZW4gPSBwcm9jZXNzLmVudi5XT1JLRkxPV19TT0NLRVRfQVVUSDtcbiAgaWYgKCFzb2NrZXRQb3J0IHx8ICFhdXRoVG9rZW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBvcnQgPSBOdW1iZXIucGFyc2VJbnQoc29ja2V0UG9ydCwgMTApO1xuICBpZiAoTnVtYmVyLmlzTmFOKHBvcnQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHsgcG9ydCwgYXV0aFRva2VuIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldENyZWRlbnRpYWxzRnJvbUZpbGUoKTogUHJvbWlzZTxTb2NrZXRDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgY29uc3Qgc29ja2V0SW5mb0ZpbGVQYXRoID0gZ2V0U29ja2V0SW5mb0ZpbGVQYXRoKCk7XG4gIGlmICghc29ja2V0SW5mb0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFleGlzdHNTeW5jKHNvY2tldEluZm9GaWxlUGF0aCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUoc29ja2V0SW5mb0ZpbGVQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyB7XG4gICAgICBwb3J0PzogdW5rbm93bjtcbiAgICAgIGF1dGhUb2tlbj86IHVua25vd247XG4gICAgfTtcbiAgICBjb25zdCBhdXRoVG9rZW4gPVxuICAgICAgdHlwZW9mIHBhcnNlZC5hdXRoVG9rZW4gPT09ICdzdHJpbmcnID8gcGFyc2VkLmF1dGhUb2tlbiA6IG51bGw7XG4gICAgY29uc3QgbnVtZXJpY1BvcnQgPVxuICAgICAgdHlwZW9mIHBhcnNlZC5wb3J0ID09PSAnbnVtYmVyJ1xuICAgICAgICA/IHBhcnNlZC5wb3J0XG4gICAgICAgIDogTnVtYmVyLnBhcnNlSW50KFN0cmluZyhwYXJzZWQucG9ydCksIDEwKTtcblxuICAgIGlmICghYXV0aFRva2VuIHx8IE51bWJlci5pc05hTihudW1lcmljUG9ydCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcG9ydDogbnVtZXJpY1BvcnQsXG4gICAgICBhdXRoVG9rZW4sXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U29ja2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxTb2NrZXRDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgY29uc3QgZW52Q3JlZGVudGlhbHMgPSBnZXRTb2NrZXRDcmVkZW50aWFsc0Zyb21FbnYoKTtcbiAgaWYgKGVudkNyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIGVudkNyZWRlbnRpYWxzO1xuICB9XG4gIHJldHVybiBhd2FpdCBnZXRTb2NrZXRDcmVkZW50aWFsc0Zyb21GaWxlKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldENsaWVudCgpOiBQcm9taXNlPFNvY2tldCB8IG51bGw+IHtcbiAgY29uc3Qgc29ja2V0Q3JlZGVudGlhbHMgPSBhd2FpdCBnZXRTb2NrZXRDcmVkZW50aWFscygpO1xuICBpZiAoIXNvY2tldENyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoc29ja2V0Q2xpZW50Py5kZXN0cm95ZWQpIHtcbiAgICByZXNldFNvY2tldENsaWVudChzb2NrZXRDbGllbnQpO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFNvY2tldEtleSA9IGAke3NvY2tldENyZWRlbnRpYWxzLnBvcnR9OiR7c29ja2V0Q3JlZGVudGlhbHMuYXV0aFRva2VufWA7XG4gIGlmIChzb2NrZXRDbGllbnRLZXkgJiYgc29ja2V0Q2xpZW50S2V5ICE9PSBjdXJyZW50U29ja2V0S2V5KSB7XG4gICAgaWYgKHNvY2tldENsaWVudCkge1xuICAgICAgcmVzZXRTb2NrZXRDbGllbnQoc29ja2V0Q2xpZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXRTb2NrZXRDbGllbnQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXNvY2tldENsaWVudFByb21pc2UpIHtcbiAgICBzb2NrZXRDbGllbnRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IGNvbm5lY3Qoe1xuICAgICAgICAgIHBvcnQ6IHNvY2tldENyZWRlbnRpYWxzLnBvcnQsXG4gICAgICAgICAgaG9zdDogJzEyNy4wLjAuMScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIGNvbm5lY3Rpb25cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9uQ29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIHNvY2tldC5zZXROb0RlbGF5KHRydWUpO1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIHJlamVjdChhbm5vdGF0ZUNvbm5lY3Rpb25FcnJvcihlcnJvciwgc29ja2V0Q3JlZGVudGlhbHMpKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgIGFubm90YXRlQ29ubmVjdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgIG5ldyBFcnJvcignU29ja2V0IGNvbm5lY3Rpb24gdGltZW91dCcpLFxuICAgICAgICAgICAgICAgIHNvY2tldENyZWRlbnRpYWxzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHNvY2tldC5vZmYoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgICAgICAgICAgc29ja2V0Lm9mZignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc29ja2V0Lm9uKCdjb25uZWN0Jywgb25Db25uZWN0KTtcbiAgICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgcmVzZXRTb2NrZXRDbGllbnQoc29ja2V0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgcmVzZXRTb2NrZXRDbGllbnQoc29ja2V0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc29ja2V0Q2xpZW50ID0gc29ja2V0O1xuICAgICAgICBzb2NrZXRDbGllbnRLZXkgPSBjdXJyZW50U29ja2V0S2V5O1xuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVzZXRTb2NrZXRDbGllbnQoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuICByZXR1cm4gc29ja2V0Q2xpZW50UHJvbWlzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbm90aWZ5U29ja2V0U2VydmVyKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICBoYXNXb3JrZmxvdzogYm9vbGVhbixcbiAgaGFzU3RlcDogYm9vbGVhbixcbiAgaGFzU2VyZGU6IGJvb2xlYW5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzb2NrZXRDcmVkZW50aWFscyA9IGF3YWl0IGdldFNvY2tldENyZWRlbnRpYWxzKCk7XG4gIGlmICghc29ja2V0Q3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBhd2FpdCBnZXRTb2NrZXRDbGllbnQoKTtcbiAgaWYgKCFzb2NrZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFyaWFudDogbWlzc2luZyB3b3JrZmxvdyBzb2NrZXQgY29ubmVjdGlvbicpO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZTogU29ja2V0TWVzc2FnZSA9IHtcbiAgICB0eXBlOiAnZmlsZS1kaXNjb3ZlcmVkJyxcbiAgICBmaWxlUGF0aDogZmlsZW5hbWUsXG4gICAgaGFzV29ya2Zsb3csXG4gICAgaGFzU3RlcCxcbiAgICBoYXNTZXJkZSxcbiAgfTtcbiAgY29uc3Qgc2VyaWFsaXplZE1lc3NhZ2UgPSBzZXJpYWxpemVNZXNzYWdlKFxuICAgIG1lc3NhZ2UsXG4gICAgc29ja2V0Q3JlZGVudGlhbHMuYXV0aFRva2VuXG4gICk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3cml0ZVNvY2tldE1lc3NhZ2Uoc29ja2V0LCBzZXJpYWxpemVkTWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzZXRTb2NrZXRDbGllbnQoc29ja2V0KTtcbiAgICBjb25zdCByZWNvbm5lY3RlZFNvY2tldCA9IGF3YWl0IGdldFNvY2tldENsaWVudCgpO1xuICAgIGlmICghcmVjb25uZWN0ZWRTb2NrZXQpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBhd2FpdCB3cml0ZVNvY2tldE1lc3NhZ2UocmVjb25uZWN0ZWRTb2NrZXQsIHNlcmlhbGl6ZWRNZXNzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1dvcmtmbG93Um91dGVTdHViU291cmNlKHNvdXJjZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBzb3VyY2UuaW5jbHVkZXMoUk9VVEVfU1RVQl9GSUxFX01BUktFUik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNvY2tldENvbm5lY3Rpb24oXG4gIHNvY2tldENyZWRlbnRpYWxzOiBTb2NrZXRDcmVkZW50aWFscyxcbiAgdGltZW91dE1zID0gMV8wMDBcbik6IFByb21pc2U8U29ja2V0PiB7XG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxTb2NrZXQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzb2NrZXQgPSBjb25uZWN0KHtcbiAgICAgIHBvcnQ6IHNvY2tldENyZWRlbnRpYWxzLnBvcnQsXG4gICAgICBob3N0OiAnMTI3LjAuMC4xJyxcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgcmVqZWN0KFxuICAgICAgICBhbm5vdGF0ZUNvbm5lY3Rpb25FcnJvcihcbiAgICAgICAgICBuZXcgRXJyb3IoJ1NvY2tldCBjb25uZWN0aW9uIHRpbWVvdXQnKSxcbiAgICAgICAgICBzb2NrZXRDcmVkZW50aWFsc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH0sIHRpbWVvdXRNcyk7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHNvY2tldC5vZmYoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgICAgc29ja2V0Lm9mZignZXJyb3InLCBvbkVycm9yKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ29ubmVjdCA9ICgpID0+IHtcbiAgICAgIHNvY2tldC5zZXROb0RlbGF5KHRydWUpO1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVzb2x2ZShzb2NrZXQpO1xuICAgIH07XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICByZWplY3QoYW5ub3RhdGVDb25uZWN0aW9uRXJyb3IoZXJyb3IsIHNvY2tldENyZWRlbnRpYWxzKSk7XG4gICAgfTtcblxuICAgIHNvY2tldC5vbignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckRlZmVycmVkQnVpbGRDb21wbGV0ZShcbiAgc29ja2V0OiBTb2NrZXQsXG4gIGF1dGhUb2tlbjogc3RyaW5nLFxuICB0aW1lb3V0TXMgPSBST1VURV9TVFVCX0JVSUxEX1dBSVRfVElNRU9VVF9NU1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgYnVmZmVyID0gJyc7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBkZWZlcnJlZCByb3V0ZSBidWlsZCBjb21wbGV0aW9uJylcbiAgICAgICk7XG4gICAgfSwgdGltZW91dE1zKTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgc29ja2V0Lm9mZignZGF0YScsIG9uRGF0YSk7XG4gICAgICBzb2NrZXQub2ZmKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgc29ja2V0Lm9mZignY2xvc2UnLCBvbkNsb3NlKTtcbiAgICAgIHNvY2tldC5vZmYoJ2VuZCcsIG9uQ2xvc2UpO1xuICAgIH07XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfTtcbiAgICBjb25zdCBvbkNsb3NlID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcignU29ja2V0IGNsb3NlZCBiZWZvcmUgZGVmZXJyZWQgcm91dGUgYnVpbGQgY29tcGxldGVkJykpO1xuICAgIH07XG4gICAgY29uc3Qgb25EYXRhID0gKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgIGJ1ZmZlciArPSBjaHVuay50b1N0cmluZygpO1xuICAgICAgbGV0IG5ld2xpbmVJbmRleCA9IGJ1ZmZlci5pbmRleE9mKCdcXG4nKTtcbiAgICAgIHdoaWxlIChuZXdsaW5lSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBidWZmZXIuc2xpY2UoMCwgbmV3bGluZUluZGV4KTtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKG5ld2xpbmVJbmRleCArIDEpO1xuICAgICAgICBuZXdsaW5lSW5kZXggPSBidWZmZXIuaW5kZXhPZignXFxuJyk7XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHBhcnNlTWVzc2FnZShsaW5lLCBhdXRoVG9rZW4pO1xuICAgICAgICBpZiAobWVzc2FnZT8udHlwZSA9PT0gJ2J1aWxkLWNvbXBsZXRlJykge1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNvY2tldC5vbignZGF0YScsIG9uRGF0YSk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgIHNvY2tldC5vbignY2xvc2UnLCBvbkNsb3NlKTtcbiAgICBzb2NrZXQub24oJ2VuZCcsIG9uQ2xvc2UpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJpZ2dlckRlZmVycmVkUm91dGVTdHViQnVpbGRBbmRXYWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzb2NrZXRDcmVkZW50aWFscyA9IGF3YWl0IGdldFNvY2tldENyZWRlbnRpYWxzKCk7XG4gIGlmICghc29ja2V0Q3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc29ja2V0ID0gYXdhaXQgY3JlYXRlU29ja2V0Q29ubmVjdGlvbihzb2NrZXRDcmVkZW50aWFscyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgd3JpdGVTb2NrZXRNZXNzYWdlKFxuICAgICAgc29ja2V0LFxuICAgICAgc2VyaWFsaXplTWVzc2FnZSh7IHR5cGU6ICd0cmlnZ2VyLWJ1aWxkJyB9LCBzb2NrZXRDcmVkZW50aWFscy5hdXRoVG9rZW4pXG4gICAgKTtcbiAgICBhd2FpdCB3YWl0Rm9yRGVmZXJyZWRCdWlsZENvbXBsZXRlKHNvY2tldCwgc29ja2V0Q3JlZGVudGlhbHMuYXV0aFRva2VuKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzb2NrZXQuZGVzdHJveSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURlZmVycmVkUm91dGVTdHViQnVpbGRBbmRXYWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocGVuZGluZ0RlZmVycmVkUm91dGVTdHViQnVpbGRQcm9taXNlKSB7XG4gICAgcmV0dXJuIHBlbmRpbmdEZWZlcnJlZFJvdXRlU3R1YkJ1aWxkUHJvbWlzZTtcbiAgfVxuICBjb25zdCBwZW5kaW5nUHJvbWlzZSA9IHRyaWdnZXJEZWZlcnJlZFJvdXRlU3R1YkJ1aWxkQW5kV2FpdCgpO1xuICBwZW5kaW5nRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZFByb21pc2UgPSBwZW5kaW5nUHJvbWlzZS5maW5hbGx5KCgpID0+IHtcbiAgICBpZiAocGVuZGluZ0RlZmVycmVkUm91dGVTdHViQnVpbGRQcm9taXNlID09PSBwZW5kaW5nUHJvbWlzZSkge1xuICAgICAgcGVuZGluZ0RlZmVycmVkUm91dGVTdHViQnVpbGRQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcGVuZGluZ0RlZmVycmVkUm91dGVTdHViQnVpbGRQcm9taXNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRCdWlsZGVyc01vZHVsZSgpOiBQcm9taXNlPFxuICB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKVxuPiB7XG4gIGlmIChjYWNoZWRCdWlsZGVyc01vZHVsZSkge1xuICAgIHJldHVybiBjYWNoZWRCdWlsZGVyc01vZHVsZTtcbiAgfVxuICAvLyBEeW5hbWljIGltcG9ydCB0byBoYW5kbGUgRVNNIG1vZHVsZSBmcm9tIENvbW1vbkpTIGNvbnRleHRcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOiBOZWVkIHRvIHVzZSBldmFsIGhlcmUgdG8gYXZvaWQgVHlwZVNjcmlwdCBmcm9tIHRyYW5zcGlsaW5nIHRoZSBpbXBvcnQgc3RhdGVtZW50IGludG8gYHJlcXVpcmUoKWBcbiAgY2FjaGVkQnVpbGRlcnNNb2R1bGUgPSAoYXdhaXQgZXZhbChcbiAgICAnaW1wb3J0KFwiQHdvcmtmbG93L2J1aWxkZXJzXCIpJ1xuICApKSBhcyB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKTtcbiAgcmV0dXJuIGNhY2hlZEJ1aWxkZXJzTW9kdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREZWNvcmF0b3JPcHRpb25zKFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPiB7XG4gIGNvbnN0IGNhY2hlZCA9IGRlY29yYXRvck9wdGlvbnNDYWNoZS5nZXQod29ya2luZ0Rpcik7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgY29uc3QgcHJvbWlzZSA9IChhc3luYyAoKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGg+ID0+IHtcbiAgICBjb25zdCB7IGdldERlY29yYXRvck9wdGlvbnNGb3JEaXJlY3RvcnlXaXRoQ29uZmlnUGF0aCB9ID1cbiAgICAgIGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gICAgcmV0dXJuIGdldERlY29yYXRvck9wdGlvbnNGb3JEaXJlY3RvcnlXaXRoQ29uZmlnUGF0aCh3b3JraW5nRGlyKTtcbiAgfSkoKTtcblxuICBkZWNvcmF0b3JPcHRpb25zQ2FjaGUuc2V0KHdvcmtpbmdEaXIsIHByb21pc2UpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0UGF0dGVybnMoc291cmNlOiBzdHJpbmcpOiBQcm9taXNlPFdvcmtmbG93UGF0dGVybk1hdGNoPiB7XG4gIGNvbnN0IHsgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tHZW5lcmF0ZWRGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZSB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlKGZpbGVQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tTaG91bGRUcmFuc2Zvcm0oXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHBhdHRlcm5zOiBXb3JrZmxvd1BhdHRlcm5NYXRjaFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgc2hvdWxkVHJhbnNmb3JtRmlsZSB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIHNob3VsZFRyYW5zZm9ybUZpbGUoZmlsZVBhdGgsIHBhdHRlcm5zKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TW9kdWxlU3BlY2lmaWVyKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHJlc29sdmVNb2R1bGVTcGVjaWZpZXIgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkubW9kdWxlU3BlY2lmaWVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlV29ya2Zsb3dBbGlhc1BhdGgoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aCB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoKGZpbGVQYXRoLCB3b3JraW5nRGlyKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVsYXRpdmVGaWxlbmFtZUZvclN3YyhcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBub3JtYWxpemVkV29ya2luZ0RpciA9IHdvcmtpbmdEaXJcbiAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRGaWxlcGF0aCA9IGZpbGVuYW1lLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAvLyBXaW5kb3dzIGZpeDogVXNlIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbiB0byB3b3JrIGFyb3VuZCBkcml2ZSBsZXR0ZXIgY2FzaW5nIGlzc3Vlc1xuICBjb25zdCBsb3dlcldkID0gbm9ybWFsaXplZFdvcmtpbmdEaXIudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgbG93ZXJQYXRoID0gbm9ybWFsaXplZEZpbGVwYXRoLnRvTG93ZXJDYXNlKCk7XG5cbiAgbGV0IHJlbGF0aXZlRmlsZW5hbWU6IHN0cmluZztcbiAgaWYgKGxvd2VyUGF0aC5zdGFydHNXaXRoKGAke2xvd2VyV2R9L2ApKSB7XG4gICAgLy8gRmlsZSBpcyB1bmRlciB3b3JraW5nIGRpcmVjdG9yeSAtIG1hbnVhbGx5IGNhbGN1bGF0ZSByZWxhdGl2ZSBwYXRoXG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9IG5vcm1hbGl6ZWRGaWxlcGF0aC5zdWJzdHJpbmcoXG4gICAgICBub3JtYWxpemVkV29ya2luZ0Rpci5sZW5ndGggKyAxXG4gICAgKTtcbiAgfSBlbHNlIGlmIChsb3dlclBhdGggPT09IGxvd2VyV2QpIHtcbiAgICAvLyBGaWxlIElTIHRoZSB3b3JraW5nIGRpcmVjdG9yeSAoc2hvdWxkbid0IGhhcHBlbilcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gJy4nO1xuICB9IGVsc2Uge1xuICAgIC8vIFVzZSByZWxhdGl2ZSgpIGZvciBmaWxlcyBvdXRzaWRlIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9IHJlbGF0aXZlKHdvcmtpbmdEaXIsIGZpbGVuYW1lKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICBpZiAocmVsYXRpdmVGaWxlbmFtZS5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgY29uc3QgYWxpYXNlZFJlbGF0aXZlUGF0aCA9IGF3YWl0IHJlc29sdmVXb3JrZmxvd0FsaWFzUGF0aChcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIHdvcmtpbmdEaXJcbiAgICAgICk7XG4gICAgICBpZiAoYWxpYXNlZFJlbGF0aXZlUGF0aCkge1xuICAgICAgICByZWxhdGl2ZUZpbGVuYW1lID0gYWxpYXNlZFJlbGF0aXZlUGF0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbGF0aXZlRmlsZW5hbWUgPSByZWxhdGl2ZUZpbGVuYW1lXG4gICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSAnLi4nKVxuICAgICAgICAgIC5qb2luKCcvJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmluYWwgc2FmZXR5IGNoZWNrIC0gZW5zdXJlIHdlIG5ldmVyIHBhc3MgYW4gYWJzb2x1dGUgcGF0aCB0byBTV0NcbiAgaWYgKHJlbGF0aXZlRmlsZW5hbWUuaW5jbHVkZXMoJzonKSB8fCByZWxhdGl2ZUZpbGVuYW1lLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHJhcmVseSBoYXBwZW4sIGJ1dCB1c2UgZmlsZW5hbWUgc3BsaXQgYXMgbGFzdCByZXNvcnRcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gbm9ybWFsaXplZEZpbGVwYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgJ3Vua25vd24udHMnO1xuICB9XG5cbiAgcmV0dXJuIHJlbGF0aXZlRmlsZW5hbWU7XG59XG5cbi8vIFRoaXMgbG9hZGVyIGFwcGxpZXMgdGhlIFwidXNlIHdvcmtmbG93XCIvXCJ1c2Ugc3RlcFwiIHRyYW5zZm9ybS5cbi8vIEFsbCBmaWxlcyB1c2Ugc3RlcCBtb2RlOyB0aGUgU1dDIHBsdWdpbiBkZWNpZGVzIHBlci1mdW5jdGlvbiB3aGV0aGVyXG4vLyB0byBlbWl0IHdvcmtmbG93IG9yIHN0ZXAgYmluZGluZ3MgYmFzZWQgb24gdGhlIHNvdXJjZSdzIGRpcmVjdGl2ZXMuXG50eXBlIFdvcmtmbG93TG9hZGVyQ29udGV4dCA9IHtcbiAgcmVzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIGFzeW5jPzogKCkgPT4gKFxuICAgIGVycm9yOiBFcnJvciB8IG51bGwsXG4gICAgY29udGVudD86IHN0cmluZyxcbiAgICBzb3VyY2VNYXA/OiBhbnlcbiAgKSA9PiB2b2lkO1xuICBhZGREZXBlbmRlbmN5PzogKGRlcGVuZGVuY3k6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkQnVpbGREZXBlbmRlbmN5PzogKGRlcGVuZGVuY3k6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdvcmtmbG93TG9hZGVyKFxuICB0aGlzOiBXb3JrZmxvd0xvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nIHwgQnVmZmVyLFxuICBzb3VyY2VNYXA6IGFueVxuKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgdm9pZCB7XG4gIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5hc3luYz8uKCk7XG4gIGNvbnN0IHJ1biA9IGFzeW5jICgpOiBQcm9taXNlPHsgY29kZTogc3RyaW5nOyBtYXA6IGFueSB9PiA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnJlc291cmNlUGF0aDtcbiAgICBjb25zdCBub3JtYWxpemVkU291cmNlID0gc291cmNlLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKHRoaXMpO1xuICAgIGNvbnN0IHNvdXJjZUZvclRyYW5zZm9ybSA9IG5vcm1hbGl6ZWRTb3VyY2U7XG5cbiAgICBjb25zdCBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZSA9IGF3YWl0IGNoZWNrR2VuZXJhdGVkRmlsZShmaWxlbmFtZSk7XG4gICAgLy8gU2tpcCBnZW5lcmF0ZWQgd29ya2Zsb3cgcm91dGUgZmlsZXMgdG8gYXZvaWQgcmUtcHJvY2Vzc2luZyB0aGVtLlxuICAgIC8vIERlZmVycmVkIHJvdXRlIHN0dWJzIGFyZSBhIHNwZWNpYWwgY2FzZTogd2FpdCBmb3IgdGhlIGdlbmVyYXRlZCByb3V0ZVxuICAgIC8vIG91dHB1dCB0byBiZWNvbWUgYXZhaWxhYmxlIGJlZm9yZSByZXR1cm5pbmcuXG4gICAgaWYgKGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfTEFaWV9ESVNDT1ZFUlkgPT09ICcxJyAmJlxuICAgICAgICBpc1dvcmtmbG93Um91dGVTdHViU291cmNlKG5vcm1hbGl6ZWRTb3VyY2UpXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBlbnN1cmVEZWZlcnJlZFJvdXRlU3R1YkJ1aWxkQW5kV2FpdCgpO1xuICAgICAgICAgIGNvbnN0IHJlZnJlc2hlZFNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKGZpbGVuYW1lLCAndXRmOCcpO1xuICAgICAgICAgIGlmICghaXNXb3JrZmxvd1JvdXRlU3R1YlNvdXJjZShyZWZyZXNoZWRTb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBjb2RlOiByZWZyZXNoZWRTb3VyY2UsIG1hcDogc291cmNlTWFwIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbd29ya2Zsb3ddIEZhaWxlZCB3YWl0aW5nIGZvciBkZWZlcnJlZCByb3V0ZSBidWlsZCBmb3IgJHtmaWxlbmFtZX0sIHVzaW5nIHN0dWIgb3V0cHV0YCxcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY29kZTogbm9ybWFsaXplZFNvdXJjZSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3Qgd29ya2Zsb3cgcGF0dGVybnMgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgIGNvbnN0IHBhdHRlcm5zID0gYXdhaXQgZGV0ZWN0UGF0dGVybnMoc291cmNlRm9yVHJhbnNmb3JtKTtcbiAgICAvLyBBbHdheXMgbm90aWZ5IGRpc2NvdmVyeSB0cmFja2luZywgZXZlbiBmb3IgYGZhbHNlL2ZhbHNlYCwgc28gZmlsZXMgdGhhdFxuICAgIC8vIHByZXZpb3VzbHkgaGFkIHdvcmtmbG93L3N0ZXAgdXNhZ2UgYXJlIHJlbW92ZWQgZnJvbSB0aGUgdHJhY2tlZCBzZXRzLlxuICAgIGNvbnN0IG5leHRQYXR0ZXJuU3RhdGU6IERpc2NvdmVyZWRQYXR0ZXJuU3RhdGUgPSB7XG4gICAgICBoYXNXb3JrZmxvdzogcGF0dGVybnMuaGFzVXNlV29ya2Zsb3csXG4gICAgICBoYXNTdGVwOiBwYXR0ZXJucy5oYXNVc2VTdGVwLFxuICAgICAgaGFzU2VyZGU6IHBhdHRlcm5zLmhhc1NlcmRlLFxuICAgIH07XG4gICAgY29uc3QgeyBzaG91bGROb3RpZnkgfSA9IHVwZGF0ZURpc2NvdmVyZWRQYXR0ZXJuU3RhdGUoXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIG5leHRQYXR0ZXJuU3RhdGVcbiAgICApO1xuICAgIGlmIChcbiAgICAgIHNob3VsZE5vdGlmeVNvY2tldEZvckRpc2NvdmVyZWRQYXR0ZXJuKHNob3VsZE5vdGlmeSwgbmV4dFBhdHRlcm5TdGF0ZSlcbiAgICApIHtcbiAgICAgIGF3YWl0IG5vdGlmeVNvY2tldFNlcnZlcihcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIG5leHRQYXR0ZXJuU3RhdGUuaGFzV29ya2Zsb3csXG4gICAgICAgIG5leHRQYXR0ZXJuU3RhdGUuaGFzU3RlcCxcbiAgICAgICAgbmV4dFBhdHRlcm5TdGF0ZS5oYXNTZXJkZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBmaWxlIG5lZWRzIHRyYW5zZm9ybWF0aW9uIGJhc2VkIG9uIHBhdHRlcm5zIGFuZCBwYXRoXG4gICAgaWYgKCEoYXdhaXQgY2hlY2tTaG91bGRUcmFuc2Zvcm0oZmlsZW5hbWUsIHBhdHRlcm5zKSkpIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IG5vcm1hbGl6ZWRTb3VyY2UsIG1hcDogc291cmNlTWFwIH07XG4gICAgfVxuXG4gICAgY29uc3QgaXNUeXBlU2NyaXB0ID1cbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcudHMnKSB8fFxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy50c3gnKSB8fFxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy5tdHMnKSB8fFxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy5jdHMnKTtcblxuICAgIC8vIENhbGN1bGF0ZSByZWxhdGl2ZSBmaWxlbmFtZSBmb3IgU1dDIHBsdWdpblxuICAgIC8vIFRoZSBTV0MgcGx1Z2luIHVzZXMgZmlsZW5hbWUgdG8gZ2VuZXJhdGUgd29ya2Zsb3dJZCwgc28gaXQgbXVzdCBiZSByZWxhdGl2ZVxuICAgIGNvbnN0IHJlbGF0aXZlRmlsZW5hbWUgPSBhd2FpdCBnZXRSZWxhdGl2ZUZpbGVuYW1lRm9yU3djKFxuICAgICAgZmlsZW5hbWUsXG4gICAgICB3b3JraW5nRGlyXG4gICAgKTtcblxuICAgIC8vIEdldCBkZWNvcmF0b3Igb3B0aW9ucyBmcm9tIHRzY29uZmlnIChjYWNoZWQgcGVyIHdvcmtpbmcgZGlyZWN0b3J5KVxuICAgIGNvbnN0IHsgb3B0aW9uczogZGVjb3JhdG9yT3B0aW9ucywgY29uZmlnUGF0aCB9ID1cbiAgICAgIGF3YWl0IGdldERlY29yYXRvck9wdGlvbnMod29ya2luZ0Rpcik7XG4gICAgaWYgKGNvbmZpZ1BhdGgpIHtcbiAgICAgIHJlZ2lzdGVyRmlsZURlcGVuZGVuY3kodGhpcywgY29uZmlnUGF0aCk7XG4gICAgfVxuXG4gICAgLy8gUmVzb2x2ZSBtb2R1bGUgc3BlY2lmaWVyIGZvciBwYWNrYWdlcyAobm9kZV9tb2R1bGVzIG9yIHdvcmtzcGFjZSBwYWNrYWdlcylcbiAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSBhd2FpdCBnZXRNb2R1bGVTcGVjaWZpZXIoZmlsZW5hbWUsIHdvcmtpbmdEaXIpO1xuICAgIGNvbnN0IG1vZGUgPSAnc3RlcCc7XG5cbiAgICAvLyBUcmFuc2Zvcm0gd2l0aCBTV0NcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm0oc291cmNlRm9yVHJhbnNmb3JtLCB7XG4gICAgICBmaWxlbmFtZTogcmVsYXRpdmVGaWxlbmFtZSxcbiAgICAgIGpzYzoge1xuICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAuLi4oaXNUeXBlU2NyaXB0XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgICAgICAgICB0c3g6IGZpbGVuYW1lLmVuZHNXaXRoKCcudHN4JyksXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogZGVjb3JhdG9yT3B0aW9ucy5kZWNvcmF0b3JzLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBzeW50YXg6ICdlY21hc2NyaXB0JyxcbiAgICAgICAgICAgICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKCcuanN4JyksXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogZGVjb3JhdG9yT3B0aW9ucy5kZWNvcmF0b3JzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgICAgZXhwZXJpbWVudGFsOiB7XG4gICAgICAgICAgcGx1Z2luczogW1tzd2NQbHVnaW5QYXRoLCB7IG1vZGUsIG1vZHVsZVNwZWNpZmllciB9XV0sXG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgICBydW50aW1lOiAncHJlc2VydmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGVnYWN5RGVjb3JhdG9yOiBkZWNvcmF0b3JPcHRpb25zLmxlZ2FjeURlY29yYXRvcixcbiAgICAgICAgICBkZWNvcmF0b3JNZXRhZGF0YTogZGVjb3JhdG9yT3B0aW9ucy5kZWNvcmF0b3JNZXRhZGF0YSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBtaW5pZnk6IGZhbHNlLFxuICAgICAgaW5wdXRTb3VyY2VNYXA6IHNvdXJjZU1hcCxcbiAgICAgIHNvdXJjZU1hcHM6IHRydWUsXG4gICAgICBpbmxpbmVTb3VyY2VzQ29udGVudDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGxldCB0cmFuc2Zvcm1lZE1hcCA9IHNvdXJjZU1hcDtcbiAgICBpZiAodHlwZW9mIHJlc3VsdC5tYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0cmFuc2Zvcm1lZE1hcCA9IEpTT04ucGFyc2UocmVzdWx0Lm1hcCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdHJhbnNmb3JtZWRNYXAgPSByZXN1bHQubWFwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1hcCkge1xuICAgICAgdHJhbnNmb3JtZWRNYXAgPSByZXN1bHQubWFwO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdC5jb2RlLCBtYXA6IHRyYW5zZm9ybWVkTWFwIH07XG4gIH07XG5cbiAgaWYgKCFjYWxsYmFjaykge1xuICAgIHJldHVybiBydW4oKS50aGVuKChyZXN1bHQpID0+IHJlc3VsdC5jb2RlKTtcbiAgfVxuXG4gIHZvaWQgcnVuKClcbiAgICAudGhlbigocmVzdWx0KSA9PiBjYWxsYmFjayhudWxsLCByZXN1bHQuY29kZSwgcmVzdWx0Lm1hcCkpXG4gICAgLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgY2FsbGJhY2soZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTtcbiAgICB9KTtcbn1cbiJdfQ==
package/dist/runtime.js CHANGED
@@ -18,4 +18,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  // require @workflow/core be a dependency as well as
19
19
  // @workflow/next
20
20
  __exportStar(require("@workflow/core/dist/runtime"), exports);
21
- //# sourceMappingURL=runtime.js.map
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBaUQ7QUFDakQsb0RBQW9EO0FBQ3BELGlCQUFpQjtBQUNqQiw4REFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZS1leHBvcnQgcnVudGltZSBhcyBzdHViIGZvciByZXNvbHZpbmcgdG8gbm90XG4vLyByZXF1aXJlIEB3b3JrZmxvdy9jb3JlIGJlIGEgZGVwZW5kZW5jeSBhcyB3ZWxsIGFzXG4vLyBAd29ya2Zsb3cvbmV4dFxuZXhwb3J0ICogZnJvbSAnQHdvcmtmbG93L2NvcmUvZGlzdC9ydW50aW1lJztcbiJdfQ==
@@ -28,6 +28,26 @@ export interface SocketIO {
28
28
  emit(event: 'build-complete'): void;
29
29
  getAuthToken(): string;
30
30
  }
31
+ /**
32
+ * Filename for the socket-info file.
33
+ */
34
+ export declare const SOCKET_INFO_FILENAME = "workflow-socket.json";
35
+ /**
36
+ * Previous filesystem location for the socket-info file. This file lives
37
+ * inside `.next/cache/`, which Vercel and Turborepo preserve across builds —
38
+ * a stale file from a prior build would cause the loader to attempt to
39
+ * connect to a dead port (ECONNREFUSED). The current location is a sibling
40
+ * of `cache/` so it isn't preserved.
41
+ *
42
+ * Exported so the builders can unlink the legacy path at boot, cleaning up
43
+ * any leftover file written by older versions of the SDK.
44
+ */
45
+ export declare const LEGACY_SOCKET_INFO_RELATIVE_PATH: string;
46
+ /**
47
+ * Remove any stale socket-info files at boot.
48
+ * @param distDir absolute path to the project's `.next` directory.
49
+ */
50
+ export declare function cleanupStaleSocketInfoFiles(distDir: string): Promise<void>;
31
51
  /**
32
52
  * Serialize a message with authentication preamble
33
53
  */
@@ -1 +1 @@
1
- {"version":3,"file":"socket-server.d.ts","sourceRoot":"","sources":["../src/socket-server.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,CAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,KACd,IAAI,CAAC;IACV,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,YAAY,IAAI,MAAM,CAAC;CACxB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAoCtB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,CAoGnB"}
1
+ {"version":3,"file":"socket-server.d.ts","sourceRoot":"","sources":["../src/socket-server.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,CAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,KACd,IAAI,CAAC;IACV,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,YAAY,IAAI,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D;;;;;;;;;GASG;AACH,eAAO,MAAM,gCAAgC,QAG5C,CAAC;AAMF;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAoCtB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,CAoGnB"}
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LEGACY_SOCKET_INFO_RELATIVE_PATH = exports.SOCKET_INFO_FILENAME = void 0;
4
+ exports.cleanupStaleSocketInfoFiles = cleanupStaleSocketInfoFiles;
3
5
  exports.serializeMessage = serializeMessage;
4
6
  exports.parseMessage = parseMessage;
5
7
  exports.createSocketServer = createSocketServer;
@@ -19,8 +21,33 @@ const MESSAGE_PREAMBLE = 'WF:';
19
21
  function generateAuthToken() {
20
22
  return (0, node_crypto_1.randomBytes)(16).toString('hex');
21
23
  }
24
+ /**
25
+ * Filename for the socket-info file.
26
+ */
27
+ exports.SOCKET_INFO_FILENAME = 'workflow-socket.json';
28
+ /**
29
+ * Previous filesystem location for the socket-info file. This file lives
30
+ * inside `.next/cache/`, which Vercel and Turborepo preserve across builds —
31
+ * a stale file from a prior build would cause the loader to attempt to
32
+ * connect to a dead port (ECONNREFUSED). The current location is a sibling
33
+ * of `cache/` so it isn't preserved.
34
+ *
35
+ * Exported so the builders can unlink the legacy path at boot, cleaning up
36
+ * any leftover file written by older versions of the SDK.
37
+ */
38
+ exports.LEGACY_SOCKET_INFO_RELATIVE_PATH = (0, node_path_1.join)('cache', exports.SOCKET_INFO_FILENAME);
22
39
  function getDefaultSocketInfoFilePath() {
23
- return (0, node_path_1.join)(process.cwd(), '.next', 'cache', 'workflow-socket.json');
40
+ return (0, node_path_1.join)(process.cwd(), '.next', exports.SOCKET_INFO_FILENAME);
41
+ }
42
+ /**
43
+ * Remove any stale socket-info files at boot.
44
+ * @param distDir absolute path to the project's `.next` directory.
45
+ */
46
+ async function cleanupStaleSocketInfoFiles(distDir) {
47
+ await Promise.all([
48
+ (0, promises_1.rm)((0, node_path_1.join)(distDir, exports.SOCKET_INFO_FILENAME), { force: true }),
49
+ (0, promises_1.rm)((0, node_path_1.join)(distDir, exports.LEGACY_SOCKET_INFO_RELATIVE_PATH), { force: true }),
50
+ ]);
24
51
  }
25
52
  /**
26
53
  * Serialize a message with authentication preamble
@@ -151,4 +178,4 @@ async function createSocketServer(config) {
151
178
  getAuthToken: () => authToken,
152
179
  };
153
180
  }
154
- //# sourceMappingURL=socket-server.js.map
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LXNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zb2NrZXQtc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW9GQSxrRUFPQztBQUtELDRDQUtDO0FBTUQsb0NBdUNDO0FBU0QsZ0RBc0dDO0FBalFELDZDQUEwQztBQUMxQywrQ0FBd0Q7QUFDeEQsdUNBQWtFO0FBQ2xFLHlDQUEwQztBQUUxQzs7O0dBR0c7QUFDSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUUvQjs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQjtJQUN4QixPQUFPLElBQUEseUJBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQXVDRDs7R0FFRztBQUNVLFFBQUEsb0JBQW9CLEdBQUcsc0JBQXNCLENBQUM7QUFFM0Q7Ozs7Ozs7OztHQVNHO0FBQ1UsUUFBQSxnQ0FBZ0MsR0FBRyxJQUFBLGdCQUFJLEVBQ2xELE9BQU8sRUFDUCw0QkFBb0IsQ0FDckIsQ0FBQztBQUVGLFNBQVMsNEJBQTRCO0lBQ25DLE9BQU8sSUFBQSxnQkFBSSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsNEJBQW9CLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxPQUFlO0lBRWYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2hCLElBQUEsYUFBRSxFQUFDLElBQUEsZ0JBQUksRUFBQyxPQUFPLEVBQUUsNEJBQW9CLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN4RCxJQUFBLGFBQUUsRUFBQyxJQUFBLGdCQUFJLEVBQUMsT0FBTyxFQUFFLHdDQUFnQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDckUsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztB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LENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2hCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDTCxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxJQUFJLEVBQUUsQ0FBQyxNQUF3QixFQUFFLEVBQUU7WUFDakMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUN0QixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3hFLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7UUFDRCxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUztLQUM5QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgbWtkaXIsIHJtLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGNyZWF0ZVNlcnZlciwgdHlwZSBTZXJ2ZXIsIHR5cGUgU29ja2V0IH0gZnJvbSAnbm9kZTpuZXQnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbi8qKlxuICogTWFnaWMgcHJlYW1ibGUgdGhhdCBtdXN0IHByZWZpeCBhbGwgbWVzc2FnZXMgdG8gYXV0aGVudGljYXRlIHRoZW0gYXMgd29ya2Zsb3cgbWVzc2FnZXMuXG4gKiBUaGlzIHByZXZlbnRzIGFjY2lkZW50YWwgcHJvY2Vzc2luZyBvZiBtZXNzYWdlcyBmcm9tIHBvcnQgc2Nhbm5lcnMgb3Igb3RoZXIgbG9jYWwgcHJvY2Vzc2VzLlxuICovXG5jb25zdCBNRVNTQUdFX1BSRUFNQkxFID0gJ1dGOic7XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gYXV0aGVudGljYXRpb24gdG9rZW4gZm9yIHRoaXMgc2VydmVyIHNlc3Npb24uXG4gKiBDbGllbnRzIG11c3QgaW5jbHVkZSB0aGlzIHRva2VuIGluIGFsbCBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVBdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnaGV4Jyk7XG59XG5cbi8qKlxuICogTWVzc2FnZSB0eXBlcyB0aGF0IGNhbiBiZSBzZW50IGJldHdlZW4gbG9hZGVyIGFuZCBidWlsZGVyXG4gKi9cbmV4cG9ydCB0eXBlIFNvY2tldE1lc3NhZ2UgPVxuICB8IHtcbiAgICAgIHR5cGU6ICdmaWxlLWRpc2NvdmVyZWQnO1xuICAgICAgZmlsZVBhdGg6IHN0cmluZztcbiAgICAgIGhhc1dvcmtmbG93OiBib29sZWFuO1xuICAgICAgaGFzU3RlcDogYm9vbGVhbjtcbiAgICAgIGhhc1NlcmRlOiBib29sZWFuO1xuICAgIH1cbiAgfCB7IHR5cGU6ICd0cmlnZ2VyLWJ1aWxkJyB9XG4gIHwgeyB0eXBlOiAnYnVpbGQtY29tcGxldGUnIH07XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHNvY2tldCBzZXJ2ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb2NrZXRTZXJ2ZXJDb25maWcge1xuICBpc0RldlNlcnZlcjogYm9vbGVhbjtcbiAgb25GaWxlRGlzY292ZXJlZDogKFxuICAgIGZpbGVQYXRoOiBzdHJpbmcsXG4gICAgaGFzV29ya2Zsb3c6IGJvb2xlYW4sXG4gICAgaGFzU3RlcDogYm9vbGVhbixcbiAgICBoYXNTZXJkZTogYm9vbGVhblxuICApID0+IHZvaWQ7XG4gIG9uVHJpZ2dlckJ1aWxkOiAoKSA9PiB2b2lkO1xuICBzb2NrZXRJbmZvRmlsZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciB0aGUgc29ja2V0IElPIGluc3RhbmNlIHJldHVybmVkIGJ5IGNyZWF0ZVNvY2tldFNlcnZlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvY2tldElPIHtcbiAgZW1pdChldmVudDogJ2J1aWxkLWNvbXBsZXRlJyk6IHZvaWQ7XG4gIGdldEF1dGhUb2tlbigpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsZW5hbWUgZm9yIHRoZSBzb2NrZXQtaW5mbyBmaWxlLlxuICovXG5leHBvcnQgY29uc3QgU09DS0VUX0lORk9fRklMRU5BTUUgPSAnd29ya2Zsb3ctc29ja2V0Lmpzb24nO1xuXG4vKipcbiAqIFByZXZpb3VzIGZpbGVzeXN0ZW0gbG9jYXRpb24gZm9yIHRoZSBzb2NrZXQtaW5mbyBmaWxlLiBUaGlzIGZpbGUgbGl2ZXNcbiAqIGluc2lkZSBgLm5leHQvY2FjaGUvYCwgd2hpY2ggVmVyY2VsIGFuZCBUdXJib3JlcG8gcHJlc2VydmUgYWNyb3NzIGJ1aWxkcyDigJRcbiAqIGEgc3RhbGUgZmlsZSBmcm9tIGEgcHJpb3IgYnVpbGQgd291bGQgY2F1c2UgdGhlIGxvYWRlciB0byBhdHRlbXB0IHRvXG4gKiBjb25uZWN0IHRvIGEgZGVhZCBwb3J0IChFQ09OTlJFRlVTRUQpLiBUaGUgY3VycmVudCBsb2NhdGlvbiBpcyBhIHNpYmxpbmdcbiAqIG9mIGBjYWNoZS9gIHNvIGl0IGlzbid0IHByZXNlcnZlZC5cbiAqXG4gKiBFeHBvcnRlZCBzbyB0aGUgYnVpbGRlcnMgY2FuIHVubGluayB0aGUgbGVnYWN5IHBhdGggYXQgYm9vdCwgY2xlYW5pbmcgdXBcbiAqIGFueSBsZWZ0b3ZlciBmaWxlIHdyaXR0ZW4gYnkgb2xkZXIgdmVyc2lvbnMgb2YgdGhlIFNESy5cbiAqL1xuZXhwb3J0IGNvbnN0IExFR0FDWV9TT0NLRVRfSU5GT19SRUxBVElWRV9QQVRIID0gam9pbihcbiAgJ2NhY2hlJyxcbiAgU09DS0VUX0lORk9fRklMRU5BTUVcbik7XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRTb2NrZXRJbmZvRmlsZVBhdGgoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5uZXh0JywgU09DS0VUX0lORk9fRklMRU5BTUUpO1xufVxuXG4vKipcbiAqIFJlbW92ZSBhbnkgc3RhbGUgc29ja2V0LWluZm8gZmlsZXMgYXQgYm9vdC5cbiAqIEBwYXJhbSBkaXN0RGlyIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3QncyBgLm5leHRgIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFudXBTdGFsZVNvY2tldEluZm9GaWxlcyhcbiAgZGlzdERpcjogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHJtKGpvaW4oZGlzdERpciwgU09DS0VUX0lORk9fRklMRU5BTUUpLCB7IGZvcmNlOiB0cnVlIH0pLFxuICAgIHJtKGpvaW4oZGlzdERpciwgTEVHQUNZX1NPQ0tFVF9JTkZPX1JFTEFUSVZFX1BBVEgpLCB7IGZvcmNlOiB0cnVlIH0pLFxuICBdKTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBtZXNzYWdlIHdpdGggYXV0aGVudGljYXRpb24gcHJlYW1ibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZU1lc3NhZ2UoXG4gIG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UsXG4gIGF1dGhUb2tlbjogc3RyaW5nXG4pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7TUVTU0FHRV9QUkVBTUJMRX0ke2F1dGhUb2tlbn06JHtKU09OLnN0cmluZ2lmeShtZXNzYWdlKX1cXG5gO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuZCBhdXRoZW50aWNhdGUgYSBtZXNzYWdlIGZyb20gdGhlIHNvY2tldFxuICogUmV0dXJucyB0aGUgcGFyc2VkIG1lc3NhZ2UgaWYgdmFsaWQsIG51bGwgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1lc3NhZ2UoXG4gIGxpbmU6IHN0cmluZyxcbiAgYXV0aFRva2VuOiBzdHJpbmdcbik6IFNvY2tldE1lc3NhZ2UgfCBudWxsIHtcbiAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpO1xuICBpZiAoIXRyaW1tZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBwcmVhbWJsZVxuICBpZiAoIXRyaW1tZWQuc3RhcnRzV2l0aChNRVNTQUdFX1BSRUFNQkxFKSkge1xuICAgIGNvbnNvbGUud2FybignUmVjZWl2ZWQgbWVzc2FnZSB3aXRob3V0IHZhbGlkIHByZWFtYmxlLCBpZ25vcmluZycpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRXh0cmFjdCBhdXRoIHRva2VuIGFuZCBwYXlsb2FkXG4gIGNvbnN0IHdpdGhvdXRQcmVhbWJsZSA9IHRyaW1tZWQuc2xpY2UoTUVTU0FHRV9QUkVBTUJMRS5sZW5ndGgpO1xuICBjb25zdCBjb2xvbkluZGV4ID0gd2l0aG91dFByZWFtYmxlLmluZGV4T2YoJzonKTtcbiAgaWYgKGNvbG9uSW5kZXggPT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKCdSZWNlaXZlZCBtZXNzYWdlIHdpdGhvdXQgYXV0aCB0b2tlbiBzZXBhcmF0b3IsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlVG9rZW4gPSB3aXRob3V0UHJlYW1ibGUuc2xpY2UoMCwgY29sb25JbmRleCk7XG4gIGNvbnN0IHBheWxvYWQgPSB3aXRob3V0UHJlYW1ibGUuc2xpY2UoY29sb25JbmRleCArIDEpO1xuXG4gIC8vIFZlcmlmeSBhdXRoIHRva2VuXG4gIGlmIChtZXNzYWdlVG9rZW4gIT09IGF1dGhUb2tlbikge1xuICAgIGNvbnNvbGUud2FybignUmVjZWl2ZWQgbWVzc2FnZSB3aXRoIGludmFsaWQgYXV0aCB0b2tlbiwgaWdub3JpbmcnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFBhcnNlIEpTT04gcGF5bG9hZFxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHBheWxvYWQpIGFzIFNvY2tldE1lc3NhZ2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHNvY2tldCBtZXNzYWdlIEpTT046JywgZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgVENQIHNvY2tldCBzZXJ2ZXIgZm9yIGxvYWRlcjwtPmJ1aWxkZXIgY29tbXVuaWNhdGlvbi5cbiAqIFJldHVybnMgYSBTb2NrZXRJTyBpbnRlcmZhY2UgZm9yIGJyb2FkY2FzdGluZyBtZXNzYWdlcyBhbmQgdGhlIGF1dGggdG9rZW4uXG4gKlxuICogU0VDVVJJVFk6IFNlcnZlciBsaXN0ZW5zIG9uIDEyNy4wLjAuMSAobG9jYWxob3N0IG9ubHkpIGFuZCB1c2VzXG4gKiBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBvZiB1bmF1dGhvcml6ZWQgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTb2NrZXRTZXJ2ZXIoXG4gIGNvbmZpZzogU29ja2V0U2VydmVyQ29uZmlnXG4pOiBQcm9taXNlPFNvY2tldElPPiB7XG4gIGNvbnN0IGF1dGhUb2tlbiA9IGdlbmVyYXRlQXV0aFRva2VuKCk7XG4gIGNvbnN0IGNsaWVudHMgPSBuZXcgU2V0PFNvY2tldD4oKTtcbiAgbGV0IGJ1aWxkVHJpZ2dlcmVkID0gZmFsc2U7XG5cbiAgY29uc3Qgc2VydmVyOiBTZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKHNvY2tldDogU29ja2V0KSA9PiB7XG4gICAgc29ja2V0LnNldE5vRGVsYXkodHJ1ZSk7XG4gICAgY2xpZW50cy5hZGQoc29ja2V0KTtcblxuICAgIC8vIFNlbmQgYnVpbGQtY29tcGxldGUgaWYgYnVpbGQgYWxyZWFkeSBmaW5pc2hlZCAocHJvZHVjdGlvbiBtb2RlKVxuICAgIGlmIChidWlsZFRyaWdnZXJlZCAmJiAhY29uZmlnLmlzRGV2U2VydmVyKSB7XG4gICAgICBzb2NrZXQud3JpdGUoc2VyaWFsaXplTWVzc2FnZSh7IHR5cGU6ICdidWlsZC1jb21wbGV0ZScgfSwgYXV0aFRva2VuKSk7XG4gICAgfVxuXG4gICAgbGV0IGJ1ZmZlciA9ICcnO1xuXG4gICAgc29ja2V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgLy8gUHJvY2VzcyBjb21wbGV0ZSBtZXNzYWdlcyAobmV3bGluZS1kZWxpbWl0ZWQpXG4gICAgICBsZXQgbmV3bGluZUluZGV4ID0gYnVmZmVyLmluZGV4T2YoJ1xcbicpO1xuICAgICAgd2hpbGUgKG5ld2xpbmVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGJ1ZmZlci5zbGljZSgwLCBuZXdsaW5lSW5kZXgpO1xuICAgICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UobmV3bGluZUluZGV4ICsgMSk7XG4gICAgICAgIG5ld2xpbmVJbmRleCA9IGJ1ZmZlci5pbmRleE9mKCdcXG4nKTtcblxuICAgICAgICBjb25zdCBtZXNzYWdlID0gcGFyc2VNZXNzYWdlKGxpbmUsIGF1dGhUb2tlbik7XG4gICAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2ZpbGUtZGlzY292ZXJlZCcpIHtcbiAgICAgICAgICBjb25maWcub25GaWxlRGlzY292ZXJlZChcbiAgICAgICAgICAgIG1lc3NhZ2UuZmlsZVBhdGgsXG4gICAgICAgICAgICBtZXNzYWdlLmhhc1dvcmtmbG93LFxuICAgICAgICAgICAgbWVzc2FnZS5oYXNTdGVwLFxuICAgICAgICAgICAgbWVzc2FnZS5oYXNTZXJkZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS50eXBlID09PSAndHJpZ2dlci1idWlsZCcpIHtcbiAgICAgICAgICBjb25maWcub25UcmlnZ2VyQnVpbGQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc29ja2V0Lm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICBjbGllbnRzLmRlbGV0ZShzb2NrZXQpO1xuICAgIH0pO1xuXG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdTb2NrZXQgZXJyb3I6JywgZXJyKTtcbiAgICAgIGNsaWVudHMuZGVsZXRlKHNvY2tldCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExpc3RlbiBvbiByYW5kb20gYXZhaWxhYmxlIHBvcnQgKGxvY2FsaG9zdCBvbmx5KVxuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2VydmVyLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKDAsICcxMjcuMC4wLjEnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gc2VydmVyLmFkZHJlc3MoKTtcbiAgICAgIGlmIChhZGRyZXNzICYmIHR5cGVvZiBhZGRyZXNzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBzb2NrZXRJbmZvRmlsZVBhdGggPVxuICAgICAgICAgIGNvbmZpZy5zb2NrZXRJbmZvRmlsZVBhdGggfHwgZ2V0RGVmYXVsdFNvY2tldEluZm9GaWxlUGF0aCgpO1xuICAgICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoc29ja2V0SW5mb0ZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICAgICAgICAgIHNvY2tldEluZm9GaWxlUGF0aCxcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcG9ydDogYWRkcmVzcy5wb3J0LFxuICAgICAgICAgICAgICAgICAgYXV0aFRva2VuLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19TT0NLRVRfSU5GT19QQVRIID0gc29ja2V0SW5mb0ZpbGVQYXRoO1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09DS0VUX1BPUlQgPSBTdHJpbmcoYWRkcmVzcy5wb3J0KTtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NPQ0tFVF9BVVRIID0gYXV0aFRva2VuO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIG9idGFpbiB3b3JrZmxvdyBzb2NrZXQgc2VydmVyIGFkZHJlc3MnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZW1pdDogKF9ldmVudDogJ2J1aWxkLWNvbXBsZXRlJykgPT4ge1xuICAgICAgYnVpbGRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHNlcmlhbGl6ZU1lc3NhZ2UoeyB0eXBlOiAnYnVpbGQtY29tcGxldGUnIH0sIGF1dGhUb2tlbik7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiBjbGllbnRzKSB7XG4gICAgICAgIGNsaWVudC53cml0ZShtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldEF1dGhUb2tlbjogKCkgPT4gYXV0aFRva2VuLFxuICB9O1xufVxuIl19
@@ -27,6 +27,15 @@ const workflowConfig = {}
27
27
  export default withWorkflow(nextConfig, workflowConfig); // [!code highlight]
28
28
  ```
29
29
 
30
+ <Callout type="warn">
31
+ If a package in `serverExternalPackages` contains workflow code (`"use step"`,
32
+ `"use workflow"`, or serialization classes), `withWorkflow()` automatically
33
+ removes it from `serverExternalPackages` for the current build and prints a
34
+ warning. Workflow still compiles the package so its directives are transformed.
35
+ Remove that package from `serverExternalPackages` in your
36
+ `next.config` to silence the warning.
37
+ </Callout>
38
+
30
39
  ### Monorepos and Workspace Imports
31
40
 
32
41
  By default, Next.js detects the correct workspace root automatically. If your Next.js app lives in a subdirectory such as `apps/web` and workspace resolution is not working correctly, you can set `outputFileTracingRoot` as a workaround:
@@ -59,18 +68,40 @@ const nextConfig: NextConfig = {};
59
68
 
60
69
  export default withWorkflow(nextConfig, {
61
70
  workflows: {
62
- lazyDiscovery: true,
71
+ lazyDiscovery: false,
63
72
  local: {
64
73
  port: 4000,
65
74
  },
75
+ sourcemap: false,
66
76
  },
67
77
  });
68
78
  ```
69
79
 
70
80
  | Option | Type | Default | Description |
71
81
  | --- | --- | --- | --- |
72
- | `workflows.lazyDiscovery` | `boolean` | `false` | When `true`, defers workflow discovery until files are requested instead of scanning eagerly at startup. Useful for large projects where startup time matters. |
82
+ | `workflows.lazyDiscovery` | `boolean` | `true` | Defers workflow discovery until files are requested instead of scanning eagerly at startup. Set to `false` to force eager discovery (scanning the project up front). Requires a Next.js version that supports deferred entries; older versions fall back to eager discovery automatically. |
73
83
  | `workflows.local.port` | `number` | — | Overrides the `PORT` environment variable for local development. Has no effect when deployed to Vercel. |
84
+ | `workflows.sourcemap` | `boolean \| 'inline' \| 'linked' \| 'external' \| 'both'` | `'inline'` (dev) / `false` (prod) | Controls source maps on generated workflow bundles. See [Source maps](#source-maps) below. |
85
+
86
+ ### Source maps
87
+
88
+ The step bundle and intermediate workflow bundle default to `'inline'` source maps **in development** — so stack traces from step errors and workflow VM errors point at your source files — and to **`false` in production**, so function bundles stay small. The `sourcemap` option lets you change that:
89
+
90
+ | Value | Behavior |
91
+ | --- | --- |
92
+ | `true` / `'inline'` | Base64-encode the source map and append it to the bundle (default in development). |
93
+ | `'linked'` | Write a separate `.map` file and add a `sourceMappingURL` comment. |
94
+ | `'external'` | Write a separate `.map` file without the comment. |
95
+ | `'both'` | Emit both inline and external source maps. |
96
+ | `false` | Omit source maps entirely. |
97
+
98
+ In production, source maps are already off by default. Setting `sourcemap: false` explicitly also turns them off in development, and it drops the inline source map from every bundle while skipping the source-map-support runtime shim on the Vercel step function (the same behavior production gets by default) — the main lever for staying under the Vercel 250MB function size limit. The tradeoff is that workflow VM stack traces will reference generated code (e.g. `evalmachine.<anonymous>`) rather than your source files.
99
+
100
+ <Callout type="info">
101
+ Setting `sourcemap` explicitly affects **all** generated bundles (steps, workflows, webhook). The legacy `WORKFLOW_EMIT_SOURCEMAPS_FOR_DEBUGGING=1` environment variable is narrower — it only toggles source maps on the final workflow wrapper and webhook bundle (which default to off). It continues to work, but new code should use the `sourcemap` option or the `WORKFLOW_SOURCEMAP` environment variable instead.
102
+ </Callout>
103
+
104
+ The option can also be set via the `WORKFLOW_SOURCEMAP` environment variable, which accepts the same values plus `'0'` / `'1'` as aliases for `false` / `true`. Precedence is: explicit config > `WORKFLOW_SOURCEMAP` > the environment-aware default (`'inline'` in development, `false` in production). Development is detected from `next dev` / `NODE_ENV=development`, so the config option and the env var both let you force either behavior in either environment.
74
105
 
75
106
  <Callout type="info">
76
107
  The `workflows.local` options only affect local development. When deployed to Vercel, the runtime ignores `local` settings and uses the Vercel world automatically.
@@ -78,6 +109,7 @@ The `workflows.local` options only affect local development. When deployed to Ve
78
109
 
79
110
  ## Exporting a Function
80
111
 
112
+
81
113
  If you are exporting a function in your `next.config` you will need to ensure you call the function returned from `withWorkflow`.
82
114
 
83
115
  ```typescript title="next.config.ts" lineNumbers
package/docs/next.mdx CHANGED
@@ -75,9 +75,9 @@ To enable helpful hints in your IDE, setup the workflow plugin in `tsconfig.json
75
75
  </Accordion>
76
76
 
77
77
  <Accordion type="single" collapsible>
78
- <AccordionItem value="typescript-intellisense" className="[&_h3]:my-0">
78
+ <AccordionItem value="configure-proxy-handler" className="[&_h3]:my-0">
79
79
  <AccordionTrigger className="text-sm">
80
- ### Configure Proxy Handler (if applicable)
80
+ <h3 id="configure-proxy-handler">Configure Proxy Handler (if applicable)</h3>
81
81
  </AccordionTrigger>
82
82
  <AccordionContent className="[&_p]:my-2">
83
83
 
@@ -85,7 +85,9 @@ If your Next.js app has a [proxy handler](https://nextjs.org/docs/app/api-refere
85
85
  (formerly known as "middleware"), you'll need to update the matcher pattern to exclude Workflow's
86
86
  internal paths to prevent the proxy handler from running on them.
87
87
 
88
- Add `.well-known/workflow/*` to your middleware's exclusion list:
88
+ If you see `[local world] Queue operation failed` with `Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer`, your proxy matcher is still intercepting Workflow's internal `POST /.well-known/workflow/v1/flow` request. This is especially easy to miss in Next.js 16, where `proxy.ts` replaced `middleware.ts`.
89
+
90
+ Add `.well-known/workflow/*` to your matcher exclusion list:
89
91
 
90
92
  ```typescript title="proxy.ts" lineNumbers
91
93
  import { NextResponse } from "next/server";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/next",
3
- "version": "5.0.0-beta.2",
3
+ "version": "5.0.0-beta.20",
4
4
  "description": "Next.js integration for Workflow SDK",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
@@ -27,12 +27,11 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@swc/core": "1.15.3",
30
- "enhanced-resolve": "5.19.0",
31
30
  "semver": "7.7.4",
32
31
  "watchpack": "2.5.1",
33
- "@workflow/builders": "5.0.0-beta.2",
34
- "@workflow/core": "5.0.0-beta.2",
35
- "@workflow/swc-plugin": "5.0.0-beta.2"
32
+ "@workflow/builders": "5.0.0-beta.20",
33
+ "@workflow/core": "5.0.0-beta.20",
34
+ "@workflow/swc-plugin": "5.0.0-beta.5"
36
35
  },
37
36
  "devDependencies": {
38
37
  "@types/node": "22.19.0",