@workflow/core 5.0.0-beta.3 → 5.0.0-beta.31

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 (268) hide show
  1. package/dist/attribute-changes.d.ts +7 -0
  2. package/dist/attribute-changes.d.ts.map +1 -0
  3. package/dist/attribute-changes.js +25 -0
  4. package/dist/capabilities.d.ts +22 -1
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +41 -4
  7. package/dist/capture-stack.d.ts +16 -0
  8. package/dist/capture-stack.d.ts.map +1 -0
  9. package/dist/capture-stack.js +21 -0
  10. package/dist/class-serialization.d.ts +32 -0
  11. package/dist/class-serialization.d.ts.map +1 -1
  12. package/dist/class-serialization.js +37 -1
  13. package/dist/classify-error.d.ts +26 -3
  14. package/dist/classify-error.d.ts.map +1 -1
  15. package/dist/classify-error.js +103 -6
  16. package/dist/context-errors.d.ts +27 -0
  17. package/dist/context-errors.d.ts.map +1 -0
  18. package/dist/context-errors.js +101 -0
  19. package/dist/context-violation-error.d.ts +97 -0
  20. package/dist/context-violation-error.d.ts.map +1 -0
  21. package/dist/context-violation-error.js +147 -0
  22. package/dist/create-hook.d.ts +42 -3
  23. package/dist/create-hook.d.ts.map +1 -1
  24. package/dist/create-hook.js +4 -3
  25. package/dist/define-hook.d.ts.map +1 -1
  26. package/dist/define-hook.js +20 -5
  27. package/dist/describe-error.d.ts +70 -0
  28. package/dist/describe-error.d.ts.map +1 -0
  29. package/dist/describe-error.js +165 -0
  30. package/dist/encryption.d.ts +22 -1
  31. package/dist/encryption.d.ts.map +1 -1
  32. package/dist/encryption.js +72 -27
  33. package/dist/events-consumer.d.ts +25 -1
  34. package/dist/events-consumer.d.ts.map +1 -1
  35. package/dist/events-consumer.js +95 -16
  36. package/dist/flushable-stream.d.ts +10 -10
  37. package/dist/flushable-stream.d.ts.map +1 -1
  38. package/dist/flushable-stream.js +26 -15
  39. package/dist/global.d.ts +35 -1
  40. package/dist/global.d.ts.map +1 -1
  41. package/dist/global.js +21 -3
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -1
  45. package/dist/log-format.d.ts +25 -0
  46. package/dist/log-format.d.ts.map +1 -0
  47. package/dist/log-format.js +250 -0
  48. package/dist/logger.d.ts +29 -30
  49. package/dist/logger.d.ts.map +1 -1
  50. package/dist/logger.js +82 -32
  51. package/dist/private.d.ts +107 -2
  52. package/dist/private.d.ts.map +1 -1
  53. package/dist/private.js +80 -3
  54. package/dist/runtime/constants.d.ts +189 -0
  55. package/dist/runtime/constants.d.ts.map +1 -1
  56. package/dist/runtime/constants.js +310 -15
  57. package/dist/runtime/get-port-lazy.d.ts +25 -0
  58. package/dist/runtime/get-port-lazy.d.ts.map +1 -0
  59. package/dist/runtime/get-port-lazy.js +92 -0
  60. package/dist/runtime/get-world-lazy.d.ts +23 -0
  61. package/dist/runtime/get-world-lazy.d.ts.map +1 -0
  62. package/dist/runtime/get-world-lazy.js +46 -0
  63. package/dist/runtime/helpers.d.ts +57 -6
  64. package/dist/runtime/helpers.d.ts.map +1 -1
  65. package/dist/runtime/helpers.js +169 -32
  66. package/dist/runtime/replay-budget.d.ts +98 -0
  67. package/dist/runtime/replay-budget.d.ts.map +1 -0
  68. package/dist/runtime/replay-budget.js +192 -0
  69. package/dist/runtime/resume-hook.d.ts.map +1 -1
  70. package/dist/runtime/resume-hook.js +39 -23
  71. package/dist/runtime/run-id-time.d.ts +10 -0
  72. package/dist/runtime/run-id-time.d.ts.map +1 -0
  73. package/dist/runtime/run-id-time.js +31 -0
  74. package/dist/runtime/run.d.ts +6 -2
  75. package/dist/runtime/run.d.ts.map +1 -1
  76. package/dist/runtime/run.js +52 -10
  77. package/dist/runtime/runs.d.ts +36 -2
  78. package/dist/runtime/runs.d.ts.map +1 -1
  79. package/dist/runtime/runs.js +18 -7
  80. package/dist/runtime/start.d.ts +58 -1
  81. package/dist/runtime/start.d.ts.map +1 -1
  82. package/dist/runtime/start.js +160 -46
  83. package/dist/runtime/step-executor.d.ts +131 -0
  84. package/dist/runtime/step-executor.d.ts.map +1 -0
  85. package/dist/runtime/step-executor.js +818 -0
  86. package/dist/runtime/step-handler.d.ts.map +1 -1
  87. package/dist/runtime/step-handler.js +718 -557
  88. package/dist/runtime/step-latency.d.ts +131 -0
  89. package/dist/runtime/step-latency.d.ts.map +1 -0
  90. package/dist/runtime/step-latency.js +155 -0
  91. package/dist/runtime/step-ownership.d.ts +72 -0
  92. package/dist/runtime/step-ownership.d.ts.map +1 -0
  93. package/dist/runtime/step-ownership.js +114 -0
  94. package/dist/runtime/step-single-flight.d.ts +12 -0
  95. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  96. package/dist/runtime/step-single-flight.js +69 -0
  97. package/dist/runtime/suspension-handler.d.ts +81 -7
  98. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  99. package/dist/runtime/suspension-handler.js +355 -137
  100. package/dist/runtime/wait-continuation.d.ts +84 -0
  101. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  102. package/dist/runtime/wait-continuation.js +105 -0
  103. package/dist/runtime/wait-until.d.ts +18 -0
  104. package/dist/runtime/wait-until.d.ts.map +1 -0
  105. package/dist/runtime/wait-until.js +42 -0
  106. package/dist/runtime/world-compatibility.d.ts +5 -0
  107. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  108. package/dist/runtime/world-compatibility.js +12 -0
  109. package/dist/runtime/world-init.d.ts +50 -0
  110. package/dist/runtime/world-init.d.ts.map +1 -0
  111. package/dist/runtime/world-init.js +50 -0
  112. package/dist/runtime/world-target.d.ts +11 -0
  113. package/dist/runtime/world-target.d.ts.map +1 -0
  114. package/dist/runtime/world-target.js +15 -0
  115. package/dist/runtime/world.d.ts +21 -9
  116. package/dist/runtime/world.d.ts.map +1 -1
  117. package/dist/runtime/world.js +58 -83
  118. package/dist/runtime.d.ts +15 -10
  119. package/dist/runtime.d.ts.map +1 -1
  120. package/dist/runtime.js +1757 -326
  121. package/dist/schemas.d.ts +1 -1
  122. package/dist/schemas.d.ts.map +1 -1
  123. package/dist/schemas.js +1 -1
  124. package/dist/serialization/client.d.ts +17 -0
  125. package/dist/serialization/client.d.ts.map +1 -0
  126. package/dist/serialization/client.js +48 -0
  127. package/dist/serialization/codec-devalue.d.ts +14 -0
  128. package/dist/serialization/codec-devalue.d.ts.map +1 -0
  129. package/dist/serialization/codec-devalue.js +98 -0
  130. package/dist/serialization/codec.d.ts +106 -0
  131. package/dist/serialization/codec.d.ts.map +1 -0
  132. package/dist/serialization/codec.js +17 -0
  133. package/dist/serialization/compression.d.ts +104 -0
  134. package/dist/serialization/compression.d.ts.map +1 -0
  135. package/dist/serialization/compression.js +260 -0
  136. package/dist/serialization/encryption.d.ts +33 -0
  137. package/dist/serialization/encryption.d.ts.map +1 -0
  138. package/dist/serialization/encryption.js +70 -0
  139. package/dist/serialization/errors.d.ts +34 -0
  140. package/dist/serialization/errors.d.ts.map +1 -0
  141. package/dist/serialization/errors.js +59 -0
  142. package/dist/serialization/format.d.ts +60 -0
  143. package/dist/serialization/format.d.ts.map +1 -0
  144. package/dist/serialization/format.js +97 -0
  145. package/dist/serialization/index.d.ts +19 -0
  146. package/dist/serialization/index.d.ts.map +1 -0
  147. package/dist/serialization/index.js +22 -0
  148. package/dist/serialization/reducers/class.d.ts +11 -0
  149. package/dist/serialization/reducers/class.d.ts.map +1 -0
  150. package/dist/serialization/reducers/class.js +68 -0
  151. package/dist/serialization/reducers/common.d.ts +16 -0
  152. package/dist/serialization/reducers/common.d.ts.map +1 -0
  153. package/dist/serialization/reducers/common.js +417 -0
  154. package/dist/serialization/reducers/step-function.d.ts +35 -0
  155. package/dist/serialization/reducers/step-function.d.ts.map +1 -0
  156. package/dist/serialization/reducers/step-function.js +88 -0
  157. package/dist/serialization/step.d.ts +17 -0
  158. package/dist/serialization/step.d.ts.map +1 -0
  159. package/dist/serialization/step.js +48 -0
  160. package/dist/serialization/types.d.ts +253 -0
  161. package/dist/serialization/types.d.ts.map +1 -0
  162. package/dist/serialization/types.js +25 -0
  163. package/dist/serialization/workflow.d.ts +29 -0
  164. package/dist/serialization/workflow.d.ts.map +1 -0
  165. package/dist/serialization/workflow.js +54 -0
  166. package/dist/serialization-format.d.ts +16 -0
  167. package/dist/serialization-format.d.ts.map +1 -1
  168. package/dist/serialization-format.js +213 -50
  169. package/dist/serialization.d.ts +322 -214
  170. package/dist/serialization.d.ts.map +1 -1
  171. package/dist/serialization.js +1575 -664
  172. package/dist/set-attributes.d.ts +18 -0
  173. package/dist/set-attributes.d.ts.map +1 -0
  174. package/dist/set-attributes.js +61 -0
  175. package/dist/sleep.d.ts.map +1 -1
  176. package/dist/sleep.js +3 -2
  177. package/dist/source-map.d.ts +5 -0
  178. package/dist/source-map.d.ts.map +1 -1
  179. package/dist/source-map.js +102 -10
  180. package/dist/step/context-storage.d.ts +53 -0
  181. package/dist/step/context-storage.d.ts.map +1 -1
  182. package/dist/step/context-storage.js +1 -1
  183. package/dist/step/get-closure-vars.d.ts.map +1 -1
  184. package/dist/step/get-closure-vars.js +3 -2
  185. package/dist/step/get-step-metadata.d.ts.map +1 -1
  186. package/dist/step/get-step-metadata.js +3 -2
  187. package/dist/step/get-workflow-metadata.d.ts.map +1 -1
  188. package/dist/step/get-workflow-metadata.js +3 -2
  189. package/dist/step/writable-stream.d.ts.map +1 -1
  190. package/dist/step/writable-stream.js +58 -6
  191. package/dist/step-hydration-cache.d.ts +148 -0
  192. package/dist/step-hydration-cache.d.ts.map +1 -0
  193. package/dist/step-hydration-cache.js +171 -0
  194. package/dist/step.d.ts.map +1 -1
  195. package/dist/step.js +144 -25
  196. package/dist/symbols.d.ts +28 -0
  197. package/dist/symbols.d.ts.map +1 -1
  198. package/dist/symbols.js +29 -1
  199. package/dist/telemetry/semantic-conventions.d.ts +98 -2
  200. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  201. package/dist/telemetry/semantic-conventions.js +66 -1
  202. package/dist/telemetry.d.ts +68 -0
  203. package/dist/telemetry.d.ts.map +1 -1
  204. package/dist/telemetry.js +106 -4
  205. package/dist/types.d.ts +6 -0
  206. package/dist/types.d.ts.map +1 -1
  207. package/dist/types.js +23 -1
  208. package/dist/util.d.ts +16 -6
  209. package/dist/util.d.ts.map +1 -1
  210. package/dist/util.js +25 -16
  211. package/dist/version.d.ts +1 -1
  212. package/dist/version.d.ts.map +1 -1
  213. package/dist/version.js +2 -2
  214. package/dist/vm/index.d.ts.map +1 -1
  215. package/dist/vm/index.js +3 -2
  216. package/dist/vm/script-cache.d.ts +28 -0
  217. package/dist/vm/script-cache.d.ts.map +1 -0
  218. package/dist/vm/script-cache.js +140 -0
  219. package/dist/workflow/abort-controller.d.ts +65 -0
  220. package/dist/workflow/abort-controller.d.ts.map +1 -0
  221. package/dist/workflow/abort-controller.js +277 -0
  222. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  223. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  224. package/dist/workflow/attribute-dispatcher.js +48 -0
  225. package/dist/workflow/create-hook.d.ts.map +1 -1
  226. package/dist/workflow/create-hook.js +25 -3
  227. package/dist/workflow/define-hook.d.ts +1 -1
  228. package/dist/workflow/define-hook.d.ts.map +1 -1
  229. package/dist/workflow/define-hook.js +8 -4
  230. package/dist/workflow/get-workflow-metadata.d.ts.map +1 -1
  231. package/dist/workflow/get-workflow-metadata.js +14 -3
  232. package/dist/workflow/hook.d.ts.map +1 -1
  233. package/dist/workflow/hook.js +207 -33
  234. package/dist/workflow/index.d.ts +1 -0
  235. package/dist/workflow/index.d.ts.map +1 -1
  236. package/dist/workflow/index.js +5 -3
  237. package/dist/workflow/set-attributes.d.ts +77 -0
  238. package/dist/workflow/set-attributes.d.ts.map +1 -0
  239. package/dist/workflow/set-attributes.js +65 -0
  240. package/dist/workflow/sleep.d.ts.map +1 -1
  241. package/dist/workflow/sleep.js +45 -8
  242. package/dist/workflow/world-init-stub.d.ts +15 -0
  243. package/dist/workflow/world-init-stub.d.ts.map +1 -0
  244. package/dist/workflow/world-init-stub.js +15 -0
  245. package/dist/workflow.d.ts +17 -1
  246. package/dist/workflow.d.ts.map +1 -1
  247. package/dist/workflow.js +190 -56
  248. package/docs/api-reference/create-hook.mdx +38 -0
  249. package/docs/api-reference/create-webhook.mdx +1 -0
  250. package/docs/api-reference/fetch.mdx +5 -0
  251. package/docs/api-reference/index.mdx +3 -0
  252. package/docs/api-reference/set-attributes.mdx +65 -0
  253. package/docs/foundations/cancellation.mdx +459 -0
  254. package/docs/foundations/errors-and-retries.mdx +7 -3
  255. package/docs/foundations/hooks.mdx +29 -0
  256. package/docs/foundations/idempotency.mdx +236 -11
  257. package/docs/foundations/index.mdx +1 -23
  258. package/docs/foundations/meta.json +3 -1
  259. package/docs/foundations/serialization.mdx +77 -41
  260. package/docs/foundations/starting-workflows.mdx +5 -1
  261. package/docs/foundations/streaming.mdx +14 -23
  262. package/docs/foundations/versioning.mdx +263 -0
  263. package/docs/how-it-works/cancellation.mdx +287 -0
  264. package/docs/how-it-works/code-transform.mdx +2 -2
  265. package/docs/how-it-works/encryption.mdx +2 -2
  266. package/docs/how-it-works/event-sourcing.mdx +2 -2
  267. package/docs/how-it-works/meta.json +2 -1
  268. package/package.json +32 -11
@@ -2,10 +2,10 @@ import { WorkflowRunCancelledError, WorkflowRunFailedError, WorkflowRunNotComple
2
2
  import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from '@workflow/serde';
3
3
  import { SPEC_VERSION_CURRENT, } from '@workflow/world';
4
4
  import { importKey } from '../encryption.js';
5
- import { getExternalRevivers, hydrateWorkflowReturnValue, } from '../serialization.js';
5
+ import { getExternalRevivers, hydrateRunError, hydrateWorkflowReturnValue, } from '../serialization.js';
6
6
  import { getWorkflowRunStreamId } from '../util.js';
7
+ import { getWorldLazy } from './get-world-lazy.js';
7
8
  import { wakeUpRun, } from './runs.js';
8
- import { getWorld } from './world.js';
9
9
  /**
10
10
  * A handler class for a workflow run.
11
11
  */
@@ -27,7 +27,7 @@ export class Run {
27
27
  #worldPromise;
28
28
  get #lazyWorldPromise() {
29
29
  if (!this.#worldPromise)
30
- this.#worldPromise = getWorld();
30
+ this.#worldPromise = getWorldLazy();
31
31
  return this.#worldPromise;
32
32
  }
33
33
  /**
@@ -65,6 +65,15 @@ export class Run {
65
65
  }
66
66
  return this.#encryptionKeyPromise;
67
67
  }
68
+ /**
69
+ * Defer fetching the run and its encryption key until serialized stream data
70
+ * is actually read. An empty or metadata-only stream must not start an
71
+ * unobserved run lookup.
72
+ * @internal
73
+ */
74
+ #getEncryptionKeyLazily() {
75
+ return () => this.#getEncryptionKey();
76
+ }
68
77
  /**
69
78
  * Interrupts pending `sleep()` calls, resuming the workflow early.
70
79
  *
@@ -78,13 +87,20 @@ export class Run {
78
87
  }
79
88
  /**
80
89
  * Cancels the workflow run.
90
+ *
91
+ * @param options - Optional cancellation settings. `cancelReason` records a
92
+ * free-text reason (max 512 chars) on the run_cancelled event, surfaced in
93
+ * the run detail view.
81
94
  */
82
- async cancel() {
95
+ async cancel(options) {
83
96
  'use step';
84
97
  const world = await this.#lazyWorldPromise;
85
98
  await world.events.create(this.runId, {
86
99
  eventType: 'run_cancelled',
87
100
  specVersion: SPEC_VERSION_CURRENT,
101
+ ...(options?.cancelReason !== undefined
102
+ ? { eventData: { cancelReason: options.cancelReason } }
103
+ : {}),
88
104
  });
89
105
  }
90
106
  /**
@@ -169,10 +185,12 @@ export class Run {
169
185
  'use step';
170
186
  const { ops = [], global = globalThis, startIndex, namespace } = options;
171
187
  const name = getWorkflowRunStreamId(this.runId, namespace);
172
- // Pass the key as a promise it will be resolved lazily inside
173
- // the first async transform() call of the deserialize stream.
174
- const encryptionKey = this.#getEncryptionKey();
175
- const stream = getExternalRevivers(global, ops, this.runId, encryptionKey).ReadableStream({
188
+ // The resolver starts only when the deserialize stream sees its first
189
+ // chunk, so creating or probing an empty stream cannot reject in the
190
+ // background.
191
+ const encryptionKey = this.#getEncryptionKeyLazily();
192
+ const stream = getExternalRevivers(global, ops, this.runId, encryptionKey)
193
+ .ReadableStream({
176
194
  name,
177
195
  startIndex,
178
196
  });
@@ -201,6 +219,13 @@ export class Run {
201
219
  let notFoundRetries = 0;
202
220
  const NOT_FOUND_MAX_RETRIES = this.#resilientStart ? 3 : 0;
203
221
  const NOT_FOUND_DELAYS = [1_000, 3_000, 6_000];
222
+ // NOTE: when this poll runs inside a step (e.g. the step that a parent
223
+ // workflow uses to await a child workflow's `returnValue`), it blocks
224
+ // a queue worker slot for as long as the child run takes to finish.
225
+ // Worker-based worlds like `world-postgres` must be sized to cover the
226
+ // peak number of such polls in flight — see the `queueConcurrency`
227
+ // default on the Postgres world and the notes in the eager-processing
228
+ // changelog for details.
204
229
  while (true) {
205
230
  try {
206
231
  const run = await world.runs.get(this.runId);
@@ -212,8 +237,25 @@ export class Run {
212
237
  throw new WorkflowRunCancelledError(this.runId);
213
238
  }
214
239
  if (run.status === 'failed') {
215
- throw new WorkflowRunFailedError(this.runId, run.error);
240
+ // Hydrate the serialized run error so the original thrown value
241
+ // (with its type identity, cause chain, etc.) is set as the
242
+ // `cause` on WorkflowRunFailedError.
243
+ const encryptionKey = await this.#getEncryptionKey();
244
+ let hydratedError;
245
+ try {
246
+ hydratedError = await hydrateRunError(run.error, this.runId, encryptionKey);
247
+ }
248
+ catch {
249
+ // If hydration fails, surface a generic fallback rather than
250
+ // leaving the user with a raw Uint8Array. The run's errorCode
251
+ // is still preserved on the thrown WorkflowRunFailedError.
252
+ hydratedError = new Error('Failed to hydrate workflow run error');
253
+ }
254
+ throw new WorkflowRunFailedError(this.runId, hydratedError, {
255
+ errorCode: run.errorCode,
256
+ });
216
257
  }
258
+ // Run not completed yet — sleep and poll again.
217
259
  throw new WorkflowRunNotCompletedError(this.runId, run.status);
218
260
  }
219
261
  catch (error) {
@@ -243,4 +285,4 @@ export class Run {
243
285
  export function getRun(runId) {
244
286
  return new Run(runId);
245
287
  }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix3QkFBd0IsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsb0JBQW9CLEdBR3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLDBCQUEwQixHQUMzQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwRCxPQUFPLEVBR0wsU0FBUyxHQUNWLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE2Q3RDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEdBQUc7SUFDZCxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQXNCO1FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFRCxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBRzdCO1FBQ0MsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBUztJQUVkOzs7T0FHRztJQUNILGFBQWEsQ0FBNkI7SUFDMUMsSUFBSSxp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LENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1QixNQUFNLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFELENBQUM7Z0JBRUQsTUFBTSxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksNEJBQTRCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzNDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDM0QsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQ0Usd0JBQXdCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztvQkFDbEMsZUFBZSxHQUFHLHFCQUFxQixFQUN2QyxDQUFDO29CQUNELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBRSxDQUFDO29CQUNqRCxlQUFlLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQVUsS0FBYTtJQUMzQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yLFxuICBXb3JrZmxvd1J1bkZhaWxlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5pbXBvcnQge1xuICBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgdHlwZSBXb3JrZmxvd1J1blN0YXR1cyxcbiAgdHlwZSBXb3JsZCxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHR5cGUgQ3J5cHRvS2V5LCBpbXBvcnRLZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsUmV2aXZlcnMsXG4gIGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlLFxufSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UnVuU3RyZWFtSWQgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgU3RvcFNsZWVwT3B0aW9ucyxcbiAgdHlwZSBTdG9wU2xlZXBSZXN1bHQsXG4gIHdha2VVcFJ1bixcbn0gZnJvbSAnLi9ydW5zLmpzJztcbmltcG9ydCB7IGdldFdvcmxkIH0gZnJvbSAnLi93b3JsZC5qcyc7XG5cbi8qKlxuICogQSBgUmVhZGFibGVTdHJlYW1gIGV4dGVuZGVkIHdpdGggd29ya2Zsb3ctc3BlY2lmaWMgaGVscGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbTxSID0gYW55PiA9IFJlYWRhYmxlU3RyZWFtPFI+ICYge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFpbCBpbmRleCAoaW5kZXggb2YgdGhlIGxhc3Qga25vd24gY2h1bmssIDAtYmFzZWQpIG9mIHRoZVxuICAgKiB1bmRlcmx5aW5nIHdvcmtmbG93IHN0cmVhbS4gVXNlZnVsIGZvciByZXNvbHZpbmcgYSBuZWdhdGl2ZSBgc3RhcnRJbmRleGBcbiAgICogaW50byBhbiBhYnNvbHV0ZSBwb3NpdGlvbiDigJQgZm9yIGV4YW1wbGUsIHdoZW4gYnVpbGRpbmcgcmVjb25uZWN0aW9uXG4gICAqIGVuZHBvaW50cyB0aGF0IG5lZWQgdG8gaW5mb3JtIHRoZSBjbGllbnQgd2hlcmUgdGhlIHN0cmVhbSBzdGFydHMuXG4gICAqXG4gICAqIFJldHVybnMgYC0xYCB3aGVuIG5vIGNodW5rcyBoYXZlIGJlZW4gd3JpdHRlbiB5ZXQuXG4gICAqL1xuICBnZXRUYWlsSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIHdvcmtmbG93J3MgcmVhZGFibGUgc3RyZWFtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG5hbWVzcGFjZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpcGxlIHN0cmVhbXMgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSBzYW1lIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBudW1iZXIgb2YgdGhlIHN0YXJ0aW5nIGNodW5rIHRvIGJlZ2luIHJlYWRpbmcgdGhlIHN0cmVhbSBmcm9tLlxuICAgKiBOZWdhdGl2ZSB2YWx1ZXMgc3RhcnQgZnJvbSB0aGUgZW5kIChlLmcuIC0zIHJlYWRzIHRoZSBsYXN0IDMgY2h1bmtzKS5cbiAgICovXG4gIHN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGV4ZWN1dGlvblxuICAgKiBlbnZpcm9ubWVudCBpcyBwYXVzZWQgLyB0ZXJtaW5hdGVkXG4gICAqIChpLmUuIHVzaW5nIFtgd2FpdFVudGlsKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXh0ZW5kYWJsZUV2ZW50L3dhaXRVbnRpbCkgb3Igc2ltaWxhcikuXG4gICAqL1xuICBvcHM/OiBQcm9taXNlPGFueT5bXTtcbiAgLyoqXG4gICAqIFRoZSBnbG9iYWwgb2JqZWN0IHRvIHVzZSBmb3IgaHlkcmF0aW5nIHR5cGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8ge0BsaW5rIFtgZ2xvYmFsVGhpc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2dsb2JhbFRoaXMpfS5cbiAgICovXG4gIGdsb2JhbD86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGNsYXNzIGZvciBhIHdvcmtmbG93IHJ1bi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bjxUUmVzdWx0PiB7XG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogUnVuPHVua25vd24+KSB7XG4gICAgcmV0dXJuIHsgcnVuSWQ6IGluc3RhbmNlLnJ1bklkLCByZXNpbGllbnRTdGFydDogaW5zdGFuY2UuI3Jlc2lsaWVudFN0YXJ0IH07XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhOiB7XG4gICAgcnVuSWQ6IHN0cmluZztcbiAgICByZXNpbGllbnRTdGFydD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICByZXR1cm4gbmV3IFJ1bihkYXRhLnJ1bklkLCB7IHJlc2lsaWVudFN0YXJ0OiBkYXRhLnJlc2lsaWVudFN0YXJ0IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgcnVuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmxkIG9iamVjdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjd29ybGRQcm9taXNlOiBQcm9taXNlPFdvcmxkPiB8IHVuZGVmaW5lZDtcbiAgZ2V0ICNsYXp5V29ybGRQcm9taXNlKCkge1xuICAgIGlmICghdGhpcy4jd29ybGRQcm9taXNlKSB0aGlzLiN3b3JsZFByb21pc2UgPSBnZXRXb3JsZCgpO1xuICAgIHJldHVybiB0aGlzLiN3b3JsZFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGVkIGVuY3J5cHRpb24ga2V5IHJlc29sdXRpb24uIFJlc29sdmVkIG9uY2Ugb24gZmlyc3QgdXNlIGFuZFxuICAgKiByZXVzZWQgZm9yIHJldHVyblZhbHVlLCBnZXRSZWFkYWJsZSgpLCBldGMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2VuY3J5cHRpb25LZXlQcm9taXNlOiBQcm9taXNlPENyeXB0b0tleSB8IHVuZGVmaW5lZD4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBydW5fY3JlYXRlZCBmYWlsZWQgYW5kIHRoZSBydW4gbWF5IG5vdCBleGlzdCB5ZXQgKHRoZVxuICAgKiByZXNpbGllbnQgc3RhcnQgcGF0aCB3aWxsIGNyZWF0ZSBpdCB2aWEgcnVuX3N0YXJ0ZWQpLiBwb2xsUmV0dXJuVmFsdWVcbiAgICogcmV0cmllcyBvbiBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3Igb25seSB3aGVuIHRoaXMgZmxhZyBpcyBzZXQgc29cbiAgICogdGhhdCBub3JtYWwgcnVucyBmYWlsIGZhc3Qgb24gNDA0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNyZXNpbGllbnRTdGFydCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHJ1bklkOiBzdHJpbmcsIG9wdHM/OiB7IHJlc2lsaWVudFN0YXJ0PzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5ydW5JZCA9IHJ1bklkO1xuICAgIHRoaXMuI3Jlc2lsaWVudFN0YXJ0ID0gb3B0cz8ucmVzaWxpZW50U3RhcnQgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGNhY2hlcyB0aGUgZW5jcnlwdGlvbiBrZXkgZm9yIHRoaXMgcnVuLlxuICAgKiBUaGUga2V5IGlzIHRoZSBzYW1lIGZvciB0aGUgbGlmZXRpbWUgb2YgYSBydW4sIHNvIGl0IG9ubHkgbmVlZHNcbiAgICogdG8gYmUgcmVzb2x2ZWQgb25jZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjZ2V0RW5jcnlwdGlvbktleSgpOiBQcm9taXNlPENyeXB0b0tleSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy4jZW5jcnlwdGlvbktleVByb21pc2UpIHtcbiAgICAgIHRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKTtcbiAgICAgICAgY29uc3QgcmF3S2V5ID0gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bik7XG4gICAgICAgIHJldHVybiByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcbiAgICAgIH0pKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNlbmNyeXB0aW9uS2V5UHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcnJ1cHRzIHBlbmRpbmcgYHNsZWVwKClgIGNhbGxzLCByZXN1bWluZyB0aGUgd29ya2Zsb3cgZWFybHkuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgdG8gdGFyZ2V0IHNwZWNpZmljIHNsZWVwIGNhbGxzIGJ5IGNvcnJlbGF0aW9uIElELlxuICAgKiAgIElmIG5vdCBwcm92aWRlZCwgYWxsIHBlbmRpbmcgc2xlZXAgY2FsbHMgd2lsbCBiZSBpbnRlcnJ1cHRlZC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgU3RvcFNsZWVwUmVzdWx0fSBvYmplY3QgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHNsZWVwIGNhbGxzIHRoYXQgd2VyZSBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIGFzeW5jIHdha2VVcChvcHRpb25zPzogU3RvcFNsZWVwT3B0aW9ucyk6IFByb21pc2U8U3RvcFNsZWVwUmVzdWx0PiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gd2FrZVVwUnVuKGF3YWl0IHRoaXMuI2xhenlXb3JsZFByb21pc2UsIHRoaXMucnVuSWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGFzeW5jIGNhbmNlbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHRoaXMucnVuSWQsIHtcbiAgICAgIGV2ZW50VHlwZTogJ3J1bl9jYW5jZWxsZWQnLFxuICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHdvcmtmbG93IHJ1biBleGlzdHMuXG4gICAqL1xuICBnZXQgZXhpc3RzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zXG4gICAgICAgIC5nZXQodGhpcy5ydW5JZCwgeyByZXNvbHZlRGF0YTogJ25vbmUnIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yLmlzKGVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGdldCBzdGF0dXMoKTogUHJvbWlzZTxXb3JrZmxvd1J1blN0YXR1cz4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5zdGF0dXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqIFBvbGxzIHRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUgdW50aWwgaXQgaXMgY29tcGxldGVkLlxuICAgKi9cbiAgZ2V0IHJldHVyblZhbHVlKCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI3BvbGxSZXR1cm5WYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIGdldCB3b3JrZmxvd05hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4ud29ya2Zsb3dOYW1lKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBydW4gd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBnZXQgY3JlYXRlZEF0KCk6IFByb21pc2U8RGF0ZT4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5jcmVhdGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBzdGFydGVkIGV4ZWN1dGlvbi5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIHdvcmtmbG93IGhhcyBub3Qgc3RhcnRlZCB5ZXQuXG4gICAqL1xuICBnZXQgc3RhcnRlZEF0KCk6IFByb21pc2U8RGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5zdGFydGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBjb21wbGV0ZWQuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSB3b3JrZmxvdyBoYXMgbm90IGNvbXBsZXRlZCB5ZXQuXG4gICAqL1xuICBnZXQgY29tcGxldGVkQXQoKTogUHJvbWlzZTxEYXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLmNvbXBsZXRlZEF0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlYWRhYmxlIHN0cmVhbSBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0IHJlYWRhYmxlKCk6IFdvcmtmbG93UmVhZGFibGVTdHJlYW0ge1xuICAgIHJldHVybiB0aGlzLmdldFJlYWRhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB3b3JrZmxvdyBydW4ncyBkZWZhdWx0IHJlYWRhYmxlIHN0cmVhbSwgd2hpY2ggcmVhZHMgY2h1bmtzXG4gICAqIHdyaXR0ZW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcgd3JpdGFibGUgc3RyZWFtIHtAbGluayBnZXRXcml0YWJsZX0uXG4gICAqXG4gICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaGFzIGFuIGFkZGl0aW9uYWwge0BsaW5rIFdvcmtmbG93UmVhZGFibGVTdHJlYW0uZ2V0VGFpbEluZGV4IHwgZ2V0VGFpbEluZGV4KCl9XG4gICAqIGhlbHBlciB0aGF0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGtub3duIGNodW5rLiBUaGlzIGlzIHVzZWZ1bCB3aGVuXG4gICAqIGJ1aWxkaW5nIHJlY29ubmVjdGlvbiBlbmRwb2ludHMgdGhhdCBuZWVkIHRvIGluZm9ybSBjbGllbnRzIHdoZXJlIHRoZVxuICAgKiBzdHJlYW0gc3RhcnRzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgcmVhZGFibGUgc3RyZWFtLlxuICAgKiBAcmV0dXJucyBBIGBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtYCBmb3IgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGdldFJlYWRhYmxlPFIgPSBhbnk+KFxuICAgIG9wdGlvbnM6IFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zID0ge31cbiAgKTogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbTxSPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICBjb25zdCB7IG9wcyA9IFtdLCBnbG9iYWwgPSBnbG9iYWxUaGlzLCBzdGFydEluZGV4LCBuYW1lc3BhY2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbmFtZSA9IGdldFdvcmtmbG93UnVuU3RyZWFtSWQodGhpcy5ydW5JZCwgbmFtZXNwYWNlKTtcbiAgICAvLyBQYXNzIHRoZSBrZXkgYXMgYSBwcm9taXNlIOKAlCBpdCB3aWxsIGJlIHJlc29sdmVkIGxhemlseSBpbnNpZGVcbiAgICAvLyB0aGUgZmlyc3QgYXN5bmMgdHJhbnNmb3JtKCkgY2FsbCBvZiB0aGUgZGVzZXJpYWxpemUgc3RyZWFtLlxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gZ2V0RXh0ZXJuYWxSZXZpdmVycyhcbiAgICAgIGdsb2JhbCxcbiAgICAgIG9wcyxcbiAgICAgIHRoaXMucnVuSWQsXG4gICAgICBlbmNyeXB0aW9uS2V5XG4gICAgKS5SZWFkYWJsZVN0cmVhbSh7XG4gICAgICBuYW1lLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICB9KSBhcyBSZWFkYWJsZVN0cmVhbTxSPjtcblxuICAgIGNvbnN0IHdvcmxkUHJvbWlzZSA9IHRoaXMuI2xhenlXb3JsZFByb21pc2U7XG4gICAgY29uc3QgcnVuSWQgPSB0aGlzLnJ1bklkO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN0cmVhbSwge1xuICAgICAgZ2V0VGFpbEluZGV4OiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgY29uc3Qgd29ybGQgPSBhd2FpdCB3b3JsZFByb21pc2U7XG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCB3b3JsZC5zdHJlYW1zLmdldEluZm8ocnVuSWQsIG5hbWUpO1xuICAgICAgICByZXR1cm4gaW5mby50YWlsSW5kZXg7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGxzIHRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUgZXZlcnkgMSBzZWNvbmQgdW50aWwgaXQgaXMgY29tcGxldGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHJldHVybnMgVGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGFzeW5jICNwb2xsUmV0dXJuVmFsdWUoKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuXG4gICAgLy8gV2hlbiByZXNpbGllbnRTdGFydCBpcyB0cnVlLCBydW5fY3JlYXRlZCBmYWlsZWQgYW5kIHRoZSBydW4gbWF5XG4gICAgLy8gbm90IGV4aXN0IHlldC4gUmV0cnkgb24gV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIHVwIHRvIDMgdGltZXNcbiAgICAvLyAoMXMgKyAzcyArIDZzID0gMTBzIHRvdGFsKSB0byBnaXZlIHRoZSBxdWV1ZSB0aW1lIHRvIGRlbGl2ZXJcbiAgICAvLyBhbmQgdGhlIHJ1bnRpbWUgdG8gY3JlYXRlIHRoZSBydW4gdmlhIHJ1bl9zdGFydGVkLlxuICAgIC8vIFdoZW4gcmVzaWxpZW50U3RhcnQgaXMgZmFsc2UsIDQwNCBpcyBhIHJlYWwgZXJyb3Ig4oCUIGZhaWwgZmFzdC5cbiAgICBsZXQgbm90Rm91bmRSZXRyaWVzID0gMDtcbiAgICBjb25zdCBOT1RfRk9VTkRfTUFYX1JFVFJJRVMgPSB0aGlzLiNyZXNpbGllbnRTdGFydCA/IDMgOiAwO1xuICAgIGNvbnN0IE5PVF9GT1VORF9ERUxBWVMgPSBbMV8wMDAsIDNfMDAwLCA2XzAwMF07XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCk7XG5cbiAgICAgICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGF3YWl0IHRoaXMuI2dldEVuY3J5cHRpb25LZXkoKTtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUoXG4gICAgICAgICAgICBydW4ub3V0cHV0LFxuICAgICAgICAgICAgdGhpcy5ydW5JZCxcbiAgICAgICAgICAgIGVuY3J5cHRpb25LZXlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdjYW5jZWxsZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IodGhpcy5ydW5JZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnVuLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5GYWlsZWRFcnJvcih0aGlzLnJ1bklkLCBydW4uZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IodGhpcy5ydW5JZCwgcnVuLnN0YXR1cyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoV29ya2Zsb3dSdW5Ob3RDb21wbGV0ZWRFcnJvci5pcyhlcnJvcikpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxXzAwMCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IuaXMoZXJyb3IpICYmXG4gICAgICAgICAgbm90Rm91bmRSZXRyaWVzIDwgTk9UX0ZPVU5EX01BWF9SRVRSSUVTXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRlbGF5ID0gTk9UX0ZPVU5EX0RFTEFZU1tub3RGb3VuZFJldHJpZXNdITtcbiAgICAgICAgICBub3RGb3VuZFJldHJpZXMrKztcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGBSdW5gIG9iamVjdCBmb3IgYSBnaXZlbiBydW4gSUQuXG4gKlxuICogQHBhcmFtIHJ1bklkIC0gVGhlIHdvcmtmbG93IHJ1biBJRCBvYnRhaW5lZCBmcm9tIHtAbGluayBzdGFydH0uXG4gKiBAcmV0dXJucyBBIGBSdW5gIG9iamVjdC5cbiAqIEB0aHJvd3MgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIGlmIHRoZSBydW4gSUQgaXMgbm90IGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVuPFRSZXN1bHQ+KHJ1bklkOiBzdHJpbmcpOiBSdW48VFJlc3VsdD4ge1xuICByZXR1cm4gbmV3IFJ1bihydW5JZCk7XG59XG4iXX0=
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix3QkFBd0IsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsb0JBQW9CLEdBR3JCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZiwwQkFBMEIsR0FDM0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFJTCxTQUFTLEdBQ1YsTUFBTSxXQUFXLENBQUM7QUE2Q25COztHQUVHO0FBQ0gsTUFBTSxPQUFPLEdBQUc7SUFDZCxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQXNCO1FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFRCxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBRzdCO1FBQ0MsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBUztJQUVkOzs7T0FHRztJQUNILGFBQWEsQ0FBNkI7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QyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUFJLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMzQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzNELFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxJQUNFLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7b0JBQ2xDLGVBQWUsR0FBRyxxQkFBcUIsRUFDdkMsQ0FBQztvQkFDRCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUUsQ0FBQztvQkFDakQsZUFBZSxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDM0QsU0FBUztnQkFDWCxDQUFDO2dCQUNELE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFVLEtBQWE7SUFDM0MsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgV29ya2Zsb3dSdW5DYW5jZWxsZWRFcnJvcixcbiAgV29ya2Zsb3dSdW5GYWlsZWRFcnJvcixcbiAgV29ya2Zsb3dSdW5Ob3RDb21wbGV0ZWRFcnJvcixcbiAgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yLFxufSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IFdPUktGTE9XX0RFU0VSSUFMSVpFLCBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuaW1wb3J0IHtcbiAgU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gIHR5cGUgV29ya2Zsb3dSdW5TdGF0dXMsXG4gIHR5cGUgV29ybGQsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyB0eXBlIENyeXB0b0tleSwgaW1wb3J0S2V5IH0gZnJvbSAnLi4vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQge1xuICBnZXRFeHRlcm5hbFJldml2ZXJzLFxuICBoeWRyYXRlUnVuRXJyb3IsXG4gIGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlLFxufSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UnVuU3RyZWFtSWQgfSBmcm9tICcuLi91dGlsLmpzJztcbmltcG9ydCB7IGdldFdvcmxkTGF6eSB9IGZyb20gJy4vZ2V0LXdvcmxkLWxhenkuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDYW5jZWxSdW5PcHRpb25zLFxuICB0eXBlIFN0b3BTbGVlcE9wdGlvbnMsXG4gIHR5cGUgU3RvcFNsZWVwUmVzdWx0LFxuICB3YWtlVXBSdW4sXG59IGZyb20gJy4vcnVucy5qcyc7XG5cbi8qKlxuICogQSBgUmVhZGFibGVTdHJlYW1gIGV4dGVuZGVkIHdpdGggd29ya2Zsb3ctc3BlY2lmaWMgaGVscGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbTxSID0gYW55PiA9IFJlYWRhYmxlU3RyZWFtPFI+ICYge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFpbCBpbmRleCAoaW5kZXggb2YgdGhlIGxhc3Qga25vd24gY2h1bmssIDAtYmFzZWQpIG9mIHRoZVxuICAgKiB1bmRlcmx5aW5nIHdvcmtmbG93IHN0cmVhbS4gVXNlZnVsIGZvciByZXNvbHZpbmcgYSBuZWdhdGl2ZSBgc3RhcnRJbmRleGBcbiAgICogaW50byBhbiBhYnNvbHV0ZSBwb3NpdGlvbiDigJQgZm9yIGV4YW1wbGUsIHdoZW4gYnVpbGRpbmcgcmVjb25uZWN0aW9uXG4gICAqIGVuZHBvaW50cyB0aGF0IG5lZWQgdG8gaW5mb3JtIHRoZSBjbGllbnQgd2hlcmUgdGhlIHN0cmVhbSBzdGFydHMuXG4gICAqXG4gICAqIFJldHVybnMgYC0xYCB3aGVuIG5vIGNodW5rcyBoYXZlIGJlZW4gd3JpdHRlbiB5ZXQuXG4gICAqL1xuICBnZXRUYWlsSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIHdvcmtmbG93J3MgcmVhZGFibGUgc3RyZWFtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG5hbWVzcGFjZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpcGxlIHN0cmVhbXMgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSBzYW1lIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBudW1iZXIgb2YgdGhlIHN0YXJ0aW5nIGNodW5rIHRvIGJlZ2luIHJlYWRpbmcgdGhlIHN0cmVhbSBmcm9tLlxuICAgKiBOZWdhdGl2ZSB2YWx1ZXMgc3RhcnQgZnJvbSB0aGUgZW5kIChlLmcuIC0zIHJlYWRzIHRoZSBsYXN0IDMgY2h1bmtzKS5cbiAgICovXG4gIHN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGV4ZWN1dGlvblxuICAgKiBlbnZpcm9ubWVudCBpcyBwYXVzZWQgLyB0ZXJtaW5hdGVkXG4gICAqIChpLmUuIHVzaW5nIFtgd2FpdFVudGlsKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXh0ZW5kYWJsZUV2ZW50L3dhaXRVbnRpbCkgb3Igc2ltaWxhcikuXG4gICAqL1xuICBvcHM/OiBQcm9taXNlPGFueT5bXTtcbiAgLyoqXG4gICAqIFRoZSBnbG9iYWwgb2JqZWN0IHRvIHVzZSBmb3IgaHlkcmF0aW5nIHR5cGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8ge0BsaW5rIFtgZ2xvYmFsVGhpc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2dsb2JhbFRoaXMpfS5cbiAgICovXG4gIGdsb2JhbD86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGNsYXNzIGZvciBhIHdvcmtmbG93IHJ1bi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bjxUUmVzdWx0PiB7XG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogUnVuPHVua25vd24+KSB7XG4gICAgcmV0dXJuIHsgcnVuSWQ6IGluc3RhbmNlLnJ1bklkLCByZXNpbGllbnRTdGFydDogaW5zdGFuY2UuI3Jlc2lsaWVudFN0YXJ0IH07XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhOiB7XG4gICAgcnVuSWQ6IHN0cmluZztcbiAgICByZXNpbGllbnRTdGFydD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICByZXR1cm4gbmV3IFJ1bihkYXRhLnJ1bklkLCB7IHJlc2lsaWVudFN0YXJ0OiBkYXRhLnJlc2lsaWVudFN0YXJ0IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgcnVuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmxkIG9iamVjdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjd29ybGRQcm9taXNlOiBQcm9taXNlPFdvcmxkPiB8IHVuZGVmaW5lZDtcbiAgZ2V0ICNsYXp5V29ybGRQcm9taXNlKCkge1xuICAgIGlmICghdGhpcy4jd29ybGRQcm9taXNlKSB0aGlzLiN3b3JsZFByb21pc2UgPSBnZXRXb3JsZExhenkoKTtcbiAgICByZXR1cm4gdGhpcy4jd29ybGRQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2hlZCBlbmNyeXB0aW9uIGtleSByZXNvbHV0aW9uLiBSZXNvbHZlZCBvbmNlIG9uIGZpcnN0IHVzZSBhbmRcbiAgICogcmV1c2VkIGZvciByZXR1cm5WYWx1ZSwgZ2V0UmVhZGFibGUoKSwgZXRjLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNlbmNyeXB0aW9uS2V5UHJvbWlzZTogUHJvbWlzZTxDcnlwdG9LZXkgfCB1bmRlZmluZWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgcnVuX2NyZWF0ZWQgZmFpbGVkIGFuZCB0aGUgcnVuIG1heSBub3QgZXhpc3QgeWV0ICh0aGVcbiAgICogcmVzaWxpZW50IHN0YXJ0IHBhdGggd2lsbCBjcmVhdGUgaXQgdmlhIHJ1bl9zdGFydGVkKS4gcG9sbFJldHVyblZhbHVlXG4gICAqIHJldHJpZXMgb24gV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIG9ubHkgd2hlbiB0aGlzIGZsYWcgaXMgc2V0IHNvXG4gICAqIHRoYXQgbm9ybWFsIHJ1bnMgZmFpbCBmYXN0IG9uIDQwNC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjcmVzaWxpZW50U3RhcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihydW5JZDogc3RyaW5nLCBvcHRzPzogeyByZXNpbGllbnRTdGFydD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMucnVuSWQgPSBydW5JZDtcbiAgICB0aGlzLiNyZXNpbGllbnRTdGFydCA9IG9wdHM/LnJlc2lsaWVudFN0YXJ0ID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuZCBjYWNoZXMgdGhlIGVuY3J5cHRpb24ga2V5IGZvciB0aGlzIHJ1bi5cbiAgICogVGhlIGtleSBpcyB0aGUgc2FtZSBmb3IgdGhlIGxpZmV0aW1lIG9mIGEgcnVuLCBzbyBpdCBvbmx5IG5lZWRzXG4gICAqIHRvIGJlIHJlc29sdmVkIG9uY2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2dldEVuY3J5cHRpb25LZXkoKTogUHJvbWlzZTxDcnlwdG9LZXkgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlKSB7XG4gICAgICB0aGlzLiNlbmNyeXB0aW9uS2V5UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCk7XG4gICAgICAgIGNvbnN0IHJhd0tleSA9IGF3YWl0IHdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4/LihydW4pO1xuICAgICAgICByZXR1cm4gcmF3S2V5ID8gYXdhaXQgaW1wb3J0S2V5KHJhd0tleSkgOiB1bmRlZmluZWQ7XG4gICAgICB9KSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jZW5jcnlwdGlvbktleVByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogRGVmZXIgZmV0Y2hpbmcgdGhlIHJ1biBhbmQgaXRzIGVuY3J5cHRpb24ga2V5IHVudGlsIHNlcmlhbGl6ZWQgc3RyZWFtIGRhdGFcbiAgICogaXMgYWN0dWFsbHkgcmVhZC4gQW4gZW1wdHkgb3IgbWV0YWRhdGEtb25seSBzdHJlYW0gbXVzdCBub3Qgc3RhcnQgYW5cbiAgICogdW5vYnNlcnZlZCBydW4gbG9va3VwLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNnZXRFbmNyeXB0aW9uS2V5TGF6aWx5KCk6ICgpID0+IFByb21pc2U8Q3J5cHRvS2V5IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuICgpID0+IHRoaXMuI2dldEVuY3J5cHRpb25LZXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcnJ1cHRzIHBlbmRpbmcgYHNsZWVwKClgIGNhbGxzLCByZXN1bWluZyB0aGUgd29ya2Zsb3cgZWFybHkuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgc2V0dGluZ3MgdG8gdGFyZ2V0IHNwZWNpZmljIHNsZWVwIGNhbGxzIGJ5IGNvcnJlbGF0aW9uIElELlxuICAgKiAgIElmIG5vdCBwcm92aWRlZCwgYWxsIHBlbmRpbmcgc2xlZXAgY2FsbHMgd2lsbCBiZSBpbnRlcnJ1cHRlZC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgU3RvcFNsZWVwUmVzdWx0fSBvYmplY3QgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIHNsZWVwIGNhbGxzIHRoYXQgd2VyZSBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIGFzeW5jIHdha2VVcChvcHRpb25zPzogU3RvcFNsZWVwT3B0aW9ucyk6IFByb21pc2U8U3RvcFNsZWVwUmVzdWx0PiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gd2FrZVVwUnVuKGF3YWl0IHRoaXMuI2xhenlXb3JsZFByb21pc2UsIHRoaXMucnVuSWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjYW5jZWxsYXRpb24gc2V0dGluZ3MuIGBjYW5jZWxSZWFzb25gIHJlY29yZHMgYVxuICAgKiAgIGZyZWUtdGV4dCByZWFzb24gKG1heCA1MTIgY2hhcnMpIG9uIHRoZSBydW5fY2FuY2VsbGVkIGV2ZW50LCBzdXJmYWNlZCBpblxuICAgKiAgIHRoZSBydW4gZGV0YWlsIHZpZXcuXG4gICAqL1xuICBhc3luYyBjYW5jZWwob3B0aW9ucz86IENhbmNlbFJ1bk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHRoaXMucnVuSWQsIHtcbiAgICAgIGV2ZW50VHlwZTogJ3J1bl9jYW5jZWxsZWQnLFxuICAgICAgc3BlY1ZlcnNpb246IFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICAgICAgLi4uKG9wdGlvbnM/LmNhbmNlbFJlYXNvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBldmVudERhdGE6IHsgY2FuY2VsUmVhc29uOiBvcHRpb25zLmNhbmNlbFJlYXNvbiB9IH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgd29ya2Zsb3cgcnVuIGV4aXN0cy5cbiAgICovXG4gIGdldCBleGlzdHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnNcbiAgICAgICAgLmdldCh0aGlzLnJ1bklkLCB7IHJlc29sdmVEYXRhOiAnbm9uZScgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IuaXMoZXJyb3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0IHN0YXR1cygpOiBQcm9taXNlPFdvcmtmbG93UnVuU3RhdHVzPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLnN0YXR1cylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICogUG9sbHMgdGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZSB1bnRpbCBpdCBpcyBjb21wbGV0ZWQuXG4gICAqL1xuICBnZXQgcmV0dXJuVmFsdWUoKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jcG9sbFJldHVyblZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtmbG93LlxuICAgKi9cbiAgZ2V0IHdvcmtmbG93TmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi53b3JrZmxvd05hbWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biB3YXMgY3JlYXRlZC5cbiAgICovXG4gIGdldCBjcmVhdGVkQXQoKTogUHJvbWlzZTxEYXRlPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLmNyZWF0ZWRBdClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgd29ya2Zsb3cgcnVuIHN0YXJ0ZWQgZXhlY3V0aW9uLlxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgd29ya2Zsb3cgaGFzIG5vdCBzdGFydGVkIHlldC5cbiAgICovXG4gIGdldCBzdGFydGVkQXQoKTogUHJvbWlzZTxEYXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLnN0YXJ0ZWRBdClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgd29ya2Zsb3cgcnVuIGNvbXBsZXRlZC5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIHdvcmtmbG93IGhhcyBub3QgY29tcGxldGVkIHlldC5cbiAgICovXG4gIGdldCBjb21wbGV0ZWRBdCgpOiBQcm9taXNlPERhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4uY29tcGxldGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVhZGFibGUgc3RyZWFtIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBnZXQgcmVhZGFibGUoKTogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVhZGFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHdvcmtmbG93IHJ1bidzIGRlZmF1bHQgcmVhZGFibGUgc3RyZWFtLCB3aGljaCByZWFkcyBjaHVua3NcbiAgICogd3JpdHRlbiB0byB0aGUgY29ycmVzcG9uZGluZyB3cml0YWJsZSBzdHJlYW0ge0BsaW5rIGdldFdyaXRhYmxlfS5cbiAgICpcbiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBoYXMgYW4gYWRkaXRpb25hbCB7QGxpbmsgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbS5nZXRUYWlsSW5kZXggfCBnZXRUYWlsSW5kZXgoKX1cbiAgICogaGVscGVyIHRoYXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qga25vd24gY2h1bmsuIFRoaXMgaXMgdXNlZnVsIHdoZW5cbiAgICogYnVpbGRpbmcgcmVjb25uZWN0aW9uIGVuZHBvaW50cyB0aGF0IG5lZWQgdG8gaW5mb3JtIGNsaWVudHMgd2hlcmUgdGhlXG4gICAqIHN0cmVhbSBzdGFydHMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSByZWFkYWJsZSBzdHJlYW0uXG4gICAqIEByZXR1cm5zIEEgYFdvcmtmbG93UmVhZGFibGVTdHJlYW1gIGZvciB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0UmVhZGFibGU8UiA9IGFueT4oXG4gICAgb3B0aW9uczogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbU9wdGlvbnMgPSB7fVxuICApOiBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtPFI+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIGNvbnN0IHsgb3BzID0gW10sIGdsb2JhbCA9IGdsb2JhbFRoaXMsIHN0YXJ0SW5kZXgsIG5hbWVzcGFjZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBuYW1lID0gZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCh0aGlzLnJ1bklkLCBuYW1lc3BhY2UpO1xuICAgIC8vIFRoZSByZXNvbHZlciBzdGFydHMgb25seSB3aGVuIHRoZSBkZXNlcmlhbGl6ZSBzdHJlYW0gc2VlcyBpdHMgZmlyc3RcbiAgICAvLyBjaHVuaywgc28gY3JlYXRpbmcgb3IgcHJvYmluZyBhbiBlbXB0eSBzdHJlYW0gY2Fubm90IHJlamVjdCBpbiB0aGVcbiAgICAvLyBiYWNrZ3JvdW5kLlxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5TGF6aWx5KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gZ2V0RXh0ZXJuYWxSZXZpdmVycyhnbG9iYWwsIG9wcywgdGhpcy5ydW5JZCwgZW5jcnlwdGlvbktleSlcbiAgICAgIC5SZWFkYWJsZVN0cmVhbSEoe1xuICAgICAgbmFtZSxcbiAgICAgIHN0YXJ0SW5kZXgsXG4gICAgfSkgYXMgUmVhZGFibGVTdHJlYW08Uj47XG5cbiAgICBjb25zdCB3b3JsZFByb21pc2UgPSB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuICAgIGNvbnN0IHJ1bklkID0gdGhpcy5ydW5JZDtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdHJlYW0sIHtcbiAgICAgIGdldFRhaWxJbmRleDogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgd29ybGRQcm9taXNlO1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgd29ybGQuc3RyZWFtcy5nZXRJbmZvKHJ1bklkLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuIGluZm8udGFpbEluZGV4O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xscyB0aGUgd29ya2Zsb3cgcmV0dXJuIHZhbHVlIGV2ZXJ5IDEgc2Vjb25kIHVudGlsIGl0IGlzIGNvbXBsZXRlZC5cbiAgICogQGludGVybmFsXG4gICAqIEByZXR1cm5zIFRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBhc3luYyAjcG9sbFJldHVyblZhbHVlKCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcblxuICAgIC8vIFdoZW4gcmVzaWxpZW50U3RhcnQgaXMgdHJ1ZSwgcnVuX2NyZWF0ZWQgZmFpbGVkIGFuZCB0aGUgcnVuIG1heVxuICAgIC8vIG5vdCBleGlzdCB5ZXQuIFJldHJ5IG9uIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciB1cCB0byAzIHRpbWVzXG4gICAgLy8gKDFzICsgM3MgKyA2cyA9IDEwcyB0b3RhbCkgdG8gZ2l2ZSB0aGUgcXVldWUgdGltZSB0byBkZWxpdmVyXG4gICAgLy8gYW5kIHRoZSBydW50aW1lIHRvIGNyZWF0ZSB0aGUgcnVuIHZpYSBydW5fc3RhcnRlZC5cbiAgICAvLyBXaGVuIHJlc2lsaWVudFN0YXJ0IGlzIGZhbHNlLCA0MDQgaXMgYSByZWFsIGVycm9yIOKAlCBmYWlsIGZhc3QuXG4gICAgbGV0IG5vdEZvdW5kUmV0cmllcyA9IDA7XG4gICAgY29uc3QgTk9UX0ZPVU5EX01BWF9SRVRSSUVTID0gdGhpcy4jcmVzaWxpZW50U3RhcnQgPyAzIDogMDtcbiAgICBjb25zdCBOT1RfRk9VTkRfREVMQVlTID0gWzFfMDAwLCAzXzAwMCwgNl8wMDBdO1xuXG4gICAgLy8gTk9URTogd2hlbiB0aGlzIHBvbGwgcnVucyBpbnNpZGUgYSBzdGVwIChlLmcuIHRoZSBzdGVwIHRoYXQgYSBwYXJlbnRcbiAgICAvLyB3b3JrZmxvdyB1c2VzIHRvIGF3YWl0IGEgY2hpbGQgd29ya2Zsb3cncyBgcmV0dXJuVmFsdWVgKSwgaXQgYmxvY2tzXG4gICAgLy8gYSBxdWV1ZSB3b3JrZXIgc2xvdCBmb3IgYXMgbG9uZyBhcyB0aGUgY2hpbGQgcnVuIHRha2VzIHRvIGZpbmlzaC5cbiAgICAvLyBXb3JrZXItYmFzZWQgd29ybGRzIGxpa2UgYHdvcmxkLXBvc3RncmVzYCBtdXN0IGJlIHNpemVkIHRvIGNvdmVyIHRoZVxuICAgIC8vIHBlYWsgbnVtYmVyIG9mIHN1Y2ggcG9sbHMgaW4gZmxpZ2h0IOKAlCBzZWUgdGhlIGBxdWV1ZUNvbmN1cnJlbmN5YFxuICAgIC8vIGRlZmF1bHQgb24gdGhlIFBvc3RncmVzIHdvcmxkIGFuZCB0aGUgbm90ZXMgaW4gdGhlIGVhZ2VyLXByb2Nlc3NpbmdcbiAgICAvLyBjaGFuZ2Vsb2cgZm9yIGRldGFpbHMuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpO1xuXG4gICAgICAgIGlmIChydW4uc3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBhd2FpdCB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5KCk7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlKFxuICAgICAgICAgICAgcnVuLm91dHB1dCxcbiAgICAgICAgICAgIHRoaXMucnVuSWQsXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChydW4uc3RhdHVzID09PSAnY2FuY2VsbGVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yKHRoaXMucnVuSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgICAgLy8gSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCBydW4gZXJyb3Igc28gdGhlIG9yaWdpbmFsIHRocm93biB2YWx1ZVxuICAgICAgICAgIC8vICh3aXRoIGl0cyB0eXBlIGlkZW50aXR5LCBjYXVzZSBjaGFpbiwgZXRjLikgaXMgc2V0IGFzIHRoZVxuICAgICAgICAgIC8vIGBjYXVzZWAgb24gV29ya2Zsb3dSdW5GYWlsZWRFcnJvci5cbiAgICAgICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gYXdhaXQgdGhpcy4jZ2V0RW5jcnlwdGlvbktleSgpO1xuICAgICAgICAgIGxldCBoeWRyYXRlZEVycm9yOiB1bmtub3duO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBoeWRyYXRlZEVycm9yID0gYXdhaXQgaHlkcmF0ZVJ1bkVycm9yKFxuICAgICAgICAgICAgICBydW4uZXJyb3IsXG4gICAgICAgICAgICAgIHRoaXMucnVuSWQsXG4gICAgICAgICAgICAgIGVuY3J5cHRpb25LZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBJZiBoeWRyYXRpb24gZmFpbHMsIHN1cmZhY2UgYSBnZW5lcmljIGZhbGxiYWNrIHJhdGhlciB0aGFuXG4gICAgICAgICAgICAvLyBsZWF2aW5nIHRoZSB1c2VyIHdpdGggYSByYXcgVWludDhBcnJheS4gVGhlIHJ1bidzIGVycm9yQ29kZVxuICAgICAgICAgICAgLy8gaXMgc3RpbGwgcHJlc2VydmVkIG9uIHRoZSB0aHJvd24gV29ya2Zsb3dSdW5GYWlsZWRFcnJvci5cbiAgICAgICAgICAgIGh5ZHJhdGVkRXJyb3IgPSBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBoeWRyYXRlIHdvcmtmbG93IHJ1biBlcnJvcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5GYWlsZWRFcnJvcih0aGlzLnJ1bklkLCBoeWRyYXRlZEVycm9yLCB7XG4gICAgICAgICAgICBlcnJvckNvZGU6IHJ1bi5lcnJvckNvZGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSdW4gbm90IGNvbXBsZXRlZCB5ZXQg4oCUIHNsZWVwIGFuZCBwb2xsIGFnYWluLlxuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5Ob3RDb21wbGV0ZWRFcnJvcih0aGlzLnJ1bklkLCBydW4uc3RhdHVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLmlzKGVycm9yKSkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDFfMDAwKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvci5pcyhlcnJvcikgJiZcbiAgICAgICAgICBub3RGb3VuZFJldHJpZXMgPCBOT1RfRk9VTkRfTUFYX1JFVFJJRVNcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGVsYXkgPSBOT1RfRk9VTkRfREVMQVlTW25vdEZvdW5kUmV0cmllc10hO1xuICAgICAgICAgIG5vdEZvdW5kUmV0cmllcysrO1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgYFJ1bmAgb2JqZWN0IGZvciBhIGdpdmVuIHJ1biBJRC5cbiAqXG4gKiBAcGFyYW0gcnVuSWQgLSBUaGUgd29ya2Zsb3cgcnVuIElEIG9idGFpbmVkIGZyb20ge0BsaW5rIHN0YXJ0fS5cbiAqIEByZXR1cm5zIEEgYFJ1bmAgb2JqZWN0LlxuICogQHRocm93cyBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IgaWYgdGhlIHJ1biBJRCBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdW48VFJlc3VsdD4ocnVuSWQ6IHN0cmluZyk6IFJ1bjxUUmVzdWx0PiB7XG4gIHJldHVybiBuZXcgUnVuKHJ1bklkKTtcbn1cbiJdfQ==
@@ -2,6 +2,15 @@ import { type World } from '@workflow/world';
2
2
  export interface RecreateRunOptions {
3
3
  deploymentId?: string;
4
4
  specVersion?: number;
5
+ /**
6
+ * Queue namespace of the target deployment (e.g. `'eve'` for topics like
7
+ * `__eve_wkf_workflow_*`). Falls back to `WORKFLOW_QUEUE_NAMESPACE` in
8
+ * the calling process. Cross-context callers (e.g. the observability
9
+ * dashboard) must pass the target deployment's namespace explicitly —
10
+ * a run enqueued to a topic the target deployment has no consumer for
11
+ * is never picked up.
12
+ */
13
+ namespace?: string;
5
14
  }
6
15
  export interface StopSleepResult {
7
16
  /** Number of pending sleeps that were stopped */
@@ -21,6 +30,28 @@ export interface StopSleepOptions {
21
30
  * If not provided, all pending sleep calls will be interrupted.
22
31
  */
23
32
  correlationIds?: string[];
33
+ /**
34
+ * Queue namespace of the run's deployment (e.g. `'eve'`), used when
35
+ * re-enqueueing the run after completing its waits. Falls back to
36
+ * `WORKFLOW_QUEUE_NAMESPACE` in the calling process. Cross-context
37
+ * callers (e.g. the observability dashboard) must pass it explicitly.
38
+ */
39
+ namespace?: string;
40
+ }
41
+ export interface ReenqueueRunOptions {
42
+ /**
43
+ * Queue namespace of the run's deployment (e.g. `'eve'`). Falls back to
44
+ * `WORKFLOW_QUEUE_NAMESPACE` in the calling process. Cross-context
45
+ * callers (e.g. the observability dashboard) must pass it explicitly.
46
+ */
47
+ namespace?: string;
48
+ }
49
+ export interface CancelRunOptions {
50
+ /**
51
+ * Optional free-text reason for the cancellation (max 512 chars), recorded
52
+ * on the run_cancelled event and surfaced in the run detail view.
53
+ */
54
+ cancelReason?: string;
24
55
  }
25
56
  /**
26
57
  * Start a new workflow run based on an existing run.
@@ -28,12 +59,15 @@ export interface StopSleepOptions {
28
59
  export declare function recreateRunFromExisting(world: World, runId: string, options?: RecreateRunOptions): Promise<string>;
29
60
  /**
30
61
  * Cancel a workflow run.
62
+ *
63
+ * @param options - Optional cancellation settings. `cancelReason` records a
64
+ * free-text reason (max 512 chars) on the run_cancelled event.
31
65
  */
32
- export declare function cancelRun(world: World, runId: string): Promise<void>;
66
+ export declare function cancelRun(world: World, runId: string, options?: CancelRunOptions): Promise<void>;
33
67
  /**
34
68
  * Re-enqueue a workflow run.
35
69
  */
36
- export declare function reenqueueRun(world: World, runId: string): Promise<void>;
70
+ export declare function reenqueueRun(world: World, runId: string, options?: ReenqueueRunOptions): Promise<void>;
37
71
  /**
38
72
  * Wake up a workflow run by interrupting pending sleep() calls.
39
73
  */
@@ -1 +1 @@
1
- {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/runtime/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB1E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAiG1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CASrC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB"}
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/runtime/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAoG1B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CASrC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB"}
@@ -22,6 +22,8 @@ export async function recreateRunFromExisting(world, runId, options = {}) {
22
22
  deploymentId,
23
23
  world,
24
24
  specVersion,
25
+ replayedFromRunId: runId,
26
+ namespace: options.namespace,
25
27
  });
26
28
  return newRun.runId;
27
29
  }
@@ -31,17 +33,23 @@ export async function recreateRunFromExisting(world, runId, options = {}) {
31
33
  }
32
34
  /**
33
35
  * Cancel a workflow run.
36
+ *
37
+ * @param options - Optional cancellation settings. `cancelReason` records a
38
+ * free-text reason (max 512 chars) on the run_cancelled event.
34
39
  */
35
- export async function cancelRun(world, runId) {
40
+ export async function cancelRun(world, runId, options) {
36
41
  try {
37
42
  const run = await world.runs.get(runId, { resolveData: 'none' });
38
43
  const specVersion = run.specVersion ?? SPEC_VERSION_LEGACY;
39
44
  const compatMode = isLegacySpecVersion(specVersion);
40
- const eventData = {
45
+ const eventRequest = {
41
46
  eventType: 'run_cancelled',
42
47
  specVersion,
48
+ ...(options?.cancelReason !== undefined
49
+ ? { eventData: { cancelReason: options.cancelReason } }
50
+ : {}),
43
51
  };
44
- await world.events.create(runId, eventData, { v1Compat: compatMode });
52
+ await world.events.create(runId, eventRequest, { v1Compat: compatMode });
45
53
  }
46
54
  catch (err) {
47
55
  throw new Error(`Failed to cancel run ${runId}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
@@ -50,10 +58,10 @@ export async function cancelRun(world, runId) {
50
58
  /**
51
59
  * Re-enqueue a workflow run.
52
60
  */
53
- export async function reenqueueRun(world, runId) {
61
+ export async function reenqueueRun(world, runId, options) {
54
62
  try {
55
63
  const run = await world.runs.get(runId, { resolveData: 'none' });
56
- await world.queue(getWorkflowQueueName(run.workflowName), {
64
+ await world.queue(getWorkflowQueueName(run.workflowName, options?.namespace), {
57
65
  runId,
58
66
  }, {
59
67
  deploymentId: run.deploymentId,
@@ -107,6 +115,9 @@ export async function wakeUpRun(world, runId, options) {
107
115
  eventType: 'wait_completed',
108
116
  correlationId: waitEvent.correlationId,
109
117
  specVersion: run.specVersion,
118
+ eventData: {
119
+ resumeAt: waitEvent.eventData.resumeAt,
120
+ },
110
121
  };
111
122
  try {
112
123
  await world.events.create(runId, eventData, { v1Compat: compatMode });
@@ -122,7 +133,7 @@ export async function wakeUpRun(world, runId, options) {
122
133
  }
123
134
  }
124
135
  if (stoppedCount > 0) {
125
- await world.queue(getWorkflowQueueName(run.workflowName), {
136
+ await world.queue(getWorkflowQueueName(run.workflowName, options?.namespace), {
126
137
  runId,
127
138
  }, {
128
139
  deploymentId: run.deploymentId,
@@ -164,4 +175,4 @@ export async function listStreams(world, runId) {
164
175
  throw new Error(`Failed to list streams for run ${runId}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
165
176
  }
166
177
  }
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3J1bnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixtQkFBbUIsR0FFcEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE2Qm5DLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFhLEVBQWEsRUFBRTtJQUN6RCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLEtBQVksRUFDWixLQUFhLEVBQ2IsVUFBOEIsRUFBRTtJQUVoQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25F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TUFBTSxJQUFJLEtBQUssQ0FDYixrQ0FBa0MsS0FBSyxLQUFLLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUM5RixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FDZixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlDb25mbGljdEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQge1xuICB0eXBlIEV2ZW50LFxuICBpc0xlZ2FjeVNwZWNWZXJzaW9uLFxuICBTUEVDX1ZFUlNJT05fTEVHQUNZLFxuICB0eXBlIFdvcmxkLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgaW1wb3J0S2V5IH0gZnJvbSAnLi4vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dBcmd1bWVudHMgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UXVldWVOYW1lIH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IHN0YXJ0IH0gZnJvbSAnLi9zdGFydC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjcmVhdGVSdW5PcHRpb25zIHtcbiAgZGVwbG95bWVudElkPzogc3RyaW5nO1xuICBzcGVjVmVyc2lvbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9wU2xlZXBSZXN1bHQge1xuICAvKiogTnVtYmVyIG9mIHBlbmRpbmcgc2xlZXBzIHRoYXQgd2VyZSBzdG9wcGVkICovXG4gIHN0b3BwZWRDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRTdHJlYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCB0byBzdGFydCByZWFkaW5nIGZyb20uIERlZmF1bHRzIHRvIDAuXG4gICAqIE5lZ2F0aXZlIHZhbHVlcyBzdGFydCBmcm9tIHRoZSBlbmQgKGUuZy4gLTMgcmVhZHMgdGhlIGxhc3QgMyBjaHVua3MpLlxuICAgKi9cbiAgc3RhcnRJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9wU2xlZXBPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGxpc3Qgb2Ygc3BlY2lmaWMgY29ycmVsYXRpb24gSURzIHRvIHRhcmdldC5cbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgdGhlc2Ugc2xlZXAgY2FsbHMgd2lsbCBiZSBpbnRlcnJ1cHRlZC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgcGVuZGluZyBzbGVlcCBjYWxscyB3aWxsIGJlIGludGVycnVwdGVkLlxuICAgKi9cbiAgY29ycmVsYXRpb25JZHM/OiBzdHJpbmdbXTtcbn1cblxuY29uc3Qgbm9ybWFsaXplV29ya2Zsb3dBcmdzID0gKGFyZ3M6IHVua25vd24pOiB1bmtub3duW10gPT4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbYXJnc107XG59O1xuXG4vKipcbiAqIFN0YXJ0IGEgbmV3IHdvcmtmbG93IHJ1biBiYXNlZCBvbiBhbiBleGlzdGluZyBydW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNyZWF0ZVJ1bkZyb21FeGlzdGluZyhcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5JZDogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNyZWF0ZVJ1bk9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ2FsbCcgfSk7XG4gICAgY29uc3QgcmF3S2V5ID0gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bik7XG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IHJhd0tleSA/IGF3YWl0IGltcG9ydEtleShyYXdLZXkpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHdvcmtmbG93QXJncyA9IG5vcm1hbGl6ZVdvcmtmbG93QXJncyhcbiAgICAgIGF3YWl0IGh5ZHJhdGVXb3JrZmxvd0FyZ3VtZW50cyhcbiAgICAgICAgcnVuLmlucHV0LFxuICAgICAgICBydW5JZCxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZ2xvYmFsVGhpc1xuICAgICAgKVxuICAgICk7XG4gICAgY29uc3Qgc3BlY1ZlcnNpb24gPVxuICAgICAgb3B0aW9ucy5zcGVjVmVyc2lvbiA/PyBydW4uc3BlY1ZlcnNpb24gPz8gU1BFQ19WRVJTSU9OX0xFR0FDWTtcbiAgICBjb25zdCBkZXBsb3ltZW50SWQgPSBvcHRpb25zLmRlcGxveW1lbnRJZCA/PyBydW4uZGVwbG95bWVudElkO1xuXG4gICAgY29uc3QgbmV3UnVuID0gYXdhaXQgc3RhcnQoXG4gICAgICB7IHdvcmtmbG93SWQ6IHJ1bi53b3JrZmxvd05hbWUgfSxcbiAgICAgIHdvcmtmbG93QXJncyBhcyB1bmtub3duW10sXG4gICAgICB7XG4gICAgICAgIGRlcGxveW1lbnRJZCxcbiAgICAgICAgd29ybGQsXG4gICAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIG5ld1J1bi5ydW5JZDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byByZWNyZWF0ZSBydW4gZnJvbSAke3J1bklkfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIENhbmNlbCBhIHdvcmtmbG93IHJ1bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhbmNlbFJ1bih3b3JsZDogV29ybGQsIHJ1bklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ25vbmUnIH0pO1xuICAgIGNvbnN0IHNwZWNWZXJzaW9uID0gcnVuLnNwZWNWZXJzaW9uID8/IFNQRUNfVkVSU0lPTl9MRUdBQ1k7XG4gICAgY29uc3QgY29tcGF0TW9kZSA9IGlzTGVnYWN5U3BlY1ZlcnNpb24oc3BlY1ZlcnNpb24pO1xuICAgIGNvbnN0IGV2ZW50RGF0YSA9IHtcbiAgICAgIGV2ZW50VHlwZTogJ3J1bl9jYW5jZWxsZWQnIGFzIGNvbnN0LFxuICAgICAgc3BlY1ZlcnNpb24sXG4gICAgfTtcbiAgICBhd2FpdCB3b3JsZC5ldmVudHMuY3JlYXRlKHJ1bklkLCBldmVudERhdGEsIHsgdjFDb21wYXQ6IGNvbXBhdE1vZGUgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gY2FuY2VsIHJ1biAke3J1bklkfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlLWVucXVldWUgYSB3b3JrZmxvdyBydW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWVucXVldWVSdW4od29ybGQ6IFdvcmxkLCBydW5JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQocnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdub25lJyB9KTtcbiAgICBhd2FpdCB3b3JsZC5xdWV1ZShcbiAgICAgIGdldFdvcmtmbG93UXVldWVOYW1lKHJ1bi53b3JrZmxvd05hbWUpLFxuICAgICAge1xuICAgICAgICBydW5JZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRlcGxveW1lbnRJZDogcnVuLmRlcGxveW1lbnRJZCxcbiAgICAgICAgc3BlY1ZlcnNpb246IHJ1bi5zcGVjVmVyc2lvbiA/PyBTUEVDX1ZFUlNJT05fTEVHQUNZLFxuICAgICAgfVxuICAgICk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gcmUtZW5xdWV1ZSBydW4gJHtydW5JZH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICB7IGNhdXNlOiBlcnIgfVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYWtlIHVwIGEgd29ya2Zsb3cgcnVuIGJ5IGludGVycnVwdGluZyBwZW5kaW5nIHNsZWVwKCkgY2FsbHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWtlVXBSdW4oXG4gIHdvcmxkOiBXb3JsZCxcbiAgcnVuSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IFN0b3BTbGVlcE9wdGlvbnNcbik6IFByb21pc2U8U3RvcFNsZWVwUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQocnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdub25lJyB9KTtcbiAgICBjb25zdCBjb21wYXRNb2RlID0gaXNMZWdhY3lTcGVjVmVyc2lvbihydW4uc3BlY1ZlcnNpb24pO1xuXG4gICAgLy8gUGFnaW5hdGUgdGhyb3VnaCBhbGwgZXZlbnRzIHRvIGVuc3VyZSB3ZSBkb24ndCBtaXNzIGFueSBzbGVlcHNcbiAgICAvLyBpbiBsb25nLXJ1bm5pbmcgd29ya2Zsb3dzIHdpdGggbW9yZSB0aGFuIDEwMDAgZXZlbnRzLlxuICAgIGNvbnN0IGFsbEV2ZW50czogRXZlbnRbXSA9IFtdO1xuICAgIGxldCBjdXJzb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IGV2ZW50c1Jlc3VsdCA9IGF3YWl0IHdvcmxkLmV2ZW50cy5saXN0KHtcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHBhZ2luYXRpb246IHsgbGltaXQ6IDEwMDAsIC4uLihjdXJzb3IgPyB7IGN1cnNvciB9IDoge30pIH0sXG4gICAgICAgIHJlc29sdmVEYXRhOiAnbm9uZScsXG4gICAgICB9KTtcbiAgICAgIGFsbEV2ZW50cy5wdXNoKC4uLmV2ZW50c1Jlc3VsdC5kYXRhKTtcbiAgICAgIGN1cnNvciA9IGV2ZW50c1Jlc3VsdC5oYXNNb3JlID8gZXZlbnRzUmVzdWx0LmN1cnNvciA6IG51bGw7XG4gICAgfSB3aGlsZSAoY3Vyc29yKTtcblxuICAgIGNvbnN0IHdhaXRDcmVhdGVkRXZlbnRzID0gYWxsRXZlbnRzLmZpbHRlcihcbiAgICAgIChldmVudDogRXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCdcbiAgICApO1xuICAgIGNvbnN0IHdhaXRDb21wbGV0ZWRDb3JyZWxhdGlvbklkcyA9IG5ldyBTZXQoXG4gICAgICBhbGxFdmVudHNcbiAgICAgICAgLmZpbHRlcigoZXZlbnQ6IEV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCcpXG4gICAgICAgIC5tYXAoKGV2ZW50OiBFdmVudCkgPT4gZXZlbnQuY29ycmVsYXRpb25JZClcbiAgICApO1xuXG4gICAgbGV0IHBlbmRpbmdXYWl0cyA9IHdhaXRDcmVhdGVkRXZlbnRzLmZpbHRlcihcbiAgICAgIChldmVudDogRXZlbnQpID0+ICF3YWl0Q29tcGxldGVkQ29ycmVsYXRpb25JZHMuaGFzKGV2ZW50LmNvcnJlbGF0aW9uSWQpXG4gICAgKTtcblxuICAgIGlmIChvcHRpb25zPy5jb3JyZWxhdGlvbklkcyAmJiBvcHRpb25zLmNvcnJlbGF0aW9uSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhcmdldENvcnJlbGF0aW9uSWRzID0gbmV3IFNldChvcHRpb25zLmNvcnJlbGF0aW9uSWRzKTtcbiAgICAgIHBlbmRpbmdXYWl0cyA9IHBlbmRpbmdXYWl0cy5maWx0ZXIoXG4gICAgICAgIChldmVudDogRXZlbnQpID0+XG4gICAgICAgICAgZXZlbnQuY29ycmVsYXRpb25JZCAmJiB0YXJnZXRDb3JyZWxhdGlvbklkcy5oYXMoZXZlbnQuY29ycmVsYXRpb25JZClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzOiBFcnJvcltdID0gW107XG4gICAgbGV0IHN0b3BwZWRDb3VudCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHdhaXRFdmVudCBvZiBwZW5kaW5nV2FpdHMpIHtcbiAgICAgIGlmICghd2FpdEV2ZW50LmNvcnJlbGF0aW9uSWQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZXZlbnREYXRhID0gY29tcGF0TW9kZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3dhaXRfY29tcGxldGVkJyBhcyBjb25zdCxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHdhaXRFdmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBldmVudFR5cGU6ICd3YWl0X2NvbXBsZXRlZCcgYXMgY29uc3QsXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiB3YWl0RXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uOiBydW4uc3BlY1ZlcnNpb24sXG4gICAgICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUocnVuSWQsIGV2ZW50RGF0YSwgeyB2MUNvbXBhdDogY29tcGF0TW9kZSB9KTtcbiAgICAgICAgc3RvcHBlZENvdW50Kys7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoZXJyKSkge1xuICAgICAgICAgIHN0b3BwZWRDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9ycy5wdXNoKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RvcHBlZENvdW50ID4gMCkge1xuICAgICAgYXdhaXQgd29ybGQucXVldWUoXG4gICAgICAgIGdldFdvcmtmbG93UXVldWVOYW1lKHJ1bi53b3JrZmxvd05hbWUpLFxuICAgICAgICB7XG4gICAgICAgICAgcnVuSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkZXBsb3ltZW50SWQ6IHJ1bi5kZXBsb3ltZW50SWQsXG4gICAgICAgICAgc3BlY1ZlcnNpb246IHJ1bi5zcGVjVmVyc2lvbiA/PyBTUEVDX1ZFUlNJT05fTEVHQUNZLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIGBGYWlsZWQgdG8gY29tcGxldGUgJHtlcnJvcnMubGVuZ3RofS8ke3BlbmRpbmdXYWl0cy5sZW5ndGh9IHBlbmRpbmcgd2FpdChzKSBmb3IgcnVuICR7cnVuSWR9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdG9wcGVkQ291bnQgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUVycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gd2FrZSB1cCBydW4gJHtydW5JZH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICB7IGNhdXNlOiBlcnIgfVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkIGZyb20gYSBzdHJlYW0gYnkgc3RyZWFtIElELlxuICogUmV0dXJucyBhIFJlYWRhYmxlU3RyZWFtIG9mIFVpbnQ4QXJyYXkgY2h1bmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0cmVhbShcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5JZDogc3RyaW5nLFxuICBzdHJlYW1JZDogc3RyaW5nLFxuICBvcHRpb25zPzogUmVhZFN0cmVhbU9wdGlvbnNcbik6IFByb21pc2U8UmVhZGFibGVTdHJlYW08VWludDhBcnJheT4+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgd29ybGQuc3RyZWFtcy5nZXQocnVuSWQsIHN0cmVhbUlkLCBvcHRpb25zPy5zdGFydEluZGV4KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byByZWFkIHN0cmVhbSAke3N0cmVhbUlkfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIExpc3QgYWxsIHN0cmVhbSBJRHMgZm9yIGEgd29ya2Zsb3cgcnVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFN0cmVhbXMoXG4gIHdvcmxkOiBXb3JsZCxcbiAgcnVuSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB3b3JsZC5zdHJlYW1zLmxpc3QocnVuSWQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGxpc3Qgc3RyZWFtcyBmb3IgcnVuICR7cnVuSWR9OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gLFxuICAgICAgeyBjYXVzZTogZXJyIH1cbiAgICApO1xuICB9XG59XG4iXX0=
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL3J1bnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixtQkFBbUIsR0FFcEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE4RG5DLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFhLEVBQWEsRUFBRTtJQUN6RCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLEtBQVksRUFDWixLQUFhLEVBQ2IsVUFBOEIsRUFBRTtJQUVoQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25F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R0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQ3hGLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLEtBQVksRUFDWixLQUFhO0lBRWIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FDYixrQ0FBa0MsS0FBSyxLQUFLLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUM5RixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FDZixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlDb25mbGljdEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQge1xuICB0eXBlIEV2ZW50LFxuICBpc0xlZ2FjeVNwZWNWZXJzaW9uLFxuICBTUEVDX1ZFUlNJT05fTEVHQUNZLFxuICB0eXBlIFdvcmxkLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgaW1wb3J0S2V5IH0gZnJvbSAnLi4vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQgeyBoeWRyYXRlV29ya2Zsb3dBcmd1bWVudHMgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93UXVldWVOYW1lIH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IHN0YXJ0IH0gZnJvbSAnLi9zdGFydC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjcmVhdGVSdW5PcHRpb25zIHtcbiAgZGVwbG95bWVudElkPzogc3RyaW5nO1xuICBzcGVjVmVyc2lvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFF1ZXVlIG5hbWVzcGFjZSBvZiB0aGUgdGFyZ2V0IGRlcGxveW1lbnQgKGUuZy4gYCdldmUnYCBmb3IgdG9waWNzIGxpa2VcbiAgICogYF9fZXZlX3drZl93b3JrZmxvd18qYCkuIEZhbGxzIGJhY2sgdG8gYFdPUktGTE9XX1FVRVVFX05BTUVTUEFDRWAgaW5cbiAgICogdGhlIGNhbGxpbmcgcHJvY2Vzcy4gQ3Jvc3MtY29udGV4dCBjYWxsZXJzIChlLmcuIHRoZSBvYnNlcnZhYmlsaXR5XG4gICAqIGRhc2hib2FyZCkgbXVzdCBwYXNzIHRoZSB0YXJnZXQgZGVwbG95bWVudCdzIG5hbWVzcGFjZSBleHBsaWNpdGx5IOKAlFxuICAgKiBhIHJ1biBlbnF1ZXVlZCB0byBhIHRvcGljIHRoZSB0YXJnZXQgZGVwbG95bWVudCBoYXMgbm8gY29uc3VtZXIgZm9yXG4gICAqIGlzIG5ldmVyIHBpY2tlZCB1cC5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9wU2xlZXBSZXN1bHQge1xuICAvKiogTnVtYmVyIG9mIHBlbmRpbmcgc2xlZXBzIHRoYXQgd2VyZSBzdG9wcGVkICovXG4gIHN0b3BwZWRDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRTdHJlYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCB0byBzdGFydCByZWFkaW5nIGZyb20uIERlZmF1bHRzIHRvIDAuXG4gICAqIE5lZ2F0aXZlIHZhbHVlcyBzdGFydCBmcm9tIHRoZSBlbmQgKGUuZy4gLTMgcmVhZHMgdGhlIGxhc3QgMyBjaHVua3MpLlxuICAgKi9cbiAgc3RhcnRJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9wU2xlZXBPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGxpc3Qgb2Ygc3BlY2lmaWMgY29ycmVsYXRpb24gSURzIHRvIHRhcmdldC5cbiAgICogSWYgcHJvdmlkZWQsIG9ubHkgdGhlc2Ugc2xlZXAgY2FsbHMgd2lsbCBiZSBpbnRlcnJ1cHRlZC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgcGVuZGluZyBzbGVlcCBjYWxscyB3aWxsIGJlIGludGVycnVwdGVkLlxuICAgKi9cbiAgY29ycmVsYXRpb25JZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFF1ZXVlIG5hbWVzcGFjZSBvZiB0aGUgcnVuJ3MgZGVwbG95bWVudCAoZS5nLiBgJ2V2ZSdgKSwgdXNlZCB3aGVuXG4gICAqIHJlLWVucXVldWVpbmcgdGhlIHJ1biBhZnRlciBjb21wbGV0aW5nIGl0cyB3YWl0cy4gRmFsbHMgYmFjayB0b1xuICAgKiBgV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFYCBpbiB0aGUgY2FsbGluZyBwcm9jZXNzLiBDcm9zcy1jb250ZXh0XG4gICAqIGNhbGxlcnMgKGUuZy4gdGhlIG9ic2VydmFiaWxpdHkgZGFzaGJvYXJkKSBtdXN0IHBhc3MgaXQgZXhwbGljaXRseS5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWVucXVldWVSdW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIFF1ZXVlIG5hbWVzcGFjZSBvZiB0aGUgcnVuJ3MgZGVwbG95bWVudCAoZS5nLiBgJ2V2ZSdgKS4gRmFsbHMgYmFjayB0b1xuICAgKiBgV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFYCBpbiB0aGUgY2FsbGluZyBwcm9jZXNzLiBDcm9zcy1jb250ZXh0XG4gICAqIGNhbGxlcnMgKGUuZy4gdGhlIG9ic2VydmFiaWxpdHkgZGFzaGJvYXJkKSBtdXN0IHBhc3MgaXQgZXhwbGljaXRseS5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxSdW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZyZWUtdGV4dCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKG1heCA1MTIgY2hhcnMpLCByZWNvcmRlZFxuICAgKiBvbiB0aGUgcnVuX2NhbmNlbGxlZCBldmVudCBhbmQgc3VyZmFjZWQgaW4gdGhlIHJ1biBkZXRhaWwgdmlldy5cbiAgICovXG4gIGNhbmNlbFJlYXNvbj86IHN0cmluZztcbn1cblxuY29uc3Qgbm9ybWFsaXplV29ya2Zsb3dBcmdzID0gKGFyZ3M6IHVua25vd24pOiB1bmtub3duW10gPT4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbYXJnc107XG59O1xuXG4vKipcbiAqIFN0YXJ0IGEgbmV3IHdvcmtmbG93IHJ1biBiYXNlZCBvbiBhbiBleGlzdGluZyBydW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNyZWF0ZVJ1bkZyb21FeGlzdGluZyhcbiAgd29ybGQ6IFdvcmxkLFxuICBydW5JZDogc3RyaW5nLFxuICBvcHRpb25zOiBSZWNyZWF0ZVJ1bk9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ2FsbCcgfSk7XG4gICAgY29uc3QgcmF3S2V5ID0gYXdhaXQgd29ybGQuZ2V0RW5jcnlwdGlvbktleUZvclJ1bj8uKHJ1bik7XG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IHJhd0tleSA/IGF3YWl0IGltcG9ydEtleShyYXdLZXkpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHdvcmtmbG93QXJncyA9IG5vcm1hbGl6ZVdvcmtmbG93QXJncyhcbiAgICAgIGF3YWl0IGh5ZHJhdGVXb3JrZmxvd0FyZ3VtZW50cyhcbiAgICAgICAgcnVuLmlucHV0LFxuICAgICAgICBydW5JZCxcbiAgICAgICAgZW5jcnlwdGlvbktleSxcbiAgICAgICAgZ2xvYmFsVGhpc1xuICAgICAgKVxuICAgICk7XG4gICAgY29uc3Qgc3BlY1ZlcnNpb24gPVxuICAgICAgb3B0aW9ucy5zcGVjVmVyc2lvbiA/PyBydW4uc3BlY1ZlcnNpb24gPz8gU1BFQ19WRVJTSU9OX0xFR0FDWTtcbiAgICBjb25zdCBkZXBsb3ltZW50SWQgPSBvcHRpb25zLmRlcGxveW1lbnRJZCA/PyBydW4uZGVwbG95bWVudElkO1xuXG4gICAgY29uc3QgbmV3UnVuID0gYXdhaXQgc3RhcnQoXG4gICAgICB7IHdvcmtmbG93SWQ6IHJ1bi53b3JrZmxvd05hbWUgfSxcbiAgICAgIHdvcmtmbG93QXJncyBhcyB1bmtub3duW10sXG4gICAgICB7XG4gICAgICAgIGRlcGxveW1lbnRJZCxcbiAgICAgICAgd29ybGQsXG4gICAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgICByZXBsYXllZEZyb21SdW5JZDogcnVuSWQsXG4gICAgICAgIG5hbWVzcGFjZTogb3B0aW9ucy5uYW1lc3BhY2UsXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gbmV3UnVuLnJ1bklkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHJlY3JlYXRlIHJ1biBmcm9tICR7cnVuSWR9OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gLFxuICAgICAgeyBjYXVzZTogZXJyIH1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQ2FuY2VsIGEgd29ya2Zsb3cgcnVuLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY2FuY2VsbGF0aW9uIHNldHRpbmdzLiBgY2FuY2VsUmVhc29uYCByZWNvcmRzIGFcbiAqICAgZnJlZS10ZXh0IHJlYXNvbiAobWF4IDUxMiBjaGFycykgb24gdGhlIHJ1bl9jYW5jZWxsZWQgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYW5jZWxSdW4oXG4gIHdvcmxkOiBXb3JsZCxcbiAgcnVuSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IENhbmNlbFJ1bk9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KHJ1bklkLCB7IHJlc29sdmVEYXRhOiAnbm9uZScgfSk7XG4gICAgY29uc3Qgc3BlY1ZlcnNpb24gPSBydW4uc3BlY1ZlcnNpb24gPz8gU1BFQ19WRVJTSU9OX0xFR0FDWTtcbiAgICBjb25zdCBjb21wYXRNb2RlID0gaXNMZWdhY3lTcGVjVmVyc2lvbihzcGVjVmVyc2lvbik7XG4gICAgY29uc3QgZXZlbnRSZXF1ZXN0ID0ge1xuICAgICAgZXZlbnRUeXBlOiAncnVuX2NhbmNlbGxlZCcgYXMgY29uc3QsXG4gICAgICBzcGVjVmVyc2lvbixcbiAgICAgIC4uLihvcHRpb25zPy5jYW5jZWxSZWFzb24gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHsgZXZlbnREYXRhOiB7IGNhbmNlbFJlYXNvbjogb3B0aW9ucy5jYW5jZWxSZWFzb24gfSB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZShydW5JZCwgZXZlbnRSZXF1ZXN0LCB7IHYxQ29tcGF0OiBjb21wYXRNb2RlIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGNhbmNlbCBydW4gJHtydW5JZH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICB7IGNhdXNlOiBlcnIgfVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZS1lbnF1ZXVlIGEgd29ya2Zsb3cgcnVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVlbnF1ZXVlUnVuKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBSZWVucXVldWVSdW5PcHRpb25zXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldChydW5JZCwgeyByZXNvbHZlRGF0YTogJ25vbmUnIH0pO1xuICAgIGF3YWl0IHdvcmxkLnF1ZXVlKFxuICAgICAgZ2V0V29ya2Zsb3dRdWV1ZU5hbWUocnVuLndvcmtmbG93TmFtZSwgb3B0aW9ucz8ubmFtZXNwYWNlKSxcbiAgICAgIHtcbiAgICAgICAgcnVuSWQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkZXBsb3ltZW50SWQ6IHJ1bi5kZXBsb3ltZW50SWQsXG4gICAgICAgIHNwZWNWZXJzaW9uOiBydW4uc3BlY1ZlcnNpb24gPz8gU1BFQ19WRVJTSU9OX0xFR0FDWSxcbiAgICAgIH1cbiAgICApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHJlLWVucXVldWUgcnVuICR7cnVuSWR9OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gLFxuICAgICAgeyBjYXVzZTogZXJyIH1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogV2FrZSB1cCBhIHdvcmtmbG93IHJ1biBieSBpbnRlcnJ1cHRpbmcgcGVuZGluZyBzbGVlcCgpIGNhbGxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FrZVVwUnVuKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBTdG9wU2xlZXBPcHRpb25zXG4pOiBQcm9taXNlPFN0b3BTbGVlcFJlc3VsdD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KHJ1bklkLCB7IHJlc29sdmVEYXRhOiAnbm9uZScgfSk7XG4gICAgY29uc3QgY29tcGF0TW9kZSA9IGlzTGVnYWN5U3BlY1ZlcnNpb24ocnVuLnNwZWNWZXJzaW9uKTtcblxuICAgIC8vIFBhZ2luYXRlIHRocm91Z2ggYWxsIGV2ZW50cyB0byBlbnN1cmUgd2UgZG9uJ3QgbWlzcyBhbnkgc2xlZXBzXG4gICAgLy8gaW4gbG9uZy1ydW5uaW5nIHdvcmtmbG93cyB3aXRoIG1vcmUgdGhhbiAxMDAwIGV2ZW50cy5cbiAgICBjb25zdCBhbGxFdmVudHM6IEV2ZW50W10gPSBbXTtcbiAgICBsZXQgY3Vyc29yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBkbyB7XG4gICAgICBjb25zdCBldmVudHNSZXN1bHQgPSBhd2FpdCB3b3JsZC5ldmVudHMubGlzdCh7XG4gICAgICAgIHJ1bklkLFxuICAgICAgICBwYWdpbmF0aW9uOiB7IGxpbWl0OiAxMDAwLCAuLi4oY3Vyc29yID8geyBjdXJzb3IgfSA6IHt9KSB9LFxuICAgICAgICByZXNvbHZlRGF0YTogJ25vbmUnLFxuICAgICAgfSk7XG4gICAgICBhbGxFdmVudHMucHVzaCguLi5ldmVudHNSZXN1bHQuZGF0YSk7XG4gICAgICBjdXJzb3IgPSBldmVudHNSZXN1bHQuaGFzTW9yZSA/IGV2ZW50c1Jlc3VsdC5jdXJzb3IgOiBudWxsO1xuICAgIH0gd2hpbGUgKGN1cnNvcik7XG5cbiAgICBjb25zdCB3YWl0Q3JlYXRlZEV2ZW50cyA9IGFsbEV2ZW50cy5maWx0ZXIoXG4gICAgICAoZXZlbnQ6IEV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnXG4gICAgKTtcbiAgICBjb25zdCB3YWl0Q29tcGxldGVkQ29ycmVsYXRpb25JZHMgPSBuZXcgU2V0KFxuICAgICAgYWxsRXZlbnRzXG4gICAgICAgIC5maWx0ZXIoKGV2ZW50OiBFdmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnKVxuICAgICAgICAubWFwKChldmVudDogRXZlbnQpID0+IGV2ZW50LmNvcnJlbGF0aW9uSWQpXG4gICAgKTtcblxuICAgIGxldCBwZW5kaW5nV2FpdHMgPSB3YWl0Q3JlYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAoZXZlbnQ6IEV2ZW50KSA9PiAhd2FpdENvbXBsZXRlZENvcnJlbGF0aW9uSWRzLmhhcyhldmVudC5jb3JyZWxhdGlvbklkKVxuICAgICk7XG5cbiAgICBpZiAob3B0aW9ucz8uY29ycmVsYXRpb25JZHMgJiYgb3B0aW9ucy5jb3JyZWxhdGlvbklkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0YXJnZXRDb3JyZWxhdGlvbklkcyA9IG5ldyBTZXQob3B0aW9ucy5jb3JyZWxhdGlvbklkcyk7XG4gICAgICBwZW5kaW5nV2FpdHMgPSBwZW5kaW5nV2FpdHMuZmlsdGVyKFxuICAgICAgICAoZXZlbnQ6IEV2ZW50KSA9PlxuICAgICAgICAgIGV2ZW50LmNvcnJlbGF0aW9uSWQgJiYgdGFyZ2V0Q29ycmVsYXRpb25JZHMuaGFzKGV2ZW50LmNvcnJlbGF0aW9uSWQpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yczogRXJyb3JbXSA9IFtdO1xuICAgIGxldCBzdG9wcGVkQ291bnQgPSAwO1xuXG4gICAgZm9yIChjb25zdCB3YWl0RXZlbnQgb2YgcGVuZGluZ1dhaXRzKSB7XG4gICAgICBpZiAoIXdhaXRFdmVudC5jb3JyZWxhdGlvbklkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGNvbXBhdE1vZGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBldmVudFR5cGU6ICd3YWl0X2NvbXBsZXRlZCcgYXMgY29uc3QsXG4gICAgICAgICAgICBjb3JyZWxhdGlvbklkOiB3YWl0RXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAnd2FpdF9jb21wbGV0ZWQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogd2FpdEV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgICBzcGVjVmVyc2lvbjogcnVuLnNwZWNWZXJzaW9uLFxuICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgIHJlc3VtZUF0OiB3YWl0RXZlbnQuZXZlbnREYXRhLnJlc3VtZUF0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZShydW5JZCwgZXZlbnREYXRhLCB7IHYxQ29tcGF0OiBjb21wYXRNb2RlIH0pO1xuICAgICAgICBzdG9wcGVkQ291bnQrKztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgICAgc3RvcHBlZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdG9wcGVkQ291bnQgPiAwKSB7XG4gICAgICBhd2FpdCB3b3JsZC5xdWV1ZShcbiAgICAgICAgZ2V0V29ya2Zsb3dRdWV1ZU5hbWUocnVuLndvcmtmbG93TmFtZSwgb3B0aW9ucz8ubmFtZXNwYWNlKSxcbiAgICAgICAge1xuICAgICAgICAgIHJ1bklkLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGVwbG95bWVudElkOiBydW4uZGVwbG95bWVudElkLFxuICAgICAgICAgIHNwZWNWZXJzaW9uOiBydW4uc3BlY1ZlcnNpb24gPz8gU1BFQ19WRVJTSU9OX0xFR0FDWSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICBgRmFpbGVkIHRvIGNvbXBsZXRlICR7ZXJyb3JzLmxlbmd0aH0vJHtwZW5kaW5nV2FpdHMubGVuZ3RofSBwZW5kaW5nIHdhaXQocykgZm9yIHJ1biAke3J1bklkfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RvcHBlZENvdW50IH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBZ2dyZWdhdGVFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHdha2UgdXAgcnVuICR7cnVuSWR9OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gLFxuICAgICAgeyBjYXVzZTogZXJyIH1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZCBmcm9tIGEgc3RyZWFtIGJ5IHN0cmVhbSBJRC5cbiAqIFJldHVybnMgYSBSZWFkYWJsZVN0cmVhbSBvZiBVaW50OEFycmF5IGNodW5rcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdHJlYW0oXG4gIHdvcmxkOiBXb3JsZCxcbiAgcnVuSWQ6IHN0cmluZyxcbiAgc3RyZWFtSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IFJlYWRTdHJlYW1PcHRpb25zXG4pOiBQcm9taXNlPFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHdvcmxkLnN0cmVhbXMuZ2V0KHJ1bklkLCBzdHJlYW1JZCwgb3B0aW9ucz8uc3RhcnRJbmRleCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gcmVhZCBzdHJlYW0gJHtzdHJlYW1JZH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICB7IGNhdXNlOiBlcnIgfVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IGFsbCBzdHJlYW0gSURzIGZvciBhIHdvcmtmbG93IHJ1bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTdHJlYW1zKFxuICB3b3JsZDogV29ybGQsXG4gIHJ1bklkOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgd29ybGQuc3RyZWFtcy5saXN0KHJ1bklkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBsaXN0IHN0cmVhbXMgZm9yIHJ1biAke3J1bklkfTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,5 +1,12 @@
1
1
  import type { World } from '@workflow/world';
2
2
  import { Run } from './run.js';
3
+ /**
4
+ * Reset the `deploymentId: 'latest'` no-op warn-once guard. Test-only —
5
+ * exported so unit tests can exercise the warn path across `start()` calls.
6
+ *
7
+ * @internal
8
+ */
9
+ export declare function _resetLatestNoOpWarnForTests(): void;
3
10
  export interface StartOptionsBase {
4
11
  /**
5
12
  * The world to use for the workflow run creation,
@@ -10,6 +17,53 @@ export interface StartOptionsBase {
10
17
  * The spec version to use for the workflow run. Defaults to the latest version.
11
18
  */
12
19
  specVersion?: number;
20
+ /**
21
+ * Plaintext attributes to seed on the run as it is created.
22
+ *
23
+ * Available for native-attributes runs (spec version 4 and later).
24
+ */
25
+ attributes?: Record<string, string>;
26
+ /**
27
+ * Permit reserved `$`-prefixed keys in `attributes`. The `$` namespace
28
+ * is reserved for framework/library code built on top of the workflow
29
+ * SDK (telemetry, agent metadata, platform-emitted tags, etc.); user
30
+ * code MUST NOT write keys in it, and validation rejects them so
31
+ * accidental collisions with tooling-owned keys can't slip through.
32
+ *
33
+ * Only flip this to `true` if your caller is itself a framework or
34
+ * library that owns a `$`-prefixed sub-namespace and knows the
35
+ * conventions of any other tools writing into it. Same semantics as
36
+ * the `setAttributes` option of the same name.
37
+ */
38
+ allowReservedAttributes?: boolean;
39
+ /**
40
+ * The ID of an existing run this run is being replayed from, if any.
41
+ *
42
+ * Recorded on the new run's `executionContext` as `replayedFromRunId` so
43
+ * tooling (e.g. the dashboard runs list) can show that a run originated as
44
+ * a replay and link back to its source. Set automatically by
45
+ * {@link recreateRunFromExisting}; there's usually no reason to pass it
46
+ * directly.
47
+ *
48
+ * Must be a run ID: `wrun_` followed by a 26-char ULID. It's a foreign key
49
+ * to the source run, so `start()` validates the exact shape and rejects
50
+ * anything else rather than persist a lineage link that points at garbage.
51
+ */
52
+ replayedFromRunId?: string;
53
+ /**
54
+ * Queue namespace of the target deployment. Scopes the workflow queue
55
+ * topic to `__{namespace}_wkf_workflow_*` (e.g. `'eve'`) instead of the
56
+ * default `__wkf_workflow_*`, and is also used for the cross-deployment
57
+ * capability probe. Falls back to `WORKFLOW_QUEUE_NAMESPACE` in the
58
+ * calling process.
59
+ *
60
+ * Within a deployment the env fallback is correct. Cross-context callers
61
+ * (e.g. the observability dashboard replaying a run) must pass the
62
+ * TARGET deployment's namespace explicitly: the env fallback resolves in
63
+ * the caller's process, and a run enqueued to a topic the target has no
64
+ * consumer for is never picked up.
65
+ */
66
+ namespace?: string;
13
67
  }
14
68
  export interface StartOptionsWithDeploymentId extends StartOptionsBase {
15
69
  /**
@@ -20,7 +74,10 @@ export interface StartOptionsWithDeploymentId extends StartOptionsBase {
20
74
  *
21
75
  * Set to `'latest'` to automatically resolve the most recent deployment
22
76
  * for the current environment (same production target or git branch).
23
- * This is currently a Vercel-specific feature.
77
+ * This is only meaningful in worlds with atomic, immutable deployments
78
+ * (currently Vercel). In other worlds (local dev, Postgres) there is no
79
+ * notion of multiple deployments to resolve between, so `'latest'` has no
80
+ * effect — a warning is logged and the run targets the current deployment.
24
81
  *
25
82
  * **Note:** When `deploymentId` is provided, the argument and return types become `unknown`
26
83
  * since there is no guarantee the types will be consistent across deployments.
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/runtime/start.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAyB,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAgBpE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAM/B,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA6B,SAAQ,gBAAgB;IACpE;;;;;;;;;;;;OAYG;IACH,YAAY,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,+BAAgC,SAAQ,gBAAgB;IACvE,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,4BAA4B,GAC5B,+BAA+B,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,IAAI,CAC/D,GAAG,IAAI,EAAE,KAAK,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;;;;;;GAOG;AAIH,wBAAgB,KAAK,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACpD,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC7D,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzB,wBAAgB,KAAK,CAAC,OAAO,EAC3B,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC1D,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAGzB,wBAAgB,KAAK,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACpD,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC7D,IAAI,EAAE,KAAK,EACX,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzB,wBAAgB,KAAK,CAAC,OAAO,EAC3B,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC1D,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/runtime/start.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAyB,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAwBpE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAwB/B;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC;;;;;;;;;;;OAWG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA6B,SAAQ,gBAAgB;IACpE;;;;;;;;;;;;;;;OAeG;IACH,YAAY,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,+BAAgC,SAAQ,gBAAgB;IACvE,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,4BAA4B,GAC5B,+BAA+B,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,IAAI,CAC/D,GAAG,IAAI,EAAE,KAAK,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;;;;;;GAOG;AAIH,wBAAgB,KAAK,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACpD,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC7D,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzB,wBAAgB,KAAK,CAAC,OAAO,EAC3B,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC1D,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAGzB,wBAAgB,KAAK,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACpD,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC7D,IAAI,EAAE,KAAK,EACX,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAEzB,wBAAgB,KAAK,CAAC,OAAO,EAC3B,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAC1D,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC"}