@dbx-tools/appkit-mastra 0.9.5 → 0.9.6

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 (49) hide show
  1. package/README.md +16 -18
  2. package/index.ts +1 -3
  3. package/lib/index.d.ts +1 -3
  4. package/lib/index.js +2 -3
  5. package/lib/src/agents.d.ts +2 -2
  6. package/lib/src/agents.js +6 -6
  7. package/lib/src/chart.js +23 -23
  8. package/lib/src/evaluation.js +3 -3
  9. package/lib/src/genie.d.ts +2 -2
  10. package/lib/src/genie.js +20 -20
  11. package/lib/src/memory.js +9 -26
  12. package/lib/src/mlflow.js +4 -4
  13. package/lib/src/model.js +4 -4
  14. package/lib/src/monty-sandbox.js +6 -6
  15. package/lib/src/observability.js +3 -3
  16. package/lib/src/plugin.js +26 -21
  17. package/lib/src/remote-skills.js +20 -30
  18. package/lib/src/sandbox.js +10 -10
  19. package/lib/src/server.js +5 -5
  20. package/lib/src/serving-sanitize.js +12 -9
  21. package/lib/src/serving.js +8 -8
  22. package/lib/src/storage-schema.js +4 -4
  23. package/lib/src/summarize.js +3 -3
  24. package/lib/src/workspaces.js +9 -9
  25. package/lib/src/writer.js +3 -3
  26. package/lib/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +17 -17
  28. package/src/agents.ts +8 -8
  29. package/src/chart.ts +24 -24
  30. package/src/evaluation.ts +2 -2
  31. package/src/genie.ts +20 -20
  32. package/src/memory.ts +11 -27
  33. package/src/mlflow.ts +3 -3
  34. package/src/model.ts +3 -3
  35. package/src/monty-sandbox.ts +5 -5
  36. package/src/observability.ts +2 -2
  37. package/src/plugin.ts +30 -20
  38. package/src/remote-skills.ts +36 -38
  39. package/src/sandbox.ts +9 -9
  40. package/src/server.ts +4 -4
  41. package/src/serving-sanitize.ts +11 -13
  42. package/src/serving.ts +7 -7
  43. package/src/storage-schema.ts +3 -3
  44. package/src/summarize.ts +2 -2
  45. package/src/workspaces.ts +8 -8
  46. package/src/writer.ts +2 -2
  47. package/lib/src/pagination.d.ts +0 -33
  48. package/lib/src/pagination.js +0 -36
  49. package/src/pagination.ts +0 -47
@@ -21,11 +21,14 @@
21
21
  * @module
22
22
  */
23
23
  import { chatToolReasoningEffort, ReasoningEffort } from "@dbx-tools/model-rs";
24
- import { json, string } from "@dbx-tools/shared-core";
25
- import { openaiChat, openaiResponses, } from "@dbx-tools/shared-model";
26
- // Shared with the Responses sanitize path so both wire surfaces agree on what
27
- // counts as a signed reasoning block.
28
- const REASONING_PART_TYPES = openaiResponses.REASONING_TYPES;
24
+ import { json, stringUtils } from "@dbx-tools/shared-core";
25
+ import { openaiChat } from "@dbx-tools/shared-model";
26
+ /** Signed Claude reasoning blocks that cannot be replayed after mutation. */
27
+ const REASONING_PART_TYPES = new Set([
28
+ "reasoning",
29
+ "thinking",
30
+ "redacted_thinking",
31
+ ]);
29
32
  /**
30
33
  * Parse, sanitize, and re-serialize a `/serving-endpoints/...` POST
31
34
  * body. Returns the original string verbatim when the body is not
@@ -79,7 +82,7 @@ export function applyToolReasoningCompatibility(body) {
79
82
  if (!Array.isArray(body.tools) || body.tools.length === 0) {
80
83
  return false;
81
84
  }
82
- const model = string.trimToNull(body.model);
85
+ const model = stringUtils.trimToNull(body.model);
83
86
  if (!model)
84
87
  return false;
85
88
  if (chatToolReasoningEffort(model) !== ReasoningEffort.None)
@@ -179,8 +182,8 @@ export function repairAssistantPrefill(messages) {
179
182
  return false;
180
183
  }
181
184
  const merged = [
182
- string.trimToNull(textFromServingContent(opener.content)),
183
- string.trimToNull(textFromServingContent(last.content)),
185
+ stringUtils.trimToNull(textFromServingContent(opener.content)),
186
+ stringUtils.trimToNull(textFromServingContent(last.content)),
184
187
  ]
185
188
  .filter((s) => s !== null)
186
189
  .join("\n\n");
@@ -323,4 +326,4 @@ function flattenChoiceContent(payload, field) {
323
326
  }
324
327
  return changed;
325
328
  }
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmluZy1zYW5pdGl6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFFSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBR0wsVUFBVSxFQUNWLGVBQWUsR0FDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQWVqQyw4RUFBOEU7QUFDOUUsc0NBQXNDO0FBQ3RDLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQztBQUU3RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQVk7SUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXpCLDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsTUFBTSxhQUFhLEdBQUcsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDO0lBRXhGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBZ0MsQ0FBQztRQUN6RCx1RUFBdUU7UUFDdkUsMEVBQTBFO1FBQzFFLE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFD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QUcsSUFBSSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBhaXJzIHRyYWZmaWMgYmV0d2VlbiBNYXN0cmEgLyB0aGUgQUkgU0RLIGFuZCBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcnc1xuICogT3BlbkFJLWNvbXBhdGlibGUgYC9jaGF0L2NvbXBsZXRpb25zYCByb3V0ZSwgaW4gYm90aCBkaXJlY3Rpb25zLlxuICpcbiAqIE91dGJvdW5kICh7QGxpbmsgcmV3cml0ZVNlcnZpbmdCb2R5fSksIGJlY2F1c2UgdGhlIHRyYW5zY3JpcHQgTWFzdHJhXG4gKiBwZXJzaXN0cyBpcyBub3QgYWx3YXlzIGEgdHJhbnNjcmlwdCB0aGUgcHJvdmlkZXIgd2lsbCBhY2NlcHQgYmFjazpcbiAqIERhdGFicmlja3MtaG9zdGVkIENsYXVkZSByZWplY3RzIHJlcGxheWVkIGV4dGVuZGVkLXRoaW5raW5nIGJsb2NrcyBhbmQgcmVhZHNcbiAqIGEgdHJhaWxpbmcgYXNzaXN0YW50IG1lc3NhZ2UgYXMgYSBwcmVmaWxsIHJlcXVlc3QsIHdoaWxlIEdQVCB0b29sIGNhbGxzIG5lZWRcbiAqIG1vZGVsLXNwZWNpZmljIHJlYXNvbmluZy1lZmZvcnQgbm9ybWFsaXphdGlvbiBvbiBDaGF0IENvbXBsZXRpb25zLlxuICpcbiAqIEluYm91bmQgKHtAbGluayByZXdyaXRlU2VydmluZ1Jlc3BvbnNlQm9keX0gYW5kXG4gKiB7QGxpbmsgcmV3cml0ZVNlcnZpbmdSZXNwb25zZVN0cmVhbX0pLCBiZWNhdXNlIERhdGFicmlja3MtaG9zdGVkIEdlbWluaSBhbmRcbiAqIENsYXVkZSBjYW4gYW5zd2VyIHdpdGggbmF0aXZlIGNvbnRlbnQtcGFydHMgYXJyYXlzIHdoZXJlIHRoZSBPcGVuQUkgY29udHJhY3RcbiAqIChhbmQgdGhlcmVmb3JlIHRoZSBBSSBTREsncyByZXNwb25zZSBzY2hlbWEpIHJlcXVpcmVzIGEgcGxhaW4gc3RyaW5nLlxuICpcbiAqIEV2ZXJ5IHJlcGFpciBoZXJlIGlzIGEgcHJvdmlkZXIgcXVpcmsgcmF0aGVyIHRoYW4gYSBzY2hlbWEgdmlvbGF0aW9uLCBzbyBhbGxcbiAqIG9mIHRoZW0gYXJlIGFwcGxpZWQgb24gdGhlIHdpcmUgKHNlZSB0aGUgYGdsb2JhbFRoaXMuZmV0Y2hgIHdyYXBwZXIgaW5cbiAqIGBtb2RlbC50c2ApIHJhdGhlciB0aGFuIGJ5IGNoYW5naW5nIHdoYXQgdGhlIGFnZW50IHN0b3JlcyBvciB3aGF0IHRoZSBVSVxuICogc2hvd3MuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNoYXRUb29sUmVhc29uaW5nRWZmb3J0LCBSZWFzb25pbmdFZmZvcnQgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbC1yc1wiO1xuaW1wb3J0IHsganNvbiwgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ2hhdE1lc3NhZ2UsXG4gIHR5cGUgQ2hhdFJvbGUsXG4gIG9wZW5haUNoYXQsXG4gIG9wZW5haVJlc3BvbnNlcyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5cbi8qKlxuICogQSBjaGF0IG1lc3NhZ2UgYXMgaXQgYXJyaXZlcyBvbiB0aGUgc2VydmluZyB3aXJlLCBwbHVzIHRoZSBleHRlbmRlZC10aGlua2luZ1xuICogZmllbGRzIERhdGFicmlja3MtaG9zdGVkIENsYXVkZSBhZGRzLiBUaGUgT3BlbkFJLXN0YW5kYXJkIHBhcnQgb2YgdGhlIHNoYXBlXG4gKiBpcyB7QGxpbmsgQ2hhdE1lc3NhZ2V9IGZyb20gYEBkYngtdG9vbHMvc2hhcmVkLW1vZGVsYDsgb25seSB0aGUgcHJvdmlkZXJcbiAqIGV4dGVuc2lvbnMgdGhpcyBtb2R1bGUgc3RyaXBzIGFyZSBkZWNsYXJlZCBoZXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpbmdDaGF0TWVzc2FnZSBleHRlbmRzIENoYXRNZXNzYWdlIHtcbiAgLyoqIE5hcnJvd2VkIHRvIHRoZSByb2xlcyB0aGlzIHJlcGFpciBwYXNzIHJlYXNvbnMgYWJvdXQsIHBsdXMgQ2xhdWRlJ3MgYHJlYXNvbmluZ2AgdHVybi4gKi9cbiAgcm9sZTogQ2hhdFJvbGUgfCBcInJlYXNvbmluZ1wiO1xuICByZWFzb25pbmc/OiB1bmtub3duO1xuICByZWFzb25pbmdfY29udGVudD86IHVua25vd247XG59XG5cbi8vIFNoYXJlZCB3aXRoIHRoZSBSZXNwb25zZXMgc2FuaXRpemUgcGF0aCBzbyBib3RoIHdpcmUgc3VyZmFjZXMgYWdyZWUgb24gd2hhdFxuLy8gY291bnRzIGFzIGEgc2lnbmVkIHJlYXNvbmluZyBibG9jay5cbmNvbnN0IFJFQVNPTklOR19QQVJUX1RZUEVTID0gb3BlbmFpUmVzcG9uc2VzLlJFQVNPTklOR19UWVBFUztcblxuLyoqXG4gKiBQYXJzZSwgc2FuaXRpemUsIGFuZCByZS1zZXJpYWxpemUgYSBgL3NlcnZpbmctZW5kcG9pbnRzLy4uLmAgUE9TVFxuICogYm9keS4gUmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nIHZlcmJhdGltIHdoZW4gdGhlIGJvZHkgaXMgbm90XG4gKiBKU09OIG9yIG5vIHJld3JpdGUgd2FzIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVTZXJ2aW5nQm9keShib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKGJvZHkpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGJvZHk7XG5cbiAgLy8gUnVucyByZWdhcmRsZXNzIG9mIGBtZXNzYWdlc2A6IERhdGFicmlja3MgcmVmdXNlcyB0byBwYXJzZSBhIGJvZHkgY2FycnlpbmdcbiAgLy8gYW4gdW5rbm93biB0b3AtbGV2ZWwgZmllbGQsIHNvIHRoaXMgZmFpbHVyZSBpcyBub3Qgc3BlY2lmaWMgdG8gYSB0cmFuc2NyaXB0LlxuICBjb25zdCB0b29sUmVhc29uaW5nID0gYXBwbHlUb29sUmVhc29uaW5nQ29tcGF0aWJpbGl0eShwYXJzZWQpO1xuICBsZXQgY2hhbmdlZCA9IG9wZW5haUNoYXQuc3RyaXBVbnN1cHBvcnRlZENoYXRGaWVsZHMocGFyc2VkKS5sZW5ndGggPiAwIHx8IHRvb2xSZWFzb25pbmc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkLm1lc3NhZ2VzKSkge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gcGFyc2VkLm1lc3NhZ2VzIGFzIFNlcnZpbmdDaGF0TWVzc2FnZVtdO1xuICAgIC8vIEV2YWx1YXRlZCBlYWdlcmx5LCBub3Qgc2hvcnQtY2lyY3VpdGVkOiBvbmUgdHJhbnNjcmlwdCBjYW4gbmVlZCBib3RoXG4gICAgLy8gcmVhc29uaW5nIGJsb2NrcyBzdHJpcHBlZCBBTkQgYSB0cmFpbGluZyBhc3Npc3RhbnQgcHJlZmlsbCBmb2xkZWQgYmFjay5cbiAgICBjb25zdCBzdHJpcHBlZCA9IHN0cmlwUmVhc29uaW5nRnJvbVNlcnZpbmdNZXNzYWdlcyhtZXNzYWdlcyk7XG4gICAgY29uc3QgcmVwYWlyZWQgPSByZXBhaXJBc3Npc3RhbnRQcmVmaWxsKG1lc3NhZ2VzKTtcbiAgICBjaGFuZ2VkID0gY2hhbmdlZCB8fCBzdHJpcHBlZCB8fCByZXBhaXJlZDtcbiAgfVxuXG4gIHJldHVybiBjaGFuZ2VkID8gSlNPTi5zdHJpbmdpZnkocGFyc2VkKSA6IGJvZHk7XG59XG5cbi8qKiBQcmVwYXJlZCBmZXRjaCBhcmd1bWVudHMgcGx1cyB0aGUgcG9zdC1zYW5pdGl6ZSBib2R5IHVzZWQgZm9yIGRpYWdub3N0aWNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXdyaXR0ZW5TZXJ2aW5nUmVxdWVzdCB7XG4gIGlucHV0OiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMF07XG4gIGluaXQ6IFBhcmFtZXRlcnM8dHlwZW9mIGZldGNoPlsxXTtcbiAgYm9keTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlYWQgYW5kIHJld3JpdGUgYSBzZXJ2aW5nIFBPU1Qgd2hldGhlciBpdHMgSlNPTiBib2R5IGxpdmVzIG9uIGBpbml0YCBvciBvblxuICogYSBgUmVxdWVzdGAuIEEgY2hhbmdlZCBSZXF1ZXN0IGlzIHJlYnVpbHQgd2l0aG91dCBzdGFsZSBieXRlIGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXdyaXRlU2VydmluZ1JlcXVlc3QoXG4gIGlucHV0OiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMF0sXG4gIGluaXQ/OiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMV0sXG4pOiBQcm9taXNlPFJld3JpdHRlblNlcnZpbmdSZXF1ZXN0PiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdCk7XG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXF1ZXN0LmNsb25lKCkudGV4dCgpO1xuICBjb25zdCByZXdyaXR0ZW4gPSByZXdyaXRlU2VydmluZ0JvZHkoYm9keSk7XG4gIGlmIChyZXdyaXR0ZW4gPT09IGJvZHkpIHJldHVybiB7IGlucHV0LCBpbml0LCBib2R5IH07XG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcXVlc3QuaGVhZGVycyk7XG4gIGhlYWRlcnMuZGVsZXRlKFwiY29udGVudC1sZW5ndGhcIik7XG4gIGhlYWRlcnMuZGVsZXRlKFwiY29udGVudC1lbmNvZGluZ1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dDogbmV3IFJlcXVlc3QocmVxdWVzdCwgeyBib2R5OiByZXdyaXR0ZW4sIGhlYWRlcnMgfSksXG4gICAgaW5pdDogdW5kZWZpbmVkLFxuICAgIGJvZHk6IHJld3JpdHRlbixcbiAgfTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgQ2hhdCBDb21wbGV0aW9ucyByZWFzb25pbmcgZm9yIEdQVCBtb2RlbHMgY2FycnlpbmcgZnVuY3Rpb24gdG9vbHMuXG4gKlxuICogR1BUIDUuNiByZXF1aXJlcyByZWFzb25pbmcgZGlzYWJsZWQgZm9yIHRvb2wgY2FsbHMgb24gdGhpcyByb3V0ZSwgc28gYG5vbmVgXG4gKiB3aW5zIG92ZXIgYSBjYWxsZXIvZGVmYXVsdCBlZmZvcnQuIFJlc3BvbnNlcy1vbmx5IG1vZGVscyBhcmUgcm91dGVkIGF3YXlcbiAqIGZyb20gQ2hhdCBDb21wbGV0aW9ucyBiZWZvcmUgdGhpcyBzYW5pdGl6ZXIgcnVucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5VG9vbFJlYXNvbmluZ0NvbXBhdGliaWxpdHkoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJvZHkudG9vbHMpIHx8IGJvZHkudG9vbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG1vZGVsID0gc3RyaW5nLnRyaW1Ub051bGwoYm9keS5tb2RlbCk7XG4gIGlmICghbW9kZWwpIHJldHVybiBmYWxzZTtcbiAgaWYgKGNoYXRUb29sUmVhc29uaW5nRWZmb3J0KG1vZGVsKSAhPT0gUmVhc29uaW5nRWZmb3J0Lk5vbmUpIHJldHVybiBmYWxzZTtcbiAgaWYgKGJvZHkucmVhc29uaW5nX2VmZm9ydCA9PT0gXCJub25lXCIpIHJldHVybiBmYWxzZTtcbiAgYm9keS5yZWFzb25pbmdfZWZmb3J0ID0gXCJub25lXCI7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERyb3AgZXh0ZW5kZWQtdGhpbmtpbmcgLyByZWFzb25pbmcgYmxvY2tzIGZyb20gYSByZXBsYXllZCB0cmFuc2NyaXB0LlxuICpcbiAqIEh5YnJpZCBDbGF1ZGUgZW5kcG9pbnRzIChlLmcuIFNvbm5ldCA0LjUrKSBtYXkgZW1pdCBgcmVhc29uaW5nYCBjb250ZW50XG4gKiBwYXJ0cyBvbiB0aGUgZmlyc3QgdHVybi4gTWFzdHJhIHBlcnNpc3RzIGFuZCByZXBsYXlzIHRoZW0gb24gdGhlIG5leHRcbiAqIGFnZW50IHN0ZXAsIGJ1dCBEYXRhYnJpY2tzLWhvc3RlZCBDbGF1ZGUgcmVqZWN0cyB0aG9zZSBibG9ja3Mgb25cbiAqIG11bHRpLXR1cm4gdG9vbCBjb250aW51YXRpb25zLiBUaGUgVUkgYWxyZWFkeSBjYXB0dXJlZCByZWFzb25pbmcgZm9yXG4gKiBkaXNwbGF5OyBzdHJpcHBpbmcgaGVyZSBrZWVwcyBwcm92aWRlciByZXBsYXkgY29tcGF0aWJsZSB3aXRob3V0XG4gKiBjaGFuZ2luZyB3aGF0IHVzZXJzIHNlZSBpbiB0aGUgY2hhdCBidWJibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFJlYXNvbmluZ0Zyb21TZXJ2aW5nTWVzc2FnZXMobWVzc2FnZXM6IFNlcnZpbmdDaGF0TWVzc2FnZVtdKTogYm9vbGVhbiB7XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2VzW2ldO1xuICAgIGlmICghbXNnKSBjb250aW51ZTtcbiAgICBpZiAobXNnLnJvbGUgPT09IFwicmVhc29uaW5nXCIpIHtcbiAgICAgIG1lc3NhZ2VzLnNwbGljZShpLCAxKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChtc2cucmVhc29uaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBtc2cucmVhc29uaW5nO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChtc2cucmVhc29uaW5nX2NvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIG1zZy5yZWFzb25pbmdfY29udGVudDtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IG9wZW5haUNoYXQuY2hhdENvbnRlbnRQYXJ0cyhtc2cuY29udGVudCk7XG4gICAgaWYgKCFwYXJ0cykgY29udGludWU7XG4gICAgY29uc3QgZmlsdGVyZWQgPSBwYXJ0cy5maWx0ZXIoKHBhcnQpID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSBwYXJ0Py50eXBlO1xuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiICYmIFJFQVNPTklOR19QQVJUX1RZUEVTLmhhcyh0eXBlKSkge1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgaWYgKGZpbHRlcmVkLmxlbmd0aCAhPT0gcGFydHMubGVuZ3RoKSB7XG4gICAgICBtc2cuY29udGVudCA9IGZpbHRlcmVkO1xuICAgIH1cbiAgICBjb25zdCBoYXNUb29sQ2FsbHMgPSBBcnJheS5pc0FycmF5KG1zZy50b29sX2NhbGxzKSAmJiBtc2cudG9vbF9jYWxscy5sZW5ndGggPiAwO1xuICAgIGlmIChtc2cucm9sZSA9PT0gXCJhc3Npc3RhbnRcIiAmJiAhaGFzVG9vbENhbGxzICYmIGlzRW1wdHlTZXJ2aW5nQ29udGVudChtc2cuY29udGVudCkpIHtcbiAgICAgIG1lc3NhZ2VzLnNwbGljZShpLCAxKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hhbmdlZDtcbn1cblxuLyoqXG4gKiBSZXBhaXIgYSBNYXN0cmEvQUkgU0RLIG1lc3NhZ2UgcmVwbGF5IHRoYXQgRGF0YWJyaWNrcy1ob3N0ZWQgQ2xhdWRlXG4gKiByZWplY3RzIHdpdGggYFwiVGhpcyBtb2RlbCBkb2VzIG5vdCBzdXBwb3J0IGFzc2lzdGFudCBtZXNzYWdlXG4gKiBwcmVmaWxsLiBUaGUgY29udmVyc2F0aW9uIG11c3QgZW5kIHdpdGggYSB1c2VyIG1lc3NhZ2UuXCJgLlxuICpcbiAqIFRoZSBidWcgcGF0dGVybjogd2hlbiBhbiBhc3Npc3RhbnQgdHVybiBzdHJlYW1zIHRleHQgKmFuZCogYVxuICogYHRvb2xfY2FsbGAsIHRoZSBBSSBTREsgcGVyc2lzdHMgdGhlbSBhcyB0d28gc2VwYXJhdGUgYXNzaXN0YW50XG4gKiBlbnRyaWVzICh0ZXh0LW9ubHkgYW5kIHRvb2wtY2FsbC1vbmx5KS4gT24gdGhlIG5leHQgYWdlbnQgc3RlcCB0aGVcbiAqIHRvb2wtY2FsbCBlbnRyeSBpcyByZXBsYXllZCAqYmVmb3JlKiB0aGUgdG9vbCByZXN1bHQgYW5kIHRoZVxuICogdGV4dCBlbnRyeSBpcyByZXBsYXllZCAqYWZ0ZXIqIGl0LCBzbyB0aGUgY29udmVyc2F0aW9uIGVuZHMgd2l0aCBhXG4gKiB0cmFpbGluZyBhc3Npc3RhbnQgdGV4dCBtZXNzYWdlLiBBbnRocm9waWMgaW50ZXJwcmV0cyB0aGF0IGFzIGFcbiAqIHByZWZpbGwgcmVxdWVzdCBhbmQgcmVqZWN0cyBpdCBvbiBEYXRhYnJpY2tzICh0aGUgdXBzdHJlYW0gQmVkcm9ja1xuICogcm91dGUgZGlzYWxsb3dzIHByZWZpbGwpLlxuICpcbiAqIEZpeDogd2hlbiB0aGUgbGFzdCBtZXNzYWdlIGlzIGFuIGFzc2lzdGFudCB0ZXh0IHdpdGggbm8gYHRvb2xfY2FsbHNgXG4gKiBhbmQgdGhlIGNoYWluIGltbWVkaWF0ZWx5IGJlZm9yZSBpdCBpcyBgYXNzaXN0YW50KHRvb2xfY2FsbHM9Li4uKWBcbiAqIGZvbGxvd2VkIG9ubHkgYnkgYHRvb2woLi4uKWAgcmVzdWx0cywgZm9sZCB0aGUgdHJhaWxpbmcgdGV4dCBiYWNrXG4gKiBpbnRvIHRoZSBgY29udGVudGAgb2YgdGhhdCBvcGVuaW5nIGFzc2lzdGFudCBhbmQgZHJvcCB0aGUgZHVwbGljYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwYWlyQXNzaXN0YW50UHJlZmlsbChtZXNzYWdlczogU2VydmluZ0NoYXRNZXNzYWdlW10pOiBib29sZWFuIHtcbiAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA8IDIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbGFzdCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdO1xuICBpZiAoIWxhc3QgfHwgbGFzdC5yb2xlICE9PSBcImFzc2lzdGFudFwiIHx8IChsYXN0LnRvb2xfY2FsbHMgJiYgbGFzdC50b29sX2NhbGxzLmxlbmd0aCA+IDApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAyO1xuICB3aGlsZSAoaSA+PSAwICYmIG1lc3NhZ2VzW2ldPy5yb2xlID09PSBcInRvb2xcIikgaS0tO1xuICBpZiAoaSA8IDApIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgb3BlbmVyID0gbWVzc2FnZXNbaV07XG4gIGlmIChcbiAgICAhb3BlbmVyIHx8XG4gICAgb3BlbmVyLnJvbGUgIT09IFwiYXNzaXN0YW50XCIgfHxcbiAgICAhb3BlbmVyLnRvb2xfY2FsbHMgfHxcbiAgICBvcGVuZXIudG9vbF9jYWxscy5sZW5ndGggPT09IDBcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbWVyZ2VkID0gW1xuICAgIHN0cmluZy50cmltVG9OdWxsKHRleHRGcm9tU2VydmluZ0NvbnRlbnQob3BlbmVyLmNvbnRlbnQpKSxcbiAgICBzdHJpbmcudHJpbVRvTnVsbCh0ZXh0RnJvbVNlcnZpbmdDb250ZW50KGxhc3QuY29udGVudCkpLFxuICBdXG4gICAgLmZpbHRlcigocyk6IHMgaXMgc3RyaW5nID0+IHMgIT09IG51bGwpXG4gICAgLmpvaW4oXCJcXG5cXG5cIik7XG4gIG9wZW5lci5jb250ZW50ID0gbWVyZ2VkO1xuICBtZXNzYWdlcy5wb3AoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRmxhdHRlbiBjb250ZW50IHRvIHRoZSBwcm9zZSBhIGh1bWFuIHdvdWxkIHJlYWQ6IHRleHQgcGFydHMgb25seSwgc2VwYXJhdGVkXG4gKiBieSBibGFuayBsaW5lcywgc2luY2UgdGhlIHJlc3VsdCBpcyBzcGxpY2VkIGludG8gYW5vdGhlciB0dXJuJ3MgbWVzc2FnZSBib2R5LlxuICovXG5mdW5jdGlvbiB0ZXh0RnJvbVNlcnZpbmdDb250ZW50KGNvbnRlbnQ6IFNlcnZpbmdDaGF0TWVzc2FnZVtcImNvbnRlbnRcIl0pOiBzdHJpbmcge1xuICByZXR1cm4gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFRvVGV4dChjb250ZW50LCB7IHNlcGFyYXRvcjogXCJcXG5cXG5cIiwgdHlwZXM6IFtcInRleHRcIl0gfSk7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHR1cm4gY2FycmllcyBub3RoaW5nIHdvcnRoIHJlcGxheWluZy4gRGVsaWJlcmF0ZWx5IHN0cmljdGVyIHRoYW5cbiAqIFwiaGFzIG5vIHRleHRcIjogYSBwYXJ0IG9mIGFueSBvdGhlciB0eXBlIChhbiBpbWFnZSwgYSBjYWNoZSBtYXJrZXIpIGNvdW50cyBhc1xuICogY29udGVudCwgc28gYSBtZXNzYWdlIGhvbGRpbmcgb25lIGlzIGtlcHQgZXZlbiB0aG91Z2ggaXQgaGFzIG5vIHByb3NlLlxuICovXG5mdW5jdGlvbiBpc0VtcHR5U2VydmluZ0NvbnRlbnQoY29udGVudDogU2VydmluZ0NoYXRNZXNzYWdlW1wiY29udGVudFwiXSk6IGJvb2xlYW4ge1xuICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSByZXR1cm4gY29udGVudC50cmltKCkubGVuZ3RoID09PSAwO1xuICBjb25zdCBwYXJ0cyA9IG9wZW5haUNoYXQuY2hhdENvbnRlbnRQYXJ0cyhjb250ZW50KTtcbiAgaWYgKCFwYXJ0cykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBwYXJ0cy5ldmVyeSgocGFydCkgPT4ge1xuICAgIGlmIChwYXJ0Py50eXBlID09PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBwYXJ0LnRleHQgIT09IFwic3RyaW5nXCIgfHwgcGFydC50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2UsIHNhbml0aXplLCBhbmQgcmUtc2VyaWFsaXplIGEgYC9zZXJ2aW5nLWVuZHBvaW50cy8uLi5gIG5vbi1zdHJlYW1pbmdcbiAqIEpTT04gUkVTUE9OU0UgYm9keS4gUmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nIHZlcmJhdGltIHdoZW4gdGhlIGJvZHkgaXNcbiAqIG5vdCBKU09OIG9yIG5vIHJld3JpdGUgd2FzIG5lZWRlZCwgbWlycm9yaW5nXG4gKiB7QGxpbmsgcmV3cml0ZVNlcnZpbmdCb2R5fSBvbiB0aGUgcmVxdWVzdCBzaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZVNlcnZpbmdSZXNwb25zZUJvZHkoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZVJlY29yZChib2R5KTtcbiAgaWYgKCFwYXJzZWQpIHJldHVybiBib2R5O1xuICByZXR1cm4gZmxhdHRlbkNob2ljZU1lc3NhZ2VDb250ZW50KHBhcnNlZCkgPyBKU09OLnN0cmluZ2lmeShwYXJzZWQpIDogYm9keTtcbn1cblxuLyoqXG4gKiBSZXBhaXIgYXJyYXktdmFsdWVkIGBjaG9pY2VzW10uZGVsdGEuY29udGVudGAgaW5zaWRlIGFuIE9wZW5BSSBTU0Ugc3RyZWFtXG4gKiB3aXRob3V0IGJ1ZmZlcmluZyB0aGUgcmVzcG9uc2UuIFRoZSBkZWNvZGVyIHJldGFpbnMgcGFydGlhbCBsaW5lcyBhY3Jvc3NcbiAqIGFyYml0cmFyeSBuZXR3b3JrIGNodW5rIGJvdW5kYXJpZXM7IGVhY2ggY29tcGxldGUgYGRhdGE6YCBsaW5lIGlzIHBhcnNlZCBhbmRcbiAqIHJlLWVuY29kZWQgb25seSB3aGVuIGl0cyBjb250ZW50IG5lZWRzIG5vcm1hbGl6YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtKFxuICBib2R5OiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pixcbik6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGxldCBidWZmZXIgPSBcIlwiO1xuXG4gIHJldHVybiBib2R5LnBpcGVUaHJvdWdoKFxuICAgIG5ldyBUcmFuc2Zvcm1TdHJlYW08VWludDhBcnJheSwgVWludDhBcnJheT4oe1xuICAgICAgdHJhbnNmb3JtKGNodW5rLCBjb250cm9sbGVyKSB7XG4gICAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSk7XG4gICAgICAgIGxldCBuZXdsaW5lID0gYnVmZmVyLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICAgIHdoaWxlIChuZXdsaW5lID49IDApIHtcbiAgICAgICAgICBjb25zdCBsaW5lID0gYnVmZmVyLnNsaWNlKDAsIG5ld2xpbmUgKyAxKTtcbiAgICAgICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UobmV3bGluZSArIDEpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShlbmNvZGVyLmVuY29kZShyZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtTGluZShsaW5lKSkpO1xuICAgICAgICAgIG5ld2xpbmUgPSBidWZmZXIuaW5kZXhPZihcIlxcblwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZsdXNoKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKCk7XG4gICAgICAgIGlmIChidWZmZXIpIGNvbnRyb2xsZXIuZW5xdWV1ZShlbmNvZGVyLmVuY29kZShyZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtTGluZShidWZmZXIpKSk7XG4gICAgICB9LFxuICAgIH0pLFxuICApO1xufVxuXG4vKiogTm9ybWFsaXplIG9uZSBTU0UgbGluZSB3aGlsZSBwcmVzZXJ2aW5nIGl0cyBgZGF0YTpgIHNwYWNpbmcgYW5kIGxpbmUgZW5kaW5nLiAqL1xuZnVuY3Rpb24gcmV3cml0ZVNlcnZpbmdSZXNwb25zZVN0cmVhbUxpbmUobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZUVuZGluZyA9IGxpbmUuZW5kc1dpdGgoXCJcXHJcXG5cIikgPyBcIlxcclxcblwiIDogbGluZS5lbmRzV2l0aChcIlxcblwiKSA/IFwiXFxuXCIgOiBcIlwiO1xuICBjb25zdCBjb250ZW50ID0gbGluZUVuZGluZyA/IGxpbmUuc2xpY2UoMCwgLWxpbmVFbmRpbmcubGVuZ3RoKSA6IGxpbmU7XG4gIGNvbnN0IG1hdGNoID0gL14oZGF0YTpcXHMqKSguKikkLy5leGVjKGNvbnRlbnQpO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzJdID09PSBcIltET05FXVwiKSByZXR1cm4gbGluZTtcblxuICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKG1hdGNoWzJdKTtcbiAgaWYgKCFwYXJzZWQgfHwgIWZsYXR0ZW5DaG9pY2VEZWx0YUNvbnRlbnQocGFyc2VkKSkgcmV0dXJuIGxpbmU7XG4gIHJldHVybiBgJHttYXRjaFsxXX0ke0pTT04uc3RyaW5naWZ5KHBhcnNlZCl9JHtsaW5lRW5kaW5nfWA7XG59XG5cbi8qKlxuICogQ29sbGFwc2UgYSBzdHJ1Y3R1cmVkIGBjaG9pY2VzW10ubWVzc2FnZS5jb250ZW50YCBhcnJheSB0byB0aGUgcGxhaW4gc3RyaW5nXG4gKiB0aGUgT3BlbkFJIENoYXQgQ29tcGxldGlvbnMgY29udHJhY3Qgc3BlY2lmaWVzLlxuICpcbiAqIERhdGFicmlja3MtaG9zdGVkIEdlbWluaSBhbnN3ZXJzIGEgbm9uLXN0cmVhbWluZyBgL2NoYXQvY29tcGxldGlvbnNgIGNhbGxcbiAqIHdpdGggdGhlIEdlbWluaS1uYXRpdmUgcGFydHMgc2hhcGU6XG4gKlxuICogYGBganNvblxuICogXCJjb250ZW50XCI6IFt7IFwidHlwZVwiOiBcInRleHRcIiwgXCJ0ZXh0XCI6IFwiLi4uXCIsIFwidGhvdWdodFNpZ25hdHVyZVwiOiBcIi4uLlwiIH1dXG4gKiBgYGBcbiAqXG4gKiBgQGFpLXNkay9vcGVuYWktY29tcGF0aWJsZWAgdmFsaWRhdGVzIHRoZSByZXNwb25zZSBhZ2FpbnN0IHRoZSBPcGVuQUlcbiAqIHNjaGVtYSwgd2hlcmUgYGNvbnRlbnRgIGlzIGEgbnVsbGFibGUgc3RyaW5nLCBzbyBpdCB0aHJvd3NcbiAqIGBUeXBlIHZhbGlkYXRpb24gZmFpbGVkOiAuLi4gZXhwZWN0ZWQgc3RyaW5nLCByZWNlaXZlZCBhcnJheWAgYW5kIHRoZSB3aG9sZVxuICogY2FsbCBmYWlscyAoYEFJX0FQSUNhbGxFcnJvcjogSW52YWxpZCBKU09OIHJlc3BvbnNlYCBvbiBhbiBIVFRQIDIwMCkuIE1hc3RyYVxuICogdXNlcyBgZG9HZW5lcmF0ZWAgZm9yIGl0cyBzaWRlIGNhbGxzLCBzbyB0aGUgdmlzaWJsZSBzeW1wdG9tIGlzXG4gKiBgRXJyb3IgZ2VuZXJhdGluZyB0aXRsZWAgLSBldmVyeSB0aHJlYWQga2VlcHMgaXRzIHBsYWNlaG9sZGVyIG5hbWUuXG4gKlxuICogRmxhdHRlbmluZyBvbiB0aGUgd2lyZSBrZWVwcyB0aGUgcmVwYWlyIGluIG9uZSBwbGFjZTogbmVpdGhlciB0aGUgYWdlbnQnc1xuICogc3RvcmVkIHRyYW5zY3JpcHQgbm9yIHRoZSBVSSBoYXMgdG8ga25vdyB0aGUgcHJvdmlkZXIgZW1pdHRlZCBwYXJ0cy4gQW55XG4gKiBub24tdGV4dCBwYXJ0IChhIHJlYXNvbmluZyBibG9jaywgYHRob3VnaHRTaWduYXR1cmVgLW9ubHkgZW50cnksIG9yIGlubGluZVxuICogaW1hZ2UpIGNvbnRyaWJ1dGVzIG5vdGhpbmcsIG1hdGNoaW5nIHtAbGluayBvcGVuYWlDaGF0LmNoYXRDb250ZW50VG9UZXh0fSxcbiAqIGFuZCBhbiBhbGwtcGFydHMtZW1wdHkgbWVzc2FnZSBmbGF0dGVucyB0byBgXCJcImAgcmF0aGVyIHRoYW4gYmVpbmcgZHJvcHBlZCwgc29cbiAqIGBmaW5pc2hfcmVhc29uYCBhbmQgYHVzYWdlYCBzdGlsbCByb3VuZC10cmlwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkNob2ljZU1lc3NhZ2VDb250ZW50KHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gIHJldHVybiBmbGF0dGVuQ2hvaWNlQ29udGVudChwYXlsb2FkLCBcIm1lc3NhZ2VcIik7XG59XG5cbi8qKlxuICogQ29sbGFwc2Ugc3RydWN0dXJlZCBzdHJlYW1pbmcgYGNob2ljZXNbXS5kZWx0YS5jb250ZW50YCBhcnJheXMgdG8gc3RyaW5ncy5cbiAqIENsYXVkZSByZWFzb25pbmctb25seSBjaHVua3MgYmVjb21lIGFuIGVtcHR5IGNvbnRlbnQgZGVsdGEgd2hpbGUgdGV4dCBwYXJ0c1xuICogYXJlIGNvbmNhdGVuYXRlZCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5DaG9pY2VEZWx0YUNvbnRlbnQocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYXR0ZW5DaG9pY2VDb250ZW50KHBheWxvYWQsIFwiZGVsdGFcIik7XG59XG5cbi8qKiBTaGFyZWQgY2hvaWNlIHdhbGtlciBmb3IgYnVmZmVyZWQgYG1lc3NhZ2VgIGFuZCBzdHJlYW1pbmcgYGRlbHRhYCBwYXlsb2Fkcy4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5DaG9pY2VDb250ZW50KFxuICBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZmllbGQ6IFwibWVzc2FnZVwiIHwgXCJkZWx0YVwiLFxuKTogYm9vbGVhbiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXlsb2FkLmNob2ljZXMpKSByZXR1cm4gZmFsc2U7XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGZvciAoY29uc3QgY2hvaWNlIG9mIHBheWxvYWQuY2hvaWNlcykge1xuICAgIGlmICghY2hvaWNlIHx8IHR5cGVvZiBjaG9pY2UgIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IChjaG9pY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2ZpZWxkXTtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCB0eXBlb2YgY29udGFpbmVyICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICBjb25zdCB0YXJnZXQgPSBjb250YWluZXIgYXMgeyBjb250ZW50PzogdW5rbm93biB9O1xuICAgIGNvbnN0IHBhcnRzID0gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFBhcnRzKHRhcmdldC5jb250ZW50KTtcbiAgICBpZiAoIXBhcnRzKSBjb250aW51ZTtcbiAgICB0YXJnZXQuY29udGVudCA9IG9wZW5haUNoYXQuY2hhdENvbnRlbnRUb1RleHQocGFydHMsIHsgdHlwZXM6IFtcInRleHRcIl0gfSk7XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGNoYW5nZWQ7XG59XG4iXX0=
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmluZy1zYW5pdGl6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFFSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQW1DLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBZXRGLDZFQUE2RTtBQUM3RSxNQUFNLG9CQUFvQixHQUF3QixJQUFJLEdBQUcsQ0FBQztJQUN4RCxXQUFXO0lBQ1gsVUFBVTtJQUNWLG1CQUFtQjtDQUNwQixDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQVk7SUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXpCLDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsTUFBTSxhQUFhLEdBQUcsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDO0lBRXhGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBZ0MsQ0FBQztRQUN6RCx1RUFBdUU7UUFDdkUsMEVBQTBFO1FBQzFFLE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELE1BQU0s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QUMsQ0FBQztRQUMxRSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBhaXJzIHRyYWZmaWMgYmV0d2VlbiBNYXN0cmEgLyB0aGUgQUkgU0RLIGFuZCBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcnc1xuICogT3BlbkFJLWNvbXBhdGlibGUgYC9jaGF0L2NvbXBsZXRpb25zYCByb3V0ZSwgaW4gYm90aCBkaXJlY3Rpb25zLlxuICpcbiAqIE91dGJvdW5kICh7QGxpbmsgcmV3cml0ZVNlcnZpbmdCb2R5fSksIGJlY2F1c2UgdGhlIHRyYW5zY3JpcHQgTWFzdHJhXG4gKiBwZXJzaXN0cyBpcyBub3QgYWx3YXlzIGEgdHJhbnNjcmlwdCB0aGUgcHJvdmlkZXIgd2lsbCBhY2NlcHQgYmFjazpcbiAqIERhdGFicmlja3MtaG9zdGVkIENsYXVkZSByZWplY3RzIHJlcGxheWVkIGV4dGVuZGVkLXRoaW5raW5nIGJsb2NrcyBhbmQgcmVhZHNcbiAqIGEgdHJhaWxpbmcgYXNzaXN0YW50IG1lc3NhZ2UgYXMgYSBwcmVmaWxsIHJlcXVlc3QsIHdoaWxlIEdQVCB0b29sIGNhbGxzIG5lZWRcbiAqIG1vZGVsLXNwZWNpZmljIHJlYXNvbmluZy1lZmZvcnQgbm9ybWFsaXphdGlvbiBvbiBDaGF0IENvbXBsZXRpb25zLlxuICpcbiAqIEluYm91bmQgKHtAbGluayByZXdyaXRlU2VydmluZ1Jlc3BvbnNlQm9keX0gYW5kXG4gKiB7QGxpbmsgcmV3cml0ZVNlcnZpbmdSZXNwb25zZVN0cmVhbX0pLCBiZWNhdXNlIERhdGFicmlja3MtaG9zdGVkIEdlbWluaSBhbmRcbiAqIENsYXVkZSBjYW4gYW5zd2VyIHdpdGggbmF0aXZlIGNvbnRlbnQtcGFydHMgYXJyYXlzIHdoZXJlIHRoZSBPcGVuQUkgY29udHJhY3RcbiAqIChhbmQgdGhlcmVmb3JlIHRoZSBBSSBTREsncyByZXNwb25zZSBzY2hlbWEpIHJlcXVpcmVzIGEgcGxhaW4gc3RyaW5nLlxuICpcbiAqIEV2ZXJ5IHJlcGFpciBoZXJlIGlzIGEgcHJvdmlkZXIgcXVpcmsgcmF0aGVyIHRoYW4gYSBzY2hlbWEgdmlvbGF0aW9uLCBzbyBhbGxcbiAqIG9mIHRoZW0gYXJlIGFwcGxpZWQgb24gdGhlIHdpcmUgKHNlZSB0aGUgYGdsb2JhbFRoaXMuZmV0Y2hgIHdyYXBwZXIgaW5cbiAqIGBtb2RlbC50c2ApIHJhdGhlciB0aGFuIGJ5IGNoYW5naW5nIHdoYXQgdGhlIGFnZW50IHN0b3JlcyBvciB3aGF0IHRoZSBVSVxuICogc2hvd3MuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNoYXRUb29sUmVhc29uaW5nRWZmb3J0LCBSZWFzb25pbmdFZmZvcnQgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbC1yc1wiO1xuaW1wb3J0IHsganNvbiwgc3RyaW5nVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgdHlwZSBDaGF0TWVzc2FnZSwgdHlwZSBDaGF0Um9sZSwgb3BlbmFpQ2hhdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuXG4vKipcbiAqIEEgY2hhdCBtZXNzYWdlIGFzIGl0IGFycml2ZXMgb24gdGhlIHNlcnZpbmcgd2lyZSwgcGx1cyB0aGUgZXh0ZW5kZWQtdGhpbmtpbmdcbiAqIGZpZWxkcyBEYXRhYnJpY2tzLWhvc3RlZCBDbGF1ZGUgYWRkcy4gVGhlIE9wZW5BSS1zdGFuZGFyZCBwYXJ0IG9mIHRoZSBzaGFwZVxuICogaXMge0BsaW5rIENoYXRNZXNzYWdlfSBmcm9tIGBAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbGA7IG9ubHkgdGhlIHByb3ZpZGVyXG4gKiBleHRlbnNpb25zIHRoaXMgbW9kdWxlIHN0cmlwcyBhcmUgZGVjbGFyZWQgaGVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aW5nQ2hhdE1lc3NhZ2UgZXh0ZW5kcyBDaGF0TWVzc2FnZSB7XG4gIC8qKiBOYXJyb3dlZCB0byB0aGUgcm9sZXMgdGhpcyByZXBhaXIgcGFzcyByZWFzb25zIGFib3V0LCBwbHVzIENsYXVkZSdzIGByZWFzb25pbmdgIHR1cm4uICovXG4gIHJvbGU6IENoYXRSb2xlIHwgXCJyZWFzb25pbmdcIjtcbiAgcmVhc29uaW5nPzogdW5rbm93bjtcbiAgcmVhc29uaW5nX2NvbnRlbnQ/OiB1bmtub3duO1xufVxuXG4vKiogU2lnbmVkIENsYXVkZSByZWFzb25pbmcgYmxvY2tzIHRoYXQgY2Fubm90IGJlIHJlcGxheWVkIGFmdGVyIG11dGF0aW9uLiAqL1xuY29uc3QgUkVBU09OSU5HX1BBUlRfVFlQRVM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgXCJyZWFzb25pbmdcIixcbiAgXCJ0aGlua2luZ1wiLFxuICBcInJlZGFjdGVkX3RoaW5raW5nXCIsXG5dKTtcblxuLyoqXG4gKiBQYXJzZSwgc2FuaXRpemUsIGFuZCByZS1zZXJpYWxpemUgYSBgL3NlcnZpbmctZW5kcG9pbnRzLy4uLmAgUE9TVFxuICogYm9keS4gUmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nIHZlcmJhdGltIHdoZW4gdGhlIGJvZHkgaXMgbm90XG4gKiBKU09OIG9yIG5vIHJld3JpdGUgd2FzIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJld3JpdGVTZXJ2aW5nQm9keShib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKGJvZHkpO1xuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGJvZHk7XG5cbiAgLy8gUnVucyByZWdhcmRsZXNzIG9mIGBtZXNzYWdlc2A6IERhdGFicmlja3MgcmVmdXNlcyB0byBwYXJzZSBhIGJvZHkgY2FycnlpbmdcbiAgLy8gYW4gdW5rbm93biB0b3AtbGV2ZWwgZmllbGQsIHNvIHRoaXMgZmFpbHVyZSBpcyBub3Qgc3BlY2lmaWMgdG8gYSB0cmFuc2NyaXB0LlxuICBjb25zdCB0b29sUmVhc29uaW5nID0gYXBwbHlUb29sUmVhc29uaW5nQ29tcGF0aWJpbGl0eShwYXJzZWQpO1xuICBsZXQgY2hhbmdlZCA9IG9wZW5haUNoYXQuc3RyaXBVbnN1cHBvcnRlZENoYXRGaWVsZHMocGFyc2VkKS5sZW5ndGggPiAwIHx8IHRvb2xSZWFzb25pbmc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkLm1lc3NhZ2VzKSkge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gcGFyc2VkLm1lc3NhZ2VzIGFzIFNlcnZpbmdDaGF0TWVzc2FnZVtdO1xuICAgIC8vIEV2YWx1YXRlZCBlYWdlcmx5LCBub3Qgc2hvcnQtY2lyY3VpdGVkOiBvbmUgdHJhbnNjcmlwdCBjYW4gbmVlZCBib3RoXG4gICAgLy8gcmVhc29uaW5nIGJsb2NrcyBzdHJpcHBlZCBBTkQgYSB0cmFpbGluZyBhc3Npc3RhbnQgcHJlZmlsbCBmb2xkZWQgYmFjay5cbiAgICBjb25zdCBzdHJpcHBlZCA9IHN0cmlwUmVhc29uaW5nRnJvbVNlcnZpbmdNZXNzYWdlcyhtZXNzYWdlcyk7XG4gICAgY29uc3QgcmVwYWlyZWQgPSByZXBhaXJBc3Npc3RhbnRQcmVmaWxsKG1lc3NhZ2VzKTtcbiAgICBjaGFuZ2VkID0gY2hhbmdlZCB8fCBzdHJpcHBlZCB8fCByZXBhaXJlZDtcbiAgfVxuXG4gIHJldHVybiBjaGFuZ2VkID8gSlNPTi5zdHJpbmdpZnkocGFyc2VkKSA6IGJvZHk7XG59XG5cbi8qKiBQcmVwYXJlZCBmZXRjaCBhcmd1bWVudHMgcGx1cyB0aGUgcG9zdC1zYW5pdGl6ZSBib2R5IHVzZWQgZm9yIGRpYWdub3N0aWNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXdyaXR0ZW5TZXJ2aW5nUmVxdWVzdCB7XG4gIGlucHV0OiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMF07XG4gIGluaXQ6IFBhcmFtZXRlcnM8dHlwZW9mIGZldGNoPlsxXTtcbiAgYm9keTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlYWQgYW5kIHJld3JpdGUgYSBzZXJ2aW5nIFBPU1Qgd2hldGhlciBpdHMgSlNPTiBib2R5IGxpdmVzIG9uIGBpbml0YCBvciBvblxuICogYSBgUmVxdWVzdGAuIEEgY2hhbmdlZCBSZXF1ZXN0IGlzIHJlYnVpbHQgd2l0aG91dCBzdGFsZSBieXRlIGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXdyaXRlU2VydmluZ1JlcXVlc3QoXG4gIGlucHV0OiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMF0sXG4gIGluaXQ/OiBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMV0sXG4pOiBQcm9taXNlPFJld3JpdHRlblNlcnZpbmdSZXF1ZXN0PiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdCk7XG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXF1ZXN0LmNsb25lKCkudGV4dCgpO1xuICBjb25zdCByZXdyaXR0ZW4gPSByZXdyaXRlU2VydmluZ0JvZHkoYm9keSk7XG4gIGlmIChyZXdyaXR0ZW4gPT09IGJvZHkpIHJldHVybiB7IGlucHV0LCBpbml0LCBib2R5IH07XG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHJlcXVlc3QuaGVhZGVycyk7XG4gIGhlYWRlcnMuZGVsZXRlKFwiY29udGVudC1sZW5ndGhcIik7XG4gIGhlYWRlcnMuZGVsZXRlKFwiY29udGVudC1lbmNvZGluZ1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dDogbmV3IFJlcXVlc3QocmVxdWVzdCwgeyBib2R5OiByZXdyaXR0ZW4sIGhlYWRlcnMgfSksXG4gICAgaW5pdDogdW5kZWZpbmVkLFxuICAgIGJvZHk6IHJld3JpdHRlbixcbiAgfTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgQ2hhdCBDb21wbGV0aW9ucyByZWFzb25pbmcgZm9yIEdQVCBtb2RlbHMgY2FycnlpbmcgZnVuY3Rpb24gdG9vbHMuXG4gKlxuICogR1BUIDUuNiByZXF1aXJlcyByZWFzb25pbmcgZGlzYWJsZWQgZm9yIHRvb2wgY2FsbHMgb24gdGhpcyByb3V0ZSwgc28gYG5vbmVgXG4gKiB3aW5zIG92ZXIgYSBjYWxsZXIvZGVmYXVsdCBlZmZvcnQuIFJlc3BvbnNlcy1vbmx5IG1vZGVscyBhcmUgcm91dGVkIGF3YXlcbiAqIGZyb20gQ2hhdCBDb21wbGV0aW9ucyBiZWZvcmUgdGhpcyBzYW5pdGl6ZXIgcnVucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5VG9vbFJlYXNvbmluZ0NvbXBhdGliaWxpdHkoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJvZHkudG9vbHMpIHx8IGJvZHkudG9vbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG1vZGVsID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChib2R5Lm1vZGVsKTtcbiAgaWYgKCFtb2RlbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoY2hhdFRvb2xSZWFzb25pbmdFZmZvcnQobW9kZWwpICE9PSBSZWFzb25pbmdFZmZvcnQuTm9uZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYm9keS5yZWFzb25pbmdfZWZmb3J0ID09PSBcIm5vbmVcIikgcmV0dXJuIGZhbHNlO1xuICBib2R5LnJlYXNvbmluZ19lZmZvcnQgPSBcIm5vbmVcIjtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRHJvcCBleHRlbmRlZC10aGlua2luZyAvIHJlYXNvbmluZyBibG9ja3MgZnJvbSBhIHJlcGxheWVkIHRyYW5zY3JpcHQuXG4gKlxuICogSHlicmlkIENsYXVkZSBlbmRwb2ludHMgKGUuZy4gU29ubmV0IDQuNSspIG1heSBlbWl0IGByZWFzb25pbmdgIGNvbnRlbnRcbiAqIHBhcnRzIG9uIHRoZSBmaXJzdCB0dXJuLiBNYXN0cmEgcGVyc2lzdHMgYW5kIHJlcGxheXMgdGhlbSBvbiB0aGUgbmV4dFxuICogYWdlbnQgc3RlcCwgYnV0IERhdGFicmlja3MtaG9zdGVkIENsYXVkZSByZWplY3RzIHRob3NlIGJsb2NrcyBvblxuICogbXVsdGktdHVybiB0b29sIGNvbnRpbnVhdGlvbnMuIFRoZSBVSSBhbHJlYWR5IGNhcHR1cmVkIHJlYXNvbmluZyBmb3JcbiAqIGRpc3BsYXk7IHN0cmlwcGluZyBoZXJlIGtlZXBzIHByb3ZpZGVyIHJlcGxheSBjb21wYXRpYmxlIHdpdGhvdXRcbiAqIGNoYW5naW5nIHdoYXQgdXNlcnMgc2VlIGluIHRoZSBjaGF0IGJ1YmJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwUmVhc29uaW5nRnJvbVNlcnZpbmdNZXNzYWdlcyhtZXNzYWdlczogU2VydmluZ0NoYXRNZXNzYWdlW10pOiBib29sZWFuIHtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZXNbaV07XG4gICAgaWYgKCFtc2cpIGNvbnRpbnVlO1xuICAgIGlmIChtc2cucm9sZSA9PT0gXCJyZWFzb25pbmdcIikge1xuICAgICAgbWVzc2FnZXMuc3BsaWNlKGksIDEpO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG1zZy5yZWFzb25pbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIG1zZy5yZWFzb25pbmc7XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG1zZy5yZWFzb25pbmdfY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgbXNnLnJlYXNvbmluZ19jb250ZW50O1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFBhcnRzKG1zZy5jb250ZW50KTtcbiAgICBpZiAoIXBhcnRzKSBjb250aW51ZTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHBhcnRzLmZpbHRlcigocGFydCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IHBhcnQ/LnR5cGU7XG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgUkVBU09OSU5HX1BBUlRfVFlQRVMuaGFzKHR5cGUpKSB7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBpZiAoZmlsdGVyZWQubGVuZ3RoICE9PSBwYXJ0cy5sZW5ndGgpIHtcbiAgICAgIG1zZy5jb250ZW50ID0gZmlsdGVyZWQ7XG4gICAgfVxuICAgIGNvbnN0IGhhc1Rvb2xDYWxscyA9IEFycmF5LmlzQXJyYXkobXNnLnRvb2xfY2FsbHMpICYmIG1zZy50b29sX2NhbGxzLmxlbmd0aCA+IDA7XG4gICAgaWYgKG1zZy5yb2xlID09PSBcImFzc2lzdGFudFwiICYmICFoYXNUb29sQ2FsbHMgJiYgaXNFbXB0eVNlcnZpbmdDb250ZW50KG1zZy5jb250ZW50KSkge1xuICAgICAgbWVzc2FnZXMuc3BsaWNlKGksIDEpO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VkO1xufVxuXG4vKipcbiAqIFJlcGFpciBhIE1hc3RyYS9BSSBTREsgbWVzc2FnZSByZXBsYXkgdGhhdCBEYXRhYnJpY2tzLWhvc3RlZCBDbGF1ZGVcbiAqIHJlamVjdHMgd2l0aCBgXCJUaGlzIG1vZGVsIGRvZXMgbm90IHN1cHBvcnQgYXNzaXN0YW50IG1lc3NhZ2VcbiAqIHByZWZpbGwuIFRoZSBjb252ZXJzYXRpb24gbXVzdCBlbmQgd2l0aCBhIHVzZXIgbWVzc2FnZS5cImAuXG4gKlxuICogVGhlIGJ1ZyBwYXR0ZXJuOiB3aGVuIGFuIGFzc2lzdGFudCB0dXJuIHN0cmVhbXMgdGV4dCAqYW5kKiBhXG4gKiBgdG9vbF9jYWxsYCwgdGhlIEFJIFNESyBwZXJzaXN0cyB0aGVtIGFzIHR3byBzZXBhcmF0ZSBhc3Npc3RhbnRcbiAqIGVudHJpZXMgKHRleHQtb25seSBhbmQgdG9vbC1jYWxsLW9ubHkpLiBPbiB0aGUgbmV4dCBhZ2VudCBzdGVwIHRoZVxuICogdG9vbC1jYWxsIGVudHJ5IGlzIHJlcGxheWVkICpiZWZvcmUqIHRoZSB0b29sIHJlc3VsdCBhbmQgdGhlXG4gKiB0ZXh0IGVudHJ5IGlzIHJlcGxheWVkICphZnRlciogaXQsIHNvIHRoZSBjb252ZXJzYXRpb24gZW5kcyB3aXRoIGFcbiAqIHRyYWlsaW5nIGFzc2lzdGFudCB0ZXh0IG1lc3NhZ2UuIEFudGhyb3BpYyBpbnRlcnByZXRzIHRoYXQgYXMgYVxuICogcHJlZmlsbCByZXF1ZXN0IGFuZCByZWplY3RzIGl0IG9uIERhdGFicmlja3MgKHRoZSB1cHN0cmVhbSBCZWRyb2NrXG4gKiByb3V0ZSBkaXNhbGxvd3MgcHJlZmlsbCkuXG4gKlxuICogRml4OiB3aGVuIHRoZSBsYXN0IG1lc3NhZ2UgaXMgYW4gYXNzaXN0YW50IHRleHQgd2l0aCBubyBgdG9vbF9jYWxsc2BcbiAqIGFuZCB0aGUgY2hhaW4gaW1tZWRpYXRlbHkgYmVmb3JlIGl0IGlzIGBhc3Npc3RhbnQodG9vbF9jYWxscz0uLi4pYFxuICogZm9sbG93ZWQgb25seSBieSBgdG9vbCguLi4pYCByZXN1bHRzLCBmb2xkIHRoZSB0cmFpbGluZyB0ZXh0IGJhY2tcbiAqIGludG8gdGhlIGBjb250ZW50YCBvZiB0aGF0IG9wZW5pbmcgYXNzaXN0YW50IGFuZCBkcm9wIHRoZSBkdXBsaWNhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBhaXJBc3Npc3RhbnRQcmVmaWxsKG1lc3NhZ2VzOiBTZXJ2aW5nQ2hhdE1lc3NhZ2VbXSk6IGJvb2xlYW4ge1xuICBpZiAobWVzc2FnZXMubGVuZ3RoIDwgMikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBsYXN0ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gIGlmICghbGFzdCB8fCBsYXN0LnJvbGUgIT09IFwiYXNzaXN0YW50XCIgfHwgKGxhc3QudG9vbF9jYWxscyAmJiBsYXN0LnRvb2xfY2FsbHMubGVuZ3RoID4gMCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgaSA9IG1lc3NhZ2VzLmxlbmd0aCAtIDI7XG4gIHdoaWxlIChpID49IDAgJiYgbWVzc2FnZXNbaV0/LnJvbGUgPT09IFwidG9vbFwiKSBpLS07XG4gIGlmIChpIDwgMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBvcGVuZXIgPSBtZXNzYWdlc1tpXTtcbiAgaWYgKFxuICAgICFvcGVuZXIgfHxcbiAgICBvcGVuZXIucm9sZSAhPT0gXCJhc3Npc3RhbnRcIiB8fFxuICAgICFvcGVuZXIudG9vbF9jYWxscyB8fFxuICAgIG9wZW5lci50b29sX2NhbGxzLmxlbmd0aCA9PT0gMFxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBtZXJnZWQgPSBbXG4gICAgc3RyaW5nVXRpbHMudHJpbVRvTnVsbCh0ZXh0RnJvbVNlcnZpbmdDb250ZW50KG9wZW5lci5jb250ZW50KSksXG4gICAgc3RyaW5nVXRpbHMudHJpbVRvTnVsbCh0ZXh0RnJvbVNlcnZpbmdDb250ZW50KGxhc3QuY29udGVudCkpLFxuICBdXG4gICAgLmZpbHRlcigocyk6IHMgaXMgc3RyaW5nID0+IHMgIT09IG51bGwpXG4gICAgLmpvaW4oXCJcXG5cXG5cIik7XG4gIG9wZW5lci5jb250ZW50ID0gbWVyZ2VkO1xuICBtZXNzYWdlcy5wb3AoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRmxhdHRlbiBjb250ZW50IHRvIHRoZSBwcm9zZSBhIGh1bWFuIHdvdWxkIHJlYWQ6IHRleHQgcGFydHMgb25seSwgc2VwYXJhdGVkXG4gKiBieSBibGFuayBsaW5lcywgc2luY2UgdGhlIHJlc3VsdCBpcyBzcGxpY2VkIGludG8gYW5vdGhlciB0dXJuJ3MgbWVzc2FnZSBib2R5LlxuICovXG5mdW5jdGlvbiB0ZXh0RnJvbVNlcnZpbmdDb250ZW50KGNvbnRlbnQ6IFNlcnZpbmdDaGF0TWVzc2FnZVtcImNvbnRlbnRcIl0pOiBzdHJpbmcge1xuICByZXR1cm4gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFRvVGV4dChjb250ZW50LCB7IHNlcGFyYXRvcjogXCJcXG5cXG5cIiwgdHlwZXM6IFtcInRleHRcIl0gfSk7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHR1cm4gY2FycmllcyBub3RoaW5nIHdvcnRoIHJlcGxheWluZy4gRGVsaWJlcmF0ZWx5IHN0cmljdGVyIHRoYW5cbiAqIFwiaGFzIG5vIHRleHRcIjogYSBwYXJ0IG9mIGFueSBvdGhlciB0eXBlIChhbiBpbWFnZSwgYSBjYWNoZSBtYXJrZXIpIGNvdW50cyBhc1xuICogY29udGVudCwgc28gYSBtZXNzYWdlIGhvbGRpbmcgb25lIGlzIGtlcHQgZXZlbiB0aG91Z2ggaXQgaGFzIG5vIHByb3NlLlxuICovXG5mdW5jdGlvbiBpc0VtcHR5U2VydmluZ0NvbnRlbnQoY29udGVudDogU2VydmluZ0NoYXRNZXNzYWdlW1wiY29udGVudFwiXSk6IGJvb2xlYW4ge1xuICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSByZXR1cm4gY29udGVudC50cmltKCkubGVuZ3RoID09PSAwO1xuICBjb25zdCBwYXJ0cyA9IG9wZW5haUNoYXQuY2hhdENvbnRlbnRQYXJ0cyhjb250ZW50KTtcbiAgaWYgKCFwYXJ0cykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBwYXJ0cy5ldmVyeSgocGFydCkgPT4ge1xuICAgIGlmIChwYXJ0Py50eXBlID09PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBwYXJ0LnRleHQgIT09IFwic3RyaW5nXCIgfHwgcGFydC50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2UsIHNhbml0aXplLCBhbmQgcmUtc2VyaWFsaXplIGEgYC9zZXJ2aW5nLWVuZHBvaW50cy8uLi5gIG5vbi1zdHJlYW1pbmdcbiAqIEpTT04gUkVTUE9OU0UgYm9keS4gUmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nIHZlcmJhdGltIHdoZW4gdGhlIGJvZHkgaXNcbiAqIG5vdCBKU09OIG9yIG5vIHJld3JpdGUgd2FzIG5lZWRlZCwgbWlycm9yaW5nXG4gKiB7QGxpbmsgcmV3cml0ZVNlcnZpbmdCb2R5fSBvbiB0aGUgcmVxdWVzdCBzaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV3cml0ZVNlcnZpbmdSZXNwb25zZUJvZHkoYm9keTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZVJlY29yZChib2R5KTtcbiAgaWYgKCFwYXJzZWQpIHJldHVybiBib2R5O1xuICByZXR1cm4gZmxhdHRlbkNob2ljZU1lc3NhZ2VDb250ZW50KHBhcnNlZCkgPyBKU09OLnN0cmluZ2lmeShwYXJzZWQpIDogYm9keTtcbn1cblxuLyoqXG4gKiBSZXBhaXIgYXJyYXktdmFsdWVkIGBjaG9pY2VzW10uZGVsdGEuY29udGVudGAgaW5zaWRlIGFuIE9wZW5BSSBTU0Ugc3RyZWFtXG4gKiB3aXRob3V0IGJ1ZmZlcmluZyB0aGUgcmVzcG9uc2UuIFRoZSBkZWNvZGVyIHJldGFpbnMgcGFydGlhbCBsaW5lcyBhY3Jvc3NcbiAqIGFyYml0cmFyeSBuZXR3b3JrIGNodW5rIGJvdW5kYXJpZXM7IGVhY2ggY29tcGxldGUgYGRhdGE6YCBsaW5lIGlzIHBhcnNlZCBhbmRcbiAqIHJlLWVuY29kZWQgb25seSB3aGVuIGl0cyBjb250ZW50IG5lZWRzIG5vcm1hbGl6YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtKFxuICBib2R5OiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pixcbik6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGxldCBidWZmZXIgPSBcIlwiO1xuXG4gIHJldHVybiBib2R5LnBpcGVUaHJvdWdoKFxuICAgIG5ldyBUcmFuc2Zvcm1TdHJlYW08VWludDhBcnJheSwgVWludDhBcnJheT4oe1xuICAgICAgdHJhbnNmb3JtKGNodW5rLCBjb250cm9sbGVyKSB7XG4gICAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSk7XG4gICAgICAgIGxldCBuZXdsaW5lID0gYnVmZmVyLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICAgIHdoaWxlIChuZXdsaW5lID49IDApIHtcbiAgICAgICAgICBjb25zdCBsaW5lID0gYnVmZmVyLnNsaWNlKDAsIG5ld2xpbmUgKyAxKTtcbiAgICAgICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UobmV3bGluZSArIDEpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShlbmNvZGVyLmVuY29kZShyZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtTGluZShsaW5lKSkpO1xuICAgICAgICAgIG5ld2xpbmUgPSBidWZmZXIuaW5kZXhPZihcIlxcblwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZsdXNoKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKCk7XG4gICAgICAgIGlmIChidWZmZXIpIGNvbnRyb2xsZXIuZW5xdWV1ZShlbmNvZGVyLmVuY29kZShyZXdyaXRlU2VydmluZ1Jlc3BvbnNlU3RyZWFtTGluZShidWZmZXIpKSk7XG4gICAgICB9LFxuICAgIH0pLFxuICApO1xufVxuXG4vKiogTm9ybWFsaXplIG9uZSBTU0UgbGluZSB3aGlsZSBwcmVzZXJ2aW5nIGl0cyBgZGF0YTpgIHNwYWNpbmcgYW5kIGxpbmUgZW5kaW5nLiAqL1xuZnVuY3Rpb24gcmV3cml0ZVNlcnZpbmdSZXNwb25zZVN0cmVhbUxpbmUobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZUVuZGluZyA9IGxpbmUuZW5kc1dpdGgoXCJcXHJcXG5cIikgPyBcIlxcclxcblwiIDogbGluZS5lbmRzV2l0aChcIlxcblwiKSA/IFwiXFxuXCIgOiBcIlwiO1xuICBjb25zdCBjb250ZW50ID0gbGluZUVuZGluZyA/IGxpbmUuc2xpY2UoMCwgLWxpbmVFbmRpbmcubGVuZ3RoKSA6IGxpbmU7XG4gIGNvbnN0IG1hdGNoID0gL14oZGF0YTpcXHMqKSguKikkLy5leGVjKGNvbnRlbnQpO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzJdID09PSBcIltET05FXVwiKSByZXR1cm4gbGluZTtcblxuICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlUmVjb3JkKG1hdGNoWzJdKTtcbiAgaWYgKCFwYXJzZWQgfHwgIWZsYXR0ZW5DaG9pY2VEZWx0YUNvbnRlbnQocGFyc2VkKSkgcmV0dXJuIGxpbmU7XG4gIHJldHVybiBgJHttYXRjaFsxXX0ke0pTT04uc3RyaW5naWZ5KHBhcnNlZCl9JHtsaW5lRW5kaW5nfWA7XG59XG5cbi8qKlxuICogQ29sbGFwc2UgYSBzdHJ1Y3R1cmVkIGBjaG9pY2VzW10ubWVzc2FnZS5jb250ZW50YCBhcnJheSB0byB0aGUgcGxhaW4gc3RyaW5nXG4gKiB0aGUgT3BlbkFJIENoYXQgQ29tcGxldGlvbnMgY29udHJhY3Qgc3BlY2lmaWVzLlxuICpcbiAqIERhdGFicmlja3MtaG9zdGVkIEdlbWluaSBhbnN3ZXJzIGEgbm9uLXN0cmVhbWluZyBgL2NoYXQvY29tcGxldGlvbnNgIGNhbGxcbiAqIHdpdGggdGhlIEdlbWluaS1uYXRpdmUgcGFydHMgc2hhcGU6XG4gKlxuICogYGBganNvblxuICogXCJjb250ZW50XCI6IFt7IFwidHlwZVwiOiBcInRleHRcIiwgXCJ0ZXh0XCI6IFwiLi4uXCIsIFwidGhvdWdodFNpZ25hdHVyZVwiOiBcIi4uLlwiIH1dXG4gKiBgYGBcbiAqXG4gKiBgQGFpLXNkay9vcGVuYWktY29tcGF0aWJsZWAgdmFsaWRhdGVzIHRoZSByZXNwb25zZSBhZ2FpbnN0IHRoZSBPcGVuQUlcbiAqIHNjaGVtYSwgd2hlcmUgYGNvbnRlbnRgIGlzIGEgbnVsbGFibGUgc3RyaW5nLCBzbyBpdCB0aHJvd3NcbiAqIGBUeXBlIHZhbGlkYXRpb24gZmFpbGVkOiAuLi4gZXhwZWN0ZWQgc3RyaW5nLCByZWNlaXZlZCBhcnJheWAgYW5kIHRoZSB3aG9sZVxuICogY2FsbCBmYWlscyAoYEFJX0FQSUNhbGxFcnJvcjogSW52YWxpZCBKU09OIHJlc3BvbnNlYCBvbiBhbiBIVFRQIDIwMCkuIE1hc3RyYVxuICogdXNlcyBgZG9HZW5lcmF0ZWAgZm9yIGl0cyBzaWRlIGNhbGxzLCBzbyB0aGUgdmlzaWJsZSBzeW1wdG9tIGlzXG4gKiBgRXJyb3IgZ2VuZXJhdGluZyB0aXRsZWAgLSBldmVyeSB0aHJlYWQga2VlcHMgaXRzIHBsYWNlaG9sZGVyIG5hbWUuXG4gKlxuICogRmxhdHRlbmluZyBvbiB0aGUgd2lyZSBrZWVwcyB0aGUgcmVwYWlyIGluIG9uZSBwbGFjZTogbmVpdGhlciB0aGUgYWdlbnQnc1xuICogc3RvcmVkIHRyYW5zY3JpcHQgbm9yIHRoZSBVSSBoYXMgdG8ga25vdyB0aGUgcHJvdmlkZXIgZW1pdHRlZCBwYXJ0cy4gQW55XG4gKiBub24tdGV4dCBwYXJ0IChhIHJlYXNvbmluZyBibG9jaywgYHRob3VnaHRTaWduYXR1cmVgLW9ubHkgZW50cnksIG9yIGlubGluZVxuICogaW1hZ2UpIGNvbnRyaWJ1dGVzIG5vdGhpbmcsIG1hdGNoaW5nIHtAbGluayBvcGVuYWlDaGF0LmNoYXRDb250ZW50VG9UZXh0fSxcbiAqIGFuZCBhbiBhbGwtcGFydHMtZW1wdHkgbWVzc2FnZSBmbGF0dGVucyB0byBgXCJcImAgcmF0aGVyIHRoYW4gYmVpbmcgZHJvcHBlZCwgc29cbiAqIGBmaW5pc2hfcmVhc29uYCBhbmQgYHVzYWdlYCBzdGlsbCByb3VuZC10cmlwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkNob2ljZU1lc3NhZ2VDb250ZW50KHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gIHJldHVybiBmbGF0dGVuQ2hvaWNlQ29udGVudChwYXlsb2FkLCBcIm1lc3NhZ2VcIik7XG59XG5cbi8qKlxuICogQ29sbGFwc2Ugc3RydWN0dXJlZCBzdHJlYW1pbmcgYGNob2ljZXNbXS5kZWx0YS5jb250ZW50YCBhcnJheXMgdG8gc3RyaW5ncy5cbiAqIENsYXVkZSByZWFzb25pbmctb25seSBjaHVua3MgYmVjb21lIGFuIGVtcHR5IGNvbnRlbnQgZGVsdGEgd2hpbGUgdGV4dCBwYXJ0c1xuICogYXJlIGNvbmNhdGVuYXRlZCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5DaG9pY2VEZWx0YUNvbnRlbnQocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYXR0ZW5DaG9pY2VDb250ZW50KHBheWxvYWQsIFwiZGVsdGFcIik7XG59XG5cbi8qKiBTaGFyZWQgY2hvaWNlIHdhbGtlciBmb3IgYnVmZmVyZWQgYG1lc3NhZ2VgIGFuZCBzdHJlYW1pbmcgYGRlbHRhYCBwYXlsb2Fkcy4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5DaG9pY2VDb250ZW50KFxuICBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZmllbGQ6IFwibWVzc2FnZVwiIHwgXCJkZWx0YVwiLFxuKTogYm9vbGVhbiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXlsb2FkLmNob2ljZXMpKSByZXR1cm4gZmFsc2U7XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGZvciAoY29uc3QgY2hvaWNlIG9mIHBheWxvYWQuY2hvaWNlcykge1xuICAgIGlmICghY2hvaWNlIHx8IHR5cGVvZiBjaG9pY2UgIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IChjaG9pY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2ZpZWxkXTtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCB0eXBlb2YgY29udGFpbmVyICE9PSBcIm9iamVjdFwiKSBjb250aW51ZTtcbiAgICBjb25zdCB0YXJnZXQgPSBjb250YWluZXIgYXMgeyBjb250ZW50PzogdW5rbm93biB9O1xuICAgIGNvbnN0IHBhcnRzID0gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFBhcnRzKHRhcmdldC5jb250ZW50KTtcbiAgICBpZiAoIXBhcnRzKSBjb250aW51ZTtcbiAgICB0YXJnZXQuY29udGVudCA9IG9wZW5haUNoYXQuY2hhdENvbnRlbnRUb1RleHQocGFydHMsIHsgdHlwZXM6IFtcInRleHRcIl0gfSk7XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGNoYW5nZWQ7XG59XG4iXX0=
@@ -10,8 +10,8 @@
10
10
  *
11
11
  * @module
12
12
  */
13
- import { serving as modelServing } from "@dbx-tools/model";
14
- import { string } from "@dbx-tools/shared-core";
13
+ import { modelCatalog } from "@dbx-tools/model";
14
+ import { stringUtils } from "@dbx-tools/shared-core";
15
15
  import { override } from "@dbx-tools/shared-mastra";
16
16
  /**
17
17
  * `RequestContext` key under which {@link MastraServer} stores the
@@ -36,20 +36,20 @@ export const MASTRA_MODEL_OVERRIDE_KEY = "mastra__model_override";
36
36
  export function extractModelOverride(req) {
37
37
  const headers = req.headers;
38
38
  if (headers) {
39
- const headerVal = string.firstNonEmpty(headers[override.MODEL_OVERRIDE_HEADER] ??
39
+ const headerVal = stringUtils.firstNonEmpty(headers[override.MODEL_OVERRIDE_HEADER] ??
40
40
  headers[override.MODEL_OVERRIDE_HEADER.toLowerCase()]);
41
41
  if (headerVal)
42
42
  return headerVal;
43
43
  }
44
44
  if (req.query) {
45
- const queryVal = string.firstNonEmpty(req.query[override.MODEL_OVERRIDE_QUERY]);
45
+ const queryVal = stringUtils.firstNonEmpty(req.query[override.MODEL_OVERRIDE_QUERY]);
46
46
  if (queryVal)
47
47
  return queryVal;
48
48
  }
49
49
  if (req.body && typeof req.body === "object") {
50
50
  const record = req.body;
51
51
  for (const field of override.MODEL_OVERRIDE_BODY_FIELDS) {
52
- const bodyVal = string.firstNonEmpty(record[field]);
52
+ const bodyVal = stringUtils.firstNonEmpty(record[field]);
53
53
  if (bodyVal)
54
54
  return bodyVal;
55
55
  }
@@ -68,11 +68,11 @@ export function extractModelOverride(req) {
68
68
  */
69
69
  export function resolveServingConfig(config) {
70
70
  return {
71
- ttlMs: config.modelCacheTtlMs ?? modelServing.DEFAULT_MODEL_CACHE_TTL_MS,
72
- threshold: config.modelFuzzyThreshold ?? modelServing.DEFAULT_FUZZY_THRESHOLD,
71
+ ttlMs: config.modelCacheTtlMs ?? modelCatalog.DEFAULT_MODEL_CACHE_TTL_MS,
72
+ threshold: config.modelFuzzyThreshold ?? modelCatalog.DEFAULT_FUZZY_THRESHOLD,
73
73
  fuzzy: config.modelFuzzyMatch !== false,
74
74
  allowOverride: config.modelOverride !== false,
75
75
  fallbacks: config.defaultModelFallbacks ?? [],
76
76
  };
77
77
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXBEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyx3QkFBd0IsQ0FBQztBQWFsRTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEdBQXlCO0lBQzVELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDNUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQ3BDLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUM7WUFDckMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUN4RCxDQUFDO1FBQ0YsSUFBSSxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDaEYsSUFBSSxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQStCLENBQUM7UUFDbkQsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUN4RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3BELElBQUksT0FBTztnQkFBRSxPQUFPLE9BQU8sQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUEwQjtJQU83RCxPQUFPO1FBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxlQUFlLElBQUksWUFBWSxDQUFDLDBCQUEwQjtRQUN4RSxTQUFTLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixJQUFJLFlBQVksQ0FBQyx1QkFBdUI7UUFDN0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxlQUFlLEtBQUssS0FBSztRQUN2QyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsS0FBSyxLQUFLO1FBQzdDLFNBQVMsRUFBRSxNQUFNLENBQUMscUJBQXFCLElBQUksRUFBRTtLQUM5QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFzdHJhLXNwZWNpZmljIGdsdWUgb3ZlciB0aGUgZ2VuZXJpYyBgQGRieC10b29scy9tb2RlbGAgdG9vbGtpdC5cbiAqXG4gKiBUaGUgbGl2ZSBgL3NlcnZpbmctZW5kcG9pbnRzYCBjYXRhbG9ndWUgYWNjZXNzLCBmdXp6eSBuYW1lXG4gKiByZXNvbHV0aW9uLCBhbmQgY2xhc3MvZmFsbGJhY2sgc2VsZWN0aW9uIGFsbCBsaXZlIGluXG4gKiBgQGRieC10b29scy9tb2RlbGA7IHRoaXMgbW9kdWxlIG9ubHkgYWRkcyB3aGF0IGlzIHNwZWNpZmljIHRvIHRoZVxuICogTWFzdHJhIHBsdWdpbjogcHVsbGluZyBhIHBlci1yZXF1ZXN0IG1vZGVsIG92ZXJyaWRlIG9mZiBhbiBIVFRQXG4gKiByZXF1ZXN0IChoZWFkZXIgLyBxdWVyeSAvIGJvZHkpIGFuZCBwcm9qZWN0aW5nIHRoZSBwbHVnaW4gY29uZmlnXG4gKiBvbnRvIHRoZSBrbm9icyBgYnVpbGRNb2RlbGAgYW5kIHRoZSBgL21vZGVsc2Agcm91dGUgc2hhcmUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNlcnZpbmcgYXMgbW9kZWxTZXJ2aW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBvdmVycmlkZSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tYXN0cmFcIjtcblxuaW1wb3J0IHR5cGUgeyBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcblxuLyoqXG4gKiBgUmVxdWVzdENvbnRleHRgIGtleSB1bmRlciB3aGljaCB7QGxpbmsgTWFzdHJhU2VydmVyfSBzdG9yZXMgdGhlXG4gKiBwZXItcmVxdWVzdCBtb2RlbCBvdmVycmlkZSAoaGVhZGVyIC8gcXVlcnkgLyBib2R5KS4gYG1vZGVsLnRzYFxuICogcmVhZHMgaXQgYmVmb3JlIGZhbGxpbmcgYmFjayB0byB0aGUgYWdlbnQgLyBwbHVnaW4gZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BU1RSQV9NT0RFTF9PVkVSUklERV9LRVkgPSBcIm1hc3RyYV9fbW9kZWxfb3ZlcnJpZGVcIjtcblxuLyoqXG4gKiBNaW5pbWFsIEV4cHJlc3MtaXNoIHJlcXVlc3Qgc2hhcGUgdXNlZCBieSB7QGxpbmsgZXh0cmFjdE1vZGVsT3ZlcnJpZGV9LlxuICogS2VlcHMgdGhpcyBtb2R1bGUgaW5kZXBlbmRlbnQgb2YgYGV4cHJlc3NgIHNvIHRoZSBoZWxwZXIgY2FuIGJlXG4gKiByZXVzZWQgZnJvbSBub24tRXhwcmVzcyBhZGFwdGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbE92ZXJyaWRlUmVxdWVzdCB7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD47XG4gIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGJvZHk/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIFB1bGwgYSBtb2RlbCBvdmVycmlkZSBvdXQgb2YgYSBzaW5nbGUgSFRUUCByZXF1ZXN0LCBjaGVja2luZ1xuICogc291cmNlcyBpbiBwcmlvcml0eSBvcmRlcjpcbiAqXG4gKiAgIDEuIGBYLU1hc3RyYS1Nb2RlbGAgaGVhZGVyXG4gKiAgIDIuIGA/bW9kZWw9YCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVyXG4gKiAgIDMuIEJvZHkgZmllbGQgKGBtb2RlbGAgb3IgYG1vZGVsSWRgLCBpbiB0aGF0IG9yZGVyKVxuICpcbiAqIFJldHVybnMgYG51bGxgIHdoZW4gbm90aGluZyBpcyBzZXQsIHNvIGNhbGxlcnMgY2FuIHdyYXAgd2l0aFxuICogYGlmIChvdmVycmlkZSkgLi4uYCB3aXRob3V0IGp1Z2dsaW5nIGVtcHR5IHN0cmluZ3MuIEJvZHkgaW5zcGVjdGlvblxuICogaXMgbGVuaWVudCAtIGFueSBwbGFpbiBvYmplY3Qgd2l0aCBvbmUgb2YgdGhlIGNvbmZpZ3VyZWQga2V5c1xuICogY291bnRzLCBtaXJyb3JpbmcgaG93IEFJIFNESyBjaGF0IGNsaWVudHMgcGFzcyBhcmJpdHJhcnkgbWV0YWRhdGFcbiAqIGFsb25nc2lkZSBgbWVzc2FnZXNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1vZGVsT3ZlcnJpZGUocmVxOiBNb2RlbE92ZXJyaWRlUmVxdWVzdCk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBoZWFkZXJzID0gcmVxLmhlYWRlcnM7XG4gIGlmIChoZWFkZXJzKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsID0gc3RyaW5nLmZpcnN0Tm9uRW1wdHkoXG4gICAgICBoZWFkZXJzW292ZXJyaWRlLk1PREVMX09WRVJSSURFX0hFQURFUl0gPz9cbiAgICAgICAgaGVhZGVyc1tvdmVycmlkZS5NT0RFTF9PVkVSUklERV9IRUFERVIudG9Mb3dlckNhc2UoKV0sXG4gICAgKTtcbiAgICBpZiAoaGVhZGVyVmFsKSByZXR1cm4gaGVhZGVyVmFsO1xuICB9XG4gIGlmIChyZXEucXVlcnkpIHtcbiAgICBjb25zdCBxdWVyeVZhbCA9IHN0cmluZy5maXJzdE5vbkVtcHR5KHJlcS5xdWVyeVtvdmVycmlkZS5NT0RFTF9PVkVSUklERV9RVUVSWV0pO1xuICAgIGlmIChxdWVyeVZhbCkgcmV0dXJuIHF1ZXJ5VmFsO1xuICB9XG4gIGlmIChyZXEuYm9keSAmJiB0eXBlb2YgcmVxLmJvZHkgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCByZWNvcmQgPSByZXEuYm9keSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIG92ZXJyaWRlLk1PREVMX09WRVJSSURFX0JPRFlfRklFTERTKSB7XG4gICAgICBjb25zdCBib2R5VmFsID0gc3RyaW5nLmZpcnN0Tm9uRW1wdHkocmVjb3JkW2ZpZWxkXSk7XG4gICAgICBpZiAoYm9keVZhbCkgcmV0dXJuIGJvZHlWYWw7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlYWQgdGhlIGZ1enp5LXJlc29sdXRpb24gY29uZmlnIGtub2JzIG9mZiB0aGUgcGx1Z2luIGNvbmZpZyB3aXRoXG4gKiBgQGRieC10b29scy9tb2RlbGAgZGVmYXVsdHMgYXBwbGllZC4gS2VwdCBoZXJlIHNvIGBidWlsZE1vZGVsYCBhbmRcbiAqIHRoZSBgL21vZGVsc2Agcm91dGUgYWdyZWUgb24gd2hhdCBcImVuYWJsZWRcIiBtZWFucy5cbiAqXG4gKiBgZmFsbGJhY2tzYCBpcyB0aGUgcHJpb3JpdHktb3JkZXJlZCBsaXN0IGByZXNvbHZlTW9kZWxgIHdhbGtzIGZpcnN0XG4gKiB3aGVuIG5vdGhpbmcgZXhwbGljaXQgaXMgc2V0OyBkZWZhdWx0cyB0byBhbiBlbXB0eSBsaXN0IHNvIHRoZVxuICogZ2VuZXJpYyByZXNvbHZlciBmYWxscyB0aHJvdWdoIHRvIHRoZSBsaXZlIGNhdGFsb2d1ZSBhbmQgaXRzIG93blxuICogYEZBTExCQUNLX01PREVMX0lEU2AgZmxvb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VydmluZ0NvbmZpZyhjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyk6IHtcbiAgdHRsTXM6IG51bWJlcjtcbiAgdGhyZXNob2xkOiBudW1iZXI7XG4gIGZ1enp5OiBib29sZWFuO1xuICBhbGxvd092ZXJyaWRlOiBib29sZWFuO1xuICBmYWxsYmFja3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufSB7XG4gIHJldHVybiB7XG4gICAgdHRsTXM6IGNvbmZpZy5tb2RlbENhY2hlVHRsTXMgPz8gbW9kZWxTZXJ2aW5nLkRFRkFVTFRfTU9ERUxfQ0FDSEVfVFRMX01TLFxuICAgIHRocmVzaG9sZDogY29uZmlnLm1vZGVsRnV6enlUaHJlc2hvbGQgPz8gbW9kZWxTZXJ2aW5nLkRFRkFVTFRfRlVaWllfVEhSRVNIT0xELFxuICAgIGZ1enp5OiBjb25maWcubW9kZWxGdXp6eU1hdGNoICE9PSBmYWxzZSxcbiAgICBhbGxvd092ZXJyaWRlOiBjb25maWcubW9kZWxPdmVycmlkZSAhPT0gZmFsc2UsXG4gICAgZmFsbGJhY2tzOiBjb25maWcuZGVmYXVsdE1vZGVsRmFsbGJhY2tzID8/IFtdLFxuICB9O1xufVxuIl19
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJcEQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLHdCQUF3QixDQUFDO0FBYWxFOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBeUI7SUFDNUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUM1QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FDekMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztZQUNyQyxPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3hELENBQUM7UUFDRixJQUFJLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBK0IsQ0FBQztRQUNuRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ3hELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDekQsSUFBSSxPQUFPO2dCQUFFLE9BQU8sT0FBTyxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQTBCO0lBTzdELE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLGVBQWUsSUFBSSxZQUFZLENBQUMsMEJBQTBCO1FBQ3hFLFNBQVMsRUFBRSxNQUFNLENBQUMsbUJBQW1CLElBQUksWUFBWSxDQUFDLHVCQUF1QjtRQUM3RSxLQUFLLEVBQUUsTUFBTSxDQUFDLGVBQWUsS0FBSyxLQUFLO1FBQ3ZDLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxLQUFLLEtBQUs7UUFDN0MsU0FBUyxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxFQUFFO0tBQzlDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYXN0cmEtc3BlY2lmaWMgZ2x1ZSBvdmVyIHRoZSBnZW5lcmljIGBAZGJ4LXRvb2xzL21vZGVsYCB0b29sa2l0LlxuICpcbiAqIFRoZSBsaXZlIGAvc2VydmluZy1lbmRwb2ludHNgIGNhdGFsb2d1ZSBhY2Nlc3MsIGZ1enp5IG5hbWVcbiAqIHJlc29sdXRpb24sIGFuZCBjbGFzcy9mYWxsYmFjayBzZWxlY3Rpb24gYWxsIGxpdmUgaW5cbiAqIGBAZGJ4LXRvb2xzL21vZGVsYDsgdGhpcyBtb2R1bGUgb25seSBhZGRzIHdoYXQgaXMgc3BlY2lmaWMgdG8gdGhlXG4gKiBNYXN0cmEgcGx1Z2luOiBwdWxsaW5nIGEgcGVyLXJlcXVlc3QgbW9kZWwgb3ZlcnJpZGUgb2ZmIGFuIEhUVFBcbiAqIHJlcXVlc3QgKGhlYWRlciAvIHF1ZXJ5IC8gYm9keSkgYW5kIHByb2plY3RpbmcgdGhlIHBsdWdpbiBjb25maWdcbiAqIG9udG8gdGhlIGtub2JzIGBidWlsZE1vZGVsYCBhbmQgdGhlIGAvbW9kZWxzYCByb3V0ZSBzaGFyZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbW9kZWxDYXRhbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IG92ZXJyaWRlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1hc3RyYVwiO1xuXG5pbXBvcnQgdHlwZSB7IE1hc3RyYVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuXG4vKipcbiAqIGBSZXF1ZXN0Q29udGV4dGAga2V5IHVuZGVyIHdoaWNoIHtAbGluayBNYXN0cmFTZXJ2ZXJ9IHN0b3JlcyB0aGVcbiAqIHBlci1yZXF1ZXN0IG1vZGVsIG92ZXJyaWRlIChoZWFkZXIgLyBxdWVyeSAvIGJvZHkpLiBgbW9kZWwudHNgXG4gKiByZWFkcyBpdCBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRoZSBhZ2VudCAvIHBsdWdpbiBkZWZhdWx0LlxuICovXG5leHBvcnQgY29uc3QgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSA9IFwibWFzdHJhX19tb2RlbF9vdmVycmlkZVwiO1xuXG4vKipcbiAqIE1pbmltYWwgRXhwcmVzcy1pc2ggcmVxdWVzdCBzaGFwZSB1c2VkIGJ5IHtAbGluayBleHRyYWN0TW9kZWxPdmVycmlkZX0uXG4gKiBLZWVwcyB0aGlzIG1vZHVsZSBpbmRlcGVuZGVudCBvZiBgZXhwcmVzc2Agc28gdGhlIGhlbHBlciBjYW4gYmVcbiAqIHJldXNlZCBmcm9tIG5vbi1FeHByZXNzIGFkYXB0ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsT3ZlcnJpZGVSZXF1ZXN0IHtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPjtcbiAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgYm9keT86IHVua25vd247XG59XG5cbi8qKlxuICogUHVsbCBhIG1vZGVsIG92ZXJyaWRlIG91dCBvZiBhIHNpbmdsZSBIVFRQIHJlcXVlc3QsIGNoZWNraW5nXG4gKiBzb3VyY2VzIGluIHByaW9yaXR5IG9yZGVyOlxuICpcbiAqICAgMS4gYFgtTWFzdHJhLU1vZGVsYCBoZWFkZXJcbiAqICAgMi4gYD9tb2RlbD1gIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJcbiAqICAgMy4gQm9keSBmaWVsZCAoYG1vZGVsYCBvciBgbW9kZWxJZGAsIGluIHRoYXQgb3JkZXIpXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiBub3RoaW5nIGlzIHNldCwgc28gY2FsbGVycyBjYW4gd3JhcCB3aXRoXG4gKiBgaWYgKG92ZXJyaWRlKSAuLi5gIHdpdGhvdXQganVnZ2xpbmcgZW1wdHkgc3RyaW5ncy4gQm9keSBpbnNwZWN0aW9uXG4gKiBpcyBsZW5pZW50IC0gYW55IHBsYWluIG9iamVjdCB3aXRoIG9uZSBvZiB0aGUgY29uZmlndXJlZCBrZXlzXG4gKiBjb3VudHMsIG1pcnJvcmluZyBob3cgQUkgU0RLIGNoYXQgY2xpZW50cyBwYXNzIGFyYml0cmFyeSBtZXRhZGF0YVxuICogYWxvbmdzaWRlIGBtZXNzYWdlc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TW9kZWxPdmVycmlkZShyZXE6IE1vZGVsT3ZlcnJpZGVSZXF1ZXN0KTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGhlYWRlcnMgPSByZXEuaGVhZGVycztcbiAgaWYgKGhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJWYWwgPSBzdHJpbmdVdGlscy5maXJzdE5vbkVtcHR5KFxuICAgICAgaGVhZGVyc1tvdmVycmlkZS5NT0RFTF9PVkVSUklERV9IRUFERVJdID8/XG4gICAgICAgIGhlYWRlcnNbb3ZlcnJpZGUuTU9ERUxfT1ZFUlJJREVfSEVBREVSLnRvTG93ZXJDYXNlKCldLFxuICAgICk7XG4gICAgaWYgKGhlYWRlclZhbCkgcmV0dXJuIGhlYWRlclZhbDtcbiAgfVxuICBpZiAocmVxLnF1ZXJ5KSB7XG4gICAgY29uc3QgcXVlcnlWYWwgPSBzdHJpbmdVdGlscy5maXJzdE5vbkVtcHR5KHJlcS5xdWVyeVtvdmVycmlkZS5NT0RFTF9PVkVSUklERV9RVUVSWV0pO1xuICAgIGlmIChxdWVyeVZhbCkgcmV0dXJuIHF1ZXJ5VmFsO1xuICB9XG4gIGlmIChyZXEuYm9keSAmJiB0eXBlb2YgcmVxLmJvZHkgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCByZWNvcmQgPSByZXEuYm9keSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIG92ZXJyaWRlLk1PREVMX09WRVJSSURFX0JPRFlfRklFTERTKSB7XG4gICAgICBjb25zdCBib2R5VmFsID0gc3RyaW5nVXRpbHMuZmlyc3ROb25FbXB0eShyZWNvcmRbZmllbGRdKTtcbiAgICAgIGlmIChib2R5VmFsKSByZXR1cm4gYm9keVZhbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVhZCB0aGUgZnV6enktcmVzb2x1dGlvbiBjb25maWcga25vYnMgb2ZmIHRoZSBwbHVnaW4gY29uZmlnIHdpdGhcbiAqIGBAZGJ4LXRvb2xzL21vZGVsYCBkZWZhdWx0cyBhcHBsaWVkLiBLZXB0IGhlcmUgc28gYGJ1aWxkTW9kZWxgIGFuZFxuICogdGhlIGAvbW9kZWxzYCByb3V0ZSBhZ3JlZSBvbiB3aGF0IFwiZW5hYmxlZFwiIG1lYW5zLlxuICpcbiAqIGBmYWxsYmFja3NgIGlzIHRoZSBwcmlvcml0eS1vcmRlcmVkIGxpc3QgYHJlc29sdmVNb2RlbGAgd2Fsa3MgZmlyc3RcbiAqIHdoZW4gbm90aGluZyBleHBsaWNpdCBpcyBzZXQ7IGRlZmF1bHRzIHRvIGFuIGVtcHR5IGxpc3Qgc28gdGhlXG4gKiBnZW5lcmljIHJlc29sdmVyIGZhbGxzIHRocm91Z2ggdG8gdGhlIGxpdmUgY2F0YWxvZ3VlIGFuZCBpdHMgb3duXG4gKiBgRkFMTEJBQ0tfTU9ERUxfSURTYCBmbG9vci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTZXJ2aW5nQ29uZmlnKGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnKToge1xuICB0dGxNczogbnVtYmVyO1xuICB0aHJlc2hvbGQ6IG51bWJlcjtcbiAgZnV6enk6IGJvb2xlYW47XG4gIGFsbG93T3ZlcnJpZGU6IGJvb2xlYW47XG4gIGZhbGxiYWNrczogcmVhZG9ubHkgc3RyaW5nW107XG59IHtcbiAgcmV0dXJuIHtcbiAgICB0dGxNczogY29uZmlnLm1vZGVsQ2FjaGVUdGxNcyA/PyBtb2RlbENhdGFsb2cuREVGQVVMVF9NT0RFTF9DQUNIRV9UVExfTVMsXG4gICAgdGhyZXNob2xkOiBjb25maWcubW9kZWxGdXp6eVRocmVzaG9sZCA/PyBtb2RlbENhdGFsb2cuREVGQVVMVF9GVVpaWV9USFJFU0hPTEQsXG4gICAgZnV6enk6IGNvbmZpZy5tb2RlbEZ1enp5TWF0Y2ggIT09IGZhbHNlLFxuICAgIGFsbG93T3ZlcnJpZGU6IGNvbmZpZy5tb2RlbE92ZXJyaWRlICE9PSBmYWxzZSxcbiAgICBmYWxsYmFja3M6IGNvbmZpZy5kZWZhdWx0TW9kZWxGYWxsYmFja3MgPz8gW10sXG4gIH07XG59XG4iXX0=
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module
9
9
  */
10
- import { string } from "@dbx-tools/shared-core";
10
+ import { stringUtils } from "@dbx-tools/shared-core";
11
11
  const SCHEMA_PREFIX = "mastra_";
12
12
  const MAX_PG_IDENTIFIER_LEN = 63;
13
13
  /**
@@ -16,14 +16,14 @@ const MAX_PG_IDENTIFIER_LEN = 63;
16
16
  */
17
17
  export function agentStorageSchemaName(agentId) {
18
18
  const maxSlugLen = MAX_PG_IDENTIFIER_LEN - SCHEMA_PREFIX.length;
19
- const slug = string.toIdentifierWithOptions({
19
+ const slug = stringUtils.toIdentifierWithOptions({
20
20
  delimiter: "_",
21
21
  maxLength: maxSlugLen,
22
22
  truncateStrategy: "hash",
23
23
  truncateHashLength: 6,
24
24
  }, agentId);
25
25
  const body = slug ||
26
- string.toIdentifierWithOptions({
26
+ stringUtils.toIdentifierWithOptions({
27
27
  delimiter: "_",
28
28
  maxLength: maxSlugLen,
29
29
  truncateStrategy: "hash",
@@ -31,4 +31,4 @@ export function agentStorageSchemaName(agentId) {
31
31
  }, "agent", agentId);
32
32
  return `${SCHEMA_PREFIX}${body}`;
33
33
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFaEQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2hDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBRWpDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUFlO0lBQ3BELE1BQU0sVUFBVSxHQUFHLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDaEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUN6QztRQUNFLFNBQVMsRUFBRSxHQUFHO1FBQ2QsU0FBUyxFQUFFLFVBQVU7UUFDckIsZ0JBQWdCLEVBQUUsTUFBTTtRQUN4QixrQkFBa0IsRUFBRSxDQUFDO0tBQ3RCLEVBQ0QsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLElBQUksR0FDUixJQUFJO1FBQ0osTUFBTSxDQUFDLHVCQUF1QixDQUM1QjtZQUNFLFNBQVMsRUFBRSxHQUFHO1lBQ2QsU0FBUyxFQUFFLFVBQVU7WUFDckIsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixrQkFBa0IsRUFBRSxDQUFDO1NBQ3RCLEVBQ0QsT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDO0lBQ0osT0FBTyxHQUFHLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZXJpdmUgYSBQb3N0Z3Jlcy1zYWZlIHNjaGVtYSBuYW1lIGZvciBwZXItYWdlbnQgTWFzdHJhIHN0b3JhZ2UuXG4gKlxuICogQWdlbnQgaWRzIGFyZSBvZnRlbiBrZWJhYi1jYXNlIHJvdXRlIHNlZ21lbnRzIChgZGF0YS1tZXNoLWJvb2stYXNzaXN0YW50YClcbiAqIGJ1dCB7QGxpbmsgUG9zdGdyZXNTdG9yZX0gdmFsaWRhdGVzIGBzY2hlbWFOYW1lYCB3aXRoIE1hc3RyYSdzXG4gKiBgcGFyc2VTcWxJZGVudGlmaWVyYCAobGV0dGVyL3VuZGVyc2NvcmUgc3RhcnQsIGBbQS1aYS16MC05X11gIG9ubHksIG1heCA2MykuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmNvbnN0IFNDSEVNQV9QUkVGSVggPSBcIm1hc3RyYV9cIjtcbmNvbnN0IE1BWF9QR19JREVOVElGSUVSX0xFTiA9IDYzO1xuXG4vKipcbiAqIERlZmF1bHQgTGFrZWJhc2Ugc2NoZW1hIGZvciBvbmUgYWdlbnQncyB0aHJlYWQvbWVzc2FnZSBzdG9yZTpcbiAqIGBtYXN0cmFfPHNhbml0aXplZC1hZ2VudC1pZD5gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdlbnRTdG9yYWdlU2NoZW1hTmFtZShhZ2VudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXhTbHVnTGVuID0gTUFYX1BHX0lERU5USUZJRVJfTEVOIC0gU0NIRU1BX1BSRUZJWC5sZW5ndGg7XG4gIGNvbnN0IHNsdWcgPSBzdHJpbmcudG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoXG4gICAge1xuICAgICAgZGVsaW1pdGVyOiBcIl9cIixcbiAgICAgIG1heExlbmd0aDogbWF4U2x1Z0xlbixcbiAgICAgIHRydW5jYXRlU3RyYXRlZ3k6IFwiaGFzaFwiLFxuICAgICAgdHJ1bmNhdGVIYXNoTGVuZ3RoOiA2LFxuICAgIH0sXG4gICAgYWdlbnRJZCxcbiAgKTtcbiAgY29uc3QgYm9keSA9XG4gICAgc2x1ZyB8fFxuICAgIHN0cmluZy50b0lkZW50aWZpZXJXaXRoT3B0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgZGVsaW1pdGVyOiBcIl9cIixcbiAgICAgICAgbWF4TGVuZ3RoOiBtYXhTbHVnTGVuLFxuICAgICAgICB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIixcbiAgICAgICAgdHJ1bmNhdGVIYXNoTGVuZ3RoOiA2LFxuICAgICAgfSxcbiAgICAgIFwiYWdlbnRcIixcbiAgICAgIGFnZW50SWQsXG4gICAgKTtcbiAgcmV0dXJuIGAke1NDSEVNQV9QUkVGSVh9JHtib2R5fWA7XG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2hDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBRWpDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUFlO0lBQ3BELE1BQU0sVUFBVSxHQUFHLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDaEUsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLHVCQUF1QixDQUM5QztRQUNFLFNBQVMsRUFBRSxHQUFHO1FBQ2QsU0FBUyxFQUFFLFVBQVU7UUFDckIsZ0JBQWdCLEVBQUUsTUFBTTtRQUN4QixrQkFBa0IsRUFBRSxDQUFDO0tBQ3RCLEVBQ0QsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLElBQUksR0FDUixJQUFJO1FBQ0osV0FBVyxDQUFDLHVCQUF1QixDQUNqQztZQUNFLFNBQVMsRUFBRSxHQUFHO1lBQ2QsU0FBUyxFQUFFLFVBQVU7WUFDckIsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixrQkFBa0IsRUFBRSxDQUFDO1NBQ3RCLEVBQ0QsT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDO0lBQ0osT0FBTyxHQUFHLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZXJpdmUgYSBQb3N0Z3Jlcy1zYWZlIHNjaGVtYSBuYW1lIGZvciBwZXItYWdlbnQgTWFzdHJhIHN0b3JhZ2UuXG4gKlxuICogQWdlbnQgaWRzIGFyZSBvZnRlbiBrZWJhYi1jYXNlIHJvdXRlIHNlZ21lbnRzIChgZGF0YS1tZXNoLWJvb2stYXNzaXN0YW50YClcbiAqIGJ1dCB7QGxpbmsgUG9zdGdyZXNTdG9yZX0gdmFsaWRhdGVzIGBzY2hlbWFOYW1lYCB3aXRoIE1hc3RyYSdzXG4gKiBgcGFyc2VTcWxJZGVudGlmaWVyYCAobGV0dGVyL3VuZGVyc2NvcmUgc3RhcnQsIGBbQS1aYS16MC05X11gIG9ubHksIG1heCA2MykuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuY29uc3QgU0NIRU1BX1BSRUZJWCA9IFwibWFzdHJhX1wiO1xuY29uc3QgTUFYX1BHX0lERU5USUZJRVJfTEVOID0gNjM7XG5cbi8qKlxuICogRGVmYXVsdCBMYWtlYmFzZSBzY2hlbWEgZm9yIG9uZSBhZ2VudCdzIHRocmVhZC9tZXNzYWdlIHN0b3JlOlxuICogYG1hc3RyYV88c2FuaXRpemVkLWFnZW50LWlkPmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2VudFN0b3JhZ2VTY2hlbWFOYW1lKGFnZW50SWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1heFNsdWdMZW4gPSBNQVhfUEdfSURFTlRJRklFUl9MRU4gLSBTQ0hFTUFfUFJFRklYLmxlbmd0aDtcbiAgY29uc3Qgc2x1ZyA9IHN0cmluZ1V0aWxzLnRvSWRlbnRpZmllcldpdGhPcHRpb25zKFxuICAgIHtcbiAgICAgIGRlbGltaXRlcjogXCJfXCIsXG4gICAgICBtYXhMZW5ndGg6IG1heFNsdWdMZW4sXG4gICAgICB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIixcbiAgICAgIHRydW5jYXRlSGFzaExlbmd0aDogNixcbiAgICB9LFxuICAgIGFnZW50SWQsXG4gICk7XG4gIGNvbnN0IGJvZHkgPVxuICAgIHNsdWcgfHxcbiAgICBzdHJpbmdVdGlscy50b0lkZW50aWZpZXJXaXRoT3B0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgZGVsaW1pdGVyOiBcIl9cIixcbiAgICAgICAgbWF4TGVuZ3RoOiBtYXhTbHVnTGVuLFxuICAgICAgICB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIixcbiAgICAgICAgdHJ1bmNhdGVIYXNoTGVuZ3RoOiA2LFxuICAgICAgfSxcbiAgICAgIFwiYWdlbnRcIixcbiAgICAgIGFnZW50SWQsXG4gICAgKTtcbiAgcmV0dXJuIGAke1NDSEVNQV9QUkVGSVh9JHtib2R5fWA7XG59XG4iXX0=
@@ -18,7 +18,7 @@
18
18
  *
19
19
  * @module
20
20
  */
21
- import { string } from "@dbx-tools/shared-core";
21
+ import { stringUtils } from "@dbx-tools/shared-core";
22
22
  import { model } from "@dbx-tools/shared-model";
23
23
  import { Agent } from "@mastra/core/agent";
24
24
  import { createTool } from "@mastra/core/tools";
@@ -102,7 +102,7 @@ const summarizeInput = z.object({
102
102
  */
103
103
  export async function summarizeText(config, text, options = {}) {
104
104
  const { instructions, maxWords, requestContext, abortSignal } = options;
105
- const prompt = string.toDescription({
105
+ const prompt = stringUtils.toDescription({
106
106
  ...(instructions ? { Guidance: instructions } : {}),
107
107
  ...(maxWords !== undefined ? { "Max length (words)": String(maxWords) } : {}),
108
108
  Text: text,
@@ -141,4 +141,4 @@ export function buildSummarizeTool(config) {
141
141
  },
142
142
  });
143
143
  }
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbWFyaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N1bW1hcml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBR3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3QyxrRUFBa0U7QUFDbEUsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUV0RCx5RUFBeUU7QUFDekUsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixpQ0FBaUM7SUFDakMsbUVBQW1FO0lBQ25FLDBFQUEwRTtJQUMxRSxzRUFBc0U7SUFDdEUsZUFBZTtJQUNmLHVFQUF1RTtJQUN2RSwwQkFBMEI7Q0FDM0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFYjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsdUVBQXVFO0lBQ3ZFLHlEQUF5RDtJQUN6RCxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLHdCQUF3QjtDQUN6QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVaOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUEwQjtJQUUxQixPQUFPLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQzVCLFVB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QUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUF1QyxDQUFDO1lBQ2pGLE1BQU0sR0FBRyxHQUFHLE9BQ2dFLENBQUM7WUFDN0UsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDaEQsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxHQUFHLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM5RCxDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNtYWxsLXRpZXIgc3VtbWFyaXphdGlvbiBmb3IgdGhlIE1hc3RyYSBwbHVnaW4uXG4gKlxuICogVHdvIHN1cmZhY2VzLCBib3RoIGJhY2tlZCBieSB0aGUgZmFzdCAvIHNtYWxsIGNoYXQgdGllclxuICogKHtAbGluayBtb2RlbC5Nb2RlbENsYXNzLkNoYXRGYXN0fSkgcmVzb2x2ZWQgdGhyb3VnaCB0aGUgc2FtZVxuICogYC9zZXJ2aW5nLWVuZHBvaW50c2AgcGlwZWxpbmUgYXMgdGhlIG1haW4gYWdlbnRzOlxuICpcbiAqICAgLSBBIGRlZGljYXRlZCBgc3VtbWFyaXplYCB0b29sIChzZWUge0BsaW5rIGJ1aWxkU3VtbWFyaXplVG9vbH0pXG4gKiAgICAgYWdlbnRzIGNhbiBjYWxsIHRvIGNvbmRlbnNlIGFyYml0cmFyeSB0ZXh0IHdpdGhvdXQgYnVybmluZyB0aGVcbiAqICAgICBoZWF2eXdlaWdodCBjaGF0IG1vZGVsLlxuICogICAtIFRoZSBtb2RlbCArIGluc3RydWN0aW9ucyBNYXN0cmEncyBtZW1vcnkgdXNlcyB0byBhdXRvLW5hbWVcbiAqICAgICBjb252ZXJzYXRpb24gdGhyZWFkcyAoYGdlbmVyYXRlVGl0bGVgKSwgc28gdGl0bGluZyByZXVzZXMgdGhlXG4gKiAgICAgc2FtZSBzbWFsbCB0aWVyIHJhdGhlciB0aGFuIHRoZSBhZ2VudCdzIHByaW1hcnkgbW9kZWwuXG4gKlxuICogTWlycm9ycyB0aGUgY2hhcnQtcGxhbm5lciB3aXJpbmcgaW4gYGNoYXJ0LnRzYDogYSBwZXItY29uZmlnIGNhY2hlZFxuICogYEFnZW50YCBvbiB0aGUgZmFzdCB0aWVyLCBpbnZva2VkIHZpYSBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgaW5zaWRlXG4gKiB0aGUgYWN0aXZlIGBhc1VzZXJgIHNjb3BlIHNvIHRva2VucyBzdGF5IHVzZXItc2NvcGVkLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgbW9kZWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IEFnZW50IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9hZ2VudFwiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFNb2RlbENvbmZpZyB9IGZyb20gXCJAbWFzdHJhL2NvcmUvbGxtXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB7IGNyZWF0ZVRvb2wgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3Rvb2xzXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgdHlwZSB7IE1hc3RyYVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgYnVpbGRNb2RlbCB9IGZyb20gXCIuL21vZGVsLnRzXCI7XG5pbXBvcnQgeyBUWVBPR1JBUEhZX1JVTEUgfSBmcm9tIFwiLi9zdHlsZS50c1wiO1xuXG4vKiogRmFzdCAvIHNtYWxsIGNoYXQgdGllciB1c2VkIGZvciBib3RoIHRpdGxpbmcgYW5kIHN1bW1hcmllcy4gKi9cbmNvbnN0IFNVTU1BUllfTU9ERUxfQ0xBU1MgPSBtb2RlbC5Nb2RlbENsYXNzLkNoYXRGYXN0O1xuXG4vKiogU3lzdGVtIHByb21wdCBmb3IgdGhlIHN1bW1hcml6ZXIgYWdlbnQgKGFuZCB0aGUgYHN1bW1hcml6ZWAgdG9vbCkuICovXG5jb25zdCBTVU1NQVJJWkVSX0lOU1RSVUNUSU9OUyA9IFtcbiAgXCJZb3UgYXJlIGEgc3VtbWFyaXphdGlvbiBlbmdpbmUuXCIsXG4gIFwiR2l2ZW4gYSBibG9jayBvZiB0ZXh0LCBwcm9kdWNlIGEgZmFpdGhmdWwsIGNvbmNpc2Ugc3VtbWFyeSBvZiBpdC5cIixcbiAgXCJEZWZhdWx0IHRvIGEgZmV3IHNlbnRlbmNlczsgZm9sbG93IGFueSBsZW5ndGggZ3VpZGFuY2UgdGhlIGNhbGxlciBnaXZlcy5cIixcbiAgXCJQbGFpbiBwcm9zZS4gTm8gcHJlYW1ibGUsIG5vIGhlYWRlcnMsIG5vIGJ1bGxldCBwb2ludHMgdW5sZXNzIGFza2VkLlwiLFxuICBUWVBPR1JBUEhZX1JVTEUsXG4gIFwiTmV2ZXIgYWRkIGluZm9ybWF0aW9uLCBvcGluaW9ucywgb3IgZGV0YWlscyBub3QgcHJlc2VudCBpbiB0aGUgaW5wdXQuXCIsXG4gIFwiT3V0cHV0IG9ubHkgdGhlIHN1bW1hcnkuXCIsXG5dLmpvaW4oXCJcXG5cIik7XG5cbi8qKlxuICogSW5zdHJ1Y3Rpb25zIE1hc3RyYSdzIGBnZW5lcmF0ZVRpdGxlYCBoYW5kcyB0aGUgc21hbGwtdGllciBtb2RlbCB0b1xuICogbmFtZSBhIGNvbnZlcnNhdGlvbiB0aHJlYWQgZnJvbSBpdHMgb3BlbmluZyB0dXJuLiBLZXB0IHRlcnNlIHNvIHRoZVxuICogbW9kZWwgcmV0dXJucyBhIGJhcmUgdGl0bGUgd2l0aCBubyBkZWNvcmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgVElUTEVfSU5TVFJVQ1RJT05TID0gW1xuICBcIkdlbmVyYXRlIGEgc2hvcnQsIHNwZWNpZmljIHRpdGxlIGZvciB0aGlzIGNvbnZlcnNhdGlvbiwgMyB0byA2IHdvcmRzLlwiLFxuICBcIkNhcHR1cmUgdGhlIHVzZXIncyB0b3BpYywgbm90IHRoZSBhc3Npc3RhbnQncyByZXNwb25zZS5cIixcbiAgXCJQbGFpbiB0ZXh0IG9ubHk6IG5vIHN1cnJvdW5kaW5nIHF1b3RlcyBhbmQgbm8gdHJhaWxpbmcgcHVuY3R1YXRpb24uXCIsXG4gIFRZUE9HUkFQSFlfUlVMRSxcbiAgXCJPdXRwdXQgb25seSB0aGUgdGl0bGUuXCIsXG5dLmpvaW4oXCIgXCIpO1xuXG4vKipcbiAqIFJlc29sdmUgdGhlIHNtYWxsLXRpZXIgbW9kZWwgZm9yIHN1bW1hcml6YXRpb24gLyB0aXRsaW5nLiBSZXVzZWQgYnlcbiAqIGJvdGggdGhlIHN1bW1hcml6ZXIgYWdlbnQgYW5kIE1hc3RyYSBtZW1vcnkncyBgZ2VuZXJhdGVUaXRsZWAuXG4gKlxuICogUmV0dXJuZWQgYXMgYSBgcmVxdWVzdENvbnRleHRgLXRha2luZyBmdW5jdGlvbiAoYSBNYXN0cmFcbiAqIGBEeW5hbWljQXJndW1lbnQ8TWFzdHJhTW9kZWxDb25maWc+YCkgc28gZWFjaCBjYWxsIG1pbnRzIHVzZXItc2NvcGVkXG4gKiB0b2tlbnMgdmlhIHtAbGluayBidWlsZE1vZGVsfSwgZXhhY3RseSBsaWtlIHRoZSBwcmltYXJ5IGFnZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcnlNb2RlbChcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4pOiAoYXJnczogeyByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfSkgPT4gUHJvbWlzZTxNYXN0cmFNb2RlbENvbmZpZz4ge1xuICByZXR1cm4gKHsgcmVxdWVzdENvbnRleHQgfSkgPT5cbiAgICBidWlsZE1vZGVsKGNvbmZpZywgcmVxdWVzdENvbnRleHQsIHsgbW9kZWxDbGFzczogU1VNTUFSWV9NT0RFTF9DTEFTUyB9KTtcbn1cblxuLyoqXG4gKiBPbmUgc3VtbWFyaXplciBgQWdlbnRgIHBlciBwbHVnaW4gY29uZmlnLCBjYWNoZWQgb24gY29uZmlnLW9iamVjdFxuICogaWRlbnRpdHkgc28gYSBob3QgdG9vbCBwYXRoIGRvZXNuJ3QgcGF5IHRoZSBjb25zdHJ1Y3RvciBjb3N0IGVhY2hcbiAqIGNhbGwuIGBXZWFrTWFwYCBsZXRzIHJldGlyZWQgY29uZmlncyAoZS5nLiB0ZXN0IHJlY29uZmlndXJhdGlvbnMpXG4gKiByZWxlYXNlIHRoZWlyIGFnZW50IHdpdGhvdXQgbWFudWFsIGV2aWN0aW9uLlxuICovXG5jb25zdCBzdW1tYXJpemVyQWdlbnRzID0gbmV3IFdlYWtNYXA8TWFzdHJhUGx1Z2luQ29uZmlnLCBBZ2VudD4oKTtcblxuZnVuY3Rpb24gZ2V0U3VtbWFyaXplckFnZW50KGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnKTogQWdlbnQge1xuICBsZXQgYWdlbnQgPSBzdW1tYXJpemVyQWdlbnRzLmdldChjb25maWcpO1xuICBpZiAoIWFnZW50KSB7XG4gICAgYWdlbnQgPSBuZXcgQWdlbnQoe1xuICAgICAgaWQ6IFwic3VtbWFyaXplclwiLFxuICAgICAgbmFtZTogXCJTdW1tYXJpemVyXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJDb25kZW5zZXMgdGV4dCBpbnRvIGEgc2hvcnQgc3VtbWFyeSB1c2luZyBhIGZhc3QsIHNtYWxsIG1vZGVsLlwiLFxuICAgICAgaW5zdHJ1Y3Rpb25zOiBTVU1NQVJJWkVSX0lOU1RSVUNUSU9OUyxcbiAgICAgIG1vZGVsOiBzdW1tYXJ5TW9kZWwoY29uZmlnKSxcbiAgICB9KTtcbiAgICBzdW1tYXJpemVyQWdlbnRzLnNldChjb25maWcsIGFnZW50KTtcbiAgfVxuICByZXR1cm4gYWdlbnQ7XG59XG5cbi8qKiBJbnB1dHMgYWNjZXB0ZWQgYnkgdGhlIGBzdW1tYXJpemVgIHRvb2wuICovXG5jb25zdCBzdW1tYXJpemVJbnB1dCA9IHoub2JqZWN0KHtcbiAgdGV4dDogei5zdHJpbmcoKS5taW4oMSkuZGVzY3JpYmUoXCJUaGUgdGV4dCB0byBzdW1tYXJpemUuXCIpLFxuICBpbnN0cnVjdGlvbnM6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiT3B0aW9uYWwgZXh0cmEgZ3VpZGFuY2UgZm9yIHRoZSBzdW1tYXJ5LCBlLmcuICdvbmUgc2VudGVuY2UnIG9yICdsaXN0IHRoZSBhY3Rpb24gaXRlbXMnLlwiLFxuICAgICksXG4gIG1heFdvcmRzOiB6XG4gICAgLm51bWJlcigpXG4gICAgLmludCgpXG4gICAgLnBvc2l0aXZlKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcIk9wdGlvbmFsIHNvZnQgY2FwIG9uIHRoZSBzdW1tYXJ5IGxlbmd0aCwgaW4gd29yZHMuXCIpLFxufSk7XG5cbi8qKiBPcHRpb25zIGFjY2VwdGVkIGJ5IHtAbGluayBzdW1tYXJpemVUZXh0fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VtbWFyaXplT3B0aW9ucyB7XG4gIC8qKiBFeHRyYSBndWlkYW5jZSBmb3IgdGhlIHN1bW1hcnkgKGxlbmd0aCwgZm9jdXMsIGZvcm1hdCkuICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgLyoqIFNvZnQgY2FwIG9uIHN1bW1hcnkgbGVuZ3RoLCBpbiB3b3Jkcy4gKi9cbiAgbWF4V29yZHM/OiBudW1iZXI7XG4gIC8qKiBBY3RpdmUgcmVxdWVzdCBjb250ZXh0LCBzbyB0aGUgbW9kZWwgcmVzb2x2ZXIgbWludHMgdXNlci1zY29wZWQgdG9rZW5zLiAqL1xuICByZXF1ZXN0Q29udGV4dD86IFJlcXVlc3RDb250ZXh0O1xuICAvKiogQWJvcnQgc2lnbmFsIGJyaWRnZWQgZnJvbSB0aGUgY2FsbGluZyB0b29sIC8gcmVxdWVzdC4gKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqXG4gKiBTdW1tYXJpemUgYHRleHRgIHdpdGggdGhlIHNtYWxsLXRpZXIgc3VtbWFyaXplciBhZ2VudCwgcmV0dXJuaW5nIHRoZVxuICogdHJpbW1lZCBzdW1tYXJ5IHN0cmluZy4gVGhyb3dzIG9uIG1vZGVsIGZhaWx1cmUgKHRoZSBjYWxsZXIgZGVjaWRlc1xuICogaG93IHRvIGRlZ3JhZGUpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3VtbWFyaXplVGV4dChcbiAgY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcsXG4gIHRleHQ6IHN0cmluZyxcbiAgb3B0aW9uczogU3VtbWFyaXplT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBpbnN0cnVjdGlvbnMsIG1heFdvcmRzLCByZXF1ZXN0Q29udGV4dCwgYWJvcnRTaWduYWwgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHByb21wdCA9IHN0cmluZy50b0Rlc2NyaXB0aW9uKHtcbiAgICAuLi4oaW5zdHJ1Y3Rpb25zID8geyBHdWlkYW5jZTogaW5zdHJ1Y3Rpb25zIH0gOiB7fSksXG4gICAgLi4uKG1heFdvcmRzICE9PSB1bmRlZmluZWQgPyB7IFwiTWF4IGxlbmd0aCAod29yZHMpXCI6IFN0cmluZyhtYXhXb3JkcykgfSA6IHt9KSxcbiAgICBUZXh0OiB0ZXh0LFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U3VtbWFyaXplckFnZW50KGNvbmZpZykuZ2VuZXJhdGUocHJvbXB0LCB7XG4gICAgLi4uKHJlcXVlc3RDb250ZXh0ID8geyByZXF1ZXN0Q29udGV4dCB9IDoge30pLFxuICAgIC4uLihhYm9ydFNpZ25hbCA/IHsgYWJvcnRTaWduYWwgfSA6IHt9KSxcbiAgfSk7XG4gIHJldHVybiByZXN1bHQudGV4dC50cmltKCk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGBzdW1tYXJpemVgIHRvb2wuIEV4cG9zZWQgYXMgYW4gYW1iaWVudCBzeXN0ZW0gdG9vbCAobGlrZVxuICogYHJlbmRlcl9kYXRhYCkgc28gZXZlcnkgYWdlbnQgY2FuIG9mZmxvYWQgY29uZGVuc2luZyBsb25nIGNvbnRlbnQsXG4gKiBub3RlcywgdHJhbnNjcmlwdHMsIG9yIGJ1bGt5IHRvb2wgcmVzdWx0cyB0byB0aGUgZmFzdCB0aWVyIGluc3RlYWQgb2ZcbiAqIHNwZW5kaW5nIGl0cyBwcmltYXJ5IGNoYXQgbW9kZWwuIFRoZSB0b29sIHJlYWRzIHRoZSBsaXZlXG4gKiBgcmVxdWVzdENvbnRleHRgIC8gYGFib3J0U2lnbmFsYCBvZmYgdGhlIE1hc3RyYSBleGVjdXRpb24gY29udGV4dCBzb1xuICogaXRzIG1vZGVsIGNhbGwgc3RheXMgdXNlci1zY29wZWQgYW5kIGNhbmNlbHMgd2l0aCB0aGUgdHVybi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3VtbWFyaXplVG9vbChjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IFwic3VtbWFyaXplXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlN1bW1hcml6ZSBhIGJsb2NrIG9mIHRleHQgdXNpbmcgYSBmYXN0LCBzbWFsbCBtb2RlbC4gVXNlIGl0IHRvIGNvbmRlbnNlIGxvbmcgXCIgK1xuICAgICAgXCJjb250ZW50LCBub3RlcywgdHJhbnNjcmlwdHMsIG9yIHRvb2wgcmVzdWx0cyBpbnRvIGEgc2hvcnQgc3VtbWFyeSB3aXRob3V0IFwiICtcbiAgICAgIFwic3BlbmRpbmcgdGhlIG1haW4gY2hhdCBtb2RlbC5cIixcbiAgICBpbnB1dFNjaGVtYTogc3VtbWFyaXplSW5wdXQsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHRleHQsIGluc3RydWN0aW9ucywgbWF4V29yZHMgfSA9IGlucHV0IGFzIHouaW5mZXI8dHlwZW9mIHN1bW1hcml6ZUlucHV0PjtcbiAgICAgIGNvbnN0IGN0eCA9IGNvbnRleHQgYXNcbiAgICAgICAgeyByZXF1ZXN0Q29udGV4dD86IFJlcXVlc3RDb250ZXh0OyBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsIH0gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgc3VtbWFyaXplVGV4dChjb25maWcsIHRleHQsIHtcbiAgICAgICAgLi4uKGluc3RydWN0aW9ucyA/IHsgaW5zdHJ1Y3Rpb25zIH0gOiB7fSksXG4gICAgICAgIC4uLihtYXhXb3JkcyAhPT0gdW5kZWZpbmVkID8geyBtYXhXb3JkcyB9IDoge30pLFxuICAgICAgICAuLi4oY3R4Py5yZXF1ZXN0Q29udGV4dCA/IHsgcmVxdWVzdENvbnRleHQ6IGN0eC5yZXF1ZXN0Q29udGV4dCB9IDoge30pLFxuICAgICAgICAuLi4oY3R4Py5hYm9ydFNpZ25hbCA/IHsgYWJvcnRTaWduYWw6IGN0eC5hYm9ydFNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBzdW1tYXJ5IH07XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbWFyaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N1bW1hcml6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBR3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3QyxrRUFBa0U7QUFDbEUsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUV0RCx5RUFBeUU7QUFDekUsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixpQ0FBaUM7SUFDakMsbUVBQW1FO0lBQ25FLDBFQUEwRTtJQUMxRSxzRUFBc0U7SUFDdEUsZUFBZTtJQUNmLHVFQUF1RTtJQUN2RSwwQkFBMEI7Q0FDM0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFYjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsdUVBQXVFO0lBQ3ZFLHlEQUF5RDtJQUN6RCxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLHdCQUF3QjtDQUN6QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVaOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUEwQjtJQUUxQixPQUFPLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQzVCLFVB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QUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUF1QyxDQUFDO1lBQ2pGLE1BQU0sR0FBRyxHQUFHLE9BQ2dFLENBQUM7WUFDN0UsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDaEQsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxHQUFHLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM5RCxDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNtYWxsLXRpZXIgc3VtbWFyaXphdGlvbiBmb3IgdGhlIE1hc3RyYSBwbHVnaW4uXG4gKlxuICogVHdvIHN1cmZhY2VzLCBib3RoIGJhY2tlZCBieSB0aGUgZmFzdCAvIHNtYWxsIGNoYXQgdGllclxuICogKHtAbGluayBtb2RlbC5Nb2RlbENsYXNzLkNoYXRGYXN0fSkgcmVzb2x2ZWQgdGhyb3VnaCB0aGUgc2FtZVxuICogYC9zZXJ2aW5nLWVuZHBvaW50c2AgcGlwZWxpbmUgYXMgdGhlIG1haW4gYWdlbnRzOlxuICpcbiAqICAgLSBBIGRlZGljYXRlZCBgc3VtbWFyaXplYCB0b29sIChzZWUge0BsaW5rIGJ1aWxkU3VtbWFyaXplVG9vbH0pXG4gKiAgICAgYWdlbnRzIGNhbiBjYWxsIHRvIGNvbmRlbnNlIGFyYml0cmFyeSB0ZXh0IHdpdGhvdXQgYnVybmluZyB0aGVcbiAqICAgICBoZWF2eXdlaWdodCBjaGF0IG1vZGVsLlxuICogICAtIFRoZSBtb2RlbCArIGluc3RydWN0aW9ucyBNYXN0cmEncyBtZW1vcnkgdXNlcyB0byBhdXRvLW5hbWVcbiAqICAgICBjb252ZXJzYXRpb24gdGhyZWFkcyAoYGdlbmVyYXRlVGl0bGVgKSwgc28gdGl0bGluZyByZXVzZXMgdGhlXG4gKiAgICAgc2FtZSBzbWFsbCB0aWVyIHJhdGhlciB0aGFuIHRoZSBhZ2VudCdzIHByaW1hcnkgbW9kZWwuXG4gKlxuICogTWlycm9ycyB0aGUgY2hhcnQtcGxhbm5lciB3aXJpbmcgaW4gYGNoYXJ0LnRzYDogYSBwZXItY29uZmlnIGNhY2hlZFxuICogYEFnZW50YCBvbiB0aGUgZmFzdCB0aWVyLCBpbnZva2VkIHZpYSBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgaW5zaWRlXG4gKiB0aGUgYWN0aXZlIGBhc1VzZXJgIHNjb3BlIHNvIHRva2VucyBzdGF5IHVzZXItc2NvcGVkLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBtb2RlbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50XCI7XG5pbXBvcnQgdHlwZSB7IE1hc3RyYU1vZGVsQ29uZmlnIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9sbG1cIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9vbCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvdG9vbHNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB0eXBlIHsgTWFzdHJhUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBidWlsZE1vZGVsIH0gZnJvbSBcIi4vbW9kZWwudHNcIjtcbmltcG9ydCB7IFRZUE9HUkFQSFlfUlVMRSB9IGZyb20gXCIuL3N0eWxlLnRzXCI7XG5cbi8qKiBGYXN0IC8gc21hbGwgY2hhdCB0aWVyIHVzZWQgZm9yIGJvdGggdGl0bGluZyBhbmQgc3VtbWFyaWVzLiAqL1xuY29uc3QgU1VNTUFSWV9NT0RFTF9DTEFTUyA9IG1vZGVsLk1vZGVsQ2xhc3MuQ2hhdEZhc3Q7XG5cbi8qKiBTeXN0ZW0gcHJvbXB0IGZvciB0aGUgc3VtbWFyaXplciBhZ2VudCAoYW5kIHRoZSBgc3VtbWFyaXplYCB0b29sKS4gKi9cbmNvbnN0IFNVTU1BUklaRVJfSU5TVFJVQ1RJT05TID0gW1xuICBcIllvdSBhcmUgYSBzdW1tYXJpemF0aW9uIGVuZ2luZS5cIixcbiAgXCJHaXZlbiBhIGJsb2NrIG9mIHRleHQsIHByb2R1Y2UgYSBmYWl0aGZ1bCwgY29uY2lzZSBzdW1tYXJ5IG9mIGl0LlwiLFxuICBcIkRlZmF1bHQgdG8gYSBmZXcgc2VudGVuY2VzOyBmb2xsb3cgYW55IGxlbmd0aCBndWlkYW5jZSB0aGUgY2FsbGVyIGdpdmVzLlwiLFxuICBcIlBsYWluIHByb3NlLiBObyBwcmVhbWJsZSwgbm8gaGVhZGVycywgbm8gYnVsbGV0IHBvaW50cyB1bmxlc3MgYXNrZWQuXCIsXG4gIFRZUE9HUkFQSFlfUlVMRSxcbiAgXCJOZXZlciBhZGQgaW5mb3JtYXRpb24sIG9waW5pb25zLCBvciBkZXRhaWxzIG5vdCBwcmVzZW50IGluIHRoZSBpbnB1dC5cIixcbiAgXCJPdXRwdXQgb25seSB0aGUgc3VtbWFyeS5cIixcbl0uam9pbihcIlxcblwiKTtcblxuLyoqXG4gKiBJbnN0cnVjdGlvbnMgTWFzdHJhJ3MgYGdlbmVyYXRlVGl0bGVgIGhhbmRzIHRoZSBzbWFsbC10aWVyIG1vZGVsIHRvXG4gKiBuYW1lIGEgY29udmVyc2F0aW9uIHRocmVhZCBmcm9tIGl0cyBvcGVuaW5nIHR1cm4uIEtlcHQgdGVyc2Ugc28gdGhlXG4gKiBtb2RlbCByZXR1cm5zIGEgYmFyZSB0aXRsZSB3aXRoIG5vIGRlY29yYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBUSVRMRV9JTlNUUlVDVElPTlMgPSBbXG4gIFwiR2VuZXJhdGUgYSBzaG9ydCwgc3BlY2lmaWMgdGl0bGUgZm9yIHRoaXMgY29udmVyc2F0aW9uLCAzIHRvIDYgd29yZHMuXCIsXG4gIFwiQ2FwdHVyZSB0aGUgdXNlcidzIHRvcGljLCBub3QgdGhlIGFzc2lzdGFudCdzIHJlc3BvbnNlLlwiLFxuICBcIlBsYWluIHRleHQgb25seTogbm8gc3Vycm91bmRpbmcgcXVvdGVzIGFuZCBubyB0cmFpbGluZyBwdW5jdHVhdGlvbi5cIixcbiAgVFlQT0dSQVBIWV9SVUxFLFxuICBcIk91dHB1dCBvbmx5IHRoZSB0aXRsZS5cIixcbl0uam9pbihcIiBcIik7XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgc21hbGwtdGllciBtb2RlbCBmb3Igc3VtbWFyaXphdGlvbiAvIHRpdGxpbmcuIFJldXNlZCBieVxuICogYm90aCB0aGUgc3VtbWFyaXplciBhZ2VudCBhbmQgTWFzdHJhIG1lbW9yeSdzIGBnZW5lcmF0ZVRpdGxlYC5cbiAqXG4gKiBSZXR1cm5lZCBhcyBhIGByZXF1ZXN0Q29udGV4dGAtdGFraW5nIGZ1bmN0aW9uIChhIE1hc3RyYVxuICogYER5bmFtaWNBcmd1bWVudDxNYXN0cmFNb2RlbENvbmZpZz5gKSBzbyBlYWNoIGNhbGwgbWludHMgdXNlci1zY29wZWRcbiAqIHRva2VucyB2aWEge0BsaW5rIGJ1aWxkTW9kZWx9LCBleGFjdGx5IGxpa2UgdGhlIHByaW1hcnkgYWdlbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyeU1vZGVsKFxuICBjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyxcbik6IChhcmdzOiB7IHJlcXVlc3RDb250ZXh0OiBSZXF1ZXN0Q29udGV4dCB9KSA9PiBQcm9taXNlPE1hc3RyYU1vZGVsQ29uZmlnPiB7XG4gIHJldHVybiAoeyByZXF1ZXN0Q29udGV4dCB9KSA9PlxuICAgIGJ1aWxkTW9kZWwoY29uZmlnLCByZXF1ZXN0Q29udGV4dCwgeyBtb2RlbENsYXNzOiBTVU1NQVJZX01PREVMX0NMQVNTIH0pO1xufVxuXG4vKipcbiAqIE9uZSBzdW1tYXJpemVyIGBBZ2VudGAgcGVyIHBsdWdpbiBjb25maWcsIGNhY2hlZCBvbiBjb25maWctb2JqZWN0XG4gKiBpZGVudGl0eSBzbyBhIGhvdCB0b29sIHBhdGggZG9lc24ndCBwYXkgdGhlIGNvbnN0cnVjdG9yIGNvc3QgZWFjaFxuICogY2FsbC4gYFdlYWtNYXBgIGxldHMgcmV0aXJlZCBjb25maWdzIChlLmcuIHRlc3QgcmVjb25maWd1cmF0aW9ucylcbiAqIHJlbGVhc2UgdGhlaXIgYWdlbnQgd2l0aG91dCBtYW51YWwgZXZpY3Rpb24uXG4gKi9cbmNvbnN0IHN1bW1hcml6ZXJBZ2VudHMgPSBuZXcgV2Vha01hcDxNYXN0cmFQbHVnaW5Db25maWcsIEFnZW50PigpO1xuXG5mdW5jdGlvbiBnZXRTdW1tYXJpemVyQWdlbnQoY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpOiBBZ2VudCB7XG4gIGxldCBhZ2VudCA9IHN1bW1hcml6ZXJBZ2VudHMuZ2V0KGNvbmZpZyk7XG4gIGlmICghYWdlbnQpIHtcbiAgICBhZ2VudCA9IG5ldyBBZ2VudCh7XG4gICAgICBpZDogXCJzdW1tYXJpemVyXCIsXG4gICAgICBuYW1lOiBcIlN1bW1hcml6ZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbmRlbnNlcyB0ZXh0IGludG8gYSBzaG9ydCBzdW1tYXJ5IHVzaW5nIGEgZmFzdCwgc21hbGwgbW9kZWwuXCIsXG4gICAgICBpbnN0cnVjdGlvbnM6IFNVTU1BUklaRVJfSU5TVFJVQ1RJT05TLFxuICAgICAgbW9kZWw6IHN1bW1hcnlNb2RlbChjb25maWcpLFxuICAgIH0pO1xuICAgIHN1bW1hcml6ZXJBZ2VudHMuc2V0KGNvbmZpZywgYWdlbnQpO1xuICB9XG4gIHJldHVybiBhZ2VudDtcbn1cblxuLyoqIElucHV0cyBhY2NlcHRlZCBieSB0aGUgYHN1bW1hcml6ZWAgdG9vbC4gKi9cbmNvbnN0IHN1bW1hcml6ZUlucHV0ID0gei5vYmplY3Qoe1xuICB0ZXh0OiB6LnN0cmluZygpLm1pbigxKS5kZXNjcmliZShcIlRoZSB0ZXh0IHRvIHN1bW1hcml6ZS5cIiksXG4gIGluc3RydWN0aW9uczogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJPcHRpb25hbCBleHRyYSBndWlkYW5jZSBmb3IgdGhlIHN1bW1hcnksIGUuZy4gJ29uZSBzZW50ZW5jZScgb3IgJ2xpc3QgdGhlIGFjdGlvbiBpdGVtcycuXCIsXG4gICAgKSxcbiAgbWF4V29yZHM6IHpcbiAgICAubnVtYmVyKClcbiAgICAuaW50KClcbiAgICAucG9zaXRpdmUoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFwiT3B0aW9uYWwgc29mdCBjYXAgb24gdGhlIHN1bW1hcnkgbGVuZ3RoLCBpbiB3b3Jkcy5cIiksXG59KTtcblxuLyoqIE9wdGlvbnMgYWNjZXB0ZWQgYnkge0BsaW5rIHN1bW1hcml6ZVRleHR9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdW1tYXJpemVPcHRpb25zIHtcbiAgLyoqIEV4dHJhIGd1aWRhbmNlIGZvciB0aGUgc3VtbWFyeSAobGVuZ3RoLCBmb2N1cywgZm9ybWF0KS4gKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuICAvKiogU29mdCBjYXAgb24gc3VtbWFyeSBsZW5ndGgsIGluIHdvcmRzLiAqL1xuICBtYXhXb3Jkcz86IG51bWJlcjtcbiAgLyoqIEFjdGl2ZSByZXF1ZXN0IGNvbnRleHQsIHNvIHRoZSBtb2RlbCByZXNvbHZlciBtaW50cyB1c2VyLXNjb3BlZCB0b2tlbnMuICovXG4gIHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQ7XG4gIC8qKiBBYm9ydCBzaWduYWwgYnJpZGdlZCBmcm9tIHRoZSBjYWxsaW5nIHRvb2wgLyByZXF1ZXN0LiAqL1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vKipcbiAqIFN1bW1hcml6ZSBgdGV4dGAgd2l0aCB0aGUgc21hbGwtdGllciBzdW1tYXJpemVyIGFnZW50LCByZXR1cm5pbmcgdGhlXG4gKiB0cmltbWVkIHN1bW1hcnkgc3RyaW5nLiBUaHJvd3Mgb24gbW9kZWwgZmFpbHVyZSAodGhlIGNhbGxlciBkZWNpZGVzXG4gKiBob3cgdG8gZGVncmFkZSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdW1tYXJpemVUZXh0KFxuICBjb25maWc6IE1hc3RyYVBsdWdpbkNvbmZpZyxcbiAgdGV4dDogc3RyaW5nLFxuICBvcHRpb25zOiBTdW1tYXJpemVPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGluc3RydWN0aW9ucywgbWF4V29yZHMsIHJlcXVlc3RDb250ZXh0LCBhYm9ydFNpZ25hbCB9ID0gb3B0aW9ucztcbiAgY29uc3QgcHJvbXB0ID0gc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbih7XG4gICAgLi4uKGluc3RydWN0aW9ucyA/IHsgR3VpZGFuY2U6IGluc3RydWN0aW9ucyB9IDoge30pLFxuICAgIC4uLihtYXhXb3JkcyAhPT0gdW5kZWZpbmVkID8geyBcIk1heCBsZW5ndGggKHdvcmRzKVwiOiBTdHJpbmcobWF4V29yZHMpIH0gOiB7fSksXG4gICAgVGV4dDogdGV4dCxcbiAgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFN1bW1hcml6ZXJBZ2VudChjb25maWcpLmdlbmVyYXRlKHByb21wdCwge1xuICAgIC4uLihyZXF1ZXN0Q29udGV4dCA/IHsgcmVxdWVzdENvbnRleHQgfSA6IHt9KSxcbiAgICAuLi4oYWJvcnRTaWduYWwgPyB7IGFib3J0U2lnbmFsIH0gOiB7fSksXG4gIH0pO1xuICByZXR1cm4gcmVzdWx0LnRleHQudHJpbSgpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBgc3VtbWFyaXplYCB0b29sLiBFeHBvc2VkIGFzIGFuIGFtYmllbnQgc3lzdGVtIHRvb2wgKGxpa2VcbiAqIGByZW5kZXJfZGF0YWApIHNvIGV2ZXJ5IGFnZW50IGNhbiBvZmZsb2FkIGNvbmRlbnNpbmcgbG9uZyBjb250ZW50LFxuICogbm90ZXMsIHRyYW5zY3JpcHRzLCBvciBidWxreSB0b29sIHJlc3VsdHMgdG8gdGhlIGZhc3QgdGllciBpbnN0ZWFkIG9mXG4gKiBzcGVuZGluZyBpdHMgcHJpbWFyeSBjaGF0IG1vZGVsLiBUaGUgdG9vbCByZWFkcyB0aGUgbGl2ZVxuICogYHJlcXVlc3RDb250ZXh0YCAvIGBhYm9ydFNpZ25hbGAgb2ZmIHRoZSBNYXN0cmEgZXhlY3V0aW9uIGNvbnRleHQgc29cbiAqIGl0cyBtb2RlbCBjYWxsIHN0YXlzIHVzZXItc2NvcGVkIGFuZCBjYW5jZWxzIHdpdGggdGhlIHR1cm4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN1bW1hcml6ZVRvb2woY29uZmlnOiBNYXN0cmFQbHVnaW5Db25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBcInN1bW1hcml6ZVwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJTdW1tYXJpemUgYSBibG9jayBvZiB0ZXh0IHVzaW5nIGEgZmFzdCwgc21hbGwgbW9kZWwuIFVzZSBpdCB0byBjb25kZW5zZSBsb25nIFwiICtcbiAgICAgIFwiY29udGVudCwgbm90ZXMsIHRyYW5zY3JpcHRzLCBvciB0b29sIHJlc3VsdHMgaW50byBhIHNob3J0IHN1bW1hcnkgd2l0aG91dCBcIiArXG4gICAgICBcInNwZW5kaW5nIHRoZSBtYWluIGNoYXQgbW9kZWwuXCIsXG4gICAgaW5wdXRTY2hlbWE6IHN1bW1hcml6ZUlucHV0LFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyB0ZXh0LCBpbnN0cnVjdGlvbnMsIG1heFdvcmRzIH0gPSBpbnB1dCBhcyB6LmluZmVyPHR5cGVvZiBzdW1tYXJpemVJbnB1dD47XG4gICAgICBjb25zdCBjdHggPSBjb250ZXh0IGFzXG4gICAgICAgIHsgcmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dDsgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCB9IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgc3VtbWFyeSA9IGF3YWl0IHN1bW1hcml6ZVRleHQoY29uZmlnLCB0ZXh0LCB7XG4gICAgICAgIC4uLihpbnN0cnVjdGlvbnMgPyB7IGluc3RydWN0aW9ucyB9IDoge30pLFxuICAgICAgICAuLi4obWF4V29yZHMgIT09IHVuZGVmaW5lZCA/IHsgbWF4V29yZHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eD8ucmVxdWVzdENvbnRleHQgPyB7IHJlcXVlc3RDb250ZXh0OiBjdHgucmVxdWVzdENvbnRleHQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eD8uYWJvcnRTaWduYWwgPyB7IGFib3J0U2lnbmFsOiBjdHguYWJvcnRTaWduYWwgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgc3VtbWFyeSB9O1xuICAgIH0sXG4gIH0pO1xufVxuIl19