footprintjs 0.2.2 → 0.3.0

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 (68) hide show
  1. package/README.md +137 -41
  2. package/dist/esm/index.js +7 -1
  3. package/dist/esm/lib/builder/FlowChartBuilder.js +72 -91
  4. package/dist/esm/lib/builder/types.js +1 -1
  5. package/dist/esm/lib/contract/defineContract.js +32 -0
  6. package/dist/esm/lib/contract/index.js +18 -0
  7. package/dist/esm/lib/contract/openapi.js +120 -0
  8. package/dist/esm/lib/contract/schema.js +199 -0
  9. package/dist/esm/lib/contract/types.js +9 -0
  10. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  11. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +5 -5
  12. package/dist/esm/lib/engine/handlers/ContinuationResolver.js +6 -6
  13. package/dist/esm/lib/engine/handlers/DeciderHandler.js +4 -4
  14. package/dist/esm/lib/engine/handlers/NodeResolver.js +1 -2
  15. package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +1 -2
  16. package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -6
  17. package/dist/esm/lib/engine/narrative/ControlFlowNarrativeGenerator.js +13 -18
  18. package/dist/esm/lib/engine/narrative/types.js +1 -1
  19. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +10 -11
  20. package/dist/esm/lib/engine/types.js +1 -1
  21. package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
  22. package/dist/esm/types/index.d.ts +4 -0
  23. package/dist/esm/types/lib/builder/FlowChartBuilder.d.ts +17 -10
  24. package/dist/esm/types/lib/builder/types.d.ts +6 -6
  25. package/dist/esm/types/lib/contract/defineContract.d.ts +18 -0
  26. package/dist/esm/types/lib/contract/index.d.ts +14 -0
  27. package/dist/esm/types/lib/contract/openapi.d.ts +12 -0
  28. package/dist/esm/types/lib/contract/schema.d.ts +14 -0
  29. package/dist/esm/types/lib/contract/types.d.ts +94 -0
  30. package/dist/esm/types/lib/engine/graph/StageNode.d.ts +0 -2
  31. package/dist/esm/types/lib/engine/narrative/ControlFlowNarrativeGenerator.d.ts +6 -6
  32. package/dist/esm/types/lib/engine/narrative/types.d.ts +6 -6
  33. package/dist/esm/types/lib/engine/types.d.ts +0 -1
  34. package/dist/esm/types/lib/runner/ExecutionRuntime.d.ts +0 -1
  35. package/dist/index.js +12 -2
  36. package/dist/lib/builder/FlowChartBuilder.js +72 -91
  37. package/dist/lib/builder/types.js +1 -1
  38. package/dist/lib/contract/defineContract.js +36 -0
  39. package/dist/lib/contract/index.js +26 -0
  40. package/dist/lib/contract/openapi.js +124 -0
  41. package/dist/lib/contract/schema.js +205 -0
  42. package/dist/lib/contract/types.js +10 -0
  43. package/dist/lib/engine/graph/StageNode.js +1 -1
  44. package/dist/lib/engine/handlers/ChildrenExecutor.js +5 -5
  45. package/dist/lib/engine/handlers/ContinuationResolver.js +6 -6
  46. package/dist/lib/engine/handlers/DeciderHandler.js +4 -4
  47. package/dist/lib/engine/handlers/NodeResolver.js +1 -2
  48. package/dist/lib/engine/handlers/RuntimeStructureManager.js +1 -2
  49. package/dist/lib/engine/handlers/SelectorHandler.js +6 -6
  50. package/dist/lib/engine/narrative/ControlFlowNarrativeGenerator.js +13 -18
  51. package/dist/lib/engine/narrative/types.js +1 -1
  52. package/dist/lib/engine/traversal/FlowchartTraverser.js +10 -11
  53. package/dist/lib/engine/types.js +1 -1
  54. package/dist/lib/runner/ExecutionRuntime.js +1 -1
  55. package/dist/types/index.d.ts +4 -0
  56. package/dist/types/lib/builder/FlowChartBuilder.d.ts +17 -10
  57. package/dist/types/lib/builder/types.d.ts +6 -6
  58. package/dist/types/lib/contract/defineContract.d.ts +18 -0
  59. package/dist/types/lib/contract/index.d.ts +14 -0
  60. package/dist/types/lib/contract/openapi.d.ts +12 -0
  61. package/dist/types/lib/contract/schema.d.ts +14 -0
  62. package/dist/types/lib/contract/types.d.ts +94 -0
  63. package/dist/types/lib/engine/graph/StageNode.d.ts +0 -2
  64. package/dist/types/lib/engine/narrative/ControlFlowNarrativeGenerator.d.ts +6 -6
  65. package/dist/types/lib/engine/narrative/types.d.ts +6 -6
  66. package/dist/types/lib/engine/types.d.ts +0 -1
  67. package/dist/types/lib/runner/ExecutionRuntime.d.ts +0 -1
  68. package/package.json +1 -1
@@ -6,4 +6,4 @@
6
6
  * are defined locally here for the new library.
7
7
  */
8
8
  export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBidWlsZGVyL3R5cGVzLnRzIOKAlCBBbGwgdHlwZXMgdXNlZCBieSB0aGUgYnVpbGRlciBsaWJyYXJ5LlxuICpcbiAqIFplcm8gZGVwcyBvbiBvbGQgY29kZS4gT25seSBpbXBvcnRzIGZyb20gbGliL21lbW9yeSAoUGhhc2UgMSkuXG4gKiBUeXBlcyB0aGF0IG9yaWdpbmF0ZWQgaW4gZXhlY3V0b3IvUGlwZWxpbmUudHMgYW5kIGV4ZWN1dG9yL3R5cGVzLnRzXG4gKiBhcmUgZGVmaW5lZCBsb2NhbGx5IGhlcmUgZm9yIHRoZSBuZXcgbGlicmFyeS5cbiAqL1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIExvZ2dlciAoY29waWVkIGZyb20gdXRpbHMvbG9nZ2VyLnRzIHRvIGF2b2lkIG9sZC1jb2RlIGRlcClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIElMb2dnZXIge1xuICBpbmZvKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGxvZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBlcnJvcihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2NvcGUgUHJvdGVjdGlvbiAoY29waWVkIGZyb20gc2NvcGUvcHJvdGVjdGlvbi90eXBlcy50cylcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTY29wZVByb3RlY3Rpb25Nb2RlID0gJ2Vycm9yJyB8ICd3YXJuJyB8ICdvZmYnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0YWdlIEZ1bmN0aW9uXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgc3RhZ2VzIHRvIGVtaXQgdG9rZW5zIGluY3JlbWVudGFsbHkuICovXG5leHBvcnQgdHlwZSBTdHJlYW1DYWxsYmFjayA9ICh0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIHN0YWdlIGhhbmRsZXJzLlxuICpcbiAqIFRPdXQgICDigJMgcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiBUU2NvcGUg4oCTIHRoZSBzY29wZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBzdGFnZVxuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbiAgc3RyZWFtQ2FsbGJhY2s/OiBTdHJlYW1DYWxsYmFjayxcbikgPT4gUHJvbWlzZTxUT3V0PiB8IFRPdXQ7XG5cbi8qKiBSZWxheGVkLWdlbmVyaWMgYWxpYXMgZm9yIGJ1aWxkZXIgZXJnb25vbWljcy4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRm4gPSBQaXBlbGluZVN0YWdlRnVuY3Rpb248YW55LCBhbnk+O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0cmVhbWluZ1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRva2VuSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCBmdWxsVGV4dD86IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1IYW5kbGVycyB7XG4gIG9uVG9rZW4/OiBTdHJlYW1Ub2tlbkhhbmRsZXI7XG4gIG9uU3RhcnQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xuICBvbkVuZD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvdyBNb3VudCBPcHRpb25zXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdGFnZU5vZGUg4oCUIHRoZSBydW50aW1lIGdyYXBoIG5vZGVcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTdGFnZU5vZGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWU7IGFsc28gdXNlZCBhcyB0aGUgc3RhZ2VNYXAga2V5LiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBzdGFibGUgaWQgKHJlcXVpcmVkIGJ5IGRlY2lkZXIvZm9yayBhZ2dyZWdhdGlvbikuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGlzcGxheSBuYW1lIGZvciBVSS4gKi9cbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgc3RhZ2UgZG9lcy4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLy8g4pSA4pSAIENvbnRpbnVhdGlvbnMg4pSA4pSAXG4gIC8qKiBMaW5lYXIgY29udGludWF0aW9uLiAqL1xuICBuZXh0PzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKiBQYXJhbGxlbCBjaGlsZHJlbiAoZm9yaykuICovXG4gIGNoaWxkcmVuPzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXTtcblxuICAvLyDilIDilIAgRGVjaWRlcnMgJiBTZWxlY3RvcnMg4pSA4pSAXG4gIC8qKiBXaGVuIHRydWUsIGZuIElTIHRoZSBkZWNpZGVyIOKAlCByZXR1cm5zIGEgYnJhbmNoIElEIHN0cmluZy4gKi9cbiAgZGVjaWRlckZuPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgZm4gSVMgdGhlIHNlbGVjdG9yIOKAlCByZXR1cm5zIGJyYW5jaCBJRChzKS4gKi9cbiAgc2VsZWN0b3JGbj86IGJvb2xlYW47XG5cbiAgLy8g4pSA4pSAIFN0YWdlIGZ1bmN0aW9uIOKUgOKUgFxuICBmbj86IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xuXG4gIC8vIOKUgOKUgCBTdHJlYW1pbmcg4pSA4pSAXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG5cbiAgLy8g4pSA4pSAIFN1YmZsb3cg4pSA4pSAXG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAkcmVmPzogc3RyaW5nO1xuICBtb3VudElkPzogc3RyaW5nO1xuICBzdWJmbG93TW91bnRPcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9ucztcblxuICAvKiogV2hlbiB0cnVlLCBwYXJhbGxlbCBjaGlsZHJlbiB1c2UgZmFpbC1mYXN0IHNlbWFudGljcyAocmVqZWN0IG9uIGZpcnN0IGVycm9yKS4gKi9cbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xuXG4gIC8qKiBJbmxpbmUgc3ViZmxvdyBkZWZpbml0aW9uIGZvciBkeW5hbWljIHN1YmZsb3cgYXR0YWNobWVudC4gKi9cbiAgc3ViZmxvd0RlZj86IHtcbiAgICByb290OiBTdGFnZU5vZGU7XG4gICAgc3RhZ2VNYXA/OiBNYXA8c3RyaW5nLCBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gICAgYnVpbGRUaW1lU3RydWN0dXJlPzogdW5rbm93bjtcbiAgICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlIH0+O1xuICB9O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTZXJpYWxpemVkIFBpcGVsaW5lIFN0cnVjdHVyZSAoSlNPTi1zYWZlLCBmb3IgdmlzdWFsaXphdGlvbilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnZm9yaycgfCAnc3RyZWFtaW5nJztcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0U3BlYyAocHVyZSBKU09OLCBubyBmdW5jdGlvbnMg4oCUIGZvciBGReKGkkJFIHRyYW5zcG9ydClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydFNwZWMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogRmxvd0NoYXJ0U3BlY1tdO1xuICBuZXh0PzogRmxvd0NoYXJ0U3BlYztcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQnVpbGQtVGltZSBFeHRyYWN0b3Jcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogTWV0YWRhdGEgcHJvdmlkZWQgdG8gdGhlIGJ1aWxkLXRpbWUgZXh0cmFjdG9yIGZvciBlYWNoIG5vZGUuICovXG5leHBvcnQgdHlwZSBCdWlsZFRpbWVOb2RlTWV0YWRhdGEgPSBGbG93Q2hhcnRTcGVjO1xuXG5leHBvcnQgdHlwZSBCdWlsZFRpbWVFeHRyYWN0b3I8VFJlc3VsdCA9IEZsb3dDaGFydFNwZWM+ID0gKG1ldGFkYXRhOiBCdWlsZFRpbWVOb2RlTWV0YWRhdGEpID0+IFRSZXN1bHQ7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHJhdmVyc2FsIEV4dHJhY3RvciAocnVudGltZSlcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBUcmF2ZXJzYWxFeHRyYWN0b3I8VFJlc3VsdCA9IHVua25vd24+ID0gKHNuYXBzaG90OiB1bmtub3duKSA9PiBUUmVzdWx0IHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGbG93Q2hhcnQg4oCUIGNvbXBpbGVkIG91dHB1dCBvZiBidWlsZCgpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRmxvd0NoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBleHRyYWN0b3I/OiBUcmF2ZXJzYWxFeHRyYWN0b3I7XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGVuYWJsZU5hcnJhdGl2ZT86IGJvb2xlYW47XG4gIGxvZ2dlcj86IElMb2dnZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YWdlRGVzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTaW1wbGlmaWVkIFBhcmFsbGVsIFNwZWMgKGZvciBhZGRMaXN0T2ZGdW5jdGlvbilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTaW1wbGlmaWVkUGFyYWxsZWxTcGVjPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGZuPzogUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT47XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEV4ZWNPcHRpb25zIChmb3IgZXhlY3V0ZSgpIGNvbnZlbmllbmNlIOKAlCB1c2VkIGJ5IHJ1bm5lciBsYXllcilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBFeGVjT3B0aW9ucyA9IHtcbiAgZGVmYXVsdHM/OiB1bmtub3duO1xuICBpbml0aWFsPzogdW5rbm93bjtcbiAgcmVhZE9ubHk/OiB1bmtub3duO1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGU6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU/OiBTY29wZVByb3RlY3Rpb25Nb2RlO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdWJmbG93UmVmXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVmIHtcbiAgJHJlZjogc3RyaW5nO1xuICBtb3VudElkOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xufVxuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBidWlsZGVyL3R5cGVzLnRzIOKAlCBBbGwgdHlwZXMgdXNlZCBieSB0aGUgYnVpbGRlciBsaWJyYXJ5LlxuICpcbiAqIFplcm8gZGVwcyBvbiBvbGQgY29kZS4gT25seSBpbXBvcnRzIGZyb20gbGliL21lbW9yeSAoUGhhc2UgMSkuXG4gKiBUeXBlcyB0aGF0IG9yaWdpbmF0ZWQgaW4gZXhlY3V0b3IvUGlwZWxpbmUudHMgYW5kIGV4ZWN1dG9yL3R5cGVzLnRzXG4gKiBhcmUgZGVmaW5lZCBsb2NhbGx5IGhlcmUgZm9yIHRoZSBuZXcgbGlicmFyeS5cbiAqL1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIExvZ2dlciAoY29waWVkIGZyb20gdXRpbHMvbG9nZ2VyLnRzIHRvIGF2b2lkIG9sZC1jb2RlIGRlcClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIElMb2dnZXIge1xuICBpbmZvKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGxvZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBlcnJvcihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2NvcGUgUHJvdGVjdGlvbiAoY29waWVkIGZyb20gc2NvcGUvcHJvdGVjdGlvbi90eXBlcy50cylcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTY29wZVByb3RlY3Rpb25Nb2RlID0gJ2Vycm9yJyB8ICd3YXJuJyB8ICdvZmYnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0YWdlIEZ1bmN0aW9uXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgc3RhZ2VzIHRvIGVtaXQgdG9rZW5zIGluY3JlbWVudGFsbHkuICovXG5leHBvcnQgdHlwZSBTdHJlYW1DYWxsYmFjayA9ICh0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIHN0YWdlIGhhbmRsZXJzLlxuICpcbiAqIFRPdXQgICDigJMgcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiBUU2NvcGUg4oCTIHRoZSBzY29wZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBzdGFnZVxuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbiAgc3RyZWFtQ2FsbGJhY2s/OiBTdHJlYW1DYWxsYmFjayxcbikgPT4gUHJvbWlzZTxUT3V0PiB8IFRPdXQ7XG5cbi8qKiBSZWxheGVkLWdlbmVyaWMgYWxpYXMgZm9yIGJ1aWxkZXIgZXJnb25vbWljcy4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRm4gPSBQaXBlbGluZVN0YWdlRnVuY3Rpb248YW55LCBhbnk+O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0cmVhbWluZ1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRva2VuSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCBmdWxsVGV4dD86IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1IYW5kbGVycyB7XG4gIG9uVG9rZW4/OiBTdHJlYW1Ub2tlbkhhbmRsZXI7XG4gIG9uU3RhcnQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xuICBvbkVuZD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvdyBNb3VudCBPcHRpb25zXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdGFnZU5vZGUg4oCUIHRoZSBydW50aW1lIGdyYXBoIG5vZGVcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTdGFnZU5vZGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWU7IGFsc28gdXNlZCBhcyB0aGUgc3RhZ2VNYXAga2V5LiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBzdGFibGUgaWQgKHJlcXVpcmVkIGJ5IGRlY2lkZXIvZm9yayBhZ2dyZWdhdGlvbikuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN0YWdlIGRvZXMuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgCBDb250aW51YXRpb25zIOKUgOKUgFxuICAvKiogTGluZWFyIGNvbnRpbnVhdGlvbi4gKi9cbiAgbmV4dD86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKiogUGFyYWxsZWwgY2hpbGRyZW4gKGZvcmspLiAqL1xuICBjaGlsZHJlbj86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W107XG5cbiAgLy8g4pSA4pSAIERlY2lkZXJzICYgU2VsZWN0b3JzIOKUgOKUgFxuICAvKiogV2hlbiB0cnVlLCBmbiBJUyB0aGUgZGVjaWRlciDigJQgcmV0dXJucyBhIGJyYW5jaCBJRCBzdHJpbmcuICovXG4gIGRlY2lkZXJGbj86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIGZuIElTIHRoZSBzZWxlY3RvciDigJQgcmV0dXJucyBicmFuY2ggSUQocykuICovXG4gIHNlbGVjdG9yRm4/OiBib29sZWFuO1xuXG4gIC8vIOKUgOKUgCBTdGFnZSBmdW5jdGlvbiDilIDilIBcbiAgZm4/OiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPjtcblxuICAvLyDilIDilIAgU3RyZWFtaW5nIOKUgOKUgFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgCBTdWJmbG93IOKUgOKUgFxuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgJHJlZj86IHN0cmluZztcbiAgbW91bnRJZD86IHN0cmluZztcbiAgc3ViZmxvd01vdW50T3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnM7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgcGFyYWxsZWwgY2hpbGRyZW4gdXNlIGZhaWwtZmFzdCBzZW1hbnRpY3MgKHJlamVjdCBvbiBmaXJzdCBlcnJvcikuICovXG4gIGZhaWxGYXN0PzogYm9vbGVhbjtcblxuICAvKiogSW5saW5lIHN1YmZsb3cgZGVmaW5pdGlvbiBmb3IgZHluYW1pYyBzdWJmbG93IGF0dGFjaG1lbnQuICovXG4gIHN1YmZsb3dEZWY/OiB7XG4gICAgcm9vdDogU3RhZ2VOb2RlO1xuICAgIHN0YWdlTWFwPzogTWFwPHN0cmluZywgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICAgIGJ1aWxkVGltZVN0cnVjdHVyZT86IHVua25vd247XG4gICAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZSB9PjtcbiAgfTtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKEpTT04tc2FmZSwgZm9yIHZpc3VhbGl6YXRpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZyc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0U3BlYyAocHVyZSBKU09OLCBubyBmdW5jdGlvbnMg4oCUIGZvciBGReKGkkJFIHRyYW5zcG9ydClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydFNwZWMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBGbG93Q2hhcnRTcGVjW107XG4gIG5leHQ/OiBGbG93Q2hhcnRTcGVjO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBCdWlsZC1UaW1lIEV4dHJhY3RvclxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBNZXRhZGF0YSBwcm92aWRlZCB0byB0aGUgYnVpbGQtdGltZSBleHRyYWN0b3IgZm9yIGVhY2ggbm9kZS4gKi9cbmV4cG9ydCB0eXBlIEJ1aWxkVGltZU5vZGVNZXRhZGF0YSA9IEZsb3dDaGFydFNwZWM7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkVGltZUV4dHJhY3RvcjxUUmVzdWx0ID0gRmxvd0NoYXJ0U3BlYz4gPSAobWV0YWRhdGE6IEJ1aWxkVGltZU5vZGVNZXRhZGF0YSkgPT4gVFJlc3VsdDtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBUcmF2ZXJzYWwgRXh0cmFjdG9yIChydW50aW1lKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFRyYXZlcnNhbEV4dHJhY3RvcjxUUmVzdWx0ID0gdW5rbm93bj4gPSAoc25hcHNob3Q6IHVua25vd24pID0+IFRSZXN1bHQgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydCDigJQgY29tcGlsZWQgb3V0cHV0IG9mIGJ1aWxkKClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBGbG93Q2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIGV4dHJhY3Rvcj86IFRyYXZlcnNhbEV4dHJhY3RvcjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICBidWlsZFRpbWVTdHJ1Y3R1cmU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbiAgbG9nZ2VyPzogSUxvZ2dlcjtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhZ2VEZXNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJbnB1dCBzY2hlbWEgKFpvZCBvciBKU09OIFNjaGVtYSkg4oCUIGRlY2xhcmVkIHZpYSBzZXRJbnB1dFNjaGVtYSgpLiAqL1xuICBpbnB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0T3V0cHV0U2NoZW1hKCkuICovXG4gIG91dHB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgbWFwcGVyIOKAlCBleHRyYWN0cyByZXNwb25zZSBmcm9tIGZpbmFsIHNjb3BlLiAqL1xuICBvdXRwdXRNYXBwZXI/OiAoZmluYWxTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHVua25vd247XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNpbXBsaWZpZWQgUGFyYWxsZWwgU3BlYyAoZm9yIGFkZExpc3RPZkZ1bmN0aW9uKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBmbj86IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFeGVjT3B0aW9ucyAoZm9yIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSDigJQgdXNlZCBieSBydW5uZXIgbGF5ZXIpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSB7XG4gIGRlZmF1bHRzPzogdW5rbm93bjtcbiAgaW5pdGlhbD86IHVua25vd247XG4gIHJlYWRPbmx5PzogdW5rbm93bjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvd1JlZlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlZiB7XG4gICRyZWY6IHN0cmluZztcbiAgbW91bnRJZDogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,32 @@
1
+ /**
2
+ * contract/defineContract.ts — Factory for creating a FlowChartContract.
3
+ *
4
+ * Wraps a compiled FlowChart with I/O schemas and an output mapper,
5
+ * using the same pattern as SubflowMountOptions (inputMapper/outputMapper).
6
+ *
7
+ * Usage:
8
+ * const contract = defineContract(chart, {
9
+ * inputSchema: z.object({ name: z.string() }),
10
+ * outputSchema: z.object({ greeting: z.string() }),
11
+ * outputMapper: (scope) => ({ greeting: scope.message as string }),
12
+ * });
13
+ *
14
+ * const openapi = contract.toOpenAPI();
15
+ */
16
+ import { generateOpenAPI } from './openapi';
17
+ import { normalizeSchema } from './schema';
18
+ export function defineContract(chart, options) {
19
+ const inputSchema = options.inputSchema ? normalizeSchema(options.inputSchema) : undefined;
20
+ const outputSchema = options.outputSchema ? normalizeSchema(options.outputSchema) : undefined;
21
+ const contract = {
22
+ chart,
23
+ inputSchema,
24
+ outputSchema,
25
+ outputMapper: options.outputMapper,
26
+ toOpenAPI(apiOptions) {
27
+ return generateOpenAPI(contract, apiOptions);
28
+ },
29
+ };
30
+ return contract;
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lQ29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0L2RlZmluZUNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBR0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzNDLE1BQU0sVUFBVSxjQUFjLENBQzVCLEtBQWdCLEVBQ2hCLE9BQWtEO0lBRWxELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMzRixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFOUYsTUFBTSxRQUFRLEdBQXVDO1FBQ25ELEtBQUs7UUFDTCxXQUFXO1FBQ1gsWUFBWTtRQUNaLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtRQUNsQyxTQUFTLENBQUMsVUFBMkI7WUFDbkMsT0FBTyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7S0FDRixDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29udHJhY3QvZGVmaW5lQ29udHJhY3QudHMg4oCUIEZhY3RvcnkgZm9yIGNyZWF0aW5nIGEgRmxvd0NoYXJ0Q29udHJhY3QuXG4gKlxuICogV3JhcHMgYSBjb21waWxlZCBGbG93Q2hhcnQgd2l0aCBJL08gc2NoZW1hcyBhbmQgYW4gb3V0cHV0IG1hcHBlcixcbiAqIHVzaW5nIHRoZSBzYW1lIHBhdHRlcm4gYXMgU3ViZmxvd01vdW50T3B0aW9ucyAoaW5wdXRNYXBwZXIvb3V0cHV0TWFwcGVyKS5cbiAqXG4gKiBVc2FnZTpcbiAqICAgY29uc3QgY29udHJhY3QgPSBkZWZpbmVDb250cmFjdChjaGFydCwge1xuICogICAgIGlucHV0U2NoZW1hOiB6Lm9iamVjdCh7IG5hbWU6IHouc3RyaW5nKCkgfSksXG4gKiAgICAgb3V0cHV0U2NoZW1hOiB6Lm9iamVjdCh7IGdyZWV0aW5nOiB6LnN0cmluZygpIH0pLFxuICogICAgIG91dHB1dE1hcHBlcjogKHNjb3BlKSA9PiAoeyBncmVldGluZzogc2NvcGUubWVzc2FnZSBhcyBzdHJpbmcgfSksXG4gKiAgIH0pO1xuICpcbiAqICAgY29uc3Qgb3BlbmFwaSA9IGNvbnRyYWN0LnRvT3BlbkFQSSgpO1xuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd0NoYXJ0IH0gZnJvbSAnLi4vYnVpbGRlci90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU9wZW5BUEkgfSBmcm9tICcuL29wZW5hcGknO1xuaW1wb3J0IHsgbm9ybWFsaXplU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRDb250cmFjdCwgRmxvd0NoYXJ0Q29udHJhY3RPcHRpb25zLCBPcGVuQVBJT3B0aW9ucywgT3BlbkFQSVNwZWMgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbnRyYWN0PFRJbnB1dCA9IHVua25vd24sIFRPdXRwdXQgPSB1bmtub3duPihcbiAgY2hhcnQ6IEZsb3dDaGFydCxcbiAgb3B0aW9uczogRmxvd0NoYXJ0Q29udHJhY3RPcHRpb25zPFRJbnB1dCwgVE91dHB1dD4sXG4pOiBGbG93Q2hhcnRDb250cmFjdDxUSW5wdXQsIFRPdXRwdXQ+IHtcbiAgY29uc3QgaW5wdXRTY2hlbWEgPSBvcHRpb25zLmlucHV0U2NoZW1hID8gbm9ybWFsaXplU2NoZW1hKG9wdGlvbnMuaW5wdXRTY2hlbWEpIDogdW5kZWZpbmVkO1xuICBjb25zdCBvdXRwdXRTY2hlbWEgPSBvcHRpb25zLm91dHB1dFNjaGVtYSA/IG5vcm1hbGl6ZVNjaGVtYShvcHRpb25zLm91dHB1dFNjaGVtYSkgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgY29udHJhY3Q6IEZsb3dDaGFydENvbnRyYWN0PFRJbnB1dCwgVE91dHB1dD4gPSB7XG4gICAgY2hhcnQsXG4gICAgaW5wdXRTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hLFxuICAgIG91dHB1dE1hcHBlcjogb3B0aW9ucy5vdXRwdXRNYXBwZXIsXG4gICAgdG9PcGVuQVBJKGFwaU9wdGlvbnM/OiBPcGVuQVBJT3B0aW9ucyk6IE9wZW5BUElTcGVjIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZU9wZW5BUEkoY29udHJhY3QsIGFwaU9wdGlvbnMpO1xuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIGNvbnRyYWN0O1xufVxuIl19
@@ -0,0 +1,18 @@
1
+ /* istanbul ignore file */
2
+ /**
3
+ * contract/ — FlowChart I/O contract and OpenAPI generation layer.
4
+ *
5
+ * Standalone library: wraps a compiled FlowChart with input/output schemas
6
+ * and generates OpenAPI 3.1 specs. Uses the same inputMapper/outputMapper
7
+ * pattern as subflow mounting.
8
+ *
9
+ * Zero runtime deps on Zod — Zod schemas detected via duck-typing and
10
+ * converted to JSON Schema at contract creation time.
11
+ */
12
+ // Factory
13
+ export { defineContract } from './defineContract';
14
+ // Schema utilities
15
+ export { isZodSchema, normalizeSchema, zodToJsonSchema } from './schema';
16
+ // OpenAPI generator
17
+ export { generateOpenAPI } from './openapi';
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQjs7Ozs7Ozs7O0dBU0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELG1CQUFtQjtBQUNuQixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekUsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBjb250cmFjdC8g4oCUIEZsb3dDaGFydCBJL08gY29udHJhY3QgYW5kIE9wZW5BUEkgZ2VuZXJhdGlvbiBsYXllci5cbiAqXG4gKiBTdGFuZGFsb25lIGxpYnJhcnk6IHdyYXBzIGEgY29tcGlsZWQgRmxvd0NoYXJ0IHdpdGggaW5wdXQvb3V0cHV0IHNjaGVtYXNcbiAqIGFuZCBnZW5lcmF0ZXMgT3BlbkFQSSAzLjEgc3BlY3MuIFVzZXMgdGhlIHNhbWUgaW5wdXRNYXBwZXIvb3V0cHV0TWFwcGVyXG4gKiBwYXR0ZXJuIGFzIHN1YmZsb3cgbW91bnRpbmcuXG4gKlxuICogWmVybyBydW50aW1lIGRlcHMgb24gWm9kIOKAlCBab2Qgc2NoZW1hcyBkZXRlY3RlZCB2aWEgZHVjay10eXBpbmcgYW5kXG4gKiBjb252ZXJ0ZWQgdG8gSlNPTiBTY2hlbWEgYXQgY29udHJhY3QgY3JlYXRpb24gdGltZS5cbiAqL1xuXG4vLyBGYWN0b3J5XG5leHBvcnQgeyBkZWZpbmVDb250cmFjdCB9IGZyb20gJy4vZGVmaW5lQ29udHJhY3QnO1xuXG4vLyBTY2hlbWEgdXRpbGl0aWVzXG5leHBvcnQgeyBpc1pvZFNjaGVtYSwgbm9ybWFsaXplU2NoZW1hLCB6b2RUb0pzb25TY2hlbWEgfSBmcm9tICcuL3NjaGVtYSc7XG5cbi8vIE9wZW5BUEkgZ2VuZXJhdG9yXG5leHBvcnQgeyBnZW5lcmF0ZU9wZW5BUEkgfSBmcm9tICcuL29wZW5hcGknO1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBGbG93Q2hhcnRDb250cmFjdCxcbiAgRmxvd0NoYXJ0Q29udHJhY3RPcHRpb25zLFxuICBKc29uU2NoZW1hLFxuICBPcGVuQVBJT3B0aW9ucyxcbiAgT3BlbkFQSVNwZWMsXG4gIFNjaGVtYUlucHV0LFxufSBmcm9tICcuL3R5cGVzJztcbiJdfQ==
@@ -0,0 +1,120 @@
1
+ /**
2
+ * contract/openapi.ts — OpenAPI 3.1 spec generator.
3
+ *
4
+ * Generates an OpenAPI spec from a FlowChartContract by combining:
5
+ * - chart.description → operation description
6
+ * - chart.stageDescriptions → step-by-step detail
7
+ * - inputSchema → requestBody
8
+ * - outputSchema → response
9
+ * - chart.buildTimeStructure → operation metadata (branches, forks, etc.)
10
+ */
11
+ // ─────────────────────────────────────────────────────────────────────────────
12
+ // Internal helpers
13
+ // ─────────────────────────────────────────────────────────────────────────────
14
+ function slugify(name) {
15
+ return name
16
+ .toLowerCase()
17
+ .replace(/[^a-z0-9]+/g, '-')
18
+ .replace(/^-|-$/g, '');
19
+ }
20
+ function buildStepsDescription(chart) {
21
+ // Walk buildTimeStructure to produce a step-by-step description
22
+ const lines = [];
23
+ let step = 0;
24
+ const walk = (node) => {
25
+ step++;
26
+ const desc = node.description ? ` — ${node.description}` : '';
27
+ if (node.hasDecider && node.branchIds) {
28
+ lines.push(`${step}. ${node.name}${desc} — Decides between: ${node.branchIds.join(', ')}`);
29
+ }
30
+ else if (node.children && node.children.length > 0 && !node.hasDecider) {
31
+ const childNames = node.children.map((c) => c.name).join(', ');
32
+ lines.push(`${step}. ${node.name}${desc} (parallel: ${childNames})`);
33
+ }
34
+ else {
35
+ lines.push(`${step}. ${node.name}${desc}`);
36
+ }
37
+ if (node.children) {
38
+ for (const child of node.children)
39
+ walk(child);
40
+ }
41
+ if (node.next)
42
+ walk(node.next);
43
+ };
44
+ walk(chart.buildTimeStructure);
45
+ const header = chart.description ? `${chart.description}\n\n` : '';
46
+ return `${header}FlowChart: ${chart.root.name}\nSteps:\n${lines.join('\n')}`;
47
+ }
48
+ // ─────────────────────────────────────────────────────────────────────────────
49
+ // Public API
50
+ // ─────────────────────────────────────────────────────────────────────────────
51
+ export function generateOpenAPI(contract, options) {
52
+ var _a, _b, _c;
53
+ const { chart, inputSchema, outputSchema } = contract;
54
+ const version = (_a = options === null || options === void 0 ? void 0 : options.version) !== null && _a !== void 0 ? _a : '1.0.0';
55
+ const basePath = (_b = options === null || options === void 0 ? void 0 : options.basePath) !== null && _b !== void 0 ? _b : '/';
56
+ const method = (_c = options === null || options === void 0 ? void 0 : options.method) !== null && _c !== void 0 ? _c : 'post';
57
+ const rootName = chart.root.name;
58
+ const operationId = slugify(rootName);
59
+ const path = `${basePath === '/' ? '' : basePath}/${operationId}`;
60
+ const fullDescription = buildStepsDescription(chart);
61
+ // Build schemas for components
62
+ const schemas = {};
63
+ const inputRef = `${rootName}Input`;
64
+ const outputRef = `${rootName}Output`;
65
+ if (inputSchema)
66
+ schemas[inputRef] = inputSchema;
67
+ if (outputSchema)
68
+ schemas[outputRef] = outputSchema;
69
+ // Build operation
70
+ const operation = {
71
+ operationId,
72
+ summary: rootName,
73
+ description: fullDescription,
74
+ ...(inputSchema
75
+ ? {
76
+ requestBody: {
77
+ required: true,
78
+ content: {
79
+ 'application/json': {
80
+ schema: { $ref: `#/components/schemas/${inputRef}` },
81
+ },
82
+ },
83
+ },
84
+ }
85
+ : {}),
86
+ responses: {
87
+ '200': {
88
+ description: 'Successful execution',
89
+ ...(outputSchema
90
+ ? {
91
+ content: {
92
+ 'application/json': {
93
+ schema: { $ref: `#/components/schemas/${outputRef}` },
94
+ },
95
+ },
96
+ }
97
+ : {}),
98
+ },
99
+ '500': {
100
+ description: 'Pipeline execution error',
101
+ },
102
+ },
103
+ };
104
+ const spec = {
105
+ openapi: '3.1.0',
106
+ info: {
107
+ title: rootName,
108
+ description: fullDescription,
109
+ version,
110
+ },
111
+ paths: {
112
+ [path]: {
113
+ [method]: operation,
114
+ },
115
+ },
116
+ ...(Object.keys(schemas).length > 0 ? { components: { schemas } } : {}),
117
+ };
118
+ return spec;
119
+ }
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3Qvb3BlbmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFLSCxnRkFBZ0Y7QUFDaEYsbUJBQW1CO0FBQ25CLGdGQUFnRjtBQUVoRixTQUFTLE9BQU8sQ0FBQyxJQUFZO0lBQzNCLE9BQU8sSUFBSTtTQUNSLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO1NBQzNCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsS0FBZ0I7SUFDN0MsZ0VBQWdFO0lBQ2hFLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFFYixNQUFNLElBQUksR0FBRyxDQUFDLElBQWlDLEVBQUUsRUFBRTtRQUNqRCxJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFOUQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSx1QkFBdUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sVUFB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QkFDUCxrQkFBa0IsRUFBRTs0QkFDbEIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixRQUFRLEVBQUUsRUFBRTt5QkFDckQ7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxTQUFTLEVBQUU7WUFDVCxLQUFLLEVBQUU7Z0JBQ0wsV0FBVyxFQUFFLHNCQUFzQjtnQkFDbkMsR0FBRyxDQUFDLFlBQVk7b0JBQ2QsQ0FBQyxDQUFDO3dCQUNFLE9BQU8sRUFBRTs0QkFDUCxrQkFBa0IsRUFBRTtnQ0FDbEIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixTQUFTLEVBQUUsRUFBRTs2QkFDdEQ7eUJBQ0Y7cUJBQ0Y7b0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNSO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLFdBQVcsRUFBRSwwQkFBMEI7YUFDeEM7U0FDRjtLQUNGLENBQUM7SUFFRixNQUFNLElBQUksR0FBZ0I7UUFDeEIsT0FBTyxFQUFFLE9BQU87UUFDaEIsSUFBSSxFQUFFO1lBQ0osS0FBSyxFQUFFLFFBQVE7WUFDZixXQUFXLEVBQUUsZUFBZTtZQUM1QixPQUFPO1NBQ1I7UUFDRCxLQUFLLEVBQUU7WUFDTCxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNOLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUzthQUNwQjtTQUNGO1FBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDeEUsQ0FBQztJQUVGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29udHJhY3Qvb3BlbmFwaS50cyDigJQgT3BlbkFQSSAzLjEgc3BlYyBnZW5lcmF0b3IuXG4gKlxuICogR2VuZXJhdGVzIGFuIE9wZW5BUEkgc3BlYyBmcm9tIGEgRmxvd0NoYXJ0Q29udHJhY3QgYnkgY29tYmluaW5nOlxuICogLSBjaGFydC5kZXNjcmlwdGlvbiDihpIgb3BlcmF0aW9uIGRlc2NyaXB0aW9uXG4gKiAtIGNoYXJ0LnN0YWdlRGVzY3JpcHRpb25zIOKGkiBzdGVwLWJ5LXN0ZXAgZGV0YWlsXG4gKiAtIGlucHV0U2NoZW1hIOKGkiByZXF1ZXN0Qm9keVxuICogLSBvdXRwdXRTY2hlbWEg4oaSIHJlc3BvbnNlXG4gKiAtIGNoYXJ0LmJ1aWxkVGltZVN0cnVjdHVyZSDihpIgb3BlcmF0aW9uIG1ldGFkYXRhIChicmFuY2hlcywgZm9ya3MsIGV0Yy4pXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnQsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB9IGZyb20gJy4uL2J1aWxkZXIvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRDb250cmFjdCwgSnNvblNjaGVtYSwgT3BlbkFQSU9wZXJhdGlvbiwgT3BlbkFQSU9wdGlvbnMsIE9wZW5BUElTcGVjIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSW50ZXJuYWwgaGVscGVyc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIHNsdWdpZnkobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAucmVwbGFjZSgvXi18LSQvZywgJycpO1xufVxuXG5mdW5jdGlvbiBidWlsZFN0ZXBzRGVzY3JpcHRpb24oY2hhcnQ6IEZsb3dDaGFydCk6IHN0cmluZyB7XG4gIC8vIFdhbGsgYnVpbGRUaW1lU3RydWN0dXJlIHRvIHByb2R1Y2UgYSBzdGVwLWJ5LXN0ZXAgZGVzY3JpcHRpb25cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBzdGVwID0gMDtcblxuICBjb25zdCB3YWxrID0gKG5vZGU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSkgPT4ge1xuICAgIHN0ZXArKztcbiAgICBjb25zdCBkZXNjID0gbm9kZS5kZXNjcmlwdGlvbiA/IGAg4oCUICR7bm9kZS5kZXNjcmlwdGlvbn1gIDogJyc7XG5cbiAgICBpZiAobm9kZS5oYXNEZWNpZGVyICYmIG5vZGUuYnJhbmNoSWRzKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke3N0ZXB9LiAke25vZGUubmFtZX0ke2Rlc2N9IOKAlCBEZWNpZGVzIGJldHdlZW46ICR7bm9kZS5icmFuY2hJZHMuam9pbignLCAnKX1gKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwICYmICFub2RlLmhhc0RlY2lkZXIpIHtcbiAgICAgIGNvbnN0IGNoaWxkTmFtZXMgPSBub2RlLmNoaWxkcmVuLm1hcCgoYykgPT4gYy5uYW1lKS5qb2luKCcsICcpO1xuICAgICAgbGluZXMucHVzaChgJHtzdGVwfS4gJHtub2RlLm5hbWV9JHtkZXNjfSAocGFyYWxsZWw6ICR7Y2hpbGROYW1lc30pYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7c3RlcH0uICR7bm9kZS5uYW1lfSR7ZGVzY31gKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB3YWxrKGNoaWxkKTtcbiAgICB9XG4gICAgaWYgKG5vZGUubmV4dCkgd2Fsayhub2RlLm5leHQpO1xuICB9O1xuXG4gIHdhbGsoY2hhcnQuYnVpbGRUaW1lU3RydWN0dXJlKTtcblxuICBjb25zdCBoZWFkZXIgPSBjaGFydC5kZXNjcmlwdGlvbiA/IGAke2NoYXJ0LmRlc2NyaXB0aW9ufVxcblxcbmAgOiAnJztcbiAgcmV0dXJuIGAke2hlYWRlcn1GbG93Q2hhcnQ6ICR7Y2hhcnQucm9vdC5uYW1lfVxcblN0ZXBzOlxcbiR7bGluZXMuam9pbignXFxuJyl9YDtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBQdWJsaWMgQVBJXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlT3BlbkFQSShjb250cmFjdDogRmxvd0NoYXJ0Q29udHJhY3QsIG9wdGlvbnM/OiBPcGVuQVBJT3B0aW9ucyk6IE9wZW5BUElTcGVjIHtcbiAgY29uc3QgeyBjaGFydCwgaW5wdXRTY2hlbWEsIG91dHB1dFNjaGVtYSB9ID0gY29udHJhY3Q7XG4gIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zPy52ZXJzaW9uID8/ICcxLjAuMCc7XG4gIGNvbnN0IGJhc2VQYXRoID0gb3B0aW9ucz8uYmFzZVBhdGggPz8gJy8nO1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zPy5tZXRob2QgPz8gJ3Bvc3QnO1xuXG4gIGNvbnN0IHJvb3ROYW1lID0gY2hhcnQucm9vdC5uYW1lO1xuICBjb25zdCBvcGVyYXRpb25JZCA9IHNsdWdpZnkocm9vdE5hbWUpO1xuICBjb25zdCBwYXRoID0gYCR7YmFzZVBhdGggPT09ICcvJyA/ICcnIDogYmFzZVBhdGh9LyR7b3BlcmF0aW9uSWR9YDtcblxuICBjb25zdCBmdWxsRGVzY3JpcHRpb24gPSBidWlsZFN0ZXBzRGVzY3JpcHRpb24oY2hhcnQpO1xuXG4gIC8vIEJ1aWxkIHNjaGVtYXMgZm9yIGNvbXBvbmVudHNcbiAgY29uc3Qgc2NoZW1hczogUmVjb3JkPHN0cmluZywgSnNvblNjaGVtYT4gPSB7fTtcbiAgY29uc3QgaW5wdXRSZWYgPSBgJHtyb290TmFtZX1JbnB1dGA7XG4gIGNvbnN0IG91dHB1dFJlZiA9IGAke3Jvb3ROYW1lfU91dHB1dGA7XG5cbiAgaWYgKGlucHV0U2NoZW1hKSBzY2hlbWFzW2lucHV0UmVmXSA9IGlucHV0U2NoZW1hO1xuICBpZiAob3V0cHV0U2NoZW1hKSBzY2hlbWFzW291dHB1dFJlZl0gPSBvdXRwdXRTY2hlbWE7XG5cbiAgLy8gQnVpbGQgb3BlcmF0aW9uXG4gIGNvbnN0IG9wZXJhdGlvbjogT3BlbkFQSU9wZXJhdGlvbiA9IHtcbiAgICBvcGVyYXRpb25JZCxcbiAgICBzdW1tYXJ5OiByb290TmFtZSxcbiAgICBkZXNjcmlwdGlvbjogZnVsbERlc2NyaXB0aW9uLFxuICAgIC4uLihpbnB1dFNjaGVtYVxuICAgICAgPyB7XG4gICAgICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6IHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHsgJHJlZjogYCMvY29tcG9uZW50cy9zY2hlbWFzLyR7aW5wdXRSZWZ9YCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgICByZXNwb25zZXM6IHtcbiAgICAgICcyMDAnOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU3VjY2Vzc2Z1bCBleGVjdXRpb24nLFxuICAgICAgICAuLi4ob3V0cHV0U2NoZW1hXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6IHtcbiAgICAgICAgICAgICAgICAgIHNjaGVtYTogeyAkcmVmOiBgIy9jb21wb25lbnRzL3NjaGVtYXMvJHtvdXRwdXRSZWZ9YCB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9LFxuICAgICAgJzUwMCc6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdQaXBlbGluZSBleGVjdXRpb24gZXJyb3InLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHNwZWM6IE9wZW5BUElTcGVjID0ge1xuICAgIG9wZW5hcGk6ICczLjEuMCcsXG4gICAgaW5mbzoge1xuICAgICAgdGl0bGU6IHJvb3ROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGZ1bGxEZXNjcmlwdGlvbixcbiAgICAgIHZlcnNpb24sXG4gICAgfSxcbiAgICBwYXRoczoge1xuICAgICAgW3BhdGhdOiB7XG4gICAgICAgIFttZXRob2RdOiBvcGVyYXRpb24sXG4gICAgICB9LFxuICAgIH0sXG4gICAgLi4uKE9iamVjdC5rZXlzKHNjaGVtYXMpLmxlbmd0aCA+IDAgPyB7IGNvbXBvbmVudHM6IHsgc2NoZW1hcyB9IH0gOiB7fSksXG4gIH07XG5cbiAgcmV0dXJuIHNwZWM7XG59XG4iXX0=
@@ -0,0 +1,199 @@
1
+ /**
2
+ * contract/schema.ts — Schema normalization utilities.
3
+ *
4
+ * Converts Zod schemas or raw JSON Schema objects into a normalized
5
+ * JsonSchema format. Zod detection uses duck-typing (checks for `_def`).
6
+ *
7
+ * Standalone: no dependency on Zod at import time.
8
+ * Compatible with Zod v4 internals.
9
+ */
10
+ // ─────────────────────────────────────────────────────────────────────────────
11
+ // Zod Detection (duck-typing)
12
+ // ─────────────────────────────────────────────────────────────────────────────
13
+ export function isZodSchema(input) {
14
+ if (!input || typeof input !== 'object')
15
+ return false;
16
+ const obj = input;
17
+ // Zod v4: top-level schema has `def` with a `type` string
18
+ if ('def' in obj && typeof obj.def === 'object' && obj.def !== null) {
19
+ return typeof obj.def.type === 'string';
20
+ }
21
+ // Zod v3 fallback: `_def` with `typeName`
22
+ if ('_def' in obj && typeof obj._def === 'object' && obj._def !== null) {
23
+ return typeof obj._def.type === 'string';
24
+ }
25
+ return false;
26
+ }
27
+ // ─────────────────────────────────────────────────────────────────────────────
28
+ // Zod v4 → JSON Schema (minimal converter for common types)
29
+ // ─────────────────────────────────────────────────────────────────────────────
30
+ /**
31
+ * Get the def object from a Zod schema.
32
+ * In Zod v4, top-level schemas have `.def`, inner types accessed via
33
+ * `_def` or `.def` depending on context.
34
+ */
35
+ function getDef(zodSchema) {
36
+ // Top-level Zod v4 schema: `.def` property
37
+ if (zodSchema.def && typeof zodSchema.def === 'object') {
38
+ return zodSchema.def;
39
+ }
40
+ // Nested via _def (e.g., when accessing directly)
41
+ if (zodSchema._def && typeof zodSchema._def === 'object') {
42
+ return zodSchema._def;
43
+ }
44
+ return undefined;
45
+ }
46
+ /** Get description from a Zod v4 schema (stored via .description or .meta()) */
47
+ function getDescription(zodSchema) {
48
+ if (typeof zodSchema.description === 'string')
49
+ return zodSchema.description;
50
+ return undefined;
51
+ }
52
+ function zodDefToJsonSchema(def, zodSchema) {
53
+ const typeName = def.type;
54
+ const description = zodSchema ? getDescription(zodSchema) : undefined;
55
+ const base = {};
56
+ if (description)
57
+ base.description = description;
58
+ switch (typeName) {
59
+ case 'string':
60
+ return { ...base, type: 'string' };
61
+ case 'number':
62
+ return { ...base, type: 'number' };
63
+ case 'boolean':
64
+ return { ...base, type: 'boolean' };
65
+ case 'literal': {
66
+ // Zod v4: _def.values is an array of literal values
67
+ const values = def.values;
68
+ if (values && values.length === 1) {
69
+ return { ...base, type: typeof values[0], enum: values };
70
+ }
71
+ return { ...base, enum: values !== null && values !== void 0 ? values : [] };
72
+ }
73
+ case 'enum': {
74
+ // Zod v4: _def.entries is { key: value } object
75
+ const entries = def.entries;
76
+ const values = entries ? Object.values(entries) : [];
77
+ return { ...base, type: 'string', enum: values };
78
+ }
79
+ case 'array': {
80
+ // Zod v4: _def.element is the inner schema object
81
+ const element = def.element;
82
+ const elementDef = element ? getDef(element) : undefined;
83
+ const items = elementDef ? zodDefToJsonSchema(elementDef, element) : {};
84
+ return { ...base, type: 'array', items };
85
+ }
86
+ case 'object': {
87
+ // Zod v4: _def.shape is a direct object (not a function)
88
+ const shape = def.shape;
89
+ if (!shape)
90
+ return { ...base, type: 'object' };
91
+ const properties = {};
92
+ const required = [];
93
+ for (const [key, value] of Object.entries(shape)) {
94
+ const fieldSchema = value;
95
+ const fieldDef = getDef(fieldSchema);
96
+ if (fieldDef) {
97
+ // Check if field is optional or has default
98
+ if (fieldDef.type === 'optional' || fieldDef.type === 'default') {
99
+ const inner = fieldDef.innerType;
100
+ const innerDef = inner ? getDef(inner) : undefined;
101
+ if (innerDef) {
102
+ const schema = zodDefToJsonSchema(innerDef, inner);
103
+ if (fieldDef.type === 'default' && fieldDef.defaultValue !== undefined) {
104
+ schema.default = fieldDef.defaultValue;
105
+ }
106
+ properties[key] = schema;
107
+ }
108
+ else {
109
+ properties[key] = {};
110
+ }
111
+ }
112
+ else {
113
+ properties[key] = zodDefToJsonSchema(fieldDef, fieldSchema);
114
+ required.push(key);
115
+ }
116
+ }
117
+ }
118
+ return {
119
+ ...base,
120
+ type: 'object',
121
+ properties,
122
+ ...(required.length > 0 ? { required } : {}),
123
+ };
124
+ }
125
+ case 'optional': {
126
+ const inner = def.innerType;
127
+ const innerDef = inner ? getDef(inner) : undefined;
128
+ return innerDef ? zodDefToJsonSchema(innerDef, inner) : base;
129
+ }
130
+ case 'default': {
131
+ const inner = def.innerType;
132
+ const innerDef = inner ? getDef(inner) : undefined;
133
+ const schema = innerDef ? zodDefToJsonSchema(innerDef, inner) : base;
134
+ if (def.defaultValue !== undefined) {
135
+ schema.default = def.defaultValue;
136
+ }
137
+ return schema;
138
+ }
139
+ case 'nullable': {
140
+ const inner = def.innerType;
141
+ const innerDef = inner ? getDef(inner) : undefined;
142
+ const schema = innerDef ? zodDefToJsonSchema(innerDef, inner) : {};
143
+ return { ...base, oneOf: [schema, { type: 'null' }] };
144
+ }
145
+ case 'union': {
146
+ const options = def.options;
147
+ if (!options)
148
+ return base;
149
+ return {
150
+ ...base,
151
+ oneOf: options
152
+ .map((o) => {
153
+ const oDef = getDef(o);
154
+ return oDef ? zodDefToJsonSchema(oDef, o) : null;
155
+ })
156
+ .filter((s) => s !== null),
157
+ };
158
+ }
159
+ case 'record': {
160
+ // Zod v4: _def.valueType is the value schema
161
+ const valueType = def.valueType;
162
+ const valueDef = valueType ? getDef(valueType) : undefined;
163
+ return {
164
+ ...base,
165
+ type: 'object',
166
+ additionalProperties: valueDef ? zodDefToJsonSchema(valueDef, valueType) : true,
167
+ };
168
+ }
169
+ case 'any':
170
+ return base;
171
+ case 'pipe': {
172
+ // Zod v4: .transform() / .refine() — unwrap to input schema
173
+ const inner = def.in;
174
+ const innerDef = inner ? getDef(inner) : undefined;
175
+ return innerDef ? zodDefToJsonSchema(innerDef, inner) : base;
176
+ }
177
+ default:
178
+ // Unknown Zod type — return empty schema
179
+ return base;
180
+ }
181
+ }
182
+ /** Convert a Zod schema object to JSON Schema. */
183
+ export function zodToJsonSchema(zodSchema) {
184
+ const def = getDef(zodSchema);
185
+ if (!def)
186
+ return {};
187
+ return zodDefToJsonSchema(def, zodSchema);
188
+ }
189
+ // ─────────────────────────────────────────────────────────────────────────────
190
+ // Normalize — accepts either Zod or JSON Schema, returns JSON Schema
191
+ // ─────────────────────────────────────────────────────────────────────────────
192
+ export function normalizeSchema(input) {
193
+ if (isZodSchema(input)) {
194
+ return zodToJsonSchema(input);
195
+ }
196
+ // Already a JSON Schema
197
+ return input;
198
+ }
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdC9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFJSCxnRkFBZ0Y7QUFDaEYsOEJBQThCO0FBQzlCLGdGQUFnRjtBQUVoRixNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWM7SUFDeEMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEQsTUFBTSxHQUFHLEdBQUcsS0FBZ0MsQ0FBQztJQUM3QywwREFBMEQ7SUFDMUQsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNwRSxPQUFPLE9BQVEsR0FBRyxDQUFDLEdBQStCLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsMENBQTBDO0lBQzFDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDdkUsT0FBTyxPQUFRLEdBQUcsQ0FBQyxJQUFnQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7SUFDeEUsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELGdGQUFnRjtBQUNoRiw0REFBNEQ7QUFDNUQsZ0ZBQWdGO0FBRWhGOzs7O0dBSUc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxTQUFrQztJQUNoRCwyQ0FBMkM7SUFDM0MsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLE9BQU8sU0FBUyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN2RCxPQUFPLFNBQVMsQ0FBQyxHQUE4QixDQUFDO0lBQ2xE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O0FBQ2hGLHFFQUFxRTtBQUNyRSxnRkFBZ0Y7QUFFaEYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFrQjtJQUNoRCxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sZUFBZSxDQUFDLEtBQWdDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0Qsd0JBQXdCO0lBQ3hCLE9BQU8sS0FBbUIsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjb250cmFjdC9zY2hlbWEudHMg4oCUIFNjaGVtYSBub3JtYWxpemF0aW9uIHV0aWxpdGllcy5cbiAqXG4gKiBDb252ZXJ0cyBab2Qgc2NoZW1hcyBvciByYXcgSlNPTiBTY2hlbWEgb2JqZWN0cyBpbnRvIGEgbm9ybWFsaXplZFxuICogSnNvblNjaGVtYSBmb3JtYXQuIFpvZCBkZXRlY3Rpb24gdXNlcyBkdWNrLXR5cGluZyAoY2hlY2tzIGZvciBgX2RlZmApLlxuICpcbiAqIFN0YW5kYWxvbmU6IG5vIGRlcGVuZGVuY3kgb24gWm9kIGF0IGltcG9ydCB0aW1lLlxuICogQ29tcGF0aWJsZSB3aXRoIFpvZCB2NCBpbnRlcm5hbHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKc29uU2NoZW1hLCBTY2hlbWFJbnB1dCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFpvZCBEZXRlY3Rpb24gKGR1Y2stdHlwaW5nKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1pvZFNjaGVtYShpbnB1dDogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWlucHV0IHx8IHR5cGVvZiBpbnB1dCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgb2JqID0gaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIFpvZCB2NDogdG9wLWxldmVsIHNjaGVtYSBoYXMgYGRlZmAgd2l0aCBhIGB0eXBlYCBzdHJpbmdcbiAgaWYgKCdkZWYnIGluIG9iaiAmJiB0eXBlb2Ygb2JqLmRlZiA9PT0gJ29iamVjdCcgJiYgb2JqLmRlZiAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0eXBlb2YgKG9iai5kZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR5cGUgPT09ICdzdHJpbmcnO1xuICB9XG4gIC8vIFpvZCB2MyBmYWxsYmFjazogYF9kZWZgIHdpdGggYHR5cGVOYW1lYFxuICBpZiAoJ19kZWYnIGluIG9iaiAmJiB0eXBlb2Ygb2JqLl9kZWYgPT09ICdvYmplY3QnICYmIG9iai5fZGVmICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiAob2JqLl9kZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR5cGUgPT09ICdzdHJpbmcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBab2QgdjQg4oaSIEpTT04gU2NoZW1hIChtaW5pbWFsIGNvbnZlcnRlciBmb3IgY29tbW9uIHR5cGVzKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogR2V0IHRoZSBkZWYgb2JqZWN0IGZyb20gYSBab2Qgc2NoZW1hLlxuICogSW4gWm9kIHY0LCB0b3AtbGV2ZWwgc2NoZW1hcyBoYXZlIGAuZGVmYCwgaW5uZXIgdHlwZXMgYWNjZXNzZWQgdmlhXG4gKiBgX2RlZmAgb3IgYC5kZWZgIGRlcGVuZGluZyBvbiBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBnZXREZWYoem9kU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgLy8gVG9wLWxldmVsIFpvZCB2NCBzY2hlbWE6IGAuZGVmYCBwcm9wZXJ0eVxuICBpZiAoem9kU2NoZW1hLmRlZiAmJiB0eXBlb2Ygem9kU2NoZW1hLmRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gem9kU2NoZW1hLmRlZiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuICAvLyBOZXN0ZWQgdmlhIF9kZWYgKGUuZy4sIHdoZW4gYWNjZXNzaW5nIGRpcmVjdGx5KVxuICBpZiAoem9kU2NoZW1hLl9kZWYgJiYgdHlwZW9mIHpvZFNjaGVtYS5fZGVmID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB6b2RTY2hlbWEuX2RlZiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogR2V0IGRlc2NyaXB0aW9uIGZyb20gYSBab2QgdjQgc2NoZW1hIChzdG9yZWQgdmlhIC5kZXNjcmlwdGlvbiBvciAubWV0YSgpKSAqL1xuZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb24oem9kU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2Ygem9kU2NoZW1hLmRlc2NyaXB0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIHpvZFNjaGVtYS5kZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gem9kRGVmVG9Kc29uU2NoZW1hKGRlZjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHpvZFNjaGVtYT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogSnNvblNjaGVtYSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gZGVmLnR5cGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IHpvZFNjaGVtYSA/IGdldERlc2NyaXB0aW9uKHpvZFNjaGVtYSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJhc2U6IEpzb25TY2hlbWEgPSB7fTtcbiAgaWYgKGRlc2NyaXB0aW9uKSBiYXNlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG5cbiAgc3dpdGNoICh0eXBlTmFtZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0eXBlOiAnc3RyaW5nJyB9O1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdudW1iZXInIH07XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdib29sZWFuJyB9O1xuXG4gICAgY2FzZSAnbGl0ZXJhbCc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi52YWx1ZXMgaXMgYW4gYXJyYXkgb2YgbGl0ZXJhbCB2YWx1ZXNcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGRlZi52YWx1ZXMgYXMgdW5rbm93bltdIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6IHR5cGVvZiB2YWx1ZXNbMF0sIGVudW06IHZhbHVlcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgZW51bTogdmFsdWVzID8/IFtdIH07XG4gICAgfVxuXG4gICAgY2FzZSAnZW51bSc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi5lbnRyaWVzIGlzIHsga2V5OiB2YWx1ZSB9IG9iamVjdFxuICAgICAgY29uc3QgZW50cmllcyA9IGRlZi5lbnRyaWVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdmFsdWVzID0gZW50cmllcyA/IE9iamVjdC52YWx1ZXMoZW50cmllcykgOiBbXTtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHR5cGU6ICdzdHJpbmcnLCBlbnVtOiB2YWx1ZXMgfTtcbiAgICB9XG5cbiAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgIC8vIFpvZCB2NDogX2RlZi5lbGVtZW50IGlzIHRoZSBpbm5lciBzY2hlbWEgb2JqZWN0XG4gICAgICBjb25zdCBlbGVtZW50ID0gZGVmLmVsZW1lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlbGVtZW50RGVmID0gZWxlbWVudCA/IGdldERlZihlbGVtZW50KSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZWxlbWVudERlZiA/IHpvZERlZlRvSnNvblNjaGVtYShlbGVtZW50RGVmLCBlbGVtZW50KSA6IHt9O1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdHlwZTogJ2FycmF5JywgaXRlbXMgfTtcbiAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICAvLyBab2QgdjQ6IF9kZWYuc2hhcGUgaXMgYSBkaXJlY3Qgb2JqZWN0IChub3QgYSBmdW5jdGlvbilcbiAgICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKCFzaGFwZSkgcmV0dXJuIHsgLi4uYmFzZSwgdHlwZTogJ29iamVjdCcgfTtcblxuICAgICAgY29uc3QgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgSnNvblNjaGVtYT4gPSB7fTtcbiAgICAgIGNvbnN0IHJlcXVpcmVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzaGFwZSkpIHtcbiAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgY29uc3QgZmllbGREZWYgPSBnZXREZWYoZmllbGRTY2hlbWEpO1xuICAgICAgICBpZiAoZmllbGREZWYpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBmaWVsZCBpcyBvcHRpb25hbCBvciBoYXMgZGVmYXVsdFxuICAgICAgICAgIGlmIChmaWVsZERlZi50eXBlID09PSAnb3B0aW9uYWwnIHx8IGZpZWxkRGVmLnR5cGUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXIgPSBmaWVsZERlZi5pbm5lclR5cGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBpbm5lckRlZiA9IGlubmVyID8gZ2V0RGVmKGlubmVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChpbm5lckRlZikge1xuICAgICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB6b2REZWZUb0pzb25TY2hlbWEoaW5uZXJEZWYsIGlubmVyKTtcbiAgICAgICAgICAgICAgaWYgKGZpZWxkRGVmLnR5cGUgPT09ICdkZWZhdWx0JyAmJiBmaWVsZERlZi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNjaGVtYS5kZWZhdWx0ID0gZmllbGREZWYuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHNjaGVtYTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSB6b2REZWZUb0pzb25TY2hlbWEoZmllbGREZWYsIGZpZWxkU2NoZW1hKTtcbiAgICAgICAgICAgIHJlcXVpcmVkLnB1c2goa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIC4uLihyZXF1aXJlZC5sZW5ndGggPiAwID8geyByZXF1aXJlZCB9IDoge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlICdvcHRpb25hbCc6IHtcbiAgICAgIGNvbnN0IGlubmVyID0gZGVmLmlubmVyVHlwZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGlubmVyRGVmID0gaW5uZXIgPyBnZXREZWYoaW5uZXIpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGlubmVyRGVmID8gem9kRGVmVG9Kc29uU2NoZW1hKGlubmVyRGVmLCBpbm5lcikgOiBiYXNlO1xuICAgIH1cblxuICAgIGNhc2UgJ2RlZmF1bHQnOiB7XG4gICAgICBjb25zdCBpbm5lciA9IGRlZi5pbm5lclR5cGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpbm5lckRlZiA9IGlubmVyID8gZ2V0RGVmKGlubmVyKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGlubmVyRGVmID8gem9kRGVmVG9Kc29uU2NoZW1hKGlubmVyRGVmLCBpbm5lcikgOiBiYXNlO1xuICAgICAgaWYgKGRlZi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY2hlbWEuZGVmYXVsdCA9IGRlZi5kZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cblxuICAgIGNhc2UgJ251bGxhYmxlJzoge1xuICAgICAgY29uc3QgaW5uZXIgPSBkZWYuaW5uZXJUeXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaW5uZXJEZWYgPSBpbm5lciA/IGdldERlZihpbm5lcikgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzY2hlbWEgPSBpbm5lckRlZiA/IHpvZERlZlRvSnNvblNjaGVtYShpbm5lckRlZiwgaW5uZXIpIDoge307XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBvbmVPZjogW3NjaGVtYSwgeyB0eXBlOiAnbnVsbCcgfV0gfTtcbiAgICB9XG5cbiAgICBjYXNlICd1bmlvbic6IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBkZWYub3B0aW9ucyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBiYXNlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgb25lT2Y6IG9wdGlvbnNcbiAgICAgICAgICAubWFwKChvKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvRGVmID0gZ2V0RGVmKG8pO1xuICAgICAgICAgICAgcmV0dXJuIG9EZWYgPyB6b2REZWZUb0pzb25TY2hlbWEob0RlZiwgbykgOiBudWxsO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigocyk6IHMgaXMgSnNvblNjaGVtYSA9PiBzICE9PSBudWxsKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSAncmVjb3JkJzoge1xuICAgICAgLy8gWm9kIHY0OiBfZGVmLnZhbHVlVHlwZSBpcyB0aGUgdmFsdWUgc2NoZW1hXG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBkZWYudmFsdWVUeXBlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdmFsdWVEZWYgPSB2YWx1ZVR5cGUgPyBnZXREZWYodmFsdWVUeXBlKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogdmFsdWVEZWYgPyB6b2REZWZUb0pzb25TY2hlbWEodmFsdWVEZWYsIHZhbHVlVHlwZSkgOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlICdhbnknOlxuICAgICAgcmV0dXJuIGJhc2U7XG5cbiAgICBjYXNlICdwaXBlJzoge1xuICAgICAgLy8gWm9kIHY0OiAudHJhbnNmb3JtKCkgLyAucmVmaW5lKCkg4oCUIHVud3JhcCB0byBpbnB1dCBzY2hlbWFcbiAgICAgIGNvbnN0IGlubmVyID0gZGVmLmluIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaW5uZXJEZWYgPSBpbm5lciA/IGdldERlZihpbm5lcikgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gaW5uZXJEZWYgPyB6b2REZWZUb0pzb25TY2hlbWEoaW5uZXJEZWYsIGlubmVyKSA6IGJhc2U7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFVua25vd24gWm9kIHR5cGUg4oCUIHJldHVybiBlbXB0eSBzY2hlbWFcbiAgICAgIHJldHVybiBiYXNlO1xuICB9XG59XG5cbi8qKiBDb252ZXJ0IGEgWm9kIHNjaGVtYSBvYmplY3QgdG8gSlNPTiBTY2hlbWEuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVG9Kc29uU2NoZW1hKHpvZFNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBKc29uU2NoZW1hIHtcbiAgY29uc3QgZGVmID0gZ2V0RGVmKHpvZFNjaGVtYSk7XG4gIGlmICghZGVmKSByZXR1cm4ge307XG4gIHJldHVybiB6b2REZWZUb0pzb25TY2hlbWEoZGVmLCB6b2RTY2hlbWEpO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIE5vcm1hbGl6ZSDigJQgYWNjZXB0cyBlaXRoZXIgWm9kIG9yIEpTT04gU2NoZW1hLCByZXR1cm5zIEpTT04gU2NoZW1hXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVNjaGVtYShpbnB1dDogU2NoZW1hSW5wdXQpOiBKc29uU2NoZW1hIHtcbiAgaWYgKGlzWm9kU2NoZW1hKGlucHV0KSkge1xuICAgIHJldHVybiB6b2RUb0pzb25TY2hlbWEoaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICB9XG4gIC8vIEFscmVhZHkgYSBKU09OIFNjaGVtYVxuICByZXR1cm4gaW5wdXQgYXMgSnNvblNjaGVtYTtcbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ /**
2
+ * contract/types.ts — Types for the FlowChart contract layer.
3
+ *
4
+ * Defines the I/O boundary for a flowchart: input schema, output schema,
5
+ * and output mapper. Uses the same pattern as SubflowMountOptions
6
+ * (inputMapper/outputMapper) but at the top-level flowchart boundary.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29udHJhY3QvdHlwZXMudHMg4oCUIFR5cGVzIGZvciB0aGUgRmxvd0NoYXJ0IGNvbnRyYWN0IGxheWVyLlxuICpcbiAqIERlZmluZXMgdGhlIEkvTyBib3VuZGFyeSBmb3IgYSBmbG93Y2hhcnQ6IGlucHV0IHNjaGVtYSwgb3V0cHV0IHNjaGVtYSxcbiAqIGFuZCBvdXRwdXQgbWFwcGVyLiBVc2VzIHRoZSBzYW1lIHBhdHRlcm4gYXMgU3ViZmxvd01vdW50T3B0aW9uc1xuICogKGlucHV0TWFwcGVyL291dHB1dE1hcHBlcikgYnV0IGF0IHRoZSB0b3AtbGV2ZWwgZmxvd2NoYXJ0IGJvdW5kYXJ5LlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd0NoYXJ0IH0gZnJvbSAnLi4vYnVpbGRlci90eXBlcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSlNPTiBTY2hlbWEgKHN1YnNldCBvZiBKU09OIFNjaGVtYSBEcmFmdCAyMDIwLTEyIC8gT3BlbkFQSSAzLjEpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgSnNvblNjaGVtYSA9IHtcbiAgdHlwZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgSnNvblNjaGVtYT47XG4gIHJlcXVpcmVkPzogc3RyaW5nW107XG4gIGl0ZW1zPzogSnNvblNjaGVtYTtcbiAgZW51bT86IHVua25vd25bXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRlZmF1bHQ/OiB1bmtub3duO1xuICBmb3JtYXQ/OiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzPzogYm9vbGVhbiB8IEpzb25TY2hlbWE7XG4gIG9uZU9mPzogSnNvblNjaGVtYVtdO1xuICBhbnlPZj86IEpzb25TY2hlbWFbXTtcbiAgYWxsT2Y/OiBKc29uU2NoZW1hW107XG4gICRyZWY/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNjaGVtYSBJbnB1dCDigJQgYWNjZXB0cyBlaXRoZXIgWm9kIHNjaGVtYSBvciByYXcgSlNPTiBTY2hlbWFcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQW55dGhpbmcgd2l0aCBhIGBkZWZgIChab2QgdjQpIG9yIGBfZGVmYCAoWm9kIHYzKSBwcm9wZXJ0eSBpcyB0cmVhdGVkIGFzIGEgWm9kIHNjaGVtYS4gKi9cbmV4cG9ydCB0eXBlIFNjaGVtYUlucHV0ID0gSnNvblNjaGVtYSB8IHsgZGVmOiB1bmtub3duOyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0IENvbnRyYWN0IOKAlCBJL08gYm91bmRhcnkgZGVmaW5pdGlvblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NoYXJ0Q29udHJhY3RPcHRpb25zPFRJbnB1dCA9IHVua25vd24sIFRPdXRwdXQgPSB1bmtub3duPiB7XG4gIC8qKiBTY2hlbWEgZGVzY3JpYmluZyB0aGUgaW5wdXQgKHJlYWRPbmx5Q29udGV4dCkgc2hhcGUuIFpvZCBvciBKU09OIFNjaGVtYS4gKi9cbiAgaW5wdXRTY2hlbWE/OiBTY2hlbWFJbnB1dDtcbiAgLyoqIFNjaGVtYSBkZXNjcmliaW5nIHRoZSBvdXRwdXQgc2hhcGUuIFpvZCBvciBKU09OIFNjaGVtYS4gKi9cbiAgb3V0cHV0U2NoZW1hPzogU2NoZW1hSW5wdXQ7XG4gIC8qKiBNYXBzIHRoZSBmaW5hbCBzY29wZSBzdGF0ZSBpbnRvIHRoZSByZXNwb25zZSBzaGFwZS4gKi9cbiAgb3V0cHV0TWFwcGVyPzogKGZpbmFsU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBUT3V0cHV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydENvbnRyYWN0PFRJbnB1dCA9IHVua25vd24sIFRPdXRwdXQgPSB1bmtub3duPiB7XG4gIC8qKiBUaGUgY29tcGlsZWQgZmxvd2NoYXJ0LiAqL1xuICBjaGFydDogRmxvd0NoYXJ0O1xuICAvKiogSlNPTiBTY2hlbWEgZm9yIHRoZSBpbnB1dCAobm9ybWFsaXplZCBmcm9tIFpvZCBvciByYXcpLiAqL1xuICBpbnB1dFNjaGVtYT86IEpzb25TY2hlbWE7XG4gIC8qKiBKU09OIFNjaGVtYSBmb3IgdGhlIG91dHB1dCAobm9ybWFsaXplZCBmcm9tIFpvZCBvciByYXcpLiAqL1xuICBvdXRwdXRTY2hlbWE/OiBKc29uU2NoZW1hO1xuICAvKiogTWFwcyB0aGUgZmluYWwgc2NvcGUgc3RhdGUgaW50byB0aGUgcmVzcG9uc2Ugc2hhcGUuICovXG4gIG91dHB1dE1hcHBlcj86IChmaW5hbFNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gVE91dHB1dDtcbiAgLyoqIEF1dG8tZ2VuZXJhdGVkIE9wZW5BUEkgc3BlYy4gKi9cbiAgdG9PcGVuQVBJKG9wdGlvbnM/OiBPcGVuQVBJT3B0aW9ucyk6IE9wZW5BUElTcGVjO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIE9wZW5BUEkgVHlwZXMgKG1pbmltYWwgc3Vic2V0IG9mIE9wZW5BUEkgMy4xKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFQSU9wdGlvbnMge1xuICAvKiogQVBJIHZlcnNpb24gc3RyaW5nIChkZWZhdWx0OiBcIjEuMC4wXCIpLiAqL1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICAvKiogQmFzZSBwYXRoIHByZWZpeCAoZGVmYXVsdDogXCIvXCIpLiAqL1xuICBiYXNlUGF0aD86IHN0cmluZztcbiAgLyoqIEhUVFAgbWV0aG9kIGZvciB0aGUgZXhlY3V0ZSBlbmRwb2ludCAoZGVmYXVsdDogXCJwb3N0XCIpLiAqL1xuICBtZXRob2Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFQSVNwZWMge1xuICBvcGVuYXBpOiAnMy4xLjAnO1xuICBpbmZvOiB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfTtcbiAgcGF0aHM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIE9wZW5BUElPcGVyYXRpb24+PjtcbiAgY29tcG9uZW50cz86IHtcbiAgICBzY2hlbWFzPzogUmVjb3JkPHN0cmluZywgSnNvblNjaGVtYT47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFQSU9wZXJhdGlvbiB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcmVxdWVzdEJvZHk/OiB7XG4gICAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgY29udGVudDoge1xuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiB7XG4gICAgICAgIHNjaGVtYTogSnNvblNjaGVtYSB8IHsgJHJlZjogc3RyaW5nIH07XG4gICAgICB9O1xuICAgIH07XG4gIH07XG4gIHJlc3BvbnNlczogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgY29udGVudD86IHtcbiAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiB7XG4gICAgICAgICAgc2NoZW1hOiBKc29uU2NoZW1hIHwgeyAkcmVmOiBzdHJpbmcgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfVxuICA+O1xufVxuIl19
@@ -35,4 +35,4 @@ export function isStageNodeReturn(output) {
35
35
  return false;
36
36
  }
37
37
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2VOb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQXVGSCw4RUFBOEU7QUFDOUUscUVBQXFFO0FBQ3JFLDhFQUE4RTtBQUU5RTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQWU7SUFDL0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFeEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBaUMsQ0FBQztRQUM5QyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFL0MsTUFBTSxlQUFlLEdBQ25CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUztZQUN0QixPQUFPLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxVQUFVLENBQUM7UUFFN0MsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUFDLFdBQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWdlTm9kZSDigJQgVGhlIGdyYXBoIG5vZGUgdHlwZSBmb3IgZmxvd2NoYXJ0IHRyYXZlcnNhbC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBzaGFwZSBvZiBlYWNoIG5vZGUgaW4gdGhlIGZsb3djaGFydCBEQUc6XG4gKiAtIExpbmVhciBjb250aW51YXRpb24gdmlhIGBuZXh0YCAobGlua2VkIGxpc3QgdHJhdmVyc2FsKVxuICogLSBQYXJhbGxlbCBmYW4tb3V0IHZpYSBgY2hpbGRyZW5gIChmb3JrKVxuICogLSBDb25kaXRpb25hbCBicmFuY2hpbmcgdmlhIGBkZWNpZGVyRm5gIChzaW5nbGUtY2hvaWNlKSBvciBgc2VsZWN0b3JGbmAgKG11bHRpLWNob2ljZSlcbiAqIC0gQmFjay1lZGdlcyB2aWEgZHluYW1pYyBuZXh0IChsb29wKVxuICogLSBJc29sYXRlZCBzdWItdHJhdmVyc2FscyB2aWEgYGlzU3ViZmxvd1Jvb3RgIChzdWJmbG93KVxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VGdW5jdGlvbiwgU3ViZmxvd01vdW50T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEZWNpZGVyICsgU2VsZWN0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogUGlja3MgZXhhY3RseSBPTkUgY2hpbGQgYnkgSUQuIENvbmRpdGlvbmFsIGJyYW5jaCAoaWYvc3dpdGNoKS4gKi9cbmV4cG9ydCB0eXBlIERlY2lkZXIgPSAobm9kZUFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIFBpY2tzIE9ORSBPUiBNT1JFIGNoaWxkcmVuIGJ5IElELiBGaWx0ZXJlZCBmYW4tb3V0LlxuICogLSBTaW5nbGUgc3RyaW5nOiBiZWhhdmVzIGxpa2UgRGVjaWRlclxuICogLSBBcnJheTogc2VsZWN0ZWQgY2hpbGRyZW4gZXhlY3V0ZSBpbiBwYXJhbGxlbFxuICogLSBFbXB0eSBhcnJheTogc2tpcCBhbGwgY2hpbGRyZW5cbiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0b3IgPSAobm9kZUFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgc3RyaW5nW10gfCBQcm9taXNlPHN0cmluZyB8IHN0cmluZ1tdPjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZU5vZGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdGFnZU5vZGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWU7IGFsc28gdXNlZCBhcyB0aGUgc3RhZ2VNYXAga2V5ICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHN0YWJsZSBpZCAocmVxdWlyZWQgYnkgZGVjaWRlci9mb3JrIGFnZ3JlZ2F0aW9uKSAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRpc3BsYXkgbmFtZSBmb3IgVUkgKi9cbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBEZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgc3RhZ2UgZG9lcy4gVXNlZCBmb3IgbmFycmF0aXZlIGFuZCB0b29sIGRlc2NyaXB0aW9ucy4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLy8g4pSA4pSAIENvbnRpbnVhdGlvbiBwb2ludGVycyDilIDilIBcblxuICAvKiogTGluZWFyIGNvbnRpbnVhdGlvbiAobGlua2VkIGxpc3QgbmV4dCBwb2ludGVyKSAqL1xuICBuZXh0PzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKiBQYXJhbGxlbCBjaGlsZHJlbiAoZm9yayBmYW4tb3V0KSAqL1xuICBjaGlsZHJlbj86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W107XG5cbiAgLy8g4pSA4pSAIEJyYW5jaGluZyDilIDilIBcblxuICAvKiogT3V0cHV0LWJhc2VkIHNlbGVjdG9yOiBwaWNrcyBzdWJzZXQgb2YgY2hpbGRyZW4gKi9cbiAgbmV4dE5vZGVTZWxlY3Rvcj86IFNlbGVjdG9yO1xuICAvKiogV2hlbiB0cnVlLCBmbiBJUyBhIHNjb3BlLWJhc2VkIGRlY2lkZXIgdGhhdCByZXR1cm5zIGEgYnJhbmNoIElEIHN0cmluZyAqL1xuICBkZWNpZGVyRm4/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBmbiBJUyBhIHNjb3BlLWJhc2VkIHNlbGVjdG9yIHRoYXQgcmV0dXJucyBicmFuY2ggSUQocykgKi9cbiAgc2VsZWN0b3JGbj86IGJvb2xlYW47XG5cbiAgLy8g4pSA4pSAIFN0YWdlIGZ1bmN0aW9uIOKUgOKUgFxuXG4gIC8qKiBFbWJlZGRlZCBmdW5jdGlvbjsgb3RoZXJ3aXNlIHJlc29sdmVkIGZyb20gc3RhZ2VNYXAgYnkgYG5hbWVgICovXG4gIGZuPzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xuXG4gIC8vIOKUgOKUgCBTdHJlYW1pbmcg4pSA4pSAXG5cbiAgLyoqIFdoZW4gdHJ1ZSwgUGlwZWxpbmUgaW5qZWN0cyBhIHN0cmVhbUNhbGxiYWNrIGFzIDNyZCBwYXJhbWV0ZXIgKi9cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICAvKiogVW5pcXVlIHN0cmVhbSBpZGVudGlmaWVyIGZvciByb3V0aW5nIHRva2VucyAqL1xuICBzdHJlYW1JZD86IHN0cmluZztcblxuICAvLyDilIDilIAgU3ViZmxvdyDilIDilIBcblxuICAvKiogVHJ1ZSBpZiB0aGlzIGlzIHRoZSByb290IG5vZGUgb2YgYSBtb3VudGVkIHN1YmZsb3cgKi9cbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIC8qKiBNb3VudCBpZCBvZiB0aGUgc3ViZmxvdyAoZS5nLiwgXCJsbG0tY29yZVwiKSAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWUgb2YgdGhlIHN1YmZsb3cgKi9cbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKiBSZWZlcmVuY2Uga2V5IGludG8gdGhlIHN1YmZsb3dzIGRpY3Rpb25hcnkgKi9cbiAgJHJlZj86IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIG1vdW50IGluc3RhbmNlICovXG4gIG1vdW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBJbnB1dC9vdXRwdXQgbWFwcGluZyBvcHRpb25zIGZvciBzdWJmbG93cyAqL1xuICBzdWJmbG93TW91bnRPcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9ucztcbiAgLyoqIFdoZW4gdHJ1ZSwgcGFyYWxsZWwgY2hpbGRyZW4gdXNlIGZhaWwtZmFzdCBzZW1hbnRpY3MgKHJlamVjdCBvbiBmaXJzdCBlcnJvcikgKi9cbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xuXG4gIC8qKiBJbmxpbmUgc3ViZmxvdyBkZWZpbml0aW9uIGZvciBkeW5hbWljIHN1YmZsb3cgYXR0YWNobWVudCAqL1xuICBzdWJmbG93RGVmPzoge1xuICAgIHJvb3Q6IFN0YWdlTm9kZTtcbiAgICBzdGFnZU1hcD86IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gICAgYnVpbGRUaW1lU3RydWN0dXJlPzogdW5rbm93bjtcbiAgICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlIH0+O1xuICB9O1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBpc1N0YWdlTm9kZVJldHVybiDigJQgZHVjay10eXBpbmcgZGV0ZWN0aW9uIGZvciBkeW5hbWljIGNvbnRpbnVhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRGV0ZWN0cyBpZiBhIHN0YWdlIG91dHB1dCBpcyBhIFN0YWdlTm9kZSBmb3IgZHluYW1pYyBjb250aW51YXRpb24uXG4gKlxuICogVXNlcyBkdWNrLXR5cGluZzogbXVzdCBoYXZlIGBuYW1lYCAoc3RyaW5nKSBBTkQgYXQgbGVhc3Qgb25lIGNvbnRpbnVhdGlvblxuICogcHJvcGVydHkgKG5vbi1lbXB0eSBjaGlsZHJlbiwgbmV4dCwgb3IgbmV4dE5vZGVTZWxlY3RvcikuXG4gKlxuICogU2FmZWx5IGhhbmRsZXMgcHJveHkgb2JqZWN0cyAoZS5nLiwgWm9kIHNjb3BlKSB0aGF0IG1heSB0aHJvdyBvbiBwcm9wZXJ0eSBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YWdlTm9kZVJldHVybihvdXRwdXQ6IHVua25vd24pOiBvdXRwdXQgaXMgU3RhZ2VOb2RlIHtcbiAgaWYgKCFvdXRwdXQgfHwgdHlwZW9mIG91dHB1dCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IG9iaiA9IG91dHB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIG9iai5uYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgaGFzQ29udGludWF0aW9uID1cbiAgICAgIChBcnJheS5pc0FycmF5KG9iai5jaGlsZHJlbikgJiYgb2JqLmNoaWxkcmVuLmxlbmd0aCA+IDApIHx8XG4gICAgICBvYmoubmV4dCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICB0eXBlb2Ygb2JqLm5leHROb2RlU2VsZWN0b3IgPT09ICdmdW5jdGlvbic7XG5cbiAgICByZXR1cm4gaGFzQ29udGludWF0aW9uO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2VOb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQXFGSCw4RUFBOEU7QUFDOUUscUVBQXFFO0FBQ3JFLDhFQUE4RTtBQUU5RTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQWU7SUFDL0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFeEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBaUMsQ0FBQztRQUM5QyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFL0MsTUFBTSxlQUFlLEdBQ25CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUztZQUN0QixPQUFPLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxVQUFVLENBQUM7UUFFN0MsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUFDLFdBQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YWdlTm9kZSDigJQgVGhlIGdyYXBoIG5vZGUgdHlwZSBmb3IgZmxvd2NoYXJ0IHRyYXZlcnNhbC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBzaGFwZSBvZiBlYWNoIG5vZGUgaW4gdGhlIGZsb3djaGFydCBEQUc6XG4gKiAtIExpbmVhciBjb250aW51YXRpb24gdmlhIGBuZXh0YCAobGlua2VkIGxpc3QgdHJhdmVyc2FsKVxuICogLSBQYXJhbGxlbCBmYW4tb3V0IHZpYSBgY2hpbGRyZW5gIChmb3JrKVxuICogLSBDb25kaXRpb25hbCBicmFuY2hpbmcgdmlhIGBkZWNpZGVyRm5gIChzaW5nbGUtY2hvaWNlKSBvciBgc2VsZWN0b3JGbmAgKG11bHRpLWNob2ljZSlcbiAqIC0gQmFjay1lZGdlcyB2aWEgZHluYW1pYyBuZXh0IChsb29wKVxuICogLSBJc29sYXRlZCBzdWItdHJhdmVyc2FscyB2aWEgYGlzU3ViZmxvd1Jvb3RgIChzdWJmbG93KVxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VGdW5jdGlvbiwgU3ViZmxvd01vdW50T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEZWNpZGVyICsgU2VsZWN0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogUGlja3MgZXhhY3RseSBPTkUgY2hpbGQgYnkgSUQuIENvbmRpdGlvbmFsIGJyYW5jaCAoaWYvc3dpdGNoKS4gKi9cbmV4cG9ydCB0eXBlIERlY2lkZXIgPSAobm9kZUFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIFBpY2tzIE9ORSBPUiBNT1JFIGNoaWxkcmVuIGJ5IElELiBGaWx0ZXJlZCBmYW4tb3V0LlxuICogLSBTaW5nbGUgc3RyaW5nOiBiZWhhdmVzIGxpa2UgRGVjaWRlclxuICogLSBBcnJheTogc2VsZWN0ZWQgY2hpbGRyZW4gZXhlY3V0ZSBpbiBwYXJhbGxlbFxuICogLSBFbXB0eSBhcnJheTogc2tpcCBhbGwgY2hpbGRyZW5cbiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0b3IgPSAobm9kZUFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgc3RyaW5nW10gfCBQcm9taXNlPHN0cmluZyB8IHN0cmluZ1tdPjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZU5vZGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdGFnZU5vZGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWU7IGFsc28gdXNlZCBhcyB0aGUgc3RhZ2VNYXAga2V5ICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHN0YWJsZSBpZCAocmVxdWlyZWQgYnkgZGVjaWRlci9mb3JrIGFnZ3JlZ2F0aW9uKSAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIERlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdGFnZSBkb2VzLiBVc2VkIGZvciBuYXJyYXRpdmUgYW5kIHRvb2wgZGVzY3JpcHRpb25zLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvLyDilIDilIAgQ29udGludWF0aW9uIHBvaW50ZXJzIOKUgOKUgFxuXG4gIC8qKiBMaW5lYXIgY29udGludWF0aW9uIChsaW5rZWQgbGlzdCBuZXh0IHBvaW50ZXIpICovXG4gIG5leHQ/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqIFBhcmFsbGVsIGNoaWxkcmVuIChmb3JrIGZhbi1vdXQpICovXG4gIGNoaWxkcmVuPzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXTtcblxuICAvLyDilIDilIAgQnJhbmNoaW5nIOKUgOKUgFxuXG4gIC8qKiBPdXRwdXQtYmFzZWQgc2VsZWN0b3I6IHBpY2tzIHN1YnNldCBvZiBjaGlsZHJlbiAqL1xuICBuZXh0Tm9kZVNlbGVjdG9yPzogU2VsZWN0b3I7XG4gIC8qKiBXaGVuIHRydWUsIGZuIElTIGEgc2NvcGUtYmFzZWQgZGVjaWRlciB0aGF0IHJldHVybnMgYSBicmFuY2ggSUQgc3RyaW5nICovXG4gIGRlY2lkZXJGbj86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIGZuIElTIGEgc2NvcGUtYmFzZWQgc2VsZWN0b3IgdGhhdCByZXR1cm5zIGJyYW5jaCBJRChzKSAqL1xuICBzZWxlY3RvckZuPzogYm9vbGVhbjtcblxuICAvLyDilIDilIAgU3RhZ2UgZnVuY3Rpb24g4pSA4pSAXG5cbiAgLyoqIEVtYmVkZGVkIGZ1bmN0aW9uOyBvdGhlcndpc2UgcmVzb2x2ZWQgZnJvbSBzdGFnZU1hcCBieSBgbmFtZWAgKi9cbiAgZm4/OiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT47XG5cbiAgLy8g4pSA4pSAIFN0cmVhbWluZyDilIDilIBcblxuICAvKiogV2hlbiB0cnVlLCBQaXBlbGluZSBpbmplY3RzIGEgc3RyZWFtQ2FsbGJhY2sgYXMgM3JkIHBhcmFtZXRlciAqL1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIC8qKiBVbmlxdWUgc3RyZWFtIGlkZW50aWZpZXIgZm9yIHJvdXRpbmcgdG9rZW5zICovXG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgCBTdWJmbG93IOKUgOKUgFxuXG4gIC8qKiBUcnVlIGlmIHRoaXMgaXMgdGhlIHJvb3Qgbm9kZSBvZiBhIG1vdW50ZWQgc3ViZmxvdyAqL1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgLyoqIE1vdW50IGlkIG9mIHRoZSBzdWJmbG93IChlLmcuLCBcImxsbS1jb3JlXCIpICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGUgc3ViZmxvdyAqL1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqIFJlZmVyZW5jZSBrZXkgaW50byB0aGUgc3ViZmxvd3MgZGljdGlvbmFyeSAqL1xuICAkcmVmPzogc3RyaW5nO1xuICAvKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgbW91bnQgaW5zdGFuY2UgKi9cbiAgbW91bnRJZD86IHN0cmluZztcbiAgLyoqIElucHV0L291dHB1dCBtYXBwaW5nIG9wdGlvbnMgZm9yIHN1YmZsb3dzICovXG4gIHN1YmZsb3dNb3VudE9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zO1xuICAvKiogV2hlbiB0cnVlLCBwYXJhbGxlbCBjaGlsZHJlbiB1c2UgZmFpbC1mYXN0IHNlbWFudGljcyAocmVqZWN0IG9uIGZpcnN0IGVycm9yKSAqL1xuICBmYWlsRmFzdD86IGJvb2xlYW47XG5cbiAgLyoqIElubGluZSBzdWJmbG93IGRlZmluaXRpb24gZm9yIGR5bmFtaWMgc3ViZmxvdyBhdHRhY2htZW50ICovXG4gIHN1YmZsb3dEZWY/OiB7XG4gICAgcm9vdDogU3RhZ2VOb2RlO1xuICAgIHN0YWdlTWFwPzogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgICBidWlsZFRpbWVTdHJ1Y3R1cmU/OiB1bmtub3duO1xuICAgIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGUgfT47XG4gIH07XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGlzU3RhZ2VOb2RlUmV0dXJuIOKAlCBkdWNrLXR5cGluZyBkZXRlY3Rpb24gZm9yIGR5bmFtaWMgY29udGludWF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBEZXRlY3RzIGlmIGEgc3RhZ2Ugb3V0cHV0IGlzIGEgU3RhZ2VOb2RlIGZvciBkeW5hbWljIGNvbnRpbnVhdGlvbi5cbiAqXG4gKiBVc2VzIGR1Y2stdHlwaW5nOiBtdXN0IGhhdmUgYG5hbWVgIChzdHJpbmcpIEFORCBhdCBsZWFzdCBvbmUgY29udGludWF0aW9uXG4gKiBwcm9wZXJ0eSAobm9uLWVtcHR5IGNoaWxkcmVuLCBuZXh0LCBvciBuZXh0Tm9kZVNlbGVjdG9yKS5cbiAqXG4gKiBTYWZlbHkgaGFuZGxlcyBwcm94eSBvYmplY3RzIChlLmcuLCBab2Qgc2NvcGUpIHRoYXQgbWF5IHRocm93IG9uIHByb3BlcnR5IGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RhZ2VOb2RlUmV0dXJuKG91dHB1dDogdW5rbm93bik6IG91dHB1dCBpcyBTdGFnZU5vZGUge1xuICBpZiAoIW91dHB1dCB8fCB0eXBlb2Ygb3V0cHV0ICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgb2JqID0gb3V0cHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2Ygb2JqLm5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBoYXNDb250aW51YXRpb24gPVxuICAgICAgKEFycmF5LmlzQXJyYXkob2JqLmNoaWxkcmVuKSAmJiBvYmouY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHxcbiAgICAgIG9iai5uZXh0ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBvYmoubmV4dE5vZGVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIHJldHVybiBoYXNDb250aW51YXRpb247XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19