velocious 1.0.605 → 1.0.607

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +51 -1
  2. package/build/background-jobs/job-semantics.js +145 -0
  3. package/build/background-jobs/local-adapter.js +161 -0
  4. package/build/background-jobs/local-dispatcher.js +418 -0
  5. package/build/background-jobs/local-job-registry.js +59 -0
  6. package/build/background-jobs/local-store.js +1219 -0
  7. package/build/background-jobs/main.js +6 -1
  8. package/build/background-jobs/store.js +33 -97
  9. package/build/background-jobs/types.js +26 -1
  10. package/build/configuration-types.js +3 -1
  11. package/build/configuration.js +16 -1
  12. package/build/database/drivers/sqlite/index.js +46 -41
  13. package/build/environment-handlers/browser.js +10 -0
  14. package/build/src/background-jobs/job-semantics.d.ts +65 -0
  15. package/build/src/background-jobs/job-semantics.d.ts.map +1 -0
  16. package/build/src/background-jobs/job-semantics.js +125 -0
  17. package/build/src/background-jobs/local-adapter.d.ts +161 -0
  18. package/build/src/background-jobs/local-adapter.d.ts.map +1 -0
  19. package/build/src/background-jobs/local-adapter.js +141 -0
  20. package/build/src/background-jobs/local-dispatcher.d.ts +185 -0
  21. package/build/src/background-jobs/local-dispatcher.d.ts.map +1 -0
  22. package/build/src/background-jobs/local-dispatcher.js +383 -0
  23. package/build/src/background-jobs/local-job-registry.d.ts +26 -0
  24. package/build/src/background-jobs/local-job-registry.d.ts.map +1 -0
  25. package/build/src/background-jobs/local-job-registry.js +51 -0
  26. package/build/src/background-jobs/local-store.d.ts +364 -0
  27. package/build/src/background-jobs/local-store.d.ts.map +1 -0
  28. package/build/src/background-jobs/local-store.js +1078 -0
  29. package/build/src/background-jobs/main.d.ts.map +1 -1
  30. package/build/src/background-jobs/main.js +8 -2
  31. package/build/src/background-jobs/store.d.ts +0 -9
  32. package/build/src/background-jobs/store.d.ts.map +1 -1
  33. package/build/src/background-jobs/store.js +18 -88
  34. package/build/src/background-jobs/types.d.ts +97 -2
  35. package/build/src/background-jobs/types.d.ts.map +1 -1
  36. package/build/src/background-jobs/types.js +27 -2
  37. package/build/src/configuration-types.d.ts +9 -2
  38. package/build/src/configuration-types.d.ts.map +1 -1
  39. package/build/src/configuration-types.js +4 -2
  40. package/build/src/configuration.d.ts +5 -0
  41. package/build/src/configuration.d.ts.map +1 -1
  42. package/build/src/configuration.js +15 -2
  43. package/build/src/database/drivers/sqlite/index.d.ts +8 -0
  44. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  45. package/build/src/database/drivers/sqlite/index.js +47 -41
  46. package/build/src/environment-handlers/browser.d.ts +9 -0
  47. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  48. package/build/src/environment-handlers/browser.js +10 -1
  49. package/build/src/testing/test-runner.d.ts +42 -10
  50. package/build/src/testing/test-runner.d.ts.map +1 -1
  51. package/build/src/testing/test-runner.js +135 -35
  52. package/build/testing/test-runner.js +141 -33
  53. package/build/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +1 -1
  55. package/scripts/test-browser.js +5 -1
  56. package/src/background-jobs/job-semantics.js +145 -0
  57. package/src/background-jobs/local-adapter.js +161 -0
  58. package/src/background-jobs/local-dispatcher.js +418 -0
  59. package/src/background-jobs/local-job-registry.js +59 -0
  60. package/src/background-jobs/local-store.js +1219 -0
  61. package/src/background-jobs/main.js +6 -1
  62. package/src/background-jobs/store.js +33 -97
  63. package/src/background-jobs/types.js +26 -1
  64. package/src/configuration-types.js +3 -1
  65. package/src/configuration.js +16 -1
  66. package/src/database/drivers/sqlite/index.js +46 -41
  67. package/src/environment-handlers/browser.js +10 -0
  68. package/src/testing/test-runner.js +141 -33
@@ -89,6 +89,14 @@ export default class VelociousDatabaseDriversSqliteNode extends Base {
89
89
  * @returns {Promise<void>}
90
90
  */
91
91
  _writeAdvisoryLockMetadata(lockDirPath: string): Promise<void>;
92
+ /**
93
+ * Publishes a fully initialized lock directory with one atomic rename.
94
+ * A losing candidate is removed in the same call, so concurrent acquisition
95
+ * cannot observe or delete another process's half-written owner metadata.
96
+ * @param {string} lockPath - Stable advisory-lock path.
97
+ * @returns {Promise<boolean>} - Whether this candidate became the lock owner.
98
+ */
99
+ _publishAdvisoryLockDirectory(lockPath: string): Promise<boolean>;
92
100
  /**
93
101
  * Runs acquire advisory lock file.
94
102
  * @param {string} name - Lock name.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/index.js"],"names":[],"mappings":"AAWA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,MAAM,CAAC,OAAO,OAAO,kCAAmC,SAAQ,IAAI;IAClE;;uDAEmD;IACnD,UAAU,EADA,OAAO,QAAQ,EAAE,QAAQ,GAAG,SAAS,CACzB;IAEtB;;oCAEgC;IAChC,sBAAsB,EADZ,MAAM,GAAG,SAAS,CACM;IAE5B,OAAO,kBA6BZ;IAED,gBAAgB,WAMf;IAED,YAAY,WAEX;IAEK,MAAM,kBAGX;IAEK,qBAAqB,kBAQ1B;IAED;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAJX,MAIW,EAAE,OAAO,AAH5B,CACA,EADQ,OAAO,YAAY,EAAE,YAGI,GAFvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAWpE;IAED;;;;OAIG;IACG,mBAAmB,CAAC,GAAG,EAHlB,MAGkB,GAFhB,OAAO,CAAC,MAAM,CAAC,CAM3B;IAED;;;;;;;;;;;;;;;OAeG;IACG,oBAAoB,CAAC,IAAI,EAJpB,MAIoB,EAAE,EAAC,SAAS,EAAC,AAHzC,CACA,EADQ;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAGY,GAFpC,OAAO,CAAC,OAAO,CAAC,CAuB5B;IAED;;;;OAIG;IACG,uBAAuB,CAAC,IAAI,EAHvB,MAGuB,GAFrB,OAAO,CAAC,OAAO,CAAC,CAoB5B;IAED;;;;;;;;;OASG;IACG,oBAAoB,CAAC,IAAI,EAHpB,MAGoB,GAFlB,OAAO,CAAC,OAAO,CAAC,CAU5B;IAED;;;;OAIG;IACG,kBAAkB,CAAC,IAAI,EAHlB,MAGkB,GAFhB,OAAO,CAAC,OAAO,CAAC,CAM5B;IAED;;;OAGG;IACH,6BAA6B,IAFhB,MAAM,CAYlB;IAED;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAHX,MAGW,GAFT,MAAM,CAOlB;IAED;;kCAE8B;IACxB,4BAA4B,IADrB,OAAO,CAAC,IAAI,CAAC,CAGzB;IAED;;;;OAIG;IACG,0BAA0B,CAAC,WAAW,EAHjC,MAGiC,GAF/B,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED;;;;;OAKG;IACG,wBAAwB,CAAC,IAAI,EAJxB,MAIwB,EAAE,EAAC,SAAS,EAAC,EAHrC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAGW,GAFnC,OAAO,CAAC,OAAO,CAAC,CAqC5B;IAED;;;;OAIG;IACG,2BAA2B,CAAC,IAAI,EAH3B,MAG2B,GAFzB,OAAO,CAAC,OAAO,CAAC,CAgC5B;IAED;;;;OAIG;IACG,wBAAwB,CAAC,IAAI,EAHxB,MAGwB,GAFtB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,uBAAuB,CAAC,IAAI,EAHvB,MAGuB,GAFrB,OAAO,CAAC,OAAO,CAAC,CAY5B;IAED;;;;;;;;OAQG;IACG,oBAAoB,CAAC,QAAQ,EAHxB,MAGwB,GAFtB,OAAO,CAAC,OAAO,CAAC,CAuC5B;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/index.js"],"names":[],"mappings":"AAWA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,MAAM,CAAC,OAAO,OAAO,kCAAmC,SAAQ,IAAI;IAClE;;uDAEmD;IACnD,UAAU,EADA,OAAO,QAAQ,EAAE,QAAQ,GAAG,SAAS,CACzB;IAEtB;;oCAEgC;IAChC,sBAAsB,EADZ,MAAM,GAAG,SAAS,CACM;IAE5B,OAAO,kBA6BZ;IAED,gBAAgB,WAMf;IAED,YAAY,WAEX;IAEK,MAAM,kBAGX;IAEK,qBAAqB,kBAQ1B;IAED;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAJX,MAIW,EAAE,OAAO,AAH5B,CACA,EADQ,OAAO,YAAY,EAAE,YAGI,GAFvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAWpE;IAED;;;;OAIG;IACG,mBAAmB,CAAC,GAAG,EAHlB,MAGkB,GAFhB,OAAO,CAAC,MAAM,CAAC,CAM3B;IAED;;;;;;;;;;;;;;;OAeG;IACG,oBAAoB,CAAC,IAAI,EAJpB,MAIoB,EAAE,EAAC,SAAS,EAAC,AAHzC,CACA,EADQ;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAGY,GAFpC,OAAO,CAAC,OAAO,CAAC,CAuB5B;IAED;;;;OAIG;IACG,uBAAuB,CAAC,IAAI,EAHvB,MAGuB,GAFrB,OAAO,CAAC,OAAO,CAAC,CAoB5B;IAED;;;;;;;;;OASG;IACG,oBAAoB,CAAC,IAAI,EAHpB,MAGoB,GAFlB,OAAO,CAAC,OAAO,CAAC,CAU5B;IAED;;;;OAIG;IACG,kBAAkB,CAAC,IAAI,EAHlB,MAGkB,GAFhB,OAAO,CAAC,OAAO,CAAC,CAM5B;IAED;;;OAGG;IACH,6BAA6B,IAFhB,MAAM,CAYlB;IAED;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAHX,MAGW,GAFT,MAAM,CAOlB;IAED;;kCAE8B;IACxB,4BAA4B,IADrB,OAAO,CAAC,IAAI,CAAC,CAGzB;IAED;;;;OAIG;IACG,0BAA0B,CAAC,WAAW,EAHjC,MAGiC,GAF/B,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED;;;;;;OAMG;IACG,6BAA6B,CAAC,QAAQ,EAHjC,MAGiC,GAF/B,OAAO,CAAC,OAAO,CAAC,CAsB5B;IAED;;;;;OAKG;IACG,wBAAwB,CAAC,IAAI,EAJxB,MAIwB,EAAE,EAAC,SAAS,EAAC,EAHrC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAGW,GAFnC,OAAO,CAAC,OAAO,CAAC,CA8B5B;IAED;;;;OAIG;IACG,2BAA2B,CAAC,IAAI,EAH3B,MAG2B,GAFzB,OAAO,CAAC,OAAO,CAAC,CAe5B;IAED;;;;OAIG;IACG,wBAAwB,CAAC,IAAI,EAHxB,MAGwB,GAFtB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,uBAAuB,CAAC,IAAI,EAHvB,MAGuB,GAFrB,OAAO,CAAC,OAAO,CAAC,CAY5B;IAED;;;;;;;;OAQG;IACG,oBAAoB,CAAC,QAAQ,EAHxB,MAGwB,GAFtB,OAAO,CAAC,OAAO,CAAC,CAuC5B;CACF"}
@@ -223,6 +223,35 @@ export default class VelociousDatabaseDriversSqliteNode extends Base {
223
223
  });
224
224
  await fs.writeFile(ownerPath, payload);
225
225
  }
226
+ /**
227
+ * Publishes a fully initialized lock directory with one atomic rename.
228
+ * A losing candidate is removed in the same call, so concurrent acquisition
229
+ * cannot observe or delete another process's half-written owner metadata.
230
+ * @param {string} lockPath - Stable advisory-lock path.
231
+ * @returns {Promise<boolean>} - Whether this candidate became the lock owner.
232
+ */
233
+ async _publishAdvisoryLockDirectory(lockPath) {
234
+ const candidatePath = await fs.mkdtemp(`${lockPath}.pending-`);
235
+ let published = false;
236
+ try {
237
+ await this._writeAdvisoryLockMetadata(candidatePath);
238
+ try {
239
+ await fs.rename(candidatePath, lockPath);
240
+ published = true;
241
+ return true;
242
+ }
243
+ catch (error) {
244
+ const code = /** @type {Error & {code?: string}} */ (error)?.code;
245
+ if (code === "EEXIST" || code === "ENOTEMPTY")
246
+ return false;
247
+ throw error;
248
+ }
249
+ }
250
+ finally {
251
+ if (!published)
252
+ await fs.rm(candidatePath, { force: true, recursive: true });
253
+ }
254
+ }
226
255
  /**
227
256
  * Runs acquire advisory lock file.
228
257
  * @param {string} name - Lock name.
@@ -238,27 +267,20 @@ export default class VelociousDatabaseDriversSqliteNode extends Base {
238
267
  // mkdir succeeds, the deadline elapses, or an unexpected error is
239
268
  // re-thrown.
240
269
  while (true) {
241
- try {
242
- await fs.mkdir(lockPath);
243
- await this._writeAdvisoryLockMetadata(lockPath);
270
+ if (await this._publishAdvisoryLockDirectory(lockPath))
244
271
  return true;
272
+ if (await this._isAdvisoryLockStale(lockPath)) {
273
+ await fs.rm(lockPath, { recursive: true, force: true });
274
+ continue;
245
275
  }
246
- catch (error) {
247
- if ( /** @type {Error & {code?: string}} */(error)?.code !== "EEXIST")
248
- throw error;
249
- if (await this._isAdvisoryLockStale(lockPath)) {
250
- await fs.rm(lockPath, { recursive: true, force: true });
251
- continue;
252
- }
253
- if (deadline !== null) {
254
- const remaining = deadline - Date.now();
255
- if (remaining <= 0)
256
- return false;
257
- await wait(Math.min(pollIntervalMs, remaining));
258
- }
259
- else {
260
- await wait(pollIntervalMs);
261
- }
276
+ if (deadline !== null) {
277
+ const remaining = deadline - Date.now();
278
+ if (remaining <= 0)
279
+ return false;
280
+ await wait(Math.min(pollIntervalMs, remaining));
281
+ }
282
+ else {
283
+ await wait(pollIntervalMs);
262
284
  }
263
285
  }
264
286
  }
@@ -270,29 +292,13 @@ export default class VelociousDatabaseDriversSqliteNode extends Base {
270
292
  async _tryAcquireAdvisoryLockFile(name) {
271
293
  await this._ensureAdvisoryLockDirectory();
272
294
  const lockPath = this._advisoryLockPath(name);
273
- try {
274
- await fs.mkdir(lockPath);
275
- await this._writeAdvisoryLockMetadata(lockPath);
295
+ if (await this._publishAdvisoryLockDirectory(lockPath))
276
296
  return true;
297
+ if (await this._isAdvisoryLockStale(lockPath)) {
298
+ await fs.rm(lockPath, { recursive: true, force: true });
299
+ return await this._publishAdvisoryLockDirectory(lockPath);
277
300
  }
278
- catch (error) {
279
- if ( /** @type {Error & {code?: string}} */(error)?.code !== "EEXIST")
280
- throw error;
281
- if (await this._isAdvisoryLockStale(lockPath)) {
282
- await fs.rm(lockPath, { recursive: true, force: true });
283
- try {
284
- await fs.mkdir(lockPath);
285
- await this._writeAdvisoryLockMetadata(lockPath);
286
- return true;
287
- }
288
- catch (retryError) {
289
- if ( /** @type {Error & {code?: string}} */(retryError)?.code === "EEXIST")
290
- return false;
291
- throw retryError;
292
- }
293
- }
294
- return false;
295
- }
301
+ return false;
296
302
  }
297
303
  /**
298
304
  * Runs release advisory lock file.
@@ -372,4 +378,4 @@ export default class VelociousDatabaseDriversSqliteNode extends Base {
372
378
  }
373
379
  }
374
380
  }
375
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvZHJpdmVycy9zcWxpdGUvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDdEMsT0FBTyxJQUFJLE1BQU0sd0JBQXdCLENBQUE7QUFDekMsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN4QixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFBO0FBQzlCLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQTtBQUM3QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLFVBQVUsTUFBTSwrQkFBK0IsQ0FBQTtBQUV0RCxNQUFNLENBQUMsT0FBTyxPQUFPLGtDQUFtQyxTQUFRLElBQUk7SUFDbEU7O3VEQUVtRDtJQUNuRCxVQUFVLEdBQUcsU0FBUyxDQUFBO0lBRXRCOztvQ0FFZ0M7SUFDaEMsc0JBQXNCLEdBQUcsU0FBUyxDQUFBO0lBRWxDLEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzNCLE1BQU0sV0FBVyxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQTtRQUNsRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFeEMsSUFBSSxDQUFDLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbkMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJ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S0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzlCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFDeEQsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRXBFLElBQUksQ0FBQztZQUNILGdFQUFnRTtZQUNoRSwrREFBK0Q7WUFDL0QsbURBQW1EO1lBQ25ELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUUxQixPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxzQ0FBc0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLENBQUE7UUFDekUsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gXCJub2RlOmNyeXB0b1wiXG5pbXBvcnQgd2FpdCBmcm9tIFwiYXdhaXRlcnkvYnVpbGQvd2FpdC5qc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCJcbmltcG9ydCBvcyBmcm9tIFwibm9kZTpvc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCBxdWVyeSBmcm9tIFwiLi9xdWVyeS5qc1wiXG5pbXBvcnQgc3FsaXRlMyBmcm9tIFwic3FsaXRlM1wiXG5pbXBvcnQge29wZW59IGZyb20gXCJzcWxpdGVcIlxuXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi9iYXNlLmpzXCJcbmltcG9ydCBmaWxlRXhpc3RzIGZyb20gXCIuLi8uLi8uLi91dGlscy9maWxlLWV4aXN0cy5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZU5vZGUgZXh0ZW5kcyBCYXNlIHtcbiAgLyoqXG4gICAqIENvbm5lY3Rpb24uXG4gICAqIEB0eXBlIHtpbXBvcnQoXCJzcWxpdGVcIikuRGF0YWJhc2UgfCB1bmRlZmluZWR9ICovXG4gIGNvbm5lY3Rpb24gPSB1bmRlZmluZWRcblxuICAvKipcbiAgICogQWR2aXNvcnkgbG9jayBkaXJlY3RvcnkuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gIF9hZHZpc29yeUxvY2tEaXJlY3RvcnkgPSB1bmRlZmluZWRcblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmdldEFyZ3MoKVxuICAgIGNvbnN0IGRhdGFiYXNlRGlyID0gYCR7dGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0RGlyZWN0b3J5KCl9L2RiYFxuICAgIGNvbnN0IGRhdGFiYXNlUGF0aCA9IHRoaXMuZGF0YWJhc2VQYXRoKClcblxuICAgIGlmICghYXdhaXQgZmlsZUV4aXN0cyhkYXRhYmFzZURpcikpIHtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKGRhdGFiYXNlRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSlcbiAgICB9XG5cbiAgICBpZiAoYXJncy5yZXNldCkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKGRhdGFiYXNlUGF0aClcbiAgICB9XG5cbiAgICB0aGlzLl9hZHZpc29yeUxvY2tEaXJlY3RvcnkgPSBwYXRoLmpvaW4oZGF0YWJhc2VEaXIsIGAke3RoaXMubG9jYWxTdG9yYWdlTmFtZSgpfS52ZWxvY2lvdXMtYWR2aXNvcnktbG9ja3NgKVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGF3YWl0IG9wZW4oe1xuICAgICAgICBmaWxlbmFtZTogZGF0YWJhc2VQYXRoLFxuICAgICAgICBkcml2ZXI6IHNxbGl0ZTMuRGF0YWJhc2VcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3Qgb3BlbiBkYXRhYmFzZSAke2RhdGFiYXNlUGF0aH0gYmVjYXVzZSBvZiAke2Vycm9yLmNvbnN0cnVjdG9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YCwge2NhdXNlOiBlcnJvcn0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IG9wZW4gZGF0YWJhc2UgJHtkYXRhYmFzZVBhdGh9IGJlY2F1c2Ugb2YgJHt0eXBlb2YgZXJyb3J9OiAke2Vycm9yfWAsIHtjYXVzZTogZXJyb3J9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJWZXJzaW9uKClcbiAgfVxuXG4gIGxvY2FsU3RvcmFnZU5hbWUoKSB7XG4gICAgY29uc3QgYXJncyA9IHRoaXMuZ2V0QXJncygpXG5cbiAgICBpZiAoIWFyZ3MubmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmFtZSBnaXZlbiBmb3IgU1FMaXRlIE5vZGVcIilcblxuICAgIHJldHVybiBgVmVsb2Npb3VzRGF0YWJhc2VEcml2ZXJzU3FsaXRlLS0tJHthcmdzLm5hbWV9YFxuICB9XG5cbiAgZGF0YWJhc2VQYXRoKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXREaXJlY3RvcnkoKX0vZGIvJHt0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKX0uc3FsaXRlYFxuICB9XG5cbiAgYXN5bmMgX2Nsb3NlKCkge1xuICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbj8uY2xvc2UoKVxuICAgIHRoaXMuY29ubmVjdGlvbiA9IHVuZGVmaW5lZFxuICB9XG5cbiAgYXN5bmMgZGVsZXRlRGF0YWJhc2VTdG9yYWdlKCkge1xuICAgIGZvciAoY29uc3Qgc3VmZml4IG9mIFtcIlwiLCBcIi13YWxcIiwgXCItc2htXCIsIFwiLWpvdXJuYWxcIl0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLnVubGluayhgJHt0aGlzLmRhdGFiYXNlUGF0aCgpfSR7c3VmZml4fWApXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIFwiY29kZVwiIGluIGVycm9yICYmIGVycm9yLmNvZGUgPT09IFwiRU5PRU5UXCIpKSB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHF1ZXJ5IGFjdHVhbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbCAtIFNRTCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS5qc1wiKS5RdWVyeU9wdGlvbnN9IFtvcHRpb25zXSAtIFF1ZXJ5IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PltdPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBxdWVyeSBhY3R1YWwuXG4gICAqL1xuICBhc3luYyBfcXVlcnlBY3R1YWwoc3FsLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXRoaXMuY29ubmVjdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29ubmVjdGlvblwiKVxuXG4gICAgaWYgKG9wdGlvbnMuc3FsaXRlU2NyaXB0KSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24uZXhlYyhzcWwpXG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgcXVlcnkodGhpcy5jb25uZWN0aW9uLCBzcWwpXG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBtdXRhdGlvbiB3aXRoIGFmZmVjdGVkLXJvdyBtZXRhZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbCAtIE11dGF0aW9uIFNRTC5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBBZmZlY3RlZCByb3cgY291bnQuXG4gICAqL1xuICBhc3luYyBfYWZmZWN0ZWRSb3dzQWN0dWFsKHNxbCkge1xuICAgIGlmICghdGhpcy5jb25uZWN0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25uZWN0aW9uXCIpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25uZWN0aW9uLnJ1bihzcWwpXG4gICAgcmV0dXJuIHJlc3VsdC5jaGFuZ2VzIHx8IDBcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXllcnMgYSBmaWxlc3lzdGVtIGxvY2sgZGlyZWN0b3J5IG9uIHRvcCBvZiB0aGUgaW4tcHJvY2VzcyB3YWl0ZXJcbiAgICogcXVldWUgc28gU1FMaXRlIGRlcGxveW1lbnRzIHdpdGggbXVsdGlwbGUgTm9kZSBwcm9jZXNzZXMgd3JpdGluZyB0b1xuICAgKiB0aGUgc2FtZSBkYXRhYmFzZSBmaWxlIHNlZSBjb25zaXN0ZW50IGFkdmlzb3J5LWxvY2sgbXV0dWFsIGV4Y2x1c2lvblxuICAgKiBhY3Jvc3MgcHJvY2Vzc2VzLCBub3QganVzdCB3aXRoaW4gYSBzaW5nbGUgcHJvY2Vzcy5cbiAgICpcbiAgICogVGhlIGluLXByb2Nlc3MgcXVldWUgZnJvbSB0aGUgc2hhcmVkIFNRTGl0ZSBiYXNlIGNsYXNzIGlzIHN0aWxsIHVzZWRcbiAgICogZm9yIHRoZSBmYXN0IGludHJhLXByb2Nlc3MgcGF0aCAobm8gcG9sbGluZywgd2FpdGVycyB3YWtlIGVhY2ggb3RoZXJcbiAgICogdGhyb3VnaCB0aGUgYFNldDxzdHJpbmc+YCArIHdhaXRlciBxdWV1ZSk7IHRoZSBmaWxlc3lzdGVtIGxvY2sgaXNcbiAgICogb25seSBjaGVja2VkIG9uY2UgdGhlIGluLXByb2Nlc3MgcXVldWUgaGFzIGdyYW50ZWQgdGhlIGNhbGxlciwgc29cbiAgICogdHlwaWNhbCBzaW5nbGUtcHJvY2VzcyB0cmFmZmljIHBheXMgYXQgbW9zdCB0d28gYGZzLm1rZGlyYCBjYWxsc1xuICAgKiAoY3JlYXRlIGFuZCByZW1vdmUpIHBlciBjcml0aWNhbCBzZWN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIExvY2sgbmFtZS5cbiAgICogQHBhcmFtIHt7dGltZW91dE1zPzogbnVtYmVyIHwgbnVsbH19IFthcmdzXSAtIE9wdGlvbmFsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzOyBgbnVsbGAsIGB1bmRlZmluZWRgLCBvciBuZWdhdGl2ZSBibG9ja3MgZm9yZXZlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgYWR2aXNvcnkgbG9jayB3YXMgYWNxdWlyZWQuXG4gICAqL1xuICBhc3luYyBfYWNxdWlyZUFkdmlzb3J5TG9jayhuYW1lLCB7dGltZW91dE1zfSA9IHt9KSB7XG4gICAgY29uc3QgZGVhZGxpbmUgPSB0eXBlb2YgdGltZW91dE1zID09PSBcIm51bWJlclwiICYmIHRpbWVvdXRNcyA+PSAwID8gRGF0ZS5ub3coKSArIHRpbWVvdXRNcyA6IG51bGxcbiAgICBjb25zdCByZW1haW5pbmdGb3JJblByb2Nlc3MgPSBkZWFkbGluZSAhPT0gbnVsbCA/IE1hdGgubWF4KDAsIGRlYWRsaW5lIC0gRGF0ZS5ub3coKSkgOiBudWxsXG4gICAgY29uc3QgaW5Qcm9jZXNzQWNxdWlyZWQgPSBhd2FpdCBzdXBlci5fYWNxdWlyZUFkdmlzb3J5TG9jayhuYW1lLCB7dGltZW91dE1zOiByZW1haW5pbmdGb3JJblByb2Nlc3N9KVxuXG4gICAgaWYgKCFpblByb2Nlc3NBY3F1aXJlZCkgcmV0dXJuIGZhbHNlXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVtYWluaW5nRm9yRmlsZSA9IGRlYWRsaW5lICE9PSBudWxsID8gTWF0aC5tYXgoMCwgZGVhZGxpbmUgLSBEYXRlLm5vdygpKSA6IG51bGxcbiAgICAgIGNvbnN0IGZpbGVBY3F1aXJlZCA9IGF3YWl0IHRoaXMuX2FjcXVpcmVBZHZpc29yeUxvY2tGaWxlKG5hbWUsIHt0aW1lb3V0TXM6IHJlbWFpbmluZ0ZvckZpbGV9KVxuXG4gICAgICBpZiAoIWZpbGVBY3F1aXJlZCkge1xuICAgICAgICBhd2FpdCBzdXBlci5fcmVsZWFzZUFkdmlzb3J5TG9jayhuYW1lKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgYXdhaXQgc3VwZXIuX3JlbGVhc2VBZHZpc29yeUxvY2sobmFtZSlcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRyeSBhY3F1aXJlIGFkdmlzb3J5IGxvY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTG9jayBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSBhZHZpc29yeSBsb2NrIHdhcyBhY3F1aXJlZCBpbW1lZGlhdGVseS5cbiAgICovXG4gIGFzeW5jIF90cnlBY3F1aXJlQWR2aXNvcnlMb2NrKG5hbWUpIHtcbiAgICBjb25zdCBpblByb2Nlc3NBY3F1aXJlZCA9IGF3YWl0IHN1cGVyLl90cnlBY3F1aXJlQWR2aXNvcnlMb2NrKG5hbWUpXG5cbiAgICBpZiAoIWluUHJvY2Vzc0FjcXVpcmVkKSByZXR1cm4gZmFsc2VcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlQWNxdWlyZWQgPSBhd2FpdCB0aGlzLl90cnlBY3F1aXJlQWR2aXNvcnlMb2NrRmlsZShuYW1lKVxuXG4gICAgICBpZiAoIWZpbGVBY3F1aXJlZCkge1xuICAgICAgICBhd2FpdCBzdXBlci5fcmVsZWFzZUFkdmlzb3J5TG9jayhuYW1lKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgYXdhaXQgc3VwZXIuX3JlbGVhc2VBZHZpc29yeUxvY2sobmFtZSlcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyB0aGUgbG9jayBvbmx5IGlmICoqdGhpcyoqIGRyaXZlciBpbnN0YW5jZSBhY3F1aXJlZCBpdCwgYm90aFxuICAgKiBpbiB0aGUgc2hhcmVkIGluLXByb2Nlc3Mgb3duZXIgdGFibGUgYW5kIGluIHRoZSBvbi1kaXNrIGxvY2tcbiAgICogZGlyZWN0b3J5LiBBIGNhbGxlciB0aGF0IHRyaWVzIHRvIHJlbGVhc2UgYSBsb2NrIGl0IG5ldmVyIGFjcXVpcmVkXG4gICAqIChvciB0aGF0IHdhcyBhbHJlYWR5IHJlbGVhc2VkIGJ5IGFub3RoZXIgZHJpdmVyKSBnZXRzIGBmYWxzZWAgYmFja1xuICAgKiBhbmQgdGhlIGZpbGVzeXN0ZW0gc3RhdGUgaXMgbGVmdCBhbG9uZSBzbyB3ZSBuZXZlciBkZWxldGUgc29tZWJvZHlcbiAgICogZWxzZSdzIGxvY2sgZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIExvY2sgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgYWR2aXNvcnkgbG9jayB3YXMgcmVsZWFzZWQuXG4gICAqL1xuICBhc3luYyBfcmVsZWFzZUFkdmlzb3J5TG9jayhuYW1lKSB7XG4gICAgY29uc3QgaW5Qcm9jZXNzUmVsZWFzZWQgPSBhd2FpdCBzdXBlci5fcmVsZWFzZUFkdmlzb3J5TG9jayhuYW1lKVxuXG4gICAgaWYgKGluUHJvY2Vzc1JlbGVhc2VkKSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWxlYXNlQWR2aXNvcnlMb2NrRmlsZShuYW1lKVxuICAgIH1cblxuICAgIHJldHVybiBpblByb2Nlc3NSZWxlYXNlZFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaXMgYWR2aXNvcnkgbG9jayBoZWxkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIExvY2sgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgYWR2aXNvcnkgbG9jayBpcyBoZWxkLlxuICAgKi9cbiAgYXN5bmMgaXNBZHZpc29yeUxvY2tIZWxkKG5hbWUpIHtcbiAgICBpZiAoYXdhaXQgc3VwZXIuaXNBZHZpc29yeUxvY2tIZWxkKG5hbWUpKSByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2lzQWR2aXNvcnlMb2NrRmlsZUhlbGQobmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJlc29sdmUgYWR2aXNvcnkgbG9jayBkaXJlY3RvcnkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGFkdmlzb3J5LWxvY2sgZGlyZWN0b3J5LlxuICAgKi9cbiAgX3Jlc29sdmVBZHZpc29yeUxvY2tEaXJlY3RvcnkoKSB7XG4gICAgaWYgKCF0aGlzLl9hZHZpc29yeUxvY2tEaXJlY3RvcnkpIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBkZXJpdmluZyB0aGUgZGlyZWN0b3J5IGZvciBjYWxsZXJzIHRoYXQgaW52b2tlZFxuICAgICAgLy8gYWR2aXNvcnkgbG9jayBtZXRob2RzIGJlZm9yZSBgY29ubmVjdCgpYCB3aXJlZCB0aGUgZmllbGQgaW4uXG4gICAgICBjb25zdCBkYXRhYmFzZURpciA9IGAke3RoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldERpcmVjdG9yeSgpfS9kYmBcblxuICAgICAgdGhpcy5fYWR2aXNvcnlMb2NrRGlyZWN0b3J5ID0gcGF0aC5qb2luKGRhdGFiYXNlRGlyLCBgJHt0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKX0udmVsb2Npb3VzLWFkdmlzb3J5LWxvY2tzYClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYWR2aXNvcnlMb2NrRGlyZWN0b3J5XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhZHZpc29yeSBsb2NrIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTG9jayBuYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEZpbGVzeXN0ZW0gcGF0aCBmb3IgdGhlIGFkdmlzb3J5IGxvY2suXG4gICAqL1xuICBfYWR2aXNvcnlMb2NrUGF0aChuYW1lKSB7XG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKG5hbWUpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCAxNilcbiAgICBjb25zdCBzYWZlTmFtZSA9IG5hbWUucmVwbGFjZSgvW15hLXpBLVowLTkuXy1dL2csIFwiX1wiKS5zbGljZSgwLCA2NClcblxuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5fcmVzb2x2ZUFkdmlzb3J5TG9ja0RpcmVjdG9yeSgpLCBgJHtzYWZlTmFtZX0tJHtoYXNofS5sb2NrYClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGVuc3VyZSBhZHZpc29yeSBsb2NrIGRpcmVjdG9yeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIF9lbnN1cmVBZHZpc29yeUxvY2tEaXJlY3RvcnkoKSB7XG4gICAgYXdhaXQgZnMubWtkaXIodGhpcy5fcmVzb2x2ZUFkdmlzb3J5TG9ja0RpcmVjdG9yeSgpLCB7cmVjdXJzaXZlOiB0cnVlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdyaXRlIGFkdmlzb3J5IGxvY2sgbWV0YWRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NrRGlyUGF0aCAtIEFic29sdXRlIHBhdGggb2YgdGhlIGxvY2sgZGlyZWN0b3J5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIF93cml0ZUFkdmlzb3J5TG9ja01ldGFkYXRhKGxvY2tEaXJQYXRoKSB7XG4gICAgY29uc3Qgb3duZXJQYXRoID0gcGF0aC5qb2luKGxvY2tEaXJQYXRoLCBcIm93bmVyLmpzb25cIilcbiAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICAgIGhvc3RuYW1lOiBvcy5ob3N0bmFtZSgpLFxuICAgICAgYWNxdWlyZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgfSlcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvd25lclBhdGgsIHBheWxvYWQpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhY3F1aXJlIGFkdmlzb3J5IGxvY2sgZmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NrIG5hbWUuXG4gICAqIEBwYXJhbSB7e3RpbWVvdXRNcz86IG51bWJlciB8IG51bGx9fSBhcmdzIC0gVGltZW91dCBhcmdzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSBhZHZpc29yeS1sb2NrIGZpbGUgd2FzIGFjcXVpcmVkLlxuICAgKi9cbiAgYXN5bmMgX2FjcXVpcmVBZHZpc29yeUxvY2tGaWxlKG5hbWUsIHt0aW1lb3V0TXN9KSB7XG4gICAgYXdhaXQgdGhpcy5fZW5zdXJlQWR2aXNvcnlMb2NrRGlyZWN0b3J5KClcblxuICAgIGNvbnN0IGxvY2tQYXRoID0gdGhpcy5fYWR2aXNvcnlMb2NrUGF0aChuYW1lKVxuICAgIGNvbnN0IGRlYWRsaW5lID0gdHlwZW9mIHRpbWVvdXRNcyA9PT0gXCJudW1iZXJcIiAmJiB0aW1lb3V0TXMgPj0gMCA/IERhdGUubm93KCkgKyB0aW1lb3V0TXMgOiBudWxsXG4gICAgY29uc3QgcG9sbEludGVydmFsTXMgPSA1MFxuXG4gICAgLy8gSW50ZW50aW9uYWxseSBsb29waW5nIHdpdGhvdXQgYSBmaXhlZCBpdGVyYXRpb24gY2FwIOKAlCBlaXRoZXIgdGhlXG4gICAgLy8gbWtkaXIgc3VjY2VlZHMsIHRoZSBkZWFkbGluZSBlbGFwc2VzLCBvciBhbiB1bmV4cGVjdGVkIGVycm9yIGlzXG4gICAgLy8gcmUtdGhyb3duLlxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5ta2Rpcihsb2NrUGF0aClcbiAgICAgICAgYXdhaXQgdGhpcy5fd3JpdGVBZHZpc29yeUxvY2tNZXRhZGF0YShsb2NrUGF0aClcblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKC8qKiBAdHlwZSB7RXJyb3IgJiB7Y29kZT86IHN0cmluZ319ICovIChlcnJvcik/LmNvZGUgIT09IFwiRUVYSVNUXCIpIHRocm93IGVycm9yXG5cbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuX2lzQWR2aXNvcnlMb2NrU3RhbGUobG9ja1BhdGgpKSB7XG4gICAgICAgICAgYXdhaXQgZnMucm0obG9ja1BhdGgsIHtyZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlfSlcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlYWRsaW5lICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgcmVtYWluaW5nID0gZGVhZGxpbmUgLSBEYXRlLm5vdygpXG5cbiAgICAgICAgICBpZiAocmVtYWluaW5nIDw9IDApIHJldHVybiBmYWxzZVxuXG4gICAgICAgICAgYXdhaXQgd2FpdChNYXRoLm1pbihwb2xsSW50ZXJ2YWxNcywgcmVtYWluaW5nKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB3YWl0KHBvbGxJbnRlcnZhbE1zKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdHJ5IGFjcXVpcmUgYWR2aXNvcnkgbG9jayBmaWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIExvY2sgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgYWR2aXNvcnktbG9jayBmaWxlIHdhcyBhY3F1aXJlZCBpbW1lZGlhdGVseS5cbiAgICovXG4gIGFzeW5jIF90cnlBY3F1aXJlQWR2aXNvcnlMb2NrRmlsZShuYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5fZW5zdXJlQWR2aXNvcnlMb2NrRGlyZWN0b3J5KClcblxuICAgIGNvbnN0IGxvY2tQYXRoID0gdGhpcy5fYWR2aXNvcnlMb2NrUGF0aChuYW1lKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKGxvY2tQYXRoKVxuICAgICAgYXdhaXQgdGhpcy5fd3JpdGVBZHZpc29yeUxvY2tNZXRhZGF0YShsb2NrUGF0aClcblxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKC8qKiBAdHlwZSB7RXJyb3IgJiB7Y29kZT86IHN0cmluZ319ICovIChlcnJvcik/LmNvZGUgIT09IFwiRUVYSVNUXCIpIHRocm93IGVycm9yXG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLl9pc0Fkdmlzb3J5TG9ja1N0YWxlKGxvY2tQYXRoKSkge1xuICAgICAgICBhd2FpdCBmcy5ybShsb2NrUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZnMubWtkaXIobG9ja1BhdGgpXG4gICAgICAgICAgYXdhaXQgdGhpcy5fd3JpdGVBZHZpc29yeUxvY2tNZXRhZGF0YShsb2NrUGF0aClcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0gY2F0Y2ggKHJldHJ5RXJyb3IpIHtcbiAgICAgICAgICBpZiAoLyoqIEB0eXBlIHtFcnJvciAmIHtjb2RlPzogc3RyaW5nfX0gKi8gKHJldHJ5RXJyb3IpPy5jb2RlID09PSBcIkVFWElTVFwiKSByZXR1cm4gZmFsc2VcblxuICAgICAgICAgIHRocm93IHJldHJ5RXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyByZWxlYXNlIGFkdmlzb3J5IGxvY2sgZmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NrIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgX3JlbGVhc2VBZHZpc29yeUxvY2tGaWxlKG5hbWUpIHtcbiAgICBjb25zdCBsb2NrUGF0aCA9IHRoaXMuX2Fkdmlzb3J5TG9ja1BhdGgobmFtZSlcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ybShsb2NrUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQmVzdC1lZmZvcnQgcmVsZWFzZTsgaW4tcHJvY2VzcyBzdGF0ZSBpcyBzdGlsbCBhdXRob3JpdGF0aXZlIGFuZFxuICAgICAgLy8gc3RhbGUtbG9jayBjbGVhbnVwIG9uIHRoZSBuZXh0IGFjcXVpcmUgd2lsbCByZW1vdmUgdGhlIGRpcmVjdG9yeVxuICAgICAgLy8gaWYgaXQgcmVhbGx5IGlzIHN0aWxsIGxpbmdlcmluZy5cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBpcyBhZHZpc29yeSBsb2NrIGZpbGUgaGVsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NrIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIGFkdmlzb3J5LWxvY2sgZmlsZSBleGlzdHMgYW5kIGlzIGFjdGl2ZS5cbiAgICovXG4gIGFzeW5jIF9pc0Fkdmlzb3J5TG9ja0ZpbGVIZWxkKG5hbWUpIHtcbiAgICBjb25zdCBsb2NrUGF0aCA9IHRoaXMuX2Fkdmlzb3J5TG9ja1BhdGgobmFtZSlcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5zdGF0KGxvY2tQYXRoKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuICFhd2FpdCB0aGlzLl9pc0Fkdmlzb3J5TG9ja1N0YWxlKGxvY2tQYXRoKVxuICB9XG5cbiAgLyoqXG4gICAqIEEgbG9jayBkaXJlY3RvcnkgaXMgY29uc2lkZXJlZCBzdGFsZSB3aGVuIGl0cyBvd25lciBtZXRhZGF0YSBuYW1lcyBhXG4gICAqIFBJRCBvbiB0aGlzIGhvc3QgdGhhdCBpcyBubyBsb25nZXIgcnVubmluZy4gQ3Jvc3MtaG9zdCBvd25lcnNoaXAgKGFcbiAgICogZGlmZmVyZW50IGBob3N0bmFtZWApIGlzIHRyZWF0ZWQgYXMgbGl2ZSBiZWNhdXNlIHdlIGNhbm5vdCByZWxpYWJseVxuICAgKiBwcm9iZSBhIFBJRCBvbiBhbm90aGVyIG1hY2hpbmU7IG9wZXJhdG9ycyBpbiB0aGF0IHNpdHVhdGlvbiBzaG91bGRcbiAgICogcmVtb3ZlIHN0YWxlIGxvY2sgZGlyZWN0b3JpZXMgYnkgaGFuZCBpZiB0aGV5IGxpbmdlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2tQYXRoIC0gQWJzb2x1dGUgcGF0aCBvZiB0aGUgbG9jayBkaXJlY3RvcnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIGFkdmlzb3J5LWxvY2sgZmlsZSBpcyBzdGFsZS5cbiAgICovXG4gIGFzeW5jIF9pc0Fkdmlzb3J5TG9ja1N0YWxlKGxvY2tQYXRoKSB7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyByYXdPd25lci5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfSAqL1xuICAgIGxldCByYXdPd25lclxuXG4gICAgdHJ5IHtcbiAgICAgIHJhd093bmVyID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGxvY2tQYXRoLCBcIm93bmVyLmpzb25cIiksIFwidXRmOFwiKVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTWlzc2luZyBvciB1bnJlYWRhYmxlIG1ldGFkYXRhIOKAlCB0cmVhdCBhcyBzdGFsZSBzbyB3ZSBjYW4gcmVjbGFpbS5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBvd25lci5cbiAgICAgKiBAdHlwZSB7e3BpZD86IG51bWJlciwgaG9zdG5hbWU/OiBzdHJpbmd9fSAqL1xuICAgIGxldCBvd25lclxuXG4gICAgdHJ5IHtcbiAgICAgIG93bmVyID0gSlNPTi5wYXJzZShyYXdPd25lcilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKCFvd25lciB8fCB0eXBlb2Ygb3duZXIucGlkICE9PSBcIm51bWJlclwiKSByZXR1cm4gdHJ1ZVxuICAgIGlmIChvd25lci5ob3N0bmFtZSAmJiBvd25lci5ob3N0bmFtZSAhPT0gb3MuaG9zdG5hbWUoKSkgcmV0dXJuIGZhbHNlXG5cbiAgICB0cnkge1xuICAgICAgLy8gYGtpbGwocGlkLCAwKWAgaXMgYSBuby1vcCBzaWduYWwgdGhhdCBmYWlscyB3aXRoIEVTUkNIIGlmIHRoZVxuICAgICAgLy8gcHJvY2VzcyBpcyBub3QgcnVubmluZzsgcGVybWlzc2lvbiBlcnJvcnMgc3RpbGwgaW5kaWNhdGUgdGhlXG4gICAgICAvLyBwcm9jZXNzIGV4aXN0cyBzbyB3ZSB0cmVhdCB0aG9zZSBhcyBcIm5vdCBzdGFsZVwiLlxuICAgICAgcHJvY2Vzcy5raWxsKG93bmVyLnBpZCwgMClcblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge0Vycm9yICYge2NvZGU/OiBzdHJpbmd9fSAqLyAoZXJyb3IpPy5jb2RlID09PSBcIkVTUkNIXCJcbiAgICB9XG4gIH1cbn1cbiJdfQ==
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvZHJpdmVycy9zcWxpdGUvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDdEMsT0FBTyxJQUFJLE1BQU0sd0JBQXdCLENBQUE7QUFDekMsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN4QixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFBO0FBQzlCLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQTtBQUM3QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLFVBQVUsTUFBTSwrQkFBK0IsQ0FBQTtBQUV0RCxNQUFNLENBQUMsT0FBTyxPQUFPLGtDQUFtQyxTQUFRLElBQUk7SUFDbEU7O3VEQUVtRDtJQUNuRCxVQUFVLEdBQUcsU0FBUyxDQUFBO0lBRXRCOztvQ0FFZ0M7SUFDaEMsc0JBQXNCLEdBQUcsU0FBUyxDQUFBO0lBRWxDLEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzNCLE1BQU0sV0FBVyxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQTtRQUNsRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFeEMsSUFBSSxDQUFDLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbkMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJ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SUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVEOzt1REFFK0M7UUFDL0MsSUFBSSxLQUFLLENBQUE7UUFFVCxJQUFJLENBQUM7WUFDSCxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM5QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBQ3hELElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUVwRSxJQUFJLENBQUM7WUFDSCxnRUFBZ0U7WUFDaEUsK0RBQStEO1lBQy9ELG1EQUFtRDtZQUNuRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFFMUIsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sc0NBQXNDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFBO1FBQ3pFLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHdhaXQgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3dhaXQuanNcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiXG5pbXBvcnQgb3MgZnJvbSBcIm5vZGU6b3NcIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgcXVlcnkgZnJvbSBcIi4vcXVlcnkuanNcIlxuaW1wb3J0IHNxbGl0ZTMgZnJvbSBcInNxbGl0ZTNcIlxuaW1wb3J0IHtvcGVufSBmcm9tIFwic3FsaXRlXCJcblxuaW1wb3J0IEJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5pbXBvcnQgZmlsZUV4aXN0cyBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZmlsZS1leGlzdHMuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZURyaXZlcnNTcWxpdGVOb2RlIGV4dGVuZHMgQmFzZSB7XG4gIC8qKlxuICAgKiBDb25uZWN0aW9uLlxuICAgKiBAdHlwZSB7aW1wb3J0KFwic3FsaXRlXCIpLkRhdGFiYXNlIHwgdW5kZWZpbmVkfSAqL1xuICBjb25uZWN0aW9uID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEFkdmlzb3J5IGxvY2sgZGlyZWN0b3J5LlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICBfYWR2aXNvcnlMb2NrRGlyZWN0b3J5ID0gdW5kZWZpbmVkXG5cbiAgYXN5bmMgY29ubmVjdCgpIHtcbiAgICBjb25zdCBhcmdzID0gdGhpcy5nZXRBcmdzKClcbiAgICBjb25zdCBkYXRhYmFzZURpciA9IGAke3RoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldERpcmVjdG9yeSgpfS9kYmBcbiAgICBjb25zdCBkYXRhYmFzZVBhdGggPSB0aGlzLmRhdGFiYXNlUGF0aCgpXG5cbiAgICBpZiAoIWF3YWl0IGZpbGVFeGlzdHMoZGF0YWJhc2VEaXIpKSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihkYXRhYmFzZURpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gICAgfVxuXG4gICAgaWYgKGFyZ3MucmVzZXQpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhkYXRhYmFzZVBhdGgpXG4gICAgfVxuXG4gICAgdGhpcy5fYWR2aXNvcnlMb2NrRGlyZWN0b3J5ID0gcGF0aC5qb2luKGRhdGFiYXNlRGlyLCBgJHt0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKX0udmVsb2Npb3VzLWFkdmlzb3J5LWxvY2tzYClcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gPSBhd2FpdCBvcGVuKHtcbiAgICAgICAgZmlsZW5hbWU6IGRhdGFiYXNlUGF0aCxcbiAgICAgICAgZHJpdmVyOiBzcWxpdGUzLkRhdGFiYXNlXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IG9wZW4gZGF0YWJhc2UgJHtkYXRhYmFzZVBhdGh9IGJlY2F1c2Ugb2YgJHtlcnJvci5jb25zdHJ1Y3Rvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWAsIHtjYXVzZTogZXJyb3J9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBvcGVuIGRhdGFiYXNlICR7ZGF0YWJhc2VQYXRofSBiZWNhdXNlIG9mICR7dHlwZW9mIGVycm9yfTogJHtlcnJvcn1gLCB7Y2F1c2U6IGVycm9yfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyVmVyc2lvbigpXG4gIH1cblxuICBsb2NhbFN0b3JhZ2VOYW1lKCkge1xuICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmdldEFyZ3MoKVxuXG4gICAgaWYgKCFhcmdzLm5hbWUpIHRocm93IG5ldyBFcnJvcihcIk5vIG5hbWUgZ2l2ZW4gZm9yIFNRTGl0ZSBOb2RlXCIpXG5cbiAgICByZXR1cm4gYFZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZS0tLSR7YXJncy5uYW1lfWBcbiAgfVxuXG4gIGRhdGFiYXNlUGF0aCgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0RGlyZWN0b3J5KCl9L2RiLyR7dGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCl9LnNxbGl0ZWBcbiAgfVxuXG4gIGFzeW5jIF9jbG9zZSgpIHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24/LmNsb3NlKClcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSB1bmRlZmluZWRcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZURhdGFiYXNlU3RvcmFnZSgpIHtcbiAgICBmb3IgKGNvbnN0IHN1ZmZpeCBvZiBbXCJcIiwgXCItd2FsXCIsIFwiLXNobVwiLCBcIi1qb3VybmFsXCJdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy51bmxpbmsoYCR7dGhpcy5kYXRhYmFzZVBhdGgoKX0ke3N1ZmZpeH1gKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBcImNvZGVcIiBpbiBlcnJvciAmJiBlcnJvci5jb2RlID09PSBcIkVOT0VOVFwiKSkgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBxdWVyeSBhY3R1YWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWwgLSBTUUwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Jhc2UuanNcIikuUXVlcnlPcHRpb25zfSBbb3B0aW9uc10gLSBRdWVyeSBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj5bXT59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgcXVlcnkgYWN0dWFsLlxuICAgKi9cbiAgYXN5bmMgX3F1ZXJ5QWN0dWFsKHNxbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmNvbm5lY3Rpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbm5lY3Rpb25cIilcblxuICAgIGlmIChvcHRpb25zLnNxbGl0ZVNjcmlwdCkge1xuICAgICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uLmV4ZWMoc3FsKVxuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHF1ZXJ5KHRoaXMuY29ubmVjdGlvbiwgc3FsKVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgbXV0YXRpb24gd2l0aCBhZmZlY3RlZC1yb3cgbWV0YWRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWwgLSBNdXRhdGlvbiBTUUwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59IC0gQWZmZWN0ZWQgcm93IGNvdW50LlxuICAgKi9cbiAgYXN5bmMgX2FmZmVjdGVkUm93c0FjdHVhbChzcWwpIHtcbiAgICBpZiAoIXRoaXMuY29ubmVjdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29ubmVjdGlvblwiKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29ubmVjdGlvbi5ydW4oc3FsKVxuICAgIHJldHVybiByZXN1bHQuY2hhbmdlcyB8fCAwXG4gIH1cblxuICAvKipcbiAgICogTGF5ZXJzIGEgZmlsZXN5c3RlbSBsb2NrIGRpcmVjdG9yeSBvbiB0b3Agb2YgdGhlIGluLXByb2Nlc3Mgd2FpdGVyXG4gICAqIHF1ZXVlIHNvIFNRTGl0ZSBkZXBsb3ltZW50cyB3aXRoIG11bHRpcGxlIE5vZGUgcHJvY2Vzc2VzIHdyaXRpbmcgdG9cbiAgICogdGhlIHNhbWUgZGF0YWJhc2UgZmlsZSBzZWUgY29uc2lzdGVudCBhZHZpc29yeS1sb2NrIG11dHVhbCBleGNsdXNpb25cbiAgICogYWNyb3NzIHByb2Nlc3Nlcywgbm90IGp1c3Qgd2l0aGluIGEgc2luZ2xlIHByb2Nlc3MuXG4gICAqXG4gICAqIFRoZSBpbi1wcm9jZXNzIHF1ZXVlIGZyb20gdGhlIHNoYXJlZCBTUUxpdGUgYmFzZSBjbGFzcyBpcyBzdGlsbCB1c2VkXG4gICAqIGZvciB0aGUgZmFzdCBpbnRyYS1wcm9jZXNzIHBhdGggKG5vIHBvbGxpbmcsIHdhaXRlcnMgd2FrZSBlYWNoIG90aGVyXG4gICAqIHRocm91Z2ggdGhlIGBTZXQ8c3RyaW5nPmAgKyB3YWl0ZXIgcXVldWUpOyB0aGUgZmlsZXN5c3RlbSBsb2NrIGlzXG4gICAqIG9ubHkgY2hlY2tlZCBvbmNlIHRoZSBpbi1wcm9jZXNzIHF1ZXVlIGhhcyBncmFudGVkIHRoZSBjYWxsZXIsIHNvXG4gICAqIHR5cGljYWwgc2luZ2xlLXByb2Nlc3MgdHJhZmZpYyBwYXlzIGF0IG1vc3QgdHdvIGBmcy5ta2RpcmAgY2FsbHNcbiAgICogKGNyZWF0ZSBhbmQgcmVtb3ZlKSBwZXIgY3JpdGljYWwgc2VjdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NrIG5hbWUuXG4gICAqIEBwYXJhbSB7e3RpbWVvdXRNcz86IG51bWJlciB8IG51bGx9fSBbYXJnc10gLSBPcHRpb25hbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kczsgYG51bGxgLCBgdW5kZWZpbmVkYCwgb3IgbmVnYXRpdmUgYmxvY2tzIGZvcmV2ZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIGFkdmlzb3J5IGxvY2sgd2FzIGFjcXVpcmVkLlxuICAgKi9cbiAgYXN5bmMgX2FjcXVpcmVBZHZpc29yeUxvY2sobmFtZSwge3RpbWVvdXRNc30gPSB7fSkge1xuICAgIGNvbnN0IGRlYWRsaW5lID0gdHlwZW9mIHRpbWVvdXRNcyA9PT0gXCJudW1iZXJcIiAmJiB0aW1lb3V0TXMgPj0gMCA/IERhdGUubm93KCkgKyB0aW1lb3V0TXMgOiBudWxsXG4gICAgY29uc3QgcmVtYWluaW5nRm9ySW5Qcm9jZXNzID0gZGVhZGxpbmUgIT09IG51bGwgPyBNYXRoLm1heCgwLCBkZWFkbGluZSAtIERhdGUubm93KCkpIDogbnVsbFxuICAgIGNvbnN0IGluUHJvY2Vzc0FjcXVpcmVkID0gYXdhaXQgc3VwZXIuX2FjcXVpcmVBZHZpc29yeUxvY2sobmFtZSwge3RpbWVvdXRNczogcmVtYWluaW5nRm9ySW5Qcm9jZXNzfSlcblxuICAgIGlmICghaW5Qcm9jZXNzQWNxdWlyZWQpIHJldHVybiBmYWxzZVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbWFpbmluZ0ZvckZpbGUgPSBkZWFkbGluZSAhPT0gbnVsbCA/IE1hdGgubWF4KDAsIGRlYWRsaW5lIC0gRGF0ZS5ub3coKSkgOiBudWxsXG4gICAgICBjb25zdCBmaWxlQWNxdWlyZWQgPSBhd2FpdCB0aGlzLl9hY3F1aXJlQWR2aXNvcnlMb2NrRmlsZShuYW1lLCB7dGltZW91dE1zOiByZW1haW5pbmdGb3JGaWxlfSlcblxuICAgICAgaWYgKCFmaWxlQWNxdWlyZWQpIHtcbiAgICAgICAgYXdhaXQgc3VwZXIuX3JlbGVhc2VBZHZpc29yeUxvY2sobmFtZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHN1cGVyLl9yZWxlYXNlQWR2aXNvcnlMb2NrKG5hbWUpXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogUnVucyB0cnkgYWNxdWlyZSBhZHZpc29yeSBsb2NrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIExvY2sgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgYWR2aXNvcnkgbG9jayB3YXMgYWNxdWlyZWQgaW1tZWRpYXRlbHkuXG4gICAqL1xuICBhc3luYyBfdHJ5QWNxdWlyZUFkdmlzb3J5TG9jayhuYW1lKSB7XG4gICAgY29uc3QgaW5Qcm9jZXNzQWNxdWlyZWQgPSBhd2FpdCBzdXBlci5fdHJ5QWNxdWlyZUFkdmlzb3J5TG9jayhuYW1lKVxuXG4gICAgaWYgKCFpblByb2Nlc3NBY3F1aXJlZCkgcmV0dXJuIGZhbHNlXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZUFjcXVpcmVkID0gYXdhaXQgdGhpcy5fdHJ5QWNxdWlyZUFkdmlzb3J5TG9ja0ZpbGUobmFtZSlcblxuICAgICAgaWYgKCFmaWxlQWNxdWlyZWQpIHtcbiAgICAgICAgYXdhaXQgc3VwZXIuX3JlbGVhc2VBZHZpc29yeUxvY2sobmFtZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHN1cGVyLl9yZWxlYXNlQWR2aXNvcnlMb2NrKG5hbWUpXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgdGhlIGxvY2sgb25seSBpZiAqKnRoaXMqKiBkcml2ZXIgaW5zdGFuY2UgYWNxdWlyZWQgaXQsIGJvdGhcbiAgICogaW4gdGhlIHNoYXJlZCBpbi1wcm9jZXNzIG93bmVyIHRhYmxlIGFuZCBpbiB0aGUgb24tZGlzayBsb2NrXG4gICAqIGRpcmVjdG9yeS4gQSBjYWxsZXIgdGhhdCB0cmllcyB0byByZWxlYXNlIGEgbG9jayBpdCBuZXZlciBhY3F1aXJlZFxuICAgKiAob3IgdGhhdCB3YXMgYWxyZWFkeSByZWxlYXNlZCBieSBhbm90aGVyIGRyaXZlcikgZ2V0cyBgZmFsc2VgIGJhY2tcbiAgICogYW5kIHRoZSBmaWxlc3lzdGVtIHN0YXRlIGlzIGxlZnQgYWxvbmUgc28gd2UgbmV2ZXIgZGVsZXRlIHNvbWVib2R5XG4gICAqIGVsc2UncyBsb2NrIGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NrIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIGFkdmlzb3J5IGxvY2sgd2FzIHJlbGVhc2VkLlxuICAgKi9cbiAgYXN5bmMgX3JlbGVhc2VBZHZpc29yeUxvY2sobmFtZSkge1xuICAgIGNvbnN0IGluUHJvY2Vzc1JlbGVhc2VkID0gYXdhaXQgc3VwZXIuX3JlbGVhc2VBZHZpc29yeUxvY2sobmFtZSlcblxuICAgIGlmIChpblByb2Nlc3NSZWxlYXNlZCkge1xuICAgICAgYXdhaXQgdGhpcy5fcmVsZWFzZUFkdmlzb3J5TG9ja0ZpbGUobmFtZSlcbiAgICB9XG5cbiAgICByZXR1cm4gaW5Qcm9jZXNzUmVsZWFzZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGlzIGFkdmlzb3J5IGxvY2sgaGVsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NrIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIGFkdmlzb3J5IGxvY2sgaXMgaGVsZC5cbiAgICovXG4gIGFzeW5jIGlzQWR2aXNvcnlMb2NrSGVsZChuYW1lKSB7XG4gICAgaWYgKGF3YWl0IHN1cGVyLmlzQWR2aXNvcnlMb2NrSGVsZChuYW1lKSkgcmV0dXJuIHRydWVcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9pc0Fkdmlzb3J5TG9ja0ZpbGVIZWxkKG5hbWUpXG4gIH1cblxuICAvKipcbiAgICogUnVucyByZXNvbHZlIGFkdmlzb3J5IGxvY2sgZGlyZWN0b3J5LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBhZHZpc29yeS1sb2NrIGRpcmVjdG9yeS5cbiAgICovXG4gIF9yZXNvbHZlQWR2aXNvcnlMb2NrRGlyZWN0b3J5KCkge1xuICAgIGlmICghdGhpcy5fYWR2aXNvcnlMb2NrRGlyZWN0b3J5KSB7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gZGVyaXZpbmcgdGhlIGRpcmVjdG9yeSBmb3IgY2FsbGVycyB0aGF0IGludm9rZWRcbiAgICAgIC8vIGFkdmlzb3J5IGxvY2sgbWV0aG9kcyBiZWZvcmUgYGNvbm5lY3QoKWAgd2lyZWQgdGhlIGZpZWxkIGluLlxuICAgICAgY29uc3QgZGF0YWJhc2VEaXIgPSBgJHt0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXREaXJlY3RvcnkoKX0vZGJgXG5cbiAgICAgIHRoaXMuX2Fkdmlzb3J5TG9ja0RpcmVjdG9yeSA9IHBhdGguam9pbihkYXRhYmFzZURpciwgYCR7dGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCl9LnZlbG9jaW91cy1hZHZpc29yeS1sb2Nrc2ApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2Fkdmlzb3J5TG9ja0RpcmVjdG9yeVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYWR2aXNvcnkgbG9jayBwYXRoLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIExvY2sgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBGaWxlc3lzdGVtIHBhdGggZm9yIHRoZSBhZHZpc29yeSBsb2NrLlxuICAgKi9cbiAgX2Fkdmlzb3J5TG9ja1BhdGgobmFtZSkge1xuICAgIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShuYW1lKS5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgMTYpXG4gICAgY29uc3Qgc2FmZU5hbWUgPSBuYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Ll8tXS9nLCBcIl9cIikuc2xpY2UoMCwgNjQpXG5cbiAgICByZXR1cm4gcGF0aC5qb2luKHRoaXMuX3Jlc29sdmVBZHZpc29yeUxvY2tEaXJlY3RvcnkoKSwgYCR7c2FmZU5hbWV9LSR7aGFzaH0ubG9ja2ApXG4gIH1cblxuICAvKipcbiAgICogUnVucyBlbnN1cmUgYWR2aXNvcnkgbG9jayBkaXJlY3RvcnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBfZW5zdXJlQWR2aXNvcnlMb2NrRGlyZWN0b3J5KCkge1xuICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMuX3Jlc29sdmVBZHZpc29yeUxvY2tEaXJlY3RvcnkoKSwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3cml0ZSBhZHZpc29yeSBsb2NrIG1ldGFkYXRhLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9ja0RpclBhdGggLSBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBsb2NrIGRpcmVjdG9yeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBfd3JpdGVBZHZpc29yeUxvY2tNZXRhZGF0YShsb2NrRGlyUGF0aCkge1xuICAgIGNvbnN0IG93bmVyUGF0aCA9IHBhdGguam9pbihsb2NrRGlyUGF0aCwgXCJvd25lci5qc29uXCIpXG4gICAgY29uc3QgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHBpZDogcHJvY2Vzcy5waWQsXG4gICAgICBob3N0bmFtZTogb3MuaG9zdG5hbWUoKSxcbiAgICAgIGFjcXVpcmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgIH0pXG5cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUob3duZXJQYXRoLCBwYXlsb2FkKVxuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBhIGZ1bGx5IGluaXRpYWxpemVkIGxvY2sgZGlyZWN0b3J5IHdpdGggb25lIGF0b21pYyByZW5hbWUuXG4gICAqIEEgbG9zaW5nIGNhbmRpZGF0ZSBpcyByZW1vdmVkIGluIHRoZSBzYW1lIGNhbGwsIHNvIGNvbmN1cnJlbnQgYWNxdWlzaXRpb25cbiAgICogY2Fubm90IG9ic2VydmUgb3IgZGVsZXRlIGFub3RoZXIgcHJvY2VzcydzIGhhbGYtd3JpdHRlbiBvd25lciBtZXRhZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2tQYXRoIC0gU3RhYmxlIGFkdmlzb3J5LWxvY2sgcGF0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGlzIGNhbmRpZGF0ZSBiZWNhbWUgdGhlIGxvY2sgb3duZXIuXG4gICAqL1xuICBhc3luYyBfcHVibGlzaEFkdmlzb3J5TG9ja0RpcmVjdG9yeShsb2NrUGF0aCkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZVBhdGggPSBhd2FpdCBmcy5ta2R0ZW1wKGAke2xvY2tQYXRofS5wZW5kaW5nLWApXG4gICAgbGV0IHB1Ymxpc2hlZCA9IGZhbHNlXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fd3JpdGVBZHZpc29yeUxvY2tNZXRhZGF0YShjYW5kaWRhdGVQYXRoKVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5yZW5hbWUoY2FuZGlkYXRlUGF0aCwgbG9ja1BhdGgpXG4gICAgICAgIHB1Ymxpc2hlZCA9IHRydWVcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSAvKiogQHR5cGUge0Vycm9yICYge2NvZGU/OiBzdHJpbmd9fSAqLyAoZXJyb3IpPy5jb2RlXG5cbiAgICAgICAgaWYgKGNvZGUgPT09IFwiRUVYSVNUXCIgfHwgY29kZSA9PT0gXCJFTk9URU1QVFlcIikgcmV0dXJuIGZhbHNlXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghcHVibGlzaGVkKSBhd2FpdCBmcy5ybShjYW5kaWRhdGVQYXRoLCB7Zm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZX0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYWNxdWlyZSBhZHZpc29yeSBsb2NrIGZpbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTG9jayBuYW1lLlxuICAgKiBAcGFyYW0ge3t0aW1lb3V0TXM/OiBudW1iZXIgfCBudWxsfX0gYXJncyAtIFRpbWVvdXQgYXJncy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgYWR2aXNvcnktbG9jayBmaWxlIHdhcyBhY3F1aXJlZC5cbiAgICovXG4gIGFzeW5jIF9hY3F1aXJlQWR2aXNvcnlMb2NrRmlsZShuYW1lLCB7dGltZW91dE1zfSkge1xuICAgIGF3YWl0IHRoaXMuX2Vuc3VyZUFkdmlzb3J5TG9ja0RpcmVjdG9yeSgpXG5cbiAgICBjb25zdCBsb2NrUGF0aCA9IHRoaXMuX2Fkdmlzb3J5TG9ja1BhdGgobmFtZSlcbiAgICBjb25zdCBkZWFkbGluZSA9IHR5cGVvZiB0aW1lb3V0TXMgPT09IFwibnVtYmVyXCIgJiYgdGltZW91dE1zID49IDAgPyBEYXRlLm5vdygpICsgdGltZW91dE1zIDogbnVsbFxuICAgIGNvbnN0IHBvbGxJbnRlcnZhbE1zID0gNTBcblxuICAgIC8vIEludGVudGlvbmFsbHkgbG9vcGluZyB3aXRob3V0IGEgZml4ZWQgaXRlcmF0aW9uIGNhcCDigJQgZWl0aGVyIHRoZVxuICAgIC8vIG1rZGlyIHN1Y2NlZWRzLCB0aGUgZGVhZGxpbmUgZWxhcHNlcywgb3IgYW4gdW5leHBlY3RlZCBlcnJvciBpc1xuICAgIC8vIHJlLXRocm93bi5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuX3B1Ymxpc2hBZHZpc29yeUxvY2tEaXJlY3RvcnkobG9ja1BhdGgpKSByZXR1cm4gdHJ1ZVxuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5faXNBZHZpc29yeUxvY2tTdGFsZShsb2NrUGF0aCkpIHtcbiAgICAgICAgYXdhaXQgZnMucm0obG9ja1BhdGgsIHtyZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlfSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGRlYWRsaW5lICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGRlYWRsaW5lIC0gRGF0ZS5ub3coKVxuXG4gICAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgYXdhaXQgd2FpdChNYXRoLm1pbihwb2xsSW50ZXJ2YWxNcywgcmVtYWluaW5nKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHdhaXQocG9sbEludGVydmFsTXMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdHJ5IGFjcXVpcmUgYWR2aXNvcnkgbG9jayBmaWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIExvY2sgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgYWR2aXNvcnktbG9jayBmaWxlIHdhcyBhY3F1aXJlZCBpbW1lZGlhdGVseS5cbiAgICovXG4gIGFzeW5jIF90cnlBY3F1aXJlQWR2aXNvcnlMb2NrRmlsZShuYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5fZW5zdXJlQWR2aXNvcnlMb2NrRGlyZWN0b3J5KClcblxuICAgIGNvbnN0IGxvY2tQYXRoID0gdGhpcy5fYWR2aXNvcnlMb2NrUGF0aChuYW1lKVxuXG4gICAgaWYgKGF3YWl0IHRoaXMuX3B1Ymxpc2hBZHZpc29yeUxvY2tEaXJlY3RvcnkobG9ja1BhdGgpKSByZXR1cm4gdHJ1ZVxuXG4gICAgaWYgKGF3YWl0IHRoaXMuX2lzQWR2aXNvcnlMb2NrU3RhbGUobG9ja1BhdGgpKSB7XG4gICAgICBhd2FpdCBmcy5ybShsb2NrUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KVxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3B1Ymxpc2hBZHZpc29yeUxvY2tEaXJlY3RvcnkobG9ja1BhdGgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogUnVucyByZWxlYXNlIGFkdmlzb3J5IGxvY2sgZmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NrIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgX3JlbGVhc2VBZHZpc29yeUxvY2tGaWxlKG5hbWUpIHtcbiAgICBjb25zdCBsb2NrUGF0aCA9IHRoaXMuX2Fkdmlzb3J5TG9ja1BhdGgobmFtZSlcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5ybShsb2NrUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQmVzdC1lZmZvcnQgcmVsZWFzZTsgaW4tcHJvY2VzcyBzdGF0ZSBpcyBzdGlsbCBhdXRob3JpdGF0aXZlIGFuZFxuICAgICAgLy8gc3RhbGUtbG9jayBjbGVhbnVwIG9uIHRoZSBuZXh0IGFjcXVpcmUgd2lsbCByZW1vdmUgdGhlIGRpcmVjdG9yeVxuICAgICAgLy8gaWYgaXQgcmVhbGx5IGlzIHN0aWxsIGxpbmdlcmluZy5cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBpcyBhZHZpc29yeSBsb2NrIGZpbGUgaGVsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBMb2NrIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIGFkdmlzb3J5LWxvY2sgZmlsZSBleGlzdHMgYW5kIGlzIGFjdGl2ZS5cbiAgICovXG4gIGFzeW5jIF9pc0Fkdmlzb3J5TG9ja0ZpbGVIZWxkKG5hbWUpIHtcbiAgICBjb25zdCBsb2NrUGF0aCA9IHRoaXMuX2Fkdmlzb3J5TG9ja1BhdGgobmFtZSlcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5zdGF0KGxvY2tQYXRoKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuICFhd2FpdCB0aGlzLl9pc0Fkdmlzb3J5TG9ja1N0YWxlKGxvY2tQYXRoKVxuICB9XG5cbiAgLyoqXG4gICAqIEEgbG9jayBkaXJlY3RvcnkgaXMgY29uc2lkZXJlZCBzdGFsZSB3aGVuIGl0cyBvd25lciBtZXRhZGF0YSBuYW1lcyBhXG4gICAqIFBJRCBvbiB0aGlzIGhvc3QgdGhhdCBpcyBubyBsb25nZXIgcnVubmluZy4gQ3Jvc3MtaG9zdCBvd25lcnNoaXAgKGFcbiAgICogZGlmZmVyZW50IGBob3N0bmFtZWApIGlzIHRyZWF0ZWQgYXMgbGl2ZSBiZWNhdXNlIHdlIGNhbm5vdCByZWxpYWJseVxuICAgKiBwcm9iZSBhIFBJRCBvbiBhbm90aGVyIG1hY2hpbmU7IG9wZXJhdG9ycyBpbiB0aGF0IHNpdHVhdGlvbiBzaG91bGRcbiAgICogcmVtb3ZlIHN0YWxlIGxvY2sgZGlyZWN0b3JpZXMgYnkgaGFuZCBpZiB0aGV5IGxpbmdlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2tQYXRoIC0gQWJzb2x1dGUgcGF0aCBvZiB0aGUgbG9jayBkaXJlY3RvcnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIGFkdmlzb3J5LWxvY2sgZmlsZSBpcyBzdGFsZS5cbiAgICovXG4gIGFzeW5jIF9pc0Fkdmlzb3J5TG9ja1N0YWxlKGxvY2tQYXRoKSB7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyByYXdPd25lci5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfSAqL1xuICAgIGxldCByYXdPd25lclxuXG4gICAgdHJ5IHtcbiAgICAgIHJhd093bmVyID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGxvY2tQYXRoLCBcIm93bmVyLmpzb25cIiksIFwidXRmOFwiKVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTWlzc2luZyBvciB1bnJlYWRhYmxlIG1ldGFkYXRhIOKAlCB0cmVhdCBhcyBzdGFsZSBzbyB3ZSBjYW4gcmVjbGFpbS5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBvd25lci5cbiAgICAgKiBAdHlwZSB7e3BpZD86IG51bWJlciwgaG9zdG5hbWU/OiBzdHJpbmd9fSAqL1xuICAgIGxldCBvd25lclxuXG4gICAgdHJ5IHtcbiAgICAgIG93bmVyID0gSlNPTi5wYXJzZShyYXdPd25lcilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKCFvd25lciB8fCB0eXBlb2Ygb3duZXIucGlkICE9PSBcIm51bWJlclwiKSByZXR1cm4gdHJ1ZVxuICAgIGlmIChvd25lci5ob3N0bmFtZSAmJiBvd25lci5ob3N0bmFtZSAhPT0gb3MuaG9zdG5hbWUoKSkgcmV0dXJuIGZhbHNlXG5cbiAgICB0cnkge1xuICAgICAgLy8gYGtpbGwocGlkLCAwKWAgaXMgYSBuby1vcCBzaWduYWwgdGhhdCBmYWlscyB3aXRoIEVTUkNIIGlmIHRoZVxuICAgICAgLy8gcHJvY2VzcyBpcyBub3QgcnVubmluZzsgcGVybWlzc2lvbiBlcnJvcnMgc3RpbGwgaW5kaWNhdGUgdGhlXG4gICAgICAvLyBwcm9jZXNzIGV4aXN0cyBzbyB3ZSB0cmVhdCB0aG9zZSBhcyBcIm5vdCBzdGFsZVwiLlxuICAgICAgcHJvY2Vzcy5raWxsKG93bmVyLnBpZCwgMClcblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge0Vycm9yICYge2NvZGU/OiBzdHJpbmd9fSAqLyAoZXJyb3IpPy5jb2RlID09PSBcIkVTUkNIXCJcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  import Base from "./base.js";
2
2
  import Logger from "../logger.js";
3
+ import LocalBackgroundJobsAdapter from "../background-jobs/local-adapter.js";
3
4
  export type MigrationsRequireContextIDFunctionType = (id: string) => {
4
5
  default: typeof import("../database/migration/index.js").default;
5
6
  };
@@ -27,6 +28,14 @@ export default class VelociousEnvironmentsHandlerBrowser extends Base {
27
28
  name: string;
28
29
  file: string;
29
30
  }[] | undefined;
31
+ /**
32
+ * Creates the Browser/Expo local SQLite adapter and in-process dispatcher.
33
+ * @param {{configuration: import("../configuration.js").default}} args - Adapter options.
34
+ * @returns {LocalBackgroundJobsAdapter} - Local background-jobs adapter.
35
+ */
36
+ createBackgroundJobsAdapter({ configuration }: {
37
+ configuration: import("../configuration.js").default;
38
+ }): LocalBackgroundJobsAdapter;
30
39
  /**
31
40
  * Find commands require context result.
32
41
  * @type {CommandsRequireContextType | undefined} */
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/browser.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/environment-handlers/browser.js"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import Base from "./base.js";
2
2
  import * as inflection from "inflection";
3
3
  import restArgsError from "../utils/rest-args-error.js";
4
4
  import Logger from "../logger.js";
5
+ import LocalBackgroundJobsAdapter from "../background-jobs/local-adapter.js";
5
6
  /**
6
7
  * Defines this typedef.
7
8
  * @typedef {(id: string) => {default: typeof import("../database/migration/index.js").default}} MigrationsRequireContextIDFunctionType
@@ -35,6 +36,14 @@ function isMigrationObject(migration) {
35
36
  return Boolean(migration);
36
37
  }
37
38
  export default class VelociousEnvironmentsHandlerBrowser extends Base {
39
+ /**
40
+ * Creates the Browser/Expo local SQLite adapter and in-process dispatcher.
41
+ * @param {{configuration: import("../configuration.js").default}} args - Adapter options.
42
+ * @returns {LocalBackgroundJobsAdapter} - Local background-jobs adapter.
43
+ */
44
+ createBackgroundJobsAdapter({ configuration }) {
45
+ return new LocalBackgroundJobsAdapter({ configuration });
46
+ }
38
47
  /**
39
48
  * Find commands require context result.
40
49
  * @type {CommandsRequireContextType | undefined} */
@@ -279,4 +288,4 @@ export default class VelociousEnvironmentsHandlerBrowser extends Base {
279
288
  return `${sections.join("\n\n")}\n`;
280
289
  }
281
290
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9icm93c2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFFakM7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7R0FJRztBQUNILFNBQVMsaUJBQWlCLENBQUMsU0FBUztJQUNsQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxtQ0FBb0MsU0FBUSxJQUFJO0lBQ25FOzt3REFFb0Q7SUFDcEQsZ0NBQWdDLEdBQUcsU0FBUyxDQUFBO0lBRTVDOzswREFFc0Q7SUFDdEQsK0JBQStCLEdBQUcsU0FBUyxDQUFBO0lBRTNDOzt5REFFcUQ7SUFDckQsOEJBQThCLEdBQUcsU0FBUyxDQUFBO0lBRTFDOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGdDQUFnQyxFQUFFLCtCQUErQixFQUFFLEdBQUcsUUFBUSxFQUFDLEdBQUcsRUFBRTtRQUMvRixLQUFLLEVBQUUsQ0FBQTtRQUNQLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsZ0NBQWdDLEdBQUcsZ0NBQWdDLENBQUE7UUFDeEUsSUFBSSxDQUFDLCtCQUErQixHQUFHLCtCQUErQixDQUFBO1FBQ3RFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUdEOzs7T0FHRztJQUNILEtBQUssQ0FBQyx3QkFBd0I7UUFDNUIsTUFBTSxFQUFDLGdDQUFnQyxF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LFVBQVUsQ0FBQyxDQUFBO1lBQzFCLE1BQU0sWUFBWSxHQUFHLE9BQU8sRUFBRSxDQUFDLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDM0YsTUFBTSxVQUFVLEdBQUcsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFBO1lBRTFDLElBQUksQ0FBQyxVQUFVO2dCQUFFLFNBQVE7WUFFekIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1lBQ25DLENBQUM7WUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNCLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRXJDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUE7SUFDckMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vbG9nZ2VyLmpzXCJcblxuLyoqXG4gKiBEZWZpbmVzIHRoaXMgdHlwZWRlZi5cbiAqIEB0eXBlZGVmIHsoaWQ6IHN0cmluZykgPT4ge2RlZmF1bHQ6IHR5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9taWdyYXRpb24vaW5kZXguanNcIikuZGVmYXVsdH19IE1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dElERnVuY3Rpb25UeXBlXG4gKiBAdHlwZWRlZiB7TWlncmF0aW9uc1JlcXVpcmVDb250ZXh0SURGdW5jdGlvblR5cGUgJiB7XG4gKiAgIGtleXM6ICgpID0+IHN0cmluZ1tdLFxuICogICBpZDogc3RyaW5nXG4gKiB9fSBNaWdyYXRpb25zUmVxdWlyZUNvbnRleHRUeXBlXG4gKi9cblxuLyoqXG4gKiBEZWZpbmVzIHRoaXMgdHlwZWRlZi5cbiAqIEB0eXBlZGVmIHsoaWQ6IHN0cmluZykgPT4ge2RlZmF1bHQ6IHR5cGVvZiBpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9fSBDb21tYW5kc1JlcXVpcmVDb250ZXh0SURGdW5jdGlvblR5cGVcbiAqIEB0eXBlZGVmIHtDb21tYW5kc1JlcXVpcmVDb250ZXh0SURGdW5jdGlvblR5cGUgJiB7XG4gKiAgIGtleXM6ICgpID0+IHN0cmluZ1tdLFxuICogICBpZDogc3RyaW5nXG4gKiB9fSBDb21tYW5kc1JlcXVpcmVDb250ZXh0VHlwZVxuICovXG5cbi8qKlxuICogVGVzdEZpbGVzUmVxdWlyZUNvbnRleHRJREZ1bmN0aW9uVHlwZSB0eXBlLlxuICogQHR5cGVkZWYgeyhpZDogc3RyaW5nKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gVGVzdEZpbGVzUmVxdWlyZUNvbnRleHRJREZ1bmN0aW9uVHlwZVxuICogQHR5cGVkZWYge1Rlc3RGaWxlc1JlcXVpcmVDb250ZXh0SURGdW5jdGlvblR5cGUgJiB7XG4gKiAgIGtleXM6ICgpID0+IHN0cmluZ1tdLFxuICogICBpZDogc3RyaW5nXG4gKiB9fSBUZXN0RmlsZXNSZXF1aXJlQ29udGV4dFR5cGVcbiAqL1xuXG4vKipcbiAqIFJ1bnMgaXMgbWlncmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9iYXNlLmpzXCIpLk1pZ3JhdGlvbk9iamVjdFR5cGUgfCBudWxsfSBtaWdyYXRpb24gLSBDYW5kaWRhdGUgbWlncmF0aW9uIG9iamVjdC5cbiAqIEByZXR1cm5zIHttaWdyYXRpb24gaXMgaW1wb3J0KFwiLi9iYXNlLmpzXCIpLk1pZ3JhdGlvbk9iamVjdFR5cGV9IC0gV2hldGhlciBtaWdyYXRpb24gZXhpc3RzLlxuICovXG5mdW5jdGlvbiBpc01pZ3JhdGlvbk9iamVjdChtaWdyYXRpb24pIHtcbiAgcmV0dXJuIEJvb2xlYW4obWlncmF0aW9uKVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNFbnZpcm9ubWVudHNIYW5kbGVyQnJvd3NlciBleHRlbmRzIEJhc2Uge1xuICAvKipcbiAgICogRmluZCBjb21tYW5kcyByZXF1aXJlIGNvbnRleHQgcmVzdWx0LlxuICAgKiBAdHlwZSB7Q29tbWFuZHNSZXF1aXJlQ29udGV4dFR5cGUgfCB1bmRlZmluZWR9ICovXG4gIGZpbmRDb21tYW5kc1JlcXVpcmVDb250ZXh0UmVzdWx0ID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIE1pZ3JhdGlvbnMgcmVxdWlyZSBjb250ZXh0IHJlc3VsdC5cbiAgICogQHR5cGUge01pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dFR5cGUgfCB1bmRlZmluZWR9ICovXG4gIF9taWdyYXRpb25zUmVxdWlyZUNvbnRleHRSZXN1bHQgPSB1bmRlZmluZWRcblxuICAvKipcbiAgICogVGVzdCBmaWxlcyByZXF1aXJlIGNvbnRleHQgcmVzdWx0LlxuICAgKiBAdHlwZSB7VGVzdEZpbGVzUmVxdWlyZUNvbnRleHRUeXBlIHwgdW5kZWZpbmVkfSAqL1xuICBfdGVzdEZpbGVzUmVxdWlyZUNvbnRleHRSZXN1bHQgPSB1bmRlZmluZWRcblxuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPE1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dFR5cGU+fSBbYXJncy5taWdyYXRpb25zUmVxdWlyZUNvbnRleHRDYWxsYmFja10gLSBNaWdyYXRpb25zIHJlcXVpcmUgY29udGV4dCBjYWxsYmFjay5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPFRlc3RGaWxlc1JlcXVpcmVDb250ZXh0VHlwZT59IFthcmdzLnRlc3RGaWxlc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2tdIC0gVGVzdCBmaWxlcyByZXF1aXJlIGNvbnRleHQgY2FsbGJhY2suXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7bWlncmF0aW9uc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2ssIHRlc3RGaWxlc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2ssIC4uLnJlc3RBcmdzfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLm1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dENhbGxiYWNrID0gbWlncmF0aW9uc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2tcbiAgICB0aGlzLnRlc3RGaWxlc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2sgPSB0ZXN0RmlsZXNSZXF1aXJlQ29udGV4dENhbGxiYWNrXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gIH1cblxuXG4gIC8qKlxuICAgKiBSdW5zIG1pZ3JhdGlvbnMgcmVxdWlyZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNaWdyYXRpb25zUmVxdWlyZUNvbnRleHRUeXBlPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBtaWdyYXRpb25zIHJlcXVpcmUgY29udGV4dC5cbiAgICovXG4gIGFzeW5jIG1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dCgpIHtcbiAgICBjb25zdCB7bWlncmF0aW9uc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2t9ID0gdGhpc1xuXG4gICAgaWYgKCFtaWdyYXRpb25zUmVxdWlyZUNvbnRleHRDYWxsYmFjaykgdGhyb3cgbmV3IEVycm9yKFwibWlncmF0aW9uc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2sgaXMgcmVxdWlyZWRcIilcblxuICAgIHRoaXMuX21pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dFJlc3VsdCB8fD0gYXdhaXQgbWlncmF0aW9uc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2soKVxuXG4gICAgcmV0dXJuIHRoaXMuX21pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dFJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGVzdCBmaWxlcyByZXF1aXJlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRlc3RGaWxlc1JlcXVpcmVDb250ZXh0VHlwZT59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgdGVzdCBmaWxlcyByZXF1aXJlIGNvbnRleHQuXG4gICAqL1xuICBhc3luYyB0ZXN0RmlsZXNSZXF1aXJlQ29udGV4dCgpIHtcbiAgICBjb25zdCB7dGVzdEZpbGVzUmVxdWlyZUNvbnRleHRDYWxsYmFja30gPSB0aGlzXG5cbiAgICBpZiAoIXRlc3RGaWxlc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInRlc3RGaWxlc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2sgaXMgcmVxdWlyZWQgd2hlbiBydW5uaW5nIGJyb3dzZXIgdGVzdHNcIilcbiAgICB9XG5cbiAgICB0aGlzLl90ZXN0RmlsZXNSZXF1aXJlQ29udGV4dFJlc3VsdCB8fD0gYXdhaXQgdGVzdEZpbGVzUmVxdWlyZUNvbnRleHRDYWxsYmFjaygpXG5cbiAgICByZXR1cm4gdGhpcy5fdGVzdEZpbGVzUmVxdWlyZUNvbnRleHRSZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGZpbmQgY29tbWFuZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PGltcG9ydChcIi4vYmFzZS5qc1wiKS5Db21tYW5kRmlsZU9iamVjdFR5cGU+Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kcy5cbiAgICovXG4gIGFzeW5jIGZpbmRDb21tYW5kcygpIHtcbiAgICB0aGlzLl9maW5kQ29tbWFuZHNSZXN1bHQgPSB0aGlzLl9hY3R1YWxGaW5kQ29tbWFuZHMoKVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRDb21tYW5kc1Jlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZmluZCBjb21tYW5kcyByZXF1aXJlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIHtDb21tYW5kc1JlcXVpcmVDb250ZXh0VHlwZX0gLSBUaGUgY29tbWFuZHMgcmVxdWlyZSBjb250ZXh0LlxuICAgKi9cbiAgX2ZpbmRDb21tYW5kc1JlcXVpcmVDb250ZXh0KCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB0aGlzLmZpbmRDb21tYW5kc1JlcXVpcmVDb250ZXh0UmVzdWx0IHx8PSAvKiogQHR5cGUge0NvbW1hbmRzUmVxdWlyZUNvbnRleHRUeXBlfSAqLyAocmVxdWlyZS5jb250ZXh0KFwiLi4vY2xpL2NvbW1hbmRzXCIsIHRydWUsIC9cXC5qcyQvKSlcblxuICAgIHJldHVybiB0aGlzLmZpbmRDb21tYW5kc1JlcXVpcmVDb250ZXh0UmVzdWx0XG4gIH1cblxuICBfYWN0dWFsRmluZENvbW1hbmRzKCkge1xuICAgIGNvbnN0IGNvbW1hbmRGaWxlcyA9IHRoaXMuX2ZpbmRDb21tYW5kc1JlcXVpcmVDb250ZXh0KClcbiAgICBjb25zdCBjb21tYW5kcyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGFGaWxlUGF0aCBvZiBjb21tYW5kRmlsZXMua2V5cygpKSB7XG4gICAgICBjb25zdCBhRmlsZVBhdGhQYXJ0cyA9IGFGaWxlUGF0aC5zcGxpdChcIi9cIilcbiAgICAgIGNvbnN0IGxhc3RQYXJ0ID0gYUZpbGVQYXRoUGFydHNbYUZpbGVQYXRoUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgIGxldCBuYW1lXG5cbiAgICAgIGlmIChsYXN0UGFydCA9PSBcImluZGV4LmpzXCIpIHtcbiAgICAgICAgbmFtZSA9IGFGaWxlUGF0aFBhcnRzW2FGaWxlUGF0aFBhcnRzLmxlbmd0aCAtIDJdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuYW1lID0gbGFzdFBhcnQucmVwbGFjZShcIi5qc1wiLCBcIlwiKVxuICAgICAgfVxuXG4gICAgICBjb21tYW5kcy5wdXNoKHtuYW1lLCBmaWxlOiBhRmlsZVBhdGh9KVxuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcmVxdWlyZSBjb21tYW5kLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFyZ3MuY29tbWFuZFBhcnRzIC0gQ29tbWFuZCBwYXJ0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dHlwZW9mIGltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgcmVxdWlyZSBjb21tYW5kLlxuICAgKi9cbiAgYXN5bmMgcmVxdWlyZUNvbW1hbmQoe2NvbW1hbmRQYXJ0c30pIHtcbiAgICBsZXQgZmlsZVBhdGggPSBcIi5cIlxuXG4gICAgZm9yIChsZXQgY29tbWFuZFBhcnQgb2YgY29tbWFuZFBhcnRzKSB7XG4gICAgICBpZiAoY29tbWFuZFBhcnQgPT0gXCJjXCIpIGNvbW1hbmRQYXJ0ID0gXCJjb25zb2xlXCJcbiAgICAgIGlmIChjb21tYW5kUGFydCA9PSBcImRcIikgY29tbWFuZFBhcnQgPSBcImRlc3Ryb3lcIlxuICAgICAgaWYgKGNvbW1hbmRQYXJ0ID09IFwiZ1wiKSBjb21tYW5kUGFydCA9IFwiZ2VuZXJhdGVcIlxuICAgICAgaWYgKGNvbW1hbmRQYXJ0ID09IFwic1wiKSBjb21tYW5kUGFydCA9IFwic2VydmVyXCJcblxuICAgICAgZmlsZVBhdGggKz0gYC8ke2NvbW1hbmRQYXJ0fWBcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlUGF0aHMgPSBbXVxuXG4gICAgZmlsZVBhdGhzLnB1c2goYCR7ZmlsZVBhdGh9L2luZGV4LmpzYClcbiAgICBmaWxlUGF0aCArPSBcIi5qc1wiXG4gICAgZmlsZVBhdGhzLnB1c2goZmlsZVBhdGgpXG5cbiAgICBjb25zdCBjb21tYW5kc1JlcXVpcmVDb250ZXh0ID0gYXdhaXQgdGhpcy5fZmluZENvbW1hbmRzUmVxdWlyZUNvbnRleHQoKVxuICAgIGxldCBjb21tYW5kQ2xhc3NJbXBvcnRcblxuICAgIGZvciAoY29uc3QgYUZpbGVQYXRoIG9mIGZpbGVQYXRocykge1xuICAgICAgY29tbWFuZENsYXNzSW1wb3J0ID0gY29tbWFuZHNSZXF1aXJlQ29udGV4dChhRmlsZVBhdGgpXG5cbiAgICAgIGlmIChjb21tYW5kQ2xhc3NJbXBvcnQpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNvbW1hbmRDbGFzc0ltcG9ydCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbW1hbmQ6ICR7Y29tbWFuZFBhcnRzLmpvaW4oXCI6XCIpfS4gUG9zc2libGUgY29tbWFuZHM6ICR7Y29tbWFuZHNSZXF1aXJlQ29udGV4dC5rZXlzKCl9YClcbiAgICB9XG5cbiAgICBjb25zdCBDb21tYW5kQ2xhc3MgPSBjb21tYW5kQ2xhc3NJbXBvcnQuZGVmYXVsdFxuXG4gICAgcmV0dXJuIENvbW1hbmRDbGFzc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZmluZCBtaWdyYXRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxpbXBvcnQoXCIuL2Jhc2UuanNcIikuTWlncmF0aW9uT2JqZWN0VHlwZT4+fSAtIFJlc29sdmVzIHdpdGggdGhlIG1pZ3JhdGlvbnMuXG4gICAqL1xuICBhc3luYyBmaW5kTWlncmF0aW9ucygpIHtcbiAgICBjb25zdCBtaWdyYXRpb25zUmVxdWlyZUNvbnRleHQgPSBhd2FpdCB0aGlzLm1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dCgpXG4gICAgLyoqXG4gICAgICogTWlncmF0aW9ucy5cbiAgICAgKiBAdHlwZSB7QXJyYXk8aW1wb3J0KFwiLi9iYXNlLmpzXCIpLk1pZ3JhdGlvbk9iamVjdFR5cGUgfCBudWxsPn0gKi9cbiAgICBjb25zdCBtaWdyYXRpb25zID0gbWlncmF0aW9uc1JlcXVpcmVDb250ZXh0XG4gICAgICAua2V5cygpXG4gICAgICAubWFwKChmaWxlKSA9PiB7XG4gICAgICAgIC8vIFwiMTMsMTRcIiBiZWNhdXNlIHNvbWVzIFwicmVxdWlyZS1jb250ZXh0XCItbnBtLW1vZHVsZSBkZWxldGVzIGZpcnN0IGNoYXJhY3RlciE/XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZmlsZS5tYXRjaCgvKFxcZHsxMywxNH0pLSguKylcXC5qcyQvKVxuXG4gICAgICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsXG5cbiAgICAgICAgLy8gRml4IHJlcXVpcmUtY29udGV4dC1ucG0tbW9kdWxlIGRlbGV0ZXMgZmlyc3QgY2hhcmFjdGVyXG4gICAgICAgIGxldCBmaWxlTmFtZSA9IGZpbGVcbiAgICAgICAgbGV0IGRhdGVOdW1iZXIgPSBtYXRjaFsxXVxuXG4gICAgICAgIGlmIChkYXRlTnVtYmVyLmxlbmd0aCA9PSAxMykge1xuICAgICAgICAgIGRhdGVOdW1iZXIgPSBgMiR7ZGF0ZU51bWJlcn1gXG4gICAgICAgICAgZmlsZU5hbWUgPSBgMiR7ZmlsZU5hbWV9YFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFyc2UgcmVnZXhcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlSW50KGRhdGVOdW1iZXIpXG4gICAgICAgIGNvbnN0IG1pZ3JhdGlvbk5hbWUgPSBtYXRjaFsyXVxuICAgICAgICBjb25zdCBtaWdyYXRpb25DbGFzc05hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKG1pZ3JhdGlvbk5hbWUucmVwbGFjZUFsbChcIi1cIiwgXCJfXCIpKVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZmlsZTogZmlsZU5hbWUsXG4gICAgICAgICAgZnVsbFBhdGg6IGZpbGUsXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBtaWdyYXRpb25DbGFzc05hbWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaXNNaWdyYXRpb25PYmplY3QpXG4gICAgLyoqXG4gICAgICogRmlsZXMuXG4gICAgICogQHR5cGUge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5NaWdyYXRpb25PYmplY3RUeXBlW119ICovXG4gICAgY29uc3QgZmlsZXMgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5NaWdyYXRpb25PYmplY3RUeXBlW119ICovIChtaWdyYXRpb25zKVxuXG4gICAgZmlsZXMuc29ydCgobWlncmF0aW9uMSwgbWlncmF0aW9uMikgPT4gbWlncmF0aW9uMS5kYXRlIC0gbWlncmF0aW9uMi5kYXRlKVxuXG4gICAgcmV0dXJuIGZpbGVzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBpbXBvcnQgdGVzdCBmaWxlcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdGVzdEZpbGVzIC0gVGVzdCBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGltcG9ydFRlc3RGaWxlcyh0ZXN0RmlsZXMpIHtcbiAgICBjb25zdCB0ZXN0RmlsZXNSZXF1aXJlQ29udGV4dCA9IGF3YWl0IHRoaXMudGVzdEZpbGVzUmVxdWlyZUNvbnRleHQoKVxuICAgIGNvbnN0IHJlcXVpcmVLZXlzID0gdGVzdEZpbGVzUmVxdWlyZUNvbnRleHQua2V5cygpXG4gICAgY29uc3Qgbm9ybWFsaXplZEtleXMgPSByZXF1aXJlS2V5cy5tYXAoKGtleSkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIG5vcm1hbGl6ZWQ6IGtleS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5yZXBsYWNlKC9eXFwuXFwvLywgXCJcIilcbiAgICB9KSlcblxuICAgIGZvciAoY29uc3QgdGVzdEZpbGUgb2YgdGVzdEZpbGVzKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IHRlc3RGaWxlLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpXG4gICAgICBjb25zdCBtYXRjaGVkS2V5ID0gbm9ybWFsaXplZEtleXMuZmluZCgoZW50cnkpID0+IG5vcm1hbGl6ZWRGaWxlLmVuZHNXaXRoKGVudHJ5Lm5vcm1hbGl6ZWQpKT8ua2V5XG5cbiAgICAgIGlmICghbWF0Y2hlZEtleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlc3QgZmlsZSAke3Rlc3RGaWxlfSB3YXMgbm90IGZvdW5kIGluIHRoZSBwcm92aWRlZCByZXF1aXJlIGNvbnRleHRgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRlZCA9IHRlc3RGaWxlc1JlcXVpcmVDb250ZXh0KG1hdGNoZWRLZXkpXG5cbiAgICAgIGlmIChpbXBvcnRlZCAmJiB0eXBlb2YgaW1wb3J0ZWQgPT0gXCJvYmplY3RcIiAmJiBcInRoZW5cIiBpbiBpbXBvcnRlZCAmJiB0eXBlb2YgaW1wb3J0ZWQudGhlbiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgYXdhaXQgaW1wb3J0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVxdWlyZSBtaWdyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAtIEZpbGUgcGF0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dHlwZW9mIGltcG9ydChcIi4uL2RhdGFiYXNlL21pZ3JhdGlvbi9pbmRleC5qc1wiKS5kZWZhdWx0Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSByZXF1aXJlIG1pZ3JhdGlvbi5cbiAgICovXG4gIHJlcXVpcmVNaWdyYXRpb24gPSBhc3luYyAoZmlsZVBhdGgpID0+IHtcbiAgICBpZiAoIWZpbGVQYXRoKSB0aHJvdyBuZXcgRXJyb3IoXCJmaWxlUGF0aCBpcyByZXF1aXJlZFwiKVxuXG4gICAgY29uc3QgbWlncmF0aW9uc1JlcXVpcmVDb250ZXh0ID0gYXdhaXQgdGhpcy5taWdyYXRpb25zUmVxdWlyZUNvbnRleHQoKVxuICAgIGNvbnN0IG1pZ3JhdGlvbkltcG9ydCA9IG1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dChmaWxlUGF0aClcblxuICAgIGlmICghbWlncmF0aW9uSW1wb3J0KSB0aHJvdyBuZXcgRXJyb3IoYE1pZ3JhdGlvbiBmaWxlICR7ZmlsZVBhdGh9IG5vdCBmb3VuZGApXG5cbiAgICBjb25zdCBtaWdyYXRpb25JbXBvcnREZWZhdWx0ID0gbWlncmF0aW9uSW1wb3J0LmRlZmF1bHRcblxuICAgIGlmICghbWlncmF0aW9uSW1wb3J0RGVmYXVsdCkgdGhyb3cgbmV3IEVycm9yKFwiTWlncmF0aW9uIGZpbGUgbXVzdCBleHBvcnQgYSBkZWZhdWx0IG1pZ3JhdGlvbiBjbGFzc1wiKVxuICAgIGlmICh0eXBlb2YgbWlncmF0aW9uSW1wb3J0RGVmYXVsdCAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJNaWdyYXRpb24gZGVmYXVsdCBleHBvcnQgaXNuJ3QgYSBmdW5jdGlvbiAoc2hvdWxkIGJlIGEgY2xhc3Mgd2hpY2ggaXMgYSBmdW5jdGlvbiBpbiBKUylcIilcblxuICAgIHJldHVybiBtaWdyYXRpb25JbXBvcnREZWZhdWx0XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhZnRlciBtaWdyYXRpb25zLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gYXJncy5kYnMgLSBEYnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBhZnRlck1pZ3JhdGlvbnMoe2Ric30pIHtcbiAgICBjb25zdCBzdHJ1Y3R1cmVTcWwgPSBhd2FpdCB0aGlzLl9zcWxpdGVTdHJ1Y3R1cmVTcWwoe2Ric30pXG5cbiAgICBpZiAoIXN0cnVjdHVyZVNxbCkgcmV0dXJuXG5cbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzdHJ1Y3R1cmUuc3FsOlwiLCBzdHJ1Y3R1cmVTcWxdKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3FsaXRlIHN0cnVjdHVyZSBzcWwuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSBhcmdzLmRicyAtIERicy5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nIHwgbnVsbD59IC0gUmVzb2x2ZXMgd2l0aCBTUUwgc3RyaW5nLlxuICAgKi9cbiAgYXN5bmMgX3NxbGl0ZVN0cnVjdHVyZVNxbCh7ZGJzfSkge1xuICAgIGNvbnN0IHNxbGl0ZUlkZW50aWZpZXJzID0gT2JqZWN0LmtleXMoZGJzKVxuICAgICAgLmZpbHRlcigoaWRlbnRpZmllcikgPT4gdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0RGF0YWJhc2VUeXBlKGlkZW50aWZpZXIpID09IFwic3FsaXRlXCIpXG5cbiAgICBpZiAoc3FsaXRlSWRlbnRpZmllcnMubGVuZ3RoID09IDApIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBzZWN0aW9ucyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgb2Ygc3FsaXRlSWRlbnRpZmllcnMpIHtcbiAgICAgIGNvbnN0IGRiID0gZGJzW2lkZW50aWZpZXJdXG4gICAgICBjb25zdCBzdHJ1Y3R1cmVTcWwgPSB0eXBlb2YgZGIuc3RydWN0dXJlU3FsID09PSBcImZ1bmN0aW9uXCIgPyBhd2FpdCBkYi5zdHJ1Y3R1cmVTcWwoKSA6IG51bGxcbiAgICAgIGNvbnN0IHRyaW1tZWRTcWwgPSBzdHJ1Y3R1cmVTcWw/LnRyaW1FbmQoKVxuXG4gICAgICBpZiAoIXRyaW1tZWRTcWwpIGNvbnRpbnVlXG5cbiAgICAgIGlmIChzcWxpdGVJZGVudGlmaWVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHNlY3Rpb25zLnB1c2goYC0tICR7aWRlbnRpZmllcn1gKVxuICAgICAgfVxuXG4gICAgICBzZWN0aW9ucy5wdXNoKHRyaW1tZWRTcWwpXG4gICAgfVxuXG4gICAgaWYgKHNlY3Rpb25zLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIGAke3NlY3Rpb25zLmpvaW4oXCJcXG5cXG5cIil9XFxuYFxuICB9XG59XG4iXX0=
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9icm93c2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTywwQkFBMEIsTUFBTSxxQ0FBcUMsQ0FBQTtBQUU1RTs7Ozs7OztHQU9HO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxTQUFTO0lBQ2xDLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQzNCLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLG1DQUFvQyxTQUFRLElBQUk7SUFDbkU7Ozs7T0FJRztJQUNILDJCQUEyQixDQUFDLEVBQUMsYUFBYSxFQUFDO1FBQ3pDLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7SUFDeEQsQ0FBQztJQUVEOzt3REFFb0Q7SUFDcEQsZ0NBQWdDLEdBQUcsU0FBUyxDQUFBO0lBRTVDOzswREFFc0Q7SUFDdEQsK0JBQStCLEdBQUcsU0FBUyxDQUFBO0lBRTNDOzt5REFFcUQ7SUFDckQsOEJBQThCLEdBQUcsU0FBUyxDQUFBO0lBRTFDOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGdDQUFnQyxFQUFFLCtCQUErQixFQUFFLEdBQUcsUUFBUSxFQUFDLEdBQUcsRUFBRTtRQUMvRixLQUFLLEVBQUUsQ0FBQTtRQUNQLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsZ0NBQWdDLEdBQUcsZ0NBQWdDLENBQUE7UUFDeEUsSUFBSSxDQUFDLCtCQUEr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Q0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRTlDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUVuQixLQUFLLE1BQU0sVUFBVSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDM0MsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQzFCLE1BQU0sWUFBWSxHQUFHLE9BQU8sRUFBRSxDQUFDLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDM0YsTUFBTSxVQUFVLEdBQUcsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFBO1lBRTFDLElBQUksQ0FBQyxVQUFVO2dCQUFFLFNBQVE7WUFFekIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1lBQ25DLENBQUM7WUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNCLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRXJDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUE7SUFDckMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBMb2NhbEJhY2tncm91bmRKb2JzQWRhcHRlciBmcm9tIFwiLi4vYmFja2dyb3VuZC1qb2JzL2xvY2FsLWFkYXB0ZXIuanNcIlxuXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICogQHR5cGVkZWYgeyhpZDogc3RyaW5nKSA9PiB7ZGVmYXVsdDogdHlwZW9mIGltcG9ydChcIi4uL2RhdGFiYXNlL21pZ3JhdGlvbi9pbmRleC5qc1wiKS5kZWZhdWx0fX0gTWlncmF0aW9uc1JlcXVpcmVDb250ZXh0SURGdW5jdGlvblR5cGVcbiAqIEB0eXBlZGVmIHtNaWdyYXRpb25zUmVxdWlyZUNvbnRleHRJREZ1bmN0aW9uVHlwZSAmIHtcbiAqICAga2V5czogKCkgPT4gc3RyaW5nW10sXG4gKiAgIGlkOiBzdHJpbmdcbiAqIH19IE1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dFR5cGVcbiAqL1xuXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICogQHR5cGVkZWYgeyhpZDogc3RyaW5nKSA9PiB7ZGVmYXVsdDogdHlwZW9mIGltcG9ydChcIi4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH19IENvbW1hbmRzUmVxdWlyZUNvbnRleHRJREZ1bmN0aW9uVHlwZVxuICogQHR5cGVkZWYge0NvbW1hbmRzUmVxdWlyZUNvbnRleHRJREZ1bmN0aW9uVHlwZSAmIHtcbiAqICAga2V5czogKCkgPT4gc3RyaW5nW10sXG4gKiAgIGlkOiBzdHJpbmdcbiAqIH19IENvbW1hbmRzUmVxdWlyZUNvbnRleHRUeXBlXG4gKi9cblxuLyoqXG4gKiBUZXN0RmlsZXNSZXF1aXJlQ29udGV4dElERnVuY3Rpb25UeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7KGlkOiBzdHJpbmcpID0+IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBUZXN0RmlsZXNSZXF1aXJlQ29udGV4dElERnVuY3Rpb25UeXBlXG4gKiBAdHlwZWRlZiB7VGVzdEZpbGVzUmVxdWlyZUNvbnRleHRJREZ1bmN0aW9uVHlwZSAmIHtcbiAqICAga2V5czogKCkgPT4gc3RyaW5nW10sXG4gKiAgIGlkOiBzdHJpbmdcbiAqIH19IFRlc3RGaWxlc1JlcXVpcmVDb250ZXh0VHlwZVxuICovXG5cbi8qKlxuICogUnVucyBpcyBtaWdyYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2Jhc2UuanNcIikuTWlncmF0aW9uT2JqZWN0VHlwZSB8IG51bGx9IG1pZ3JhdGlvbiAtIENhbmRpZGF0ZSBtaWdyYXRpb24gb2JqZWN0LlxuICogQHJldHVybnMge21pZ3JhdGlvbiBpcyBpbXBvcnQoXCIuL2Jhc2UuanNcIikuTWlncmF0aW9uT2JqZWN0VHlwZX0gLSBXaGV0aGVyIG1pZ3JhdGlvbiBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIGlzTWlncmF0aW9uT2JqZWN0KG1pZ3JhdGlvbikge1xuICByZXR1cm4gQm9vbGVhbihtaWdyYXRpb24pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0Vudmlyb25tZW50c0hhbmRsZXJCcm93c2VyIGV4dGVuZHMgQmFzZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBCcm93c2VyL0V4cG8gbG9jYWwgU1FMaXRlIGFkYXB0ZXIgYW5kIGluLXByb2Nlc3MgZGlzcGF0Y2hlci5cbiAgICogQHBhcmFtIHt7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fX0gYXJncyAtIEFkYXB0ZXIgb3B0aW9ucy5cbiAgICogQHJldHVybnMge0xvY2FsQmFja2dyb3VuZEpvYnNBZGFwdGVyfSAtIExvY2FsIGJhY2tncm91bmQtam9icyBhZGFwdGVyLlxuICAgKi9cbiAgY3JlYXRlQmFja2dyb3VuZEpvYnNBZGFwdGVyKHtjb25maWd1cmF0aW9ufSkge1xuICAgIHJldHVybiBuZXcgTG9jYWxCYWNrZ3JvdW5kSm9ic0FkYXB0ZXIoe2NvbmZpZ3VyYXRpb259KVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgY29tbWFuZHMgcmVxdWlyZSBjb250ZXh0IHJlc3VsdC5cbiAgICogQHR5cGUge0NvbW1hbmRzUmVxdWlyZUNvbnRleHRUeXBlIHwgdW5kZWZpbmVkfSAqL1xuICBmaW5kQ29tbWFuZHNSZXF1aXJlQ29udGV4dFJlc3VsdCA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBNaWdyYXRpb25zIHJlcXVpcmUgY29udGV4dCByZXN1bHQuXG4gICAqIEB0eXBlIHtNaWdyYXRpb25zUmVxdWlyZUNvbnRleHRUeXBlIHwgdW5kZWZpbmVkfSAqL1xuICBfbWlncmF0aW9uc1JlcXVpcmVDb250ZXh0UmVzdWx0ID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIFRlc3QgZmlsZXMgcmVxdWlyZSBjb250ZXh0IHJlc3VsdC5cbiAgICogQHR5cGUge1Rlc3RGaWxlc1JlcXVpcmVDb250ZXh0VHlwZSB8IHVuZGVmaW5lZH0gKi9cbiAgX3Rlc3RGaWxlc1JlcXVpcmVDb250ZXh0UmVzdWx0ID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxNaWdyYXRpb25zUmVxdWlyZUNvbnRleHRUeXBlPn0gW2FyZ3MubWlncmF0aW9uc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2tdIC0gTWlncmF0aW9ucyByZXF1aXJlIGNvbnRleHQgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxUZXN0RmlsZXNSZXF1aXJlQ29udGV4dFR5cGU+fSBbYXJncy50ZXN0RmlsZXNSZXF1aXJlQ29udGV4dENhbGxiYWNrXSAtIFRlc3QgZmlsZXMgcmVxdWlyZSBjb250ZXh0IGNhbGxiYWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe21pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dENhbGxiYWNrLCB0ZXN0RmlsZXNSZXF1aXJlQ29udGV4dENhbGxiYWNrLCAuLi5yZXN0QXJnc30gPSB7fSkge1xuICAgIHN1cGVyKClcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5taWdyYXRpb25zUmVxdWlyZUNvbnRleHRDYWxsYmFjayA9IG1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dENhbGxiYWNrXG4gICAgdGhpcy50ZXN0RmlsZXNSZXF1aXJlQ29udGV4dENhbGxiYWNrID0gdGVzdEZpbGVzUmVxdWlyZUNvbnRleHRDYWxsYmFja1xuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICB9XG5cblxuICAvKipcbiAgICogUnVucyBtaWdyYXRpb25zIHJlcXVpcmUgY29udGV4dC5cbiAgICogQHJldHVybnMge1Byb21pc2U8TWlncmF0aW9uc1JlcXVpcmVDb250ZXh0VHlwZT59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgbWlncmF0aW9ucyByZXF1aXJlIGNvbnRleHQuXG4gICAqL1xuICBhc3luYyBtaWdyYXRpb25zUmVxdWlyZUNvbnRleHQoKSB7XG4gICAgY29uc3Qge21pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dENhbGxiYWNrfSA9IHRoaXNcblxuICAgIGlmICghbWlncmF0aW9uc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2spIHRocm93IG5ldyBFcnJvcihcIm1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dENhbGxiYWNrIGlzIHJlcXVpcmVkXCIpXG5cbiAgICB0aGlzLl9taWdyYXRpb25zUmVxdWlyZUNvbnRleHRSZXN1bHQgfHw9IGF3YWl0IG1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dENhbGxiYWNrKClcblxuICAgIHJldHVybiB0aGlzLl9taWdyYXRpb25zUmVxdWlyZUNvbnRleHRSZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRlc3QgZmlsZXMgcmVxdWlyZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUZXN0RmlsZXNSZXF1aXJlQ29udGV4dFR5cGU+fSAtIFJlc29sdmVzIHdpdGggdGhlIHRlc3QgZmlsZXMgcmVxdWlyZSBjb250ZXh0LlxuICAgKi9cbiAgYXN5bmMgdGVzdEZpbGVzUmVxdWlyZUNvbnRleHQoKSB7XG4gICAgY29uc3Qge3Rlc3RGaWxlc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2t9ID0gdGhpc1xuXG4gICAgaWYgKCF0ZXN0RmlsZXNSZXF1aXJlQ29udGV4dENhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0ZXN0RmlsZXNSZXF1aXJlQ29udGV4dENhbGxiYWNrIGlzIHJlcXVpcmVkIHdoZW4gcnVubmluZyBicm93c2VyIHRlc3RzXCIpXG4gICAgfVxuXG4gICAgdGhpcy5fdGVzdEZpbGVzUmVxdWlyZUNvbnRleHRSZXN1bHQgfHw9IGF3YWl0IHRlc3RGaWxlc1JlcXVpcmVDb250ZXh0Q2FsbGJhY2soKVxuXG4gICAgcmV0dXJuIHRoaXMuX3Rlc3RGaWxlc1JlcXVpcmVDb250ZXh0UmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogUnVucyBmaW5kIGNvbW1hbmRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxpbXBvcnQoXCIuL2Jhc2UuanNcIikuQ29tbWFuZEZpbGVPYmplY3RUeXBlPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZHMuXG4gICAqL1xuICBhc3luYyBmaW5kQ29tbWFuZHMoKSB7XG4gICAgdGhpcy5fZmluZENvbW1hbmRzUmVzdWx0ID0gdGhpcy5fYWN0dWFsRmluZENvbW1hbmRzKClcblxuICAgIHJldHVybiB0aGlzLl9maW5kQ29tbWFuZHNSZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGZpbmQgY29tbWFuZHMgcmVxdWlyZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyB7Q29tbWFuZHNSZXF1aXJlQ29udGV4dFR5cGV9IC0gVGhlIGNvbW1hbmRzIHJlcXVpcmUgY29udGV4dC5cbiAgICovXG4gIF9maW5kQ29tbWFuZHNSZXF1aXJlQ29udGV4dCgpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdGhpcy5maW5kQ29tbWFuZHNSZXF1aXJlQ29udGV4dFJlc3VsdCB8fD0gLyoqIEB0eXBlIHtDb21tYW5kc1JlcXVpcmVDb250ZXh0VHlwZX0gKi8gKHJlcXVpcmUuY29udGV4dChcIi4uL2NsaS9jb21tYW5kc1wiLCB0cnVlLCAvXFwuanMkLykpXG5cbiAgICByZXR1cm4gdGhpcy5maW5kQ29tbWFuZHNSZXF1aXJlQ29udGV4dFJlc3VsdFxuICB9XG5cbiAgX2FjdHVhbEZpbmRDb21tYW5kcygpIHtcbiAgICBjb25zdCBjb21tYW5kRmlsZXMgPSB0aGlzLl9maW5kQ29tbWFuZHNSZXF1aXJlQ29udGV4dCgpXG4gICAgY29uc3QgY29tbWFuZHMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBhRmlsZVBhdGggb2YgY29tbWFuZEZpbGVzLmtleXMoKSkge1xuICAgICAgY29uc3QgYUZpbGVQYXRoUGFydHMgPSBhRmlsZVBhdGguc3BsaXQoXCIvXCIpXG4gICAgICBjb25zdCBsYXN0UGFydCA9IGFGaWxlUGF0aFBhcnRzW2FGaWxlUGF0aFBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICBsZXQgbmFtZVxuXG4gICAgICBpZiAobGFzdFBhcnQgPT0gXCJpbmRleC5qc1wiKSB7XG4gICAgICAgIG5hbWUgPSBhRmlsZVBhdGhQYXJ0c1thRmlsZVBhdGhQYXJ0cy5sZW5ndGggLSAyXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IGxhc3RQYXJ0LnJlcGxhY2UoXCIuanNcIiwgXCJcIilcbiAgICAgIH1cblxuICAgICAgY29tbWFuZHMucHVzaCh7bmFtZSwgZmlsZTogYUZpbGVQYXRofSlcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbWFuZHNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJlcXVpcmUgY29tbWFuZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcmdzLmNvbW1hbmRQYXJ0cyAtIENvbW1hbmQgcGFydHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHR5cGVvZiBpbXBvcnQoXCIuLi9jbGkvYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIHJlcXVpcmUgY29tbWFuZC5cbiAgICovXG4gIGFzeW5jIHJlcXVpcmVDb21tYW5kKHtjb21tYW5kUGFydHN9KSB7XG4gICAgbGV0IGZpbGVQYXRoID0gXCIuXCJcblxuICAgIGZvciAobGV0IGNvbW1hbmRQYXJ0IG9mIGNvbW1hbmRQYXJ0cykge1xuICAgICAgaWYgKGNvbW1hbmRQYXJ0ID09IFwiY1wiKSBjb21tYW5kUGFydCA9IFwiY29uc29sZVwiXG4gICAgICBpZiAoY29tbWFuZFBhcnQgPT0gXCJkXCIpIGNvbW1hbmRQYXJ0ID0gXCJkZXN0cm95XCJcbiAgICAgIGlmIChjb21tYW5kUGFydCA9PSBcImdcIikgY29tbWFuZFBhcnQgPSBcImdlbmVyYXRlXCJcbiAgICAgIGlmIChjb21tYW5kUGFydCA9PSBcInNcIikgY29tbWFuZFBhcnQgPSBcInNlcnZlclwiXG5cbiAgICAgIGZpbGVQYXRoICs9IGAvJHtjb21tYW5kUGFydH1gXG4gICAgfVxuXG4gICAgY29uc3QgZmlsZVBhdGhzID0gW11cblxuICAgIGZpbGVQYXRocy5wdXNoKGAke2ZpbGVQYXRofS9pbmRleC5qc2ApXG4gICAgZmlsZVBhdGggKz0gXCIuanNcIlxuICAgIGZpbGVQYXRocy5wdXNoKGZpbGVQYXRoKVxuXG4gICAgY29uc3QgY29tbWFuZHNSZXF1aXJlQ29udGV4dCA9IGF3YWl0IHRoaXMuX2ZpbmRDb21tYW5kc1JlcXVpcmVDb250ZXh0KClcbiAgICBsZXQgY29tbWFuZENsYXNzSW1wb3J0XG5cbiAgICBmb3IgKGNvbnN0IGFGaWxlUGF0aCBvZiBmaWxlUGF0aHMpIHtcbiAgICAgIGNvbW1hbmRDbGFzc0ltcG9ydCA9IGNvbW1hbmRzUmVxdWlyZUNvbnRleHQoYUZpbGVQYXRoKVxuXG4gICAgICBpZiAoY29tbWFuZENsYXNzSW1wb3J0KSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjb21tYW5kQ2xhc3NJbXBvcnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmRQYXJ0cy5qb2luKFwiOlwiKX0uIFBvc3NpYmxlIGNvbW1hbmRzOiAke2NvbW1hbmRzUmVxdWlyZUNvbnRleHQua2V5cygpfWApXG4gICAgfVxuXG4gICAgY29uc3QgQ29tbWFuZENsYXNzID0gY29tbWFuZENsYXNzSW1wb3J0LmRlZmF1bHRcblxuICAgIHJldHVybiBDb21tYW5kQ2xhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGZpbmQgbWlncmF0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8aW1wb3J0KFwiLi9iYXNlLmpzXCIpLk1pZ3JhdGlvbk9iamVjdFR5cGU+Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBtaWdyYXRpb25zLlxuICAgKi9cbiAgYXN5bmMgZmluZE1pZ3JhdGlvbnMoKSB7XG4gICAgY29uc3QgbWlncmF0aW9uc1JlcXVpcmVDb250ZXh0ID0gYXdhaXQgdGhpcy5taWdyYXRpb25zUmVxdWlyZUNvbnRleHQoKVxuICAgIC8qKlxuICAgICAqIE1pZ3JhdGlvbnMuXG4gICAgICogQHR5cGUge0FycmF5PGltcG9ydChcIi4vYmFzZS5qc1wiKS5NaWdyYXRpb25PYmplY3RUeXBlIHwgbnVsbD59ICovXG4gICAgY29uc3QgbWlncmF0aW9ucyA9IG1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dFxuICAgICAgLmtleXMoKVxuICAgICAgLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAvLyBcIjEzLDE0XCIgYmVjYXVzZSBzb21lcyBcInJlcXVpcmUtY29udGV4dFwiLW5wbS1tb2R1bGUgZGVsZXRlcyBmaXJzdCBjaGFyYWN0ZXIhP1xuICAgICAgICBjb25zdCBtYXRjaCA9IGZpbGUubWF0Y2goLyhcXGR7MTMsMTR9KS0oLispXFwuanMkLylcblxuICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuXG4gICAgICAgIC8vIEZpeCByZXF1aXJlLWNvbnRleHQtbnBtLW1vZHVsZSBkZWxldGVzIGZpcnN0IGNoYXJhY3RlclxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBmaWxlXG4gICAgICAgIGxldCBkYXRlTnVtYmVyID0gbWF0Y2hbMV1cblxuICAgICAgICBpZiAoZGF0ZU51bWJlci5sZW5ndGggPT0gMTMpIHtcbiAgICAgICAgICBkYXRlTnVtYmVyID0gYDIke2RhdGVOdW1iZXJ9YFxuICAgICAgICAgIGZpbGVOYW1lID0gYDIke2ZpbGVOYW1lfWBcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhcnNlIHJlZ2V4XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZUludChkYXRlTnVtYmVyKVxuICAgICAgICBjb25zdCBtaWdyYXRpb25OYW1lID0gbWF0Y2hbMl1cbiAgICAgICAgY29uc3QgbWlncmF0aW9uQ2xhc3NOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShtaWdyYXRpb25OYW1lLnJlcGxhY2VBbGwoXCItXCIsIFwiX1wiKSlcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGU6IGZpbGVOYW1lLFxuICAgICAgICAgIGZ1bGxQYXRoOiBmaWxlLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgbWlncmF0aW9uQ2xhc3NOYW1lXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGlzTWlncmF0aW9uT2JqZWN0KVxuICAgIC8qKlxuICAgICAqIEZpbGVzLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuL2Jhc2UuanNcIikuTWlncmF0aW9uT2JqZWN0VHlwZVtdfSAqL1xuICAgIGNvbnN0IGZpbGVzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2Jhc2UuanNcIikuTWlncmF0aW9uT2JqZWN0VHlwZVtdfSAqLyAobWlncmF0aW9ucylcblxuICAgIGZpbGVzLnNvcnQoKG1pZ3JhdGlvbjEsIG1pZ3JhdGlvbjIpID0+IG1pZ3JhdGlvbjEuZGF0ZSAtIG1pZ3JhdGlvbjIuZGF0ZSlcblxuICAgIHJldHVybiBmaWxlc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaW1wb3J0IHRlc3QgZmlsZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHRlc3RGaWxlcyAtIFRlc3QgZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBpbXBvcnRUZXN0RmlsZXModGVzdEZpbGVzKSB7XG4gICAgY29uc3QgdGVzdEZpbGVzUmVxdWlyZUNvbnRleHQgPSBhd2FpdCB0aGlzLnRlc3RGaWxlc1JlcXVpcmVDb250ZXh0KClcbiAgICBjb25zdCByZXF1aXJlS2V5cyA9IHRlc3RGaWxlc1JlcXVpcmVDb250ZXh0LmtleXMoKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXlzID0gcmVxdWlyZUtleXMubWFwKChrZXkpID0+ICh7XG4gICAgICBrZXksXG4gICAgICBub3JtYWxpemVkOiBrZXkucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpXG4gICAgfSkpXG5cbiAgICBmb3IgKGNvbnN0IHRlc3RGaWxlIG9mIHRlc3RGaWxlcykge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSB0ZXN0RmlsZS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKVxuICAgICAgY29uc3QgbWF0Y2hlZEtleSA9IG5vcm1hbGl6ZWRLZXlzLmZpbmQoKGVudHJ5KSA9PiBub3JtYWxpemVkRmlsZS5lbmRzV2l0aChlbnRyeS5ub3JtYWxpemVkKSk/LmtleVxuXG4gICAgICBpZiAoIW1hdGNoZWRLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZXN0IGZpbGUgJHt0ZXN0RmlsZX0gd2FzIG5vdCBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgcmVxdWlyZSBjb250ZXh0YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1wb3J0ZWQgPSB0ZXN0RmlsZXNSZXF1aXJlQ29udGV4dChtYXRjaGVkS2V5KVxuXG4gICAgICBpZiAoaW1wb3J0ZWQgJiYgdHlwZW9mIGltcG9ydGVkID09IFwib2JqZWN0XCIgJiYgXCJ0aGVuXCIgaW4gaW1wb3J0ZWQgJiYgdHlwZW9mIGltcG9ydGVkLnRoZW4gPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGF3YWl0IGltcG9ydGVkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgbWlncmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGaWxlIHBhdGguXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHR5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9taWdyYXRpb24vaW5kZXguanNcIikuZGVmYXVsdD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgcmVxdWlyZSBtaWdyYXRpb24uXG4gICAqL1xuICByZXF1aXJlTWlncmF0aW9uID0gYXN5bmMgKGZpbGVQYXRoKSA9PiB7XG4gICAgaWYgKCFmaWxlUGF0aCkgdGhyb3cgbmV3IEVycm9yKFwiZmlsZVBhdGggaXMgcmVxdWlyZWRcIilcblxuICAgIGNvbnN0IG1pZ3JhdGlvbnNSZXF1aXJlQ29udGV4dCA9IGF3YWl0IHRoaXMubWlncmF0aW9uc1JlcXVpcmVDb250ZXh0KClcbiAgICBjb25zdCBtaWdyYXRpb25JbXBvcnQgPSBtaWdyYXRpb25zUmVxdWlyZUNvbnRleHQoZmlsZVBhdGgpXG5cbiAgICBpZiAoIW1pZ3JhdGlvbkltcG9ydCkgdGhyb3cgbmV3IEVycm9yKGBNaWdyYXRpb24gZmlsZSAke2ZpbGVQYXRofSBub3QgZm91bmRgKVxuXG4gICAgY29uc3QgbWlncmF0aW9uSW1wb3J0RGVmYXVsdCA9IG1pZ3JhdGlvbkltcG9ydC5kZWZhdWx0XG5cbiAgICBpZiAoIW1pZ3JhdGlvbkltcG9ydERlZmF1bHQpIHRocm93IG5ldyBFcnJvcihcIk1pZ3JhdGlvbiBmaWxlIG11c3QgZXhwb3J0IGEgZGVmYXVsdCBtaWdyYXRpb24gY2xhc3NcIilcbiAgICBpZiAodHlwZW9mIG1pZ3JhdGlvbkltcG9ydERlZmF1bHQgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiTWlncmF0aW9uIGRlZmF1bHQgZXhwb3J0IGlzbid0IGEgZnVuY3Rpb24gKHNob3VsZCBiZSBhIGNsYXNzIHdoaWNoIGlzIGEgZnVuY3Rpb24gaW4gSlMpXCIpXG5cbiAgICByZXR1cm4gbWlncmF0aW9uSW1wb3J0RGVmYXVsdFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYWZ0ZXIgbWlncmF0aW9ucy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdD59IGFyZ3MuZGJzIC0gRGJzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgYWZ0ZXJNaWdyYXRpb25zKHtkYnN9KSB7XG4gICAgY29uc3Qgc3RydWN0dXJlU3FsID0gYXdhaXQgdGhpcy5fc3FsaXRlU3RydWN0dXJlU3FsKHtkYnN9KVxuXG4gICAgaWYgKCFzdHJ1Y3R1cmVTcWwpIHJldHVyblxuXG4gICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic3RydWN0dXJlLnNxbDpcIiwgc3RydWN0dXJlU3FsXSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNxbGl0ZSBzdHJ1Y3R1cmUgc3FsLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gYXJncy5kYnMgLSBEYnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fSAtIFJlc29sdmVzIHdpdGggU1FMIHN0cmluZy5cbiAgICovXG4gIGFzeW5jIF9zcWxpdGVTdHJ1Y3R1cmVTcWwoe2Ric30pIHtcbiAgICBjb25zdCBzcWxpdGVJZGVudGlmaWVycyA9IE9iamVjdC5rZXlzKGRicylcbiAgICAgIC5maWx0ZXIoKGlkZW50aWZpZXIpID0+IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldERhdGFiYXNlVHlwZShpZGVudGlmaWVyKSA9PSBcInNxbGl0ZVwiKVxuXG4gICAgaWYgKHNxbGl0ZUlkZW50aWZpZXJzLmxlbmd0aCA9PSAwKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3Qgc2VjdGlvbnMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIHNxbGl0ZUlkZW50aWZpZXJzKSB7XG4gICAgICBjb25zdCBkYiA9IGRic1tpZGVudGlmaWVyXVxuICAgICAgY29uc3Qgc3RydWN0dXJlU3FsID0gdHlwZW9mIGRiLnN0cnVjdHVyZVNxbCA9PT0gXCJmdW5jdGlvblwiID8gYXdhaXQgZGIuc3RydWN0dXJlU3FsKCkgOiBudWxsXG4gICAgICBjb25zdCB0cmltbWVkU3FsID0gc3RydWN0dXJlU3FsPy50cmltRW5kKClcblxuICAgICAgaWYgKCF0cmltbWVkU3FsKSBjb250aW51ZVxuXG4gICAgICBpZiAoc3FsaXRlSWRlbnRpZmllcnMubGVuZ3RoID4gMSkge1xuICAgICAgICBzZWN0aW9ucy5wdXNoKGAtLSAke2lkZW50aWZpZXJ9YClcbiAgICAgIH1cblxuICAgICAgc2VjdGlvbnMucHVzaCh0cmltbWVkU3FsKVxuICAgIH1cblxuICAgIGlmIChzZWN0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBgJHtzZWN0aW9ucy5qb2luKFwiXFxuXFxuXCIpfVxcbmBcbiAgfVxufVxuIl19
@@ -209,6 +209,20 @@ export type TestsArgument = {
209
209
  export type TestTimeoutError = Error & {
210
210
  velociousTestTimeout?: true;
211
211
  };
212
+ export type SharedTransactionBrokerRegistration = {
213
+ /**
214
+ * - Attempt broker and connection coordinator.
215
+ */
216
+ broker: SharedTransactionBroker;
217
+ /**
218
+ * - Whether child-process coordinates were published.
219
+ */
220
+ environmentPublished: boolean;
221
+ /**
222
+ * - Environment value to restore after publication.
223
+ */
224
+ previousEnvironment: string | undefined;
225
+ };
212
226
  export default class TestRunner {
213
227
  _configuration: import("../configuration.js").default;
214
228
  _excludeTags: string[];
@@ -431,25 +445,43 @@ export default class TestRunner {
431
445
  pool: import("../database/pool/base.js").default;
432
446
  registration: import("../database/pool/base.js").TestSharedConnectionRegistration;
433
447
  }[]): void;
448
+ /**
449
+ * Selects the current non-tenant connections eligible for shared transaction work.
450
+ * @param {{transactionsOnly: boolean}} args - Selection options.
451
+ * @returns {Record<string, import("../database/drivers/base.js").default>} - Eligible connections by identifier.
452
+ */
453
+ sharedTransactionConnections({ transactionsOnly }: {
454
+ transactionsOnly: boolean;
455
+ }): Record<string, import("../database/drivers/base.js").default>;
456
+ /**
457
+ * Installs physical-connection coordination before a transaction-opening hook
458
+ * can expose the shared connection to a long-lived in-process service.
459
+ * Child-process coordinates remain unpublished until the transaction exists.
460
+ * @returns {Promise<SharedTransactionBrokerRegistration | undefined>} - Prepared coordinator.
461
+ */
462
+ prepareSharedTransactionBroker(): Promise<SharedTransactionBrokerRegistration | undefined>;
463
+ /**
464
+ * Checks whether a prepared broker coordinates exactly the selected physical connections.
465
+ * @param {SharedTransactionBrokerRegistration | undefined} registration - Prepared coordinator.
466
+ * @param {Record<string, import("../database/drivers/base.js").default>} connections - Selected connections.
467
+ * @returns {boolean} - Whether the identifier set and physical connections match exactly.
468
+ */
469
+ sharedTransactionBrokerMatchesConnections(registration: SharedTransactionBrokerRegistration | undefined, connections: Record<string, import("../database/drivers/base.js").default>): boolean;
434
470
  /**
435
471
  * Starts a capability-scoped broker for the active non-tenant physical
436
472
  * transaction connections. No broker/env is installed for truncation-only or
437
473
  * other transaction-disabled attempts.
438
- * @returns {Promise<{broker: SharedTransactionBroker, previousEnvironment: string | undefined} | undefined>} - Attempt registration.
474
+ * @param {SharedTransactionBrokerRegistration} [preparedRegistration] - Coordinator prepared before hooks.
475
+ * @param {Record<string, import("../database/drivers/base.js").default>} [selectedConnections] - Post-hook active connections.
476
+ * @returns {Promise<SharedTransactionBrokerRegistration | undefined>} - Attempt registration.
439
477
  */
440
- startSharedTransactionBroker(): Promise<{
441
- broker: SharedTransactionBroker;
442
- previousEnvironment: string | undefined;
443
- } | undefined>;
478
+ startSharedTransactionBroker(preparedRegistration?: SharedTransactionBrokerRegistration, selectedConnections?: Record<string, import("../database/drivers/base.js").default>): Promise<SharedTransactionBrokerRegistration | undefined>;
444
479
  /**
445
480
  * Revokes an attempt broker before database rollback hooks run and restores
446
481
  * the caller's environment so later pooled/spawned children cannot inherit it.
447
- * @param {{broker: SharedTransactionBroker, previousEnvironment: string | undefined} | undefined} registration - Attempt registration.
482
+ * @param {SharedTransactionBrokerRegistration | undefined} registration - Attempt registration.
448
483
  */
449
- stopSharedTransactionBroker(registration: {
450
- broker: SharedTransactionBroker;
451
- previousEnvironment: string | undefined;
452
- } | undefined): Promise<void>;
484
+ stopSharedTransactionBroker(registration: SharedTransactionBrokerRegistration | undefined): Promise<void>;
453
485
  /**
454
486
  * Runs request client.
455
487
  * @returns {Promise<RequestClient>} - Resolves with the request client.
@@ -1 +1 @@
1
- {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"AAMA,OAAO,WAAW,MAAM,0BAA0B,CAAA;AAElD,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAM/C,OAAO,uBAAuB,MAAM,gCAAgC,CAAA;AAKjE,YAAuD,iBAAiB,GAA9D,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAmB;AAGxE,YAAkB,oBAAoB,GACtC;;;;IAAmB,aAAa,EAArB,MAAM,CACjB;;;;IAAmB,MAAM,EAAd,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,QAAQ,GAC1B;;;;IAAyB,WAAW,AAApC,CACA,EADW,WAAW,CACtB;;;;IAA2B,MAAM,AAAjC,CACA,EADW,aAAa,CACxB;;;;IAAoB,gBAAgB,AAApC,CAIA,EAHA;QAAsC,WAAW,AAAjD,CACA,EADW,OAAO,CAClB;QAAsC,QAAQ,AAA9C,CACA,EADW,OAAO,CAClB;QAAsC,cAAc,AAApD,CACA,EADW,OAAO,CAClB;KAAA,CAAA;;;;IAAqB,KAAK,AAA1B,CACA,EADW,OAAO,CAClB;;;;IAAwC,QAAQ,AAAhD,CACA,EADW,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACrC;;;;IAAoB,KAAK,AAAzB,CACA,EADW,MAAM,CACjB;;;;IAA+B,IAAI,AAAnC,CACA,EADW,MAAM,EAAE,GAAG,MAAM,CAC5B;;;;IAAoB,cAAc,AAAlC,CACA,EADW,MAAM,CACjB;;;;IAAoB,IAAI,AAAxB,CACF,EADa,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,QAAQ,GAC1B;;;;IAAqB,IAAI,EAAd,QAAQ,CACnB;;;;IAAoB,QAAQ,AAA5B,CACA,EADW,MAAM,CACjB;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;IAAoB,aAAa,AAAjC,CACA,EADW,MAAM,CACjB;;;;IAAoD,QAAQ,EAAjD,CAAC,GAAG,EAAE,QAAQ,KAAK,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACpD;CAAA,CAAA;AAGE,YAAkB,gBAAgB,GAClC;;;;IAAmB,eAAe,EAAvB,MAAM,CACjB;;;;IAAoB,QAAQ,AAA5B,CACA,EADW,MAAM,CACjB;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;IAA0C,KAAK,EAApC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CACxC;;;;IAAoB,aAAa,AAAjC,CACA,EADW,MAAM,CACjB;;;;IAAoB,cAAc,AAAlC,CACF,EADa,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,wBAAwB,GAC1C;;;;IAA0B,KAAK,EAApB,aAAa,CACxB;;;;IAAoB,YAAY,EAArB,OAAO,CAClB;;;;IAAoB,cAAc,AAAlC,CACF,EADa,MAAM,CACnB;CAAA,CAAA;AAGE,YAA0I,2BAA2B,GAA3J,CAAC,IAAI,EAAE;IAAC,aAAa,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAC,KAAK,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAA6B;AAIrK,YAAkB,iCAAiC,GACnD;;;;IAAwC,QAAQ,EAArC,2BAA2B,CACtC;;;;IAAoB,gBAAgB,AAApC,CACA,EADW,MAAM,CACjB;;;;IAAoB,kBAAkB,AAAtC,CACA,EADW,MAAM,CACjB;;;;IAAoB,aAAa,AAAjC,CACF,EADa,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkG,0BAA0B,GAAlH,CAAC,IAAI,EAAE;IAAC,aAAa,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAA;CAAC,KAAK,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAA4B;AAI5H,YAAkB,gCAAgC,GAClD;;;;IAAuC,QAAQ,EAApC,0BAA0B,CACrC;;;;IAAoB,gBAAgB,AAApC,CACA,EADW,MAAM,CACjB;;;;IAAoB,kBAAkB,AAAtC,CACA,EADW,MAAM,CACjB;;;;IAAoB,aAAa,AAAjC,CACF,EADa,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,aAAa,GAC/B;;;;IAAqC,IAAI,EAA9B,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnC;;;;IAAqB,gBAAgB,AAArC,CACA,EADW,OAAO,CAClB;;;;IAAgD,WAAW,EAAhD,iCAAiC,EAAE,CAC9C;;;;IAA+C,SAAS,EAA7C,gCAAgC,EAAE,CAC7C;;;;IAA+C,UAAU,EAA9C,gCAAgC,EAAE,CAC7C;;;;IAAgD,YAAY,EAAjD,iCAAiC,EAAE,CAC9C;;;;IAAoB,QAAQ,AAA5B,CACA,EADW,MAAM,CACjB;;;;IAAoB,IAAI,AAAxB,CACA,EADW,MAAM,CACjB;;;;IAAoB,aAAa,AAAjC,CACA,EADW,MAAM,CACjB;;;;IAAqC,KAAK,EAA/B,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnC;;;;IAA0C,IAAI,EAAnC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAC1C;CAAA,CAAA;AAKE,YAAiD,gBAAgB,GAAvD,KAAK,GAAG;IAAC,oBAAoB,CAAC,EAAE,IAAI,CAAA;CAAC,CAAkB;AAsFpE,MAAM,CAAC,OAAO,OAAO,UAAU;IA2BtB,cAAc;IACd,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,cAAc;IACd,UAAU;IACV,YAAY;IACZ,gBAAgB;IAChB,SAAS;IAET,YAAY;IACZ,gBAAgB;IAChB,WAAW;IAGhB,+EAA+E;IAC1E,gBAAgB,EADV;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAE3E,mGAAmG;IAC9F,cAAc,EADR,KAAK,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC;IA8TxF,YAAY;IAkIZ,cAAc;IAuLhB,gBAAgB;IAQhB,aAAa;IA1qBpB;;4CAEwC;IACxC,qBAAqB,EADX,wBAAwB,EAAE,CACf;IAErB;;oCAEgC;IAChC,kBAAkB,EADR,gBAAgB,EAAE,CACV;IAElB;;;;;;;;;;OAUG;IACH,YAAY,EAAC,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAC,EARlH;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;QAAiC,WAAW,AAA5C,CACA,EADQ,MAAM,EAAE,GAAG,MAAM,CACzB;QAAiC,WAAW,AAA5C,CACA,EADQ,MAAM,EAAE,GAAG,MAAM,CACzB;QAA4B,SAAS,EAA7B,KAAK,CAAC,MAAM,CAAC,CACrB;QAAwC,WAAW,AAAnD,CACA,EADQ,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAChC;QAAwB,eAAe,AAAvC,CACA,EADQ,MAAM,EAAE,CAChB;QAAoD,QAAQ,AAA5D,CACF,EADU,OAAO,oBAAoB,EAAE,OAAO,CAC9C;KACoH,EAwBpH;IAED;;;OAGG;IACH,gBAAgB,IAFH,OAAO,qBAAqB,EAAE,OAAO,CAED;IAEjD;;;OAGG;IACH,YAAY,IAFC,MAAM,EAAE,CAEoB;IAEzC;;;OAGG;IACH,cAAc,IAFD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAEQ;IAE7C;;;OAGG;IACH,kBAAkB,IAFL,MAAM,EAAE,CAEgC;IAErD;;;;;;;;;;OAUG;IACG,cAAc,CATP,CAAC,EASO,QAAQ,EAP1B;QAAyB,KAAK,EAAtB,MAAM,CACd;QAA0B,gBAAgB,AAA1C,CACA,EADQ,MAAM,CACd;QAA0B,kBAAkB,AAA5C,CACA,EADQ,MAAM,CACd;QAA0B,QAAQ,AAAlC,CACA,EADQ,MAAM,CACd;KAG0B,EAAE,QAAQ,EAH5B,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGO,GAF1B,OAAO,CAAC,CAAC,CAAC,CAMtB;IAED;;;;;;;OAOG;IACH,kBAAkB,CANkE,CAAC,SAAvE,iCAAiC,GAAG,gCAAmC,EAMlE,KAAK,EALb,CAAC,EAKY,EAAE,kBAAkB,EAJjC,MAAM,GAAG,SAIwB,EAAE,aAAa,EAHhD,MAAM,GAAG,SAGuC,GAF9C,CAAC,EAAE,CAUf;IAED;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAHP,MAAM,EAAE,GAAG,MAAM,GAAG,SAGb,GAFL,MAAM,EAAE,CAqBpB;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAJJ,QAII,EAAE,GAAG,EAHT,MAGS,GAFP,OAAO,CAInB;IAED;;;OAGG;IACH,iBAAiB,IAFJ,OAAO,CAInB;IAED;;;;;OAKG;IACG,oBAAoB,CAAC,QAAQ,EAJxB,QAIwB,EAAE,QAAQ,EAHlC,MAAM,OAAO,CAAC,IAAI,CAGgB,GAFhC,OAAO,CAAC,IAAI,CAAC,CAczB;IAED;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAHhB,MAAM,OAAO,CAAC,IAAI,CAGF,GAFd,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;OAGG;IACH,gBAAgB,IAFH,MAAM,CAWlB;IAED;;;;OAIG;IACG,eAAe,CAAC,QAAQ,EAHnB,MAAM,OAAO,CAAC,IAAI,CAGC,GAFjB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,iBAAiB,CAAC,GAAG,EAHhB,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAG5C,GAFd,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,gBAAgB,IAFH,GAAG,CAAC,MAAM,CAAC,CASvB;IAED;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAJZ,MAAM,EAAE,GAAG,MAAM,GAAG,SAIR,EAAE,MAAM,EAHpB,GAAG,CAAC,MAAM,CAGU,GAFlB,OAAO,CAYnB;IAED;;;;;;OAMG;IACH,gBAAgB,CAAC,KAAK,EALX,aAKW,EAAE,YAAY,AAJjC,CACA,EADQ,MAAM,EAIwB,EAAE,kBAAkB,AAH1D,CACA,EADQ,OAG0D,GAFxD,OAAO,CAwBnB;IAED;;;;;;;;OAQG;IACH,cAAc,CAAC,QAAQ,EAPZ,QAOY,EAAE,QAAQ,EANtB,QAMsB,EAAE,eAAe,EALvC,MAKuC,EAAE,YAAY,EAJrD,MAAM,EAI+C,EAAE,kBAAkB,EAHzE,OAGyE,GAFvE,OAAO,CA0BnB;IAED;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAHZ,QAAQ,GAAG,aAGC,GAFV,OAAO,CAWnB;IAED;;;;;OAKG;IACH,oBAAoB,CAAC,YAAY,EAJtB,MAAM,EAIgB,EAAE,eAAe,EAHvC,MAGuC,GAFrC,MAAM,CAMlB;IAED;;;OAGG;IACG,WAAW,IAFJ,OAAO,CAAC,WAAW,CAAC,CAoBhC;IAED;;;;;;;OAOG;IACH,6BAA6B,IAFhB;QAAC,IAAI,EAAE,OAAO,0BAA0B,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,0BAA0B,EAAE,gCAAgC,CAAA;KAAC,EAAE,CA6BnJ;IAED;;;;;OAKG;IACH,0BAA0B,CAAC,aAAa,AAHrC,CACA,EADQ;QAAC,IAAI,EAAE,OAAO,0BAA0B,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,0BAA0B,EAAE,gCAAgC,CAAA;KAAC,EAGxG,GAF3B,IAAI,CAehB;IAED;;;;;OAKG;IACG,4BAA4B,IAFrB,OAAO,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAC;QAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAA;KAAC,GAAG,SAAS,CAAC,CA2B3G;IAED;;;;OAIG;IACG,2BAA2B,CAAC,YAAY,EAFnC;QAAC,MAAM,EAAE,uBAAuB,CAAC;QAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAA;KAAC,GAAG,SAE1C,iBAQ7C;IAED;;;OAGG;IACG,aAAa,IAFN,OAAO,CAAC,aAAa,CAAC,CAQlC;IAED;;;OAGG;IACG,eAAe,IAFR,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,KAAK,EAJlB,aAIkB,EAAE,aAAa,AAHzC,CACA,EADQ,GAAG,CAAC,MAAM,CAGmC,GAF3C,GAAG,CAAC,MAAM,CAAC,CAavB;IAED;;;;;;;OAOG;IACH,+BAA+B,CAAC,KAAK,EAL1B,aAK0B,EAAE,qBAAqB,EAJjD,GAAG,CAAC,MAAM,CAIuC,EAAE,aAAa,EAHhE,MAGgE,GAF9D,IAAI,CAgBhB;IAED;;;OAGG;IACH,QAAQ,IAFK,OAAO,CAE0D;IAE9E;;;OAGG;IACH,cAAc,IAFD,MAAM,CAMlB;IAED;;;OAGG;IACH,oBAAoB,IAFP,gBAAgB,EAAE,CAI9B;IAED;;;;;OAKG;IACG,uCAAuC,CAAC,EAAC,UAAwD,EAAC,AAJrG,CAEA,EADA;QAAsB,UAAU,AAAhC,CACA,EADQ,MAAM,CACd;KAE0G,GAFhG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsC7B;IAED;;;OAGG;IACH,kBAAkB,IAFL,MAAM,CAMlB;IAED;;;OAGG;IACH,aAAa,IAFA,MAAM,CAMlB;IAED;;;OAGG;IACH,qBAAqB,IAFR,MAAM,CAIlB;IAED;;;;OAIG;IACH,eAAe,CAAC,KAAK,AAHlB,CACA,EADQ,MAGe,GAFb,KAAK,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC,CAMhG;IAED;;;OAGG;IACG,OAAO,IAFA,OAAO,CAAC,IAAI,CAAC,CAoBzB;IAED;;;OAGG;IACH,mBAAmB,IAFN,OAAO,CAQnB;IAED;;;OAGG;IACH;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,CAAC,IAAI,EAJV,mBAAmB,GAAG,oBAIZ,EAAE,MAAM,EAHlB,OAGkB,GAFhB,IAAI,CAkBhB;IAEK,GAAG,kBA2DR;IAED;;;OAGG;IACG,2BAA2B,IAFpB,OAAO,CAAC,IAAI,CAAC,CAUzB;IAED;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAHP,aAGO,GAFL;QAAC,gBAAgB,EAAE,OAAO,CAAA;KAAC,CA6BvC;IAED;;;;;;;;;;;OAWG;IACG,QAAQ,CAAC,EAAC,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,kBAA0B,EAAE,oBAAoB,EAAC,EAT3H;QAAuD,WAAW,EAA1D,KAAK,CAAC,iCAAiC,CAAC,CAChD;QAAuD,YAAY,EAA3D,KAAK,CAAC,iCAAiC,CAAC,CAChD;QAA4B,KAAK,EAAzB,aAAa,CACrB;QAAuB,YAAY,EAA3B,MAAM,EAAE,CAChB;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAuB,kBAAkB,AAAzC,CACA,EADQ,OAAO,CACf;QAAsB,oBAAoB,AAA1C,CACA,EADQ,MAAM,CACd;KAE2H,GAFjH,OAAO,CAAC,IAAI,CAAC,CAkYzB;IAED;;;;OAIG;IACG,oBAAoB,CAAC,UAAU,EAH1B,wBAG0B,GAFxB,OAAO,CAAC,IAAI,CAAC,CAwBzB;IAED;;;;;OAKG;IACG,SAAS,CAAC,SAAS,EAJd,MAIc,EAAE,OAAO,EAHvB,MAGuB,GAFrB,OAAO,CAAC,IAAI,CAAC,CAQzB;IAED;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAC,EANrE;QAAuB,YAAY,EAA3B,MAAM,EAAE,CAChB;QAAqB,eAAe,EAA5B,MAAM,CACd;QAAuB,QAAQ,EAAvB,QAAQ,CAChB;QAAqB,WAAW,EAAxB,MAAM,CACd;KAEqE,GAF3D,IAAI,CAQhB;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAC,EALxD;QAAuB,YAAY,EAA3B,MAAM,EAAE,CAChB;QAAqB,eAAe,EAA5B,MAAM,CACd;QAAuB,QAAQ,EAAvB,QAAQ,CAChB;KAEwD,GAF9C,MAAM,GAAG,SAAS,CAmB9B;IAED;;;;OAIG;IACH,kBAAkB,CAAC,qBAAqB,EAH7B,oBAAoB,EAGS,GAF3B,MAAM,CASlB;IAED;;;OAGG;IACH,8BAA8B,IAFjB,MAAM,CAQlB;IAED;;;;OAIG;IACH,gCAAgC,CAAC,aAAa,EAHnC,MAGmC,GAFjC,MAAM,EAAE,CAgBpB;IAED;;;;;;OAMG;IACH,wBAAwB,CAAC,EAAC,aAAa,EAAE,WAAW,EAAC,EAJlD;QAAqB,aAAa,EAA1B,MAAM,CACd;QAAqB,WAAW,EAAxB,MAAM,CACd;KAEkD,GAFxC,IAAI,CAehB;IAED;;;;;OAKG;IACH,mBAAmB,CAAC,EAAC,WAAmB,EAAC,AAJtC,CAEA,EADA;QAAuB,WAAW,AAAlC,CACA,EADQ,OAAO,CACf;KAE2C,GAFjC,MAAM,MAAM,CAgDxB;CACF"}
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"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"}