@dbx-tools/appkit-mastra 0.9.153 → 0.9.157

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.
Files changed (76) hide show
  1. package/README.md +4 -3
  2. package/index.ts +32 -24
  3. package/lib/index.d.ts +32 -24
  4. package/lib/index.js +32 -23
  5. package/lib/src/agents.d.ts +5 -6
  6. package/lib/src/agents.js +12 -15
  7. package/lib/src/chart.js +33 -33
  8. package/lib/src/chat.js +10 -13
  9. package/lib/src/config.d.ts +12 -13
  10. package/lib/src/config.js +4 -4
  11. package/lib/src/evaluation.js +7 -9
  12. package/lib/src/feedback-mode.d.ts +1 -1
  13. package/lib/src/feedback-mode.js +1 -1
  14. package/lib/src/filesystems.js +6 -6
  15. package/lib/src/follow-up-suggestions.js +10 -10
  16. package/lib/src/genie-chat.js +27 -29
  17. package/lib/src/genie.d.ts +2 -2
  18. package/lib/src/genie.js +29 -29
  19. package/lib/src/identity.d.ts +3 -30
  20. package/lib/src/identity.js +2 -27
  21. package/lib/src/memory.d.ts +1 -1
  22. package/lib/src/memory.js +24 -6
  23. package/lib/src/mlflow.d.ts +4 -4
  24. package/lib/src/mlflow.js +15 -18
  25. package/lib/src/model.d.ts +3 -3
  26. package/lib/src/model.js +6 -6
  27. package/lib/src/monty-sandbox.js +8 -8
  28. package/lib/src/observability.d.ts +6 -5
  29. package/lib/src/observability.js +8 -6
  30. package/lib/src/plugin.d.ts +1 -1
  31. package/lib/src/plugin.js +49 -51
  32. package/lib/src/remote-skills.d.ts +3 -4
  33. package/lib/src/remote-skills.js +46 -46
  34. package/lib/src/rest.d.ts +2 -2
  35. package/lib/src/rest.js +3 -3
  36. package/lib/src/server.js +17 -20
  37. package/lib/src/serving.js +10 -11
  38. package/lib/src/statement.js +7 -7
  39. package/lib/src/storage-schema.js +4 -4
  40. package/lib/src/summarize.js +5 -5
  41. package/lib/src/telemetry.d.ts +0 -6
  42. package/lib/src/telemetry.js +34 -41
  43. package/lib/src/validation.js +3 -4
  44. package/lib/src/workspaces.d.ts +2 -2
  45. package/lib/src/workspaces.js +34 -36
  46. package/lib/src/writer.d.ts +2 -2
  47. package/lib/src/writer.js +3 -3
  48. package/package.json +17 -305
  49. package/src/agents.ts +27 -21
  50. package/src/chart.ts +43 -37
  51. package/src/chat.ts +10 -12
  52. package/src/config.ts +14 -15
  53. package/src/evaluation.ts +6 -8
  54. package/src/feedback-mode.ts +1 -1
  55. package/src/filesystems.ts +5 -5
  56. package/src/follow-up-suggestions.ts +9 -9
  57. package/src/genie-chat.ts +32 -31
  58. package/src/genie.ts +29 -29
  59. package/src/identity.ts +3 -38
  60. package/src/memory.ts +24 -6
  61. package/src/mlflow.ts +21 -21
  62. package/src/model.ts +7 -7
  63. package/src/monty-sandbox.ts +7 -7
  64. package/src/observability.ts +8 -6
  65. package/src/plugin.ts +78 -65
  66. package/src/remote-skills.ts +63 -55
  67. package/src/rest.ts +4 -4
  68. package/src/server.ts +32 -20
  69. package/src/serving.ts +14 -11
  70. package/src/statement.ts +10 -6
  71. package/src/storage-schema.ts +3 -3
  72. package/src/summarize.ts +4 -4
  73. package/src/telemetry.ts +49 -55
  74. package/src/validation.ts +2 -3
  75. package/src/workspaces.ts +52 -42
  76. package/src/writer.ts +3 -3
@@ -9,8 +9,8 @@
9
9
  * @module
10
10
  */
11
11
  import { availableParallelism } from "node:os";
12
- import { configUtils } from "@dbx-tools/core";
13
- import { errorUtils, functionUtils, log } from "@dbx-tools/shared-core";
12
+ import { boolean } from "@dbx-tools/core";
13
+ import { log, toError, errorMessage, memoize } from "@dbx-tools/shared-core";
14
14
  import { MastraSandbox, } from "@mastra/core/workspace";
15
15
  const DEFAULT_COMMAND_TIMEOUT_MS = 30_000;
16
16
  const DEFAULT_MAX_MEMORY_BYTES = 10_000_000;
@@ -27,9 +27,9 @@ const logger = log.logger("mastra/monty");
27
27
  export function montyMaxProcesses(parallelism = availableParallelism()) {
28
28
  return Math.max(4, Math.floor(parallelism) * 2);
29
29
  }
30
- const montyContext = functionUtils.memoize(async () => {
30
+ const montyContext = memoize(async () => {
31
31
  const errors = [];
32
- const targets = configUtils.boolean(undefined, "MONTY_FORCE_WASM")
32
+ const targets = boolean(undefined, "MONTY_FORCE_WASM")
33
33
  ? [WASM_MONTY_TARGET]
34
34
  : [NATIVE_MONTY_TARGET, WASM_MONTY_TARGET];
35
35
  for (const target of targets) {
@@ -49,9 +49,9 @@ const montyContext = functionUtils.memoize(async () => {
49
49
  };
50
50
  }
51
51
  catch (error) {
52
- errors.push(errorUtils.toError(error));
52
+ errors.push(toError(error));
53
53
  logger.debug(`${target.name} unavailable`, {
54
- error: errorUtils.toError(error),
54
+ error: toError(error),
55
55
  });
56
56
  }
57
57
  }
@@ -148,7 +148,7 @@ export class MontySandbox extends MastraSandbox {
148
148
  if (aborted || options.abortSignal?.aborted) {
149
149
  throw abortReason(options.abortSignal);
150
150
  }
151
- const message = errorUtils.errorMessage(caught);
151
+ const message = errorMessage(caught);
152
152
  output.emit("stderr", output.stderr.value ? `\n${message}` : message);
153
153
  const { crashedError } = await montyContext();
154
154
  const timedOut = caught instanceof crashedError && caught.timedOut;
@@ -354,4 +354,4 @@ if (import.meta.main) {
354
354
  console.log(await sandbox.executeCommand("print('Hello, world!')"));
355
355
  await sandbox.stop();
356
356
  }
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udHktc2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb250eS1zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUNMLGFBQWEsR0FLZCxNQUFNLHdCQUF3QixDQUFDO0FBR2hDLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDO0FBQzFDLE1BQU0sd0JBQXdCLEdBQUcsVUFBVSxDQUFDO0FBQzVDLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztDQUNsQyxDQUFDO0FBQ1gsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixJQUFJLEVBQUUsWUFBWTtJQUNsQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDO0NBQ2xDLENBQUM7QUFDWCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBUzFDLGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsY0FBc0Isb0JBQW9CLEVBQUU7SUFDNUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBMkIsRUFBRTtJQUMzRSxNQUFNLE1BQU0sR0FB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Q0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUErQjtJQUNsRCxPQUFPLE1BQU0sRUFBRSxNQUFNLElBQUksSUFBSSxZQUFZLENBQUMseUJBQXlCLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNuQixPQUFlLEVBQ2YsSUFBYyxFQUNkLE9BQWUsRUFDZixNQUFjO0lBRWQsT0FBTztRQUNMLE9BQU87UUFDUCxJQUFJO1FBQ0osT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsQ0FBQztRQUNYLE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTTtRQUNOLGVBQWUsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTztLQUM3QyxDQUFDO0FBQ0osQ0FBQztBQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQeWRhbnRpYyBNb250eSBmYWxsYmFjayBmb3IgTWFzdHJhIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqIFByZWZlcnMgTW9udHkncyBuYXRpdmUgTm9kZSBzdWJwcm9jZXNzIHdvcmtlcnMgYW5kIGZhbGxzIGJhY2sgdG8gaXRzIFdBU01cbiAqIHdvcmtlcnMgd2hlbiB0aGUgbmF0aXZlIHBhY2thZ2UgaXMgdW5hdmFpbGFibGUuIEl0IGV4ZWN1dGVzIFB5dGhvbiBzb3VyY2VcbiAqIHdpdGggbm8gaG9zdCBmaWxlc3lzdGVtLCBuZXR3b3JrLCBlbnZpcm9ubWVudCwgc2hlbGwsIG9yIHRoaXJkLXBhcnR5IHBhY2thZ2VcbiAqIGFjY2Vzcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgYXZhaWxhYmxlUGFyYWxsZWxpc20gfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgY29uZmlnVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBmdW5jdGlvblV0aWxzLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTWFzdHJhU2FuZGJveCxcbiAgdHlwZSBDb21tYW5kUmVzdWx0LFxuICB0eXBlIEV4ZWN1dGVDb21tYW5kT3B0aW9ucyxcbiAgdHlwZSBQcm92aWRlclN0YXR1cyxcbiAgdHlwZSBTYW5kYm94SW5mbyxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcbmltcG9ydCB0eXBlIHsgQ2hlY2tvdXRPcHRpb25zLCBNb250eSwgTW9udHlDcmFzaGVkRXJyb3IsIE1vbnR5U2Vzc2lvbiB9IGZyb20gXCJAcHlkYW50aWMvbW9udHlcIjtcblxuY29uc3QgREVGQVVMVF9DT01NQU5EX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5jb25zdCBERUZBVUxUX01BWF9NRU1PUllfQllURVMgPSAxMF8wMDBfMDAwO1xuY29uc3QgTkFUSVZFX01PTlRZX1RBUkdFVCA9IHtcbiAgbmFtZTogXCJuYXRpdmUgTW9udHlcIixcbiAgbG9hZDogKCkgPT4gaW1wb3J0KFwiQHB5ZGFudGljL21vbnR5L25vZGVcIiksXG59IGFzIGNvbnN0O1xuY29uc3QgV0FTTV9NT05UWV9UQVJHRVQgPSB7XG4gIG5hbWU6IFwiV0FTTSBNb250eVwiLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoXCJAcHlkYW50aWMvbW9udHkvd2FzbVwiKSxcbn0gYXMgY29uc3Q7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL21vbnR5XCIpO1xuXG50eXBlIE1vbnR5UG9vbCA9IFBpY2s8TW9udHksIFwiY2hlY2tvdXRcIj47XG5cbmludGVyZmFjZSBNb250eUNvbnRleHQge1xuICBjcmFzaGVkRXJyb3I6IHR5cGVvZiBNb250eUNyYXNoZWRFcnJvcjtcbiAgcG9vbDogTW9udHlQb29sO1xufVxuXG4vKiogQGludGVybmFsIFNpemUgdGhlIHNoYXJlZCB3b3JrZXIgcG9vbCBmcm9tIHRoZSBob3N0J3MgYXZhaWxhYmxlIHByb2Nlc3NvcnMuICovXG5leHBvcnQgZnVuY3Rpb24gbW9udHlNYXhQcm9jZXNzZXMocGFyYWxsZWxpc206IG51bWJlciA9IGF2YWlsYWJsZVBhcmFsbGVsaXNtKCkpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoNCwgTWF0aC5mbG9vcihwYXJhbGxlbGlzbSkgKiAyKTtcbn1cblxuY29uc3QgbW9udHlDb250ZXh0ID0gZnVuY3Rpb25VdGlscy5tZW1vaXplKGFzeW5jICgpOiBQcm9taXNlPE1vbnR5Q29udGV4dD4gPT4ge1xuICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbXTtcbiAgY29uc3QgdGFyZ2V0cyA9IGNvbmZpZ1V0aWxzLmJvb2xlYW4odW5kZWZpbmVkLCBcIk1PTlRZX0ZPUkNFX1dBU01cIilcbiAgICA/IFtXQVNNX01PTlRZX1RBUkdFVF1cbiAgICA6IFtOQVRJVkVfTU9OVFlfVEFSR0VULCBXQVNNX01PTlRZX1RBUkdFVF07XG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgdGFyZ2V0LmxvYWQoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgJHt0YXJnZXQubmFtZX0gbW9kdWxlIGF2YWlsYWJsZWApO1xuICAgICAgY29uc3QgbWF4UHJvY2Vzc2VzID0gbW9udHlNYXhQcm9jZXNzZXMoKTtcbiAgICAgIGNvbnN0IHBvb2wgPSBhd2FpdCBtb2R1bGUuTW9udHkuY3JlYXRlKHtcbiAgICAgICAgbWluUHJvY2Vzc2VzOiAxLFxuICAgICAgICBtYXhQcm9jZXNzZXMsXG4gICAgICAgIHJlcXVlc3RUaW1lb3V0OiAzNSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke3RhcmdldC5uYW1lfSBwb29sIGNyZWF0ZWRgLCB7IG1heFByb2Nlc3NlcyB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyYXNoZWRFcnJvcjogbW9kdWxlLk1vbnR5Q3Jhc2hlZEVycm9yLFxuICAgICAgICBwb29sLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSk7XG4gICAgICBsb2dnZXIuZGVidWcoYCR7dGFyZ2V0Lm5hbWV9IHVuYXZhaWxhYmxlYCwge1xuICAgICAgICBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBcIkZhaWxlZCB0byBjcmVhdGUgTW9udHkgcG9vbFwiKTtcbn0pO1xuXG4vKiogUmVzb3VyY2UgY29udHJvbHMgZm9yIHRoZSBNb250eSBQeXRob24gZmFsbGJhY2suICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbnR5U2FuZGJveE9wdGlvbnMge1xuICAvKiogTWFzdHJhIHByb3ZpZGVyIGlkLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIERlZmF1bHQgZXhlY3V0aW9uIHRpbWVvdXQuIFBlci1jYWxsIGBvcHRpb25zLnRpbWVvdXRgIHdpbnMuICovXG4gIGNvbW1hbmRUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIE1vbnR5IGhlYXAgYnl0ZXMgZm9yIG9uZSBjaGVja291dC4gKi9cbiAgbWF4TWVtb3J5Qnl0ZXM/OiBudW1iZXI7XG4gIC8qKiBUeXBlLWNoZWNrIGVhY2ggUHl0aG9uIHNuaXBwZXQgYmVmb3JlIHJ1bm5pbmcgaXQuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICB0eXBlQ2hlY2s/OiBib29sZWFuO1xufVxuXG4vKiogUHl0aG9uLW9ubHksIGRlbnktYnktZGVmYXVsdCBzYW5kYm94IGJhY2tlZCBieSBNb250eSdzIHNlbGVjdGVkIHdvcmtlciBwb29sLiAqL1xuZXhwb3J0IGNsYXNzIE1vbnR5U2FuZGJveCBleHRlbmRzIE1hc3RyYVNhbmRib3gge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3ZpZGVyID0gXCJtb250eVwiO1xuICBzdGF0dXM6IFByb3ZpZGVyU3RhdHVzID0gXCJwZW5kaW5nXCI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kVGltZW91dE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4TWVtb3J5Qnl0ZXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSB0eXBlQ2hlY2s6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlZEF0ID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBsYXN0VXNlZEF0PzogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb250eVNhbmRib3hPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5uYW1lID8/IFwiUHlkYW50aWMgTW9udHlcIjtcbiAgICBzdXBlcih7IG5hbWUgfSk7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQgPz8gXCJtb250eVwiO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jb21tYW5kVGltZW91dE1zID0gb3B0aW9ucy5jb21tYW5kVGltZW91dE1zID8/IERFRkFVTFRfQ09NTUFORF9USU1FT1VUX01TO1xuICAgIHRoaXMubWF4TWVtb3J5Qnl0ZXMgPSBvcHRpb25zLm1heE1lbW9yeUJ5dGVzID8/IERFRkFVTFRfTUFYX01FTU9SWV9CWVRFUztcbiAgICB0aGlzLnR5cGVDaGVjayA9IG9wdGlvbnMudHlwZUNoZWNrID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIFdhcm0gdGhlIHNoYXJlZCBjcmFzaC1pc29sYXRlZCB3b3JrZXIgcG9vbC4gKi9cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbW9udHlDb250ZXh0KCk7XG4gIH1cblxuICAvKiogVGhlIHByb2Nlc3Mtd2lkZSBwb29sIHN0YXlzIHdhcm07IHRoaXMgaW5zdGFuY2UgY2FycmllcyBubyBvcGVuIHNlc3Npb24uICovXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7fVxuXG4gIC8qKiBUaGUgcHJvY2Vzcy13aWRlIHBvb2wgc3RheXMgd2FybTsgZWFjaCBjb21tYW5kIGNsb3NlcyBpdHMgb3duIGNoZWNrb3V0LiAqL1xuICBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge31cblxuICAvKiogRXhlY3V0ZSBQeXRob24gc291cmNlIGFuZCBtYXAgTW9udHkgb3V0cHV0IHRvIE1hc3RyYSdzIGNvbW1hbmQgcmVzdWx0LiAqL1xuICBhc3luYyBleGVjdXRlQ29tbWFuZChcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10gPSBbXSxcbiAgICBvcHRpb25zOiBFeGVjdXRlQ29tbWFuZE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxDb21tYW5kUmVzdWx0PiB7XG4gICAgY29uc3Qgc3RhcnRlZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGNvbnN0IGNvZGUgPSBtb250eUNvZGUoY29tbWFuZCwgYXJncyk7XG4gICAgaWYgKGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhaWxlZFJlc3VsdChcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3RhcnRlZCxcbiAgICAgICAgXCJNb250eSBmYWxsYmFjayBhY2NlcHRzIFB5dGhvbiBzb3VyY2UgZGlyZWN0bHksIG9yIHB5dGhvbi9weXRob24zIHdpdGggYSBzaW5nbGUgLWMgc2NyaXB0LlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBPYmplY3QuZW50cmllcyhvcHRpb25zLmVudiA/PyB7fSkuZmlsdGVyKFxuICAgICAgKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICApO1xuICAgIGlmIChlbnZpcm9ubWVudC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZmFpbGVkUmVzdWx0KFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdGFydGVkLFxuICAgICAgICBcIk1vbnR5IGZhbGxiYWNrIGRvZXMgbm90IGV4cG9zZSBob3N0IGVudmlyb25tZW50IHZhcmlhYmxlcy5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmN3ZCkge1xuICAgICAgcmV0dXJuIGZhaWxlZFJlc3VsdChcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3RhcnRlZCxcbiAgICAgICAgXCJNb250eSBmYWxsYmFjayBkb2VzIG5vdCBleHBvc2UgYSBob3N0IHdvcmtpbmcgZGlyZWN0b3J5LlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHRocm93IG9wdGlvbnMuYWJvcnRTaWduYWwucmVhc29uO1xuXG4gICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gdGhpcy5jb21tYW5kVGltZW91dE1zO1xuICAgIGNvbnN0IHBvb2wgPSAoYXdhaXQgbW9udHlDb250ZXh0KCkpLnBvb2w7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGNoZWNrb3V0U2Vzc2lvbihcbiAgICAgIHBvb2wsXG4gICAgICB7XG4gICAgICAgIGxpbWl0czoge1xuICAgICAgICAgIG1heEZlZWREdXJhdGlvblNlY3M6IE1hdGgubWF4KDAuMDAxLCB0aW1lb3V0IC8gMV8wMDApLFxuICAgICAgICAgIG1heE1lbW9yeTogdGhpcy5tYXhNZW1vcnlCeXRlcyxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZUNoZWNrOiB0aGlzLnR5cGVDaGVjayxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFJldGFpbmVkT3V0cHV0KG9wdGlvbnMpO1xuICAgIGNvbnN0IHdvcmtlclBpZCA9IHNlc3Npb24ud29ya2VyUGlkO1xuICAgIGxldCBhYm9ydGVkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdGVybWluYXRlV29ya2VyKHdvcmtlclBpZCk7XG4gICAgfTtcbiAgICBvcHRpb25zLmFib3J0U2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSBvbkFib3J0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhYm9ydGVkKSB0aHJvdyBhYm9ydFJlYXNvbihvcHRpb25zLmFib3J0U2lnbmFsKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgc2Vzc2lvbi5mZWVkUnVuKHN0cmlwUHl0aG9uRmVuY2UoY29kZSksIHtcbiAgICAgICAgcHJpbnRDYWxsYmFjazogKHN0cmVhbSwgdGV4dCkgPT4gb3V0cHV0LmVtaXQoc3RyZWFtLCB0ZXh0KSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmV0dXJuZWQgPSBmb3JtYXRSZXN1bHQodmFsdWUpO1xuICAgICAgaWYgKHJldHVybmVkKSB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHJldHVybmVkLmVuZHNXaXRoKFwiXFxuXCIpID8gcmV0dXJuZWQgOiBgJHtyZXR1cm5lZH1cXG5gO1xuICAgICAgICBvdXRwdXQuZW1pdChcInN0ZG91dFwiLCBzdWZmaXgpO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0VXNlZEF0ID0gbmV3IERhdGUoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGV4aXRDb2RlOiAwLFxuICAgICAgICBzdGRvdXQ6IG91dHB1dC5zdGRvdXQudmFsdWUsXG4gICAgICAgIHN0ZGVycjogb3V0cHV0LnN0ZGVyci52YWx1ZSxcbiAgICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAgIC4uLm91dHB1dC5tZXRhZGF0YSgpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmIChhYm9ydGVkIHx8IG9wdGlvbnMuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgYWJvcnRSZWFzb24ob3B0aW9ucy5hYm9ydFNpZ25hbCk7XG4gICAgICB9XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1Z2h0KTtcbiAgICAgIG91dHB1dC5lbWl0KFwic3RkZXJyXCIsIG91dHB1dC5zdGRlcnIudmFsdWUgPyBgXFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlKTtcbiAgICAgIGNvbnN0IHsgY3Jhc2hlZEVycm9yIH0gPSBhd2FpdCBtb250eUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IHRpbWVkT3V0ID0gY2F1Z2h0IGluc3RhbmNlb2YgY3Jhc2hlZEVycm9yICYmIGNhdWdodC50aW1lZE91dDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBleGl0Q29kZTogdGltZWRPdXQgPyAtMSA6IDEsXG4gICAgICAgIHN0ZG91dDogb3V0cHV0LnN0ZG91dC52YWx1ZSxcbiAgICAgICAgc3RkZXJyOiBvdXRwdXQuc3RkZXJyLnZhbHVlLFxuICAgICAgICBleGVjdXRpb25UaW1lTXM6IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZCxcbiAgICAgICAgLi4uKHRpbWVkT3V0ID8geyB0aW1lZE91dDogdHJ1ZSwga2lsbGVkOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIC4uLm91dHB1dC5tZXRhZGF0YSgpLFxuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgYXdhaXQgc2Vzc2lvbi5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzUmVhZHkoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBcInJ1bm5pbmdcIjtcbiAgfVxuXG4gIGdldEluZm8oKTogU2FuZGJveEluZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGNyZWF0ZWRBdDogdGhpcy5jcmVhdGVkQXQsXG4gICAgICAuLi4odGhpcy5sYXN0VXNlZEF0ID8geyBsYXN0VXNlZEF0OiB0aGlzLmxhc3RVc2VkQXQgfSA6IHt9KSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGxhbmd1YWdlOiBcInB5dGhvblwiLFxuICAgICAgICBob3N0QWNjZXNzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEluc3RydWN0aW9ucygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICBcIkNvbW1hbmRzIHJ1biBhcyBQeXRob24gc291cmNlIGluIHRoZSBQeWRhbnRpYyBNb250eSBmYWxsYmFjay5cIixcbiAgICAgIFwiUGFzcyBQeXRob24gY29kZSBkaXJlY3RseSByYXRoZXIgdGhhbiBzaGVsbCBzeW50YXguXCIsXG4gICAgICBcIlRoZXJlIGlzIG5vIGhvc3QgZmlsZXN5c3RlbSwgbmV0d29yaywgZW52aXJvbm1lbnQsIHNoZWxsLCBvciB0aGlyZC1wYXJ0eSBwYWNrYWdlIGFjY2Vzcy5cIixcbiAgICBdLmpvaW4oXCIgXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vbnR5Q29kZShjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gY29tbWFuZDtcbiAgaWYgKChjb21tYW5kID09PSBcInB5dGhvblwiIHx8IGNvbW1hbmQgPT09IFwicHl0aG9uM1wiKSAmJiBhcmdzLmxlbmd0aCA9PT0gMiAmJiBhcmdzWzBdID09PSBcIi1jXCIpIHtcbiAgICByZXR1cm4gYXJnc1sxXTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzdHJpcFB5dGhvbkZlbmNlKGNvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWQgPSBjb2RlLnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSAvXmBgYCg/OnB5dGhvbnxweSk/XFxzKlxcbihbXFxzXFxTXSo/KVxcbmBgYCQvaS5leGVjKHRyaW1tZWQpO1xuICByZXR1cm4gbWF0Y2g/LlsxXSA/PyBjb2RlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZXN1bHQodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIFwiXCI7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpID8/IFN0cmluZyh2YWx1ZSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIFJldGFpbmVkT3V0cHV0IHtcbiAgcmVhZG9ubHkgc3Rkb3V0OiBSZXRhaW5lZFRleHQ7XG4gIHJlYWRvbmx5IHN0ZGVycjogUmV0YWluZWRUZXh0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRvdXQ6IEV4ZWN1dGVDb21tYW5kT3B0aW9uc1tcIm9uU3Rkb3V0XCJdO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uU3RkZXJyOiBFeGVjdXRlQ29tbWFuZE9wdGlvbnNbXCJvblN0ZGVyclwiXTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBFeGVjdXRlQ29tbWFuZE9wdGlvbnMpIHtcbiAgICB0aGlzLnN0ZG91dCA9IG5ldyBSZXRhaW5lZFRleHQob3B0aW9ucy5tYXhSZXRhaW5lZEJ5dGVzKTtcbiAgICB0aGlzLnN0ZGVyciA9IG5ldyBSZXRhaW5lZFRleHQob3B0aW9ucy5tYXhSZXRhaW5lZEJ5dGVzKTtcbiAgICB0aGlzLm9uU3Rkb3V0ID0gb3B0aW9ucy5vblN0ZG91dDtcbiAgICB0aGlzLm9uU3RkZXJyID0gb3B0aW9ucy5vblN0ZGVycjtcbiAgfVxuXG4gIGVtaXQoc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIiwgdGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHN0cmVhbSA9PT0gXCJzdGRvdXRcIikge1xuICAgICAgdGhpcy5vblN0ZG91dD8uKHRleHQpO1xuICAgICAgdGhpcy5zdGRvdXQuYXBwZW5kKHRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uU3RkZXJyPy4odGV4dCk7XG4gICAgICB0aGlzLnN0ZGVyci5hcHBlbmQodGV4dCk7XG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGEoKTogUGljazxcbiAgICBDb21tYW5kUmVzdWx0LFxuICAgIFwic3Rkb3V0VHJ1bmNhdGVkXCIgfCBcInN0ZGVyclRydW5jYXRlZFwiIHwgXCJzdGRvdXREcm9wcGVkQnl0ZXNcIiB8IFwic3RkZXJyRHJvcHBlZEJ5dGVzXCJcbiAgPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLih0aGlzLnN0ZG91dC5kcm9wcGVkQnl0ZXMgPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc3Rkb3V0VHJ1bmNhdGVkOiB0cnVlLFxuICAgICAgICAgICAgc3Rkb3V0RHJvcHBlZEJ5dGVzOiB0aGlzLnN0ZG91dC5kcm9wcGVkQnl0ZXMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIC4uLih0aGlzLnN0ZGVyci5kcm9wcGVkQnl0ZXMgPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc3RkZXJyVHJ1bmNhdGVkOiB0cnVlLFxuICAgICAgICAgICAgc3RkZXJyRHJvcHBlZEJ5dGVzOiB0aGlzLnN0ZGVyci5kcm9wcGVkQnl0ZXMsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIFJldGFpbmVkVGV4dCB7XG4gIHZhbHVlID0gXCJcIjtcbiAgZHJvcHBlZEJ5dGVzID0gMDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1heEJ5dGVzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcblxuICBjb25zdHJ1Y3RvcihtYXhCeXRlczogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBtYXhCeXRlcyA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgaWYgKFxuICAgICAgcmVzb2x2ZWQgIT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJlxuICAgICAgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXNvbHZlZCkgfHwgcmVzb2x2ZWQgPCAwKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1heFJldGFpbmVkQnl0ZXMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBzYWZlIGludGVnZXIgb3IgSW5maW5pdHlcIik7XG4gICAgfVxuICAgIHRoaXMubWF4Qnl0ZXMgPSByZXNvbHZlZDtcbiAgfVxuXG4gIGFwcGVuZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBpZiAodGhpcy5tYXhCeXRlcyA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB7XG4gICAgICB0aGlzLnZhbHVlICs9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbWJpbmVkID0gdGhpcy5lbmNvZGVyLmVuY29kZSh0aGlzLnZhbHVlICsgdGV4dCk7XG4gICAgaWYgKGNvbWJpbmVkLmxlbmd0aCA8PSB0aGlzLm1heEJ5dGVzKSB7XG4gICAgICB0aGlzLnZhbHVlICs9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBzdGFydCA9IGNvbWJpbmVkLmxlbmd0aCAtIHRoaXMubWF4Qnl0ZXM7XG4gICAgd2hpbGUgKHN0YXJ0IDwgY29tYmluZWQubGVuZ3RoICYmIChjb21iaW5lZFtzdGFydF0hICYgMHhjMCkgPT09IDB4ODApIHN0YXJ0Kys7XG4gICAgY29uc3QgcmV0YWluZWQgPSBjb21iaW5lZC5zdWJhcnJheShzdGFydCk7XG4gICAgdGhpcy5kcm9wcGVkQnl0ZXMgKz0gY29tYmluZWQubGVuZ3RoIC0gcmV0YWluZWQubGVuZ3RoO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmRlY29kZXIuZGVjb2RlKHJldGFpbmVkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXJtaW5hdGVXb3JrZXIod29ya2VyUGlkOiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKHdvcmtlclBpZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5raWxsKHdvcmtlclBpZCwgXCJTSUdLSUxMXCIpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBUaGUgY29tbWFuZCBjYW4gZmluaXNoIGJldHdlZW4gdGhlIGFib3J0IGV2ZW50IGFuZCB0aGUga2lsbCByZXF1ZXN0LlxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrb3V0U2Vzc2lvbihcbiAgcG9vbDogTW9udHlQb29sLFxuICBvcHRpb25zOiBDaGVja291dE9wdGlvbnMsXG4gIHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPE1vbnR5U2Vzc2lvbj4ge1xuICBjb25zdCBjaGVja291dCA9IHBvb2wuY2hlY2tvdXQob3B0aW9ucyk7XG4gIGlmICghc2lnbmFsKSByZXR1cm4gY2hlY2tvdXQ7XG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIHZvaWQgY2hlY2tvdXQudGhlbigoc2Vzc2lvbikgPT4gc2Vzc2lvbi5jbG9zZSgpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIHRocm93IGFib3J0UmVhc29uKHNpZ25hbCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2U8TW9udHlTZXNzaW9uPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBvbkFib3J0ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KGFib3J0UmVhc29uKHNpZ25hbCkpO1xuICAgICAgdm9pZCBjaGVja291dC50aGVuKChzZXNzaW9uKSA9PiBzZXNzaW9uLmNsb3NlKCkpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgfTtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBjaGVja291dC50aGVuKFxuICAgICAgKHNlc3Npb24pID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICAgIHJlc29sdmUoc2Vzc2lvbik7XG4gICAgICB9LFxuICAgICAgKGNhdWdodDogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgICAgcmVqZWN0KGNhdWdodCk7XG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhYm9ydFJlYXNvbihzaWduYWw6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gIHJldHVybiBzaWduYWw/LnJlYXNvbiA/PyBuZXcgRE9NRXhjZXB0aW9uKFwiVGhlIGNvbW1hbmQgd2FzIGFib3J0ZWRcIiwgXCJBYm9ydEVycm9yXCIpO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRSZXN1bHQoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogc3RyaW5nW10sXG4gIHN0YXJ0ZWQ6IG51bWJlcixcbiAgc3RkZXJyOiBzdHJpbmcsXG4pOiBDb21tYW5kUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kLFxuICAgIGFyZ3MsXG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXhpdENvZGU6IDEsXG4gICAgc3Rkb3V0OiBcIlwiLFxuICAgIHN0ZGVycixcbiAgICBleGVjdXRpb25UaW1lTXM6IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZCxcbiAgfTtcbn1cblxuaWYgKGltcG9ydC5tZXRhLm1haW4pIHtcbiAgY29uc3Qgc2FuZGJveCA9IG5ldyBNb250eVNhbmRib3goKTtcbiAgYXdhaXQgc2FuZGJveC5zdGFydCgpO1xuICBjb25zb2xlLmxvZyhhd2FpdCBzYW5kYm94LmV4ZWN1dGVDb21tYW5kKFwicHJpbnQoJ0hlbGxvLCB3b3JsZCEnKVwiKSk7XG4gIGF3YWl0IHNhbmRib3guc3RvcCgpO1xufVxuIl19
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udHktc2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb250eS1zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdFLE9BQU8sRUFDTCxhQUFhLEdBS2QsTUFBTSx3QkFBd0IsQ0FBQztBQUdoQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLHdCQUF3QixHQUFHLFVBQVUsQ0FBQztBQUM1QyxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLElBQUksRUFBRSxjQUFjO0lBQ3BCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUM7Q0FDbEMsQ0FBQztBQUNYLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxFQUFFLFlBQVk7SUFDbEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztDQUNsQyxDQUFDO0FBQ1gsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQVMxQyxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLGNBQXNCLG9CQUFvQixFQUFFO0lBQzVFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBMkIsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FB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QixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLE1BQStCO0lBQ2xELE9BQU8sTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJLFlBQVksQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ25CLE9BQWUsRUFDZixJQUFjLEVBQ2QsT0FBZSxFQUNmLE1BQWM7SUFFZCxPQUFPO1FBQ0wsT0FBTztRQUNQLElBQUk7UUFDSixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxDQUFDO1FBQ1gsTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNO1FBQ04sZUFBZSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPO0tBQzdDLENBQUM7QUFDSixDQUFDO0FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkMsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB5ZGFudGljIE1vbnR5IGZhbGxiYWNrIGZvciBNYXN0cmEgY29tbWFuZCBleGVjdXRpb24uXG4gKlxuICogUHJlZmVycyBNb250eSdzIG5hdGl2ZSBOb2RlIHN1YnByb2Nlc3Mgd29ya2VycyBhbmQgZmFsbHMgYmFjayB0byBpdHMgV0FTTVxuICogd29ya2VycyB3aGVuIHRoZSBuYXRpdmUgcGFja2FnZSBpcyB1bmF2YWlsYWJsZS4gSXQgZXhlY3V0ZXMgUHl0aG9uIHNvdXJjZVxuICogd2l0aCBubyBob3N0IGZpbGVzeXN0ZW0sIG5ldHdvcmssIGVudmlyb25tZW50LCBzaGVsbCwgb3IgdGhpcmQtcGFydHkgcGFja2FnZVxuICogYWNjZXNzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBhdmFpbGFibGVQYXJhbGxlbGlzbSB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBib29sZWFuIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgbG9nLCB0b0Vycm9yLCBlcnJvck1lc3NhZ2UsIG1lbW9pemUgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTWFzdHJhU2FuZGJveCxcbiAgdHlwZSBDb21tYW5kUmVzdWx0LFxuICB0eXBlIEV4ZWN1dGVDb21tYW5kT3B0aW9ucyxcbiAgdHlwZSBQcm92aWRlclN0YXR1cyxcbiAgdHlwZSBTYW5kYm94SW5mbyxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcbmltcG9ydCB0eXBlIHsgQ2hlY2tvdXRPcHRpb25zLCBNb250eSwgTW9udHlDcmFzaGVkRXJyb3IsIE1vbnR5U2Vzc2lvbiB9IGZyb20gXCJAcHlkYW50aWMvbW9udHlcIjtcblxuY29uc3QgREVGQVVMVF9DT01NQU5EX1RJTUVPVVRfTVMgPSAzMF8wMDA7XG5jb25zdCBERUZBVUxUX01BWF9NRU1PUllfQllURVMgPSAxMF8wMDBfMDAwO1xuY29uc3QgTkFUSVZFX01PTlRZX1RBUkdFVCA9IHtcbiAgbmFtZTogXCJuYXRpdmUgTW9udHlcIixcbiAgbG9hZDogKCkgPT4gaW1wb3J0KFwiQHB5ZGFudGljL21vbnR5L25vZGVcIiksXG59IGFzIGNvbnN0O1xuY29uc3QgV0FTTV9NT05UWV9UQVJHRVQgPSB7XG4gIG5hbWU6IFwiV0FTTSBNb250eVwiLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoXCJAcHlkYW50aWMvbW9udHkvd2FzbVwiKSxcbn0gYXMgY29uc3Q7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL21vbnR5XCIpO1xuXG50eXBlIE1vbnR5UG9vbCA9IFBpY2s8TW9udHksIFwiY2hlY2tvdXRcIj47XG5cbmludGVyZmFjZSBNb250eUNvbnRleHQge1xuICBjcmFzaGVkRXJyb3I6IHR5cGVvZiBNb250eUNyYXNoZWRFcnJvcjtcbiAgcG9vbDogTW9udHlQb29sO1xufVxuXG4vKiogQGludGVybmFsIFNpemUgdGhlIHNoYXJlZCB3b3JrZXIgcG9vbCBmcm9tIHRoZSBob3N0J3MgYXZhaWxhYmxlIHByb2Nlc3NvcnMuICovXG5leHBvcnQgZnVuY3Rpb24gbW9udHlNYXhQcm9jZXNzZXMocGFyYWxsZWxpc206IG51bWJlciA9IGF2YWlsYWJsZVBhcmFsbGVsaXNtKCkpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoNCwgTWF0aC5mbG9vcihwYXJhbGxlbGlzbSkgKiAyKTtcbn1cblxuY29uc3QgbW9udHlDb250ZXh0ID0gbWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxNb250eUNvbnRleHQ+ID0+IHtcbiAgY29uc3QgZXJyb3JzOiBFcnJvcltdID0gW107XG4gIGNvbnN0IHRhcmdldHMgPSBib29sZWFuKHVuZGVmaW5lZCwgXCJNT05UWV9GT1JDRV9XQVNNXCIpXG4gICAgPyBbV0FTTV9NT05UWV9UQVJHRVRdXG4gICAgOiBbTkFUSVZFX01PTlRZX1RBUkdFVCwgV0FTTV9NT05UWV9UQVJHRVRdO1xuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IHRhcmdldC5sb2FkKCk7XG4gICAgICBsb2dnZXIuZGVidWcoYCR7dGFyZ2V0Lm5hbWV9IG1vZHVsZSBhdmFpbGFibGVgKTtcbiAgICAgIGNvbnN0IG1heFByb2Nlc3NlcyA9IG1vbnR5TWF4UHJvY2Vzc2VzKCk7XG4gICAgICBjb25zdCBwb29sID0gYXdhaXQgbW9kdWxlLk1vbnR5LmNyZWF0ZSh7XG4gICAgICAgIG1pblByb2Nlc3NlczogMSxcbiAgICAgICAgbWF4UHJvY2Vzc2VzLFxuICAgICAgICByZXF1ZXN0VGltZW91dDogMzUsXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgJHt0YXJnZXQubmFtZX0gcG9vbCBjcmVhdGVkYCwgeyBtYXhQcm9jZXNzZXMgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmFzaGVkRXJyb3I6IG1vZHVsZS5Nb250eUNyYXNoZWRFcnJvcixcbiAgICAgICAgcG9vbCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKHRvRXJyb3IoZXJyb3IpKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgJHt0YXJnZXQubmFtZX0gdW5hdmFpbGFibGVgLCB7XG4gICAgICAgIGVycm9yOiB0b0Vycm9yKGVycm9yKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBcIkZhaWxlZCB0byBjcmVhdGUgTW9udHkgcG9vbFwiKTtcbn0pO1xuXG4vKiogUmVzb3VyY2UgY29udHJvbHMgZm9yIHRoZSBNb250eSBQeXRob24gZmFsbGJhY2suICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbnR5U2FuZGJveE9wdGlvbnMge1xuICAvKiogTWFzdHJhIHByb3ZpZGVyIGlkLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIERlZmF1bHQgZXhlY3V0aW9uIHRpbWVvdXQuIFBlci1jYWxsIGBvcHRpb25zLnRpbWVvdXRgIHdpbnMuICovXG4gIGNvbW1hbmRUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIE1vbnR5IGhlYXAgYnl0ZXMgZm9yIG9uZSBjaGVja291dC4gKi9cbiAgbWF4TWVtb3J5Qnl0ZXM/OiBudW1iZXI7XG4gIC8qKiBUeXBlLWNoZWNrIGVhY2ggUHl0aG9uIHNuaXBwZXQgYmVmb3JlIHJ1bm5pbmcgaXQuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICB0eXBlQ2hlY2s/OiBib29sZWFuO1xufVxuXG4vKiogUHl0aG9uLW9ubHksIGRlbnktYnktZGVmYXVsdCBzYW5kYm94IGJhY2tlZCBieSBNb250eSdzIHNlbGVjdGVkIHdvcmtlciBwb29sLiAqL1xuZXhwb3J0IGNsYXNzIE1vbnR5U2FuZGJveCBleHRlbmRzIE1hc3RyYVNhbmRib3gge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3ZpZGVyID0gXCJtb250eVwiO1xuICBzdGF0dXM6IFByb3ZpZGVyU3RhdHVzID0gXCJwZW5kaW5nXCI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kVGltZW91dE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4TWVtb3J5Qnl0ZXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSB0eXBlQ2hlY2s6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlZEF0ID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBsYXN0VXNlZEF0PzogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb250eVNhbmRib3hPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5uYW1lID8/IFwiUHlkYW50aWMgTW9udHlcIjtcbiAgICBzdXBlcih7IG5hbWUgfSk7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQgPz8gXCJtb250eVwiO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5jb21tYW5kVGltZW91dE1zID0gb3B0aW9ucy5jb21tYW5kVGltZW91dE1zID8/IERFRkFVTFRfQ09NTUFORF9USU1FT1VUX01TO1xuICAgIHRoaXMubWF4TWVtb3J5Qnl0ZXMgPSBvcHRpb25zLm1heE1lbW9yeUJ5dGVzID8/IERFRkFVTFRfTUFYX01FTU9SWV9CWVRFUztcbiAgICB0aGlzLnR5cGVDaGVjayA9IG9wdGlvbnMudHlwZUNoZWNrID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIFdhcm0gdGhlIHNoYXJlZCBjcmFzaC1pc29sYXRlZCB3b3JrZXIgcG9vbC4gKi9cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbW9udHlDb250ZXh0KCk7XG4gIH1cblxuICAvKiogVGhlIHByb2Nlc3Mtd2lkZSBwb29sIHN0YXlzIHdhcm07IHRoaXMgaW5zdGFuY2UgY2FycmllcyBubyBvcGVuIHNlc3Npb24uICovXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7fVxuXG4gIC8qKiBUaGUgcHJvY2Vzcy13aWRlIHBvb2wgc3RheXMgd2FybTsgZWFjaCBjb21tYW5kIGNsb3NlcyBpdHMgb3duIGNoZWNrb3V0LiAqL1xuICBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge31cblxuICAvKiogRXhlY3V0ZSBQeXRob24gc291cmNlIGFuZCBtYXAgTW9udHkgb3V0cHV0IHRvIE1hc3RyYSdzIGNvbW1hbmQgcmVzdWx0LiAqL1xuICBhc3luYyBleGVjdXRlQ29tbWFuZChcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10gPSBbXSxcbiAgICBvcHRpb25zOiBFeGVjdXRlQ29tbWFuZE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxDb21tYW5kUmVzdWx0PiB7XG4gICAgY29uc3Qgc3RhcnRlZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGNvbnN0IGNvZGUgPSBtb250eUNvZGUoY29tbWFuZCwgYXJncyk7XG4gICAgaWYgKGNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhaWxlZFJlc3VsdChcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3RhcnRlZCxcbiAgICAgICAgXCJNb250eSBmYWxsYmFjayBhY2NlcHRzIFB5dGhvbiBzb3VyY2UgZGlyZWN0bHksIG9yIHB5dGhvbi9weXRob24zIHdpdGggYSBzaW5nbGUgLWMgc2NyaXB0LlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBPYmplY3QuZW50cmllcyhvcHRpb25zLmVudiA/PyB7fSkuZmlsdGVyKFxuICAgICAgKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgICApO1xuICAgIGlmIChlbnZpcm9ubWVudC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZmFpbGVkUmVzdWx0KFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdGFydGVkLFxuICAgICAgICBcIk1vbnR5IGZhbGxiYWNrIGRvZXMgbm90IGV4cG9zZSBob3N0IGVudmlyb25tZW50IHZhcmlhYmxlcy5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmN3ZCkge1xuICAgICAgcmV0dXJuIGZhaWxlZFJlc3VsdChcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3RhcnRlZCxcbiAgICAgICAgXCJNb250eSBmYWxsYmFjayBkb2VzIG5vdCBleHBvc2UgYSBob3N0IHdvcmtpbmcgZGlyZWN0b3J5LlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHRocm93IG9wdGlvbnMuYWJvcnRTaWduYWwucmVhc29uO1xuXG4gICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gdGhpcy5jb21tYW5kVGltZW91dE1zO1xuICAgIGNvbnN0IHBvb2wgPSAoYXdhaXQgbW9udHlDb250ZXh0KCkpLnBvb2w7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGNoZWNrb3V0U2Vzc2lvbihcbiAgICAgIHBvb2wsXG4gICAgICB7XG4gICAgICAgIGxpbWl0czoge1xuICAgICAgICAgIG1heEZlZWREdXJhdGlvblNlY3M6IE1hdGgubWF4KDAuMDAxLCB0aW1lb3V0IC8gMV8wMDApLFxuICAgICAgICAgIG1heE1lbW9yeTogdGhpcy5tYXhNZW1vcnlCeXRlcyxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZUNoZWNrOiB0aGlzLnR5cGVDaGVjayxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICk7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFJldGFpbmVkT3V0cHV0KG9wdGlvbnMpO1xuICAgIGNvbnN0IHdvcmtlclBpZCA9IHNlc3Npb24ud29ya2VyUGlkO1xuICAgIGxldCBhYm9ydGVkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdGVybWluYXRlV29ya2VyKHdvcmtlclBpZCk7XG4gICAgfTtcbiAgICBvcHRpb25zLmFib3J0U2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSBvbkFib3J0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhYm9ydGVkKSB0aHJvdyBhYm9ydFJlYXNvbihvcHRpb25zLmFib3J0U2lnbmFsKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgc2Vzc2lvbi5mZWVkUnVuKHN0cmlwUHl0aG9uRmVuY2UoY29kZSksIHtcbiAgICAgICAgcHJpbnRDYWxsYmFjazogKHN0cmVhbSwgdGV4dCkgPT4gb3V0cHV0LmVtaXQoc3RyZWFtLCB0ZXh0KSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmV0dXJuZWQgPSBmb3JtYXRSZXN1bHQodmFsdWUpO1xuICAgICAgaWYgKHJldHVybmVkKSB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHJldHVybmVkLmVuZHNXaXRoKFwiXFxuXCIpID8gcmV0dXJuZWQgOiBgJHtyZXR1cm5lZH1cXG5gO1xuICAgICAgICBvdXRwdXQuZW1pdChcInN0ZG91dFwiLCBzdWZmaXgpO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0VXNlZEF0ID0gbmV3IERhdGUoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGV4aXRDb2RlOiAwLFxuICAgICAgICBzdGRvdXQ6IG91dHB1dC5zdGRvdXQudmFsdWUsXG4gICAgICAgIHN0ZGVycjogb3V0cHV0LnN0ZGVyci52YWx1ZSxcbiAgICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAgIC4uLm91dHB1dC5tZXRhZGF0YSgpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmIChhYm9ydGVkIHx8IG9wdGlvbnMuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgdGhyb3cgYWJvcnRSZWFzb24ob3B0aW9ucy5hYm9ydFNpZ25hbCk7XG4gICAgICB9XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3JNZXNzYWdlKGNhdWdodCk7XG4gICAgICBvdXRwdXQuZW1pdChcInN0ZGVyclwiLCBvdXRwdXQuc3RkZXJyLnZhbHVlID8gYFxcbiR7bWVzc2FnZX1gIDogbWVzc2FnZSk7XG4gICAgICBjb25zdCB7IGNyYXNoZWRFcnJvciB9ID0gYXdhaXQgbW9udHlDb250ZXh0KCk7XG4gICAgICBjb25zdCB0aW1lZE91dCA9IGNhdWdodCBpbnN0YW5jZW9mIGNyYXNoZWRFcnJvciAmJiBjYXVnaHQudGltZWRPdXQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXhpdENvZGU6IHRpbWVkT3V0ID8gLTEgOiAxLFxuICAgICAgICBzdGRvdXQ6IG91dHB1dC5zdGRvdXQudmFsdWUsXG4gICAgICAgIHN0ZGVycjogb3V0cHV0LnN0ZGVyci52YWx1ZSxcbiAgICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAgIC4uLih0aW1lZE91dCA/IHsgdGltZWRPdXQ6IHRydWUsIGtpbGxlZDogdHJ1ZSB9IDoge30pLFxuICAgICAgICAuLi5vdXRwdXQubWV0YWRhdGEoKSxcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIGF3YWl0IHNlc3Npb24uY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc1JlYWR5KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCI7XG4gIH1cblxuICBnZXRJbmZvKCk6IFNhbmRib3hJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcixcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBjcmVhdGVkQXQ6IHRoaXMuY3JlYXRlZEF0LFxuICAgICAgLi4uKHRoaXMubGFzdFVzZWRBdCA/IHsgbGFzdFVzZWRBdDogdGhpcy5sYXN0VXNlZEF0IH0gOiB7fSksXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBsYW5ndWFnZTogXCJweXRob25cIixcbiAgICAgICAgaG9zdEFjY2VzczogZmFsc2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBnZXRJbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgXCJDb21tYW5kcyBydW4gYXMgUHl0aG9uIHNvdXJjZSBpbiB0aGUgUHlkYW50aWMgTW9udHkgZmFsbGJhY2suXCIsXG4gICAgICBcIlBhc3MgUHl0aG9uIGNvZGUgZGlyZWN0bHkgcmF0aGVyIHRoYW4gc2hlbGwgc3ludGF4LlwiLFxuICAgICAgXCJUaGVyZSBpcyBubyBob3N0IGZpbGVzeXN0ZW0sIG5ldHdvcmssIGVudmlyb25tZW50LCBzaGVsbCwgb3IgdGhpcmQtcGFydHkgcGFja2FnZSBhY2Nlc3MuXCIsXG4gICAgXS5qb2luKFwiIFwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb250eUNvZGUoY29tbWFuZDogc3RyaW5nLCBhcmdzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvbW1hbmQ7XG4gIGlmICgoY29tbWFuZCA9PT0gXCJweXRob25cIiB8fCBjb21tYW5kID09PSBcInB5dGhvbjNcIikgJiYgYXJncy5sZW5ndGggPT09IDIgJiYgYXJnc1swXSA9PT0gXCItY1wiKSB7XG4gICAgcmV0dXJuIGFyZ3NbMV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc3RyaXBQeXRob25GZW5jZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0cmltbWVkID0gY29kZS50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gL15gYGAoPzpweXRob258cHkpP1xccypcXG4oW1xcc1xcU10qPylcXG5gYGAkL2kuZXhlYyh0cmltbWVkKTtcbiAgcmV0dXJuIG1hdGNoPy5bMV0gPz8gY29kZTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmVzdWx0KHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBcIlwiO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSByZXR1cm4gdmFsdWU7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSA/PyBTdHJpbmcodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuXG5jbGFzcyBSZXRhaW5lZE91dHB1dCB7XG4gIHJlYWRvbmx5IHN0ZG91dDogUmV0YWluZWRUZXh0O1xuICByZWFkb25seSBzdGRlcnI6IFJldGFpbmVkVGV4dDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9uU3Rkb3V0OiBFeGVjdXRlQ29tbWFuZE9wdGlvbnNbXCJvblN0ZG91dFwiXTtcbiAgcHJpdmF0ZSByZWFkb25seSBvblN0ZGVycjogRXhlY3V0ZUNvbW1hbmRPcHRpb25zW1wib25TdGRlcnJcIl07XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRXhlY3V0ZUNvbW1hbmRPcHRpb25zKSB7XG4gICAgdGhpcy5zdGRvdXQgPSBuZXcgUmV0YWluZWRUZXh0KG9wdGlvbnMubWF4UmV0YWluZWRCeXRlcyk7XG4gICAgdGhpcy5zdGRlcnIgPSBuZXcgUmV0YWluZWRUZXh0KG9wdGlvbnMubWF4UmV0YWluZWRCeXRlcyk7XG4gICAgdGhpcy5vblN0ZG91dCA9IG9wdGlvbnMub25TdGRvdXQ7XG4gICAgdGhpcy5vblN0ZGVyciA9IG9wdGlvbnMub25TdGRlcnI7XG4gIH1cblxuICBlbWl0KHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCIsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChzdHJlYW0gPT09IFwic3Rkb3V0XCIpIHtcbiAgICAgIHRoaXMub25TdGRvdXQ/Lih0ZXh0KTtcbiAgICAgIHRoaXMuc3Rkb3V0LmFwcGVuZCh0ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vblN0ZGVycj8uKHRleHQpO1xuICAgICAgdGhpcy5zdGRlcnIuYXBwZW5kKHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIG1ldGFkYXRhKCk6IFBpY2s8XG4gICAgQ29tbWFuZFJlc3VsdCxcbiAgICBcInN0ZG91dFRydW5jYXRlZFwiIHwgXCJzdGRlcnJUcnVuY2F0ZWRcIiB8IFwic3Rkb3V0RHJvcHBlZEJ5dGVzXCIgfCBcInN0ZGVyckRyb3BwZWRCeXRlc1wiXG4gID4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGhpcy5zdGRvdXQuZHJvcHBlZEJ5dGVzID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN0ZG91dFRydW5jYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHN0ZG91dERyb3BwZWRCeXRlczogdGhpcy5zdGRvdXQuZHJvcHBlZEJ5dGVzLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4odGhpcy5zdGRlcnIuZHJvcHBlZEJ5dGVzID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN0ZGVyclRydW5jYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHN0ZGVyckRyb3BwZWRCeXRlczogdGhpcy5zdGRlcnIuZHJvcHBlZEJ5dGVzLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBSZXRhaW5lZFRleHQge1xuICB2YWx1ZSA9IFwiXCI7XG4gIGRyb3BwZWRCeXRlcyA9IDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtYXhCeXRlczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbiAgY29uc3RydWN0b3IobWF4Qnl0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gbWF4Qnl0ZXMgPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGlmIChcbiAgICAgIHJlc29sdmVkICE9PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiZcbiAgICAgICghTnVtYmVyLmlzU2FmZUludGVnZXIocmVzb2x2ZWQpIHx8IHJlc29sdmVkIDwgMClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXhSZXRhaW5lZEJ5dGVzIG11c3QgYmUgYSBub24tbmVnYXRpdmUgc2FmZSBpbnRlZ2VyIG9yIEluZmluaXR5XCIpO1xuICAgIH1cbiAgICB0aGlzLm1heEJ5dGVzID0gcmVzb2x2ZWQ7XG4gIH1cblxuICBhcHBlbmQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG4gICAgaWYgKHRoaXMubWF4Qnl0ZXMgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgdGhpcy52YWx1ZSArPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb21iaW5lZCA9IHRoaXMuZW5jb2Rlci5lbmNvZGUodGhpcy52YWx1ZSArIHRleHQpO1xuICAgIGlmIChjb21iaW5lZC5sZW5ndGggPD0gdGhpcy5tYXhCeXRlcykge1xuICAgICAgdGhpcy52YWx1ZSArPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc3RhcnQgPSBjb21iaW5lZC5sZW5ndGggLSB0aGlzLm1heEJ5dGVzO1xuICAgIHdoaWxlIChzdGFydCA8IGNvbWJpbmVkLmxlbmd0aCAmJiAoY29tYmluZWRbc3RhcnRdISAmIDB4YzApID09PSAweDgwKSBzdGFydCsrO1xuICAgIGNvbnN0IHJldGFpbmVkID0gY29tYmluZWQuc3ViYXJyYXkoc3RhcnQpO1xuICAgIHRoaXMuZHJvcHBlZEJ5dGVzICs9IGNvbWJpbmVkLmxlbmd0aCAtIHJldGFpbmVkLmxlbmd0aDtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5kZWNvZGVyLmRlY29kZShyZXRhaW5lZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVybWluYXRlV29ya2VyKHdvcmtlclBpZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICh3b3JrZXJQaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICB0cnkge1xuICAgIHByb2Nlc3Mua2lsbCh3b3JrZXJQaWQsIFwiU0lHS0lMTFwiKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gVGhlIGNvbW1hbmQgY2FuIGZpbmlzaCBiZXR3ZWVuIHRoZSBhYm9ydCBldmVudCBhbmQgdGhlIGtpbGwgcmVxdWVzdC5cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja291dFNlc3Npb24oXG4gIHBvb2w6IE1vbnR5UG9vbCxcbiAgb3B0aW9uczogQ2hlY2tvdXRPcHRpb25zLFxuICBzaWduYWw6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxNb250eVNlc3Npb24+IHtcbiAgY29uc3QgY2hlY2tvdXQgPSBwb29sLmNoZWNrb3V0KG9wdGlvbnMpO1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuIGNoZWNrb3V0O1xuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB2b2lkIGNoZWNrb3V0LnRoZW4oKHNlc3Npb24pID0+IHNlc3Npb24uY2xvc2UoKSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB0aHJvdyBhYm9ydFJlYXNvbihzaWduYWwpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPE1vbnR5U2Vzc2lvbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIHJlamVjdChhYm9ydFJlYXNvbihzaWduYWwpKTtcbiAgICAgIHZvaWQgY2hlY2tvdXQudGhlbigoc2Vzc2lvbikgPT4gc2Vzc2lvbi5jbG9zZSgpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIH07XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgY2hlY2tvdXQudGhlbihcbiAgICAgIChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgICByZXNvbHZlKHNlc3Npb24pO1xuICAgICAgfSxcbiAgICAgIChjYXVnaHQ6IHVua25vd24pID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICAgIHJlamVjdChjYXVnaHQpO1xuICAgICAgfSxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWJvcnRSZWFzb24oc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICByZXR1cm4gc2lnbmFsPy5yZWFzb24gPz8gbmV3IERPTUV4Y2VwdGlvbihcIlRoZSBjb21tYW5kIHdhcyBhYm9ydGVkXCIsIFwiQWJvcnRFcnJvclwiKTtcbn1cblxuZnVuY3Rpb24gZmFpbGVkUmVzdWx0KFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBzdGFydGVkOiBudW1iZXIsXG4gIHN0ZGVycjogc3RyaW5nLFxuKTogQ29tbWFuZFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgY29tbWFuZCxcbiAgICBhcmdzLFxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGV4aXRDb2RlOiAxLFxuICAgIHN0ZG91dDogXCJcIixcbiAgICBzdGRlcnIsXG4gICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gIH07XG59XG5cbmlmIChpbXBvcnQubWV0YS5tYWluKSB7XG4gIGNvbnN0IHNhbmRib3ggPSBuZXcgTW9udHlTYW5kYm94KCk7XG4gIGF3YWl0IHNhbmRib3guc3RhcnQoKTtcbiAgY29uc29sZS5sb2coYXdhaXQgc2FuZGJveC5leGVjdXRlQ29tbWFuZChcInByaW50KCdIZWxsbywgd29ybGQhJylcIikpO1xuICBhd2FpdCBzYW5kYm94LnN0b3AoKTtcbn1cbiJdfQ==
@@ -17,10 +17,11 @@
17
17
  * ambient OTel context, so when Mastra is invoked from inside an
18
18
  * AppKit HTTP span the trace stays connected.
19
19
  *
20
- * Net effect: Mastra spans get exactly the treatment AppKit's
21
- * `agents` plugin gets. No custom OTLP pipeline lives in this
22
- * package; the OTLP endpoint, headers, and resource attributes are
23
- * driven by the standard OTel env vars
20
+ * Net effect: deployed Mastra spans get exactly the treatment AppKit's
21
+ * `agents` plugin gets. Local direct MLflow tracing uses its own global
22
+ * provider because AppKit has no OTLP processor to start there. No custom
23
+ * OTLP pipeline lives in this package; the OTLP endpoint, headers, and resource
24
+ * attributes are driven by the standard OTel env vars
24
25
  * (`OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_HEADERS`,
25
26
  * `OTEL_SERVICE_NAME`, `OTEL_RESOURCE_ATTRIBUTES`, ...) and consumed
26
27
  * by AppKit's `TelemetryManager`. Set those once and both AppKit and
@@ -76,7 +77,7 @@ export interface BuildObservabilityOptions {
76
77
  * Supports dot notation for nested values per the Mastra docs.
77
78
  */
78
79
  requestContextKeys?: readonly string[];
79
- /** AppKit-owned tracer provider used by the Mastra OTel bridge. */
80
+ /** AppKit-owned provider used unless local direct MLflow tracing owns the global provider. */
80
81
  tracerProvider?: TracerProvider;
81
82
  }
82
83
  /** True when AppKit's global OTel pipeline is configured to export traces. */
@@ -17,10 +17,11 @@
17
17
  * ambient OTel context, so when Mastra is invoked from inside an
18
18
  * AppKit HTTP span the trace stays connected.
19
19
  *
20
- * Net effect: Mastra spans get exactly the treatment AppKit's
21
- * `agents` plugin gets. No custom OTLP pipeline lives in this
22
- * package; the OTLP endpoint, headers, and resource attributes are
23
- * driven by the standard OTel env vars
20
+ * Net effect: deployed Mastra spans get exactly the treatment AppKit's
21
+ * `agents` plugin gets. Local direct MLflow tracing uses its own global
22
+ * provider because AppKit has no OTLP processor to start there. No custom
23
+ * OTLP pipeline lives in this package; the OTLP endpoint, headers, and resource
24
+ * attributes are driven by the standard OTel env vars
24
25
  * (`OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_HEADERS`,
25
26
  * `OTEL_SERVICE_NAME`, `OTEL_RESOURCE_ATTRIBUTES`, ...) and consumed
26
27
  * by AppKit's `TelemetryManager`. Set those once and both AppKit and
@@ -88,6 +89,7 @@ export async function buildObservability(options) {
88
89
  const directMlflowConfigured = options?.enabled === false || otlpConfigured ? false : await initializeDirectMlflowTracing();
89
90
  if (directMlflowConfigured)
90
91
  configureOtelPropagation();
92
+ const bridgeTracerProvider = directMlflowConfigured ? undefined : options?.tracerProvider;
91
93
  const tracingConfigured = otlpConfigured || directMlflowConfigured;
92
94
  if (options?.enabled === false || (options?.enabled !== true && !tracingConfigured)) {
93
95
  logger.info("Mastra observability off", {
@@ -132,10 +134,10 @@ export async function buildObservability(options) {
132
134
  configs: {
133
135
  serviceName: {
134
136
  serviceName,
135
- bridge: new OtelBridge(options?.tracerProvider ? { tracerProvider: options.tracerProvider } : undefined),
137
+ bridge: new OtelBridge(bridgeTracerProvider ? { tracerProvider: bridgeTracerProvider } : undefined),
136
138
  requestContextKeys,
137
139
  },
138
140
  },
139
141
  });
140
142
  }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxFQUNMLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFDN0IsYUFBYSxHQUNkLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUVsRCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztBQXVDdEMsOEVBQThFO0FBQzlFLE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsT0FBTyxPQUFPLENBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUMxRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hGLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN0QixNQUFN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Q0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ2pGO2dCQUNELGtCQUFrQjthQUNuQjtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFzdHJhIG9ic2VydmFiaWxpdHkgd2lyZWQgdGhyb3VnaCB0aGUgc2FtZSBPVGVsIHBpcGVsaW5lIEFwcEtpdCdzXG4gKiBidWlsdC1pbiBwbHVnaW5zIChlLmcuIGBhZ2VudHNgKSB1c2UsIHZpYSBgQG1hc3RyYS9vdGVsLWJyaWRnZWAuXG4gKlxuICogSG93IHRyYWNlcyBmbG93OlxuICpcbiAqIDEuIGBAZGF0YWJyaWNrcy9hcHBraXRgIGJvb3RzIGEgZ2xvYmFsIGBOb2RlU0RLYCBpblxuICogICAgYFRlbGVtZXRyeU1hbmFnZXIuaW5pdGlhbGl6ZSgpYCAoZHVyaW5nIGBjcmVhdGVBcHBgKSB3aGVuXG4gKiAgICBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYCBpcyBzZXQgaW4gdGhlIHByb2Nlc3MgZW52LlxuICogMi4gRXZlcnkgQXBwS2l0IHBsdWdpbiBzcGFuIChlLmcuIHRoZSBgYWdlbnRzYCBwbHVnaW4nc1xuICogICAgYGV4ZWN1dGVTdHJlYW1gKSBpcyBjcmVhdGVkIHZpYSB0aGUgZ2xvYmFsIE9UZWwgdHJhY2VyXG4gKiAgICAoYHRyYWNlLmdldFRyYWNlcig8cGx1Z2luPilgKSwgc28gaXQgbGFuZHMgb24gdGhhdCBOb2RlU0RLIGFuZFxuICogICAgaXMgc2hpcHBlZCB0aHJvdWdoIGl0cyBPVExQIGV4cG9ydGVyLlxuICogMy4gVGhlIE1hc3RyYSBgT3RlbEJyaWRnZWAgQUxTTyBjcmVhdGVzIHJlYWwgT1RlbCBzcGFucyBvbiB0aGUgc2FtZVxuICogICAgZ2xvYmFsIHRyYWNlciBmb3IgZXZlcnkgTWFzdHJhIG9wZXJhdGlvbiAoYWdlbnQgcnVucywgbW9kZWxcbiAqICAgIGNhbGxzLCB0b29sIGludm9jYXRpb25zLCB3b3JrZmxvdyBzdGVwcykuIFRoZXkgaW5oZXJpdCB0aGVcbiAqICAgIGFtYmllbnQgT1RlbCBjb250ZXh0LCBzbyB3aGVuIE1hc3RyYSBpcyBpbnZva2VkIGZyb20gaW5zaWRlIGFuXG4gKiAgICBBcHBLaXQgSFRUUCBzcGFuIHRoZSB0cmFjZSBzdGF5cyBjb25uZWN0ZWQuXG4gKlxuICogTmV0IGVmZmVjdDogTWFzdHJhIHNwYW5zIGdldCBleGFjdGx5IHRoZSB0cmVhdG1lbnQgQXBwS2l0J3NcbiAqIGBhZ2VudHNgIHBsdWdpbiBnZXRzLiBObyBjdXN0b20gT1RMUCBwaXBlbGluZSBsaXZlcyBpbiB0aGlzXG4gKiBwYWNrYWdlOyB0aGUgT1RMUCBlbmRwb2ludCwgaGVhZGVycywgYW5kIHJlc291cmNlIGF0dHJpYnV0ZXMgYXJlXG4gKiBkcml2ZW4gYnkgdGhlIHN0YW5kYXJkIE9UZWwgZW52IHZhcnNcbiAqIChgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYCwgYE9URUxfRVhQT1JURVJfT1RMUF9IRUFERVJTYCxcbiAqIGBPVEVMX1NFUlZJQ0VfTkFNRWAsIGBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVNgLCAuLi4pIGFuZCBjb25zdW1lZFxuICogYnkgQXBwS2l0J3MgYFRlbGVtZXRyeU1hbmFnZXJgLiBTZXQgdGhvc2Ugb25jZSBhbmQgYm90aCBBcHBLaXQgYW5kXG4gKiBNYXN0cmEgc3BhbnMgZW5kIHVwIGF0IHRoZSBzYW1lIGJhY2tlbmQuXG4gKlxuICogV2hlbiBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYCBpcyB1bnNldCB0aGUgYnJpZGdlIGlzIG5vdFxuICogcmVnaXN0ZXJlZCBhdCBhbGwgKHVubGVzcyBgb2JzZXJ2YWJpbGl0eTogdHJ1ZWAgZm9yY2VzIGl0IG9uKSwgc29cbiAqIE1hc3RyYSBkb2VzIG5vdCBlbWl0IGBbT3RlbEJyaWRnZV0gTm8gT1RFTCBzcGFuIGZvdW5kYCB3YXJuaW5ncy5cbiAqXG4gKiBPbiBEYXRhYnJpY2tzIEFwcHMgdGhlIHN1cHBvcnRlZCBzaW5rIGlzIFVuaXR5IENhdGFsb2cgdmlhXG4gKiBgdGVsZW1ldHJ5X2V4cG9ydF9kZXN0aW5hdGlvbnNgICh0aGUgcGxhdGZvcm0gaW5qZWN0cyB0aGUgbG9jYWwgT1RMUFxuICogc2lkZWNhcikuIE1hbmFnZWQgTUxmbG93IGhhcyBubyBPVExQIGluZ2VzdCBlbmRwb2ludCAtIGRvIG5vdCBwb2ludFxuICogYE9URUxfRVhQT1JURVJfT1RMUF8qYCBhdCB0aGUgd29ya3NwYWNlIGhvc3QuIFNldFxuICogYE9URUxfUFJPUEFHQVRPUlM9bm9uZWAgc28gQXBwcyBpbmdyZXNzIGB0cmFjZXBhcmVudGAgZG9lcyBub3QgaGlkZVxuICogZXZlcnkgcmVxdWVzdC1zY29wZWQgcm9vdCBzcGFuIGZyb20gdGhlIFVDIGAqX3RyYWNlX3VuaWZpZWRgIHZpZXcuXG4gKiBDaGF0IHJlcXVlc3QvcmVzcG9uc2Ugb24gdGhhdCByb290IHNwYW4gaXMgc3RhbXBlZCBieVxuICogYHRlbGVtZXRyeS5hdHRhY2hDaGF0VHVyblRlbGVtZXRyeWAgKHNlZSBgdGVsZW1ldHJ5LnRzYCkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHByb2plY3RVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmlsaXR5IH0gZnJvbSBcIkBtYXN0cmEvb2JzZXJ2YWJpbGl0eVwiO1xuaW1wb3J0IHsgT3RlbEJyaWRnZSB9IGZyb20gXCJAbWFzdHJhL290ZWwtYnJpZGdlXCI7XG5pbXBvcnQgeyBwcm9wYWdhdGlvbiwgdHlwZSBUcmFjZXJQcm92aWRlciB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcblxuaW1wb3J0IHsgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7XG4gIGluaXRpYWxpemVBcHBNbGZsb3dUcmFjZUluZm8sXG4gIGluaXRpYWxpemVEaXJlY3RNbGZsb3dUcmFjaW5nLFxuICBtbGZsb3dFbmFibGVkLFxufSBmcm9tIFwiLi9tbGZsb3cudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9vYnNlcnZhYmlsaXR5XCIpO1xuXG5jb25zdCBERUZBVUxUX1NFUlZJQ0VfTkFNRSA9IFwibWFzdHJhXCI7XG5cbi8qKiBPcHRpb25zIGZvciBjb25uZWN0aW5nIE1hc3RyYSBzcGFucyB0byBBcHBLaXQncyBPcGVuVGVsZW1ldHJ5IHBpcGVsaW5lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9ic2VydmFiaWxpdHlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gd2lyZSB0aGUgTWFzdHJhIGBPdGVsQnJpZGdlYC4gTWlycm9yc1xuICAgKiB7QGxpbmsgTWFzdHJhUGx1Z2luQ29uZmlnLm9ic2VydmFiaWxpdHl9OlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChhdXRvKTogb24gb25seSB3aGVuIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIG9yXG4gICAqICAgYE9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlRgIGlzIHNldCAoc2FtZSBzaWduYWwgQXBwS2l0J3NcbiAgICogICBgVGVsZW1ldHJ5TWFuYWdlcmAgdXNlcyB0byByZWdpc3RlciBhIHJlYWwgdHJhY2VyKS4gV2hlbiB1bnNldCxcbiAgICogICBza2lwIHRoZSBicmlkZ2UgZW50aXJlbHkgc28gTWFzdHJhIGRvZXMgbm90IGVtaXRcbiAgICogICBgW090ZWxCcmlkZ2VdIE5vIE9URUwgc3BhbiBmb3VuZGAgd2FybmluZ3Mgb24gdGhlIG5vb3AgdHJhY2VyLlxuICAgKiAtIGB0cnVlYDogZm9yY2Ugb24gZXZlbiB3aXRob3V0IGFuIE9UTFAgZW5kcG9pbnQuXG4gICAqIC0gYGZhbHNlYDogZm9yY2Ugb2ZmLlxuICAgKi9cbiAgZW5hYmxlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTZXJ2aWNlIG5hbWUgYXR0YWNoZWQgdG8gdGhlIE1hc3RyYSBgT2JzZXJ2YWJpbGl0eWAgY29uZmlnLiBVc2VkXG4gICAqIGFzIHRoZSB0cmFjZXIgc2NvcGUgbmFtZSBvbiBicmlkZ2VkIE9UZWwgc3BhbnMgKHRoZSBgc2VydmljZS5uYW1lYFxuICAgKiByZXNvdXJjZSBhdHRyaWJ1dGUgaXMgb3duZWQgYnkgQXBwS2l0J3MgYFRlbGVtZXRyeU1hbmFnZXJgIGluc3RlYWRcbiAgICogLSBpdCByZWFkcyBgT1RFTF9TRVJWSUNFX05BTUVgIC8gYERBVEFCUklDS1NfQVBQX05BTUVgIGF0XG4gICAqIGBjcmVhdGVBcHBgIHRpbWUpLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBwcm9qZWN0IG5hbWUgdGhlbiBgXCJtYXN0cmFcImAuXG4gICAqL1xuICBzZXJ2aWNlTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIGBSZXF1ZXN0Q29udGV4dGAga2V5cyB0byBleHRyYWN0IGFzIHNwYW4gbWV0YWRhdGEgb24gZXZlcnkgTWFzdHJhXG4gICAqIHRyYWNlLiBEZWZhdWx0cyB0byB7QGxpbmsgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVN9ICh1c2VyIGlkLFxuICAgKiB0aHJlYWQgaWQsIHJlcXVlc3QgaWQsIGVudmlyb25tZW50LCBtb2RlbCBvdmVycmlkZSwgLi4uKS5cbiAgICpcbiAgICogU3VwcG9ydHMgZG90IG5vdGF0aW9uIGZvciBuZXN0ZWQgdmFsdWVzIHBlciB0aGUgTWFzdHJhIGRvY3MuXG4gICAqL1xuICByZXF1ZXN0Q29udGV4dEtleXM/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIEFwcEtpdC1vd25lZCB0cmFjZXIgcHJvdmlkZXIgdXNlZCBieSB0aGUgTWFzdHJhIE9UZWwgYnJpZGdlLiAqL1xuICB0cmFjZXJQcm92aWRlcj86IFRyYWNlclByb3ZpZGVyO1xufVxuXG4vKiogVHJ1ZSB3aGVuIEFwcEtpdCdzIGdsb2JhbCBPVGVsIHBpcGVsaW5lIGlzIGNvbmZpZ3VyZWQgdG8gZXhwb3J0IHRyYWNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc090bHBUcmFjaW5nQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIHx8IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQsXG4gICk7XG59XG5cbi8qKlxuICogSG9ub3IgdGhlIHN0YW5kYXJkIG5vLW9wIHByb3BhZ2F0b3Igc2V0dGluZyBhZnRlciBBcHBLaXQgcmVnaXN0ZXJzIGl0c1xuICogdHJhY2VyIHByb3ZpZGVyLiBBcHBLaXQgMC44MSBpbnN0YWxscyBXM0MgcHJvcGFnYXRpb24gdW5jb25kaXRpb25hbGx5LCBzb1xuICogZGlzYWJsaW5nIG9ubHkgdGhlIGdsb2JhbCBwcm9wYWdhdG9yIGtlZXBzIGFzeW5jIHNwYW4gY29udGV4dCBhY3RpdmUgd2hpbGVcbiAqIHByZXZlbnRpbmcgaW5ncmVzcyBleHRyYWN0aW9uIGFuZCBkb3duc3RyZWFtIGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZU90ZWxQcm9wYWdhdGlvbigpOiBib29sZWFuIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk9URUxfUFJPUEFHQVRPUlM/LnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9PSBcIm5vbmVcIikgcmV0dXJuIGZhbHNlO1xuICBwcm9wYWdhdGlvbi5kaXNhYmxlKCk7XG4gIGxvZ2dlci5pbmZvKFwiT3BlblRlbGVtZXRyeSBwcm9wYWdhdGlvbiBkaXNhYmxlZFwiLCB7XG4gICAgc2V0dGluZzogXCJPVEVMX1BST1BBR0FUT1JTPW5vbmVcIixcbiAgfSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgTWFzdHJhIGBPYnNlcnZhYmlsaXR5YCB3aG9zZSBzcGFucyByaWRlIEFwcEtpdCdzIGdsb2JhbFxuICogT1RlbCBwaXBlbGluZSB2aWEgYEBtYXN0cmEvb3RlbC1icmlkZ2VgLlxuICpcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0cmFjaW5nIGlzIG9mZjogZWl0aGVyIHRoZSBjYWxsZXIgcGFzc2VkXG4gKiBgZW5hYmxlZDogZmFsc2VgLCBvciBhdXRvIG1vZGUgZmluZHMgbmVpdGhlciBBcHBLaXQgT1RMUCBub3IgYSBsb2NhbCBNTGZsb3dcbiAqIGV4cGVyaW1lbnQuXG4gKiBTa2lwcGluZyB0aGUgYnJpZGdlIGluIHRoYXQgY2FzZSBhdm9pZHMgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW5cbiAqIGZvdW5kYCBsb2cgc3BhbSBmcm9tIE1hc3RyYSBzcGFucyB0aGF0IGhhdmUgbm8gcGFyZW50IG9uIHRoZSBub29wXG4gKiB0cmFjZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZE9ic2VydmFiaWxpdHkoXG4gIG9wdGlvbnM/OiBCdWlsZE9ic2VydmFiaWxpdHlPcHRpb25zLFxuKTogUHJvbWlzZTxPYnNlcnZhYmlsaXR5IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG90ZWxCYXNlID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UO1xuICBjb25zdCBvdGVsVHJhY2VzT3ZlcnJpZGUgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UO1xuICBjb25zdCBvdGxwQ29uZmlndXJlZCA9IGlzT3RscFRyYWNpbmdDb25maWd1cmVkKCk7XG4gIGNvbnN0IGFwcE1sZmxvd1RyYWNlSW5mbyA9XG4gICAgb3B0aW9ucz8uZW5hYmxlZCA9PT0gZmFsc2UgPyBmYWxzZSA6IGF3YWl0IGluaXRpYWxpemVBcHBNbGZsb3dUcmFjZUluZm8oKTtcbiAgY29uc3QgZGlyZWN0TWxmbG93Q29uZmlndXJlZCA9XG4gICAgb3B0aW9ucz8uZW5hYmxlZCA9PT0gZmFsc2UgfHwgb3RscENvbmZpZ3VyZWQgPyBmYWxzZSA6IGF3YWl0IGluaXRpYWxpemVEaXJlY3RNbGZsb3dUcmFjaW5nKCk7XG4gIGlmIChkaXJlY3RNbGZsb3dDb25maWd1cmVkKSBjb25maWd1cmVPdGVsUHJvcGFnYXRpb24oKTtcbiAgY29uc3QgdHJhY2luZ0NvbmZpZ3VyZWQgPSBvdGxwQ29uZmlndXJlZCB8fCBkaXJlY3RNbGZsb3dDb25maWd1cmVkO1xuXG4gIGlmIChvcHRpb25zPy5lbmFibGVkID09PSBmYWxzZSB8fCAob3B0aW9ucz8uZW5hYmxlZCAhPT0gdHJ1ZSAmJiAhdHJhY2luZ0NvbmZpZ3VyZWQpKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJNYXN0cmEgb2JzZXJ2YWJpbGl0eSBvZmZcIiwge1xuICAgICAgcmVhc29uOlxuICAgICAgICBvcHRpb25zPy5lbmFibGVkID09PSBmYWxzZVxuICAgICAgICAgID8gXCJkaXNhYmxlZCBpbiBwbHVnaW4gY29uZmlnXCJcbiAgICAgICAgICA6IFwibm8gT1RMUCBlbmRwb2ludCBvciBkaXJlY3QgTUxmbG93IGV4cGVyaW1lbnQgY29uZmlndXJlZFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzZXJ2aWNlTmFtZSA9IG9wdGlvbnM/LnNlcnZpY2VOYW1lID8/IChhd2FpdCBwcm9qZWN0VXRpbHMubmFtZSgpKSA/PyBERUZBVUxUX1NFUlZJQ0VfTkFNRTtcbiAgY29uc3QgcmVxdWVzdENvbnRleHRLZXlzID0gWy4uLihvcHRpb25zPy5yZXF1ZXN0Q29udGV4dEtleXMgPz8gVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMpXTtcblxuICAvLyBUaGUgT1RlbCBIVFRQIGV4cG9ydGVyIHRyZWF0cyBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYCBhcyBhXG4gIC8vICpiYXNlKiBVUkwgYW5kIGFwcGVuZHMgdGhlIHNpZ25hbCBwYXRoIGl0c2VsZiAoZS5nLlxuICAvLyBgaHR0cDovL2xvY2FsaG9zdDo2MDA2YCAtPiBgaHR0cDovL2xvY2FsaG9zdDo2MDA2L3YxL3RyYWNlc2ApLiBMb2dcbiAgLy8gdGhlIHJlc29sdmVkIFBPU1QgVVJMIHNvIG1pc2NvbmZpZ3VyYXRpb25zIChlLmcuIGFjY2lkZW50YWxseVxuICAvLyBzZXR0aW5nIHRoZSBiYXNlIHZhciB0byBhIGAvdjEvdHJhY2VzYC1zdWZmaXhlZCBVUkwsIHdoaWNoIG1ha2VzXG4gIC8vIHRoZSBTREsgUE9TVCB0byBgLi4uL3YxL3RyYWNlcy92MS90cmFjZXNgIGFuZCBQaG9lbml4IDQwNHMpIGFyZVxuICAvLyBvYnZpb3VzIGluIHN0YXJ0dXAgb3V0cHV0LlxuICBjb25zdCByZXNvbHZlZFRyYWNlc1VybCA9IG90ZWxUcmFjZXNPdmVycmlkZVxuICAgID8gb3RlbFRyYWNlc092ZXJyaWRlXG4gICAgOiBvdGVsQmFzZVxuICAgICAgPyBgJHtvdGVsQmFzZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfS92MS90cmFjZXNgXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgLy8gYG1sZmxvd0VuYWJsZWRgIGVzdGFibGlzaGVzIHdoZXRoZXIgTUxmbG93IGNhbiBiZSBzZWxlY3RlZCBieSBmZWVkYmFja1xuICAvLyBhdXRvLXJlc29sdXRpb24sIHNvIHRoZSBib290IGxpbmUgcmVwb3J0cyB0aGF0IGF2YWlsYWJpbGl0eSBkaXJlY3RseS5cbiAgY29uc3QgbWxmbG93QXZhaWxhYmxlID0gbWxmbG93RW5hYmxlZCgpO1xuICBsb2dnZXIuaW5mbyhcIk1hc3RyYSBvYnNlcnZhYmlsaXR5IHdpcmVkIHRocm91Z2ggT1RlbCBicmlkZ2VcIiwge1xuICAgIHNlcnZpY2VOYW1lLFxuICAgIHJlcXVlc3RDb250ZXh0S2V5cyxcbiAgICBvdGVsQmFzZTogb3RlbEJhc2UgPz8gXCI8dW5zZXQ+XCIsXG4gICAgcmVzb2x2ZWRUcmFjZXNVcmw6IHJlc29sdmVkVHJhY2VzVXJsID8/IFwiPHVuc2V0PlwiLFxuICAgIG1sZmxvd0F2YWlsYWJsZSxcbiAgICBvYnNlcnZhYmlsaXR5OiBkaXJlY3RNbGZsb3dDb25maWd1cmVkXG4gICAgICA/IFwibWxmbG93LWRpcmVjdFwiXG4gICAgICA6IGFwcE1sZmxvd1RyYWNlSW5mb1xuICAgICAgICA/IFwibWxmbG93LWFwcHNcIlxuICAgICAgICA6IG1sZmxvd0F2YWlsYWJsZVxuICAgICAgICAgID8gXCJtbGZsb3dcIlxuICAgICAgICAgIDogXCJvdGVsXCIsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJpbGl0eSh7XG4gICAgY29uZmlnczoge1xuICAgICAgc2VydmljZU5hbWU6IHtcbiAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgIGJyaWRnZTogbmV3IE90ZWxCcmlkZ2UoXG4gICAgICAgICAgb3B0aW9ucz8udHJhY2VyUHJvdmlkZXIgPyB7IHRyYWNlclByb3ZpZGVyOiBvcHRpb25zLnRyYWNlclByb3ZpZGVyIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICksXG4gICAgICAgIHJlcXVlc3RDb250ZXh0S2V5cyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkNHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQXVCLE1BQU0sb0JBQW9CLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsNkJBQTZCLEVBQzdCLGFBQWEsR0FDZCxNQUFNLGFBQWEsQ0FBQztBQUVyQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFFbEQsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUM7QUF1Q3RDLDhFQUE4RTtBQUM5RSxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sT0FBTyxDQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FDMUYsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNoRixXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEIsTUFB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dkIsT0FBTyxFQUFFO1lBQ1AsV0FBVyxFQUFFO2dCQUNYLFdBQVc7Z0JBQ1gsTUFBTSxFQUFFLElBQUksVUFBVSxDQUNwQixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUM1RTtnQkFDRCxrQkFBa0I7YUFDbkI7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hc3RyYSBvYnNlcnZhYmlsaXR5IHdpcmVkIHRocm91Z2ggdGhlIHNhbWUgT1RlbCBwaXBlbGluZSBBcHBLaXQnc1xuICogYnVpbHQtaW4gcGx1Z2lucyAoZS5nLiBgYWdlbnRzYCkgdXNlLCB2aWEgYEBtYXN0cmEvb3RlbC1icmlkZ2VgLlxuICpcbiAqIEhvdyB0cmFjZXMgZmxvdzpcbiAqXG4gKiAxLiBgQGRhdGFicmlja3MvYXBwa2l0YCBib290cyBhIGdsb2JhbCBgTm9kZVNES2AgaW5cbiAqICAgIGBUZWxlbWV0cnlNYW5hZ2VyLmluaXRpYWxpemUoKWAgKGR1cmluZyBgY3JlYXRlQXBwYCkgd2hlblxuICogICAgYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgaXMgc2V0IGluIHRoZSBwcm9jZXNzIGVudi5cbiAqIDIuIEV2ZXJ5IEFwcEtpdCBwbHVnaW4gc3BhbiAoZS5nLiB0aGUgYGFnZW50c2AgcGx1Z2luJ3NcbiAqICAgIGBleGVjdXRlU3RyZWFtYCkgaXMgY3JlYXRlZCB2aWEgdGhlIGdsb2JhbCBPVGVsIHRyYWNlclxuICogICAgKGB0cmFjZS5nZXRUcmFjZXIoPHBsdWdpbj4pYCksIHNvIGl0IGxhbmRzIG9uIHRoYXQgTm9kZVNESyBhbmRcbiAqICAgIGlzIHNoaXBwZWQgdGhyb3VnaCBpdHMgT1RMUCBleHBvcnRlci5cbiAqIDMuIFRoZSBNYXN0cmEgYE90ZWxCcmlkZ2VgIEFMU08gY3JlYXRlcyByZWFsIE9UZWwgc3BhbnMgb24gdGhlIHNhbWVcbiAqICAgIGdsb2JhbCB0cmFjZXIgZm9yIGV2ZXJ5IE1hc3RyYSBvcGVyYXRpb24gKGFnZW50IHJ1bnMsIG1vZGVsXG4gKiAgICBjYWxscywgdG9vbCBpbnZvY2F0aW9ucywgd29ya2Zsb3cgc3RlcHMpLiBUaGV5IGluaGVyaXQgdGhlXG4gKiAgICBhbWJpZW50IE9UZWwgY29udGV4dCwgc28gd2hlbiBNYXN0cmEgaXMgaW52b2tlZCBmcm9tIGluc2lkZSBhblxuICogICAgQXBwS2l0IEhUVFAgc3BhbiB0aGUgdHJhY2Ugc3RheXMgY29ubmVjdGVkLlxuICpcbiAqIE5ldCBlZmZlY3Q6IGRlcGxveWVkIE1hc3RyYSBzcGFucyBnZXQgZXhhY3RseSB0aGUgdHJlYXRtZW50IEFwcEtpdCdzXG4gKiBgYWdlbnRzYCBwbHVnaW4gZ2V0cy4gTG9jYWwgZGlyZWN0IE1MZmxvdyB0cmFjaW5nIHVzZXMgaXRzIG93biBnbG9iYWxcbiAqIHByb3ZpZGVyIGJlY2F1c2UgQXBwS2l0IGhhcyBubyBPVExQIHByb2Nlc3NvciB0byBzdGFydCB0aGVyZS4gTm8gY3VzdG9tXG4gKiBPVExQIHBpcGVsaW5lIGxpdmVzIGluIHRoaXMgcGFja2FnZTsgdGhlIE9UTFAgZW5kcG9pbnQsIGhlYWRlcnMsIGFuZCByZXNvdXJjZVxuICogYXR0cmlidXRlcyBhcmUgZHJpdmVuIGJ5IHRoZSBzdGFuZGFyZCBPVGVsIGVudiB2YXJzXG4gKiAoYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAsIGBPVEVMX0VYUE9SVEVSX09UTFBfSEVBREVSU2AsXG4gKiBgT1RFTF9TRVJWSUNFX05BTUVgLCBgT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTYCwgLi4uKSBhbmQgY29uc3VtZWRcbiAqIGJ5IEFwcEtpdCdzIGBUZWxlbWV0cnlNYW5hZ2VyYC4gU2V0IHRob3NlIG9uY2UgYW5kIGJvdGggQXBwS2l0IGFuZFxuICogTWFzdHJhIHNwYW5zIGVuZCB1cCBhdCB0aGUgc2FtZSBiYWNrZW5kLlxuICpcbiAqIFdoZW4gYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgaXMgdW5zZXQgdGhlIGJyaWRnZSBpcyBub3RcbiAqIHJlZ2lzdGVyZWQgYXQgYWxsICh1bmxlc3MgYG9ic2VydmFiaWxpdHk6IHRydWVgIGZvcmNlcyBpdCBvbiksIHNvXG4gKiBNYXN0cmEgZG9lcyBub3QgZW1pdCBgW090ZWxCcmlkZ2VdIE5vIE9URUwgc3BhbiBmb3VuZGAgd2FybmluZ3MuXG4gKlxuICogT24gRGF0YWJyaWNrcyBBcHBzIHRoZSBzdXBwb3J0ZWQgc2luayBpcyBVbml0eSBDYXRhbG9nIHZpYVxuICogYHRlbGVtZXRyeV9leHBvcnRfZGVzdGluYXRpb25zYCAodGhlIHBsYXRmb3JtIGluamVjdHMgdGhlIGxvY2FsIE9UTFBcbiAqIHNpZGVjYXIpLiBNYW5hZ2VkIE1MZmxvdyBoYXMgbm8gT1RMUCBpbmdlc3QgZW5kcG9pbnQgLSBkbyBub3QgcG9pbnRcbiAqIGBPVEVMX0VYUE9SVEVSX09UTFBfKmAgYXQgdGhlIHdvcmtzcGFjZSBob3N0LiBTZXRcbiAqIGBPVEVMX1BST1BBR0FUT1JTPW5vbmVgIHNvIEFwcHMgaW5ncmVzcyBgdHJhY2VwYXJlbnRgIGRvZXMgbm90IGhpZGVcbiAqIGV2ZXJ5IHJlcXVlc3Qtc2NvcGVkIHJvb3Qgc3BhbiBmcm9tIHRoZSBVQyBgKl90cmFjZV91bmlmaWVkYCB2aWV3LlxuICogQ2hhdCByZXF1ZXN0L3Jlc3BvbnNlIG9uIHRoYXQgcm9vdCBzcGFuIGlzIHN0YW1wZWQgYnlcbiAqIGB0ZWxlbWV0cnkuYXR0YWNoQ2hhdFR1cm5UZWxlbWV0cnlgIChzZWUgYHRlbGVtZXRyeS50c2ApLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBwcm9qZWN0VXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJpbGl0eSB9IGZyb20gXCJAbWFzdHJhL29ic2VydmFiaWxpdHlcIjtcbmltcG9ydCB7IE90ZWxCcmlkZ2UgfSBmcm9tIFwiQG1hc3RyYS9vdGVsLWJyaWRnZVwiO1xuaW1wb3J0IHsgcHJvcGFnYXRpb24sIHR5cGUgVHJhY2VyUHJvdmlkZXIgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvYXBpXCI7XG5cbmltcG9ydCB7IFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQge1xuICBpbml0aWFsaXplQXBwTWxmbG93VHJhY2VJbmZvLFxuICBpbml0aWFsaXplRGlyZWN0TWxmbG93VHJhY2luZyxcbiAgbWxmbG93RW5hYmxlZCxcbn0gZnJvbSBcIi4vbWxmbG93LnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvb2JzZXJ2YWJpbGl0eVwiKTtcblxuY29uc3QgREVGQVVMVF9TRVJWSUNFX05BTUUgPSBcIm1hc3RyYVwiO1xuXG4vKiogT3B0aW9ucyBmb3IgY29ubmVjdGluZyBNYXN0cmEgc3BhbnMgdG8gQXBwS2l0J3MgT3BlblRlbGVtZXRyeSBwaXBlbGluZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRPYnNlcnZhYmlsaXR5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHdpcmUgdGhlIE1hc3RyYSBgT3RlbEJyaWRnZWAuIE1pcnJvcnNcbiAgICoge0BsaW5rIE1hc3RyYVBsdWdpbkNvbmZpZy5vYnNlcnZhYmlsaXR5fTpcbiAgICpcbiAgICogLSBgdW5kZWZpbmVkYCAoYXV0byk6IG9uIG9ubHkgd2hlbiBgT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UYCBvclxuICAgKiAgIGBPVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UYCBpcyBzZXQgKHNhbWUgc2lnbmFsIEFwcEtpdCdzXG4gICAqICAgYFRlbGVtZXRyeU1hbmFnZXJgIHVzZXMgdG8gcmVnaXN0ZXIgYSByZWFsIHRyYWNlcikuIFdoZW4gdW5zZXQsXG4gICAqICAgc2tpcCB0aGUgYnJpZGdlIGVudGlyZWx5IHNvIE1hc3RyYSBkb2VzIG5vdCBlbWl0XG4gICAqICAgYFtPdGVsQnJpZGdlXSBObyBPVEVMIHNwYW4gZm91bmRgIHdhcm5pbmdzIG9uIHRoZSBub29wIHRyYWNlci5cbiAgICogLSBgdHJ1ZWA6IGZvcmNlIG9uIGV2ZW4gd2l0aG91dCBhbiBPVExQIGVuZHBvaW50LlxuICAgKiAtIGBmYWxzZWA6IGZvcmNlIG9mZi5cbiAgICovXG4gIGVuYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogU2VydmljZSBuYW1lIGF0dGFjaGVkIHRvIHRoZSBNYXN0cmEgYE9ic2VydmFiaWxpdHlgIGNvbmZpZy4gVXNlZFxuICAgKiBhcyB0aGUgdHJhY2VyIHNjb3BlIG5hbWUgb24gYnJpZGdlZCBPVGVsIHNwYW5zICh0aGUgYHNlcnZpY2UubmFtZWBcbiAgICogcmVzb3VyY2UgYXR0cmlidXRlIGlzIG93bmVkIGJ5IEFwcEtpdCdzIGBUZWxlbWV0cnlNYW5hZ2VyYCBpbnN0ZWFkXG4gICAqIC0gaXQgcmVhZHMgYE9URUxfU0VSVklDRV9OQU1FYCAvIGBEQVRBQlJJQ0tTX0FQUF9OQU1FYCBhdFxuICAgKiBgY3JlYXRlQXBwYCB0aW1lKS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gcHJvamVjdCBuYW1lIHRoZW4gYFwibWFzdHJhXCJgLlxuICAgKi9cbiAgc2VydmljZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgUmVxdWVzdENvbnRleHRgIGtleXMgdG8gZXh0cmFjdCBhcyBzcGFuIG1ldGFkYXRhIG9uIGV2ZXJ5IE1hc3RyYVxuICAgKiB0cmFjZS4gRGVmYXVsdHMgdG8ge0BsaW5rIFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTfSAodXNlciBpZCxcbiAgICogdGhyZWFkIGlkLCByZXF1ZXN0IGlkLCBlbnZpcm9ubWVudCwgbW9kZWwgb3ZlcnJpZGUsIC4uLikuXG4gICAqXG4gICAqIFN1cHBvcnRzIGRvdCBub3RhdGlvbiBmb3IgbmVzdGVkIHZhbHVlcyBwZXIgdGhlIE1hc3RyYSBkb2NzLlxuICAgKi9cbiAgcmVxdWVzdENvbnRleHRLZXlzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBBcHBLaXQtb3duZWQgcHJvdmlkZXIgdXNlZCB1bmxlc3MgbG9jYWwgZGlyZWN0IE1MZmxvdyB0cmFjaW5nIG93bnMgdGhlIGdsb2JhbCBwcm92aWRlci4gKi9cbiAgdHJhY2VyUHJvdmlkZXI/OiBUcmFjZXJQcm92aWRlcjtcbn1cblxuLyoqIFRydWUgd2hlbiBBcHBLaXQncyBnbG9iYWwgT1RlbCBwaXBlbGluZSBpcyBjb25maWd1cmVkIHRvIGV4cG9ydCB0cmFjZXMuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPdGxwVHJhY2luZ0NvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCB8fCBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5ULFxuICApO1xufVxuXG4vKipcbiAqIEhvbm9yIHRoZSBzdGFuZGFyZCBuby1vcCBwcm9wYWdhdG9yIHNldHRpbmcgYWZ0ZXIgQXBwS2l0IHJlZ2lzdGVycyBpdHNcbiAqIHRyYWNlciBwcm92aWRlci4gQXBwS2l0IDAuODEgaW5zdGFsbHMgVzNDIHByb3BhZ2F0aW9uIHVuY29uZGl0aW9uYWxseSwgc29cbiAqIGRpc2FibGluZyBvbmx5IHRoZSBnbG9iYWwgcHJvcGFnYXRvciBrZWVwcyBhc3luYyBzcGFuIGNvbnRleHQgYWN0aXZlIHdoaWxlXG4gKiBwcmV2ZW50aW5nIGluZ3Jlc3MgZXh0cmFjdGlvbiBhbmQgZG93bnN0cmVhbSBpbmplY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVPdGVsUHJvcGFnYXRpb24oKTogYm9vbGVhbiB7XG4gIGlmIChwcm9jZXNzLmVudi5PVEVMX1BST1BBR0FUT1JTPy50cmltKCkudG9Mb3dlckNhc2UoKSAhPT0gXCJub25lXCIpIHJldHVybiBmYWxzZTtcbiAgcHJvcGFnYXRpb24uZGlzYWJsZSgpO1xuICBsb2dnZXIuaW5mbyhcIk9wZW5UZWxlbWV0cnkgcHJvcGFnYXRpb24gZGlzYWJsZWRcIiwge1xuICAgIHNldHRpbmc6IFwiT1RFTF9QUk9QQUdBVE9SUz1ub25lXCIsXG4gIH0pO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIE1hc3RyYSBgT2JzZXJ2YWJpbGl0eWAgd2hvc2Ugc3BhbnMgcmlkZSBBcHBLaXQncyBnbG9iYWxcbiAqIE9UZWwgcGlwZWxpbmUgdmlhIGBAbWFzdHJhL290ZWwtYnJpZGdlYC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdHJhY2luZyBpcyBvZmY6IGVpdGhlciB0aGUgY2FsbGVyIHBhc3NlZFxuICogYGVuYWJsZWQ6IGZhbHNlYCwgb3IgYXV0byBtb2RlIGZpbmRzIG5laXRoZXIgQXBwS2l0IE9UTFAgbm9yIGEgbG9jYWwgTUxmbG93XG4gKiBleHBlcmltZW50LlxuICogU2tpcHBpbmcgdGhlIGJyaWRnZSBpbiB0aGF0IGNhc2UgYXZvaWRzIGBbT3RlbEJyaWRnZV0gTm8gT1RFTCBzcGFuXG4gKiBmb3VuZGAgbG9nIHNwYW0gZnJvbSBNYXN0cmEgc3BhbnMgdGhhdCBoYXZlIG5vIHBhcmVudCBvbiB0aGUgbm9vcFxuICogdHJhY2VyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRPYnNlcnZhYmlsaXR5KFxuICBvcHRpb25zPzogQnVpbGRPYnNlcnZhYmlsaXR5T3B0aW9ucyxcbik6IFByb21pc2U8T2JzZXJ2YWJpbGl0eSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBvdGVsQmFzZSA9IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVDtcbiAgY29uc3Qgb3RlbFRyYWNlc092ZXJyaWRlID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVDtcbiAgY29uc3Qgb3RscENvbmZpZ3VyZWQgPSBpc090bHBUcmFjaW5nQ29uZmlndXJlZCgpO1xuICBjb25zdCBhcHBNbGZsb3dUcmFjZUluZm8gPVxuICAgIG9wdGlvbnM/LmVuYWJsZWQgPT09IGZhbHNlID8gZmFsc2UgOiBhd2FpdCBpbml0aWFsaXplQXBwTWxmbG93VHJhY2VJbmZvKCk7XG4gIGNvbnN0IGRpcmVjdE1sZmxvd0NvbmZpZ3VyZWQgPVxuICAgIG9wdGlvbnM/LmVuYWJsZWQgPT09IGZhbHNlIHx8IG90bHBDb25maWd1cmVkID8gZmFsc2UgOiBhd2FpdCBpbml0aWFsaXplRGlyZWN0TWxmbG93VHJhY2luZygpO1xuICBpZiAoZGlyZWN0TWxmbG93Q29uZmlndXJlZCkgY29uZmlndXJlT3RlbFByb3BhZ2F0aW9uKCk7XG4gIGNvbnN0IGJyaWRnZVRyYWNlclByb3ZpZGVyID0gZGlyZWN0TWxmbG93Q29uZmlndXJlZCA/IHVuZGVmaW5lZCA6IG9wdGlvbnM/LnRyYWNlclByb3ZpZGVyO1xuICBjb25zdCB0cmFjaW5nQ29uZmlndXJlZCA9IG90bHBDb25maWd1cmVkIHx8IGRpcmVjdE1sZmxvd0NvbmZpZ3VyZWQ7XG5cbiAgaWYgKG9wdGlvbnM/LmVuYWJsZWQgPT09IGZhbHNlIHx8IChvcHRpb25zPy5lbmFibGVkICE9PSB0cnVlICYmICF0cmFjaW5nQ29uZmlndXJlZCkpIHtcbiAgICBsb2dnZXIuaW5mbyhcIk1hc3RyYSBvYnNlcnZhYmlsaXR5IG9mZlwiLCB7XG4gICAgICByZWFzb246XG4gICAgICAgIG9wdGlvbnM/LmVuYWJsZWQgPT09IGZhbHNlXG4gICAgICAgICAgPyBcImRpc2FibGVkIGluIHBsdWdpbiBjb25maWdcIlxuICAgICAgICAgIDogXCJubyBPVExQIGVuZHBvaW50IG9yIGRpcmVjdCBNTGZsb3cgZXhwZXJpbWVudCBjb25maWd1cmVkXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHNlcnZpY2VOYW1lID0gb3B0aW9ucz8uc2VydmljZU5hbWUgPz8gKGF3YWl0IHByb2plY3RVdGlscy5uYW1lKCkpID8/IERFRkFVTFRfU0VSVklDRV9OQU1FO1xuICBjb25zdCByZXF1ZXN0Q29udGV4dEtleXMgPSBbLi4uKG9wdGlvbnM/LnJlcXVlc3RDb250ZXh0S2V5cyA/PyBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZUyldO1xuXG4gIC8vIFRoZSBPVGVsIEhUVFAgZXhwb3J0ZXIgdHJlYXRzIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGFzIGFcbiAgLy8gKmJhc2UqIFVSTCBhbmQgYXBwZW5kcyB0aGUgc2lnbmFsIHBhdGggaXRzZWxmIChlLmcuXG4gIC8vIGBodHRwOi8vbG9jYWxob3N0OjYwMDZgIC0+IGBodHRwOi8vbG9jYWxob3N0OjYwMDYvdjEvdHJhY2VzYCkuIExvZ1xuICAvLyB0aGUgcmVzb2x2ZWQgUE9TVCBVUkwgc28gbWlzY29uZmlndXJhdGlvbnMgKGUuZy4gYWNjaWRlbnRhbGx5XG4gIC8vIHNldHRpbmcgdGhlIGJhc2UgdmFyIHRvIGEgYC92MS90cmFjZXNgLXN1ZmZpeGVkIFVSTCwgd2hpY2ggbWFrZXNcbiAgLy8gdGhlIFNESyBQT1NUIHRvIGAuLi4vdjEvdHJhY2VzL3YxL3RyYWNlc2AgYW5kIFBob2VuaXggNDA0cykgYXJlXG4gIC8vIG9idmlvdXMgaW4gc3RhcnR1cCBvdXRwdXQuXG4gIGNvbnN0IHJlc29sdmVkVHJhY2VzVXJsID0gb3RlbFRyYWNlc092ZXJyaWRlXG4gICAgPyBvdGVsVHJhY2VzT3ZlcnJpZGVcbiAgICA6IG90ZWxCYXNlXG4gICAgICA/IGAke290ZWxCYXNlLnJlcGxhY2UoL1xcLyskLywgXCJcIil9L3YxL3RyYWNlc2BcbiAgICAgIDogdW5kZWZpbmVkO1xuICAvLyBgbWxmbG93RW5hYmxlZGAgZXN0YWJsaXNoZXMgd2hldGhlciBNTGZsb3cgY2FuIGJlIHNlbGVjdGVkIGJ5IGZlZWRiYWNrXG4gIC8vIGF1dG8tcmVzb2x1dGlvbiwgc28gdGhlIGJvb3QgbGluZSByZXBvcnRzIHRoYXQgYXZhaWxhYmlsaXR5IGRpcmVjdGx5LlxuICBjb25zdCBtbGZsb3dBdmFpbGFibGUgPSBtbGZsb3dFbmFibGVkKCk7XG4gIGxvZ2dlci5pbmZvKFwiTWFzdHJhIG9ic2VydmFiaWxpdHkgd2lyZWQgdGhyb3VnaCBPVGVsIGJyaWRnZVwiLCB7XG4gICAgc2VydmljZU5hbWUsXG4gICAgcmVxdWVzdENvbnRleHRLZXlzLFxuICAgIG90ZWxCYXNlOiBvdGVsQmFzZSA/PyBcIjx1bnNldD5cIixcbiAgICByZXNvbHZlZFRyYWNlc1VybDogcmVzb2x2ZWRUcmFjZXNVcmwgPz8gXCI8dW5zZXQ+XCIsXG4gICAgbWxmbG93QXZhaWxhYmxlLFxuICAgIG9ic2VydmFiaWxpdHk6IGRpcmVjdE1sZmxvd0NvbmZpZ3VyZWRcbiAgICAgID8gXCJtbGZsb3ctZGlyZWN0XCJcbiAgICAgIDogYXBwTWxmbG93VHJhY2VJbmZvXG4gICAgICAgID8gXCJtbGZsb3ctYXBwc1wiXG4gICAgICAgIDogbWxmbG93QXZhaWxhYmxlXG4gICAgICAgICAgPyBcIm1sZmxvd1wiXG4gICAgICAgICAgOiBcIm90ZWxcIixcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmlsaXR5KHtcbiAgICBjb25maWdzOiB7XG4gICAgICBzZXJ2aWNlTmFtZToge1xuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgYnJpZGdlOiBuZXcgT3RlbEJyaWRnZShcbiAgICAgICAgICBicmlkZ2VUcmFjZXJQcm92aWRlciA/IHsgdHJhY2VyUHJvdmlkZXI6IGJyaWRnZVRyYWNlclByb3ZpZGVyIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICksXG4gICAgICAgIHJlcXVlc3RDb250ZXh0S2V5cyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
@@ -111,7 +111,7 @@ export declare class MastraPlugin extends Plugin<MastraPluginConfig> {
111
111
  /** Resolved feedback destination published to server and browser clients. */
112
112
  private resolvedFeedbackMode;
113
113
  /**
114
- * Resolved {@link MastraIdentityMode}: the identity the chat path's Databricks
114
+ * Resolved AppKit identity mode: the identity the chat path's Databricks
115
115
  * calls run as. Read once at setup so an invalid `genieIdentity` fails the app
116
116
  * boot rather than the first request, and so every request agrees.
117
117
  */