@workflow/core 4.0.1-beta.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 (143) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +3 -0
  3. package/dist/builtins.d.ts +4 -0
  4. package/dist/builtins.d.ts.map +1 -0
  5. package/dist/builtins.js +13 -0
  6. package/dist/builtins.js.map +1 -0
  7. package/dist/create-hook.d.ts +123 -0
  8. package/dist/create-hook.d.ts.map +1 -0
  9. package/dist/create-hook.js +32 -0
  10. package/dist/create-hook.js.map +1 -0
  11. package/dist/define-hook.d.ts +53 -0
  12. package/dist/define-hook.d.ts.map +1 -0
  13. package/dist/define-hook.js +59 -0
  14. package/dist/define-hook.js.map +1 -0
  15. package/dist/events-consumer.d.ts +35 -0
  16. package/dist/events-consumer.d.ts.map +1 -0
  17. package/dist/events-consumer.js +72 -0
  18. package/dist/events-consumer.js.map +1 -0
  19. package/dist/global.d.ts +29 -0
  20. package/dist/global.d.ts.map +1 -0
  21. package/dist/global.js +50 -0
  22. package/dist/global.js.map +1 -0
  23. package/dist/index.d.ts +18 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +18 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/logger.d.ts +31 -0
  28. package/dist/logger.d.ts.map +1 -0
  29. package/dist/logger.js +32 -0
  30. package/dist/logger.js.map +1 -0
  31. package/dist/observability.d.ts +24 -0
  32. package/dist/observability.d.ts.map +1 -0
  33. package/dist/observability.js +126 -0
  34. package/dist/observability.js.map +1 -0
  35. package/dist/parse-name.d.ts +25 -0
  36. package/dist/parse-name.d.ts.map +1 -0
  37. package/dist/parse-name.js +40 -0
  38. package/dist/parse-name.js.map +1 -0
  39. package/dist/private.d.ts +26 -0
  40. package/dist/private.d.ts.map +1 -0
  41. package/dist/private.js +17 -0
  42. package/dist/private.js.map +1 -0
  43. package/dist/runtime/resume-hook.d.ts +71 -0
  44. package/dist/runtime/resume-hook.d.ts.map +1 -0
  45. package/dist/runtime/resume-hook.js +180 -0
  46. package/dist/runtime/resume-hook.js.map +1 -0
  47. package/dist/runtime/start.d.ts +28 -0
  48. package/dist/runtime/start.d.ts.map +1 -0
  49. package/dist/runtime/start.js +57 -0
  50. package/dist/runtime/start.js.map +1 -0
  51. package/dist/runtime/world.d.ts +24 -0
  52. package/dist/runtime/world.d.ts.map +1 -0
  53. package/dist/runtime/world.js +84 -0
  54. package/dist/runtime/world.js.map +1 -0
  55. package/dist/runtime.d.ts +121 -0
  56. package/dist/runtime.d.ts.map +1 -0
  57. package/dist/runtime.js +554 -0
  58. package/dist/runtime.js.map +1 -0
  59. package/dist/schemas.d.ts +29 -0
  60. package/dist/schemas.d.ts.map +1 -0
  61. package/dist/schemas.js +15 -0
  62. package/dist/schemas.js.map +1 -0
  63. package/dist/serialization.d.ts +188 -0
  64. package/dist/serialization.d.ts.map +1 -0
  65. package/dist/serialization.js +725 -0
  66. package/dist/serialization.js.map +1 -0
  67. package/dist/step/context-storage.d.ts +8 -0
  68. package/dist/step/context-storage.d.ts.map +1 -0
  69. package/dist/step/context-storage.js +3 -0
  70. package/dist/step/context-storage.js.map +1 -0
  71. package/dist/step/get-step-metadata.d.ts +38 -0
  72. package/dist/step/get-step-metadata.d.ts.map +1 -0
  73. package/dist/step/get-step-metadata.js +14 -0
  74. package/dist/step/get-step-metadata.js.map +1 -0
  75. package/dist/step/get-workflow-metadata.d.ts +7 -0
  76. package/dist/step/get-workflow-metadata.d.ts.map +1 -0
  77. package/dist/step/get-workflow-metadata.js +12 -0
  78. package/dist/step/get-workflow-metadata.js.map +1 -0
  79. package/dist/step.d.ts +4 -0
  80. package/dist/step.d.ts.map +1 -0
  81. package/dist/step.js +92 -0
  82. package/dist/step.js.map +1 -0
  83. package/dist/symbols.d.ts +9 -0
  84. package/dist/symbols.d.ts.map +1 -0
  85. package/dist/symbols.js +9 -0
  86. package/dist/symbols.js.map +1 -0
  87. package/dist/telemetry/semantic-conventions.d.ts +175 -0
  88. package/dist/telemetry/semantic-conventions.d.ts.map +1 -0
  89. package/dist/telemetry/semantic-conventions.js +121 -0
  90. package/dist/telemetry/semantic-conventions.js.map +1 -0
  91. package/dist/telemetry.d.ts +24 -0
  92. package/dist/telemetry.d.ts.map +1 -0
  93. package/dist/telemetry.js +121 -0
  94. package/dist/telemetry.js.map +1 -0
  95. package/dist/types.d.ts +10 -0
  96. package/dist/types.d.ts.map +1 -0
  97. package/dist/types.js +39 -0
  98. package/dist/types.js.map +1 -0
  99. package/dist/util.d.ts +43 -0
  100. package/dist/util.d.ts.map +1 -0
  101. package/dist/util.js +76 -0
  102. package/dist/util.js.map +1 -0
  103. package/dist/vm/index.d.ts +17 -0
  104. package/dist/vm/index.d.ts.map +1 -0
  105. package/dist/vm/index.js +93 -0
  106. package/dist/vm/index.js.map +1 -0
  107. package/dist/vm/uuid.d.ts +10 -0
  108. package/dist/vm/uuid.d.ts.map +1 -0
  109. package/dist/vm/uuid.js +30 -0
  110. package/dist/vm/uuid.js.map +1 -0
  111. package/dist/workflow/create-hook.d.ts +7 -0
  112. package/dist/workflow/create-hook.d.ts.map +1 -0
  113. package/dist/workflow/create-hook.js +22 -0
  114. package/dist/workflow/create-hook.js.map +1 -0
  115. package/dist/workflow/define-hook.d.ts +10 -0
  116. package/dist/workflow/define-hook.d.ts.map +1 -0
  117. package/dist/workflow/define-hook.js +15 -0
  118. package/dist/workflow/define-hook.js.map +1 -0
  119. package/dist/workflow/get-workflow-metadata.d.ts +17 -0
  120. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -0
  121. package/dist/workflow/get-workflow-metadata.js +11 -0
  122. package/dist/workflow/get-workflow-metadata.js.map +1 -0
  123. package/dist/workflow/hook.d.ts +4 -0
  124. package/dist/workflow/hook.d.ts.map +1 -0
  125. package/dist/workflow/hook.js +101 -0
  126. package/dist/workflow/hook.js.map +1 -0
  127. package/dist/workflow/index.d.ts +10 -0
  128. package/dist/workflow/index.d.ts.map +1 -0
  129. package/dist/workflow/index.js +14 -0
  130. package/dist/workflow/index.js.map +1 -0
  131. package/dist/workflow/writable-stream.d.ts +3 -0
  132. package/dist/workflow/writable-stream.d.ts.map +1 -0
  133. package/dist/workflow/writable-stream.js +12 -0
  134. package/dist/workflow/writable-stream.js.map +1 -0
  135. package/dist/workflow.d.ts +3 -0
  136. package/dist/workflow.d.ts.map +1 -0
  137. package/dist/workflow.js +454 -0
  138. package/dist/workflow.js.map +1 -0
  139. package/dist/writable-stream.d.ts +22 -0
  140. package/dist/writable-stream.d.ts.map +1 -0
  141. package/dist/writable-stream.js +16 -0
  142. package/dist/writable-stream.js.map +1 -0
  143. package/package.json +73 -0
@@ -0,0 +1,188 @@
1
+ import * as devalue from 'devalue';
2
+ /**
3
+ * Detect if a readable stream is a byte stream.
4
+ *
5
+ * @param stream
6
+ * @returns `"bytes"` if the stream is a byte stream, `undefined` otherwise
7
+ */
8
+ export declare function getStreamType(stream: ReadableStream): 'bytes' | undefined;
9
+ export declare function getSerializeStream(reducers: Reducers): TransformStream<any, Uint8Array>;
10
+ export declare function getDeserializeStream(revivers: Revivers): TransformStream<Uint8Array, any>;
11
+ export declare class WorkflowServerReadableStream extends ReadableStream<Uint8Array> {
12
+ #private;
13
+ constructor(name: string, startIndex?: number);
14
+ }
15
+ export declare class WorkflowServerWritableStream extends WritableStream<Uint8Array> {
16
+ constructor(name: string);
17
+ }
18
+ export interface SerializableSpecial {
19
+ ArrayBuffer: string;
20
+ BigInt64Array: string;
21
+ BigUint64Array: string;
22
+ Date: string;
23
+ Float32Array: string;
24
+ Float64Array: string;
25
+ Error: Record<string, any>;
26
+ Headers: [string, string][];
27
+ Int8Array: string;
28
+ Int16Array: string;
29
+ Int32Array: string;
30
+ Map: [any, any][];
31
+ ReadableStream: {
32
+ name: string;
33
+ type?: 'bytes';
34
+ startIndex?: number;
35
+ } | {
36
+ bodyInit: any;
37
+ };
38
+ RegExp: {
39
+ source: string;
40
+ flags: string;
41
+ };
42
+ Request: {
43
+ method: string;
44
+ url: string;
45
+ headers: Headers;
46
+ body: Request['body'];
47
+ duplex: Request['duplex'];
48
+ responseWritable?: WritableStream<Response>;
49
+ };
50
+ Response: {
51
+ type: Response['type'];
52
+ url: string;
53
+ status: number;
54
+ statusText: string;
55
+ headers: Headers;
56
+ body: Response['body'];
57
+ redirected: boolean;
58
+ };
59
+ Set: any[];
60
+ URL: string;
61
+ URLSearchParams: string;
62
+ Uint8Array: string;
63
+ Uint8ClampedArray: string;
64
+ Uint16Array: string;
65
+ Uint32Array: string;
66
+ WritableStream: {
67
+ name: string;
68
+ };
69
+ }
70
+ type Reducers = {
71
+ [K in keyof SerializableSpecial]: (value: any) => SerializableSpecial[K] | false;
72
+ };
73
+ type Revivers = {
74
+ [K in keyof SerializableSpecial]: (value: SerializableSpecial[K]) => any;
75
+ };
76
+ /**
77
+ * Reducers for serialization boundary from the client side, passing arguments
78
+ * to the workflow handler.
79
+ *
80
+ * @param global
81
+ * @param ops
82
+ * @returns
83
+ */
84
+ export declare function getExternalReducers(global: Record<string, any> | undefined, ops: Promise<any>[]): Reducers;
85
+ /**
86
+ * Reducers for serialization boundary from within the workflow execution
87
+ * environment, passing return value to the client side and into step arguments.
88
+ *
89
+ * @param global
90
+ * @returns
91
+ */
92
+ export declare function getWorkflowReducers(global?: Record<string, any>): Reducers;
93
+ /**
94
+ * Revivers for deserialization boundary from the client side,
95
+ * receiving the return value from the workflow handler.
96
+ *
97
+ * @param global
98
+ * @param ops
99
+ */
100
+ export declare function getExternalRevivers(global: Record<string, any> | undefined, ops: Promise<any>[]): Revivers;
101
+ /**
102
+ * Revivers for deserialization boundary from within the workflow execution
103
+ * environment, receiving arguments from the client side, and return values
104
+ * from the steps.
105
+ *
106
+ * @param global
107
+ * @returns
108
+ */
109
+ export declare function getWorkflowRevivers(global?: Record<string, any>): Revivers;
110
+ /**
111
+ * Called from the `start()` function to serialize the workflow arguments
112
+ * into a format that can be saved to the database and then hydrated from
113
+ * within the workflow execution environment.
114
+ *
115
+ * @param value
116
+ * @param global
117
+ * @returns The dehydrated value, ready to be inserted into the database
118
+ */
119
+ export declare function dehydrateWorkflowArguments(value: unknown, ops: Promise<any>[], global?: Record<string, any>): any;
120
+ /**
121
+ * Called from workflow execution environment to hydrate the workflow
122
+ * arguments from the database at the start of workflow execution.
123
+ *
124
+ * @param value
125
+ * @param ops
126
+ * @param global
127
+ * @returns The hydrated value
128
+ */
129
+ export declare function hydrateWorkflowArguments(value: Parameters<typeof devalue.unflatten>[0], global?: Record<string, any>, extraRevivers?: Record<string, (value: any) => any>): any;
130
+ /**
131
+ * Called at the end of a completed workflow execution to serialize the
132
+ * return value into a format that can be saved to the database.
133
+ *
134
+ * @param value
135
+ * @param global
136
+ * @returns The dehydrated value, ready to be inserted into the database
137
+ */
138
+ export declare function dehydrateWorkflowReturnValue(value: unknown, global?: Record<string, any>): any;
139
+ /**
140
+ * Called from the client side (i.e. the execution environment where
141
+ * the workflow run was initiated from) to hydrate the workflow
142
+ * return value of a completed workflow run.
143
+ *
144
+ * @param value
145
+ * @param global
146
+ * @returns The hydrated return value, ready to be consumed by the client
147
+ */
148
+ export declare function hydrateWorkflowReturnValue(value: Parameters<typeof devalue.unflatten>[0], ops: Promise<any>[], global?: Record<string, any>, extraRevivers?: Record<string, (value: any) => any>): any;
149
+ /**
150
+ * Called from the workflow handler when a step is being created.
151
+ * Dehydrates values from within the workflow execution environment
152
+ * into a format that can be saved to the database.
153
+ *
154
+ * @param value
155
+ * @param global
156
+ * @returns The dehydrated value, ready to be inserted into the database
157
+ */
158
+ export declare function dehydrateStepArguments(value: unknown, global: Record<string, any>): any;
159
+ /**
160
+ * Called from the step handler to hydrate the arguments of a step
161
+ * from the database at the start of the step execution.
162
+ *
163
+ * @param value
164
+ * @param global
165
+ * @returns The hydrated value, ready to be consumed by the step user-code function
166
+ */
167
+ export declare function hydrateStepArguments(value: Parameters<typeof devalue.unflatten>[0], ops: Promise<any>[], global?: Record<string, any>, extraRevivers?: Record<string, (value: any) => any>): any;
168
+ /**
169
+ * Called from the step handler when a step has completed.
170
+ * Dehydrates values from within the step execution environment
171
+ * into a format that can be saved to the database.
172
+ *
173
+ * @param value
174
+ * @param global
175
+ * @returns The dehydrated value, ready to be inserted into the database
176
+ */
177
+ export declare function dehydrateStepReturnValue(value: unknown, ops: Promise<any>[], global?: Record<string, any>): any;
178
+ /**
179
+ * Called from the workflow handler when replaying the event log of a `step_completed` event.
180
+ * Hydrates the return value of a step from the database.
181
+ *
182
+ * @param value
183
+ * @param global
184
+ * @returns The hydrated return value of a step, ready to be consumed by the workflow handler
185
+ */
186
+ export declare function hydrateStepReturnValue(value: Parameters<typeof devalue.unflatten>[0], global?: Record<string, any>, extraRevivers?: Record<string, (value: any) => any>): any;
187
+ export {};
188
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AASnC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,CAMzE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,GACjB,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAkBlC;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,GACjB,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,CA6BlC;AAED,qBAAa,4BAA6B,SAAQ,cAAc,CAAC,UAAU,CAAC;;gBAG9D,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CA8B9C;AAED,qBAAa,4BAA6B,SAAQ,cAAc,CAAC,UAAU,CAAC;gBAC9D,IAAI,EAAE,MAAM;CAczB;AAID,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAClB,cAAc,EACV;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACrD;QAAE,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC;IACtB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAG1B,gBAAgB,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;KAC7C,CAAC;IACF,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,GAAG,EAAE,GAAG,EAAE,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC;AAED,KAAK,QAAQ,GAAG;KACb,CAAC,IAAI,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,GAAG,KACP,mBAAmB,CAAC,CAAC,CAAC,GAAG,KAAK;CACpC,CAAC;AAEF,KAAK,QAAQ,GAAG;KACb,CAAC,IAAI,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,GAAG;CACzE,CAAC;AA4GF;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAa,EACxC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAClB,QAAQ,CA0CV;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,GACvC,QAAQ,CAmCV;AA+ID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAa,EACxC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAClB,QAAQ,CAqDV;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,GACvC,QAAQ,CAsDV;AAwED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EACnB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,OAWzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC9C,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,EACxC,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAM,OAOxD;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,OAWzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC9C,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EACnB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,EACxC,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAM,OAOxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAW5B;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC9C,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EACnB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,EACxC,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAM,OAOxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EACnB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,OAWzC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC9C,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAc,EACxC,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAM,OAOxD"}