@decaf-ts/integrations 0.4.1-2 → 0.5.1

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 (50) hide show
  1. package/dist/integrations.cjs +4 -4
  2. package/dist/integrations.js +4 -4
  3. package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs +13 -5
  4. package/lib/cjs/graph/engine/errors/GraphBreakSignal.cjs +37 -0
  5. package/lib/cjs/graph/engine/errors/index.cjs +3 -2
  6. package/lib/cjs/graph/engine/execution/BreakGraphNodeExecutor.cjs +22 -0
  7. package/lib/cjs/graph/engine/execution/index.cjs +3 -2
  8. package/lib/cjs/graph/engine/index.cjs +4 -2
  9. package/lib/cjs/graph/engine/loops/ForeachGraphNodeExecutor.cjs +54 -19
  10. package/lib/cjs/graph/engine/types.cjs +2 -2
  11. package/lib/cjs/graph/shared/nodes/flow-control.cjs +41 -3
  12. package/lib/cjs/index.cjs +3 -3
  13. package/lib/cjs/nest/graph/GraphExecutorRegistryFactory.cjs +7 -2
  14. package/lib/cjs/nest/keycloakAuthHandler.cjs +5 -3
  15. package/lib/cjs/nest/utils.cjs +15 -4
  16. package/lib/cjs/plugins/superset/templates.cjs +14 -20
  17. package/lib/esm/feature-flags/services/FeatureFlag.service.js +13 -5
  18. package/lib/esm/graph/engine/errors/GraphBreakSignal.js +32 -0
  19. package/lib/esm/graph/engine/errors/index.js +2 -1
  20. package/lib/esm/graph/engine/execution/BreakGraphNodeExecutor.js +17 -0
  21. package/lib/esm/graph/engine/execution/index.js +2 -1
  22. package/lib/esm/graph/engine/index.js +3 -1
  23. package/lib/esm/graph/engine/loops/ForeachGraphNodeExecutor.js +53 -18
  24. package/lib/esm/graph/engine/types.js +1 -1
  25. package/lib/esm/graph/shared/nodes/flow-control.js +39 -1
  26. package/lib/esm/index.js +3 -3
  27. package/lib/esm/nest/graph/GraphExecutorRegistryFactory.js +7 -2
  28. package/lib/esm/nest/keycloakAuthHandler.js +4 -2
  29. package/lib/esm/nest/utils.js +14 -3
  30. package/lib/esm/plugins/superset/templates.js +13 -19
  31. package/lib/types/graph/engine/errors/GraphBreakSignal.d.cts +28 -0
  32. package/lib/types/graph/engine/errors/GraphBreakSignal.d.mts +28 -0
  33. package/lib/types/graph/engine/errors/index.d.cts +1 -0
  34. package/lib/types/graph/engine/errors/index.d.mts +1 -0
  35. package/lib/types/graph/engine/execution/BreakGraphNodeExecutor.d.cts +22 -0
  36. package/lib/types/graph/engine/execution/BreakGraphNodeExecutor.d.mts +22 -0
  37. package/lib/types/graph/engine/execution/index.d.cts +1 -0
  38. package/lib/types/graph/engine/execution/index.d.mts +1 -0
  39. package/lib/types/graph/engine/index.d.cts +2 -0
  40. package/lib/types/graph/engine/index.d.mts +2 -0
  41. package/lib/types/graph/engine/loops/ForeachGraphNodeExecutor.d.cts +11 -3
  42. package/lib/types/graph/engine/loops/ForeachGraphNodeExecutor.d.mts +11 -3
  43. package/lib/types/graph/engine/types.d.cts +6 -0
  44. package/lib/types/graph/engine/types.d.mts +6 -0
  45. package/lib/types/graph/shared/nodes/flow-control.d.cts +12 -1
  46. package/lib/types/graph/shared/nodes/flow-control.d.mts +12 -1
  47. package/lib/types/index.d.cts +2 -2
  48. package/lib/types/index.d.mts +2 -2
  49. package/package.json +6 -3
  50. package/plugins/superset/Dockerfile +9 -9
@@ -14,7 +14,7 @@ import { FeatureFlagAccess } from "./../models/FeatureFlagAccess.model.js";
14
14
  import { FeatureFlag } from "./../models/FeatureFlag.model.js";
15
15
  import { EnvironmeFlagReader, } from "./../readers/index.js";
16
16
  import { isFeatureFlagEnabled, isFeatureFlagEnabledByName, normalizeFeatureName, } from "./../utils.js";
17
- import { normalizeFeatureSubjectKey, normalizeFeatureSubjectType } from "./../utils.js";
17
+ import { normalizeFeatureSubjectKey, normalizeFeatureSubjectType, } from "./../utils.js";
18
18
  let FeatureFlagService = class FeatureFlagService extends ModelService {
19
19
  constructor() {
20
20
  super(FeatureFlag);
@@ -173,8 +173,13 @@ let FeatureFlagService = class FeatureFlagService extends ModelService {
173
173
  const featureKeys = [...new Set(access.map((item) => item.featureKey))];
174
174
  if (featureKeys.length === 0)
175
175
  return {};
176
- const condition = Condition.attr("enabled").eq(true).and(Condition.attr("key").in(featureKeys.map(normalizeFeatureName)));
177
- const enabledFlags = await this.repo.select().where(condition).execute(...args);
176
+ const condition = Condition.attr("enabled")
177
+ .eq(true)
178
+ .and(Condition.attr("key").in(featureKeys.map(normalizeFeatureName)));
179
+ const enabledFlags = await this.repo
180
+ .select()
181
+ .where(condition)
182
+ .execute(...args);
178
183
  return enabledFlags.reduce((registry, flag) => {
179
184
  registry[flag.key] = flag.config ?? true;
180
185
  return registry;
@@ -204,6 +209,7 @@ let FeatureFlagService = class FeatureFlagService extends ModelService {
204
209
  const config = value && typeof value === "object" && !Array.isArray(value)
205
210
  ? value
206
211
  : { enabled: Boolean(value) };
212
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
207
213
  const { enabled: _ignoredEnabled, ...restConfig } = config;
208
214
  const normalizedKey = normalizeFeatureName(key);
209
215
  const existing = await this.findOneBy("key", normalizedKey, ...args).catch(() => undefined);
@@ -229,7 +235,9 @@ let FeatureFlagService = class FeatureFlagService extends ModelService {
229
235
  enabled: isFeatureFlagEnabled(value),
230
236
  },
231
237
  });
232
- results.push(existing ? await this.update(model, ...args) : await this.create(model, ...args));
238
+ results.push(existing
239
+ ? await this.update(model, ...args)
240
+ : await this.create(model, ...args));
233
241
  }
234
242
  this.cachedRegistry = await this.refreshCachedRegistry({
235
243
  ...options,
@@ -247,4 +255,4 @@ FeatureFlagService = __decorate([
247
255
  __metadata("design:paramtypes", [])
248
256
  ], FeatureFlagService);
249
257
  export { FeatureFlagService };
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmVhdHVyZUZsYWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mZWF0dXJlLWZsYWdzL3NlcnZpY2VzL0ZlYXR1cmVGbGFnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUF1QjtBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsK0NBQTBDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUseUNBQW9DO0FBQzFELE9BQU8sRUFDTCxtQkFBbUIsR0FHcEIsOEJBQW1CO0FBVXBCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMEJBQTBCLEVBQzFCLG9CQUFvQixHQUNyQixzQkFBaUI7QUFDbEIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLDJCQUEyQixFQUFFLHNCQUFpQjtBQVE1RSxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFtQixTQUFRLFlBQXlCO0lBTS9EO1FBQ0UsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBTmIsV0FBTSxHQUFzQixJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDdEQsbUJBQWMsR0FBd0IsRUFBRSxDQUFDO0lBTWpELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUNkLEdBQUcsSUFBVztRQUVkLE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxDQUFDLENBQTBDLElBQUksRUFBRSxDQUFDO1FBQ3ZFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQWlCLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksQ0FB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T0FBTyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQztvQkFDcEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO29CQUNuQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7b0JBQ3ZCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtvQkFDN0IsTUFBTSxFQUFFO3dCQUNOLEdBQUcsVUFBVTt3QkFDYixPQUFPLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDO3FCQUNyQztpQkFDRixDQUFDLENBQUM7WUFDUCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDcEQ7WUFDRSxHQUFHLE9BQU87WUFDVixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxzQkFBc0I7U0FDakQsRUFDRCxHQUFHLElBQUksQ0FDUixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGLENBQUE7QUF0VVc7SUFEVCxVQUFVLENBQUMsaUJBQWlCLENBQUM7OzREQUN1QjtBQUoxQyxrQkFBa0I7SUFEOUIsT0FBTyxDQUFDLFdBQVcsQ0FBQzs7R0FDUixrQkFBa0IsQ0EwVTlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uZGl0aW9uLFxuICBNb2RlbFNlcnZpY2UsXG4gIFJlcG9zaXRvcnksXG4gIHJlcG9zaXRvcnksXG4gIHNlcnZpY2UsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBSZXBvIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBOb3RGb3VuZEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50IH0gZnJvbSBcIi4uL2Vudmlyb25tZW50XCI7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ0FjY2VzcyB9IGZyb20gXCIuLi9tb2RlbHMvRmVhdHVyZUZsYWdBY2Nlc3MubW9kZWxcIjtcbmltcG9ydCB7IEZlYXR1cmVGbGFnIH0gZnJvbSBcIi4uL21vZGVscy9GZWF0dXJlRmxhZy5tb2RlbFwiO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lRmxhZ1JlYWRlcixcbiAgRmVhdHVyZUZsYWdSZWFkZXIsXG4gIEZlYXR1cmVGbGFnUmVhZGVyTGlrZSxcbn0gZnJvbSBcIi4uL3JlYWRlcnNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmVhdHVyZUZsYWdBY2Nlc3NJbnB1dCxcbiAgRmVhdHVyZUZsYWdBY2Nlc3NRdWVyeSxcbiAgRmVhdHVyZUZsYWdBY2Nlc3NTdWJqZWN0LFxuICBGZWF0dXJlRmxhZ0NvbmZpZyxcbiAgRmVhdHVyZUZsYWdSZWFkZXJDb25maWcsXG4gIEZlYXR1cmVGbGFnUmVhZGVySW5wdXQsXG4gIEZlYXR1cmVGbGFnUmVnaXN0cnksXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgaXNGZWF0dXJlRmxhZ0VuYWJsZWQsXG4gIGlzRmVhdHVyZUZsYWdFbmFibGVkQnlOYW1lLFxuICBub3JtYWxpemVGZWF0dXJlTmFtZSxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleSwgbm9ybWFsaXplRmVhdHVyZVN1YmplY3RUeXBlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZUZsYWdTZXJ2aWNlQ29uZmlnIGV4dGVuZHMgRmVhdHVyZUZsYWdSZWFkZXJDb25maWcge1xuICByZWFkZXI/OiBGZWF0dXJlRmxhZ1JlYWRlckxpa2U7XG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5PEZlYXR1cmVGbGFnLCBhbnk+O1xufVxuXG5Ac2VydmljZShGZWF0dXJlRmxhZylcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ1NlcnZpY2UgZXh0ZW5kcyBNb2RlbFNlcnZpY2U8RmVhdHVyZUZsYWc+IHtcbiAgcHJpdmF0ZSByZWFkZXI6IEZlYXR1cmVGbGFnUmVhZGVyID0gbmV3IEVudmlyb25tZUZsYWdSZWFkZXIoKTtcbiAgcHJpdmF0ZSBjYWNoZWRSZWdpc3RyeTogRmVhdHVyZUZsYWdSZWdpc3RyeSA9IHt9O1xuICBAcmVwb3NpdG9yeShGZWF0dXJlRmxhZ0FjY2VzcylcbiAgcHJvdGVjdGVkIGFjY2Vzc1JlcG9zaXRvcnkhOiBSZXBvPEZlYXR1cmVGbGFnQWNjZXNzPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihGZWF0dXJlRmxhZyk7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8eyBjb25maWc6IEZlYXR1cmVGbGFnU2VydmljZUNvbmZpZzsgY2xpZW50OiBGZWF0dXJlRmxhZ1JlYWRlciB9PiB7XG4gICAgY29uc3QgY29uZmlnID0gKGFyZ3NbMF0gYXMgRmVhdHVyZUZsYWdTZXJ2aWNlQ29uZmlnIHwgdW5kZWZpbmVkKSA/PyB7fTtcbiAgICBpZiAoY29uZmlnLnJlcG9zaXRvcnkpIHtcbiAgICAgIHRoaXMuX3JlcG9zaXRvcnkgPSBjb25maWcucmVwb3NpdG9yeSBhcyBhbnk7XG4gICAgfVxuICAgIHRoaXMucmVhZGVyID0gIWNvbmZpZy5yZWFkZXJcbiAgICAgID8gbmV3IEVudmlyb25tZUZsYWdSZWFkZXIoKVxuICAgICAgOiB0eXBlb2YgY29uZmlnLnJlYWRlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gbmV3IGNvbmZpZy5yZWFkZXIoKVxuICAgICAgICA6IGNvbmZpZy5yZWFkZXI7XG4gICAgY29uc3QgcmVhZGVyQ29uZmlnID0ge1xuICAgICAgLi4uKGNvbmZpZy5yZWFkZXJDb25maWcgPz8ge30pLFxuICAgICAgc291cmNlOiBjb25maWcucmVhZGVyQ29uZmlnPy5zb3VyY2UgPz8gRmVhdHVyZUZsYWdFbnZpcm9ubWVudCxcbiAgICB9O1xuICAgIHRoaXMuY2FjaGVkUmVnaXN0cnkgPSBhd2FpdCB0aGlzLnJlZnJlc2hDYWNoZWRSZWdpc3RyeShyZWFkZXJDb25maWcsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IGVmZmVjdGl2ZUNvbmZpZzogRmVhdHVyZUZsYWdTZXJ2aWNlQ29uZmlnID0ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgcmVhZGVyOiB0aGlzLnJlYWRlcixcbiAgICAgIHJlYWRlckNvbmZpZyxcbiAgICB9O1xuICAgIHJldHVybiB7IGNvbmZpZzogZWZmZWN0aXZlQ29uZmlnLCBjbGllbnQ6IHRoaXMucmVhZGVyIH07XG4gIH1cblxuICBwcml2YXRlIGNsb25lUmVnaXN0cnkocmVnaXN0cnk6IEZlYXR1cmVGbGFnUmVnaXN0cnkpOiBGZWF0dXJlRmxhZ1JlZ2lzdHJ5IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVnaXN0cnkpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID1cbiAgICAgICAgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gKHsgLi4uKHZhbHVlIGFzIEZlYXR1cmVGbGFnQ29uZmlnKSB9IGFzIEZlYXR1cmVGbGFnQ29uZmlnKVxuICAgICAgICAgIDogdmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIEZlYXR1cmVGbGFnUmVnaXN0cnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoQ2FjaGVkUmVnaXN0cnkoXG4gICAgb3B0aW9uczogRmVhdHVyZUZsYWdSZWFkZXJJbnB1dCA9IHt9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdSZWdpc3RyeT4ge1xuICAgIGNvbnN0IGVudlJlZ2lzdHJ5ID0gYXdhaXQgdGhpcy5yZWFkZXIucmVhZCh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50LFxuICAgIH0pO1xuICAgIGxldCBwZXJzaXN0ZWQ6IEZlYXR1cmVGbGFnW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgcGVyc2lzdGVkID0gYXdhaXQgdGhpcy5yZXBvLnNlbGVjdCgpLmV4ZWN1dGUoLi4uYXJncyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBwZXJzaXN0ZWQgPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdpc3RyeSA9IHRoaXMuY2xvbmVSZWdpc3RyeShlbnZSZWdpc3RyeSk7XG4gICAgZm9yIChjb25zdCBmbGFnIG9mIHBlcnNpc3RlZCkge1xuICAgICAgcmVnaXN0cnlbZmxhZy5rZXldID0gZmxhZy5lbmFibGVkID8gKGZsYWcuY29uZmlnID8/IHRydWUpIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FjaGVkRmxhZyhmbGFnOiBGZWF0dXJlRmxhZyk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGVkUmVnaXN0cnlbZmxhZy5rZXldID0gZmxhZy5lbmFibGVkXG4gICAgICA/IChmbGFnLmNvbmZpZyA/PyB0cnVlKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWNjZXNzUmVwb3NpdG9yeSgpOiBSZXBvPEZlYXR1cmVGbGFnQWNjZXNzPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjZXNzUmVwb3NpdG9yeSA/PyBSZXBvc2l0b3J5LmZvck1vZGVsKEZlYXR1cmVGbGFnQWNjZXNzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0SW5pdGlhbGl6ZWQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnJlYWRlcjtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRmVhdHVyZUFjY2Vzc0lucHV0KFxuICAgIGlucHV0OiBGZWF0dXJlRmxhZ0FjY2Vzc0lucHV0XG4gICk6IEZlYXR1cmVGbGFnQWNjZXNzSW5wdXQge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIGZlYXR1cmVLZXk6IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKGlucHV0LmZlYXR1cmVLZXkpLFxuICAgICAgc3ViamVjdFR5cGU6IG5vcm1hbGl6ZUZlYXR1cmVTdWJqZWN0VHlwZShpbnB1dC5zdWJqZWN0VHlwZSksXG4gICAgICBzdWJqZWN0S2V5OiBub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleShpbnB1dC5zdWJqZWN0S2V5KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFjY2Vzc0NvbmRpdGlvbihcbiAgICBxdWVyeTogRmVhdHVyZUZsYWdBY2Nlc3NRdWVyeVxuICApOiBDb25kaXRpb248RmVhdHVyZUZsYWdBY2Nlc3M+IHtcbiAgICBsZXQgY29uZGl0aW9uID0gQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWdBY2Nlc3M+KFwic3ViamVjdFR5cGVcIikuZXEoXG4gICAgICBub3JtYWxpemVGZWF0dXJlU3ViamVjdFR5cGUocXVlcnkuc3ViamVjdFR5cGUpXG4gICAgKTtcbiAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYW5kKFxuICAgICAgQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWdBY2Nlc3M+KFwic3ViamVjdEtleVwiKS5lcShcbiAgICAgICAgbm9ybWFsaXplRmVhdHVyZVN1YmplY3RLZXkocXVlcnkuc3ViamVjdEtleSlcbiAgICAgIClcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcXVlcnkuZW5hYmxlZCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFuZChcbiAgICAgICAgQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWdBY2Nlc3M+KFwiZW5hYmxlZFwiKS5lcShxdWVyeS5lbmFibGVkKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LmZlYXR1cmVLZXlzICYmIHF1ZXJ5LmZlYXR1cmVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hbmQoXG4gICAgICAgIENvbmRpdGlvbi5hdHRyPEZlYXR1cmVGbGFnQWNjZXNzPihcImZlYXR1cmVLZXlcIikuaW4oXG4gICAgICAgICAgcXVlcnkuZmVhdHVyZUtleXMubWFwKG5vcm1hbGl6ZUZlYXR1cmVOYW1lKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY29uZGl0aW9uO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlKFxuICAgIG1vZGVsOiBGZWF0dXJlRmxhZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEZlYXR1cmVGbGFnPiB7XG4gICAgbW9kZWwua2V5ID0gbm9ybWFsaXplRmVhdHVyZU5hbWUobW9kZWwua2V5KTtcbiAgICBtb2RlbC5lbmFibGVkID8/PSB0cnVlO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBzdXBlci5jcmVhdGUobW9kZWwsIC4uLmFyZ3MpO1xuICAgIHRoaXMuc2V0Q2FjaGVkRmxhZyhjcmVhdGVkKTtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZShcbiAgICBtb2RlbDogRmVhdHVyZUZsYWcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZz4ge1xuICAgIG1vZGVsLmtleSA9IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKG1vZGVsLmtleSk7XG4gICAgbW9kZWwuZW5hYmxlZCA/Pz0gdHJ1ZTtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgc3VwZXIudXBkYXRlKG1vZGVsLCAuLi5hcmdzKTtcbiAgICB0aGlzLnNldENhY2hlZEZsYWcodXBkYXRlZCk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBmaW5kT25lQnkoXG4gICAga2V5OiBrZXlvZiBGZWF0dXJlRmxhZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWc+IHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPVxuICAgICAga2V5ID09PSBcImtleVwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKHZhbHVlKVxuICAgICAgICA6IHZhbHVlO1xuICAgIHJldHVybiB0aGlzLnJlcG8uZmluZE9uZUJ5KGtleSwgbm9ybWFsaXplZFZhbHVlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlYWRBbGwoXG4gICAga2V5czogYW55W10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1tdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXBvLnJlYWRBbGwoa2V5cywgLi4uYXJncyk7XG4gICAgZm9yIChjb25zdCBmbGFnIG9mIHJlc3VsdCkgdGhpcy5zZXRDYWNoZWRGbGFnKGZsYWcpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsaXN0RW5hYmxlZCguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8RmVhdHVyZUZsYWdbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG9cbiAgICAgIC5zZWxlY3QoKVxuICAgICAgLndoZXJlKENvbmRpdGlvbi5hdHRyPEZlYXR1cmVGbGFnPihcImVuYWJsZWRcIikuZXEodHJ1ZSkpXG4gICAgICAuZXhlY3V0ZSguLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGdyYW50RmVhdHVyZUFjY2VzcyhcbiAgICBpbnB1dDogRmVhdHVyZUZsYWdBY2Nlc3NJbnB1dCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEZlYXR1cmVGbGFnQWNjZXNzPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplRmVhdHVyZUFjY2Vzc0lucHV0KGlucHV0KTtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZmluZEZlYXR1cmVBY2Nlc3Mobm9ybWFsaXplZCwgLi4uYXJncykuY2F0Y2goXG4gICAgICAoKSA9PiB1bmRlZmluZWRcbiAgICApO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEFjY2Vzc1JlcG9zaXRvcnkoKS5jcmVhdGUoXG4gICAgICAgIG5ldyBGZWF0dXJlRmxhZ0FjY2Vzcyhub3JtYWxpemVkKSxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWNjZXNzUmVwb3NpdG9yeSgpLnVwZGF0ZShcbiAgICAgIE9iamVjdC5hc3NpZ24oZXhpc3RpbmcsIG5vcm1hbGl6ZWQpLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyByZXZva2VGZWF0dXJlQWNjZXNzKFxuICAgIGlucHV0OiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3QgJiB7IGZlYXR1cmVLZXk6IHN0cmluZyB9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdBY2Nlc3MgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZmluZEZlYXR1cmVBY2Nlc3MoaW5wdXQsIC4uLmFyZ3MpLmNhdGNoKFxuICAgICAgKCkgPT4gdW5kZWZpbmVkXG4gICAgKTtcbiAgICBpZiAoIWV4aXN0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmdldEFjY2Vzc1JlcG9zaXRvcnkoKS5kZWxldGUoZXhpc3RpbmcuaWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgZmluZEZlYXR1cmVBY2Nlc3MoXG4gICAgcXVlcnk6IEZlYXR1cmVGbGFnQWNjZXNzUXVlcnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ0FjY2Vzcz4ge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuYnVpbGRBY2Nlc3NDb25kaXRpb24ocXVlcnkpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc1JlcG9zaXRvcnkoKVxuICAgICAgLnNlbGVjdCgpXG4gICAgICAud2hlcmUoY29uZGl0aW9uKVxuICAgICAgLmV4ZWN1dGUoLi4uYXJncyk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSByZXN1bHRzWzBdO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgICBgRmVhdHVyZSBhY2Nlc3MgZm9yICR7bm9ybWFsaXplRmVhdHVyZVN1YmplY3RUeXBlKHF1ZXJ5LnN1YmplY3RUeXBlKX06JHtub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleShxdWVyeS5zdWJqZWN0S2V5KX0gbm90IGZvdW5kYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgYXN5bmMgbGlzdEZlYXR1cmVBY2Nlc3MoXG4gICAgcXVlcnk6IEZlYXR1cmVGbGFnQWNjZXNzUXVlcnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ0FjY2Vzc1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWNjZXNzUmVwb3NpdG9yeSgpXG4gICAgICAuc2VsZWN0KClcbiAgICAgIC53aGVyZSh0aGlzLmJ1aWxkQWNjZXNzQ29uZGl0aW9uKHF1ZXJ5KSlcbiAgICAgIC5leGVjdXRlKC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZUZlYXR1cmVGbGFnc0ZvclN1YmplY3QoXG4gICAgc3ViamVjdDogRmVhdHVyZUZsYWdBY2Nlc3NTdWJqZWN0LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdSZWdpc3RyeT4ge1xuICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCB0aGlzLmxpc3RGZWF0dXJlQWNjZXNzKFxuICAgICAge1xuICAgICAgICAuLi5zdWJqZWN0LFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGNvbnN0IGZlYXR1cmVLZXlzID0gWy4uLm5ldyBTZXQoYWNjZXNzLm1hcCgoaXRlbSkgPT4gaXRlbS5mZWF0dXJlS2V5KSldO1xuICAgIGlmIChmZWF0dXJlS2V5cy5sZW5ndGggPT09IDApIHJldHVybiB7fTtcblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IENvbmRpdGlvbi5hdHRyPEZlYXR1cmVGbGFnPihcImVuYWJsZWRcIikuZXEodHJ1ZSkuYW5kKFxuICAgICAgQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWc+KFwia2V5XCIpLmluKFxuICAgICAgICBmZWF0dXJlS2V5cy5tYXAobm9ybWFsaXplRmVhdHVyZU5hbWUpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGVuYWJsZWRGbGFncyA9IGF3YWl0IHRoaXMucmVwby5zZWxlY3QoKS53aGVyZShjb25kaXRpb24pLmV4ZWN1dGUoLi4uYXJncyk7XG4gICAgcmV0dXJuIGVuYWJsZWRGbGFncy5yZWR1Y2UoKHJlZ2lzdHJ5LCBmbGFnKSA9PiB7XG4gICAgICByZWdpc3RyeVtmbGFnLmtleV0gPSBmbGFnLmNvbmZpZyA/PyB0cnVlO1xuICAgICAgcmV0dXJuIHJlZ2lzdHJ5O1xuICAgIH0sIHt9IGFzIEZlYXR1cmVGbGFnUmVnaXN0cnkpO1xuICB9XG5cbiAgYXN5bmMgaXNFbmFibGVkRm9yU3ViamVjdChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBzdWJqZWN0OiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3QsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCB0aGlzLnJlc29sdmVGZWF0dXJlRmxhZ3NGb3JTdWJqZWN0KHN1YmplY3QsIC4uLmFyZ3MpO1xuICAgIHJldHVybiBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwga2V5KTtcbiAgfVxuXG4gIGlzRW5hYmxlZChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gbm9ybWFsaXplRmVhdHVyZU5hbWUoa2V5KTtcbiAgICByZXR1cm4gaXNGZWF0dXJlRmxhZ0VuYWJsZWRCeU5hbWUodGhpcy5jYWNoZWRSZWdpc3RyeSwgbm9ybWFsaXplZEtleSk7XG4gIH1cblxuICBhc3luYyByZXNvbHZlRmVhdHVyZUZsYWdzKCk6IFByb21pc2U8RmVhdHVyZUZsYWdSZWdpc3RyeT4ge1xuICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jbG9uZVJlZ2lzdHJ5KHRoaXMuY2FjaGVkUmVnaXN0cnkpO1xuICB9XG5cbiAgYXN5bmMgc3luY0Zyb21FbnZpcm9ubWVudChcbiAgICBvcHRpb25zOiBGZWF0dXJlRmxhZ1JlYWRlcklucHV0ID0ge30sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1tdPiB7XG4gICAgdGhpcy5hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYXdhaXQgdGhpcy5yZWFkZXIucmVhZCh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdHM6IEZlYXR1cmVGbGFnW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWdpc3RyeSkpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9XG4gICAgICAgIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/ICh2YWx1ZSBhcyBGZWF0dXJlRmxhZ0NvbmZpZylcbiAgICAgICAgICA6IHsgZW5hYmxlZDogQm9vbGVhbih2YWx1ZSkgfTtcbiAgICAgIGNvbnN0IHsgZW5hYmxlZDogX2lnbm9yZWRFbmFibGVkLCAuLi5yZXN0Q29uZmlnIH0gPSBjb25maWc7XG4gICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gbm9ybWFsaXplRmVhdHVyZU5hbWUoa2V5KTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5maW5kT25lQnkoXG4gICAgICAgIFwia2V5XCIsXG4gICAgICAgIG5vcm1hbGl6ZWRLZXksXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IG1vZGVsID0gZXhpc3RpbmdcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKGV4aXN0aW5nLCB7XG4gICAgICAgICAgICBlbmFibGVkOiBpc0ZlYXR1cmVGbGFnRW5hYmxlZCh2YWx1ZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzdENvbmZpZy5kZXNjcmlwdGlvbiA/PyBleGlzdGluZy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjb3BlOiByZXN0Q29uZmlnLnNjb3BlID8/IGV4aXN0aW5nLnNjb3BlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc3RDb25maWcubWV0YWRhdGEgPz8gZXhpc3RpbmcubWV0YWRhdGEsXG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgLi4ucmVzdENvbmZpZyxcbiAgICAgICAgICAgICAgZW5hYmxlZDogaXNGZWF0dXJlRmxhZ0VuYWJsZWQodmFsdWUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IG5ldyBGZWF0dXJlRmxhZyh7XG4gICAgICAgICAgICBrZXk6IG5vcm1hbGl6ZWRLZXksXG4gICAgICAgICAgICBlbmFibGVkOiBpc0ZlYXR1cmVGbGFnRW5hYmxlZCh2YWx1ZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzdENvbmZpZy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjb3BlOiByZXN0Q29uZmlnLnNjb3BlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc3RDb25maWcubWV0YWRhdGEsXG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgLi4ucmVzdENvbmZpZyxcbiAgICAgICAgICAgICAgZW5hYmxlZDogaXNGZWF0dXJlRmxhZ0VuYWJsZWQodmFsdWUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgIHJlc3VsdHMucHVzaChleGlzdGluZyA/IGF3YWl0IHRoaXMudXBkYXRlKG1vZGVsLCAuLi5hcmdzKSA6IGF3YWl0IHRoaXMuY3JlYXRlKG1vZGVsLCAuLi5hcmdzKSk7XG4gICAgfVxuICAgIHRoaXMuY2FjaGVkUmVnaXN0cnkgPSBhd2FpdCB0aGlzLnJlZnJlc2hDYWNoZWRSZWdpc3RyeShcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG59XG4iXX0=
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmVhdHVyZUZsYWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mZWF0dXJlLWZsYWdzL3NlcnZpY2VzL0ZlYXR1cmVGbGFnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUF1QjtBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsK0NBQTBDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUseUNBQW9DO0FBQzFELE9BQU8sRUFDTCxtQkFBbUIsR0FHcEIsOEJBQW1CO0FBVXBCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMEJBQTBCLEVBQzFCLG9CQUFvQixHQUNyQixzQkFBaUI7QUFDbEIsT0FBTyxFQUNMLDBCQUEwQixFQUMxQiwyQkFBMkIsR0FDNUIsc0JBQWlCO0FBUVgsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBbUIsU0FBUSxZQUF5QjtJQU0vRDtRQUNFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQU5iLFdBQU0sR0FBc0IsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQ3RELG1CQUFjLEdBQXdCLEVBQUUsQ0FBQztJQU1qRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FDZCxHQUFHLElBQVc7UUFFZCxNQUFNLE1BQU0sR0FBSSxJQUFJLENBQUMsQ0FBQyxDQUEwQyxJQUFJLEVBQUUsQ0FBQztRQUN2RSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFpQixDQUFDO1FBQzlDLENBQUM7UUFDRCxJQUFJLENB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QUFFLGFBQWE7b0JBQ2xCLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7b0JBQ3BDLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztvQkFDbkMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO29CQUN2QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7b0JBQzdCLE1BQU0sRUFBRTt3QkFDTixHQUFHLFVBQVU7d0JBQ2IsT0FBTyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQztxQkFDckM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ1AsT0FBTyxDQUFDLElBQUksQ0FDVixRQUFRO2dCQUNOLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUN0QyxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQ3BEO1lBQ0UsR0FBRyxPQUFPO1lBQ1YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksc0JBQXNCO1NBQ2pELEVBQ0QsR0FBRyxJQUFJLENBQ1IsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRixDQUFBO0FBaFZXO0lBRFQsVUFBVSxDQUFDLGlCQUFpQixDQUFDOzs0REFDdUI7QUFKMUMsa0JBQWtCO0lBRDlCLE9BQU8sQ0FBQyxXQUFXLENBQUM7O0dBQ1Isa0JBQWtCLENBb1Y5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbmRpdGlvbixcbiAgTW9kZWxTZXJ2aWNlLFxuICBSZXBvc2l0b3J5LFxuICByZXBvc2l0b3J5LFxuICBzZXJ2aWNlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgUmVwbyB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgTm90Rm91bmRFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdBY2Nlc3MgfSBmcm9tIFwiLi4vbW9kZWxzL0ZlYXR1cmVGbGFnQWNjZXNzLm1vZGVsXCI7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZyB9IGZyb20gXCIuLi9tb2RlbHMvRmVhdHVyZUZsYWcubW9kZWxcIjtcbmltcG9ydCB7XG4gIEVudmlyb25tZUZsYWdSZWFkZXIsXG4gIEZlYXR1cmVGbGFnUmVhZGVyLFxuICBGZWF0dXJlRmxhZ1JlYWRlckxpa2UsXG59IGZyb20gXCIuLi9yZWFkZXJzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZlYXR1cmVGbGFnQWNjZXNzSW5wdXQsXG4gIEZlYXR1cmVGbGFnQWNjZXNzUXVlcnksXG4gIEZlYXR1cmVGbGFnQWNjZXNzU3ViamVjdCxcbiAgRmVhdHVyZUZsYWdDb25maWcsXG4gIEZlYXR1cmVGbGFnUmVhZGVyQ29uZmlnLFxuICBGZWF0dXJlRmxhZ1JlYWRlcklucHV0LFxuICBGZWF0dXJlRmxhZ1JlZ2lzdHJ5LFxufSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGlzRmVhdHVyZUZsYWdFbmFibGVkLFxuICBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZSxcbiAgbm9ybWFsaXplRmVhdHVyZU5hbWUsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgbm9ybWFsaXplRmVhdHVyZVN1YmplY3RLZXksXG4gIG5vcm1hbGl6ZUZlYXR1cmVTdWJqZWN0VHlwZSxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVhdHVyZUZsYWdTZXJ2aWNlQ29uZmlnIGV4dGVuZHMgRmVhdHVyZUZsYWdSZWFkZXJDb25maWcge1xuICByZWFkZXI/OiBGZWF0dXJlRmxhZ1JlYWRlckxpa2U7XG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5PEZlYXR1cmVGbGFnLCBhbnk+O1xufVxuXG5Ac2VydmljZShGZWF0dXJlRmxhZylcbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ1NlcnZpY2UgZXh0ZW5kcyBNb2RlbFNlcnZpY2U8RmVhdHVyZUZsYWc+IHtcbiAgcHJpdmF0ZSByZWFkZXI6IEZlYXR1cmVGbGFnUmVhZGVyID0gbmV3IEVudmlyb25tZUZsYWdSZWFkZXIoKTtcbiAgcHJpdmF0ZSBjYWNoZWRSZWdpc3RyeTogRmVhdHVyZUZsYWdSZWdpc3RyeSA9IHt9O1xuICBAcmVwb3NpdG9yeShGZWF0dXJlRmxhZ0FjY2VzcylcbiAgcHJvdGVjdGVkIGFjY2Vzc1JlcG9zaXRvcnkhOiBSZXBvPEZlYXR1cmVGbGFnQWNjZXNzPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihGZWF0dXJlRmxhZyk7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8eyBjb25maWc6IEZlYXR1cmVGbGFnU2VydmljZUNvbmZpZzsgY2xpZW50OiBGZWF0dXJlRmxhZ1JlYWRlciB9PiB7XG4gICAgY29uc3QgY29uZmlnID0gKGFyZ3NbMF0gYXMgRmVhdHVyZUZsYWdTZXJ2aWNlQ29uZmlnIHwgdW5kZWZpbmVkKSA/PyB7fTtcbiAgICBpZiAoY29uZmlnLnJlcG9zaXRvcnkpIHtcbiAgICAgIHRoaXMuX3JlcG9zaXRvcnkgPSBjb25maWcucmVwb3NpdG9yeSBhcyBhbnk7XG4gICAgfVxuICAgIHRoaXMucmVhZGVyID0gIWNvbmZpZy5yZWFkZXJcbiAgICAgID8gbmV3IEVudmlyb25tZUZsYWdSZWFkZXIoKVxuICAgICAgOiB0eXBlb2YgY29uZmlnLnJlYWRlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gbmV3IGNvbmZpZy5yZWFkZXIoKVxuICAgICAgICA6IGNvbmZpZy5yZWFkZXI7XG4gICAgY29uc3QgcmVhZGVyQ29uZmlnID0ge1xuICAgICAgLi4uKGNvbmZpZy5yZWFkZXJDb25maWcgPz8ge30pLFxuICAgICAgc291cmNlOiBjb25maWcucmVhZGVyQ29uZmlnPy5zb3VyY2UgPz8gRmVhdHVyZUZsYWdFbnZpcm9ubWVudCxcbiAgICB9O1xuICAgIHRoaXMuY2FjaGVkUmVnaXN0cnkgPSBhd2FpdCB0aGlzLnJlZnJlc2hDYWNoZWRSZWdpc3RyeShcbiAgICAgIHJlYWRlckNvbmZpZyxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGNvbnN0IGVmZmVjdGl2ZUNvbmZpZzogRmVhdHVyZUZsYWdTZXJ2aWNlQ29uZmlnID0ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgcmVhZGVyOiB0aGlzLnJlYWRlcixcbiAgICAgIHJlYWRlckNvbmZpZyxcbiAgICB9O1xuICAgIHJldHVybiB7IGNvbmZpZzogZWZmZWN0aXZlQ29uZmlnLCBjbGllbnQ6IHRoaXMucmVhZGVyIH07XG4gIH1cblxuICBwcml2YXRlIGNsb25lUmVnaXN0cnkocmVnaXN0cnk6IEZlYXR1cmVGbGFnUmVnaXN0cnkpOiBGZWF0dXJlRmxhZ1JlZ2lzdHJ5IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVnaXN0cnkpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID1cbiAgICAgICAgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gKHsgLi4uKHZhbHVlIGFzIEZlYXR1cmVGbGFnQ29uZmlnKSB9IGFzIEZlYXR1cmVGbGFnQ29uZmlnKVxuICAgICAgICAgIDogdmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIEZlYXR1cmVGbGFnUmVnaXN0cnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoQ2FjaGVkUmVnaXN0cnkoXG4gICAgb3B0aW9uczogRmVhdHVyZUZsYWdSZWFkZXJJbnB1dCA9IHt9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdSZWdpc3RyeT4ge1xuICAgIGNvbnN0IGVudlJlZ2lzdHJ5ID0gYXdhaXQgdGhpcy5yZWFkZXIucmVhZCh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50LFxuICAgIH0pO1xuICAgIGxldCBwZXJzaXN0ZWQ6IEZlYXR1cmVGbGFnW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgcGVyc2lzdGVkID0gYXdhaXQgdGhpcy5yZXBvLnNlbGVjdCgpLmV4ZWN1dGUoLi4uYXJncyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBwZXJzaXN0ZWQgPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdpc3RyeSA9IHRoaXMuY2xvbmVSZWdpc3RyeShlbnZSZWdpc3RyeSk7XG4gICAgZm9yIChjb25zdCBmbGFnIG9mIHBlcnNpc3RlZCkge1xuICAgICAgcmVnaXN0cnlbZmxhZy5rZXldID0gZmxhZy5lbmFibGVkID8gKGZsYWcuY29uZmlnID8/IHRydWUpIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FjaGVkRmxhZyhmbGFnOiBGZWF0dXJlRmxhZyk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGVkUmVnaXN0cnlbZmxhZy5rZXldID0gZmxhZy5lbmFibGVkXG4gICAgICA/IChmbGFnLmNvbmZpZyA/PyB0cnVlKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWNjZXNzUmVwb3NpdG9yeSgpOiBSZXBvPEZlYXR1cmVGbGFnQWNjZXNzPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjZXNzUmVwb3NpdG9yeSA/PyBSZXBvc2l0b3J5LmZvck1vZGVsKEZlYXR1cmVGbGFnQWNjZXNzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0SW5pdGlhbGl6ZWQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnJlYWRlcjtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRmVhdHVyZUFjY2Vzc0lucHV0KFxuICAgIGlucHV0OiBGZWF0dXJlRmxhZ0FjY2Vzc0lucHV0XG4gICk6IEZlYXR1cmVGbGFnQWNjZXNzSW5wdXQge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIGZlYXR1cmVLZXk6IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKGlucHV0LmZlYXR1cmVLZXkpLFxuICAgICAgc3ViamVjdFR5cGU6IG5vcm1hbGl6ZUZlYXR1cmVTdWJqZWN0VHlwZShpbnB1dC5zdWJqZWN0VHlwZSksXG4gICAgICBzdWJqZWN0S2V5OiBub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleShpbnB1dC5zdWJqZWN0S2V5KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFjY2Vzc0NvbmRpdGlvbihcbiAgICBxdWVyeTogRmVhdHVyZUZsYWdBY2Nlc3NRdWVyeVxuICApOiBDb25kaXRpb248RmVhdHVyZUZsYWdBY2Nlc3M+IHtcbiAgICBsZXQgY29uZGl0aW9uID0gQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWdBY2Nlc3M+KFwic3ViamVjdFR5cGVcIikuZXEoXG4gICAgICBub3JtYWxpemVGZWF0dXJlU3ViamVjdFR5cGUocXVlcnkuc3ViamVjdFR5cGUpXG4gICAgKTtcbiAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYW5kKFxuICAgICAgQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWdBY2Nlc3M+KFwic3ViamVjdEtleVwiKS5lcShcbiAgICAgICAgbm9ybWFsaXplRmVhdHVyZVN1YmplY3RLZXkocXVlcnkuc3ViamVjdEtleSlcbiAgICAgIClcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcXVlcnkuZW5hYmxlZCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFuZChcbiAgICAgICAgQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWdBY2Nlc3M+KFwiZW5hYmxlZFwiKS5lcShxdWVyeS5lbmFibGVkKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LmZlYXR1cmVLZXlzICYmIHF1ZXJ5LmZlYXR1cmVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hbmQoXG4gICAgICAgIENvbmRpdGlvbi5hdHRyPEZlYXR1cmVGbGFnQWNjZXNzPihcImZlYXR1cmVLZXlcIikuaW4oXG4gICAgICAgICAgcXVlcnkuZmVhdHVyZUtleXMubWFwKG5vcm1hbGl6ZUZlYXR1cmVOYW1lKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY29uZGl0aW9uO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlKFxuICAgIG1vZGVsOiBGZWF0dXJlRmxhZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEZlYXR1cmVGbGFnPiB7XG4gICAgbW9kZWwua2V5ID0gbm9ybWFsaXplRmVhdHVyZU5hbWUobW9kZWwua2V5KTtcbiAgICBtb2RlbC5lbmFibGVkID8/PSB0cnVlO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBzdXBlci5jcmVhdGUobW9kZWwsIC4uLmFyZ3MpO1xuICAgIHRoaXMuc2V0Q2FjaGVkRmxhZyhjcmVhdGVkKTtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZShcbiAgICBtb2RlbDogRmVhdHVyZUZsYWcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZz4ge1xuICAgIG1vZGVsLmtleSA9IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKG1vZGVsLmtleSk7XG4gICAgbW9kZWwuZW5hYmxlZCA/Pz0gdHJ1ZTtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgc3VwZXIudXBkYXRlKG1vZGVsLCAuLi5hcmdzKTtcbiAgICB0aGlzLnNldENhY2hlZEZsYWcodXBkYXRlZCk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBmaW5kT25lQnkoXG4gICAga2V5OiBrZXlvZiBGZWF0dXJlRmxhZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWc+IHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPVxuICAgICAga2V5ID09PSBcImtleVwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKHZhbHVlKVxuICAgICAgICA6IHZhbHVlO1xuICAgIHJldHVybiB0aGlzLnJlcG8uZmluZE9uZUJ5KGtleSwgbm9ybWFsaXplZFZhbHVlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlYWRBbGwoa2V5czogYW55W10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1tdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXBvLnJlYWRBbGwoa2V5cywgLi4uYXJncyk7XG4gICAgZm9yIChjb25zdCBmbGFnIG9mIHJlc3VsdCkgdGhpcy5zZXRDYWNoZWRGbGFnKGZsYWcpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsaXN0RW5hYmxlZCguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8RmVhdHVyZUZsYWdbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG9cbiAgICAgIC5zZWxlY3QoKVxuICAgICAgLndoZXJlKENvbmRpdGlvbi5hdHRyPEZlYXR1cmVGbGFnPihcImVuYWJsZWRcIikuZXEodHJ1ZSkpXG4gICAgICAuZXhlY3V0ZSguLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGdyYW50RmVhdHVyZUFjY2VzcyhcbiAgICBpbnB1dDogRmVhdHVyZUZsYWdBY2Nlc3NJbnB1dCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEZlYXR1cmVGbGFnQWNjZXNzPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplRmVhdHVyZUFjY2Vzc0lucHV0KGlucHV0KTtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZmluZEZlYXR1cmVBY2Nlc3Mobm9ybWFsaXplZCwgLi4uYXJncykuY2F0Y2goXG4gICAgICAoKSA9PiB1bmRlZmluZWRcbiAgICApO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEFjY2Vzc1JlcG9zaXRvcnkoKS5jcmVhdGUoXG4gICAgICAgIG5ldyBGZWF0dXJlRmxhZ0FjY2Vzcyhub3JtYWxpemVkKSxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWNjZXNzUmVwb3NpdG9yeSgpLnVwZGF0ZShcbiAgICAgIE9iamVjdC5hc3NpZ24oZXhpc3RpbmcsIG5vcm1hbGl6ZWQpLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyByZXZva2VGZWF0dXJlQWNjZXNzKFxuICAgIGlucHV0OiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3QgJiB7IGZlYXR1cmVLZXk6IHN0cmluZyB9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdBY2Nlc3MgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZmluZEZlYXR1cmVBY2Nlc3MoaW5wdXQsIC4uLmFyZ3MpLmNhdGNoKFxuICAgICAgKCkgPT4gdW5kZWZpbmVkXG4gICAgKTtcbiAgICBpZiAoIWV4aXN0aW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmdldEFjY2Vzc1JlcG9zaXRvcnkoKS5kZWxldGUoZXhpc3RpbmcuaWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgZmluZEZlYXR1cmVBY2Nlc3MoXG4gICAgcXVlcnk6IEZlYXR1cmVGbGFnQWNjZXNzUXVlcnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ0FjY2Vzcz4ge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuYnVpbGRBY2Nlc3NDb25kaXRpb24ocXVlcnkpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc1JlcG9zaXRvcnkoKVxuICAgICAgLnNlbGVjdCgpXG4gICAgICAud2hlcmUoY29uZGl0aW9uKVxuICAgICAgLmV4ZWN1dGUoLi4uYXJncyk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSByZXN1bHRzWzBdO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgICBgRmVhdHVyZSBhY2Nlc3MgZm9yICR7bm9ybWFsaXplRmVhdHVyZVN1YmplY3RUeXBlKHF1ZXJ5LnN1YmplY3RUeXBlKX06JHtub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleShxdWVyeS5zdWJqZWN0S2V5KX0gbm90IGZvdW5kYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgYXN5bmMgbGlzdEZlYXR1cmVBY2Nlc3MoXG4gICAgcXVlcnk6IEZlYXR1cmVGbGFnQWNjZXNzUXVlcnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ0FjY2Vzc1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWNjZXNzUmVwb3NpdG9yeSgpXG4gICAgICAuc2VsZWN0KClcbiAgICAgIC53aGVyZSh0aGlzLmJ1aWxkQWNjZXNzQ29uZGl0aW9uKHF1ZXJ5KSlcbiAgICAgIC5leGVjdXRlKC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZUZlYXR1cmVGbGFnc0ZvclN1YmplY3QoXG4gICAgc3ViamVjdDogRmVhdHVyZUZsYWdBY2Nlc3NTdWJqZWN0LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdSZWdpc3RyeT4ge1xuICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCB0aGlzLmxpc3RGZWF0dXJlQWNjZXNzKFxuICAgICAge1xuICAgICAgICAuLi5zdWJqZWN0LFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGNvbnN0IGZlYXR1cmVLZXlzID0gWy4uLm5ldyBTZXQoYWNjZXNzLm1hcCgoaXRlbSkgPT4gaXRlbS5mZWF0dXJlS2V5KSldO1xuICAgIGlmIChmZWF0dXJlS2V5cy5sZW5ndGggPT09IDApIHJldHVybiB7fTtcblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IENvbmRpdGlvbi5hdHRyPEZlYXR1cmVGbGFnPihcImVuYWJsZWRcIilcbiAgICAgIC5lcSh0cnVlKVxuICAgICAgLmFuZChcbiAgICAgICAgQ29uZGl0aW9uLmF0dHI8RmVhdHVyZUZsYWc+KFwia2V5XCIpLmluKFxuICAgICAgICAgIGZlYXR1cmVLZXlzLm1hcChub3JtYWxpemVGZWF0dXJlTmFtZSlcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIGNvbnN0IGVuYWJsZWRGbGFncyA9IGF3YWl0IHRoaXMucmVwb1xuICAgICAgLnNlbGVjdCgpXG4gICAgICAud2hlcmUoY29uZGl0aW9uKVxuICAgICAgLmV4ZWN1dGUoLi4uYXJncyk7XG4gICAgcmV0dXJuIGVuYWJsZWRGbGFncy5yZWR1Y2UoKHJlZ2lzdHJ5LCBmbGFnKSA9PiB7XG4gICAgICByZWdpc3RyeVtmbGFnLmtleV0gPSBmbGFnLmNvbmZpZyA/PyB0cnVlO1xuICAgICAgcmV0dXJuIHJlZ2lzdHJ5O1xuICAgIH0sIHt9IGFzIEZlYXR1cmVGbGFnUmVnaXN0cnkpO1xuICB9XG5cbiAgYXN5bmMgaXNFbmFibGVkRm9yU3ViamVjdChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBzdWJqZWN0OiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3QsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCB0aGlzLnJlc29sdmVGZWF0dXJlRmxhZ3NGb3JTdWJqZWN0KHN1YmplY3QsIC4uLmFyZ3MpO1xuICAgIHJldHVybiBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwga2V5KTtcbiAgfVxuXG4gIGlzRW5hYmxlZChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gbm9ybWFsaXplRmVhdHVyZU5hbWUoa2V5KTtcbiAgICByZXR1cm4gaXNGZWF0dXJlRmxhZ0VuYWJsZWRCeU5hbWUodGhpcy5jYWNoZWRSZWdpc3RyeSwgbm9ybWFsaXplZEtleSk7XG4gIH1cblxuICBhc3luYyByZXNvbHZlRmVhdHVyZUZsYWdzKCk6IFByb21pc2U8RmVhdHVyZUZsYWdSZWdpc3RyeT4ge1xuICAgIHRoaXMuYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jbG9uZVJlZ2lzdHJ5KHRoaXMuY2FjaGVkUmVnaXN0cnkpO1xuICB9XG5cbiAgYXN5bmMgc3luY0Zyb21FbnZpcm9ubWVudChcbiAgICBvcHRpb25zOiBGZWF0dXJlRmxhZ1JlYWRlcklucHV0ID0ge30sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1tdPiB7XG4gICAgdGhpcy5hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYXdhaXQgdGhpcy5yZWFkZXIucmVhZCh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc291cmNlOiBvcHRpb25zLnNvdXJjZSA/PyBGZWF0dXJlRmxhZ0Vudmlyb25tZW50LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdHM6IEZlYXR1cmVGbGFnW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWdpc3RyeSkpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9XG4gICAgICAgIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/ICh2YWx1ZSBhcyBGZWF0dXJlRmxhZ0NvbmZpZylcbiAgICAgICAgICA6IHsgZW5hYmxlZDogQm9vbGVhbih2YWx1ZSkgfTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIGNvbnN0IHsgZW5hYmxlZDogX2lnbm9yZWRFbmFibGVkLCAuLi5yZXN0Q29uZmlnIH0gPSBjb25maWc7XG4gICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gbm9ybWFsaXplRmVhdHVyZU5hbWUoa2V5KTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5maW5kT25lQnkoXG4gICAgICAgIFwia2V5XCIsXG4gICAgICAgIG5vcm1hbGl6ZWRLZXksXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IG1vZGVsID0gZXhpc3RpbmdcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKGV4aXN0aW5nLCB7XG4gICAgICAgICAgICBlbmFibGVkOiBpc0ZlYXR1cmVGbGFnRW5hYmxlZCh2YWx1ZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzdENvbmZpZy5kZXNjcmlwdGlvbiA/PyBleGlzdGluZy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjb3BlOiByZXN0Q29uZmlnLnNjb3BlID8/IGV4aXN0aW5nLnNjb3BlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc3RDb25maWcubWV0YWRhdGEgPz8gZXhpc3RpbmcubWV0YWRhdGEsXG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgLi4ucmVzdENvbmZpZyxcbiAgICAgICAgICAgICAgZW5hYmxlZDogaXNGZWF0dXJlRmxhZ0VuYWJsZWQodmFsdWUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IG5ldyBGZWF0dXJlRmxhZyh7XG4gICAgICAgICAgICBrZXk6IG5vcm1hbGl6ZWRLZXksXG4gICAgICAgICAgICBlbmFibGVkOiBpc0ZlYXR1cmVGbGFnRW5hYmxlZCh2YWx1ZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzdENvbmZpZy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjb3BlOiByZXN0Q29uZmlnLnNjb3BlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlc3RDb25maWcubWV0YWRhdGEsXG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgLi4ucmVzdENvbmZpZyxcbiAgICAgICAgICAgICAgZW5hYmxlZDogaXNGZWF0dXJlRmxhZ0VuYWJsZWQodmFsdWUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgIHJlc3VsdHMucHVzaChcbiAgICAgICAgZXhpc3RpbmdcbiAgICAgICAgICA/IGF3YWl0IHRoaXMudXBkYXRlKG1vZGVsLCAuLi5hcmdzKVxuICAgICAgICAgIDogYXdhaXQgdGhpcy5jcmVhdGUobW9kZWwsIC4uLmFyZ3MpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlZFJlZ2lzdHJ5ID0gYXdhaXQgdGhpcy5yZWZyZXNoQ2FjaGVkUmVnaXN0cnkoXG4gICAgICB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHNvdXJjZTogb3B0aW9ucy5zb3VyY2UgPz8gRmVhdHVyZUZsYWdFbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxufVxuIl19
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @module integrations/graph/errors/GraphBreakSignal
3
+ * @summary Control-flow signal used by `core.flow.break` to exit a loop early.
4
+ * @description Thrown by the Break node executor and caught by the enclosing
5
+ * loop executor (`core.loop.foreach`, `core.loop.while`, `core.loop.until`).
6
+ * Unlike a real error, a break signal is a cooperative control-flow token: it
7
+ * is NOT propagated as a workflow failure. When caught, the loop terminates
8
+ * early and returns the results collected so far (plus the optional `value`
9
+ * carried by the signal as the final partial result).
10
+ */
11
+ import { GraphExecutionError } from "./GraphExecutionError.js";
12
+ /**
13
+ * Control-flow signal thrown by `core.flow.break` nodes.
14
+ *
15
+ * Extends {@link GraphExecutionError} so it rides on the existing error
16
+ * pipeline, but carries the `graphCode` `"GRAPH_BREAK_SIGNAL"` and the flag
17
+ * `isBreakSignal = true` so loop executors can distinguish it from a genuine
18
+ * execution failure via `instanceof` or the flag.
19
+ */
20
+ export class GraphBreakSignal extends GraphExecutionError {
21
+ /**
22
+ * @param value - Optional value forwarded by the Break node. The enclosing
23
+ * loop appends this to the collected results as the last partial result.
24
+ */
25
+ constructor(value) {
26
+ super("Break signal", "GRAPH_BREAK_SIGNAL", { value });
27
+ /** Distinguishes a break signal from a genuine error without `instanceof`. */
28
+ this.isBreakSignal = true;
29
+ this.name = "GraphBreakSignal";
30
+ }
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhCcmVha1NpZ25hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ncmFwaC9lbmdpbmUvZXJyb3JzL0dyYXBoQnJlYWtTaWduYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBQ0gsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlDQUE4QjtBQUU1RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGdCQUFpQixTQUFRLG1CQUFtQjtJQUl2RDs7O09BR0c7SUFDSCxZQUFZLEtBQWU7UUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFSekQsOEVBQThFO1FBQ3JFLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBUTVCLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9lcnJvcnMvR3JhcGhCcmVha1NpZ25hbFxuICogQHN1bW1hcnkgQ29udHJvbC1mbG93IHNpZ25hbCB1c2VkIGJ5IGBjb3JlLmZsb3cuYnJlYWtgIHRvIGV4aXQgYSBsb29wIGVhcmx5LlxuICogQGRlc2NyaXB0aW9uIFRocm93biBieSB0aGUgQnJlYWsgbm9kZSBleGVjdXRvciBhbmQgY2F1Z2h0IGJ5IHRoZSBlbmNsb3NpbmdcbiAqIGxvb3AgZXhlY3V0b3IgKGBjb3JlLmxvb3AuZm9yZWFjaGAsIGBjb3JlLmxvb3Aud2hpbGVgLCBgY29yZS5sb29wLnVudGlsYCkuXG4gKiBVbmxpa2UgYSByZWFsIGVycm9yLCBhIGJyZWFrIHNpZ25hbCBpcyBhIGNvb3BlcmF0aXZlIGNvbnRyb2wtZmxvdyB0b2tlbjogaXRcbiAqIGlzIE5PVCBwcm9wYWdhdGVkIGFzIGEgd29ya2Zsb3cgZmFpbHVyZS4gV2hlbiBjYXVnaHQsIHRoZSBsb29wIHRlcm1pbmF0ZXNcbiAqIGVhcmx5IGFuZCByZXR1cm5zIHRoZSByZXN1bHRzIGNvbGxlY3RlZCBzbyBmYXIgKHBsdXMgdGhlIG9wdGlvbmFsIGB2YWx1ZWBcbiAqIGNhcnJpZWQgYnkgdGhlIHNpZ25hbCBhcyB0aGUgZmluYWwgcGFydGlhbCByZXN1bHQpLlxuICovXG5pbXBvcnQgeyBHcmFwaEV4ZWN1dGlvbkVycm9yIH0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25FcnJvclwiO1xuXG4vKipcbiAqIENvbnRyb2wtZmxvdyBzaWduYWwgdGhyb3duIGJ5IGBjb3JlLmZsb3cuYnJlYWtgIG5vZGVzLlxuICpcbiAqIEV4dGVuZHMge0BsaW5rIEdyYXBoRXhlY3V0aW9uRXJyb3J9IHNvIGl0IHJpZGVzIG9uIHRoZSBleGlzdGluZyBlcnJvclxuICogcGlwZWxpbmUsIGJ1dCBjYXJyaWVzIHRoZSBgZ3JhcGhDb2RlYCBgXCJHUkFQSF9CUkVBS19TSUdOQUxcImAgYW5kIHRoZSBmbGFnXG4gKiBgaXNCcmVha1NpZ25hbCA9IHRydWVgIHNvIGxvb3AgZXhlY3V0b3JzIGNhbiBkaXN0aW5ndWlzaCBpdCBmcm9tIGEgZ2VudWluZVxuICogZXhlY3V0aW9uIGZhaWx1cmUgdmlhIGBpbnN0YW5jZW9mYCBvciB0aGUgZmxhZy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoQnJlYWtTaWduYWwgZXh0ZW5kcyBHcmFwaEV4ZWN1dGlvbkVycm9yIHtcbiAgLyoqIERpc3Rpbmd1aXNoZXMgYSBicmVhayBzaWduYWwgZnJvbSBhIGdlbnVpbmUgZXJyb3Igd2l0aG91dCBgaW5zdGFuY2VvZmAuICovXG4gIHJlYWRvbmx5IGlzQnJlYWtTaWduYWwgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBPcHRpb25hbCB2YWx1ZSBmb3J3YXJkZWQgYnkgdGhlIEJyZWFrIG5vZGUuIFRoZSBlbmNsb3NpbmdcbiAgICogICBsb29wIGFwcGVuZHMgdGhpcyB0byB0aGUgY29sbGVjdGVkIHJlc3VsdHMgYXMgdGhlIGxhc3QgcGFydGlhbCByZXN1bHQuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih2YWx1ZT86IHVua25vd24pIHtcbiAgICBzdXBlcihcIkJyZWFrIHNpZ25hbFwiLCBcIkdSQVBIX0JSRUFLX1NJR05BTFwiLCB7IHZhbHVlIH0pO1xuICAgIHRoaXMubmFtZSA9IFwiR3JhcGhCcmVha1NpZ25hbFwiO1xuICB9XG59XG4iXX0=
@@ -11,4 +11,5 @@ export * from "./GraphPinningError.js";
11
11
  export * from "./GraphPortError.js";
12
12
  export * from "./GraphStoreError.js";
13
13
  export * from "./GraphTopologyError.js";
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2Vycm9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gseUNBQXNDO0FBQ3RDLHFDQUFrQztBQUNsQyxxQ0FBa0M7QUFDbEMseUNBQXNDO0FBQ3RDLHVDQUFvQztBQUNwQyxvQ0FBaUM7QUFDakMscUNBQWtDO0FBQ2xDLHdDQUFxQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvZXJyb3JzXG4gKiBAc3VtbWFyeSBHcmFwaCBleGVjdXRpb24gZXJyb3IgY2xhc3Nlcy5cbiAqIEBkZXNjcmlwdGlvbiBSZS1leHBvcnRzIGFsbCBzdHJ1Y3R1cmVkIGVycm9yIHR5cGVzIHVzZWQgYnkgdGhlIGdyYXBoIGV4ZWN1dGlvbiBlbmdpbmUuXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uRXJyb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoQ3ljbGVFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhJbnB1dEVycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaExvb3BMaW1pdEVycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFBpbm5pbmdFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhQb3J0RXJyb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoU3RvcmVFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhUb3BvbG9neUVycm9yXCI7XG4iXX0=
14
+ export * from "./GraphBreakSignal.js";
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2Vycm9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gseUNBQXNDO0FBQ3RDLHFDQUFrQztBQUNsQyxxQ0FBa0M7QUFDbEMseUNBQXNDO0FBQ3RDLHVDQUFvQztBQUNwQyxvQ0FBaUM7QUFDakMscUNBQWtDO0FBQ2xDLHdDQUFxQztBQUNyQyxzQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL2Vycm9yc1xuICogQHN1bW1hcnkgR3JhcGggZXhlY3V0aW9uIGVycm9yIGNsYXNzZXMuXG4gKiBAZGVzY3JpcHRpb24gUmUtZXhwb3J0cyBhbGwgc3RydWN0dXJlZCBlcnJvciB0eXBlcyB1c2VkIGJ5IHRoZSBncmFwaCBleGVjdXRpb24gZW5naW5lLlxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvbkVycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaEN5Y2xlRXJyb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoSW5wdXRFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhMb29wTGltaXRFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhQaW5uaW5nRXJyb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoUG9ydEVycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFN0b3JlRXJyb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoVG9wb2xvZ3lFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhCcmVha1NpZ25hbFwiO1xuIl19
@@ -0,0 +1,17 @@
1
+ import { GraphBreakSignal } from "./../errors/GraphBreakSignal.js";
2
+ /**
3
+ * Executor for `core.flow.break` nodes.
4
+ *
5
+ * Reads the optional `value` input port and throws a {@link GraphBreakSignal}
6
+ * carrying it. The enclosing loop executor (`core.loop.foreach`,
7
+ * `core.loop.while`, `core.loop.until`) catches the signal, stops iterating,
8
+ * and returns the results collected so far (plus the carried value as the
9
+ * final partial result).
10
+ */
11
+ export class BreakGraphNodeExecutor {
12
+ async execute(input, _context) {
13
+ const value = input["value"];
14
+ throw new GraphBreakSignal(value);
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJlYWtHcmFwaE5vZGVFeGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ncmFwaC9lbmdpbmUvZXhlY3V0aW9uL0JyZWFrR3JhcGhOb2RlRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHdDQUFtQztBQUU5RDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsS0FBSyxDQUFDLE9BQU8sQ0FDWCxLQUEyQixFQUMzQixRQUErQjtRQUUvQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsTUFBTSxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvZXhlY3V0aW9uL0JyZWFrR3JhcGhOb2RlRXhlY3V0b3JcbiAqIEBzdW1tYXJ5IEV4ZWN1dG9yIGZvciB0aGUgQnJlYWsgZmxvdy1jb250cm9sIG5vZGUuXG4gKiBAZGVzY3JpcHRpb24gVGhyb3dzIGEge0BsaW5rIEdyYXBoQnJlYWtTaWduYWx9IHRoYXQgdGhlIGVuY2xvc2luZyBsb29wXG4gKiBleGVjdXRvciBjYXRjaGVzIHRvIHRlcm1pbmF0ZSB0aGUgbG9vcCBlYXJseS4gVGhlIG9wdGlvbmFsIGB2YWx1ZWAgaW5wdXQgaXNcbiAqIGNhcnJpZWQgb24gdGhlIHNpZ25hbCBzbyB0aGUgbG9vcCBjYW4gYXBwZW5kIGl0IGFzIHRoZSBsYXN0IHBhcnRpYWwgcmVzdWx0LlxuICovXG5pbXBvcnQgdHlwZSB7IEdyYXBoTm9kZUV4ZWN1dG9yIH0gZnJvbSBcIi4vR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uVmFsdWVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBHcmFwaEJyZWFrU2lnbmFsIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaEJyZWFrU2lnbmFsXCI7XG5cbi8qKlxuICogRXhlY3V0b3IgZm9yIGBjb3JlLmZsb3cuYnJlYWtgIG5vZGVzLlxuICpcbiAqIFJlYWRzIHRoZSBvcHRpb25hbCBgdmFsdWVgIGlucHV0IHBvcnQgYW5kIHRocm93cyBhIHtAbGluayBHcmFwaEJyZWFrU2lnbmFsfVxuICogY2FycnlpbmcgaXQuIFRoZSBlbmNsb3NpbmcgbG9vcCBleGVjdXRvciAoYGNvcmUubG9vcC5mb3JlYWNoYCxcbiAqIGBjb3JlLmxvb3Aud2hpbGVgLCBgY29yZS5sb29wLnVudGlsYCkgY2F0Y2hlcyB0aGUgc2lnbmFsLCBzdG9wcyBpdGVyYXRpbmcsXG4gKiBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cyBjb2xsZWN0ZWQgc28gZmFyIChwbHVzIHRoZSBjYXJyaWVkIHZhbHVlIGFzIHRoZVxuICogZmluYWwgcGFydGlhbCByZXN1bHQpLlxuICovXG5leHBvcnQgY2xhc3MgQnJlYWtHcmFwaE5vZGVFeGVjdXRvciBpbXBsZW1lbnRzIEdyYXBoTm9kZUV4ZWN1dG9yIHtcbiAgYXN5bmMgZXhlY3V0ZShcbiAgICBpbnB1dDogR3JhcGhFeGVjdXRpb25WYWx1ZXMsXG4gICAgX2NvbnRleHQ6IEdyYXBoRXhlY3V0aW9uQ29udGV4dFxuICApOiBQcm9taXNlPEdyYXBoRXhlY3V0aW9uVmFsdWVzPiB7XG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dFtcInZhbHVlXCJdO1xuICAgIHRocm93IG5ldyBHcmFwaEJyZWFrU2lnbmFsKHZhbHVlKTtcbiAgfVxufVxuIl19
@@ -12,5 +12,6 @@ export * from "./CodeSandboxEvaluator.js";
12
12
  export * from "./SwitchGraphNodeExecutor.js";
13
13
  export * from "./CodeGraphNodeExecutor.js";
14
14
  export * from "./LogGraphNodeExecutor.js";
15
+ export * from "./BreakGraphNodeExecutor.js";
15
16
  export * from "./IsolatedVmCodeSandboxEvaluator.js";
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2V4ZWN1dGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsMkNBQXdDO0FBQ3hDLHVDQUFvQztBQUNwQywwQ0FBdUM7QUFDdkMseUNBQXNDO0FBQ3RDLDBDQUF1QztBQUN2QywwQ0FBdUM7QUFDdkMsNkNBQTBDO0FBQzFDLDJDQUF3QztBQUN4QywwQ0FBdUM7QUFDdkMsb0RBQWlEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9leGVjdXRpb25cbiAqIEBzdW1tYXJ5IEdyYXBoIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCBleGVjdXRvciBpbnRlcmZhY2UuXG4gKiBAZGVzY3JpcHRpb24gUmUtZXhwb3J0cyB0aGUgZ3JhcGggZXhlY3V0aW9uIGNvbnRleHQgYW5kIG5vZGUgZXhlY3V0b3IgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvbkNvbnRleHRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblJlc3VsdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25GcmFtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25FbmdpbmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0NvZGVTYW5kYm94RXZhbHVhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Td2l0Y2hHcmFwaE5vZGVFeGVjdXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ29kZUdyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Mb2dHcmFwaE5vZGVFeGVjdXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vSXNvbGF0ZWRWbUNvZGVTYW5kYm94RXZhbHVhdG9yXCI7XG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2V4ZWN1dGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsMkNBQXdDO0FBQ3hDLHVDQUFvQztBQUNwQywwQ0FBdUM7QUFDdkMseUNBQXNDO0FBQ3RDLDBDQUF1QztBQUN2QywwQ0FBdUM7QUFDdkMsNkNBQTBDO0FBQzFDLDJDQUF3QztBQUN4QywwQ0FBdUM7QUFDdkMsNENBQXlDO0FBQ3pDLG9EQUFpRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvZXhlY3V0aW9uXG4gKiBAc3VtbWFyeSBHcmFwaCBleGVjdXRpb24gY29udGV4dCBhbmQgZXhlY3V0b3IgaW50ZXJmYWNlLlxuICogQGRlc2NyaXB0aW9uIFJlLWV4cG9ydHMgdGhlIGdyYXBoIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCBub2RlIGV4ZWN1dG9yIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25Db250ZXh0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaE5vZGVFeGVjdXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25SZXN1bHRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uRnJhbWVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uRW5naW5lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Db2RlU2FuZGJveEV2YWx1YXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0NvZGVHcmFwaE5vZGVFeGVjdXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vTG9nR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0JyZWFrR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0lzb2xhdGVkVm1Db2RlU2FuZGJveEV2YWx1YXRvclwiO1xuIl19
@@ -21,6 +21,7 @@ export * from "./errors/GraphPinningError.js";
21
21
  export * from "./errors/GraphPortError.js";
22
22
  export * from "./errors/GraphStoreError.js";
23
23
  export * from "./errors/GraphTopologyError.js";
24
+ export * from "./errors/GraphBreakSignal.js";
24
25
  export * from "./events/GraphExecutionEvent.js";
25
26
  export * from "./events/GraphExecutionObserver.js";
26
27
  export * from "./events/GraphExecutionEventEmitter.js";
@@ -34,6 +35,7 @@ export * from "./execution/CodeSandboxEvaluator.js";
34
35
  export * from "./execution/SwitchGraphNodeExecutor.js";
35
36
  export * from "./execution/CodeGraphNodeExecutor.js";
36
37
  export * from "./execution/LogGraphNodeExecutor.js";
38
+ export * from "./execution/BreakGraphNodeExecutor.js";
37
39
  export * from "./execution/IsolatedVmCodeSandboxEvaluator.js";
38
40
  export * from "./registry/GraphNodeExecutorRegistry.js";
39
41
  export * from "./registry/GraphNodeExecutorResolver.js";
@@ -67,4 +69,4 @@ export * from "./pinning/GraphPinningDependencyResolver.js";
67
69
  export * from "./pinning/GraphPinningService.js";
68
70
  // Snapshots (TASK-219)
69
71
  export * from "./snapshots/GraphExecutionSnapshotMapper.js";
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILDhFQUE4RTtBQUM5RSxxQ0FBMEI7QUFFMUIsK0JBQTRCO0FBQzVCLDJCQUF3QjtBQUN4QixnQ0FBNkI7QUFFN0IsZ0RBQTZDO0FBQzdDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsZ0RBQTZDO0FBQzdDLDhDQUEyQztBQUMzQywyQ0FBd0M7QUFDeEMsNENBQXlDO0FBQ3pDLCtDQUE0QztBQUU1QyxnREFBNkM7QUFDN0MsbURBQWdEO0FBQ2hELHVEQUFvRDtBQUNwRCx1REFBb0Q7QUFFcEQscURBQWtEO0FBQ2xELGlEQUE4QztBQUM5QyxtREFBZ0Q7QUFDaEQsb0RBQWlEO0FBQ2pELG9EQUFpRDtBQUNqRCxvREFBaUQ7QUFDakQsdURBQW9EO0FBQ3BELHFEQUFrRDtBQUNsRCxvREFBaUQ7QUFDakQsOERBQTJEO0FBRTNELHdEQUFxRDtBQUNyRCx3REFBcUQ7QUFFckQseUNBQXNDO0FBQ3RDLDRDQUF5QztBQUN6QyxrREFBK0M7QUFDL0MsMERBQXVEO0FBQ3ZELDJDQUF3QztBQUV4QyxxREFBa0Q7QUFDbEQscURBQWtEO0FBQ2xELHNEQUFtRDtBQUNuRCxpREFBOEM7QUFDOUMsb0RBQWlEO0FBQ2pELG9EQUFpRDtBQUNqRCw0Q0FBeUM7QUFFekMsd0JBQXdCO0FBQ3hCLHlEQUFzRDtBQUN0RCx3REFBcUQ7QUFDckQsb0RBQWlEO0FBRWpELG1CQUFtQjtBQUNuQixtREFBZ0Q7QUFDaEQsd0RBQXFEO0FBQ3JELHFEQUFrRDtBQUNsRCxvREFBaUQ7QUFDakQsa0RBQStDO0FBQy9DLGtEQUErQztBQUUvQyx5QkFBeUI7QUFDekIsa0RBQStDO0FBQy9DLGdEQUE2QztBQUM3Qyw0REFBeUQ7QUFDekQsaURBQThDO0FBRTlDLHVCQUF1QjtBQUN2Qiw0REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL2VuZ2luZVxuICogQHN1bW1hcnkgR3JhcGggZXhlY3V0aW9uIGVuZ2luZSAoYmFja2VuZC1vbmx5KS5cbiAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgaW50ZXJwcmV0ZXIgZm9yIERlY2FmIGdyYXBoIHdvcmtmbG93cy4gRXhlY3V0ZXNcbiAqIHdvcmtmbG93cyBkZWNsYXJlZCB3aXRoIGBAZGVjYWYtdHMvdWktZGVjb3JhdG9ycy9ncmFwaGAsIGVtaXRzIGV2ZW50c1xuICogdGhyb3VnaCBEZWNhZidzIE9ic2VydmFibGUgcGlwZWxpbmUsIHN1cHBvcnRzIHN0cnVjdHVyZWQgbG9vcHMsIGNvbmZpZ3VyYWJsZVxuICogdmFsdWUgc3RvcmVzLCBhbmQgcGlubmFibGUvY2FjaGVhYmxlIG5vZGVzLlxuICpcbiAqIFJlLWV4cG9ydHMgYC4uL3NoYXJlZGAgc28gYmFja2VuZCBjb25zdW1lcnMgaGF2ZSBhIHNpbmdsZSBpbXBvcnQgc3VyZmFjZS5cbiAqL1xuXG4vLyBSZS1leHBvcnQgZnJvbnRlbmQtc2FmZSBkZWNsYXJhdGlvbnMgc28gYmFja2VuZCBjb25zdW1lcnMgaGF2ZSBvbmUgc3VyZmFjZS5cbmV4cG9ydCAqIGZyb20gXCIuLi9zaGFyZWRcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMvR3JhcGhFeGVjdXRpb25FcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzL0dyYXBoQ3ljbGVFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzL0dyYXBoSW5wdXRFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzL0dyYXBoTG9vcExpbWl0RXJyb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9ycy9HcmFwaFBpbm5pbmdFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzL0dyYXBoUG9ydEVycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMvR3JhcGhTdG9yZUVycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMvR3JhcGhUb3BvbG9neUVycm9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2V2ZW50cy9HcmFwaEV4ZWN1dGlvbkV2ZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ldmVudHMvR3JhcGhFeGVjdXRpb25PYnNlcnZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXZlbnRzL0dyYXBoRXhlY3V0aW9uRXZlbnRFbWl0dGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ldmVudHMvR3JhcGhFeGVjdXRpb25FdmVudEZhY3RvcnlcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vZXhlY3V0aW9uL0dyYXBoRXhlY3V0aW9uQ29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhlY3V0aW9uL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGVjdXRpb24vR3JhcGhFeGVjdXRpb25GcmFtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhlY3V0aW9uL0dyYXBoRXhlY3V0aW9uUmVzdWx0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGVjdXRpb24vR3JhcGhFeGVjdXRpb25FbmdpbmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4ZWN1dGlvbi9Db2RlU2FuZGJveEV2YWx1YXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhlY3V0aW9uL1N3aXRjaEdyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGVjdXRpb24vQ29kZUdyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGVjdXRpb24vTG9nR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4ZWN1dGlvbi9Jc29sYXRlZFZtQ29kZVNhbmRib3hFdmFsdWF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vcmVnaXN0cnkvR3JhcGhOb2RlRXhlY3V0b3JSZWdpc3RyeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVnaXN0cnkvR3JhcGhOb2RlRXhlY3V0b3JSZXNvbHZlclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9zdG9yZS9HcmFwaFZhbHVlS2V5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdG9yZS9HcmFwaENhY2hlZFZhbHVlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdG9yZS9HcmFwaFZhbHVlU3RvcmVBZGFwdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdG9yZS9Jbk1lbW9yeUdyYXBoVmFsdWVTdG9yZUFkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0b3JlL0dyYXBoVmFsdWVTdG9yZVwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5Ob2RlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5FZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5MYXllclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wbGFubmluZy9HcmFwaFJlbGF0aW9uUmVzb2x2ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbm5lclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGxhbm5pbmcvR3JhcGhUb3BvbG9neVwiO1xuXG4vLyBWYWxpZGF0aW9uIChUQVNLLTIxNSlcbmV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRpb24vR3JhcGhEZWZpbml0aW9uVmFsaWRhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0aW9uL0dyYXBoUG9ydFNjaGVtYVJlc29sdmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0aW9uL0dyYXBoVmFsdWVWYWxpZGF0b3JcIjtcblxuLy8gTG9vcHMgKFRBU0stMjE2KVxuZXhwb3J0ICogZnJvbSBcIi4vbG9vcHMvR3JhcGhDb25kaXRpb25FdmFsdWF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvb3BzL0NvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvb3BzL0dyYXBoTG9vcEV4ZWN1dGlvbkNvbnRleHRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvb3BzL0ZvcmVhY2hHcmFwaE5vZGVFeGVjdXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbG9vcHMvV2hpbGVHcmFwaE5vZGVFeGVjdXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbG9vcHMvVW50aWxHcmFwaE5vZGVFeGVjdXRvclwiO1xuXG4vLyBQaW5uaW5nIChUQVNLLTIxNy8yMTgpXG5leHBvcnQgKiBmcm9tIFwiLi9waW5uaW5nL0dyYXBoUGlubmluZ01ldGFkYXRhXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9waW5uaW5nL0dyYXBoUGlubmluZ1BvbGljeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGlubmluZy9HcmFwaFBpbm5pbmdEZXBlbmRlbmN5UmVzb2x2ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Bpbm5pbmcvR3JhcGhQaW5uaW5nU2VydmljZVwiO1xuXG4vLyBTbmFwc2hvdHMgKFRBU0stMjE5KVxuZXhwb3J0ICogZnJvbSBcIi4vc25hcHNob3RzL0dyYXBoRXhlY3V0aW9uU25hcHNob3RNYXBwZXJcIjtcbiJdfQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILDhFQUE4RTtBQUM5RSxxQ0FBMEI7QUFFMUIsK0JBQTRCO0FBQzVCLDJCQUF3QjtBQUN4QixnQ0FBNkI7QUFFN0IsZ0RBQTZDO0FBQzdDLDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsZ0RBQTZDO0FBQzdDLDhDQUEyQztBQUMzQywyQ0FBd0M7QUFDeEMsNENBQXlDO0FBQ3pDLCtDQUE0QztBQUM1Qyw2Q0FBMEM7QUFFMUMsZ0RBQTZDO0FBQzdDLG1EQUFnRDtBQUNoRCx1REFBb0Q7QUFDcEQsdURBQW9EO0FBRXBELHFEQUFrRDtBQUNsRCxpREFBOEM7QUFDOUMsbURBQWdEO0FBQ2hELG9EQUFpRDtBQUNqRCxvREFBaUQ7QUFDakQsb0RBQWlEO0FBQ2pELHVEQUFvRDtBQUNwRCxxREFBa0Q7QUFDbEQsb0RBQWlEO0FBQ2pELHNEQUFtRDtBQUNuRCw4REFBMkQ7QUFFM0Qsd0RBQXFEO0FBQ3JELHdEQUFxRDtBQUVyRCx5Q0FBc0M7QUFDdEMsNENBQXlDO0FBQ3pDLGtEQUErQztBQUMvQywwREFBdUQ7QUFDdkQsMkNBQXdDO0FBRXhDLHFEQUFrRDtBQUNsRCxxREFBa0Q7QUFDbEQsc0RBQW1EO0FBQ25ELGlEQUE4QztBQUM5QyxvREFBaUQ7QUFDakQsb0RBQWlEO0FBQ2pELDRDQUF5QztBQUV6Qyx3QkFBd0I7QUFDeEIseURBQXNEO0FBQ3RELHdEQUFxRDtBQUNyRCxvREFBaUQ7QUFFakQsbUJBQW1CO0FBQ25CLG1EQUFnRDtBQUNoRCx3REFBcUQ7QUFDckQscURBQWtEO0FBQ2xELG9EQUFpRDtBQUNqRCxrREFBK0M7QUFDL0Msa0RBQStDO0FBRS9DLHlCQUF5QjtBQUN6QixrREFBK0M7QUFDL0MsZ0RBQTZDO0FBQzdDLDREQUF5RDtBQUN6RCxpREFBOEM7QUFFOUMsdUJBQXVCO0FBQ3ZCLDREQUF5RCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvZW5naW5lXG4gKiBAc3VtbWFyeSBHcmFwaCBleGVjdXRpb24gZW5naW5lIChiYWNrZW5kLW9ubHkpLlxuICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSBpbnRlcnByZXRlciBmb3IgRGVjYWYgZ3JhcGggd29ya2Zsb3dzLiBFeGVjdXRlc1xuICogd29ya2Zsb3dzIGRlY2xhcmVkIHdpdGggYEBkZWNhZi10cy91aS1kZWNvcmF0b3JzL2dyYXBoYCwgZW1pdHMgZXZlbnRzXG4gKiB0aHJvdWdoIERlY2FmJ3MgT2JzZXJ2YWJsZSBwaXBlbGluZSwgc3VwcG9ydHMgc3RydWN0dXJlZCBsb29wcywgY29uZmlndXJhYmxlXG4gKiB2YWx1ZSBzdG9yZXMsIGFuZCBwaW5uYWJsZS9jYWNoZWFibGUgbm9kZXMuXG4gKlxuICogUmUtZXhwb3J0cyBgLi4vc2hhcmVkYCBzbyBiYWNrZW5kIGNvbnN1bWVycyBoYXZlIGEgc2luZ2xlIGltcG9ydCBzdXJmYWNlLlxuICovXG5cbi8vIFJlLWV4cG9ydCBmcm9udGVuZC1zYWZlIGRlY2xhcmF0aW9ucyBzbyBiYWNrZW5kIGNvbnN1bWVycyBoYXZlIG9uZSBzdXJmYWNlLlxuZXhwb3J0ICogZnJvbSBcIi4uL3NoYXJlZFwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9ycy9HcmFwaEV4ZWN1dGlvbkVycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMvR3JhcGhDeWNsZUVycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMvR3JhcGhJbnB1dEVycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMvR3JhcGhMb29wTGltaXRFcnJvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzL0dyYXBoUGlubmluZ0Vycm9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMvR3JhcGhQb3J0RXJyb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9ycy9HcmFwaFN0b3JlRXJyb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9ycy9HcmFwaFRvcG9sb2d5RXJyb3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9ycy9HcmFwaEJyZWFrU2lnbmFsXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2V2ZW50cy9HcmFwaEV4ZWN1dGlvbkV2ZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ldmVudHMvR3JhcGhFeGVjdXRpb25PYnNlcnZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXZlbnRzL0dyYXBoRXhlY3V0aW9uRXZlbnRFbWl0dGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ldmVudHMvR3JhcGhFeGVjdXRpb25FdmVudEZhY3RvcnlcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vZXhlY3V0aW9uL0dyYXBoRXhlY3V0aW9uQ29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhlY3V0aW9uL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGVjdXRpb24vR3JhcGhFeGVjdXRpb25GcmFtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhlY3V0aW9uL0dyYXBoRXhlY3V0aW9uUmVzdWx0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGVjdXRpb24vR3JhcGhFeGVjdXRpb25FbmdpbmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4ZWN1dGlvbi9Db2RlU2FuZGJveEV2YWx1YXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhlY3V0aW9uL1N3aXRjaEdyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGVjdXRpb24vQ29kZUdyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGVjdXRpb24vTG9nR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4ZWN1dGlvbi9CcmVha0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGVjdXRpb24vSXNvbGF0ZWRWbUNvZGVTYW5kYm94RXZhbHVhdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL3JlZ2lzdHJ5L0dyYXBoTm9kZUV4ZWN1dG9yUmVnaXN0cnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlZ2lzdHJ5L0dyYXBoTm9kZUV4ZWN1dG9yUmVzb2x2ZXJcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmUvR3JhcGhWYWx1ZUtleVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmUvR3JhcGhDYWNoZWRWYWx1ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmUvR3JhcGhWYWx1ZVN0b3JlQWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmUvSW5NZW1vcnlHcmFwaFZhbHVlU3RvcmVBZGFwdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdG9yZS9HcmFwaFZhbHVlU3RvcmVcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuTm9kZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuRWRnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGxhbm5pbmcvR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGxhbm5pbmcvR3JhcGhSZWxhdGlvblJlc29sdmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wbGFubmluZy9HcmFwaEV4ZWN1dGlvblBsYW5uZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3BsYW5uaW5nL0dyYXBoVG9wb2xvZ3lcIjtcblxuLy8gVmFsaWRhdGlvbiAoVEFTSy0yMTUpXG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0aW9uL0dyYXBoRGVmaW5pdGlvblZhbGlkYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmFsaWRhdGlvbi9HcmFwaFBvcnRTY2hlbWFSZXNvbHZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmFsaWRhdGlvbi9HcmFwaFZhbHVlVmFsaWRhdG9yXCI7XG5cbi8vIExvb3BzIChUQVNLLTIxNilcbmV4cG9ydCAqIGZyb20gXCIuL2xvb3BzL0dyYXBoQ29uZGl0aW9uRXZhbHVhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb29wcy9Db25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb29wcy9HcmFwaExvb3BFeGVjdXRpb25Db250ZXh0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb29wcy9Gb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvb3BzL1doaWxlR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvb3BzL1VudGlsR3JhcGhOb2RlRXhlY3V0b3JcIjtcblxuLy8gUGlubmluZyAoVEFTSy0yMTcvMjE4KVxuZXhwb3J0ICogZnJvbSBcIi4vcGlubmluZy9HcmFwaFBpbm5pbmdNZXRhZGF0YVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGlubmluZy9HcmFwaFBpbm5pbmdQb2xpY3lcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Bpbm5pbmcvR3JhcGhQaW5uaW5nRGVwZW5kZW5jeVJlc29sdmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9waW5uaW5nL0dyYXBoUGlubmluZ1NlcnZpY2VcIjtcblxuLy8gU25hcHNob3RzIChUQVNLLTIxOSlcbmV4cG9ydCAqIGZyb20gXCIuL3NuYXBzaG90cy9HcmFwaEV4ZWN1dGlvblNuYXBzaG90TWFwcGVyXCI7XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { GRAPH_DEFAULT_MAX_FOREACH_ITERATIONS } from "./../constants.js";
2
2
  import { GraphExecutionEventType } from "./../../shared/constants.js";
3
+ import { GraphBreakSignal } from "./../errors/GraphBreakSignal.js";
3
4
  import { GraphInputError } from "./../errors/GraphInputError.js";
4
5
  import { GraphLoopLimitError } from "./../errors/GraphLoopLimitError.js";
5
6
  /**
@@ -7,12 +8,17 @@ import { GraphLoopLimitError } from "./../errors/GraphLoopLimitError.js";
7
8
  *
8
9
  * Expects input:
9
10
  * - `items`: array of values to iterate over
11
+ * - `slice?`: optional slice size (overrides `metadata.loop.slice`); default `1`
10
12
  * - `state?`: optional initial state
11
13
  *
12
14
  * Produces output:
13
- * - `results`: array of body outputs (in item order)
14
- * - `state?`: final state
15
+ * - `results`: array of body outputs (in item order). When `slice > 1`, one
16
+ * entry per slice (the body receives a slice array on the item port).
17
+ * - `completed`: alias for `results` — the flow after the loop ends (the
18
+ * collected results array).
15
19
  * - `iterations`: number of iterations executed
20
+ * - `broken`: `true` when the loop was terminated early by a Break node
21
+ * - `state?`: final state
16
22
  */
17
23
  export class ForeachGraphNodeExecutor {
18
24
  constructor(engine) {
@@ -20,13 +26,16 @@ export class ForeachGraphNodeExecutor {
20
26
  }
21
27
  async execute(input, context) {
22
28
  const metadata = this.extractMetadata(context);
23
- const items = input.items;
29
+ let items = input.items;
24
30
  const maxIterations = metadata.maxIterations ?? GRAPH_DEFAULT_MAX_FOREACH_ITERATIONS;
25
31
  if (!Array.isArray(items)) {
26
32
  throw new GraphInputError("foreach input 'items' must be an array");
27
33
  }
28
- if (items.length > maxIterations) {
29
- throw new GraphLoopLimitError(`foreach exceeded max iterations (${items.length} > ${maxIterations})`);
34
+ const sliceRaw = Number(input.slice ?? metadata.slice ?? 1);
35
+ const slice = Number.isFinite(sliceRaw) && sliceRaw > 0 ? Math.floor(sliceRaw) : 1;
36
+ const iterations = slice > 1 ? Math.ceil(items.length / slice) : items.length;
37
+ if (iterations > maxIterations) {
38
+ throw new GraphLoopLimitError(`foreach exceeded max iterations (${iterations} > ${maxIterations})`);
30
39
  }
31
40
  const itemPort = metadata.itemPort ?? "item";
32
41
  const resultPort = metadata.resultPort ?? "result";
@@ -34,36 +43,62 @@ export class ForeachGraphNodeExecutor {
34
43
  const bodyWorkflow = metadata.body;
35
44
  const results = [];
36
45
  let state = input.state;
46
+ let broken = false;
37
47
  await context.emit({ type: GraphExecutionEventType.LOOP_STARTED });
38
- for (let i = 0; i < items.length; i++) {
48
+ for (let i = 0; i < iterations; i++) {
39
49
  await context.emit({
40
50
  type: GraphExecutionEventType.LOOP_ITERATION_STARTED,
41
51
  iteration: i,
42
52
  });
53
+ const sliceItems = slice > 1 ? items.slice(i * slice, i * slice + slice) : items[i];
43
54
  const childInputs = {
44
- [itemPort]: items[i],
55
+ [itemPort]: sliceItems,
45
56
  index: i,
46
57
  };
58
+ if (slice > 1)
59
+ childInputs["slice"] = sliceItems;
47
60
  if (state !== undefined)
48
61
  childInputs[statePort] = state;
49
- const childResult = await this.engine.execute(bodyWorkflow, childInputs, {
50
- parentRunId: context.runId,
51
- path: [...context.path, `iteration:${i}`],
52
- metadata: { item: items[i], index: i },
53
- });
54
- results.push(childResult.outputs[resultPort]);
55
- if (childResult.outputs[statePort] !== undefined) {
56
- state = childResult.outputs[statePort];
62
+ try {
63
+ const childResult = await this.engine.execute(bodyWorkflow, childInputs, {
64
+ parentRunId: context.runId,
65
+ path: [...context.path, `iteration:${i}`],
66
+ metadata: { item: sliceItems, index: i, slice },
67
+ });
68
+ results.push(childResult.outputs[resultPort]);
69
+ if (childResult.outputs[statePort] !== undefined) {
70
+ state = childResult.outputs[statePort];
71
+ }
72
+ }
73
+ catch (err) {
74
+ if (err instanceof GraphBreakSignal) {
75
+ const carried = err.details?.value;
76
+ if (carried !== undefined)
77
+ results.push(carried);
78
+ broken = true;
79
+ await context.emit({
80
+ type: GraphExecutionEventType.LOOP_ITERATION_COMPLETED,
81
+ iteration: i,
82
+ metadata: { broken: true },
83
+ });
84
+ break;
85
+ }
86
+ throw err;
57
87
  }
58
88
  await context.emit({
59
89
  type: GraphExecutionEventType.LOOP_ITERATION_COMPLETED,
60
90
  iteration: i,
61
91
  });
62
92
  }
63
- await context.emit({ type: GraphExecutionEventType.LOOP_COMPLETED });
93
+ await context.emit({
94
+ type: GraphExecutionEventType.LOOP_COMPLETED,
95
+ metadata: { broken },
96
+ });
64
97
  const output = {
65
98
  results,
66
- iterations: items.length,
99
+ completed: results,
100
+ iterations: results.length,
101
+ broken,
67
102
  };
68
103
  if (state !== undefined)
69
104
  output[statePort] = state;
@@ -78,4 +113,4 @@ export class ForeachGraphNodeExecutor {
78
113
  return raw;
79
114
  }
80
115
  }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9yZWFjaEdyYXBoTm9kZUV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dyYXBoL2VuZ2luZS9sb29wcy9Gb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLDBCQUFxQjtBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0NBQStCO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUNBQWtDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSwyQ0FBc0M7QUFFcEU7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQTZCLE1BQTRCO1FBQTVCLFdBQU0sR0FBTixNQUFNLENBQXNCO0lBQUcsQ0FBQztJQUU3RCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQTJCLEVBQzNCLE9BQThCO1FBRTlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixNQUFNLGFBQWEsR0FDakIsUUFBUSxDQUFDLGFBQWEsSUFBSSxvQ0FBb0MsQ0FBQztRQUVqRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxlQUFlLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxtQkFBbUIsQ0FDM0Isb0NBQW9DLEtBQUssQ0FBQyxNQUFNLE1BQU0sYUFBYSxHQUFHLENBQ3ZFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQStCLENBQUM7UUFFOUQsTUFBTSxPQUFPLEdBQWMsRUFBRSxDQUFDO1FBQzlCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFeEIsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFbkUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxzQkFBc0I7Z0JBQ3BELFNBQVMsRUFBRSxDQUFDO2FBQ2IsQ0FBQyxDQUFDO1lBRUgsTUFBTSxXQUFXLEdBQXlCO2dCQUN4QyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQztZQUNGLElBQUksS0FBSyxLQUFLLFNBQVM7Z0JBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUV4RCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUMzQyxZQUFZLEVBQ1osV0FBVyxFQUNYO2dCQUNFLFdBQVcsRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDMUIsSUFBSSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTthQUN2QyxDQUNGLENBQUM7WUFFRixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2pELEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksRUFBRSx1QkFBdUIsQ0FBQyx3QkFBd0I7Z0JBQ3RELFNBQVMsRUFBRSxDQUFDO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sTUFBTSxHQUF5QjtZQUNuQyxPQUFPO1lBQ1AsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNO1NBQ3pCLENBQUM7UUFDRixJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNuRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQThCO1FBQ3BELE1BQU0sR0FBRyxHQUFJLE9BQU8sQ0FBQyxJQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJO1lBQ3BELE9BQU8sQ0FBQyxRQUFnQixFQUFFLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxNQUFNLElBQUksZUFBZSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sR0FBd0IsQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL2xvb3BzL0ZvcmVhY2hHcmFwaE5vZGVFeGVjdXRvclxuICogQHN1bW1hcnkgRm9yZWFjaCBsb29wIG5vZGUgZXhlY3V0b3IuXG4gKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBib2R5IHdvcmtmbG93IG9uY2UgcGVyIGl0ZW0gaW4gdGhlIGlucHV0IGFycmF5LCBjb2xsZWN0aW5nIHJlc3VsdHMgaW4gb3JkZXIuXG4gKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhOb2RlRXhlY3V0b3IgfSBmcm9tIFwiLi4vZXhlY3V0aW9uL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuLi9leGVjdXRpb24vR3JhcGhFeGVjdXRpb25Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uRW5naW5lIH0gZnJvbSBcIi4uL2V4ZWN1dGlvbi9HcmFwaEV4ZWN1dGlvbkVuZ2luZVwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblZhbHVlcywgR3JhcGhMb29wTWV0YWRhdGEgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuaW1wb3J0IHsgR1JBUEhfREVGQVVMVF9NQVhfRk9SRUFDSF9JVEVSQVRJT05TIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FdmVudFR5cGUgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgR3JhcGhJbnB1dEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaElucHV0RXJyb3JcIjtcbmltcG9ydCB7IEdyYXBoTG9vcExpbWl0RXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzL0dyYXBoTG9vcExpbWl0RXJyb3JcIjtcblxuLyoqXG4gKiBFeGVjdXRvciBmb3IgYGNvcmUubG9vcC5mb3JlYWNoYCBub2Rlcy5cbiAqXG4gKiBFeHBlY3RzIGlucHV0OlxuICogLSBgaXRlbXNgOiBhcnJheSBvZiB2YWx1ZXMgdG8gaXRlcmF0ZSBvdmVyXG4gKiAtIGBzdGF0ZT9gOiBvcHRpb25hbCBpbml0aWFsIHN0YXRlXG4gKlxuICogUHJvZHVjZXMgb3V0cHV0OlxuICogLSBgcmVzdWx0c2A6IGFycmF5IG9mIGJvZHkgb3V0cHV0cyAoaW4gaXRlbSBvcmRlcilcbiAqIC0gYHN0YXRlP2A6IGZpbmFsIHN0YXRlXG4gKiAtIGBpdGVyYXRpb25zYDogbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZXhlY3V0ZWRcbiAqL1xuZXhwb3J0IGNsYXNzIEZvcmVhY2hHcmFwaE5vZGVFeGVjdXRvciBpbXBsZW1lbnRzIEdyYXBoTm9kZUV4ZWN1dG9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBlbmdpbmU6IEdyYXBoRXhlY3V0aW9uRW5naW5lKSB7fVxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgaW5wdXQ6IEdyYXBoRXhlY3V0aW9uVmFsdWVzLFxuICAgIGNvbnRleHQ6IEdyYXBoRXhlY3V0aW9uQ29udGV4dFxuICApOiBQcm9taXNlPEdyYXBoRXhlY3V0aW9uVmFsdWVzPiB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4dHJhY3RNZXRhZGF0YShjb250ZXh0KTtcbiAgICBjb25zdCBpdGVtcyA9IGlucHV0Lml0ZW1zO1xuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPVxuICAgICAgbWV0YWRhdGEubWF4SXRlcmF0aW9ucyA/PyBHUkFQSF9ERUZBVUxUX01BWF9GT1JFQUNIX0lURVJBVElPTlM7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhJbnB1dEVycm9yKFwiZm9yZWFjaCBpbnB1dCAnaXRlbXMnIG11c3QgYmUgYW4gYXJyYXlcIik7XG4gICAgfVxuICAgIGlmIChpdGVtcy5sZW5ndGggPiBtYXhJdGVyYXRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhMb29wTGltaXRFcnJvcihcbiAgICAgICAgYGZvcmVhY2ggZXhjZWVkZWQgbWF4IGl0ZXJhdGlvbnMgKCR7aXRlbXMubGVuZ3RofSA+ICR7bWF4SXRlcmF0aW9uc30pYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtUG9ydCA9IG1ldGFkYXRhLml0ZW1Qb3J0ID8/IFwiaXRlbVwiO1xuICAgIGNvbnN0IHJlc3VsdFBvcnQgPSBtZXRhZGF0YS5yZXN1bHRQb3J0ID8/IFwicmVzdWx0XCI7XG4gICAgY29uc3Qgc3RhdGVQb3J0ID0gbWV0YWRhdGEuc3RhdGVQb3J0ID8/IFwic3RhdGVcIjtcbiAgICBjb25zdCBib2R5V29ya2Zsb3cgPSBtZXRhZGF0YS5ib2R5IGFzIEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uO1xuXG4gICAgY29uc3QgcmVzdWx0czogdW5rbm93bltdID0gW107XG4gICAgbGV0IHN0YXRlID0gaW5wdXQuc3RhdGU7XG5cbiAgICBhd2FpdCBjb250ZXh0LmVtaXQoeyB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX1NUQVJURUQgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhd2FpdCBjb250ZXh0LmVtaXQoe1xuICAgICAgICB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX0lURVJBVElPTl9TVEFSVEVELFxuICAgICAgICBpdGVyYXRpb246IGksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2hpbGRJbnB1dHM6IEdyYXBoRXhlY3V0aW9uVmFsdWVzID0ge1xuICAgICAgICBbaXRlbVBvcnRdOiBpdGVtc1tpXSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICB9O1xuICAgICAgaWYgKHN0YXRlICE9PSB1bmRlZmluZWQpIGNoaWxkSW5wdXRzW3N0YXRlUG9ydF0gPSBzdGF0ZTtcblxuICAgICAgY29uc3QgY2hpbGRSZXN1bHQgPSBhd2FpdCB0aGlzLmVuZ2luZS5leGVjdXRlKFxuICAgICAgICBib2R5V29ya2Zsb3csXG4gICAgICAgIGNoaWxkSW5wdXRzLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyZW50UnVuSWQ6IGNvbnRleHQucnVuSWQsXG4gICAgICAgICAgcGF0aDogWy4uLmNvbnRleHQucGF0aCwgYGl0ZXJhdGlvbjoke2l9YF0sXG4gICAgICAgICAgbWV0YWRhdGE6IHsgaXRlbTogaXRlbXNbaV0sIGluZGV4OiBpIH0sXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdHMucHVzaChjaGlsZFJlc3VsdC5vdXRwdXRzW3Jlc3VsdFBvcnRdKTtcbiAgICAgIGlmIChjaGlsZFJlc3VsdC5vdXRwdXRzW3N0YXRlUG9ydF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGF0ZSA9IGNoaWxkUmVzdWx0Lm91dHB1dHNbc3RhdGVQb3J0XTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgY29udGV4dC5lbWl0KHtcbiAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9JVEVSQVRJT05fQ09NUExFVEVELFxuICAgICAgICBpdGVyYXRpb246IGksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCBjb250ZXh0LmVtaXQoeyB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX0NPTVBMRVRFRCB9KTtcblxuICAgIGNvbnN0IG91dHB1dDogR3JhcGhFeGVjdXRpb25WYWx1ZXMgPSB7XG4gICAgICByZXN1bHRzLFxuICAgICAgaXRlcmF0aW9uczogaXRlbXMubGVuZ3RoLFxuICAgIH07XG4gICAgaWYgKHN0YXRlICE9PSB1bmRlZmluZWQpIG91dHB1dFtzdGF0ZVBvcnRdID0gc3RhdGU7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE1ldGFkYXRhKGNvbnRleHQ6IEdyYXBoRXhlY3V0aW9uQ29udGV4dCk6IEdyYXBoTG9vcE1ldGFkYXRhIHtcbiAgICBjb25zdCByYXcgPSAoY29udGV4dC5ub2RlIGFzIGFueSkuZ3JhcGg/Lm1ldGFkYXRhPy5sb29wID8/XG4gICAgICAoY29udGV4dC5tZXRhZGF0YSBhcyBhbnkpPy5sb29wO1xuICAgIGlmICghcmF3KSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhJbnB1dEVycm9yKFwiZm9yZWFjaCBub2RlIGlzIG1pc3NpbmcgbG9vcCBtZXRhZGF0YVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhdyBhcyBHcmFwaExvb3BNZXRhZGF0YTtcbiAgfVxufVxuIl19
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9yZWFjaEdyYXBoTm9kZUV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dyYXBoL2VuZ2luZS9sb29wcy9Gb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLDBCQUFxQjtBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0NBQStCO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx3Q0FBbUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSx1Q0FBa0M7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDJDQUFzQztBQUVwRTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFBNkIsTUFBNEI7UUFBNUIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7SUFBRyxDQUFDO0lBRTdELEtBQUssQ0FBQyxPQUFPLENBQ1gsS0FBMkIsRUFDM0IsT0FBOEI7UUFFOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3hCLE1BQU0sYUFBYSxHQUNqQixRQUFRLENBQUMsYUFBYSxJQUFJLG9DQUFvQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLGVBQWUsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxHQUFH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UUFDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLGVBQWUsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxPQUFPLEdBQXdCLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9sb29wcy9Gb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3JcbiAqIEBzdW1tYXJ5IEZvcmVhY2ggbG9vcCBub2RlIGV4ZWN1dG9yLlxuICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgYm9keSB3b3JrZmxvdyBvbmNlIHBlciBpdGVtIChvciBwZXIgc2xpY2Ugb2YgaXRlbXMpXG4gKiBpbiB0aGUgaW5wdXQgYXJyYXksIGNvbGxlY3RpbmcgcmVzdWx0cyBpbiBvcmRlci4gU3VwcG9ydHMgYSBjb25maWd1cmFibGVcbiAqIGBzbGljZWAgc2l6ZSBhbmQgY29vcGVyYXRpdmUgZWFybHkgdGVybWluYXRpb24gdmlhIGBjb3JlLmZsb3cuYnJlYWtgIG5vZGVzXG4gKiAod2hpY2ggdGhyb3cgYSB7QGxpbmsgR3JhcGhCcmVha1NpZ25hbH0pLlxuICovXG5pbXBvcnQgdHlwZSB7IEdyYXBoTm9kZUV4ZWN1dG9yIH0gZnJvbSBcIi4uL2V4ZWN1dGlvbi9HcmFwaE5vZGVFeGVjdXRvclwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vZXhlY3V0aW9uL0dyYXBoRXhlY3V0aW9uQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvbkVuZ2luZSB9IGZyb20gXCIuLi9leGVjdXRpb24vR3JhcGhFeGVjdXRpb25FbmdpbmVcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25WYWx1ZXMsIEdyYXBoTG9vcE1ldGFkYXRhIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzL2dyYXBoXCI7XG5cbmltcG9ydCB7IEdSQVBIX0RFRkFVTFRfTUFYX0ZPUkVBQ0hfSVRFUkFUSU9OUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9jb25zdGFudHNcIjtcbmltcG9ydCB7IEdyYXBoQnJlYWtTaWduYWwgfSBmcm9tIFwiLi4vZXJyb3JzL0dyYXBoQnJlYWtTaWduYWxcIjtcbmltcG9ydCB7IEdyYXBoSW5wdXRFcnJvciB9IGZyb20gXCIuLi9lcnJvcnMvR3JhcGhJbnB1dEVycm9yXCI7XG5pbXBvcnQgeyBHcmFwaExvb3BMaW1pdEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaExvb3BMaW1pdEVycm9yXCI7XG5cbi8qKlxuICogRXhlY3V0b3IgZm9yIGBjb3JlLmxvb3AuZm9yZWFjaGAgbm9kZXMuXG4gKlxuICogRXhwZWN0cyBpbnB1dDpcbiAqIC0gYGl0ZW1zYDogYXJyYXkgb2YgdmFsdWVzIHRvIGl0ZXJhdGUgb3ZlclxuICogLSBgc2xpY2U/YDogb3B0aW9uYWwgc2xpY2Ugc2l6ZSAob3ZlcnJpZGVzIGBtZXRhZGF0YS5sb29wLnNsaWNlYCk7IGRlZmF1bHQgYDFgXG4gKiAtIGBzdGF0ZT9gOiBvcHRpb25hbCBpbml0aWFsIHN0YXRlXG4gKlxuICogUHJvZHVjZXMgb3V0cHV0OlxuICogLSBgcmVzdWx0c2A6IGFycmF5IG9mIGJvZHkgb3V0cHV0cyAoaW4gaXRlbSBvcmRlcikuIFdoZW4gYHNsaWNlID4gMWAsIG9uZVxuICogICBlbnRyeSBwZXIgc2xpY2UgKHRoZSBib2R5IHJlY2VpdmVzIGEgc2xpY2UgYXJyYXkgb24gdGhlIGl0ZW0gcG9ydCkuXG4gKiAtIGBjb21wbGV0ZWRgOiBhbGlhcyBmb3IgYHJlc3VsdHNgIOKAlCB0aGUgZmxvdyBhZnRlciB0aGUgbG9vcCBlbmRzICh0aGVcbiAqICAgY29sbGVjdGVkIHJlc3VsdHMgYXJyYXkpLlxuICogLSBgaXRlcmF0aW9uc2A6IG51bWJlciBvZiBpdGVyYXRpb25zIGV4ZWN1dGVkXG4gKiAtIGBicm9rZW5gOiBgdHJ1ZWAgd2hlbiB0aGUgbG9vcCB3YXMgdGVybWluYXRlZCBlYXJseSBieSBhIEJyZWFrIG5vZGVcbiAqIC0gYHN0YXRlP2A6IGZpbmFsIHN0YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBGb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3IgaW1wbGVtZW50cyBHcmFwaE5vZGVFeGVjdXRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZW5naW5lOiBHcmFwaEV4ZWN1dGlvbkVuZ2luZSkge31cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxHcmFwaEV4ZWN1dGlvblZhbHVlcz4ge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5leHRyYWN0TWV0YWRhdGEoY29udGV4dCk7XG4gICAgbGV0IGl0ZW1zID0gaW5wdXQuaXRlbXM7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9XG4gICAgICBtZXRhZGF0YS5tYXhJdGVyYXRpb25zID8/IEdSQVBIX0RFRkFVTFRfTUFYX0ZPUkVBQ0hfSVRFUkFUSU9OUztcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIHRocm93IG5ldyBHcmFwaElucHV0RXJyb3IoXCJmb3JlYWNoIGlucHV0ICdpdGVtcycgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBzbGljZVJhdyA9IE51bWJlcihpbnB1dC5zbGljZSA/PyBtZXRhZGF0YS5zbGljZSA/PyAxKTtcbiAgICBjb25zdCBzbGljZSA9IE51bWJlci5pc0Zpbml0ZShzbGljZVJhdykgJiYgc2xpY2VSYXcgPiAwID8gTWF0aC5mbG9vcihzbGljZVJhdykgOiAxO1xuICAgIGNvbnN0IGl0ZXJhdGlvbnMgPSBzbGljZSA+IDEgPyBNYXRoLmNlaWwoaXRlbXMubGVuZ3RoIC8gc2xpY2UpIDogaXRlbXMubGVuZ3RoO1xuXG4gICAgaWYgKGl0ZXJhdGlvbnMgPiBtYXhJdGVyYXRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhMb29wTGltaXRFcnJvcihcbiAgICAgICAgYGZvcmVhY2ggZXhjZWVkZWQgbWF4IGl0ZXJhdGlvbnMgKCR7aXRlcmF0aW9uc30gPiAke21heEl0ZXJhdGlvbnN9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbVBvcnQgPSBtZXRhZGF0YS5pdGVtUG9ydCA/PyBcIml0ZW1cIjtcbiAgICBjb25zdCByZXN1bHRQb3J0ID0gbWV0YWRhdGEucmVzdWx0UG9ydCA/PyBcInJlc3VsdFwiO1xuICAgIGNvbnN0IHN0YXRlUG9ydCA9IG1ldGFkYXRhLnN0YXRlUG9ydCA/PyBcInN0YXRlXCI7XG4gICAgY29uc3QgYm9keVdvcmtmbG93ID0gbWV0YWRhdGEuYm9keSBhcyBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbjtcblxuICAgIGNvbnN0IHJlc3VsdHM6IHVua25vd25bXSA9IFtdO1xuICAgIGxldCBzdGF0ZSA9IGlucHV0LnN0YXRlO1xuICAgIGxldCBicm9rZW4gPSBmYWxzZTtcblxuICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7IHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfU1RBUlRFRCB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7XG4gICAgICBhd2FpdCBjb250ZXh0LmVtaXQoe1xuICAgICAgICB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX0lURVJBVElPTl9TVEFSVEVELFxuICAgICAgICBpdGVyYXRpb246IGksXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2xpY2VJdGVtcyA9IHNsaWNlID4gMSA/IGl0ZW1zLnNsaWNlKGkgKiBzbGljZSwgaSAqIHNsaWNlICsgc2xpY2UpIDogaXRlbXNbaV07XG4gICAgICBjb25zdCBjaGlsZElucHV0czogR3JhcGhFeGVjdXRpb25WYWx1ZXMgPSB7XG4gICAgICAgIFtpdGVtUG9ydF06IHNsaWNlSXRlbXMsXG4gICAgICAgIGluZGV4OiBpLFxuICAgICAgfTtcbiAgICAgIGlmIChzbGljZSA+IDEpIGNoaWxkSW5wdXRzW1wic2xpY2VcIl0gPSBzbGljZUl0ZW1zO1xuICAgICAgaWYgKHN0YXRlICE9PSB1bmRlZmluZWQpIGNoaWxkSW5wdXRzW3N0YXRlUG9ydF0gPSBzdGF0ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2hpbGRSZXN1bHQgPSBhd2FpdCB0aGlzLmVuZ2luZS5leGVjdXRlKFxuICAgICAgICAgIGJvZHlXb3JrZmxvdyxcbiAgICAgICAgICBjaGlsZElucHV0cyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJlbnRSdW5JZDogY29udGV4dC5ydW5JZCxcbiAgICAgICAgICAgIHBhdGg6IFsuLi5jb250ZXh0LnBhdGgsIGBpdGVyYXRpb246JHtpfWBdLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHsgaXRlbTogc2xpY2VJdGVtcywgaW5kZXg6IGksIHNsaWNlIH0sXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChjaGlsZFJlc3VsdC5vdXRwdXRzW3Jlc3VsdFBvcnRdKTtcbiAgICAgICAgaWYgKGNoaWxkUmVzdWx0Lm91dHB1dHNbc3RhdGVQb3J0XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RhdGUgPSBjaGlsZFJlc3VsdC5vdXRwdXRzW3N0YXRlUG9ydF07XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgR3JhcGhCcmVha1NpZ25hbCkge1xuICAgICAgICAgIGNvbnN0IGNhcnJpZWQgPSAoZXJyLmRldGFpbHMgYXMgeyB2YWx1ZT86IHVua25vd24gfSB8IHVuZGVmaW5lZCk/LnZhbHVlO1xuICAgICAgICAgIGlmIChjYXJyaWVkICE9PSB1bmRlZmluZWQpIHJlc3VsdHMucHVzaChjYXJyaWVkKTtcbiAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgICAgICB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX0lURVJBVElPTl9DT01QTEVURUQsXG4gICAgICAgICAgICBpdGVyYXRpb246IGksXG4gICAgICAgICAgICBtZXRhZGF0YTogeyBicm9rZW46IHRydWUgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfSVRFUkFUSU9OX0NPTVBMRVRFRCxcbiAgICAgICAgaXRlcmF0aW9uOiBpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgY29udGV4dC5lbWl0KHtcbiAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfQ09NUExFVEVELFxuICAgICAgbWV0YWRhdGE6IHsgYnJva2VuIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvdXRwdXQ6IEdyYXBoRXhlY3V0aW9uVmFsdWVzID0ge1xuICAgICAgcmVzdWx0cyxcbiAgICAgIGNvbXBsZXRlZDogcmVzdWx0cyxcbiAgICAgIGl0ZXJhdGlvbnM6IHJlc3VsdHMubGVuZ3RoLFxuICAgICAgYnJva2VuLFxuICAgIH07XG4gICAgaWYgKHN0YXRlICE9PSB1bmRlZmluZWQpIG91dHB1dFtzdGF0ZVBvcnRdID0gc3RhdGU7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE1ldGFkYXRhKGNvbnRleHQ6IEdyYXBoRXhlY3V0aW9uQ29udGV4dCk6IEdyYXBoTG9vcE1ldGFkYXRhIHtcbiAgICBjb25zdCByYXcgPSAoY29udGV4dC5ub2RlIGFzIGFueSkuZ3JhcGg/Lm1ldGFkYXRhPy5sb29wID8/XG4gICAgICAoY29udGV4dC5tZXRhZGF0YSBhcyBhbnkpPy5sb29wO1xuICAgIGlmICghcmF3KSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhJbnB1dEVycm9yKFwiZm9yZWFjaCBub2RlIGlzIG1pc3NpbmcgbG9vcCBtZXRhZGF0YVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhdyBhcyBHcmFwaExvb3BNZXRhZGF0YTtcbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL2VuZ2luZS90eXBlc1xuICogQHN1bW1hcnkgR3JhcGggZXhlY3V0aW9uIGVuZ2luZSBjb3JlIHR5cGVzLlxuICogQGRlc2NyaXB0aW9uIEVuZ2luZS1wcml2YXRlIHR5cGUgYWxpYXNlcyBhbmQgaW50ZXJmYWNlcy4gRnJvbnRlbmQtc2FmZVxuICogdHlwZXMgKGBFeHByVmFsdWVgLCBgQ29uZGl0aW9uRXhwcmVzc2lvbmAsIGBDb2RlQ29uZGl0aW9uYCxcbiAqIGBTd2l0Y2hDYXNlQ29uZGl0aW9uYCwgYFN3aXRjaENhc2VgLCBgU3dpdGNoTm9kZU1ldGFkYXRhYCxcbiAqIGBOb2RlTWV0YWRhdGFDaGFuZ2VgLCBgR3JhcGhFeGVjdXRpb25FdmVudGAsIGBHcmFwaEV4ZWN1dGlvbkVycm9yUGF5bG9hZGApXG4gKiBsaXZlIGluIGAuLi9zaGFyZWQvdHlwZXNgOyBlbmdpbmUgbW9kdWxlcyBpbXBvcnQgc2hhcmVkIHN5bWJvbHMgZnJvbSB0aGVyZVxuICogYW5kIGVuZ2luZS1wcml2YXRlIHN5bWJvbHMgZnJvbSBoZXJlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIEdyYXBoTm9kZURlZmluaXRpb24sXG4gIEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uLFxufSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblN0YXR1cyB9IGZyb20gXCIuLi9zaGFyZWQvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEdyYXBoRXhlY3V0aW9uRXJyb3JQYXlsb2FkLFxuICBHcmFwaEV4ZWN1dGlvbkV2ZW50LFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5cbi8vIFJlLWV4cG9ydCBmcm9udGVuZC1zYWZlIHR5cGVzIHNvIGVuZ2luZSBtb2R1bGVzIGhhdmUgYSBzaW5nbGUgaW1wb3J0IHN1cmZhY2UuXG5leHBvcnQgdHlwZSB7XG4gIEdyYXBoRXhlY3V0aW9uRXJyb3JQYXlsb2FkLFxuICBHcmFwaEV4ZWN1dGlvbkV2ZW50LFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5cbi8qKlxuICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgc2luZ2xlIGdyYXBoIGV4ZWN1dGlvbiBydW4uXG4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoUnVuSWQgPSBzdHJpbmc7XG5cbi8qKlxuICogSWRlbnRpZmllciBmb3IgYSB3b3JrZmxvdyBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHcmFwaFdvcmtmbG93SWQgPSBzdHJpbmc7XG5cbi8qKlxuICogSWRlbnRpZmllciBmb3IgYSBub2RlIHdpdGhpbiBhIHdvcmtmbG93LlxuICovXG5leHBvcnQgdHlwZSBHcmFwaE5vZGVJZCA9IHN0cmluZztcblxuLyoqXG4gKiBOYW1lIG9mIGEgcG9ydCBvbiBhIG5vZGUgb3Igd29ya2Zsb3cgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoUG9ydE5hbWUgPSBzdHJpbmc7XG5cbi8qKlxuICogQSBiYWcgb2YgbmFtZWQgdmFsdWVzIGV4Y2hhbmdlZCBiZXR3ZWVuIG5vZGVzIGFuZCB0aGUgd29ya2Zsb3cgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoRXhlY3V0aW9uVmFsdWVzID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGluZmx1ZW5jZSBhIHNpbmdsZSBleGVjdXRpb24gb2YgYSB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaEV4ZWN1dGlvbk9wdGlvbnMge1xuICBydW5JZD86IEdyYXBoUnVuSWQ7XG4gIHBhcmVudFJ1bklkPzogR3JhcGhSdW5JZDtcbiAgd29ya2Zsb3dJZD86IEdyYXBoV29ya2Zsb3dJZDtcbiAgcGF0aD86IHN0cmluZ1tdO1xuICBjb25jdXJyZW5jeT86IG51bWJlcjtcbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xuICB2YWxpZGF0ZUlucHV0cz86IGJvb2xlYW47XG4gIHZhbGlkYXRlT3V0cHV0cz86IGJvb2xlYW47XG4gIG1heExvb3BJdGVyYXRpb25zPzogbnVtYmVyO1xuICBtYXhGb3JlYWNoSXRlcmF0aW9ucz86IG51bWJlcjtcbiAgdXNlUGlubmVkVmFsdWVzPzogYm9vbGVhbjtcbiAgd3JpdGVUaHJvdWdoQ2FjaGU/OiBib29sZWFuO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBleGVjdXRpbmcgYSBzaW5nbGUgbm9kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaE5vZGVFeGVjdXRpb25SZXN1bHQge1xuICBub2RlSWQ6IEdyYXBoTm9kZUlkO1xuICBzdGF0dXM6IEdyYXBoRXhlY3V0aW9uU3RhdHVzO1xuICBpbnB1dHM6IEdyYXBoRXhlY3V0aW9uVmFsdWVzO1xuICBvdXRwdXRzPzogR3JhcGhFeGVjdXRpb25WYWx1ZXM7XG4gIGVycm9yPzogR3JhcGhFeGVjdXRpb25FcnJvclBheWxvYWQ7XG4gIHN0YXJ0ZWRBdDogRGF0ZTtcbiAgZmluaXNoZWRBdD86IERhdGU7XG4gIGZyb21DYWNoZT86IGJvb2xlYW47XG4gIHBpbm5lZD86IGJvb2xlYW47XG4gIGV2ZW50czogR3JhcGhFeGVjdXRpb25FdmVudFtdO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBleGVjdXRpbmcgYW4gZW50aXJlIHdvcmtmbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoRXhlY3V0aW9uUmVzdWx0IHtcbiAgcnVuSWQ6IEdyYXBoUnVuSWQ7XG4gIHBhcmVudFJ1bklkPzogR3JhcGhSdW5JZDtcbiAgd29ya2Zsb3dJZDogR3JhcGhXb3JrZmxvd0lkO1xuICBzdGF0dXM6IEdyYXBoRXhlY3V0aW9uU3RhdHVzO1xuICB3b3JrZmxvdzogR3JhcGhXb3JrZmxvd0RlZmluaXRpb247XG4gIGlucHV0czogR3JhcGhFeGVjdXRpb25WYWx1ZXM7XG4gIG91dHB1dHM6IEdyYXBoRXhlY3V0aW9uVmFsdWVzO1xuICBub2RlUmVzdWx0czogUmVjb3JkPEdyYXBoTm9kZUlkLCBHcmFwaE5vZGVFeGVjdXRpb25SZXN1bHQ+O1xuICBldmVudHM6IEdyYXBoRXhlY3V0aW9uRXZlbnRbXTtcbiAgc3RhcnRlZEF0OiBEYXRlO1xuICBmaW5pc2hlZEF0PzogRGF0ZTtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHVzZWQgdG8gY29uc3RydWN0IGEge0BsaW5rIEdyYXBoRXhlY3V0aW9uQ29udGV4dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhFeGVjdXRpb25Db250ZXh0T3B0aW9ucyB7XG4gIHJ1bklkOiBHcmFwaFJ1bklkO1xuICBwYXJlbnRSdW5JZD86IEdyYXBoUnVuSWQ7XG4gIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbjtcbiAgbm9kZTogR3JhcGhOb2RlRGVmaW5pdGlvbjtcbiAgcGF0aDogc3RyaW5nW107XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogTWV0YWRhdGEgZGVzY3JpYmluZyBhIGxvb3Agbm9kZSdzIGJlaGF2aW91ci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaExvb3BNZXRhZGF0YSB7XG4gIGJvZHk6IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uIHwgdW5rbm93bjtcbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICBjb25kaXRpb24/OiBHcmFwaENvbmRpdGlvbkRlZmluaXRpb247XG4gIGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuICBpbnB1dFBvcnQ/OiBzdHJpbmc7XG4gIG91dHB1dFBvcnQ/OiBzdHJpbmc7XG4gIGl0ZW1Qb3J0Pzogc3RyaW5nO1xuICByZXN1bHRQb3J0Pzogc3RyaW5nO1xuICBzdGF0ZVBvcnQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBhIGNvbmRpdGlvbiBldmFsdWF0ZWQgYnkgdGhlIGxvb3AgY29uZGl0aW9uIGV2YWx1YXRvci5cbiAqXG4gKiBXaGVuIHRoZSBjb25kaXRpb24gb2JqZWN0IGNhcnJpZXMgYW4gYG9wYCBmaWVsZCAoc2VlIHtAbGluayBDb25kaXRpb25FeHByZXNzaW9ufSksXG4gKiB0aGUge0BsaW5rIEdyYXBoQ29uZGl0aW9uRXZhbHVhdG9yfSBkaXNwYXRjaGVzIHRvIHRoZSB7QGxpbmsgQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvcn1cbiAqIGluc3RlYWQgb2YgdGhlIGJ1aWx0LWluIGB0eXBlYC1iYXNlZCBzd2l0Y2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhDb25kaXRpb25EZWZpbml0aW9uIHtcbiAgdHlwZTpcbiAgICB8IFwidHJ1dGh5XCJcbiAgICB8IFwiZmFsc3lcIlxuICAgIHwgXCJlcXVhbHNcIlxuICAgIHwgXCJub3RFcXVhbHNcIlxuICAgIHwgXCJncmVhdGVyVGhhblwiXG4gICAgfCBcImdyZWF0ZXJUaGFuT3JFcXVhbFwiXG4gICAgfCBcImxlc3NUaGFuXCJcbiAgICB8IFwibGVzc1RoYW5PckVxdWFsXCJcbiAgICB8IFwiZXhpc3RzXCJcbiAgICB8IFwiY3VzdG9tXCI7XG4gIGxlZnQ/OiBzdHJpbmc7XG4gIHJpZ2h0PzogdW5rbm93bjtcbiAgZXZhbHVhdG9yPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFBpbm5pbmcgbWV0YWRhdGEgYXR0YWNoZWQgdG8gYSBub2RlIHZpYSBgQHBpbm5hYmxlKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoUGlubmluZ01ldGFkYXRhIHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgdHRsTXM/OiBudW1iZXI7XG4gIHN0cmF0ZWd5OiBcIm1hbnVhbFwiIHwgXCJhdXRvbWF0aWNcIiB8IFwiZGlzYWJsZWRcIjtcbiAgaW5jbHVkZURlcGVuZGVuY2llczogYm9vbGVhbjtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBwaW5uaW5nIGEgbm9kZSBhZnRlciBhIGNvbXBsZXRlZCBydW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhQaW5Ob2RlT3B0aW9ucyB7XG4gIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbjtcbiAgcGxhbjogdW5rbm93bjtcbiAgcmVzdWx0OiBHcmFwaEV4ZWN1dGlvblJlc3VsdDtcbiAgbm9kZUlkOiBzdHJpbmc7XG4gIGluY2x1ZGVEZXBlbmRlbmNpZXM/OiBib29sZWFuO1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdW5waW5uaW5nIGEgbm9kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaFVucGluTm9kZU9wdGlvbnMge1xuICB3b3JrZmxvdzogR3JhcGhXb3JrZmxvd0RlZmluaXRpb247XG4gIG5vZGVJZDogc3RyaW5nO1xuICBmaW5nZXJwcmludDogc3RyaW5nO1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwYXRjaCBhcHBsaWVkIHRvIGEgZ3JhcGggd29ya2Zsb3cgc25hcHNob3QgYWZ0ZXIgZXhlY3V0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoRXhlY3V0aW9uU25hcHNob3RQYXRjaCB7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHN0YXR1czogR3JhcGhFeGVjdXRpb25TdGF0dXM7XG4gIG5vZGVzOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIHN0YXR1czogR3JhcGhFeGVjdXRpb25TdGF0dXM7XG4gICAgICBzdGFydGVkQXQ/OiBzdHJpbmc7XG4gICAgICBmaW5pc2hlZEF0Pzogc3RyaW5nO1xuICAgICAgZXJyb3I/OiBHcmFwaEV4ZWN1dGlvbkVycm9yUGF5bG9hZDtcbiAgICAgIG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGZyb21DYWNoZT86IGJvb2xlYW47XG4gICAgICBwaW5uZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgPjtcbiAgZWRnZXM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgc3RhdHVzOiBHcmFwaEV4ZWN1dGlvblN0YXR1cztcbiAgICAgIGxhc3RWYWx1ZT86IHVua25vd247XG4gICAgICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgICB9XG4gID47XG4gIG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmVudHM6IEdyYXBoRXhlY3V0aW9uRXZlbnRbXTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL2VuZ2luZS90eXBlc1xuICogQHN1bW1hcnkgR3JhcGggZXhlY3V0aW9uIGVuZ2luZSBjb3JlIHR5cGVzLlxuICogQGRlc2NyaXB0aW9uIEVuZ2luZS1wcml2YXRlIHR5cGUgYWxpYXNlcyBhbmQgaW50ZXJmYWNlcy4gRnJvbnRlbmQtc2FmZVxuICogdHlwZXMgKGBFeHByVmFsdWVgLCBgQ29uZGl0aW9uRXhwcmVzc2lvbmAsIGBDb2RlQ29uZGl0aW9uYCxcbiAqIGBTd2l0Y2hDYXNlQ29uZGl0aW9uYCwgYFN3aXRjaENhc2VgLCBgU3dpdGNoTm9kZU1ldGFkYXRhYCxcbiAqIGBOb2RlTWV0YWRhdGFDaGFuZ2VgLCBgR3JhcGhFeGVjdXRpb25FdmVudGAsIGBHcmFwaEV4ZWN1dGlvbkVycm9yUGF5bG9hZGApXG4gKiBsaXZlIGluIGAuLi9zaGFyZWQvdHlwZXNgOyBlbmdpbmUgbW9kdWxlcyBpbXBvcnQgc2hhcmVkIHN5bWJvbHMgZnJvbSB0aGVyZVxuICogYW5kIGVuZ2luZS1wcml2YXRlIHN5bWJvbHMgZnJvbSBoZXJlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIEdyYXBoTm9kZURlZmluaXRpb24sXG4gIEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uLFxufSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblN0YXR1cyB9IGZyb20gXCIuLi9zaGFyZWQvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEdyYXBoRXhlY3V0aW9uRXJyb3JQYXlsb2FkLFxuICBHcmFwaEV4ZWN1dGlvbkV2ZW50LFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5cbi8vIFJlLWV4cG9ydCBmcm9udGVuZC1zYWZlIHR5cGVzIHNvIGVuZ2luZSBtb2R1bGVzIGhhdmUgYSBzaW5nbGUgaW1wb3J0IHN1cmZhY2UuXG5leHBvcnQgdHlwZSB7XG4gIEdyYXBoRXhlY3V0aW9uRXJyb3JQYXlsb2FkLFxuICBHcmFwaEV4ZWN1dGlvbkV2ZW50LFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG5cbi8qKlxuICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgc2luZ2xlIGdyYXBoIGV4ZWN1dGlvbiBydW4uXG4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoUnVuSWQgPSBzdHJpbmc7XG5cbi8qKlxuICogSWRlbnRpZmllciBmb3IgYSB3b3JrZmxvdyBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHcmFwaFdvcmtmbG93SWQgPSBzdHJpbmc7XG5cbi8qKlxuICogSWRlbnRpZmllciBmb3IgYSBub2RlIHdpdGhpbiBhIHdvcmtmbG93LlxuICovXG5leHBvcnQgdHlwZSBHcmFwaE5vZGVJZCA9IHN0cmluZztcblxuLyoqXG4gKiBOYW1lIG9mIGEgcG9ydCBvbiBhIG5vZGUgb3Igd29ya2Zsb3cgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoUG9ydE5hbWUgPSBzdHJpbmc7XG5cbi8qKlxuICogQSBiYWcgb2YgbmFtZWQgdmFsdWVzIGV4Y2hhbmdlZCBiZXR3ZWVuIG5vZGVzIGFuZCB0aGUgd29ya2Zsb3cgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoRXhlY3V0aW9uVmFsdWVzID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGluZmx1ZW5jZSBhIHNpbmdsZSBleGVjdXRpb24gb2YgYSB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaEV4ZWN1dGlvbk9wdGlvbnMge1xuICBydW5JZD86IEdyYXBoUnVuSWQ7XG4gIHBhcmVudFJ1bklkPzogR3JhcGhSdW5JZDtcbiAgd29ya2Zsb3dJZD86IEdyYXBoV29ya2Zsb3dJZDtcbiAgcGF0aD86IHN0cmluZ1tdO1xuICBjb25jdXJyZW5jeT86IG51bWJlcjtcbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xuICB2YWxpZGF0ZUlucHV0cz86IGJvb2xlYW47XG4gIHZhbGlkYXRlT3V0cHV0cz86IGJvb2xlYW47XG4gIG1heExvb3BJdGVyYXRpb25zPzogbnVtYmVyO1xuICBtYXhGb3JlYWNoSXRlcmF0aW9ucz86IG51bWJlcjtcbiAgdXNlUGlubmVkVmFsdWVzPzogYm9vbGVhbjtcbiAgd3JpdGVUaHJvdWdoQ2FjaGU/OiBib29sZWFuO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBleGVjdXRpbmcgYSBzaW5nbGUgbm9kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaE5vZGVFeGVjdXRpb25SZXN1bHQge1xuICBub2RlSWQ6IEdyYXBoTm9kZUlkO1xuICBzdGF0dXM6IEdyYXBoRXhlY3V0aW9uU3RhdHVzO1xuICBpbnB1dHM6IEdyYXBoRXhlY3V0aW9uVmFsdWVzO1xuICBvdXRwdXRzPzogR3JhcGhFeGVjdXRpb25WYWx1ZXM7XG4gIGVycm9yPzogR3JhcGhFeGVjdXRpb25FcnJvclBheWxvYWQ7XG4gIHN0YXJ0ZWRBdDogRGF0ZTtcbiAgZmluaXNoZWRBdD86IERhdGU7XG4gIGZyb21DYWNoZT86IGJvb2xlYW47XG4gIHBpbm5lZD86IGJvb2xlYW47XG4gIGV2ZW50czogR3JhcGhFeGVjdXRpb25FdmVudFtdO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBleGVjdXRpbmcgYW4gZW50aXJlIHdvcmtmbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoRXhlY3V0aW9uUmVzdWx0IHtcbiAgcnVuSWQ6IEdyYXBoUnVuSWQ7XG4gIHBhcmVudFJ1bklkPzogR3JhcGhSdW5JZDtcbiAgd29ya2Zsb3dJZDogR3JhcGhXb3JrZmxvd0lkO1xuICBzdGF0dXM6IEdyYXBoRXhlY3V0aW9uU3RhdHVzO1xuICB3b3JrZmxvdzogR3JhcGhXb3JrZmxvd0RlZmluaXRpb247XG4gIGlucHV0czogR3JhcGhFeGVjdXRpb25WYWx1ZXM7XG4gIG91dHB1dHM6IEdyYXBoRXhlY3V0aW9uVmFsdWVzO1xuICBub2RlUmVzdWx0czogUmVjb3JkPEdyYXBoTm9kZUlkLCBHcmFwaE5vZGVFeGVjdXRpb25SZXN1bHQ+O1xuICBldmVudHM6IEdyYXBoRXhlY3V0aW9uRXZlbnRbXTtcbiAgc3RhcnRlZEF0OiBEYXRlO1xuICBmaW5pc2hlZEF0PzogRGF0ZTtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHVzZWQgdG8gY29uc3RydWN0IGEge0BsaW5rIEdyYXBoRXhlY3V0aW9uQ29udGV4dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhFeGVjdXRpb25Db250ZXh0T3B0aW9ucyB7XG4gIHJ1bklkOiBHcmFwaFJ1bklkO1xuICBwYXJlbnRSdW5JZD86IEdyYXBoUnVuSWQ7XG4gIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbjtcbiAgbm9kZTogR3JhcGhOb2RlRGVmaW5pdGlvbjtcbiAgcGF0aDogc3RyaW5nW107XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogTWV0YWRhdGEgZGVzY3JpYmluZyBhIGxvb3Agbm9kZSdzIGJlaGF2aW91ci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaExvb3BNZXRhZGF0YSB7XG4gIGJvZHk6IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uIHwgdW5rbm93bjtcbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICBjb25kaXRpb24/OiBHcmFwaENvbmRpdGlvbkRlZmluaXRpb247XG4gIGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuICBpbnB1dFBvcnQ/OiBzdHJpbmc7XG4gIG91dHB1dFBvcnQ/OiBzdHJpbmc7XG4gIGl0ZW1Qb3J0Pzogc3RyaW5nO1xuICByZXN1bHRQb3J0Pzogc3RyaW5nO1xuICBzdGF0ZVBvcnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgbWFueSBpdGVtcyBhcmUgdGFrZW4gZnJvbSB0aGUgaW5wdXQgbGlzdCBwZXIgaXRlcmF0aW9uIChmb3JlYWNoIG9ubHkpLlxuICAgKiBEZWZhdWx0IGAxYC4gV2hlbiBncmVhdGVyIHRoYW4gYDFgLCB0aGUgYm9keSByZWNlaXZlcyBhIHNsaWNlIChhcnJheSkgb25cbiAgICogdGhlIGl0ZW0gcG9ydCBhbmQgdGhlIGNvbGxlY3RlZCByZXN1bHQgaXMgb25lIGVudHJ5IHBlciBzbGljZS5cbiAgICovXG4gIHNsaWNlPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBjb25kaXRpb24gZXZhbHVhdGVkIGJ5IHRoZSBsb29wIGNvbmRpdGlvbiBldmFsdWF0b3IuXG4gKlxuICogV2hlbiB0aGUgY29uZGl0aW9uIG9iamVjdCBjYXJyaWVzIGFuIGBvcGAgZmllbGQgKHNlZSB7QGxpbmsgQ29uZGl0aW9uRXhwcmVzc2lvbn0pLFxuICogdGhlIHtAbGluayBHcmFwaENvbmRpdGlvbkV2YWx1YXRvcn0gZGlzcGF0Y2hlcyB0byB0aGUge0BsaW5rIENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3J9XG4gKiBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbiBgdHlwZWAtYmFzZWQgc3dpdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoQ29uZGl0aW9uRGVmaW5pdGlvbiB7XG4gIHR5cGU6XG4gICAgfCBcInRydXRoeVwiXG4gICAgfCBcImZhbHN5XCJcbiAgICB8IFwiZXF1YWxzXCJcbiAgICB8IFwibm90RXF1YWxzXCJcbiAgICB8IFwiZ3JlYXRlclRoYW5cIlxuICAgIHwgXCJncmVhdGVyVGhhbk9yRXF1YWxcIlxuICAgIHwgXCJsZXNzVGhhblwiXG4gICAgfCBcImxlc3NUaGFuT3JFcXVhbFwiXG4gICAgfCBcImV4aXN0c1wiXG4gICAgfCBcImN1c3RvbVwiO1xuICBsZWZ0Pzogc3RyaW5nO1xuICByaWdodD86IHVua25vd247XG4gIGV2YWx1YXRvcj86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBQaW5uaW5nIG1ldGFkYXRhIGF0dGFjaGVkIHRvIGEgbm9kZSB2aWEgYEBwaW5uYWJsZSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaFBpbm5pbmdNZXRhZGF0YSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIHR0bE1zPzogbnVtYmVyO1xuICBzdHJhdGVneTogXCJtYW51YWxcIiB8IFwiYXV0b21hdGljXCIgfCBcImRpc2FibGVkXCI7XG4gIGluY2x1ZGVEZXBlbmRlbmNpZXM6IGJvb2xlYW47XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcGlubmluZyBhIG5vZGUgYWZ0ZXIgYSBjb21wbGV0ZWQgcnVuLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoUGluTm9kZU9wdGlvbnMge1xuICB3b3JrZmxvdzogR3JhcGhXb3JrZmxvd0RlZmluaXRpb247XG4gIHBsYW46IHVua25vd247XG4gIHJlc3VsdDogR3JhcGhFeGVjdXRpb25SZXN1bHQ7XG4gIG5vZGVJZDogc3RyaW5nO1xuICBpbmNsdWRlRGVwZW5kZW5jaWVzPzogYm9vbGVhbjtcbiAgbmFtZXNwYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHVucGlubmluZyBhIG5vZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhVbnBpbk5vZGVPcHRpb25zIHtcbiAgd29ya2Zsb3c6IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uO1xuICBub2RlSWQ6IHN0cmluZztcbiAgZmluZ2VycHJpbnQ6IHN0cmluZztcbiAgbmFtZXNwYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcGF0Y2ggYXBwbGllZCB0byBhIGdyYXBoIHdvcmtmbG93IHNuYXBzaG90IGFmdGVyIGV4ZWN1dGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaEV4ZWN1dGlvblNuYXBzaG90UGF0Y2gge1xuICBydW5JZDogc3RyaW5nO1xuICBzdGF0dXM6IEdyYXBoRXhlY3V0aW9uU3RhdHVzO1xuICBub2RlczogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBzdGF0dXM6IEdyYXBoRXhlY3V0aW9uU3RhdHVzO1xuICAgICAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICAgICAgZmluaXNoZWRBdD86IHN0cmluZztcbiAgICAgIGVycm9yPzogR3JhcGhFeGVjdXRpb25FcnJvclBheWxvYWQ7XG4gICAgICBvdXRwdXRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBmcm9tQ2FjaGU/OiBib29sZWFuO1xuICAgICAgcGlubmVkPzogYm9vbGVhbjtcbiAgICB9XG4gID47XG4gIGVkZ2VzOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIHN0YXR1czogR3JhcGhFeGVjdXRpb25TdGF0dXM7XG4gICAgICBsYXN0VmFsdWU/OiB1bmtub3duO1xuICAgICAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gICAgfVxuICA+O1xuICBvdXRwdXRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZlbnRzOiBHcmFwaEV4ZWN1dGlvbkV2ZW50W107XG59XG4iXX0=