@dbx-tools/appkit-mastra 0.9.95 → 0.9.99

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.
@@ -10,6 +10,8 @@
10
10
  */
11
11
  import { configUtils } from "@dbx-tools/core";
12
12
  import { errorUtils, functionUtils, log } from "@dbx-tools/shared-core";
13
+ import { availableParallelism } from "node:os";
14
+ import { MastraSandbox } from "@mastra/core/workspace";
13
15
  const DEFAULT_COMMAND_TIMEOUT_MS = 30_000;
14
16
  const DEFAULT_MAX_MEMORY_BYTES = 10_000_000;
15
17
  const NATIVE_MONTY_TARGET = {
@@ -21,6 +23,10 @@ const WASM_MONTY_TARGET = {
21
23
  load: () => import("@pydantic/monty/wasm"),
22
24
  };
23
25
  const logger = log.logger("mastra/monty");
26
+ /** @internal Size the shared worker pool from the host's available processors. */
27
+ export function montyMaxProcesses(parallelism = availableParallelism()) {
28
+ return Math.max(4, Math.floor(parallelism) * 2);
29
+ }
24
30
  const montyContext = functionUtils.memoize(async () => {
25
31
  const errors = [];
26
32
  const targets = configUtils.boolean(undefined, "MONTY_FORCE_WASM")
@@ -30,12 +36,13 @@ const montyContext = functionUtils.memoize(async () => {
30
36
  try {
31
37
  const module = await target.load();
32
38
  logger.debug(`${target.name} module available`);
39
+ const maxProcesses = montyMaxProcesses();
33
40
  const pool = await module.Monty.create({
34
41
  minProcesses: 1,
35
- maxProcesses: 4,
42
+ maxProcesses,
36
43
  requestTimeout: 35,
37
44
  });
38
- logger.debug(`${target.name} pool created`);
45
+ logger.debug(`${target.name} pool created`, { maxProcesses });
39
46
  return {
40
47
  crashedError: module.MontyCrashedError,
41
48
  pool,
@@ -51,51 +58,33 @@ const montyContext = functionUtils.memoize(async () => {
51
58
  throw new AggregateError(errors, "Failed to create Monty pool");
52
59
  });
53
60
  /** Python-only, deny-by-default sandbox backed by Monty's selected worker pool. */
54
- export class MontySandbox {
61
+ export class MontySandbox extends MastraSandbox {
55
62
  id;
56
63
  name;
57
64
  provider = "monty";
58
65
  status = "pending";
59
- error;
60
66
  commandTimeoutMs;
61
67
  maxMemoryBytes;
62
68
  typeCheck;
63
69
  createdAt = new Date();
64
70
  lastUsedAt;
65
71
  constructor(options = {}) {
72
+ const name = options.name ?? "Pydantic Monty";
73
+ super({ name });
66
74
  this.id = options.id ?? "monty";
67
- this.name = options.name ?? "Pydantic Monty";
75
+ this.name = name;
68
76
  this.commandTimeoutMs = options.commandTimeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS;
69
77
  this.maxMemoryBytes = options.maxMemoryBytes ?? DEFAULT_MAX_MEMORY_BYTES;
70
78
  this.typeCheck = options.typeCheck ?? false;
71
79
  }
72
80
  /** Warm the shared crash-isolated worker pool. */
73
81
  async start() {
74
- if (this.status === "running")
75
- return;
76
- this.status = "starting";
77
- this.error = undefined;
78
- try {
79
- await montyContext();
80
- this.status = "running";
81
- }
82
- catch (caught) {
83
- this.status = "error";
84
- this.error = errorUtils.errorMessage(caught);
85
- throw caught;
86
- }
82
+ await montyContext();
87
83
  }
88
84
  /** The process-wide pool stays warm; this instance carries no open session. */
89
- async stop() {
90
- this.status = "stopped";
91
- }
85
+ async stop() { }
92
86
  /** The process-wide pool stays warm; each command closes its own checkout. */
93
- async destroy() {
94
- this.status = "destroyed";
95
- }
96
- /** Monty sessions are ephemeral and do not provide persistent checkpoints. */
97
- async snapshot() { }
98
- supportsCheckpoints = false;
87
+ async destroy() { }
99
88
  /** Execute Python source and map Monty output to Mastra's command result. */
100
89
  async executeCommand(command, args = [], options = {}) {
101
90
  const started = performance.now();
@@ -365,4 +354,4 @@ if (import.meta.main) {
365
354
  console.log(await sandbox.executeCommand("print('Hello, world!')"));
366
355
  await sandbox.stop();
367
356
  }
368
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udHktc2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb250eS1zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVN4RSxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLHdCQUF3QixHQUFHLFVBQVUsQ0FBQztBQUM1QyxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLElBQUksRUFBRSxjQUFjO0lBQ3BCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUM7Q0FDbEMsQ0FBQztBQUNYLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxFQUFFLFlBQVk7SUFDbEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztDQUNsQyxDQUFDO0FBQ1gsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQVMxQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBMkIsRUFBRTtJQUMzRSxNQUFNLE1BQU0sR0FBWSxFQUFFLENBQUM7SUFDM0IsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM3QyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxD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LEVBQUUsRUFBRTtZQUNsQixJQUFJLE9BQU87Z0JBQUUsT0FBTztZQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2YsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUErQjtJQUNsRCxPQUFPLE1BQU0sRUFBRSxNQUFNLElBQUksSUFBSSxZQUFZLENBQUMseUJBQXlCLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNuQixPQUFlLEVBQ2YsSUFBYyxFQUNkLE9BQWUsRUFDZixNQUFjO0lBRWQsT0FBTztRQUNMLE9BQU87UUFDUCxJQUFJO1FBQ0osT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsQ0FBQztRQUNYLE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTTtRQUNOLGVBQWUsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTztLQUM3QyxDQUFDO0FBQ0osQ0FBQztBQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQeWRhbnRpYyBNb250eSBmYWxsYmFjayBmb3IgTWFzdHJhIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqIFByZWZlcnMgTW9udHkncyBuYXRpdmUgTm9kZSBzdWJwcm9jZXNzIHdvcmtlcnMgYW5kIGZhbGxzIGJhY2sgdG8gaXRzIFdBU01cbiAqIHdvcmtlcnMgd2hlbiB0aGUgbmF0aXZlIHBhY2thZ2UgaXMgdW5hdmFpbGFibGUuIEl0IGV4ZWN1dGVzIFB5dGhvbiBzb3VyY2VcbiAqIHdpdGggbm8gaG9zdCBmaWxlc3lzdGVtLCBuZXR3b3JrLCBlbnZpcm9ubWVudCwgc2hlbGwsIG9yIHRoaXJkLXBhcnR5IHBhY2thZ2VcbiAqIGFjY2Vzcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgY29uZmlnVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBmdW5jdGlvblV0aWxzLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kUmVzdWx0LFxuICBFeGVjdXRlQ29tbWFuZE9wdGlvbnMsXG4gIFNhbmRib3hJbmZvLFxuICBXb3Jrc3BhY2VTYW5kYm94LFxufSBmcm9tIFwiQG1hc3RyYS9jb3JlL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGVja291dE9wdGlvbnMsIE1vbnR5LCBNb250eUNyYXNoZWRFcnJvciwgTW9udHlTZXNzaW9uIH0gZnJvbSBcIkBweWRhbnRpYy9tb250eVwiO1xuXG5jb25zdCBERUZBVUxUX0NPTU1BTkRfVElNRU9VVF9NUyA9IDMwXzAwMDtcbmNvbnN0IERFRkFVTFRfTUFYX01FTU9SWV9CWVRFUyA9IDEwXzAwMF8wMDA7XG5jb25zdCBOQVRJVkVfTU9OVFlfVEFSR0VUID0ge1xuICBuYW1lOiBcIm5hdGl2ZSBNb250eVwiLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoXCJAcHlkYW50aWMvbW9udHkvbm9kZVwiKSxcbn0gYXMgY29uc3Q7XG5jb25zdCBXQVNNX01PTlRZX1RBUkdFVCA9IHtcbiAgbmFtZTogXCJXQVNNIE1vbnR5XCIsXG4gIGxvYWQ6ICgpID0+IGltcG9ydChcIkBweWRhbnRpYy9tb250eS93YXNtXCIpLFxufSBhcyBjb25zdDtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvbW9udHlcIik7XG5cbnR5cGUgTW9udHlQb29sID0gUGljazxNb250eSwgXCJjaGVja291dFwiPjtcblxuaW50ZXJmYWNlIE1vbnR5Q29udGV4dCB7XG4gIGNyYXNoZWRFcnJvcjogdHlwZW9mIE1vbnR5Q3Jhc2hlZEVycm9yO1xuICBwb29sOiBNb250eVBvb2w7XG59XG5cbmNvbnN0IG1vbnR5Q29udGV4dCA9IGZ1bmN0aW9uVXRpbHMubWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxNb250eUNvbnRleHQ+ID0+IHtcbiAgY29uc3QgZXJyb3JzOiBFcnJvcltdID0gW107XG4gIGNvbnN0IHRhcmdldHMgPSBjb25maWdVdGlscy5ib29sZWFuKHVuZGVmaW5lZCwgXCJNT05UWV9GT1JDRV9XQVNNXCIpXG4gICAgPyBbV0FTTV9NT05UWV9UQVJHRVRdXG4gICAgOiBbTkFUSVZFX01PTlRZX1RBUkdFVCwgV0FTTV9NT05UWV9UQVJHRVRdO1xuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IHRhcmdldC5sb2FkKCk7XG4gICAgICBsb2dnZXIuZGVidWcoYCR7dGFyZ2V0Lm5hbWV9IG1vZHVsZSBhdmFpbGFibGVgKTtcbiAgICAgIGNvbnN0IHBvb2wgPSBhd2FpdCBtb2R1bGUuTW9udHkuY3JlYXRlKHtcbiAgICAgICAgbWluUHJvY2Vzc2VzOiAxLFxuICAgICAgICBtYXhQcm9jZXNzZXM6IDQsXG4gICAgICAgIHJlcXVlc3RUaW1lb3V0OiAzNSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke3RhcmdldC5uYW1lfSBwb29sIGNyZWF0ZWRgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyYXNoZWRFcnJvcjogbW9kdWxlLk1vbnR5Q3Jhc2hlZEVycm9yLFxuICAgICAgICBwb29sLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSk7XG4gICAgICBsb2dnZXIuZGVidWcoYCR7dGFyZ2V0Lm5hbWV9IHVuYXZhaWxhYmxlYCwge1xuICAgICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFwiRmFpbGVkIHRvIGNyZWF0ZSBNb250eSBwb29sXCIpO1xufSk7XG5cbi8qKiBSZXNvdXJjZSBjb250cm9scyBmb3IgdGhlIE1vbnR5IFB5dGhvbiBmYWxsYmFjay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9udHlTYW5kYm94T3B0aW9ucyB7XG4gIC8qKiBNYXN0cmEgcHJvdmlkZXIgaWQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogRGlzcGxheSBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogRGVmYXVsdCBleGVjdXRpb24gdGltZW91dC4gUGVyLWNhbGwgYG9wdGlvbnMudGltZW91dGAgd2lucy4gKi9cbiAgY29tbWFuZFRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gTW9udHkgaGVhcCBieXRlcyBmb3Igb25lIGNoZWNrb3V0LiAqL1xuICBtYXhNZW1vcnlCeXRlcz86IG51bWJlcjtcbiAgLyoqIFR5cGUtY2hlY2sgZWFjaCBQeXRob24gc25pcHBldCBiZWZvcmUgcnVubmluZyBpdC4gRGVmYXVsdHMgdG8gZmFsc2UuICovXG4gIHR5cGVDaGVjaz86IGJvb2xlYW47XG59XG5cbi8qKiBQeXRob24tb25seSwgZGVueS1ieS1kZWZhdWx0IHNhbmRib3ggYmFja2VkIGJ5IE1vbnR5J3Mgc2VsZWN0ZWQgd29ya2VyIHBvb2wuICovXG5leHBvcnQgY2xhc3MgTW9udHlTYW5kYm94IGltcGxlbWVudHMgV29ya3NwYWNlU2FuZGJveCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvdmlkZXIgPSBcIm1vbnR5XCI7XG4gIHN0YXR1czogV29ya3NwYWNlU2FuZGJveFtcInN0YXR1c1wiXSA9IFwicGVuZGluZ1wiO1xuICBlcnJvcj86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbW1hbmRUaW1lb3V0TXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhNZW1vcnlCeXRlczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHR5cGVDaGVjazogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVkQXQgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIGxhc3RVc2VkQXQ/OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1vbnR5U2FuZGJveE9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IFwibW9udHlcIjtcbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWUgPz8gXCJQeWRhbnRpYyBNb250eVwiO1xuICAgIHRoaXMuY29tbWFuZFRpbWVvdXRNcyA9IG9wdGlvbnMuY29tbWFuZFRpbWVvdXRNcyA/PyBERUZBVUxUX0NPTU1BTkRfVElNRU9VVF9NUztcbiAgICB0aGlzLm1heE1lbW9yeUJ5dGVzID0gb3B0aW9ucy5tYXhNZW1vcnlCeXRlcyA/PyBERUZBVUxUX01BWF9NRU1PUllfQllURVM7XG4gICAgdGhpcy50eXBlQ2hlY2sgPSBvcHRpb25zLnR5cGVDaGVjayA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKiBXYXJtIHRoZSBzaGFyZWQgY3Jhc2gtaXNvbGF0ZWQgd29ya2VyIHBvb2wuICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCIpIHJldHVybjtcbiAgICB0aGlzLnN0YXR1cyA9IFwic3RhcnRpbmdcIjtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBtb250eUNvbnRleHQoKTtcbiAgICAgIHRoaXMuc3RhdHVzID0gXCJydW5uaW5nXCI7XG4gICAgfSBjYXRjaCAoY2F1Z2h0KSB7XG4gICAgICB0aGlzLnN0YXR1cyA9IFwiZXJyb3JcIjtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShjYXVnaHQpO1xuICAgICAgdGhyb3cgY2F1Z2h0O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgcHJvY2Vzcy13aWRlIHBvb2wgc3RheXMgd2FybTsgdGhpcyBpbnN0YW5jZSBjYXJyaWVzIG5vIG9wZW4gc2Vzc2lvbi4gKi9cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXR1cyA9IFwic3RvcHBlZFwiO1xuICB9XG5cbiAgLyoqIFRoZSBwcm9jZXNzLXdpZGUgcG9vbCBzdGF5cyB3YXJtOyBlYWNoIGNvbW1hbmQgY2xvc2VzIGl0cyBvd24gY2hlY2tvdXQuICovXG4gIGFzeW5jIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0dXMgPSBcImRlc3Ryb3llZFwiO1xuICB9XG5cbiAgLyoqIE1vbnR5IHNlc3Npb25zIGFyZSBlcGhlbWVyYWwgYW5kIGRvIG5vdCBwcm92aWRlIHBlcnNpc3RlbnQgY2hlY2twb2ludHMuICovXG4gIGFzeW5jIHNuYXBzaG90KCk6IFByb21pc2U8dm9pZD4ge31cblxuICByZWFkb25seSBzdXBwb3J0c0NoZWNrcG9pbnRzID0gZmFsc2U7XG5cbiAgLyoqIEV4ZWN1dGUgUHl0aG9uIHNvdXJjZSBhbmQgbWFwIE1vbnR5IG91dHB1dCB0byBNYXN0cmEncyBjb21tYW5kIHJlc3VsdC4gKi9cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIGFyZ3M6IHN0cmluZ1tdID0gW10sXG4gICAgb3B0aW9uczogRXhlY3V0ZUNvbW1hbmRPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8Q29tbWFuZFJlc3VsdD4ge1xuICAgIGNvbnN0IHN0YXJ0ZWQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBjb25zdCBjb2RlID0gbW9udHlDb2RlKGNvbW1hbmQsIGFyZ3MpO1xuICAgIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWlsZWRSZXN1bHQoXG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN0YXJ0ZWQsXG4gICAgICAgIFwiTW9udHkgZmFsbGJhY2sgYWNjZXB0cyBQeXRob24gc291cmNlIGRpcmVjdGx5LCBvciBweXRob24vcHl0aG9uMyB3aXRoIGEgc2luZ2xlIC1jIHNjcmlwdC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucy5lbnYgPz8ge30pLmZpbHRlcihcbiAgICAgIChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgICBpZiAoZW52aXJvbm1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZhaWxlZFJlc3VsdChcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3RhcnRlZCxcbiAgICAgICAgXCJNb250eSBmYWxsYmFjayBkb2VzIG5vdCBleHBvc2UgaG9zdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jd2QpIHtcbiAgICAgIHJldHVybiBmYWlsZWRSZXN1bHQoXG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN0YXJ0ZWQsXG4gICAgICAgIFwiTW9udHkgZmFsbGJhY2sgZG9lcyBub3QgZXhwb3NlIGEgaG9zdCB3b3JraW5nIGRpcmVjdG9yeS5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSB0aHJvdyBvcHRpb25zLmFib3J0U2lnbmFsLnJlYXNvbjtcblxuICAgIGF3YWl0IHRoaXMuc3RhcnQoKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IHRoaXMuY29tbWFuZFRpbWVvdXRNcztcbiAgICBjb25zdCBwb29sID0gKGF3YWl0IG1vbnR5Q29udGV4dCgpKS5wb29sO1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBjaGVja291dFNlc3Npb24oXG4gICAgICBwb29sLFxuICAgICAge1xuICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICBtYXhGZWVkRHVyYXRpb25TZWNzOiBNYXRoLm1heCgwLjAwMSwgdGltZW91dCAvIDFfMDAwKSxcbiAgICAgICAgICBtYXhNZW1vcnk6IHRoaXMubWF4TWVtb3J5Qnl0ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVDaGVjazogdGhpcy50eXBlQ2hlY2ssXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICApO1xuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBSZXRhaW5lZE91dHB1dChvcHRpb25zKTtcbiAgICBjb25zdCB3b3JrZXJQaWQgPSBzZXNzaW9uLndvcmtlclBpZDtcbiAgICBsZXQgYWJvcnRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKTogdm9pZCA9PiB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHRlcm1pbmF0ZVdvcmtlcih3b3JrZXJQaWQpO1xuICAgIH07XG4gICAgb3B0aW9ucy5hYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAob3B0aW9ucy5hYm9ydFNpZ25hbD8uYWJvcnRlZCkgb25BYm9ydCgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoYWJvcnRlZCkgdGhyb3cgYWJvcnRSZWFzb24ob3B0aW9ucy5hYm9ydFNpZ25hbCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHNlc3Npb24uZmVlZFJ1bihzdHJpcFB5dGhvbkZlbmNlKGNvZGUpLCB7XG4gICAgICAgIHByaW50Q2FsbGJhY2s6IChzdHJlYW0sIHRleHQpID0+IG91dHB1dC5lbWl0KHN0cmVhbSwgdGV4dCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJldHVybmVkID0gZm9ybWF0UmVzdWx0KHZhbHVlKTtcbiAgICAgIGlmIChyZXR1cm5lZCkge1xuICAgICAgICBjb25zdCBzdWZmaXggPSByZXR1cm5lZC5lbmRzV2l0aChcIlxcblwiKSA/IHJldHVybmVkIDogYCR7cmV0dXJuZWR9XFxuYDtcbiAgICAgICAgb3V0cHV0LmVtaXQoXCJzdGRvdXRcIiwgc3VmZml4KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFVzZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBleGl0Q29kZTogMCxcbiAgICAgICAgc3Rkb3V0OiBvdXRwdXQuc3Rkb3V0LnZhbHVlLFxuICAgICAgICBzdGRlcnI6IG91dHB1dC5zdGRlcnIudmFsdWUsXG4gICAgICAgIGV4ZWN1dGlvblRpbWVNczogcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydGVkLFxuICAgICAgICAuLi5vdXRwdXQubWV0YWRhdGEoKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoY2F1Z2h0KSB7XG4gICAgICBpZiAoYWJvcnRlZCB8fCBvcHRpb25zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgIHRocm93IGFib3J0UmVhc29uKG9wdGlvbnMuYWJvcnRTaWduYWwpO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGNhdWdodCk7XG4gICAgICBvdXRwdXQuZW1pdChcInN0ZGVyclwiLCBvdXRwdXQuc3RkZXJyLnZhbHVlID8gYFxcbiR7bWVzc2FnZX1gIDogbWVzc2FnZSk7XG4gICAgICBjb25zdCB7IGNyYXNoZWRFcnJvciB9ID0gYXdhaXQgbW9udHlDb250ZXh0KCk7XG4gICAgICBjb25zdCB0aW1lZE91dCA9IGNhdWdodCBpbnN0YW5jZW9mIGNyYXNoZWRFcnJvciAmJiBjYXVnaHQudGltZWRPdXQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXhpdENvZGU6IHRpbWVkT3V0ID8gLTEgOiAxLFxuICAgICAgICBzdGRvdXQ6IG91dHB1dC5zdGRvdXQudmFsdWUsXG4gICAgICAgIHN0ZGVycjogb3V0cHV0LnN0ZGVyci52YWx1ZSxcbiAgICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAgIC4uLih0aW1lZE91dCA/IHsgdGltZWRPdXQ6IHRydWUsIGtpbGxlZDogdHJ1ZSB9IDoge30pLFxuICAgICAgICAuLi5vdXRwdXQubWV0YWRhdGEoKSxcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIGF3YWl0IHNlc3Npb24uY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc1JlYWR5KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCI7XG4gIH1cblxuICBnZXRJbmZvKCk6IFNhbmRib3hJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcixcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBjcmVhdGVkQXQ6IHRoaXMuY3JlYXRlZEF0LFxuICAgICAgLi4uKHRoaXMubGFzdFVzZWRBdCA/IHsgbGFzdFVzZWRBdDogdGhpcy5sYXN0VXNlZEF0IH0gOiB7fSksXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBsYW5ndWFnZTogXCJweXRob25cIixcbiAgICAgICAgaG9zdEFjY2VzczogZmFsc2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBnZXRJbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgXCJDb21tYW5kcyBydW4gYXMgUHl0aG9uIHNvdXJjZSBpbiB0aGUgUHlkYW50aWMgTW9udHkgZmFsbGJhY2suXCIsXG4gICAgICBcIlBhc3MgUHl0aG9uIGNvZGUgZGlyZWN0bHkgcmF0aGVyIHRoYW4gc2hlbGwgc3ludGF4LlwiLFxuICAgICAgXCJUaGVyZSBpcyBubyBob3N0IGZpbGVzeXN0ZW0sIG5ldHdvcmssIGVudmlyb25tZW50LCBzaGVsbCwgb3IgdGhpcmQtcGFydHkgcGFja2FnZSBhY2Nlc3MuXCIsXG4gICAgXS5qb2luKFwiIFwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb250eUNvZGUoY29tbWFuZDogc3RyaW5nLCBhcmdzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvbW1hbmQ7XG4gIGlmICgoY29tbWFuZCA9PT0gXCJweXRob25cIiB8fCBjb21tYW5kID09PSBcInB5dGhvbjNcIikgJiYgYXJncy5sZW5ndGggPT09IDIgJiYgYXJnc1swXSA9PT0gXCItY1wiKSB7XG4gICAgcmV0dXJuIGFyZ3NbMV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc3RyaXBQeXRob25GZW5jZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0cmltbWVkID0gY29kZS50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gL15gYGAoPzpweXRob258cHkpP1xccypcXG4oW1xcc1xcU10qPylcXG5gYGAkL2kuZXhlYyh0cmltbWVkKTtcbiAgcmV0dXJuIG1hdGNoPy5bMV0gPz8gY29kZTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmVzdWx0KHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBcIlwiO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSByZXR1cm4gdmFsdWU7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSA/PyBTdHJpbmcodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuXG5jbGFzcyBSZXRhaW5lZE91dHB1dCB7XG4gIHJlYWRvbmx5IHN0ZG91dDogUmV0YWluZWRUZXh0O1xuICByZWFkb25seSBzdGRlcnI6IFJldGFpbmVkVGV4dDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9uU3Rkb3V0OiBFeGVjdXRlQ29tbWFuZE9wdGlvbnNbXCJvblN0ZG91dFwiXTtcbiAgcHJpdmF0ZSByZWFkb25seSBvblN0ZGVycjogRXhlY3V0ZUNvbW1hbmRPcHRpb25zW1wib25TdGRlcnJcIl07XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRXhlY3V0ZUNvbW1hbmRPcHRpb25zKSB7XG4gICAgdGhpcy5zdGRvdXQgPSBuZXcgUmV0YWluZWRUZXh0KG9wdGlvbnMubWF4UmV0YWluZWRCeXRlcyk7XG4gICAgdGhpcy5zdGRlcnIgPSBuZXcgUmV0YWluZWRUZXh0KG9wdGlvbnMubWF4UmV0YWluZWRCeXRlcyk7XG4gICAgdGhpcy5vblN0ZG91dCA9IG9wdGlvbnMub25TdGRvdXQ7XG4gICAgdGhpcy5vblN0ZGVyciA9IG9wdGlvbnMub25TdGRlcnI7XG4gIH1cblxuICBlbWl0KHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCIsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChzdHJlYW0gPT09IFwic3Rkb3V0XCIpIHtcbiAgICAgIHRoaXMub25TdGRvdXQ/Lih0ZXh0KTtcbiAgICAgIHRoaXMuc3Rkb3V0LmFwcGVuZCh0ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vblN0ZGVycj8uKHRleHQpO1xuICAgICAgdGhpcy5zdGRlcnIuYXBwZW5kKHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIG1ldGFkYXRhKCk6IFBpY2s8XG4gICAgQ29tbWFuZFJlc3VsdCxcbiAgICBcInN0ZG91dFRydW5jYXRlZFwiIHwgXCJzdGRlcnJUcnVuY2F0ZWRcIiB8IFwic3Rkb3V0RHJvcHBlZEJ5dGVzXCIgfCBcInN0ZGVyckRyb3BwZWRCeXRlc1wiXG4gID4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGhpcy5zdGRvdXQuZHJvcHBlZEJ5dGVzID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN0ZG91dFRydW5jYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHN0ZG91dERyb3BwZWRCeXRlczogdGhpcy5zdGRvdXQuZHJvcHBlZEJ5dGVzLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4odGhpcy5zdGRlcnIuZHJvcHBlZEJ5dGVzID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN0ZGVyclRydW5jYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHN0ZGVyckRyb3BwZWRCeXRlczogdGhpcy5zdGRlcnIuZHJvcHBlZEJ5dGVzLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBSZXRhaW5lZFRleHQge1xuICB2YWx1ZSA9IFwiXCI7XG4gIGRyb3BwZWRCeXRlcyA9IDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtYXhCeXRlczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbiAgY29uc3RydWN0b3IobWF4Qnl0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gbWF4Qnl0ZXMgPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGlmIChcbiAgICAgIHJlc29sdmVkICE9PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiZcbiAgICAgICghTnVtYmVyLmlzU2FmZUludGVnZXIocmVzb2x2ZWQpIHx8IHJlc29sdmVkIDwgMClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXhSZXRhaW5lZEJ5dGVzIG11c3QgYmUgYSBub24tbmVnYXRpdmUgc2FmZSBpbnRlZ2VyIG9yIEluZmluaXR5XCIpO1xuICAgIH1cbiAgICB0aGlzLm1heEJ5dGVzID0gcmVzb2x2ZWQ7XG4gIH1cblxuICBhcHBlbmQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG4gICAgaWYgKHRoaXMubWF4Qnl0ZXMgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgdGhpcy52YWx1ZSArPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb21iaW5lZCA9IHRoaXMuZW5jb2Rlci5lbmNvZGUodGhpcy52YWx1ZSArIHRleHQpO1xuICAgIGlmIChjb21iaW5lZC5sZW5ndGggPD0gdGhpcy5tYXhCeXRlcykge1xuICAgICAgdGhpcy52YWx1ZSArPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc3RhcnQgPSBjb21iaW5lZC5sZW5ndGggLSB0aGlzLm1heEJ5dGVzO1xuICAgIHdoaWxlIChzdGFydCA8IGNvbWJpbmVkLmxlbmd0aCAmJiAoY29tYmluZWRbc3RhcnRdISAmIDB4YzApID09PSAweDgwKSBzdGFydCsrO1xuICAgIGNvbnN0IHJldGFpbmVkID0gY29tYmluZWQuc3ViYXJyYXkoc3RhcnQpO1xuICAgIHRoaXMuZHJvcHBlZEJ5dGVzICs9IGNvbWJpbmVkLmxlbmd0aCAtIHJldGFpbmVkLmxlbmd0aDtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5kZWNvZGVyLmRlY29kZShyZXRhaW5lZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVybWluYXRlV29ya2VyKHdvcmtlclBpZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICh3b3JrZXJQaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICB0cnkge1xuICAgIHByb2Nlc3Mua2lsbCh3b3JrZXJQaWQsIFwiU0lHS0lMTFwiKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gVGhlIGNvbW1hbmQgY2FuIGZpbmlzaCBiZXR3ZWVuIHRoZSBhYm9ydCBldmVudCBhbmQgdGhlIGtpbGwgcmVxdWVzdC5cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja291dFNlc3Npb24oXG4gIHBvb2w6IE1vbnR5UG9vbCxcbiAgb3B0aW9uczogQ2hlY2tvdXRPcHRpb25zLFxuICBzaWduYWw6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxNb250eVNlc3Npb24+IHtcbiAgY29uc3QgY2hlY2tvdXQgPSBwb29sLmNoZWNrb3V0KG9wdGlvbnMpO1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuIGNoZWNrb3V0O1xuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB2b2lkIGNoZWNrb3V0LnRoZW4oKHNlc3Npb24pID0+IHNlc3Npb24uY2xvc2UoKSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB0aHJvdyBhYm9ydFJlYXNvbihzaWduYWwpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPE1vbnR5U2Vzc2lvbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIHJlamVjdChhYm9ydFJlYXNvbihzaWduYWwpKTtcbiAgICAgIHZvaWQgY2hlY2tvdXQudGhlbigoc2Vzc2lvbikgPT4gc2Vzc2lvbi5jbG9zZSgpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIH07XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgY2hlY2tvdXQudGhlbihcbiAgICAgIChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgICByZXNvbHZlKHNlc3Npb24pO1xuICAgICAgfSxcbiAgICAgIChjYXVnaHQ6IHVua25vd24pID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICAgIHJlamVjdChjYXVnaHQpO1xuICAgICAgfSxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWJvcnRSZWFzb24oc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICByZXR1cm4gc2lnbmFsPy5yZWFzb24gPz8gbmV3IERPTUV4Y2VwdGlvbihcIlRoZSBjb21tYW5kIHdhcyBhYm9ydGVkXCIsIFwiQWJvcnRFcnJvclwiKTtcbn1cblxuZnVuY3Rpb24gZmFpbGVkUmVzdWx0KFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBzdGFydGVkOiBudW1iZXIsXG4gIHN0ZGVycjogc3RyaW5nLFxuKTogQ29tbWFuZFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgY29tbWFuZCxcbiAgICBhcmdzLFxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGV4aXRDb2RlOiAxLFxuICAgIHN0ZG91dDogXCJcIixcbiAgICBzdGRlcnIsXG4gICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gIH07XG59XG5cbmlmIChpbXBvcnQubWV0YS5tYWluKSB7XG4gIGNvbnN0IHNhbmRib3ggPSBuZXcgTW9udHlTYW5kYm94KCk7XG4gIGF3YWl0IHNhbmRib3guc3RhcnQoKTtcbiAgY29uc29sZS5sb2coYXdhaXQgc2FuZGJveC5leGVjdXRlQ29tbWFuZChcInByaW50KCdIZWxsbywgd29ybGQhJylcIikpO1xuICBhd2FpdCBzYW5kYm94LnN0b3AoKTtcbn1cbiJdfQ==
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udHktc2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb250eS1zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFNL0MsT0FBTyxFQUFFLGFBQWEsRUFBdUIsTUFBTSx3QkFBd0IsQ0FBQztBQUc1RSxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLHdCQUF3QixHQUFHLFVBQVUsQ0FBQztBQUM1QyxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLElBQUksRUFBRSxjQUFjO0lBQ3BCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUM7Q0FDbEMsQ0FBQztBQUNYLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxFQUFFLFlBQVk7SUFDbEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztDQUNsQyxDQUFDO0FBQ1gsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQVMxQyxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLGNBQXNCLG9CQUFvQixFQUFFO0lBQzVFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQTJCLEVBQUU7SUFDM0UsTUFBTSxNQUFNLEdB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LENBQUM7WUFDN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsTUFBK0I7SUFDbEQsT0FBTyxNQUFNLEVBQUUsTUFBTSxJQUFJLElBQUksWUFBWSxDQUFDLHlCQUF5QixFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3JGLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDbkIsT0FBZSxFQUNmLElBQWMsRUFDZCxPQUFlLEVBQ2YsTUFBYztJQUVkLE9BQU87UUFDTCxPQUFPO1FBQ1AsSUFBSTtRQUNKLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLENBQUM7UUFDWCxNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU07UUFDTixlQUFlLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU87S0FDN0MsQ0FBQztBQUNKLENBQUM7QUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7SUFDcEUsTUFBTSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHlkYW50aWMgTW9udHkgZmFsbGJhY2sgZm9yIE1hc3RyYSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqXG4gKiBQcmVmZXJzIE1vbnR5J3MgbmF0aXZlIE5vZGUgc3VicHJvY2VzcyB3b3JrZXJzIGFuZCBmYWxscyBiYWNrIHRvIGl0cyBXQVNNXG4gKiB3b3JrZXJzIHdoZW4gdGhlIG5hdGl2ZSBwYWNrYWdlIGlzIHVuYXZhaWxhYmxlLiBJdCBleGVjdXRlcyBQeXRob24gc291cmNlXG4gKiB3aXRoIG5vIGhvc3QgZmlsZXN5c3RlbSwgbmV0d29yaywgZW52aXJvbm1lbnQsIHNoZWxsLCBvciB0aGlyZC1wYXJ0eSBwYWNrYWdlXG4gKiBhY2Nlc3MuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNvbmZpZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgZXJyb3JVdGlscywgZnVuY3Rpb25VdGlscywgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGF2YWlsYWJsZVBhcmFsbGVsaXNtIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZFJlc3VsdCxcbiAgRXhlY3V0ZUNvbW1hbmRPcHRpb25zLFxuICBTYW5kYm94SW5mbyxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcbmltcG9ydCB7IE1hc3RyYVNhbmRib3gsIHR5cGUgUHJvdmlkZXJTdGF0dXMgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGVja291dE9wdGlvbnMsIE1vbnR5LCBNb250eUNyYXNoZWRFcnJvciwgTW9udHlTZXNzaW9uIH0gZnJvbSBcIkBweWRhbnRpYy9tb250eVwiO1xuXG5jb25zdCBERUZBVUxUX0NPTU1BTkRfVElNRU9VVF9NUyA9IDMwXzAwMDtcbmNvbnN0IERFRkFVTFRfTUFYX01FTU9SWV9CWVRFUyA9IDEwXzAwMF8wMDA7XG5jb25zdCBOQVRJVkVfTU9OVFlfVEFSR0VUID0ge1xuICBuYW1lOiBcIm5hdGl2ZSBNb250eVwiLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoXCJAcHlkYW50aWMvbW9udHkvbm9kZVwiKSxcbn0gYXMgY29uc3Q7XG5jb25zdCBXQVNNX01PTlRZX1RBUkdFVCA9IHtcbiAgbmFtZTogXCJXQVNNIE1vbnR5XCIsXG4gIGxvYWQ6ICgpID0+IGltcG9ydChcIkBweWRhbnRpYy9tb250eS93YXNtXCIpLFxufSBhcyBjb25zdDtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvbW9udHlcIik7XG5cbnR5cGUgTW9udHlQb29sID0gUGljazxNb250eSwgXCJjaGVja291dFwiPjtcblxuaW50ZXJmYWNlIE1vbnR5Q29udGV4dCB7XG4gIGNyYXNoZWRFcnJvcjogdHlwZW9mIE1vbnR5Q3Jhc2hlZEVycm9yO1xuICBwb29sOiBNb250eVBvb2w7XG59XG5cbi8qKiBAaW50ZXJuYWwgU2l6ZSB0aGUgc2hhcmVkIHdvcmtlciBwb29sIGZyb20gdGhlIGhvc3QncyBhdmFpbGFibGUgcHJvY2Vzc29ycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb250eU1heFByb2Nlc3NlcyhwYXJhbGxlbGlzbTogbnVtYmVyID0gYXZhaWxhYmxlUGFyYWxsZWxpc20oKSk6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heCg0LCBNYXRoLmZsb29yKHBhcmFsbGVsaXNtKSAqIDIpO1xufVxuXG5jb25zdCBtb250eUNvbnRleHQgPSBmdW5jdGlvblV0aWxzLm1lbW9pemUoYXN5bmMgKCk6IFByb21pc2U8TW9udHlDb250ZXh0PiA9PiB7XG4gIGNvbnN0IGVycm9yczogRXJyb3JbXSA9IFtdO1xuICBjb25zdCB0YXJnZXRzID0gY29uZmlnVXRpbHMuYm9vbGVhbih1bmRlZmluZWQsIFwiTU9OVFlfRk9SQ0VfV0FTTVwiKVxuICAgID8gW1dBU01fTU9OVFlfVEFSR0VUXVxuICAgIDogW05BVElWRV9NT05UWV9UQVJHRVQsIFdBU01fTU9OVFlfVEFSR0VUXTtcbiAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCB0YXJnZXQubG9hZCgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGAke3RhcmdldC5uYW1lfSBtb2R1bGUgYXZhaWxhYmxlYCk7XG4gICAgICBjb25zdCBtYXhQcm9jZXNzZXMgPSBtb250eU1heFByb2Nlc3NlcygpO1xuICAgICAgY29uc3QgcG9vbCA9IGF3YWl0IG1vZHVsZS5Nb250eS5jcmVhdGUoe1xuICAgICAgICBtaW5Qcm9jZXNzZXM6IDEsXG4gICAgICAgIG1heFByb2Nlc3NlcyxcbiAgICAgICAgcmVxdWVzdFRpbWVvdXQ6IDM1LFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuZGVidWcoYCR7dGFyZ2V0Lm5hbWV9IHBvb2wgY3JlYXRlZGAsIHsgbWF4UHJvY2Vzc2VzIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3Jhc2hlZEVycm9yOiBtb2R1bGUuTW9udHlDcmFzaGVkRXJyb3IsXG4gICAgICAgIHBvb2wsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChlcnJvclV0aWxzLnRvRXJyb3IoZXJyb3IpKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgJHt0YXJnZXQubmFtZX0gdW5hdmFpbGFibGVgLCB7XG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgXCJGYWlsZWQgdG8gY3JlYXRlIE1vbnR5IHBvb2xcIik7XG59KTtcblxuLyoqIFJlc291cmNlIGNvbnRyb2xzIGZvciB0aGUgTW9udHkgUHl0aG9uIGZhbGxiYWNrLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb250eVNhbmRib3hPcHRpb25zIHtcbiAgLyoqIE1hc3RyYSBwcm92aWRlciBpZC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IGV4ZWN1dGlvbiB0aW1lb3V0LiBQZXItY2FsbCBgb3B0aW9ucy50aW1lb3V0YCB3aW5zLiAqL1xuICBjb21tYW5kVGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogTWF4aW11bSBNb250eSBoZWFwIGJ5dGVzIGZvciBvbmUgY2hlY2tvdXQuICovXG4gIG1heE1lbW9yeUJ5dGVzPzogbnVtYmVyO1xuICAvKiogVHlwZS1jaGVjayBlYWNoIFB5dGhvbiBzbmlwcGV0IGJlZm9yZSBydW5uaW5nIGl0LiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgdHlwZUNoZWNrPzogYm9vbGVhbjtcbn1cblxuLyoqIFB5dGhvbi1vbmx5LCBkZW55LWJ5LWRlZmF1bHQgc2FuZGJveCBiYWNrZWQgYnkgTW9udHkncyBzZWxlY3RlZCB3b3JrZXIgcG9vbC4gKi9cbmV4cG9ydCBjbGFzcyBNb250eVNhbmRib3ggZXh0ZW5kcyBNYXN0cmFTYW5kYm94IHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwcm92aWRlciA9IFwibW9udHlcIjtcbiAgc3RhdHVzOiBQcm92aWRlclN0YXR1cyA9IFwicGVuZGluZ1wiO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFRpbWVvdXRNczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heE1lbW9yeUJ5dGVzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHlwZUNoZWNrOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgbGFzdFVzZWRBdD86IERhdGU7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTW9udHlTYW5kYm94T3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdGlvbnMubmFtZSA/PyBcIlB5ZGFudGljIE1vbnR5XCI7XG4gICAgc3VwZXIoeyBuYW1lIH0pO1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IFwibW9udHlcIjtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuY29tbWFuZFRpbWVvdXRNcyA9IG9wdGlvbnMuY29tbWFuZFRpbWVvdXRNcyA/PyBERUZBVUxUX0NPTU1BTkRfVElNRU9VVF9NUztcbiAgICB0aGlzLm1heE1lbW9yeUJ5dGVzID0gb3B0aW9ucy5tYXhNZW1vcnlCeXRlcyA/PyBERUZBVUxUX01BWF9NRU1PUllfQllURVM7XG4gICAgdGhpcy50eXBlQ2hlY2sgPSBvcHRpb25zLnR5cGVDaGVjayA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKiBXYXJtIHRoZSBzaGFyZWQgY3Jhc2gtaXNvbGF0ZWQgd29ya2VyIHBvb2wuICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG1vbnR5Q29udGV4dCgpO1xuICB9XG5cbiAgLyoqIFRoZSBwcm9jZXNzLXdpZGUgcG9vbCBzdGF5cyB3YXJtOyB0aGlzIGluc3RhbmNlIGNhcnJpZXMgbm8gb3BlbiBzZXNzaW9uLiAqL1xuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge31cblxuICAvKiogVGhlIHByb2Nlc3Mtd2lkZSBwb29sIHN0YXlzIHdhcm07IGVhY2ggY29tbWFuZCBjbG9zZXMgaXRzIG93biBjaGVja291dC4gKi9cbiAgYXN5bmMgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHt9XG5cbiAgLyoqIEV4ZWN1dGUgUHl0aG9uIHNvdXJjZSBhbmQgbWFwIE1vbnR5IG91dHB1dCB0byBNYXN0cmEncyBjb21tYW5kIHJlc3VsdC4gKi9cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIGFyZ3M6IHN0cmluZ1tdID0gW10sXG4gICAgb3B0aW9uczogRXhlY3V0ZUNvbW1hbmRPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8Q29tbWFuZFJlc3VsdD4ge1xuICAgIGNvbnN0IHN0YXJ0ZWQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBjb25zdCBjb2RlID0gbW9udHlDb2RlKGNvbW1hbmQsIGFyZ3MpO1xuICAgIGlmIChjb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWlsZWRSZXN1bHQoXG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN0YXJ0ZWQsXG4gICAgICAgIFwiTW9udHkgZmFsbGJhY2sgYWNjZXB0cyBQeXRob24gc291cmNlIGRpcmVjdGx5LCBvciBweXRob24vcHl0aG9uMyB3aXRoIGEgc2luZ2xlIC1jIHNjcmlwdC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucy5lbnYgPz8ge30pLmZpbHRlcihcbiAgICAgIChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgICBpZiAoZW52aXJvbm1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZhaWxlZFJlc3VsdChcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3RhcnRlZCxcbiAgICAgICAgXCJNb250eSBmYWxsYmFjayBkb2VzIG5vdCBleHBvc2UgaG9zdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jd2QpIHtcbiAgICAgIHJldHVybiBmYWlsZWRSZXN1bHQoXG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHN0YXJ0ZWQsXG4gICAgICAgIFwiTW9udHkgZmFsbGJhY2sgZG9lcyBub3QgZXhwb3NlIGEgaG9zdCB3b3JraW5nIGRpcmVjdG9yeS5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSB0aHJvdyBvcHRpb25zLmFib3J0U2lnbmFsLnJlYXNvbjtcblxuICAgIGF3YWl0IHRoaXMuc3RhcnQoKTtcbiAgICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IHRoaXMuY29tbWFuZFRpbWVvdXRNcztcbiAgICBjb25zdCBwb29sID0gKGF3YWl0IG1vbnR5Q29udGV4dCgpKS5wb29sO1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBjaGVja291dFNlc3Npb24oXG4gICAgICBwb29sLFxuICAgICAge1xuICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICBtYXhGZWVkRHVyYXRpb25TZWNzOiBNYXRoLm1heCgwLjAwMSwgdGltZW91dCAvIDFfMDAwKSxcbiAgICAgICAgICBtYXhNZW1vcnk6IHRoaXMubWF4TWVtb3J5Qnl0ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGVDaGVjazogdGhpcy50eXBlQ2hlY2ssXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5hYm9ydFNpZ25hbCxcbiAgICApO1xuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBSZXRhaW5lZE91dHB1dChvcHRpb25zKTtcbiAgICBjb25zdCB3b3JrZXJQaWQgPSBzZXNzaW9uLndvcmtlclBpZDtcbiAgICBsZXQgYWJvcnRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG9uQWJvcnQgPSAoKTogdm9pZCA9PiB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHRlcm1pbmF0ZVdvcmtlcih3b3JrZXJQaWQpO1xuICAgIH07XG4gICAgb3B0aW9ucy5hYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAob3B0aW9ucy5hYm9ydFNpZ25hbD8uYWJvcnRlZCkgb25BYm9ydCgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoYWJvcnRlZCkgdGhyb3cgYWJvcnRSZWFzb24ob3B0aW9ucy5hYm9ydFNpZ25hbCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHNlc3Npb24uZmVlZFJ1bihzdHJpcFB5dGhvbkZlbmNlKGNvZGUpLCB7XG4gICAgICAgIHByaW50Q2FsbGJhY2s6IChzdHJlYW0sIHRleHQpID0+IG91dHB1dC5lbWl0KHN0cmVhbSwgdGV4dCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJldHVybmVkID0gZm9ybWF0UmVzdWx0KHZhbHVlKTtcbiAgICAgIGlmIChyZXR1cm5lZCkge1xuICAgICAgICBjb25zdCBzdWZmaXggPSByZXR1cm5lZC5lbmRzV2l0aChcIlxcblwiKSA/IHJldHVybmVkIDogYCR7cmV0dXJuZWR9XFxuYDtcbiAgICAgICAgb3V0cHV0LmVtaXQoXCJzdGRvdXRcIiwgc3VmZml4KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFVzZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBleGl0Q29kZTogMCxcbiAgICAgICAgc3Rkb3V0OiBvdXRwdXQuc3Rkb3V0LnZhbHVlLFxuICAgICAgICBzdGRlcnI6IG91dHB1dC5zdGRlcnIudmFsdWUsXG4gICAgICAgIGV4ZWN1dGlvblRpbWVNczogcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydGVkLFxuICAgICAgICAuLi5vdXRwdXQubWV0YWRhdGEoKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoY2F1Z2h0KSB7XG4gICAgICBpZiAoYWJvcnRlZCB8fCBvcHRpb25zLmFib3J0U2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgIHRocm93IGFib3J0UmVhc29uKG9wdGlvbnMuYWJvcnRTaWduYWwpO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGNhdWdodCk7XG4gICAgICBvdXRwdXQuZW1pdChcInN0ZGVyclwiLCBvdXRwdXQuc3RkZXJyLnZhbHVlID8gYFxcbiR7bWVzc2FnZX1gIDogbWVzc2FnZSk7XG4gICAgICBjb25zdCB7IGNyYXNoZWRFcnJvciB9ID0gYXdhaXQgbW9udHlDb250ZXh0KCk7XG4gICAgICBjb25zdCB0aW1lZE91dCA9IGNhdWdodCBpbnN0YW5jZW9mIGNyYXNoZWRFcnJvciAmJiBjYXVnaHQudGltZWRPdXQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXhpdENvZGU6IHRpbWVkT3V0ID8gLTEgOiAxLFxuICAgICAgICBzdGRvdXQ6IG91dHB1dC5zdGRvdXQudmFsdWUsXG4gICAgICAgIHN0ZGVycjogb3V0cHV0LnN0ZGVyci52YWx1ZSxcbiAgICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAgIC4uLih0aW1lZE91dCA/IHsgdGltZWRPdXQ6IHRydWUsIGtpbGxlZDogdHJ1ZSB9IDoge30pLFxuICAgICAgICAuLi5vdXRwdXQubWV0YWRhdGEoKSxcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG9wdGlvbnMuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIGF3YWl0IHNlc3Npb24uY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc1JlYWR5KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCI7XG4gIH1cblxuICBnZXRJbmZvKCk6IFNhbmRib3hJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcixcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBjcmVhdGVkQXQ6IHRoaXMuY3JlYXRlZEF0LFxuICAgICAgLi4uKHRoaXMubGFzdFVzZWRBdCA/IHsgbGFzdFVzZWRBdDogdGhpcy5sYXN0VXNlZEF0IH0gOiB7fSksXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBsYW5ndWFnZTogXCJweXRob25cIixcbiAgICAgICAgaG9zdEFjY2VzczogZmFsc2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBnZXRJbnN0cnVjdGlvbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgXCJDb21tYW5kcyBydW4gYXMgUHl0aG9uIHNvdXJjZSBpbiB0aGUgUHlkYW50aWMgTW9udHkgZmFsbGJhY2suXCIsXG4gICAgICBcIlBhc3MgUHl0aG9uIGNvZGUgZGlyZWN0bHkgcmF0aGVyIHRoYW4gc2hlbGwgc3ludGF4LlwiLFxuICAgICAgXCJUaGVyZSBpcyBubyBob3N0IGZpbGVzeXN0ZW0sIG5ldHdvcmssIGVudmlyb25tZW50LCBzaGVsbCwgb3IgdGhpcmQtcGFydHkgcGFja2FnZSBhY2Nlc3MuXCIsXG4gICAgXS5qb2luKFwiIFwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb250eUNvZGUoY29tbWFuZDogc3RyaW5nLCBhcmdzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvbW1hbmQ7XG4gIGlmICgoY29tbWFuZCA9PT0gXCJweXRob25cIiB8fCBjb21tYW5kID09PSBcInB5dGhvbjNcIikgJiYgYXJncy5sZW5ndGggPT09IDIgJiYgYXJnc1swXSA9PT0gXCItY1wiKSB7XG4gICAgcmV0dXJuIGFyZ3NbMV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc3RyaXBQeXRob25GZW5jZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0cmltbWVkID0gY29kZS50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gL15gYGAoPzpweXRob258cHkpP1xccypcXG4oW1xcc1xcU10qPylcXG5gYGAkL2kuZXhlYyh0cmltbWVkKTtcbiAgcmV0dXJuIG1hdGNoPy5bMV0gPz8gY29kZTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmVzdWx0KHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBcIlwiO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSByZXR1cm4gdmFsdWU7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSA/PyBTdHJpbmcodmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuXG5jbGFzcyBSZXRhaW5lZE91dHB1dCB7XG4gIHJlYWRvbmx5IHN0ZG91dDogUmV0YWluZWRUZXh0O1xuICByZWFkb25seSBzdGRlcnI6IFJldGFpbmVkVGV4dDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9uU3Rkb3V0OiBFeGVjdXRlQ29tbWFuZE9wdGlvbnNbXCJvblN0ZG91dFwiXTtcbiAgcHJpdmF0ZSByZWFkb25seSBvblN0ZGVycjogRXhlY3V0ZUNvbW1hbmRPcHRpb25zW1wib25TdGRlcnJcIl07XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRXhlY3V0ZUNvbW1hbmRPcHRpb25zKSB7XG4gICAgdGhpcy5zdGRvdXQgPSBuZXcgUmV0YWluZWRUZXh0KG9wdGlvbnMubWF4UmV0YWluZWRCeXRlcyk7XG4gICAgdGhpcy5zdGRlcnIgPSBuZXcgUmV0YWluZWRUZXh0KG9wdGlvbnMubWF4UmV0YWluZWRCeXRlcyk7XG4gICAgdGhpcy5vblN0ZG91dCA9IG9wdGlvbnMub25TdGRvdXQ7XG4gICAgdGhpcy5vblN0ZGVyciA9IG9wdGlvbnMub25TdGRlcnI7XG4gIH1cblxuICBlbWl0KHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCIsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChzdHJlYW0gPT09IFwic3Rkb3V0XCIpIHtcbiAgICAgIHRoaXMub25TdGRvdXQ/Lih0ZXh0KTtcbiAgICAgIHRoaXMuc3Rkb3V0LmFwcGVuZCh0ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vblN0ZGVycj8uKHRleHQpO1xuICAgICAgdGhpcy5zdGRlcnIuYXBwZW5kKHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIG1ldGFkYXRhKCk6IFBpY2s8XG4gICAgQ29tbWFuZFJlc3VsdCxcbiAgICBcInN0ZG91dFRydW5jYXRlZFwiIHwgXCJzdGRlcnJUcnVuY2F0ZWRcIiB8IFwic3Rkb3V0RHJvcHBlZEJ5dGVzXCIgfCBcInN0ZGVyckRyb3BwZWRCeXRlc1wiXG4gID4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGhpcy5zdGRvdXQuZHJvcHBlZEJ5dGVzID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN0ZG91dFRydW5jYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHN0ZG91dERyb3BwZWRCeXRlczogdGhpcy5zdGRvdXQuZHJvcHBlZEJ5dGVzLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4odGhpcy5zdGRlcnIuZHJvcHBlZEJ5dGVzID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN0ZGVyclRydW5jYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIHN0ZGVyckRyb3BwZWRCeXRlczogdGhpcy5zdGRlcnIuZHJvcHBlZEJ5dGVzLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBSZXRhaW5lZFRleHQge1xuICB2YWx1ZSA9IFwiXCI7XG4gIGRyb3BwZWRCeXRlcyA9IDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtYXhCeXRlczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG5cbiAgY29uc3RydWN0b3IobWF4Qnl0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gbWF4Qnl0ZXMgPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGlmIChcbiAgICAgIHJlc29sdmVkICE9PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiZcbiAgICAgICghTnVtYmVyLmlzU2FmZUludGVnZXIocmVzb2x2ZWQpIHx8IHJlc29sdmVkIDwgMClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXhSZXRhaW5lZEJ5dGVzIG11c3QgYmUgYSBub24tbmVnYXRpdmUgc2FmZSBpbnRlZ2VyIG9yIEluZmluaXR5XCIpO1xuICAgIH1cbiAgICB0aGlzLm1heEJ5dGVzID0gcmVzb2x2ZWQ7XG4gIH1cblxuICBhcHBlbmQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG4gICAgaWYgKHRoaXMubWF4Qnl0ZXMgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgdGhpcy52YWx1ZSArPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb21iaW5lZCA9IHRoaXMuZW5jb2Rlci5lbmNvZGUodGhpcy52YWx1ZSArIHRleHQpO1xuICAgIGlmIChjb21iaW5lZC5sZW5ndGggPD0gdGhpcy5tYXhCeXRlcykge1xuICAgICAgdGhpcy52YWx1ZSArPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc3RhcnQgPSBjb21iaW5lZC5sZW5ndGggLSB0aGlzLm1heEJ5dGVzO1xuICAgIHdoaWxlIChzdGFydCA8IGNvbWJpbmVkLmxlbmd0aCAmJiAoY29tYmluZWRbc3RhcnRdISAmIDB4YzApID09PSAweDgwKSBzdGFydCsrO1xuICAgIGNvbnN0IHJldGFpbmVkID0gY29tYmluZWQuc3ViYXJyYXkoc3RhcnQpO1xuICAgIHRoaXMuZHJvcHBlZEJ5dGVzICs9IGNvbWJpbmVkLmxlbmd0aCAtIHJldGFpbmVkLmxlbmd0aDtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5kZWNvZGVyLmRlY29kZShyZXRhaW5lZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVybWluYXRlV29ya2VyKHdvcmtlclBpZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICh3b3JrZXJQaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICB0cnkge1xuICAgIHByb2Nlc3Mua2lsbCh3b3JrZXJQaWQsIFwiU0lHS0lMTFwiKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gVGhlIGNvbW1hbmQgY2FuIGZpbmlzaCBiZXR3ZWVuIHRoZSBhYm9ydCBldmVudCBhbmQgdGhlIGtpbGwgcmVxdWVzdC5cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja291dFNlc3Npb24oXG4gIHBvb2w6IE1vbnR5UG9vbCxcbiAgb3B0aW9uczogQ2hlY2tvdXRPcHRpb25zLFxuICBzaWduYWw6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxNb250eVNlc3Npb24+IHtcbiAgY29uc3QgY2hlY2tvdXQgPSBwb29sLmNoZWNrb3V0KG9wdGlvbnMpO1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuIGNoZWNrb3V0O1xuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB2b2lkIGNoZWNrb3V0LnRoZW4oKHNlc3Npb24pID0+IHNlc3Npb24uY2xvc2UoKSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB0aHJvdyBhYm9ydFJlYXNvbihzaWduYWwpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPE1vbnR5U2Vzc2lvbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIHJlamVjdChhYm9ydFJlYXNvbihzaWduYWwpKTtcbiAgICAgIHZvaWQgY2hlY2tvdXQudGhlbigoc2Vzc2lvbikgPT4gc2Vzc2lvbi5jbG9zZSgpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIH07XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgY2hlY2tvdXQudGhlbihcbiAgICAgIChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgICByZXNvbHZlKHNlc3Npb24pO1xuICAgICAgfSxcbiAgICAgIChjYXVnaHQ6IHVua25vd24pID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICAgIHJlamVjdChjYXVnaHQpO1xuICAgICAgfSxcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWJvcnRSZWFzb24oc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICByZXR1cm4gc2lnbmFsPy5yZWFzb24gPz8gbmV3IERPTUV4Y2VwdGlvbihcIlRoZSBjb21tYW5kIHdhcyBhYm9ydGVkXCIsIFwiQWJvcnRFcnJvclwiKTtcbn1cblxuZnVuY3Rpb24gZmFpbGVkUmVzdWx0KFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBzdGFydGVkOiBudW1iZXIsXG4gIHN0ZGVycjogc3RyaW5nLFxuKTogQ29tbWFuZFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgY29tbWFuZCxcbiAgICBhcmdzLFxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGV4aXRDb2RlOiAxLFxuICAgIHN0ZG91dDogXCJcIixcbiAgICBzdGRlcnIsXG4gICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gIH07XG59XG5cbmlmIChpbXBvcnQubWV0YS5tYWluKSB7XG4gIGNvbnN0IHNhbmRib3ggPSBuZXcgTW9udHlTYW5kYm94KCk7XG4gIGF3YWl0IHNhbmRib3guc3RhcnQoKTtcbiAgY29uc29sZS5sb2coYXdhaXQgc2FuZGJveC5leGVjdXRlQ29tbWFuZChcInByaW50KCdIZWxsbywgd29ybGQhJylcIikpO1xuICBhd2FpdCBzYW5kYm94LnN0b3AoKTtcbn1cbiJdfQ==
@@ -7,16 +7,7 @@ import { readFile } from "node:fs/promises";
7
7
  import { object } from "@dbx-tools/shared-core";
8
8
  import { urlBuilder } from "@dbx-tools/shared-core/net";
9
9
  import { z } from "zod";
10
- const HTTP_METHODS = [
11
- "GET",
12
- "POST",
13
- "PUT",
14
- "PATCH",
15
- "DELETE",
16
- "OPTIONS",
17
- "HEAD",
18
- "TRACE",
19
- ];
10
+ const HTTP_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD", "TRACE"];
20
11
  const JsonObjectSchema = z
21
12
  .record(z.string(), z.unknown())
22
13
  .describe("A JSON object embedded in an OpenAPI document.");
@@ -141,7 +132,7 @@ function operationUrl(document, sourceUrl, path) {
141
132
  ? base.withPathAppend(path).toString()
142
133
  : `${server.replace(/\/$/, "")}/${path.replace(/^\//, "")}`;
143
134
  }
144
- return sourceUrl ? urlBuilder(sourceUrl)?.withPathReplace(path).toString() ?? path : path;
135
+ return sourceUrl ? (urlBuilder(sourceUrl)?.withPathReplace(path).toString() ?? path) : path;
145
136
  }
146
137
  function resolveReferences(document, value, active = new Set()) {
147
138
  if (Array.isArray(value))
@@ -181,4 +172,4 @@ if (import.meta.main) {
181
172
  throw new Error("Usage: bun openapi-tool.ts <openapi-url-or-file>");
182
173
  console.log(JSON.stringify(await openApiTools(source), null, 2));
183
174
  }
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS10b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZW5hcGktdG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxZQUFZLEdBQUc7SUFDbkIsS0FBSztJQUNMLE1BQU07SUFDTixLQUFLO0lBQ0wsT0FBTztJQUNQLFFBQVE7SUFDUixTQUFTO0lBQ1QsTUFBTTtJQUNOLE9BQU87Q0FDQyxDQUFDO0FBRVgsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDO0tBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQy9CLFFBQVEsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0FBRTlELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQztLQUM3QixNQUFNLENBQUM7SUFDTixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHNDQUFzQyxDQUFDO0NBQzFFLENBQUM7S0FDRCxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUV2QyxNQUFNLHdCQUF3QixHQUFHLENBQUM7S0FDL0IsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLENBQUM7U0FDUCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLHNCQUFzQixDQUFDO1NBQzFDLFFBQVEsQ0FBQyw0Q0FBNEMsQ0FBQztDQUMxRCxDQUFDO0tBQ0QsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFeEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDO0tBQzVCLE1BQU0s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QUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsTUFBTTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUNqRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkFQSSBvcGVyYXRpb24gbG9hZGluZyBhbmQgSlNPTiBTY2hlbWEgZXh0cmFjdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB1cmxCdWlsZGVyLCB0eXBlIFVybEJ1aWxkZXIgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9uZXRcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IEhUVFBfTUVUSE9EUyA9IFtcbiAgXCJHRVRcIixcbiAgXCJQT1NUXCIsXG4gIFwiUFVUXCIsXG4gIFwiUEFUQ0hcIixcbiAgXCJERUxFVEVcIixcbiAgXCJPUFRJT05TXCIsXG4gIFwiSEVBRFwiLFxuICBcIlRSQUNFXCIsXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBKc29uT2JqZWN0U2NoZW1hID0gelxuICAucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKVxuICAuZGVzY3JpYmUoXCJBIEpTT04gb2JqZWN0IGVtYmVkZGVkIGluIGFuIE9wZW5BUEkgZG9jdW1lbnQuXCIpO1xuXG5jb25zdCBPcGVuQXBpTWVkaWFUeXBlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBzY2hlbWE6IEpzb25PYmplY3RTY2hlbWEuZGVzY3JpYmUoXCJUaGUgSlNPTiBTY2hlbWEgZm9yIHRoaXMgbWVkaWEgdHlwZS5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIk9uZSBPcGVuQVBJIG1lZGlhIHR5cGUuXCIpO1xuXG5jb25zdCBPcGVuQXBpUmVxdWVzdEJvZHlTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGNvbnRlbnQ6IHpcbiAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYSlcbiAgICAgIC5kZXNjcmliZShcIlJlcXVlc3QgbWVkaWEgdHlwZXMga2V5ZWQgYnkgY29udGVudCB0eXBlLlwiKSxcbiAgfSlcbiAgLmRlc2NyaWJlKFwiQW4gT3BlbkFQSSByZXF1ZXN0IGJvZHkuXCIpO1xuXG5jb25zdCBPcGVuQXBpUmVzcG9uc2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGNvbnRlbnQ6IHpcbiAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYSlcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJSZXNwb25zZSBtZWRpYSB0eXBlcyBrZXllZCBieSBjb250ZW50IHR5cGUuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJPbmUgT3BlbkFQSSByZXNwb25zZS5cIik7XG5cbmNvbnN0IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG9wZXJhdGlvbklkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIHN0YWJsZSBvcGVyYXRpb24gaWRlbnRpZmllci5cIiksXG4gICAgc3VtbWFyeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHNob3J0IG9wZXJhdGlvbiBzdW1tYXJ5LlwiKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGZ1bGwgb3BlcmF0aW9uIGRlc2NyaXB0aW9uLlwiKSxcbiAgICByZXF1ZXN0Qm9keTogT3BlbkFwaVJlcXVlc3RCb2R5U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgICBcIlRoZSBvcHRpb25hbCBvcGVyYXRpb24gcmVxdWVzdCBib2R5LlwiLFxuICAgICksXG4gICAgcmVzcG9uc2VzOiB6XG4gICAgICAucmVjb3JkKHouc3RyaW5nKCksIE9wZW5BcGlSZXNwb25zZVNjaGVtYSlcbiAgICAgIC5kZXNjcmliZShcIk9wZXJhdGlvbiByZXNwb25zZXMga2V5ZWQgYnkgSFRUUCBzdGF0dXMuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJUaGUgT3BlbkFQSSBmaWVsZHMgcmVxdWlyZWQgdG8gZGVmaW5lIGEgdG9vbC5cIik7XG5cbmNvbnN0IE9wZW5BcGlQYXRoU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBnZXQ6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBwb3N0OiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgcHV0OiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgcGF0Y2g6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBkZWxldGU6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvcHRpb25zOiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgaGVhZDogT3BlbkFwaU9wZXJhdGlvblNjaGVtYS5vcHRpb25hbCgpLFxuICAgIHRyYWNlOiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5kZXNjcmliZShcIk9wZXJhdGlvbnMgYXZhaWxhYmxlIGF0IG9uZSBPcGVuQVBJIHBhdGguXCIpO1xuXG5jb25zdCBPcGVuQXBpRG9jdW1lbnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHBhdGhzOiB6XG4gICAgICAucmVjb3JkKHouc3RyaW5nKCksIE9wZW5BcGlQYXRoU2NoZW1hKVxuICAgICAgLnJlZmluZSgocGF0aHMpID0+IE9iamVjdC5rZXlzKHBhdGhzKS5sZW5ndGggPiAwLCBcIk9wZW5BUEkgcGF0aHMgbXVzdCBub3QgYmUgZW1wdHlcIilcbiAgICAgIC5kZXNjcmliZShcIk9wZW5BUEkgcGF0aCBpdGVtcyBrZXllZCBieSBVUkwgcGF0aC5cIiksXG4gICAgY29tcG9uZW50czogSnNvbk9iamVjdFNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmV1c2FibGUgT3BlbkFQSSBjb21wb25lbnRzLlwiKSxcbiAgICBzZXJ2ZXJzOiB6XG4gICAgICAuYXJyYXkoXG4gICAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgICB1cmw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTZXJ2ZXIgYmFzZSBVUkwuXCIpLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJPcGVuQVBJIHNlcnZlciBkZWZpbml0aW9ucy5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIkFuIE9wZW5BUEkgZG9jdW1lbnQgdXNlZCB0byBkZWZpbmUgSFRUUCB0b29scy5cIik7XG5cbnR5cGUgT3BlbkFwaURvY3VtZW50ID0gei5pbmZlcjx0eXBlb2YgT3BlbkFwaURvY3VtZW50U2NoZW1hPjtcbnR5cGUgT3BlbkFwaU9wZXJhdGlvbiA9IHouaW5mZXI8dHlwZW9mIE9wZW5BcGlPcGVyYXRpb25TY2hlbWE+O1xuXG4vKiogSFRUUCBtZXRob2Qgc3VwcG9ydGVkIGJ5IGFuIHtAbGluayBPcGVuQXBpVG9vbH0uICovXG5leHBvcnQgdHlwZSBPcGVuQXBpSHR0cE1ldGhvZCA9ICh0eXBlb2YgSFRUUF9NRVRIT0RTKVtudW1iZXJdO1xuXG4vKiogT25lIGV4ZWN1dGFibGUgSFRUUCBvcGVyYXRpb24gZGVyaXZlZCBmcm9tIGFuIE9wZW5BUEkgZG9jdW1lbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BcGlUb29sIHtcbiAgLyoqIFN0YWJsZSBvcGVyYXRpb24gaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIE1vZGVsLWZhY2luZyBvcGVyYXRpb24gZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBSZXNvbHZlZCBvcGVyYXRpb24gVVJMLCBvciB0aGUgT3BlbkFQSSBwYXRoIGZvciBhIGxvY2FsIGRvY3VtZW50IHdpdGhvdXQgYSBzZXJ2ZXIgVVJMLiAqL1xuICB1cmw6IHN0cmluZztcbiAgLyoqIEhUVFAgbWV0aG9kIHVzZWQgYnkgdGhlIG9wZXJhdGlvbi4gKi9cbiAgbWV0aG9kOiBPcGVuQXBpSHR0cE1ldGhvZDtcbiAgLyoqIEpTT04gU2NoZW1hIGRlc2NyaWJpbmcgb3BlcmF0aW9uIGlucHV0LiAqL1xuICBpbnB1dFNjaGVtYTogSlNPTlNjaGVtYTc7XG4gIC8qKiBKU09OIFNjaGVtYSBkZXNjcmliaW5nIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24gcmVzdWx0LiAqL1xuICBvdXRwdXRTY2hlbWE6IEpTT05TY2hlbWE3O1xufVxuXG4vKiogUmVxdWVzdCBvcHRpb25zIHVzZWQgd2hpbGUgbG9hZGluZyBhbiBPcGVuQVBJIGRvY3VtZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuQXBpVG9vbHNPcHRpb25zIHtcbiAgLyoqIENhbmNlbHMgYW4gSFRUUCByZXF1ZXN0IG9yIGZpbGUgcmVhZC4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBIZWFkZXJzIHNlbnQgd2hlbiBgc291cmNlYCBpcyBhbiBIVFRQKFMpIFVSTC4gKi9cbiAgaGVhZGVycz86IFJlcXVlc3RJbml0W1wiaGVhZGVyc1wiXTtcbn1cblxuLyoqIExvYWQgYW4gSFRUUChTKSBVUkwgb3IgbG9jYWwgZmlsZSBhbmQgcmV0dXJuIGl0cyBPcGVuQVBJIG9wZXJhdGlvbnMgYXMgdG9vbCBzY2hlbWFzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5BcGlUb29scyhcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE9wZW5BcGlUb29sc09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8T3BlbkFwaVRvb2xbXT4ge1xuICBjb25zdCBzb3VyY2VVcmwgPSBodHRwVXJsKHNvdXJjZSk7XG4gIGNvbnN0IGRvY3VtZW50ID0gT3BlbkFwaURvY3VtZW50U2NoZW1hLnBhcnNlKFxuICAgIHNvdXJjZVVybFxuICAgICAgPyBhd2FpdCBmZXRjaERvY3VtZW50KHNvdXJjZVVybCwgb3B0aW9ucylcbiAgICAgIDogYXdhaXQgcmVhZERvY3VtZW50KHNvdXJjZSwgb3B0aW9ucy5zaWduYWwpLFxuICApO1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZG9jdW1lbnQucGF0aHMpLmZsYXRNYXAoKFtwYXRoLCBpdGVtXSkgPT5cbiAgICBIVFRQX01FVEhPRFMuZmxhdE1hcCgobWV0aG9kKSA9PiB7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSBpdGVtW21ldGhvZC50b0xvd2VyQ2FzZSgpIGFzIExvd2VyY2FzZTxPcGVuQXBpSHR0cE1ldGhvZD5dO1xuICAgICAgcmV0dXJuIG9wZXJhdGlvbiA/IFtvcGVyYXRpb25Ub29sKGRvY3VtZW50LCBzb3VyY2VVcmwsIHBhdGgsIG1ldGhvZCwgb3BlcmF0aW9uKV0gOiBbXTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaHR0cFVybChzb3VyY2U6IHN0cmluZyk6IFVybEJ1aWxkZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHNvdXJjZS50cmltKCk7XG4gIGlmICghdmFsdWUuc3RhcnRzV2l0aChcImh0dHA6Ly9cIikgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdXJsID0gdXJsQnVpbGRlcih2YWx1ZSk7XG4gIHJldHVybiB1cmw/LnNjaGVtZSA9PT0gXCJodHRwXCIgfHwgdXJsPy5zY2hlbWUgPT09IFwiaHR0cHNcIiA/IHVybCA6IHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hEb2N1bWVudCh1cmw6IFVSTCwgb3B0aW9uczogT3BlbkFwaVRvb2xzT3B0aW9ucyk6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgIHNpZ25hbDogb3B0aW9ucy5zaWduYWwsXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzLFxuICB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgT3BlbkFQSSByZXF1ZXN0IGZhaWxlZCB3aXRoIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3VybH1gKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkRG9jdW1lbnQocGF0aDogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiwgc2lnbmFsIH0pKTtcbn1cblxuZnVuY3Rpb24gb3BlcmF0aW9uVG9vbChcbiAgZG9jdW1lbnQ6IE9wZW5BcGlEb2N1bWVudCxcbiAgc291cmNlVXJsOiBVUkwgfCB1bmRlZmluZWQsXG4gIHBhdGg6IHN0cmluZyxcbiAgbWV0aG9kOiBPcGVuQXBpSHR0cE1ldGhvZCxcbiAgb3BlcmF0aW9uOiBPcGVuQXBpT3BlcmF0aW9uLFxuKTogT3BlbkFwaVRvb2wge1xuICBjb25zdCByZXF1ZXN0U2NoZW1hID0ganNvblNjaGVtYShvcGVyYXRpb24ucmVxdWVzdEJvZHk/LmNvbnRlbnQpID8/IHsgdHlwZTogXCJvYmplY3RcIiB9O1xuICBjb25zdCByZXNwb25zZVNjaGVtYSA9IHN1Y2Nlc3NmdWxSZXNwb25zZVNjaGVtYShvcGVyYXRpb24pO1xuICByZXR1cm4ge1xuICAgIGlkOiBvcGVyYXRpb24ub3BlcmF0aW9uSWQsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBvcGVyYXRpb24uZGVzY3JpcHRpb24/LnRyaW0oKSB8fCBvcGVyYXRpb24uc3VtbWFyeT8udHJpbSgpIHx8IG9wZXJhdGlvbi5vcGVyYXRpb25JZCxcbiAgICB1cmw6IG9wZXJhdGlvblVybChkb2N1bWVudCwgc291cmNlVXJsLCBwYXRoKSxcbiAgICBtZXRob2QsXG4gICAgaW5wdXRTY2hlbWE6IHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCByZXF1ZXN0U2NoZW1hKSBhcyBKU09OU2NoZW1hNyxcbiAgICBvdXRwdXRTY2hlbWE6IHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCByZXNwb25zZVNjaGVtYSkgYXMgSlNPTlNjaGVtYTcsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN1Y2Nlc3NmdWxSZXNwb25zZVNjaGVtYShvcGVyYXRpb246IE9wZW5BcGlPcGVyYXRpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGZvciAoY29uc3QgW3N0YXR1cywgcmVzcG9uc2VdIG9mIE9iamVjdC5lbnRyaWVzKG9wZXJhdGlvbi5yZXNwb25zZXMpKSB7XG4gICAgY29uc3Qgc2NoZW1hID0ganNvblNjaGVtYShyZXNwb25zZS5jb250ZW50KTtcbiAgICBpZiAoL14yKD86XFxkezJ9fFhYKSQvaS50ZXN0KHN0YXR1cykgJiYgc2NoZW1hKSByZXR1cm4gc2NoZW1hO1xuICB9XG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24ganNvblNjaGVtYShcbiAgY29udGVudDogUmVjb3JkPHN0cmluZywgei5pbmZlcjx0eXBlb2YgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYT4+IHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBjb25zdCBtZWRpYVR5cGUgPSBPYmplY3QuZW50cmllcyhjb250ZW50ID8/IHt9KS5maW5kKChbdHlwZV0pID0+XG4gICAgL15hcHBsaWNhdGlvblxcLyg/OlteKztdK1xcKyk/anNvbig/Ojt8JCkvaS50ZXN0KHR5cGUpLFxuICApO1xuICByZXR1cm4gbWVkaWFUeXBlPy5bMV0uc2NoZW1hO1xufVxuXG5mdW5jdGlvbiBvcGVyYXRpb25VcmwoZG9jdW1lbnQ6IE9wZW5BcGlEb2N1bWVudCwgc291cmNlVXJsOiBVUkwgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlcnZlciA9IGRvY3VtZW50LnNlcnZlcnM/LlswXT8udXJsO1xuICBpZiAoc2VydmVyKSB7XG4gICAgY29uc3QgYmFzZSA9IHNvdXJjZVVybCA/IHVybEJ1aWxkZXIobmV3IFVSTChzZXJ2ZXIsIHNvdXJjZVVybCkpIDogaHR0cFVybChzZXJ2ZXIpO1xuICAgIHJldHVybiBiYXNlXG4gICAgICA/IGJhc2Uud2l0aFBhdGhBcHBlbmQocGF0aCkudG9TdHJpbmcoKVxuICAgICAgOiBgJHtzZXJ2ZXIucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS8ke3BhdGgucmVwbGFjZSgvXlxcLy8sIFwiXCIpfWA7XG4gIH1cbiAgcmV0dXJuIHNvdXJjZVVybCA/IHVybEJ1aWxkZXIoc291cmNlVXJsKT8ud2l0aFBhdGhSZXBsYWNlKHBhdGgpLnRvU3RyaW5nKCkgPz8gcGF0aCA6IHBhdGg7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VzKFxuICBkb2N1bWVudDogT3BlbkFwaURvY3VtZW50LFxuICB2YWx1ZTogdW5rbm93bixcbiAgYWN0aXZlOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLm1hcCgoaXRlbSkgPT4gcmVzb2x2ZVJlZmVyZW5jZXMoZG9jdW1lbnQsIGl0ZW0sIGFjdGl2ZSkpO1xuICBpZiAoIW9iamVjdC5pc1JlY29yZCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgcmVmZXJlbmNlID0gdHlwZW9mIHZhbHVlLiRyZWYgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS4kcmVmIDogdW5kZWZpbmVkO1xuICBpZiAocmVmZXJlbmNlKSB7XG4gICAgaWYgKGFjdGl2ZS5oYXMocmVmZXJlbmNlKSkgdGhyb3cgbmV3IEVycm9yKGBDeWNsaWMgT3BlbkFQSSByZWZlcmVuY2U6ICR7cmVmZXJlbmNlfWApO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZmVyZW5jZVRhcmdldChkb2N1bWVudCwgcmVmZXJlbmNlKTtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFNldChhY3RpdmUpLmFkZChyZWZlcmVuY2UpO1xuICAgIGNvbnN0IHsgJHJlZjogX2lnbm9yZWQsIC4uLnNpYmxpbmdzIH0gPSB2YWx1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCB0YXJnZXQsIG5leHQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSxcbiAgICAgIC4uLihyZXNvbHZlUmVmZXJlbmNlcyhkb2N1bWVudCwgc2libGluZ3MsIG5leHQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2tleSwgY2hpbGRdKSA9PiBba2V5LCByZXNvbHZlUmVmZXJlbmNlcyhkb2N1bWVudCwgY2hpbGQsIGFjdGl2ZSldKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVmZXJlbmNlVGFyZ2V0KGRvY3VtZW50OiBPcGVuQXBpRG9jdW1lbnQsIHJlZmVyZW5jZTogc3RyaW5nKTogdW5rbm93biB7XG4gIGlmICghcmVmZXJlbmNlLnN0YXJ0c1dpdGgoXCIjL1wiKSkgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBPcGVuQVBJIHJlZmVyZW5jZTogJHtyZWZlcmVuY2V9YCk7XG4gIGxldCBjdXJyZW50OiB1bmtub3duID0gZG9jdW1lbnQ7XG4gIGZvciAoY29uc3QgcmF3U2VnbWVudCBvZiByZWZlcmVuY2Uuc2xpY2UoMikuc3BsaXQoXCIvXCIpKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IHJhd1NlZ21lbnQucmVwbGFjZUFsbChcIn4xXCIsIFwiL1wiKS5yZXBsYWNlQWxsKFwifjBcIiwgXCJ+XCIpO1xuICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKGN1cnJlbnQpIHx8ICEoc2VnbWVudCBpbiBjdXJyZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlc29sdmVkIE9wZW5BUEkgcmVmZXJlbmNlOiAke3JlZmVyZW5jZX1gKTtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnRbc2VnbWVudF07XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmlmIChpbXBvcnQubWV0YS5tYWluKSB7XG4gIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3MuYXJndlsyXTtcbiAgaWYgKCFzb3VyY2UpIHRocm93IG5ldyBFcnJvcihcIlVzYWdlOiBidW4gb3BlbmFwaS10b29sLnRzIDxvcGVuYXBpLXVybC1vci1maWxlPlwiKTtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYXdhaXQgb3BlbkFwaVRvb2xzKHNvdXJjZSksIG51bGwsIDIpKTtcbn1cbiJdfQ==
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS10b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZW5hcGktdG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFFcEcsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDO0tBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQy9CLFFBQVEsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0FBRTlELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQztLQUM3QixNQUFNLENBQUM7SUFDTixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHNDQUFzQyxDQUFDO0NBQzFFLENBQUM7S0FDRCxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUV2QyxNQUFNLHdCQUF3QixHQUFHLENBQUM7S0FDL0IsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLENBQUM7U0FDUCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLHNCQUFzQixDQUFDO1NBQzFDLFFBQVEsQ0FBQyw0Q0FBNEMsQ0FBQztDQUMxRCxDQUFDO0tBQ0QsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFeEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDO0tBQzVCLE1BQU0s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QUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE1BQU07UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDakYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wZW5BUEkgb3BlcmF0aW9uIGxvYWRpbmcgYW5kIEpTT04gU2NoZW1hIGV4dHJhY3Rpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgdXJsQnVpbGRlciwgdHlwZSBVcmxCdWlsZGVyIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmUvbmV0XCI7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE3IH0gZnJvbSBcImpzb24tc2NoZW1hXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5jb25zdCBIVFRQX01FVEhPRFMgPSBbXCJHRVRcIiwgXCJQT1NUXCIsIFwiUFVUXCIsIFwiUEFUQ0hcIiwgXCJERUxFVEVcIiwgXCJPUFRJT05TXCIsIFwiSEVBRFwiLCBcIlRSQUNFXCJdIGFzIGNvbnN0O1xuXG5jb25zdCBKc29uT2JqZWN0U2NoZW1hID0gelxuICAucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKVxuICAuZGVzY3JpYmUoXCJBIEpTT04gb2JqZWN0IGVtYmVkZGVkIGluIGFuIE9wZW5BUEkgZG9jdW1lbnQuXCIpO1xuXG5jb25zdCBPcGVuQXBpTWVkaWFUeXBlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBzY2hlbWE6IEpzb25PYmplY3RTY2hlbWEuZGVzY3JpYmUoXCJUaGUgSlNPTiBTY2hlbWEgZm9yIHRoaXMgbWVkaWEgdHlwZS5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIk9uZSBPcGVuQVBJIG1lZGlhIHR5cGUuXCIpO1xuXG5jb25zdCBPcGVuQXBpUmVxdWVzdEJvZHlTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGNvbnRlbnQ6IHpcbiAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYSlcbiAgICAgIC5kZXNjcmliZShcIlJlcXVlc3QgbWVkaWEgdHlwZXMga2V5ZWQgYnkgY29udGVudCB0eXBlLlwiKSxcbiAgfSlcbiAgLmRlc2NyaWJlKFwiQW4gT3BlbkFQSSByZXF1ZXN0IGJvZHkuXCIpO1xuXG5jb25zdCBPcGVuQXBpUmVzcG9uc2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGNvbnRlbnQ6IHpcbiAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYSlcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJSZXNwb25zZSBtZWRpYSB0eXBlcyBrZXllZCBieSBjb250ZW50IHR5cGUuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJPbmUgT3BlbkFQSSByZXNwb25zZS5cIik7XG5cbmNvbnN0IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG9wZXJhdGlvbklkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIHN0YWJsZSBvcGVyYXRpb24gaWRlbnRpZmllci5cIiksXG4gICAgc3VtbWFyeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHNob3J0IG9wZXJhdGlvbiBzdW1tYXJ5LlwiKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGZ1bGwgb3BlcmF0aW9uIGRlc2NyaXB0aW9uLlwiKSxcbiAgICByZXF1ZXN0Qm9keTogT3BlbkFwaVJlcXVlc3RCb2R5U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgICBcIlRoZSBvcHRpb25hbCBvcGVyYXRpb24gcmVxdWVzdCBib2R5LlwiLFxuICAgICksXG4gICAgcmVzcG9uc2VzOiB6XG4gICAgICAucmVjb3JkKHouc3RyaW5nKCksIE9wZW5BcGlSZXNwb25zZVNjaGVtYSlcbiAgICAgIC5kZXNjcmliZShcIk9wZXJhdGlvbiByZXNwb25zZXMga2V5ZWQgYnkgSFRUUCBzdGF0dXMuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJUaGUgT3BlbkFQSSBmaWVsZHMgcmVxdWlyZWQgdG8gZGVmaW5lIGEgdG9vbC5cIik7XG5cbmNvbnN0IE9wZW5BcGlQYXRoU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBnZXQ6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBwb3N0OiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgcHV0OiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgcGF0Y2g6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBkZWxldGU6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvcHRpb25zOiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgaGVhZDogT3BlbkFwaU9wZXJhdGlvblNjaGVtYS5vcHRpb25hbCgpLFxuICAgIHRyYWNlOiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5kZXNjcmliZShcIk9wZXJhdGlvbnMgYXZhaWxhYmxlIGF0IG9uZSBPcGVuQVBJIHBhdGguXCIpO1xuXG5jb25zdCBPcGVuQXBpRG9jdW1lbnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHBhdGhzOiB6XG4gICAgICAucmVjb3JkKHouc3RyaW5nKCksIE9wZW5BcGlQYXRoU2NoZW1hKVxuICAgICAgLnJlZmluZSgocGF0aHMpID0+IE9iamVjdC5rZXlzKHBhdGhzKS5sZW5ndGggPiAwLCBcIk9wZW5BUEkgcGF0aHMgbXVzdCBub3QgYmUgZW1wdHlcIilcbiAgICAgIC5kZXNjcmliZShcIk9wZW5BUEkgcGF0aCBpdGVtcyBrZXllZCBieSBVUkwgcGF0aC5cIiksXG4gICAgY29tcG9uZW50czogSnNvbk9iamVjdFNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmV1c2FibGUgT3BlbkFQSSBjb21wb25lbnRzLlwiKSxcbiAgICBzZXJ2ZXJzOiB6XG4gICAgICAuYXJyYXkoXG4gICAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgICB1cmw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTZXJ2ZXIgYmFzZSBVUkwuXCIpLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJPcGVuQVBJIHNlcnZlciBkZWZpbml0aW9ucy5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIkFuIE9wZW5BUEkgZG9jdW1lbnQgdXNlZCB0byBkZWZpbmUgSFRUUCB0b29scy5cIik7XG5cbnR5cGUgT3BlbkFwaURvY3VtZW50ID0gei5pbmZlcjx0eXBlb2YgT3BlbkFwaURvY3VtZW50U2NoZW1hPjtcbnR5cGUgT3BlbkFwaU9wZXJhdGlvbiA9IHouaW5mZXI8dHlwZW9mIE9wZW5BcGlPcGVyYXRpb25TY2hlbWE+O1xuXG4vKiogSFRUUCBtZXRob2Qgc3VwcG9ydGVkIGJ5IGFuIHtAbGluayBPcGVuQXBpVG9vbH0uICovXG5leHBvcnQgdHlwZSBPcGVuQXBpSHR0cE1ldGhvZCA9ICh0eXBlb2YgSFRUUF9NRVRIT0RTKVtudW1iZXJdO1xuXG4vKiogT25lIGV4ZWN1dGFibGUgSFRUUCBvcGVyYXRpb24gZGVyaXZlZCBmcm9tIGFuIE9wZW5BUEkgZG9jdW1lbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BcGlUb29sIHtcbiAgLyoqIFN0YWJsZSBvcGVyYXRpb24gaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIE1vZGVsLWZhY2luZyBvcGVyYXRpb24gZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBSZXNvbHZlZCBvcGVyYXRpb24gVVJMLCBvciB0aGUgT3BlbkFQSSBwYXRoIGZvciBhIGxvY2FsIGRvY3VtZW50IHdpdGhvdXQgYSBzZXJ2ZXIgVVJMLiAqL1xuICB1cmw6IHN0cmluZztcbiAgLyoqIEhUVFAgbWV0aG9kIHVzZWQgYnkgdGhlIG9wZXJhdGlvbi4gKi9cbiAgbWV0aG9kOiBPcGVuQXBpSHR0cE1ldGhvZDtcbiAgLyoqIEpTT04gU2NoZW1hIGRlc2NyaWJpbmcgb3BlcmF0aW9uIGlucHV0LiAqL1xuICBpbnB1dFNjaGVtYTogSlNPTlNjaGVtYTc7XG4gIC8qKiBKU09OIFNjaGVtYSBkZXNjcmliaW5nIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24gcmVzdWx0LiAqL1xuICBvdXRwdXRTY2hlbWE6IEpTT05TY2hlbWE3O1xufVxuXG4vKiogUmVxdWVzdCBvcHRpb25zIHVzZWQgd2hpbGUgbG9hZGluZyBhbiBPcGVuQVBJIGRvY3VtZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuQXBpVG9vbHNPcHRpb25zIHtcbiAgLyoqIENhbmNlbHMgYW4gSFRUUCByZXF1ZXN0IG9yIGZpbGUgcmVhZC4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBIZWFkZXJzIHNlbnQgd2hlbiBgc291cmNlYCBpcyBhbiBIVFRQKFMpIFVSTC4gKi9cbiAgaGVhZGVycz86IFJlcXVlc3RJbml0W1wiaGVhZGVyc1wiXTtcbn1cblxuLyoqIExvYWQgYW4gSFRUUChTKSBVUkwgb3IgbG9jYWwgZmlsZSBhbmQgcmV0dXJuIGl0cyBPcGVuQVBJIG9wZXJhdGlvbnMgYXMgdG9vbCBzY2hlbWFzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5BcGlUb29scyhcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE9wZW5BcGlUb29sc09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8T3BlbkFwaVRvb2xbXT4ge1xuICBjb25zdCBzb3VyY2VVcmwgPSBodHRwVXJsKHNvdXJjZSk7XG4gIGNvbnN0IGRvY3VtZW50ID0gT3BlbkFwaURvY3VtZW50U2NoZW1hLnBhcnNlKFxuICAgIHNvdXJjZVVybFxuICAgICAgPyBhd2FpdCBmZXRjaERvY3VtZW50KHNvdXJjZVVybCwgb3B0aW9ucylcbiAgICAgIDogYXdhaXQgcmVhZERvY3VtZW50KHNvdXJjZSwgb3B0aW9ucy5zaWduYWwpLFxuICApO1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZG9jdW1lbnQucGF0aHMpLmZsYXRNYXAoKFtwYXRoLCBpdGVtXSkgPT5cbiAgICBIVFRQX01FVEhPRFMuZmxhdE1hcCgobWV0aG9kKSA9PiB7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSBpdGVtW21ldGhvZC50b0xvd2VyQ2FzZSgpIGFzIExvd2VyY2FzZTxPcGVuQXBpSHR0cE1ldGhvZD5dO1xuICAgICAgcmV0dXJuIG9wZXJhdGlvbiA/IFtvcGVyYXRpb25Ub29sKGRvY3VtZW50LCBzb3VyY2VVcmwsIHBhdGgsIG1ldGhvZCwgb3BlcmF0aW9uKV0gOiBbXTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaHR0cFVybChzb3VyY2U6IHN0cmluZyk6IFVybEJ1aWxkZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHNvdXJjZS50cmltKCk7XG4gIGlmICghdmFsdWUuc3RhcnRzV2l0aChcImh0dHA6Ly9cIikgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdXJsID0gdXJsQnVpbGRlcih2YWx1ZSk7XG4gIHJldHVybiB1cmw/LnNjaGVtZSA9PT0gXCJodHRwXCIgfHwgdXJsPy5zY2hlbWUgPT09IFwiaHR0cHNcIiA/IHVybCA6IHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hEb2N1bWVudCh1cmw6IFVSTCwgb3B0aW9uczogT3BlbkFwaVRvb2xzT3B0aW9ucyk6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgIHNpZ25hbDogb3B0aW9ucy5zaWduYWwsXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzLFxuICB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgT3BlbkFQSSByZXF1ZXN0IGZhaWxlZCB3aXRoIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3VybH1gKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkRG9jdW1lbnQocGF0aDogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiwgc2lnbmFsIH0pKTtcbn1cblxuZnVuY3Rpb24gb3BlcmF0aW9uVG9vbChcbiAgZG9jdW1lbnQ6IE9wZW5BcGlEb2N1bWVudCxcbiAgc291cmNlVXJsOiBVUkwgfCB1bmRlZmluZWQsXG4gIHBhdGg6IHN0cmluZyxcbiAgbWV0aG9kOiBPcGVuQXBpSHR0cE1ldGhvZCxcbiAgb3BlcmF0aW9uOiBPcGVuQXBpT3BlcmF0aW9uLFxuKTogT3BlbkFwaVRvb2wge1xuICBjb25zdCByZXF1ZXN0U2NoZW1hID0ganNvblNjaGVtYShvcGVyYXRpb24ucmVxdWVzdEJvZHk/LmNvbnRlbnQpID8/IHsgdHlwZTogXCJvYmplY3RcIiB9O1xuICBjb25zdCByZXNwb25zZVNjaGVtYSA9IHN1Y2Nlc3NmdWxSZXNwb25zZVNjaGVtYShvcGVyYXRpb24pO1xuICByZXR1cm4ge1xuICAgIGlkOiBvcGVyYXRpb24ub3BlcmF0aW9uSWQsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBvcGVyYXRpb24uZGVzY3JpcHRpb24/LnRyaW0oKSB8fCBvcGVyYXRpb24uc3VtbWFyeT8udHJpbSgpIHx8IG9wZXJhdGlvbi5vcGVyYXRpb25JZCxcbiAgICB1cmw6IG9wZXJhdGlvblVybChkb2N1bWVudCwgc291cmNlVXJsLCBwYXRoKSxcbiAgICBtZXRob2QsXG4gICAgaW5wdXRTY2hlbWE6IHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCByZXF1ZXN0U2NoZW1hKSBhcyBKU09OU2NoZW1hNyxcbiAgICBvdXRwdXRTY2hlbWE6IHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCByZXNwb25zZVNjaGVtYSkgYXMgSlNPTlNjaGVtYTcsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN1Y2Nlc3NmdWxSZXNwb25zZVNjaGVtYShvcGVyYXRpb246IE9wZW5BcGlPcGVyYXRpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGZvciAoY29uc3QgW3N0YXR1cywgcmVzcG9uc2VdIG9mIE9iamVjdC5lbnRyaWVzKG9wZXJhdGlvbi5yZXNwb25zZXMpKSB7XG4gICAgY29uc3Qgc2NoZW1hID0ganNvblNjaGVtYShyZXNwb25zZS5jb250ZW50KTtcbiAgICBpZiAoL14yKD86XFxkezJ9fFhYKSQvaS50ZXN0KHN0YXR1cykgJiYgc2NoZW1hKSByZXR1cm4gc2NoZW1hO1xuICB9XG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24ganNvblNjaGVtYShcbiAgY29udGVudDogUmVjb3JkPHN0cmluZywgei5pbmZlcjx0eXBlb2YgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYT4+IHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBjb25zdCBtZWRpYVR5cGUgPSBPYmplY3QuZW50cmllcyhjb250ZW50ID8/IHt9KS5maW5kKChbdHlwZV0pID0+XG4gICAgL15hcHBsaWNhdGlvblxcLyg/OlteKztdK1xcKyk/anNvbig/Ojt8JCkvaS50ZXN0KHR5cGUpLFxuICApO1xuICByZXR1cm4gbWVkaWFUeXBlPy5bMV0uc2NoZW1hO1xufVxuXG5mdW5jdGlvbiBvcGVyYXRpb25VcmwoZG9jdW1lbnQ6IE9wZW5BcGlEb2N1bWVudCwgc291cmNlVXJsOiBVUkwgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlcnZlciA9IGRvY3VtZW50LnNlcnZlcnM/LlswXT8udXJsO1xuICBpZiAoc2VydmVyKSB7XG4gICAgY29uc3QgYmFzZSA9IHNvdXJjZVVybCA/IHVybEJ1aWxkZXIobmV3IFVSTChzZXJ2ZXIsIHNvdXJjZVVybCkpIDogaHR0cFVybChzZXJ2ZXIpO1xuICAgIHJldHVybiBiYXNlXG4gICAgICA/IGJhc2Uud2l0aFBhdGhBcHBlbmQocGF0aCkudG9TdHJpbmcoKVxuICAgICAgOiBgJHtzZXJ2ZXIucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS8ke3BhdGgucmVwbGFjZSgvXlxcLy8sIFwiXCIpfWA7XG4gIH1cbiAgcmV0dXJuIHNvdXJjZVVybCA/ICh1cmxCdWlsZGVyKHNvdXJjZVVybCk/LndpdGhQYXRoUmVwbGFjZShwYXRoKS50b1N0cmluZygpID8/IHBhdGgpIDogcGF0aDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVJlZmVyZW5jZXMoXG4gIGRvY3VtZW50OiBPcGVuQXBpRG9jdW1lbnQsXG4gIHZhbHVlOiB1bmtub3duLFxuICBhY3RpdmU6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KCksXG4pOiB1bmtub3duIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiByZXNvbHZlUmVmZXJlbmNlcyhkb2N1bWVudCwgaXRlbSwgYWN0aXZlKSk7XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICBjb25zdCByZWZlcmVuY2UgPSB0eXBlb2YgdmFsdWUuJHJlZiA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLiRyZWYgOiB1bmRlZmluZWQ7XG4gIGlmIChyZWZlcmVuY2UpIHtcbiAgICBpZiAoYWN0aXZlLmhhcyhyZWZlcmVuY2UpKSB0aHJvdyBuZXcgRXJyb3IoYEN5Y2xpYyBPcGVuQVBJIHJlZmVyZW5jZTogJHtyZWZlcmVuY2V9YCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmZXJlbmNlVGFyZ2V0KGRvY3VtZW50LCByZWZlcmVuY2UpO1xuICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KGFjdGl2ZSkuYWRkKHJlZmVyZW5jZSk7XG4gICAgY29uc3QgeyAkcmVmOiBfaWdub3JlZCwgLi4uc2libGluZ3MgfSA9IHZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICAuLi4ocmVzb2x2ZVJlZmVyZW5jZXMoZG9jdW1lbnQsIHRhcmdldCwgbmV4dCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLFxuICAgICAgLi4uKHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCBzaWJsaW5ncywgbmV4dCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChba2V5LCBjaGlsZF0pID0+IFtrZXksIHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCBjaGlsZCwgYWN0aXZlKV0pLFxuICApO1xufVxuXG5mdW5jdGlvbiByZWZlcmVuY2VUYXJnZXQoZG9jdW1lbnQ6IE9wZW5BcGlEb2N1bWVudCwgcmVmZXJlbmNlOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgaWYgKCFyZWZlcmVuY2Uuc3RhcnRzV2l0aChcIiMvXCIpKSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIE9wZW5BUEkgcmVmZXJlbmNlOiAke3JlZmVyZW5jZX1gKTtcbiAgbGV0IGN1cnJlbnQ6IHVua25vd24gPSBkb2N1bWVudDtcbiAgZm9yIChjb25zdCByYXdTZWdtZW50IG9mIHJlZmVyZW5jZS5zbGljZSgyKS5zcGxpdChcIi9cIikpIHtcbiAgICBjb25zdCBzZWdtZW50ID0gcmF3U2VnbWVudC5yZXBsYWNlQWxsKFwifjFcIiwgXCIvXCIpLnJlcGxhY2VBbGwoXCJ+MFwiLCBcIn5cIik7XG4gICAgaWYgKCFvYmplY3QuaXNSZWNvcmQoY3VycmVudCkgfHwgIShzZWdtZW50IGluIGN1cnJlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVzb2x2ZWQgT3BlbkFQSSByZWZlcmVuY2U6ICR7cmVmZXJlbmNlfWApO1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudFtzZWdtZW50XTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cblxuaWYgKGltcG9ydC5tZXRhLm1haW4pIHtcbiAgY29uc3Qgc291cmNlID0gcHJvY2Vzcy5hcmd2WzJdO1xuICBpZiAoIXNvdXJjZSkgdGhyb3cgbmV3IEVycm9yKFwiVXNhZ2U6IGJ1biBvcGVuYXBpLXRvb2wudHMgPG9wZW5hcGktdXJsLW9yLWZpbGU+XCIpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhd2FpdCBvcGVuQXBpVG9vbHMoc291cmNlKSwgbnVsbCwgMikpO1xufVxuIl19
package/lib/src/server.js CHANGED
@@ -421,4 +421,4 @@ export function attachStaleResumeRecovery(app) {
421
421
  res.end();
422
422
  });
423
423
  }
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLGNBQWMsR0FDZixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLElBQUksbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHM0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixlQUFlLEVBQ2Ysb0JBQW9CLEdBR3JCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixvQkFBb0IsR0FDckIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUU7Ozs7O0dBS0c7QUFDSCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxNQUFNLDRCQUE0QixHQUFHO0lBQ25DLHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQix5QkFBeUI7SUFDekIseUJBQXlCO0NBQ2pCLENBQUM7QUFFWCxvRkFBb0Y7QUFDcEYsTUFBTSxVQUFVLDBCQUEwQixDQUFDLGNBQThCO0lBQ3ZFLEtBQUssTUFBTSxHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztRQUMvQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7QUFDSCxDQUFDO0FBaUJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxjQUE4QixFQUM5QixhQUFpQyxFQUFFO0lBRW5DLElBQUksQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFBRSxPQUFPO0lBQzlGLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQyxNQUFNLGFBQWEsR0FBRyxlQUFlLElBQUksZ0JBQWdCLENBQUM7SUFDMUQsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUM5RSxNQUFNLElBQUksR0FBUztRQUNqQixFQUFFLEVBQUUsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN6RCxnQkFBZ0I7S0FDakIsQ0FBQztJQUNGLGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELCtEQUErRDtJQUMvRCxnRUFBZ0U7SUFDaEUsMkRBQTJEO0lBQzNELCtEQUErRDtJQUMvRCw0RUFBNEU7SUFDNUUscUVBQXFFO0lBQ3JFLElBQUksUUFBNEIsQ0FBQztJQUNqQyxJQUFJLEtBQUssR0FBdUIsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNqRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDckMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7SUFDOUMsQ0FBQztTQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssYUFBYSxFQUFFLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ25FLFFBQVEsR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDO1FBQ2pDLEtBQUssR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN4RixFQUFFLEtBQWUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixjQUFjLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxVQUEwRSxFQUFFO0lBRTVFLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDNUMsTUFBTSx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxJQUFJLE9BQU8sQ0FBQyxRQUFRO1FBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakYsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSxJQUFJLE9BQU8sQ0FBQyxVQUFVO1FBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkYsY0FBYyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxtQkFBbUI7SUFTekM7SUFSRixHQUFHLENBQWE7SUFDeEI7OztPQUdHO0lBQ0ssZUFBZSxDQUFVO0lBRWpDLFlBQ1UsTUFBMEIsRUFDbEMsR0FBRyxJQUF1RDtRQUUxRCxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUhQLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBSWxDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRVEsc0JBQXNCO1FBQzdCLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3BDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBaUMsQ0FBQztZQUNwRSwwQkFBMEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMzQyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLCtCQUErQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRXhELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2dCQUNsQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7Z0JBQ2QsU0FBUyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7Z0JBQ3BELFFBQVEsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO2dCQUNsRCxVQUFVLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDdEQsUUFBUSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7Z0JBQ2xELFNBQVMsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO2dCQUNwRCxhQUFhLEVBQUUsY0FBYyxDQUFDLEdBQUc7Z0JBQy9CLHNEQUFzRDtnQkFDdEQseURBQXlEO2dCQUN6RCx3QkFBd0IsQ0FDekI7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLEVBQUUsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxHQUFvQixFQUFFLGNBQThCO1FBQ3BGLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsMEVBQTBFO1FBQzFFLE1BQU0sdUJBQXVCLENBQUMsY0FBYyxFQUFFO1lBQzVDLE1BQU0sRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDO1lBQzFCLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQXFCLENBQUM7UUFDckUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULHFCQUFxQixDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUc7WUFDaEIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztZQUN6QyxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO1lBQ3hDLGNBQWMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7U0FDM0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQW1CLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RixxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILGdDQUFnQyxDQUM5QixHQUFvQixFQUNwQixHQUFxQixFQUNyQixjQUE4QjtRQUU5QixJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7WUFBRSxPQUFPO1FBQ3RELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDM0UsTUFBTSxTQUFTLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoRCxjQUFjLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSCw2QkFBNkIsQ0FBQyxHQUFvQixFQUFFLGNBQThCO1FBQ2hGLE1BQU0sTUFBTSxHQUFHO1lBQ2IsR0FBRyxNQUFNO2lCQUNOLFFBQVEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztpQkFDM0YsUUFBUSxFQUFFO1NBQ2QsQ0FBQztRQUNGLGNBQWMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILHNCQUFzQixDQUFDLEdBQXFCO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLEdBQUcsQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUNyRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1lBQUUsT0FBTztRQUMzRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLGdCQUFnQjtZQUFFLE9BQU87UUFDckQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCwrQkFBK0IsQ0FDN0IsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsY0FBOEI7UUFFOUIsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO1lBQUUsT0FBTztRQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDcEQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLHVCQUF1QixDQUNwRCxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNsQyxRQUFRLEVBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFLLEVBQ2pCLFdBQVcsQ0FDWixDQUFDO1FBQ0YsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFO2dCQUNoQyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsS0FBSztnQkFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07Z0JBQ2xCLElBQUksRUFBRSxHQUFHO2FBQ1YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0sscUJBQXFCLENBQUMsR0FBb0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQ0wsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUNqRixXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQy9FLENBQUM7SUFDSixDQUFDO0lBRUQsb0NBQW9DLENBQUMsR0FBb0IsRUFBRSxjQUE4QjtRQUN2RiwyREFBMkQ7UUFDM0QscURBQXFEO1FBQ3JELDBEQUEwRDtRQUMxRCwwQ0FBMEM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDO2dCQUNwQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQXdEO2dCQUNyRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQWdDO2dCQUMzQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxJQUFJLFFBQVE7Z0JBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBVUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLGVBQWUsR0FDbkIsb0pBQW9KLENBQUM7QUFFdkosMEVBQTBFO0FBQzFFLE1BQU0sY0FBYyxHQUFHLHNCQUFzQixDQUFDO0FBQzlDLGtEQUFrRDtBQUNsRCxNQUFNLG9CQUFvQixHQUFHLG9DQUFvQyxDQUFDO0FBQ2xFLDZFQUE2RTtBQUM3RSxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztBQUN0QywrRUFBK0U7QUFDL0UsTUFBTSxXQUFXLEdBQUcsaURBQWlELENBQUM7QUFDdEUsMENBQTBDO0FBQzFDLE1BQU0sc0JBQXNCLEdBQUcsNkJBQTZCLENBQUM7QUFFN0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsTUFBYyxFQUNkLElBQVksRUFDWixJQUEwQjtJQUUxQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNuRCwwRUFBMEU7SUFDMUUsMkRBQTJEO0lBQzNELElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzVFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwRCxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN6RCxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pGLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDckYsSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyx5QkFBeUI7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNqRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsR0FBb0I7SUFDN0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDMUIsTUFBTSxhQUFhLEdBQ2pCLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTztZQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDN0IsR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRO1lBQ3JCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxHQUFHLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxHQUFvQjtJQUM1RCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBYyxFQUFFLEdBQW9CLEVBQUUsR0FBcUIsRUFBRSxJQUEwQixFQUFFLEVBQUU7UUFDbEcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ1osT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO1lBQ3pDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtZQUNkLEtBQUssRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztTQUN0QyxDQUFDLENBQUM7UUFDSCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVixPQUFPO1FBQ1QsQ0FBQztRQUNELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztRQUNsRSxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeHByZXNzLWxheWVyIHBsdW1iaW5nIGZvciB0aGUgTWFzdHJhIHBsdWdpbjogYSBgTWFzdHJhU2VydmVyYCB0aGF0XG4gKiBzdGFtcHMgdGhlIHBlci1yZXF1ZXN0IGBSZXF1ZXN0Q29udGV4dGAgYW5kIGEgc2NvcGVkIG5hdGl2ZSBBUEkgZ2F0ZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGhhc2gsIGh0dHAsIGxvZywgb2JqZWN0LCBzdHJpbmdVdGlscywgdG9rZW4gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZmVlZGJhY2ssIHRocmVhZCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tYXN0cmFcIjtcbmltcG9ydCB7IGlzU3RhbGVNYXN0cmFSZXN1bWVFcnJvciB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tYXN0cmEvcmVzdW1lXCI7XG5pbXBvcnQge1xuICBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLFxuICBNQVNUUkFfVEhSRUFEX0lEX0tFWSxcbiAgUmVxdWVzdENvbnRleHQsXG59IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBNYXN0cmFTZXJ2ZXIgYXMgRXhwcmVzc01hc3RyYVNlcnZlciB9IGZyb20gXCJAbWFzdHJhL2V4cHJlc3NcIjtcbmltcG9ydCB7IHRyYWNlIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuXG5pbXBvcnQge1xuICBhdHRyaWJ1dGVkVXNlcklkLFxuICBNQVNUUkFfUkVRVUVTVF9JRF9LRVksXG4gIE1BU1RSQV9TQ09QRVNfS0VZLFxuICBNQVNUUkFfVVNFUl9FTUFJTF9LRVksXG4gIE1BU1RSQV9VU0VSX0tFWSxcbiAgTUFTVFJBX1VTRVJfTkFNRV9LRVksXG4gIHR5cGUgTWFzdHJhUGx1Z2luQ29uZmlnLFxuICB0eXBlIFVzZXIsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgcmVxdWVzdFVzZXJFbWFpbCwgcmVxdWVzdFVzZXJJZCB9IGZyb20gXCIuL2lkZW50aXR5LnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlRmVlZGJhY2tFbmFibGVkIH0gZnJvbSBcIi4vbWxmbG93LnRzXCI7XG5pbXBvcnQge1xuICBleHRyYWN0TW9kZWxPdmVycmlkZSxcbiAgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSxcbiAgTUFTVFJBX1JFU09MVkVEX01PREVMX0tFWSxcbiAgcmVzb2x2ZVNlcnZpbmdDb25maWcsXG59IGZyb20gXCIuL3NlcnZpbmcudHNcIjtcbmltcG9ydCB7IHJlY29yZEFjdGl2ZVRyYWNlQXV0aCwgcmVjb3JkQWN0aXZlVHJhY2VVc2VyIH0gZnJvbSBcIi4vdGVsZW1ldHJ5LnRzXCI7XG4vKipcbiAqIE9wZW5UZWxlbWV0cnkncyBzZW50aW5lbCBmb3IgXCJubyB2YWxpZCB0cmFjZVwiIC0gMzIgemVybyBoZXggY2hhcnMuXG4gKiBgdHJhY2UuZ2V0QWN0aXZlU3BhbigpYCByZXR1cm5zIGEgbm9uLXJlY29yZGluZyBzcGFuIHdpdGggdGhpcyBpZFxuICogd2hlbiBubyBTREsgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggbXVzdCBuZXZlciBiZSBzdXJmYWNlZCBhcyBhIHRyYWNlIHRvXG4gKiBhdHRhY2ggZmVlZGJhY2sgdG8uXG4gKi9cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvc2VydmVyXCIpO1xuY29uc3QgSU5WQUxJRF9UUkFDRV9JRCA9IFwiMFwiLnJlcGVhdCgzMik7XG5jb25zdCBUUlVTVEVEX1JFUVVFU1RfQ09OVEVYVF9LRVlTID0gW1xuICBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLFxuICBNQVNUUkFfVEhSRUFEX0lEX0tFWSxcbiAgTUFTVFJBX1VTRVJfS0VZLFxuICBNQVNUUkFfVVNFUl9OQU1FX0tFWSxcbiAgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLFxuICBNQVNUUkFfUkVRVUVTVF9JRF9LRVksXG4gIE1BU1RSQV9TQ09QRVNfS0VZLFxuICBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZLFxuICBNQVNUUkFfUkVTT0xWRURfTU9ERUxfS0VZLFxuXSBhcyBjb25zdDtcblxuLyoqIFJlbW92ZSBicm93c2VyLXN1cHBsaWVkIHZhbHVlcyBmb3IgZmllbGRzIG93bmVkIGJ5IHRydXN0ZWQgc2VydmVyIG1pZGRsZXdhcmUuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJUcnVzdGVkUmVxdWVzdENvbnRleHQocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0KTogdm9pZCB7XG4gIGZvciAoY29uc3Qga2V5IG9mIFRSVVNURURfUkVRVUVTVF9DT05URVhUX0tFWVMpIHtcbiAgICByZXF1ZXN0Q29udGV4dC5kZWxldGVSYXcoa2V5KTtcbiAgfVxufVxuXG4vKipcbiAqIFdobyBhIHR1cm4gaXMgQVRUUklCVVRFRCB0bywgaW5kZXBlbmRlbnQgb2Ygd2hpY2ggRGF0YWJyaWNrcyBjcmVkZW50aWFsIHJ1bnNcbiAqIGl0cyBjYWxscy4gU3VwcGxpZWQgYnkgdGhlIEhUVFAgbWlkZGxld2FyZSBmcm9tIHRoZSBmb3J3YXJkZWQgdXNlciBoZWFkZXJzIHNvXG4gKiB0aGF0IGluIGBzZXJ2aWNlLXByaW5jaXBhbGAgbW9kZSAtIHdoZXJlIGV2ZXJ5IHJlcXVlc3Qgc2hhcmVzIHRoZSBhcHAgU1Anc1xuICogY2xpZW50IC0gdGhlIG1lbW9yeSB0aHJlYWQsIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZSwgYW5kIHRyYWNlIG1ldGFkYXRhXG4gKiBzdGlsbCBrZXkgb2ZmIHRoZSByZWFsIGNhbGxlci4gSWdub3JlZCBpbiBhbiBPQk8gKHVzZXIpIGNvbnRleHQsIHdob3NlIG93blxuICogdXNlciBpZCAvIGVtYWlsIGFyZSBhdXRob3JpdGF0aXZlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZWRJZGVudGl0eSB7XG4gIC8qKiBGb3J3YXJkZWQgYHgtZm9yd2FyZGVkLXVzZXJgIGlkLCB1c2VkIHdoZW4gdGhlIGNsaWVudCBpcyB0aGUgc2VydmljZSBwcmluY2lwYWwuICovXG4gIHVzZXJJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIEZvcndhcmRlZCBgeC1mb3J3YXJkZWQtZW1haWxgLCB1c2VkIGZvciB0cmFjZSBtZXRhZGF0YSB1bmRlciB0aGUgc2VydmljZSBwcmluY2lwYWwuICovXG4gIGVtYWlsPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFN0YW1wIHRoZSBBcHBLaXQgdXNlciAocGx1cyB0aGUgcmVzb3VyY2UgaWQgYW5kIHRyYWNlIG1ldGFkYXRhKSBvbnRvXG4gKiBgcmVxdWVzdENvbnRleHRgLlxuICpcbiAqIFNwbGl0IG91dCBvZiB7QGxpbmsgTWFzdHJhU2VydmVyfSBiZWNhdXNlIHRoZSBIVFRQIG1pZGRsZXdhcmUgaXMgbm90IHRoZSBvbmx5XG4gKiBjYWxsZXIgdGhhdCBuZWVkcyBpdDogYW4gb3V0LW9mLWJhbmQgdHVybiAoYSBUZWFtcyBhY3Rpdml0eSBhcnJpdmluZyBvblxuICogYW5vdGhlciBwbHVnaW4ncyByb3V0ZSwgYSBzY2hlZHVsZWQgam9iKSBkcml2ZXMgYGFnZW50LmdlbmVyYXRlYCBkaXJlY3RseSwgYW5kXG4gKiB3aXRob3V0IHRoaXMgc3RhbXAgZXZlcnkgdXNlci1zY29wZWQgdG9vbCAtIGBhc2tfZ2VuaWVgIGFib3ZlIGFsbCAtIGZhaWxzIHdpdGhcbiAqIFwiaW52b2tlIHRoZSB0b29sIGZyb20gYW4gYWdlbnQgdHVybiBzZXJ2ZWQgYnkgdGhlIG1hc3RyYSBwbHVnaW5cIi4gVGhvc2VcbiAqIGNhbGxlcnMgYnVpbGQgYSBjb250ZXh0IHdpdGgge0BsaW5rIGNyZWF0ZVJlcXVlc3RDb250ZXh0fSBpbnN0ZWFkIG9mIGFcbiAqIHJlcXVlc3QuXG4gKlxuICogVGhlIERhdGFicmlja3MgY3JlZGVudGlhbCBhbHdheXMgY29tZXMgZnJvbSB0aGUgYW1iaWVudCBleGVjdXRpb24gY29udGV4dDtcbiAqIGBhdHRyaWJ1dGVkYCBvbmx5IGNoYW5nZXMgV0hPIHRoZSB0dXJuIGlzIGF0dHJpYnV0ZWQgdG8gd2hlbiB0aGF0IGNvbnRleHQgaXNcbiAqIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCAoc2VlIHtAbGluayBBdHRyaWJ1dGVkSWRlbnRpdHl9KS5cbiAqXG4gKiBJZGVtcG90ZW50OiByZXR1cm5zIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHVzZXIgYW5kIHJlc291cmNlIGlkIGFyZSBhbHJlYWR5XG4gKiBwcmVzZW50LCBzbyB0aGUgbWlkZGxld2FyZSBjYW4gY2FsbCBpdCBvdmVyIGEgY29udGV4dCBhbm90aGVyIGxheWVyIHN0YW1wZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFtcFJlcXVlc3RDb250ZXh0VXNlcihcbiAgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0LFxuICBhdHRyaWJ1dGVkOiBBdHRyaWJ1dGVkSWRlbnRpdHkgPSB7fSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoW01BU1RSQV9VU0VSX0tFWSwgTUFTVFJBX1JFU09VUkNFX0lEX0tFWV0uZXZlcnkoKGtleSkgPT4gcmVxdWVzdENvbnRleHQuZ2V0KGtleSkpKSByZXR1cm47XG4gIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSBnZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gIGNvbnN0IGlzVXNlckNvbnRleHQgPSBcImlzVXNlckNvbnRleHRcIiBpbiBleGVjdXRpb25Db250ZXh0O1xuICAvLyBUaGUgRGF0YWJyaWNrcyBDUkVERU5USUFMIGlzIGFsd2F5cyB0aGUgYW1iaWVudCBleGVjdXRpb24gY29udGV4dCdzIGNsaWVudFxuICAvLyAoT0JPIGluIGEgdXNlciBjb250ZXh0LCB0aGUgc2VydmljZSBwcmluY2lwYWwgb3RoZXJ3aXNlKS4gV0hPIHRoZSB0dXJuIGlzXG4gIC8vIGF0dHJpYnV0ZWQgdG8gY2FuIGRpZmZlcjogaW4gYHNlcnZpY2UtcHJpbmNpcGFsYCBtb2RlIGV2ZXJ5IHJlcXVlc3Qgc2hhcmVzXG4gIC8vIHRoZSBTUCBjbGllbnQsIGJ1dCB0aGUgZm9yd2FyZGVkIHVzZXIgaWQgbXVzdCBzdGlsbCBrZXkgdGhlIG1lbW9yeSB0aHJlYWRcbiAgLy8gYW5kIHRoZSBwZXItdXNlciBjYWNoZSBuYW1lc3BhY2Ugc28gdHdvIGNhbGxlcnMgZG9uJ3Qgc2hhcmUgYSBjb252ZXJzYXRpb24uXG4gIGNvbnN0IHVzZXI6IFVzZXIgPSB7XG4gICAgaWQ6IGF0dHJpYnV0ZWRVc2VySWQoZXhlY3V0aW9uQ29udGV4dCwgYXR0cmlidXRlZC51c2VySWQpLFxuICAgIGV4ZWN1dGlvbkNvbnRleHQsXG4gIH07XG4gIHJlcXVlc3RDb250ZXh0LnNldChNQVNUUkFfVVNFUl9LRVksIHVzZXIpO1xuICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1JFU09VUkNFX0lEX0tFWSwgdXNlci5pZCk7XG4gIC8vIEFwcEtpdCdzIGBVc2VyQ29udGV4dGAgc3VyZmFjZXMgZGlzcGxheSBuYW1lIC8gZW1haWwgb25seSBvblxuICAvLyBPQk8gcmVxdWVzdHMuIFNlcnZpY2UtY29udGV4dCBjYWxscyAoYmFja2dyb3VuZCB0YXNrcywgc2VydmVyXG4gIC8vIHN0YXJ0LXVwKSBsZWF2ZSB0aGVzZSB1bmRlZmluZWQgYW5kIHdlIHNraXAgdGhlIHN0YW1wIHNvXG4gIC8vIGRvd25zdHJlYW0gdHJhY2UgbWV0YWRhdGEgc3RheXMgYWJzZW50IHJhdGhlciB0aGFuIGVtcHR5LiBJblxuICAvLyBgc2VydmljZS1wcmluY2lwYWxgIG1vZGUgdGhlIGZvcndhcmRlZCBlbWFpbCBzdGlsbCBpZGVudGlmaWVzIHRoZSBjYWxsZXIsXG4gIC8vIHNvIGl0IGlzIHVzZWQgZm9yIHRyYWNlIG1ldGFkYXRhIGV2ZW4gdGhvdWdoIHRoZSBjbGllbnQgaXMgdGhlIFNQLlxuICBsZXQgdXNlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhdHRyaWJ1dGVkLmVtYWlsO1xuICBpZiAoaXNVc2VyQ29udGV4dCkge1xuICAgIHVzZXJOYW1lID0gZXhlY3V0aW9uQ29udGV4dC51c2VyTmFtZTtcbiAgICBlbWFpbCA9IGV4ZWN1dGlvbkNvbnRleHQudXNlckVtYWlsID8/IGVtYWlsO1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IGF3YWl0IGV4ZWN1dGlvbkNvbnRleHQuY2xpZW50LmN1cnJlbnRVc2VyLm1lKCk7XG4gICAgdXNlck5hbWUgPSBjdXJyZW50VXNlcj8udXNlck5hbWU7XG4gICAgZW1haWwgPSBjdXJyZW50VXNlcj8uZW1haWxzPy5maWx0ZXIoKGVtYWlsKSA9PiBlbWFpbC5wcmltYXJ5KS5maW5kKChlbWFpbCkgPT4gZW1haWwudmFsdWUpXG4gICAgICA/LnZhbHVlIGFzIHN0cmluZztcbiAgfVxuICBpZiAodXNlck5hbWUpIHtcbiAgICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1VTRVJfTkFNRV9LRVksIHVzZXJOYW1lKTtcbiAgfVxuICBpZiAoZW1haWwpIHtcbiAgICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1VTRVJfRU1BSUxfS0VZLCBlbWFpbCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYFJlcXVlc3RDb250ZXh0YCBhIE5PTi1IVFRQIGFnZW50IHR1cm4gbmVlZHMuXG4gKlxuICogRXZlcnl0aGluZyBNYXN0cmEncyB0b29scyByZWFkIG9mZiB0aGUgY29udGV4dCBpcyBzdGFtcGVkIHRoZSBzYW1lIHdheSB0aGVcbiAqIHJlcXVlc3QgbWlkZGxld2FyZSBzdGFtcHMgaXQgLSB0aGUgQXBwS2l0IHVzZXIgKHNvIGBhc2tfZ2VuaWVgIGFuZCB0aGUgbW9kZWxcbiAqIHJlc29sdmVyIGNhbiBtaW50IHVzZXItc2NvcGVkIHRva2VucyksIHRoZSBtZW1vcnkgdGhyZWFkIC8gcmVzb3VyY2UgcGFpciwgYW5kXG4gKiBhIHJlcXVlc3QgaWQgc28gdGhlIHR1cm4ncyBzcGFucyBqb2luIHVwIGluIHRyYWNlcy4gVGhlIHJlc3VsdCBpcyBwYXNzZWQgYXNcbiAqIGByZXF1ZXN0Q29udGV4dGAgdG8gYGFnZW50LmdlbmVyYXRlYCAvIGBhZ2VudC5zdHJlYW1gLlxuICpcbiAqIFRoaXMgaXMgd2hhdCBtYWtlcyBhIGNhcmQgdHVybiBhbnN3ZXIgd2l0aCB0aGUgU0FNRSBkYXRhIGEgY2hhdCB0dXJuIGRvZXM6IHRoZVxuICogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZW5kcG9pbnRzIGlzIHByZXNlbnRhdGlvbiwgbm90IGNhcGFiaWxpdHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0Q29udGV4dChcbiAgb3B0aW9uczogeyB0aHJlYWRJZD86IHN0cmluZzsgcmVzb3VyY2VJZD86IHN0cmluZzsgcmVxdWVzdElkPzogc3RyaW5nIH0gPSB7fSxcbik6IFByb21pc2U8UmVxdWVzdENvbnRleHQ+IHtcbiAgY29uc3QgcmVxdWVzdENvbnRleHQgPSBuZXcgUmVxdWVzdENvbnRleHQoKTtcbiAgYXdhaXQgc3RhbXBSZXF1ZXN0Q29udGV4dFVzZXIocmVxdWVzdENvbnRleHQpO1xuICBpZiAob3B0aW9ucy50aHJlYWRJZCkgcmVxdWVzdENvbnRleHQuc2V0KE1BU1RSQV9USFJFQURfSURfS0VZLCBvcHRpb25zLnRocmVhZElkKTtcbiAgLy8gU3RhbXBlZCBBRlRFUiB0aGUgdXNlciBzbyBhbiBleHBsaWNpdCByZXNvdXJjZSBpZCAoYSBjaGFubmVsIG1lbWJlciwgc2F5KVxuICAvLyB3aW5zIG92ZXIgdGhlIGFtYmllbnQgaWRlbnRpdHkgYHN0YW1wUmVxdWVzdENvbnRleHRVc2VyYCBkZWZhdWx0ZWQgdG8uXG4gIGlmIChvcHRpb25zLnJlc291cmNlSWQpIHJlcXVlc3RDb250ZXh0LnNldChNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCBvcHRpb25zLnJlc291cmNlSWQpO1xuICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBvcHRpb25zLnJlcXVlc3RJZCA/PyBoYXNoLmlkKCkpO1xuICByZXR1cm4gcmVxdWVzdENvbnRleHQ7XG59XG5cbi8qKlxuICogYEBtYXN0cmEvZXhwcmVzc2Agc3ViY2xhc3MgdGhhdCBzdGFtcHMgYFJlcXVlc3RDb250ZXh0YCB3aXRoIHRoZVxuICogQXBwS2l0IHVzZXIsIHJlc291cmNlIGlkLCBhbmQgYSB0aHJlYWQgaWQgYmFja2VkIGJ5IGFuIEhUVFAtb25seVxuICogc2Vzc2lvbiBjb29raWUgKGBhcHBraXRfPHBsdWdpbi1uYW1lPl9zZXNzaW9uX2lkYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXN0cmFTZXJ2ZXIgZXh0ZW5kcyBFeHByZXNzTWFzdHJhU2VydmVyIHtcbiAgcHJpdmF0ZSBsb2c6IGxvZy5Mb2dnZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0YW1wIHRoZSBNTGZsb3cgdHJhY2UtaWQgaGVhZGVyIG9uIHJlc3BvbnNlcy4gU2hhcmVzIHRoZVxuICAgKiBwbHVnaW4ncyBmZWVkYmFjayBnYXRlIHZpYSB7QGxpbmsgcmVzb2x2ZUZlZWRiYWNrRW5hYmxlZH0uXG4gICAqL1xuICBwcml2YXRlIGZlZWRiYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICAgIC4uLmFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgRXhwcmVzc01hc3RyYVNlcnZlcj5cbiAgKSB7XG4gICAgc3VwZXIoLi4uYXJncyk7XG4gICAgdGhpcy5sb2cgPSBsb2cubG9nZ2VyKGNvbmZpZyk7XG4gICAgdGhpcy5mZWVkYmFja0VuYWJsZWQgPSByZXNvbHZlRmVlZGJhY2tFbmFibGVkKGNvbmZpZy5mZWVkYmFjayk7XG4gIH1cblxuICBvdmVycmlkZSByZWdpc3RlckF1dGhNaWRkbGV3YXJlKCk6IHZvaWQge1xuICAgIHN1cGVyLnJlZ2lzdGVyQXV0aE1pZGRsZXdhcmUoKTtcbiAgICB0aGlzLmFwcC51c2UoYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IHJlcy5sb2NhbHMucmVxdWVzdENvbnRleHQhIGFzIFJlcXVlc3RDb250ZXh0O1xuICAgICAgY2xlYXJUcnVzdGVkUmVxdWVzdENvbnRleHQocmVxdWVzdENvbnRleHQpO1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVSZXF1ZXN0Q29udGV4dFVzZXIocmVxLCByZXF1ZXN0Q29udGV4dCk7XG4gICAgICB0aGlzLmNvbmZpZ3VyZVJlcXVlc3RDb250ZXh0VGhyZWFkSWQocmVxLCByZXMsIHJlcXVlc3RDb250ZXh0KTtcbiAgICAgIHRoaXMuY29uZmlndXJlUmVxdWVzdENvbnRleHRNb2RlbE92ZXJyaWRlKHJlcSwgcmVxdWVzdENvbnRleHQpO1xuICAgICAgdGhpcy5jb25maWd1cmVSZXF1ZXN0Q29udGV4dFJlcXVlc3RJZChyZXEsIHJlcywgcmVxdWVzdENvbnRleHQpO1xuICAgICAgdGhpcy5jb25maWd1cmVSZXF1ZXN0Q29udGV4dFNjb3BlcyhyZXEsIHJlcXVlc3RDb250ZXh0KTtcblxuICAgICAgdGhpcy5jb25maWd1cmVNbGZsb3dUcmFjZUlkKHJlcyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhcImF1dGg6bWlkZGxld2FyZVwiLCB7XG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgcGF0aDogcmVxLnBhdGgsXG4gICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9SRVFVRVNUX0lEX0tFWSksXG4gICAgICAgIHRocmVhZElkOiByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1RIUkVBRF9JRF9LRVkpLFxuICAgICAgICByZXNvdXJjZUlkOiByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1JFU09VUkNFX0lEX0tFWSksXG4gICAgICAgIHVzZXJOYW1lOiByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfTkFNRV9LRVkpLFxuICAgICAgICB1c2VyRW1haWw6IHJlcXVlc3RDb250ZXh0LmdldChNQVNUUkFfVVNFUl9FTUFJTF9LRVkpLFxuICAgICAgICBtb2RlbE92ZXJyaWRlOiByZXF1ZXN0Q29udGV4dC5nZXQoXG4gICAgICAgICAgLy8gaW1wb3J0ZWQgYmVsb3c7IGxvZ2dlZCBzbyBhIG1pc3JvdXRlZCByZXF1ZXN0IHNob3dzXG4gICAgICAgICAgLy8gdXAgYWxvbmdzaWRlIGl0cyBtb2RlbCBzZWxlY3Rpb24gaW4gYExPR19MRVZFTD1kZWJ1Z2AuXG4gICAgICAgICAgXCJtYXN0cmFfX21vZGVsX292ZXJyaWRlXCIsXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZVJlcXVlc3RDb250ZXh0VXNlcihyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0KSB7XG4gICAgLy8gUGFzcyB0aGUgZm9yd2FyZGVkIGNhbGxlciBpZGVudGl0eSBzbyBgc2VydmljZS1wcmluY2lwYWxgIG1vZGUgc3RpbGwga2V5c1xuICAgIC8vIG1lbW9yeSAvIGNhY2hlIC8gdHJhY2VzIHBlciB1c2VyIGV2ZW4gdGhvdWdoIHRoZSBjbGllbnQgaXMgdGhlIGFwcCBTUC5cbiAgICAvLyBJbiBhbiBPQk8gY29udGV4dCB0aGVzZSBhcmUgaWdub3JlZCBpbiBmYXZvciBvZiB0aGUgY29udGV4dCdzIG93biB1c2VyLlxuICAgIGF3YWl0IHN0YW1wUmVxdWVzdENvbnRleHRVc2VyKHJlcXVlc3RDb250ZXh0LCB7XG4gICAgICB1c2VySWQ6IHJlcXVlc3RVc2VySWQocmVxKSxcbiAgICAgIGVtYWlsOiByZXF1ZXN0VXNlckVtYWlsKHJlcSksXG4gICAgfSk7XG4gICAgY29uc3QgdXNlciA9IHJlcXVlc3RDb250ZXh0LmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHJlY29yZEFjdGl2ZVRyYWNlQXV0aChcImlzVXNlckNvbnRleHRcIiBpbiB1c2VyLmV4ZWN1dGlvbkNvbnRleHQgPyBcIm9ib1wiIDogXCJzZXJ2aWNlLXByaW5jaXBhbFwiKTtcbiAgICB9XG4gICAgY29uc3QgdHJhY2VVc2VyID0gW1xuICAgICAgcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9VU0VSX0VNQUlMX0tFWSksXG4gICAgICByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfTkFNRV9LRVkpLFxuICAgICAgcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9SRVNPVVJDRV9JRF9LRVkpLFxuICAgIF0uZmluZCgodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKTtcbiAgICByZWNvcmRBY3RpdmVUcmFjZVVzZXIodHJhY2VVc2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFtcCBhIHBlci1yZXF1ZXN0IGlkIGFuZCBlY2hvIGl0IG9uIHRoZSByZXNwb25zZSBzbyBhbiB1cHN0cmVhbVxuICAgKiBwcm94eSAvIGN1cmwgY2xpZW50IC8gYnJvd3Nlci1zaWRlIGxvZyBsaW5lIGNhbiBwYWlyIGl0cyB2aWV3IG9mXG4gICAqIHRoZSByZXF1ZXN0IHdpdGggdGhlIG1hdGNoaW5nIHRyYWNlIHNwYW4uIFJldXNlcyBgWC1SZXF1ZXN0LUlkYFxuICAgKiB3aGVuIHRoZSB1cHN0cmVhbSBhbHJlYWR5IHN1cHBsaWVzIG9uZSBzbyBtdWx0aS1ob3AgdHJhY2VzIHN0YXlcbiAgICogam9pbmVkOyBvdGhlcndpc2UgbWludHMgYSBVVUlEdjQuXG4gICAqXG4gICAqIFRoZSBpZCBpcyBzdXJmYWNlZCBhcyBgbWFzdHJhX19yZXF1ZXN0SWRgIHNwYW4gbWV0YWRhdGEgdmlhXG4gICAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gYW5kIGFzIHRoZSBgWC1SZXF1ZXN0LUlkYFxuICAgKiByZXNwb25zZSBoZWFkZXIgc28gZGV2IHRvb2xzIGNhbiBjb3B5IGl0IGZyb20gZWl0aGVyIHNpZGUuXG4gICAqL1xuICBjb25maWd1cmVSZXF1ZXN0Q29udGV4dFJlcXVlc3RJZChcbiAgICByZXE6IGV4cHJlc3MuUmVxdWVzdCxcbiAgICByZXM6IGV4cHJlc3MuUmVzcG9uc2UsXG4gICAgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0LFxuICApIHtcbiAgICBpZiAocmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9SRVFVRVNUX0lEX0tFWSkpIHJldHVybjtcbiAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IHJlcS5oZWFkZXJzW1wieC1yZXF1ZXN0LWlkXCJdO1xuICAgIGNvbnN0IHVwc3RyZWFtID0gQXJyYXkuaXNBcnJheShoZWFkZXJWYWx1ZSkgPyBoZWFkZXJWYWx1ZVswXSA6IGhlYWRlclZhbHVlO1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHVwc3RyZWFtPy50cmltKCkgfHwgaGFzaC5pZCgpO1xuICAgIHJlcXVlc3RDb250ZXh0LnNldChNQVNUUkFfUkVRVUVTVF9JRF9LRVksIHJlcXVlc3RJZCk7XG4gICAgcmVzLnNldEhlYWRlcihcIlgtUmVxdWVzdC1JZFwiLCByZXF1ZXN0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YW1wIE9BdXRoIHNjb3BlcyBmcm9tIHRoZSBmb3J3YXJkZWQgYWNjZXNzIHRva2VuIG9uXG4gICAqIHtAbGluayBNQVNUUkFfU0NPUEVTX0tFWX0gZm9yIHdvcmtzcGFjZSBtb3VudCBnYXRpbmcuXG4gICAqL1xuICBjb25maWd1cmVSZXF1ZXN0Q29udGV4dFNjb3BlcyhyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0KSB7XG4gICAgY29uc3Qgc2NvcGVzID0gW1xuICAgICAgLi4ub2JqZWN0XG4gICAgICAgIC5zZXF1ZW5jZSh0b2tlbi5nZXRBY2Nlc3NUb2tlblNjb3BlcyhyZXEpLCB0b2tlbi5nZXRBY2Nlc3NUb2tlblNjb3BlcyhyZXEsIFwiYXV0aG9yaXphdGlvblwiKSlcbiAgICAgICAgLmRpc3RpbmN0KCksXG4gICAgXTtcbiAgICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1NDT1BFU19LRVksIHNjb3Blcyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhbXAgdGhlIHR1cm4ncyBNTGZsb3cgdHJhY2UgaWQgb24gdGhlIHJlc3BvbnNlIHNvIHRoZSBjaGF0IGNsaWVudFxuICAgKiBjYW4gYXR0YWNoIHRodW1icyAvIGNvbW1lbnQgZmVlZGJhY2sgdG8gaXQgbGF0ZXIuIE1MZmxvdyBkZXJpdmVzXG4gICAqIGl0cyB0cmFjZSBpZCBmcm9tIHRoZSBPcGVuVGVsZW1ldHJ5IHRyYWNlIGlkIChgdHItPGhleD5gKSwgYW5kIGV2ZXJ5XG4gICAqIE1hc3RyYSBzcGFuIGZvciB0aGlzIHJlcXVlc3QgaW5oZXJpdHMgdGhlIGFtYmllbnQgT1RlbCBjb250ZXh0IChzZWVcbiAgICogYG9ic2VydmFiaWxpdHkudHNgKSwgc28gdGhlIGFjdGl2ZSBzcGFuJ3MgdHJhY2UgaWQgaGVyZSBpcyB0aGUgaWRcbiAgICogTUxmbG93IHdpbGwgcmVjb3JkIGZvciB0aGUgdHVybi5cbiAgICpcbiAgICogTm8tb3AgdW5sZXNzIGZlZWRiYWNrIGlzIGVuYWJsZWQsIGFuZCB3aGVuIG5vIGxpdmUgT1RlbCBzcGFuIGlzXG4gICAqIGFjdGl2ZSAoZS5nLiB0aGUgT1RMUCBTREsgaXNuJ3QgcmVnaXN0ZXJlZCk6IGluIHRoYXQgY2FzZSB0aGUgaGVhZGVyXG4gICAqIGlzIHNpbXBseSBhYnNlbnQgYW5kIHRoZSBjbGllbnQgaGlkZXMgZmVlZGJhY2sgZm9yIHRoYXQgbWVzc2FnZSxcbiAgICogZGVncmFkaW5nIGdyYWNlZnVsbHkgcmF0aGVyIHRoYW4gZW1pdHRpbmcgYSBib2d1cyB0cmFjZSBpZC5cbiAgICovXG4gIGNvbmZpZ3VyZU1sZmxvd1RyYWNlSWQocmVzOiBleHByZXNzLlJlc3BvbnNlKSB7XG4gICAgaWYgKCF0aGlzLmZlZWRiYWNrRW5hYmxlZCB8fCByZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcbiAgICBpZiAocmVzLmdldEhlYWRlcihmZWVkYmFjay5NTEZMT1dfVFJBQ0VfSURfSEVBREVSKSkgcmV0dXJuO1xuICAgIGNvbnN0IHRyYWNlSWQgPSB0cmFjZS5nZXRBY3RpdmVTcGFuKCk/LnNwYW5Db250ZXh0KCkudHJhY2VJZDtcbiAgICBpZiAoIXRyYWNlSWQgfHwgdHJhY2VJZCA9PT0gSU5WQUxJRF9UUkFDRV9JRCkgcmV0dXJuO1xuICAgIHJlcy5zZXRIZWFkZXIoZmVlZGJhY2suTUxGTE9XX1RSQUNFX0lEX0hFQURFUiwgYHRyLSR7dHJhY2VJZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSB0aHJlYWQgaWQgdGhpcyByZXF1ZXN0IHRhcmdldHMgYW5kIHBpbiBpdCBvblxuICAgKiBgUmVxdWVzdENvbnRleHRgIChjb25zdW1lZCBieSB0aGUgYWdlbnQgc3RyZWFtIGZvciBwZXJzaXN0ZW5jZSBhbmRcbiAgICogYnkgbmF0aXZlIG1lbW9yeSByb3V0ZXMpLiBSZXNvbHV0aW9uIG9yZGVyOlxuICAgKlxuICAgKiAgIDEuIEEgY2xpZW50LXN1cHBsaWVkIHRocmVhZCBpZCAodGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIC9cbiAgICogICAgICBgP3RocmVhZElkPWAgcXVlcnkpLiBUaGlzIGlzIGhvdyB0aGUgY2hhdCBVSSByZWZlcmVuY2VzIGFcbiAgICogICAgICBzcGVjaWZpYyBjb252ZXJzYXRpb24gYW1vbmcgdGhlIG1hbnkgYSB1c2VyIG93bnMgLSBpdCBwaWNrcyBhXG4gICAqICAgICAgdGhyZWFkIGlkIGZyb20gdGhlIGAvdGhyZWFkc2AgbGlzdGluZyAob3IgbWludHMgb25lIGZvciBhIG5ld1xuICAgKiAgICAgIGNvbnZlcnNhdGlvbikgYW5kIHN0YW1wcyBpdCBoZXJlLiBUaGUgaWQgaXMgc2NvcGVkIHRvIHRoZVxuICAgKiAgICAgIGNhbGxlcidzIHJlc291cmNlIGJ5IHRoZSByZWNhbGwgLyBsaXN0IHJvdXRlcywgc28gYSBjbGllbnRcbiAgICogICAgICBjYW4gb25seSBldmVyIHJlYWQgb3Igd3JpdGUgaXRzIG93biB0aHJlYWRzLlxuICAgKiAgIDIuIFRoZSBwZXItc2Vzc2lvbiBjb29raWUgKGBhcHBraXRfPHBsdWdpbi1uYW1lPl9zZXNzaW9uX2lkYCksXG4gICAqICAgICAgbWludGVkIG9uIGZpcnN0IGNvbnRhY3QuIFRoaXMgaXMgdGhlIGRlZmF1bHQgc2luZ2xlLXRocmVhZFxuICAgKiAgICAgIGZhbGxiYWNrIGZvciBjbGllbnRzIHRoYXQgZG9uJ3QgbWFuYWdlIHRocmVhZHMgZXhwbGljaXRseSwgc29cbiAgICogICAgICBleGlzdGluZyBlbWJlZHMga2VlcCBvbmUgc3RhYmxlIGNvbnZlcnNhdGlvbiBwZXIgc2Vzc2lvbiB3aXRoXG4gICAqICAgICAgbm8gY2xpZW50IGNoYW5nZXMuXG4gICAqL1xuICBjb25maWd1cmVSZXF1ZXN0Q29udGV4dFRocmVhZElkKFxuICAgIHJlcTogZXhwcmVzcy5SZXF1ZXN0LFxuICAgIHJlczogZXhwcmVzcy5SZXNwb25zZSxcbiAgICByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQsXG4gICkge1xuICAgIGlmIChyZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1RIUkVBRF9JRF9LRVkpKSByZXR1cm47XG4gICAgY29uc3QgcmVxdWVzdGVkID0gdGhpcy5yZWFkUmVxdWVzdGVkVGhyZWFkSWQocmVxKTtcbiAgICBpZiAocmVxdWVzdGVkKSB7XG4gICAgICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1RIUkVBRF9JRF9LRVksIHJlcXVlc3RlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvb2tpZXMgPSBodHRwLnBhcnNlQ29va2llcyhyZXEuaGVhZGVycy5jb29raWUpO1xuICAgIGNvbnN0IGNvb2tpZU5hbWUgPSBzdHJpbmdVdGlscy50b0lkZW50aWZpZXJXaXRoT3B0aW9ucyhcbiAgICAgIHsgZGVsaW1pdGVyOiBcIl9cIiwgZGlzdGluY3Q6IHRydWUgfSxcbiAgICAgIFwiYXBwa2l0XCIsXG4gICAgICB0aGlzLmNvbmZpZy5uYW1lISxcbiAgICAgIFwic2Vzc2lvbklkXCIsXG4gICAgKTtcbiAgICBsZXQgc2Vzc2lvbklkID0gY29va2llc1tjb29raWVOYW1lXTtcbiAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgc2Vzc2lvbklkID0gaGFzaC5pZCgpO1xuICAgICAgcmVzLmNvb2tpZShjb29raWVOYW1lLCBzZXNzaW9uSWQsIHtcbiAgICAgICAgaHR0cE9ubHk6IHRydWUsXG4gICAgICAgIHNhbWVTaXRlOiBcImxheFwiLFxuICAgICAgICBzZWN1cmU6IHJlcS5zZWN1cmUsXG4gICAgICAgIHBhdGg6IFwiL1wiLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb250ZXh0LnNldChNQVNUUkFfVEhSRUFEX0lEX0tFWSwgc2Vzc2lvbklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIHRoZSBjbGllbnQtc2VsZWN0ZWQgdGhyZWFkIGlkIGZyb20gdGhlIHJlcXVlc3QsIHByZWZlcnJpbmdcbiAgICogdGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIG92ZXIgdGhlIGA/dGhyZWFkSWQ9YCBxdWVyeS4gUmV0dXJuc1xuICAgKiBgbnVsbGAgd2hlbiBuZWl0aGVyIGNhcnJpZXMgYSBub24tZW1wdHkgdmFsdWUgc28gdGhlIGNhbGxlciBmYWxsc1xuICAgKiBiYWNrIHRvIHRoZSBzZXNzaW9uIGNvb2tpZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZFJlcXVlc3RlZFRocmVhZElkKHJlcTogZXhwcmVzcy5SZXF1ZXN0KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSByZXEuaGVhZGVyc1t0aHJlYWQuVEhSRUFEX0lEX0hFQURFUl07XG4gICAgY29uc3QgcXVlcnlWYWx1ZSA9IHJlcS5xdWVyeVt0aHJlYWQuVEhSRUFEX0lEX1FVRVJZXTtcbiAgICByZXR1cm4gKFxuICAgICAgc3RyaW5nVXRpbHMudHJpbVRvTnVsbChBcnJheS5pc0FycmF5KGhlYWRlclZhbHVlKSA/IGhlYWRlclZhbHVlWzBdIDogaGVhZGVyVmFsdWUpID8/XG4gICAgICBzdHJpbmdVdGlscy50cmltVG9OdWxsKEFycmF5LmlzQXJyYXkocXVlcnlWYWx1ZSkgPyBxdWVyeVZhbHVlWzBdIDogcXVlcnlWYWx1ZSlcbiAgICApO1xuICB9XG5cbiAgY29uZmlndXJlUmVxdWVzdENvbnRleHRNb2RlbE92ZXJyaWRlKHJlcTogZXhwcmVzcy5SZXF1ZXN0LCByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQpIHtcbiAgICAvLyBQZXItcmVxdWVzdCBtb2RlbCBvdmVycmlkZTogb25seSBob25vcmVkIHdoZW4gdGhlIHBsdWdpblxuICAgIC8vIG9wdHMgaW4gKGRlZmF1bHQpLiBTb3VyY2VzLCBpbiBwcmlvcml0eSBvcmRlciwgYXJlXG4gICAgLy8gYFgtTWFzdHJhLU1vZGVsYCBoZWFkZXIsIGA/bW9kZWw9YCBxdWVyeSwgYW5kIGBtb2RlbGAgL1xuICAgIC8vIGBtb2RlbElkYCBib2R5IGZpZWxkOyBzZWUgYHNlcnZpbmcudHNgLlxuICAgIGNvbnN0IHNlcnZpbmcgPSByZXNvbHZlU2VydmluZ0NvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgaWYgKHNlcnZpbmcuYWxsb3dPdmVycmlkZSkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBleHRyYWN0TW9kZWxPdmVycmlkZSh7XG4gICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPixcbiAgICAgICAgcXVlcnk6IHJlcS5xdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgYm9keTogcmVxLmJvZHksXG4gICAgICB9KTtcbiAgICAgIGlmIChvdmVycmlkZSkgcmVxdWVzdENvbnRleHQuc2V0KE1BU1RSQV9NT0RFTF9PVkVSUklERV9LRVksIG92ZXJyaWRlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIElucHV0cyBmb3Ige0BsaW5rIGlzTWFzdHJhUmVxdWVzdEFsbG93ZWR9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFBcGlHYXRlT3B0aW9ucyB7XG4gIC8qKiBgY29uZmlnLmFwaUFjY2Vzc2A7IGBcImZ1bGxcImAgc2hvcnQtY2lyY3VpdHMgdG8gYWxsb3cgZXZlcnl0aGluZy4gKi9cbiAgYWNjZXNzOiBcInNjb3BlZFwiIHwgXCJmdWxsXCI7XG4gIC8qKiBXaGV0aGVyIHRoZSBNQ1AgdHJhbnNwb3J0IGlzIG1vdW50ZWQgKHNvIGAvbWNwLypgIGlzIGxlZ2l0aW1hdGUpLiAqL1xuICBtY3BFbmFibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vdW50LXJlbGF0aXZlIGFnZW50IGluZmVyZW5jZSBwYXRocyAoYC9hZ2VudHMvOmlkLzx2ZXJiPi4uLmApLiBNYXRjaGVkXG4gKiBieSBwcmVmaXggb24gdGhlIHZlcmIgc28gZnV0dXJlIHZhcmlhbnRzIChgc3RyZWFtVk5leHRgLCBgc3RyZWFtL3ZuZXh0YCxcbiAqIGBnZW5lcmF0ZVZOZXh0YCkgc3RheSBjb3ZlcmVkIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS5cbiAqXG4gKiBDb3ZlcnMgdGhlIHBsYWluIGluZmVyZW5jZSB2ZXJicyAoYHN0cmVhbWAgLyBgZ2VuZXJhdGVgIC8gYG5ldHdvcmtgKSBwbHVzXG4gKiB0aGUgaHVtYW4taW4tdGhlLWxvb3AgcmVzdW1lIHZlcmJzIGEgcGF1c2VkIGByZXF1aXJlQXBwcm92YWxgIHRvb2wgbmVlZHNcbiAqIHRvIGNvbnRpbnVlOiBgYXBwcm92ZS10b29sLWNhbGxgIC8gYGRlY2xpbmUtdG9vbC1jYWxsYCAoc3RyZWFtaW5nLCBhbmQgdmlhXG4gKiBwcmVmaXggdGhlaXIgYC1nZW5lcmF0ZWAgbm9uLXN0cmVhbWluZyB2YXJpYW50cyksIHRoZSBgLW5ldHdvcmstYCB2YXJpYW50cyxcbiAqIGFuZCBgcmVzdW1lLXN0cmVhbWAgKGNvdmVycyBgcmVzdW1lLXN0cmVhbS11bnRpbC1pZGxlYCkuIFdpdGhvdXQgdGhlc2UgYW5cbiAqIGFwcHJvdmFsLWdhdGVkIHRvb2wgKGUuZy4gYHNlbmRfZW1haWxgKSBjYW4gYmUgcmVxdWVzdGVkIGJ1dCBuZXZlciBhcHByb3ZlZFxuICogZnJvbSB0aGUgYnJvd3NlciAtIHRoZSByZXN1bWUgYFBPU1RgIDQwM3MgdW5kZXIgc2NvcGVkIG1vZGUuIFRvZ2V0aGVyIHdpdGhcbiAqIHRoZSByZXNvdXJjZS1zY29wZWQgbWVtb3J5IG11dGF0aW9ucyBiZWxvdywgdGhlc2UgYXJlIHRoZSBvbmx5IHN0b2NrIE1hc3RyYVxuICogd3JpdGVzIHRoZSBicm93c2VyIGNsaWVudCBjYW4gbWFrZS5cbiAqL1xuY29uc3QgQUdFTlRfSU5GRVJFTkNFID1cbiAgL15cXC9hZ2VudHNcXC9bXi9dK1xcLyhzdHJlYW18Z2VuZXJhdGV8bmV0d29ya3xyZXN1bWUtc3RyZWFtfGFwcHJvdmUtdG9vbC1jYWxsfGRlY2xpbmUtdG9vbC1jYWxsfGFwcHJvdmUtbmV0d29yay10b29sLWNhbGx8ZGVjbGluZS1uZXR3b3JrLXRvb2wtY2FsbCkvaTtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSAoYC9hZ2VudHNgLCBgL2FnZW50cy86aWRgKS4gKi9cbmNvbnN0IEFHRU5UX01FVEFEQVRBID0gL15cXC9hZ2VudHMoXFwvW14vXSspPyQvO1xuLyoqIFBlcnNpc3RlZCBhcHByb3ZhbCBkaXNjb3ZlcnkgZm9yIG9uZSBhZ2VudC4gKi9cbmNvbnN0IEFHRU5UX1NVU1BFTkRFRF9SVU5TID0gL15cXC9hZ2VudHNcXC9bXi9dK1xcL3N1c3BlbmRlZC1ydW5zJC9pO1xuLyoqIE9mZmljaWFsIEFJIFNESyBVSSBzdHJlYW0gcm91dGUsIGluY2x1ZGluZyBgcmVzdW1lRGF0YWAgY29udGludWF0aW9ucy4gKi9cbmNvbnN0IEFHRU5UX0NIQVQgPSAvXlxcL2NoYXRcXC9bXi9dKyQvaTtcbi8qKiBOYXRpdmUgcmVzb3VyY2Utc2NvcGVkIG1lbW9yeSByZWFkcyB1c2VkIGJ5IGhpc3RvcnkgYW5kIHRoZSB0aHJlYWQgbGlzdC4gKi9cbmNvbnN0IE1FTU9SWV9SRUFEID0gL15cXC9tZW1vcnlcXC90aHJlYWRzKD86XFwvW14vXSsoPzpcXC9tZXNzYWdlcyk/KT8kL2k7XG4vKiogTmF0aXZlIHRocmVhZCByZW5hbWUvZGVsZXRlIHJvdXRlcy4gKi9cbmNvbnN0IE1FTU9SWV9USFJFQURfTVVUQVRJT04gPSAvXlxcL21lbW9yeVxcL3RocmVhZHNcXC9bXi9dKyQvaTtcblxuLyoqXG4gKiBXaGV0aGVyIGEgcmVxdWVzdCB0byB0aGUgc3RvY2sgYEBtYXN0cmEvZXhwcmVzc2Agc3ViLWFwcCBzaG91bGQgYmVcbiAqIGRpc3BhdGNoZWQsIGdpdmVuIHRoZSBjb25maWd1cmVkIHtAbGluayBNYXN0cmFBcGlHYXRlT3B0aW9ucy5hY2Nlc3N9LlxuICpcbiAqIGBwYXRoYCBpcyBtb3VudC1yZWxhdGl2ZSAod2hhdCB0aGUgcGx1Z2luJ3MgY2F0Y2gtYWxsIHNlZXMsIGUuZy5cbiAqIGAvY2hhdC94YCwgYC9tZW1vcnkvdGhyZWFkc2AsIGAvbWNwLy4uLmApLiBJbiBgXCJzY29wZWRcImBcbiAqIG1vZGUgdGhlIGFsbG93bGlzdCBpcyBkZWxpYmVyYXRlbHkgdGlnaHQgLSB0aGUgY2hhdCBjbGllbnQgb25seSBldmVyXG4gKiBuZWVkcyBhZ2VudCBpbmZlcmVuY2UsIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSwgcmVzb3VyY2Utc2NvcGVkIG1lbW9yeSxcbiAqIHRoaXMgcGx1Z2luJ3Mgb3duIGAvcm91dGUvKmAgcm91dGVzLCBhbmQgKHdoZW4gZW5hYmxlZCkgTUNQLiBUaGUgcmVtYWluaW5nXG4gKiBhZG1pbiwgbXV0YXRpbmcsIGFuZCBidWxrLWV4cG9ydCBzdXJmYWNlIHN0YXlzIGRlbmllZCBieSBkZWZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNYXN0cmFSZXF1ZXN0QWxsb3dlZChcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0czogTWFzdHJhQXBpR2F0ZU9wdGlvbnMsXG4pOiBib29sZWFuIHtcbiAgaWYgKG9wdHMuYWNjZXNzID09PSBcImZ1bGxcIikgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHAgPSBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gcGF0aCA6IGAvJHtwYXRofWA7XG4gIC8vIFRoZSBwbHVnaW4ncyBgL3JvdXRlLypgIGFkZGl0aW9ucyB2YWxpZGF0ZSB0aGVpciBvd24gaW5wdXRzIGFuZCB0cnVzdGVkXG4gIC8vIEFwcEtpdCByZXF1ZXN0IGNvbnRleHQgYmVmb3JlIHJlYWNoaW5nIHByb2R1Y3QgYmVoYXZpb3IuXG4gIGlmIChwID09PSBcIi9yb3V0ZVwiIHx8IHAuc3RhcnRzV2l0aChcIi9yb3V0ZS9cIikpIHJldHVybiB0cnVlO1xuICBpZiAob3B0cy5tY3BFbmFibGVkICYmIChwID09PSBcIi9tY3BcIiB8fCBwLnN0YXJ0c1dpdGgoXCIvbWNwL1wiKSkpIHJldHVybiB0cnVlO1xuICBjb25zdCBtID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gIGlmIChtID09PSBcIlBPU1RcIiAmJiBBR0VOVF9DSEFULnRlc3QocCkpIHJldHVybiB0cnVlO1xuICBpZiAobSA9PT0gXCJQT1NUXCIgJiYgQUdFTlRfSU5GRVJFTkNFLnRlc3QocCkpIHJldHVybiB0cnVlO1xuICBpZiAobSA9PT0gXCJHRVRcIiAmJiAoQUdFTlRfTUVUQURBVEEudGVzdChwKSB8fCBBR0VOVF9TVVNQRU5ERURfUlVOUy50ZXN0KHApKSkgcmV0dXJuIHRydWU7XG4gIGlmIChtID09PSBcIkdFVFwiICYmIE1FTU9SWV9SRUFELnRlc3QocCkpIHJldHVybiB0cnVlO1xuICBpZiAoKG0gPT09IFwiUEFUQ0hcIiB8fCBtID09PSBcIkRFTEVURVwiKSAmJiBNRU1PUllfVEhSRUFEX01VVEFUSU9OLnRlc3QocCkpIHJldHVybiB0cnVlO1xuICBpZiAobSA9PT0gXCJQT1NUXCIgJiYgcCA9PT0gXCIvbWVtb3J5L21lc3NhZ2VzL2RlbGV0ZVwiKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEtlZXAgTWFzdHJhIGN1c3RvbSBBUEkgcm91dGVzIG1vdW50LXJlbGF0aXZlIHdoZW4gdGhlIEV4cHJlc3Mgc3ViYXBwIGlzXG4gKiBob3N0ZWQgdW5kZXIgQXBwS2l0J3MgYC9hcGkvPHBsdWdpbj5gIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hSb3V0ZVBhdGNoTWlkZGxld2FyZShhcHA6IGV4cHJlc3MuRXhwcmVzcyk6IHZvaWQge1xuICBhcHAudXNlKChyZXEsIF9yZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBpc0N1c3RvbVJvdXRlID1cbiAgICAgIHJlcS5wYXRoID09PSBcIi9jaGF0XCIgfHxcbiAgICAgIHJlcS5wYXRoLnN0YXJ0c1dpdGgoXCIvY2hhdC9cIikgfHxcbiAgICAgIHJlcS5wYXRoID09PSBcIi9yb3V0ZVwiIHx8XG4gICAgICByZXEucGF0aC5zdGFydHNXaXRoKFwiL3JvdXRlL1wiKTtcbiAgICBpZiAoIWlzQ3VzdG9tUm91dGUpIHJldHVybiBuZXh0KCk7XG4gICAgcmVxLm9yaWdpbmFsVXJsID0gcmVxLnBhdGg7XG4gICAgbmV4dCgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBGaW5pc2ggYSBjaGF0IHJlcXVlc3Qgd2hlbiBNYXN0cmEgdGhyb3dzIGJlY2F1c2UgdGhlIHdvcmtmbG93IGlzIG5vXG4gKiBsb25nZXIgc3VzcGVuZGVkLiBEdXBsaWNhdGUgYXBwcm92ZS9yZXN1bWUgYW5kIGxhdGUgYGNvbnN1bWVTdHJlYW1gXG4gKiBib3RoIGhpdCB0aGF0IHBhdGg7IHRoZSBjbGllbnQgYWxyZWFkeSBoYXMgKG9yIHdpbGwgcmVsb2FkKSB0aGVcbiAqIGNvbXBsZXRlZCB0dXJuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoU3RhbGVSZXN1bWVSZWNvdmVyeShhcHA6IGV4cHJlc3MuRXhwcmVzcyk6IHZvaWQge1xuICBhcHAudXNlKChlcnJvcjogdW5rbm93biwgcmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSwgbmV4dDogZXhwcmVzcy5OZXh0RnVuY3Rpb24pID0+IHtcbiAgICBpZiAoIWlzU3RhbGVNYXN0cmFSZXN1bWVFcnJvcihlcnJvcikpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2dnZXIud2FybihcImlnbm9yZWQgc3RhbGUgbWFzdHJhIHJlc3VtZVwiLCB7XG4gICAgICBwYXRoOiByZXEucGF0aCxcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnJvciksXG4gICAgfSk7XG4gICAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgICAgcmVzLmVuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcInRleHQvZXZlbnQtc3RyZWFtOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJjYWNoZS1jb250cm9sXCIsIFwibm8tY2FjaGVcIik7XG4gICAgcmVzLndyaXRlKGBkYXRhOiAke0pTT04uc3RyaW5naWZ5KHsgdHlwZTogXCJzdGFydFwiIH0pfVxcblxcbmApO1xuICAgIHJlcy53cml0ZShgZGF0YTogJHtKU09OLnN0cmluZ2lmeSh7IHR5cGU6IFwiZmluaXNoXCIgfSl9XFxuXFxuYCk7XG4gICAgcmVzLndyaXRlKFwiZGF0YTogW0RPTkVdXFxuXFxuXCIpO1xuICAgIHJlcy5lbmQoKTtcbiAgfSk7XG59XG4iXX0=
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLGNBQWMsR0FDZixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLElBQUksbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHM0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixlQUFlLEVBQ2Ysb0JBQW9CLEdBR3JCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixvQkFBb0IsR0FDckIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUU7Ozs7O0dBS0c7QUFDSCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QyxNQUFNLDRCQUE0QixHQUFHO0lBQ25DLHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQix5QkFBeUI7SUFDekIseUJBQXlCO0NBQ2pCLENBQUM7QUFFWCxvRkFBb0Y7QUFDcEYsTUFBTSxVQUFVLDBCQUEwQixDQUFDLGNBQThCO0lBQ3ZFLEtBQUssTUFBTSxHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztRQUMvQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7QUFDSCxDQUFDO0FBaUJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxjQUE4QixFQUM5QixhQUFpQyxFQUFFO0lBRW5DLElBQUksQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFBRSxPQUFPO0lBQzlGLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQyxNQUFNLGFBQWEsR0FBRyxlQUFlLElBQUksZ0JBQWdCLENBQUM7SUFDMUQsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUM5RSxNQUFNLElBQUksR0FBUztRQUNqQixFQUFFLEVBQUUsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN6RCxnQkFBZ0I7S0FDakIsQ0FBQztJQUNGLGNBQWMsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELCtEQUErRDtJQUMvRCxnRUFBZ0U7SUFDaEUsMkRBQTJEO0lBQzNELCtEQUErRDtJQUMvRCw0RUFBNEU7SUFDNUUscUVBQXFFO0lBQ3JFLElBQUksUUFBNEIsQ0FBQztJQUNqQyxJQUFJLEtBQUssR0FBdUIsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNqRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDckMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7SUFDOUMsQ0FBQztTQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssYUFBYSxFQUFFLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ25FLFFBQVEsR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDO1FBQ2pDLEtBQUssR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN4RixFQUFFLEtBQWUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixjQUFjLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxVQUEwRSxFQUFFO0lBRTVFLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDNUMsTUFBTSx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxJQUFJLE9BQU8sQ0FBQyxRQUFRO1FBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakYsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSxJQUFJLE9BQU8sQ0FBQyxVQUFVO1FBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkYsY0FBYyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxtQkFBbUI7SUFTekM7SUFSRixHQUFHLENBQWE7SUFDeEI7OztPQUdHO0lBQ0ssZUFBZSxDQUFVO0lBRWpDLFlBQ1UsTUFBMEIsRUFDbEMsR0FBRyxJQUF1RDtRQUUxRCxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUhQLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBSWxDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRVEsc0JBQXNCO1FBQzdCLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3BDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBaUMsQ0FBQztZQUNwRSwwQkFBMEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMzQyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLCtCQUErQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRXhELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2dCQUNsQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7Z0JBQ2QsU0FBUyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7Z0JBQ3BELFFBQVEsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO2dCQUNsRCxVQUFVLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDdEQsUUFBUSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7Z0JBQ2xELFNBQVMsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO2dCQUNwRCxhQUFhLEVBQUUsY0FBYyxDQUFDLEdBQUc7Z0JBQy9CLHNEQUFzRDtnQkFDdEQseURBQXlEO2dCQUN6RCx3QkFBd0IsQ0FDekI7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLEVBQUUsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxHQUFvQixFQUFFLGNBQThCO1FBQ3BGLDRFQUE0RTtRQUM1RSx5RUFBeUU7UUFDekUsMEVBQTBFO1FBQzFFLE1BQU0sdUJBQXVCLENBQUMsY0FBYyxFQUFFO1lBQzVDLE1BQU0sRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDO1lBQzFCLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQXFCLENBQUM7UUFDckUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULHFCQUFxQixDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUc7WUFDaEIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztZQUN6QyxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO1lBQ3hDLGNBQWMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7U0FDM0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQW1CLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RixxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILGdDQUFnQyxDQUM5QixHQUFvQixFQUNwQixHQUFxQixFQUNyQixjQUE4QjtRQUU5QixJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7WUFBRSxPQUFPO1FBQ3RELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDM0UsTUFBTSxTQUFTLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoRCxjQUFjLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSCw2QkFBNkIsQ0FBQyxHQUFvQixFQUFFLGNBQThCO1FBQ2hGLE1BQU0sTUFBTSxHQUFHO1lBQ2IsR0FBRyxNQUFNO2lCQUNOLFFBQVEsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztpQkFDM0YsUUFBUSxFQUFFO1NBQ2QsQ0FBQztRQUNGLGNBQWMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILHNCQUFzQixDQUFDLEdBQXFCO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLEdBQUcsQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUNyRCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1lBQUUsT0FBTztRQUMzRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLGdCQUFnQjtZQUFFLE9BQU87UUFDckQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCwrQkFBK0IsQ0FDN0IsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsY0FBOEI7UUFFOUIsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO1lBQUUsT0FBTztRQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDcEQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLHVCQUF1QixDQUNwRCxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUNsQyxRQUFRLEVBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFLLEVBQ2pCLFdBQVcsQ0FDWixDQUFDO1FBQ0YsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFO2dCQUNoQyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsS0FBSztnQkFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07Z0JBQ2xCLElBQUksRUFBRSxHQUFHO2FBQ1YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGNBQWMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0sscUJBQXFCLENBQUMsR0FBb0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQ0wsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUNqRixXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQy9FLENBQUM7SUFDSixDQUFDO0lBRUQsb0NBQW9DLENBQUMsR0FBb0IsRUFBRSxjQUE4QjtRQUN2RiwyREFBMkQ7UUFDM0QscURBQXFEO1FBQ3JELDBEQUEwRDtRQUMxRCwwQ0FBMEM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDO2dCQUNwQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQXdEO2dCQUNyRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQWdDO2dCQUMzQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxJQUFJLFFBQVE7Z0JBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBVUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLGVBQWUsR0FDbkIsb0pBQW9KLENBQUM7QUFFdkosMEVBQTBFO0FBQzFFLE1BQU0sY0FBYyxHQUFHLHNCQUFzQixDQUFDO0FBQzlDLGtEQUFrRDtBQUNsRCxNQUFNLG9CQUFvQixHQUFHLG9DQUFvQyxDQUFDO0FBQ2xFLDZFQUE2RTtBQUM3RSxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQztBQUN0QywrRUFBK0U7QUFDL0UsTUFBTSxXQUFXLEdBQUcsaURBQWlELENBQUM7QUFDdEUsMENBQTBDO0FBQzFDLE1BQU0sc0JBQXNCLEdBQUcsNkJBQTZCLENBQUM7QUFFN0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsTUFBYyxFQUNkLElBQVksRUFDWixJQUEwQjtJQUUxQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNuRCwwRUFBMEU7SUFDMUUsMkRBQTJEO0lBQzNELElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzVFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwRCxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN6RCxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pGLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BELElBQUksQ0FBQyxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDckYsSUFBSSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSyx5QkFBeUI7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNqRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsR0FBb0I7SUFDN0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDMUIsTUFBTSxhQUFhLEdBQ2pCLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTztZQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDN0IsR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRO1lBQ3JCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxHQUFHLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxHQUFvQjtJQUM1RCxHQUFHLENBQUMsR0FBRyxDQUNMLENBQUMsS0FBYyxFQUFFLEdBQW9CLEVBQUUsR0FBcUIsRUFBRSxJQUEwQixFQUFFLEVBQUU7UUFDMUYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ1osT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO1lBQ3pDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtZQUNkLEtBQUssRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztTQUN0QyxDQUFDLENBQUM7UUFDSCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVixPQUFPO1FBQ1QsQ0FBQztRQUNELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztRQUNsRSxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeHByZXNzLWxheWVyIHBsdW1iaW5nIGZvciB0aGUgTWFzdHJhIHBsdWdpbjogYSBgTWFzdHJhU2VydmVyYCB0aGF0XG4gKiBzdGFtcHMgdGhlIHBlci1yZXF1ZXN0IGBSZXF1ZXN0Q29udGV4dGAgYW5kIGEgc2NvcGVkIG5hdGl2ZSBBUEkgZ2F0ZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGhhc2gsIGh0dHAsIGxvZywgb2JqZWN0LCBzdHJpbmdVdGlscywgdG9rZW4gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZmVlZGJhY2ssIHRocmVhZCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tYXN0cmFcIjtcbmltcG9ydCB7IGlzU3RhbGVNYXN0cmFSZXN1bWVFcnJvciB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tYXN0cmEvcmVzdW1lXCI7XG5pbXBvcnQge1xuICBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLFxuICBNQVNUUkFfVEhSRUFEX0lEX0tFWSxcbiAgUmVxdWVzdENvbnRleHQsXG59IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBNYXN0cmFTZXJ2ZXIgYXMgRXhwcmVzc01hc3RyYVNlcnZlciB9IGZyb20gXCJAbWFzdHJhL2V4cHJlc3NcIjtcbmltcG9ydCB7IHRyYWNlIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuXG5pbXBvcnQge1xuICBhdHRyaWJ1dGVkVXNlcklkLFxuICBNQVNUUkFfUkVRVUVTVF9JRF9LRVksXG4gIE1BU1RSQV9TQ09QRVNfS0VZLFxuICBNQVNUUkFfVVNFUl9FTUFJTF9LRVksXG4gIE1BU1RSQV9VU0VSX0tFWSxcbiAgTUFTVFJBX1VTRVJfTkFNRV9LRVksXG4gIHR5cGUgTWFzdHJhUGx1Z2luQ29uZmlnLFxuICB0eXBlIFVzZXIsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgcmVxdWVzdFVzZXJFbWFpbCwgcmVxdWVzdFVzZXJJZCB9IGZyb20gXCIuL2lkZW50aXR5LnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlRmVlZGJhY2tFbmFibGVkIH0gZnJvbSBcIi4vbWxmbG93LnRzXCI7XG5pbXBvcnQge1xuICBleHRyYWN0TW9kZWxPdmVycmlkZSxcbiAgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSxcbiAgTUFTVFJBX1JFU09MVkVEX01PREVMX0tFWSxcbiAgcmVzb2x2ZVNlcnZpbmdDb25maWcsXG59IGZyb20gXCIuL3NlcnZpbmcudHNcIjtcbmltcG9ydCB7IHJlY29yZEFjdGl2ZVRyYWNlQXV0aCwgcmVjb3JkQWN0aXZlVHJhY2VVc2VyIH0gZnJvbSBcIi4vdGVsZW1ldHJ5LnRzXCI7XG4vKipcbiAqIE9wZW5UZWxlbWV0cnkncyBzZW50aW5lbCBmb3IgXCJubyB2YWxpZCB0cmFjZVwiIC0gMzIgemVybyBoZXggY2hhcnMuXG4gKiBgdHJhY2UuZ2V0QWN0aXZlU3BhbigpYCByZXR1cm5zIGEgbm9uLXJlY29yZGluZyBzcGFuIHdpdGggdGhpcyBpZFxuICogd2hlbiBubyBTREsgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggbXVzdCBuZXZlciBiZSBzdXJmYWNlZCBhcyBhIHRyYWNlIHRvXG4gKiBhdHRhY2ggZmVlZGJhY2sgdG8uXG4gKi9cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvc2VydmVyXCIpO1xuY29uc3QgSU5WQUxJRF9UUkFDRV9JRCA9IFwiMFwiLnJlcGVhdCgzMik7XG5jb25zdCBUUlVTVEVEX1JFUVVFU1RfQ09OVEVYVF9LRVlTID0gW1xuICBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLFxuICBNQVNUUkFfVEhSRUFEX0lEX0tFWSxcbiAgTUFTVFJBX1VTRVJfS0VZLFxuICBNQVNUUkFfVVNFUl9OQU1FX0tFWSxcbiAgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLFxuICBNQVNUUkFfUkVRVUVTVF9JRF9LRVksXG4gIE1BU1RSQV9TQ09QRVNfS0VZLFxuICBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZLFxuICBNQVNUUkFfUkVTT0xWRURfTU9ERUxfS0VZLFxuXSBhcyBjb25zdDtcblxuLyoqIFJlbW92ZSBicm93c2VyLXN1cHBsaWVkIHZhbHVlcyBmb3IgZmllbGRzIG93bmVkIGJ5IHRydXN0ZWQgc2VydmVyIG1pZGRsZXdhcmUuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJUcnVzdGVkUmVxdWVzdENvbnRleHQocmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0KTogdm9pZCB7XG4gIGZvciAoY29uc3Qga2V5IG9mIFRSVVNURURfUkVRVUVTVF9DT05URVhUX0tFWVMpIHtcbiAgICByZXF1ZXN0Q29udGV4dC5kZWxldGVSYXcoa2V5KTtcbiAgfVxufVxuXG4vKipcbiAqIFdobyBhIHR1cm4gaXMgQVRUUklCVVRFRCB0bywgaW5kZXBlbmRlbnQgb2Ygd2hpY2ggRGF0YWJyaWNrcyBjcmVkZW50aWFsIHJ1bnNcbiAqIGl0cyBjYWxscy4gU3VwcGxpZWQgYnkgdGhlIEhUVFAgbWlkZGxld2FyZSBmcm9tIHRoZSBmb3J3YXJkZWQgdXNlciBoZWFkZXJzIHNvXG4gKiB0aGF0IGluIGBzZXJ2aWNlLXByaW5jaXBhbGAgbW9kZSAtIHdoZXJlIGV2ZXJ5IHJlcXVlc3Qgc2hhcmVzIHRoZSBhcHAgU1Anc1xuICogY2xpZW50IC0gdGhlIG1lbW9yeSB0aHJlYWQsIHBlci11c2VyIGNhY2hlIG5hbWVzcGFjZSwgYW5kIHRyYWNlIG1ldGFkYXRhXG4gKiBzdGlsbCBrZXkgb2ZmIHRoZSByZWFsIGNhbGxlci4gSWdub3JlZCBpbiBhbiBPQk8gKHVzZXIpIGNvbnRleHQsIHdob3NlIG93blxuICogdXNlciBpZCAvIGVtYWlsIGFyZSBhdXRob3JpdGF0aXZlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZWRJZGVudGl0eSB7XG4gIC8qKiBGb3J3YXJkZWQgYHgtZm9yd2FyZGVkLXVzZXJgIGlkLCB1c2VkIHdoZW4gdGhlIGNsaWVudCBpcyB0aGUgc2VydmljZSBwcmluY2lwYWwuICovXG4gIHVzZXJJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIEZvcndhcmRlZCBgeC1mb3J3YXJkZWQtZW1haWxgLCB1c2VkIGZvciB0cmFjZSBtZXRhZGF0YSB1bmRlciB0aGUgc2VydmljZSBwcmluY2lwYWwuICovXG4gIGVtYWlsPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFN0YW1wIHRoZSBBcHBLaXQgdXNlciAocGx1cyB0aGUgcmVzb3VyY2UgaWQgYW5kIHRyYWNlIG1ldGFkYXRhKSBvbnRvXG4gKiBgcmVxdWVzdENvbnRleHRgLlxuICpcbiAqIFNwbGl0IG91dCBvZiB7QGxpbmsgTWFzdHJhU2VydmVyfSBiZWNhdXNlIHRoZSBIVFRQIG1pZGRsZXdhcmUgaXMgbm90IHRoZSBvbmx5XG4gKiBjYWxsZXIgdGhhdCBuZWVkcyBpdDogYW4gb3V0LW9mLWJhbmQgdHVybiAoYSBUZWFtcyBhY3Rpdml0eSBhcnJpdmluZyBvblxuICogYW5vdGhlciBwbHVnaW4ncyByb3V0ZSwgYSBzY2hlZHVsZWQgam9iKSBkcml2ZXMgYGFnZW50LmdlbmVyYXRlYCBkaXJlY3RseSwgYW5kXG4gKiB3aXRob3V0IHRoaXMgc3RhbXAgZXZlcnkgdXNlci1zY29wZWQgdG9vbCAtIGBhc2tfZ2VuaWVgIGFib3ZlIGFsbCAtIGZhaWxzIHdpdGhcbiAqIFwiaW52b2tlIHRoZSB0b29sIGZyb20gYW4gYWdlbnQgdHVybiBzZXJ2ZWQgYnkgdGhlIG1hc3RyYSBwbHVnaW5cIi4gVGhvc2VcbiAqIGNhbGxlcnMgYnVpbGQgYSBjb250ZXh0IHdpdGgge0BsaW5rIGNyZWF0ZVJlcXVlc3RDb250ZXh0fSBpbnN0ZWFkIG9mIGFcbiAqIHJlcXVlc3QuXG4gKlxuICogVGhlIERhdGFicmlja3MgY3JlZGVudGlhbCBhbHdheXMgY29tZXMgZnJvbSB0aGUgYW1iaWVudCBleGVjdXRpb24gY29udGV4dDtcbiAqIGBhdHRyaWJ1dGVkYCBvbmx5IGNoYW5nZXMgV0hPIHRoZSB0dXJuIGlzIGF0dHJpYnV0ZWQgdG8gd2hlbiB0aGF0IGNvbnRleHQgaXNcbiAqIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCAoc2VlIHtAbGluayBBdHRyaWJ1dGVkSWRlbnRpdHl9KS5cbiAqXG4gKiBJZGVtcG90ZW50OiByZXR1cm5zIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHVzZXIgYW5kIHJlc291cmNlIGlkIGFyZSBhbHJlYWR5XG4gKiBwcmVzZW50LCBzbyB0aGUgbWlkZGxld2FyZSBjYW4gY2FsbCBpdCBvdmVyIGEgY29udGV4dCBhbm90aGVyIGxheWVyIHN0YW1wZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFtcFJlcXVlc3RDb250ZXh0VXNlcihcbiAgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0LFxuICBhdHRyaWJ1dGVkOiBBdHRyaWJ1dGVkSWRlbnRpdHkgPSB7fSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoW01BU1RSQV9VU0VSX0tFWSwgTUFTVFJBX1JFU09VUkNFX0lEX0tFWV0uZXZlcnkoKGtleSkgPT4gcmVxdWVzdENvbnRleHQuZ2V0KGtleSkpKSByZXR1cm47XG4gIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSBnZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gIGNvbnN0IGlzVXNlckNvbnRleHQgPSBcImlzVXNlckNvbnRleHRcIiBpbiBleGVjdXRpb25Db250ZXh0O1xuICAvLyBUaGUgRGF0YWJyaWNrcyBDUkVERU5USUFMIGlzIGFsd2F5cyB0aGUgYW1iaWVudCBleGVjdXRpb24gY29udGV4dCdzIGNsaWVudFxuICAvLyAoT0JPIGluIGEgdXNlciBjb250ZXh0LCB0aGUgc2VydmljZSBwcmluY2lwYWwgb3RoZXJ3aXNlKS4gV0hPIHRoZSB0dXJuIGlzXG4gIC8vIGF0dHJpYnV0ZWQgdG8gY2FuIGRpZmZlcjogaW4gYHNlcnZpY2UtcHJpbmNpcGFsYCBtb2RlIGV2ZXJ5IHJlcXVlc3Qgc2hhcmVzXG4gIC8vIHRoZSBTUCBjbGllbnQsIGJ1dCB0aGUgZm9yd2FyZGVkIHVzZXIgaWQgbXVzdCBzdGlsbCBrZXkgdGhlIG1lbW9yeSB0aHJlYWRcbiAgLy8gYW5kIHRoZSBwZXItdXNlciBjYWNoZSBuYW1lc3BhY2Ugc28gdHdvIGNhbGxlcnMgZG9uJ3Qgc2hhcmUgYSBjb252ZXJzYXRpb24uXG4gIGNvbnN0IHVzZXI6IFVzZXIgPSB7XG4gICAgaWQ6IGF0dHJpYnV0ZWRVc2VySWQoZXhlY3V0aW9uQ29udGV4dCwgYXR0cmlidXRlZC51c2VySWQpLFxuICAgIGV4ZWN1dGlvbkNvbnRleHQsXG4gIH07XG4gIHJlcXVlc3RDb250ZXh0LnNldChNQVNUUkFfVVNFUl9LRVksIHVzZXIpO1xuICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1JFU09VUkNFX0lEX0tFWSwgdXNlci5pZCk7XG4gIC8vIEFwcEtpdCdzIGBVc2VyQ29udGV4dGAgc3VyZmFjZXMgZGlzcGxheSBuYW1lIC8gZW1haWwgb25seSBvblxuICAvLyBPQk8gcmVxdWVzdHMuIFNlcnZpY2UtY29udGV4dCBjYWxscyAoYmFja2dyb3VuZCB0YXNrcywgc2VydmVyXG4gIC8vIHN0YXJ0LXVwKSBsZWF2ZSB0aGVzZSB1bmRlZmluZWQgYW5kIHdlIHNraXAgdGhlIHN0YW1wIHNvXG4gIC8vIGRvd25zdHJlYW0gdHJhY2UgbWV0YWRhdGEgc3RheXMgYWJzZW50IHJhdGhlciB0aGFuIGVtcHR5LiBJblxuICAvLyBgc2VydmljZS1wcmluY2lwYWxgIG1vZGUgdGhlIGZvcndhcmRlZCBlbWFpbCBzdGlsbCBpZGVudGlmaWVzIHRoZSBjYWxsZXIsXG4gIC8vIHNvIGl0IGlzIHVzZWQgZm9yIHRyYWNlIG1ldGFkYXRhIGV2ZW4gdGhvdWdoIHRoZSBjbGllbnQgaXMgdGhlIFNQLlxuICBsZXQgdXNlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhdHRyaWJ1dGVkLmVtYWlsO1xuICBpZiAoaXNVc2VyQ29udGV4dCkge1xuICAgIHVzZXJOYW1lID0gZXhlY3V0aW9uQ29udGV4dC51c2VyTmFtZTtcbiAgICBlbWFpbCA9IGV4ZWN1dGlvbkNvbnRleHQudXNlckVtYWlsID8/IGVtYWlsO1xuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IGF3YWl0IGV4ZWN1dGlvbkNvbnRleHQuY2xpZW50LmN1cnJlbnRVc2VyLm1lKCk7XG4gICAgdXNlck5hbWUgPSBjdXJyZW50VXNlcj8udXNlck5hbWU7XG4gICAgZW1haWwgPSBjdXJyZW50VXNlcj8uZW1haWxzPy5maWx0ZXIoKGVtYWlsKSA9PiBlbWFpbC5wcmltYXJ5KS5maW5kKChlbWFpbCkgPT4gZW1haWwudmFsdWUpXG4gICAgICA/LnZhbHVlIGFzIHN0cmluZztcbiAgfVxuICBpZiAodXNlck5hbWUpIHtcbiAgICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1VTRVJfTkFNRV9LRVksIHVzZXJOYW1lKTtcbiAgfVxuICBpZiAoZW1haWwpIHtcbiAgICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1VTRVJfRU1BSUxfS0VZLCBlbWFpbCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYFJlcXVlc3RDb250ZXh0YCBhIE5PTi1IVFRQIGFnZW50IHR1cm4gbmVlZHMuXG4gKlxuICogRXZlcnl0aGluZyBNYXN0cmEncyB0b29scyByZWFkIG9mZiB0aGUgY29udGV4dCBpcyBzdGFtcGVkIHRoZSBzYW1lIHdheSB0aGVcbiAqIHJlcXVlc3QgbWlkZGxld2FyZSBzdGFtcHMgaXQgLSB0aGUgQXBwS2l0IHVzZXIgKHNvIGBhc2tfZ2VuaWVgIGFuZCB0aGUgbW9kZWxcbiAqIHJlc29sdmVyIGNhbiBtaW50IHVzZXItc2NvcGVkIHRva2VucyksIHRoZSBtZW1vcnkgdGhyZWFkIC8gcmVzb3VyY2UgcGFpciwgYW5kXG4gKiBhIHJlcXVlc3QgaWQgc28gdGhlIHR1cm4ncyBzcGFucyBqb2luIHVwIGluIHRyYWNlcy4gVGhlIHJlc3VsdCBpcyBwYXNzZWQgYXNcbiAqIGByZXF1ZXN0Q29udGV4dGAgdG8gYGFnZW50LmdlbmVyYXRlYCAvIGBhZ2VudC5zdHJlYW1gLlxuICpcbiAqIFRoaXMgaXMgd2hhdCBtYWtlcyBhIGNhcmQgdHVybiBhbnN3ZXIgd2l0aCB0aGUgU0FNRSBkYXRhIGEgY2hhdCB0dXJuIGRvZXM6IHRoZVxuICogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZW5kcG9pbnRzIGlzIHByZXNlbnRhdGlvbiwgbm90IGNhcGFiaWxpdHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0Q29udGV4dChcbiAgb3B0aW9uczogeyB0aHJlYWRJZD86IHN0cmluZzsgcmVzb3VyY2VJZD86IHN0cmluZzsgcmVxdWVzdElkPzogc3RyaW5nIH0gPSB7fSxcbik6IFByb21pc2U8UmVxdWVzdENvbnRleHQ+IHtcbiAgY29uc3QgcmVxdWVzdENvbnRleHQgPSBuZXcgUmVxdWVzdENvbnRleHQoKTtcbiAgYXdhaXQgc3RhbXBSZXF1ZXN0Q29udGV4dFVzZXIocmVxdWVzdENvbnRleHQpO1xuICBpZiAob3B0aW9ucy50aHJlYWRJZCkgcmVxdWVzdENvbnRleHQuc2V0KE1BU1RSQV9USFJFQURfSURfS0VZLCBvcHRpb25zLnRocmVhZElkKTtcbiAgLy8gU3RhbXBlZCBBRlRFUiB0aGUgdXNlciBzbyBhbiBleHBsaWNpdCByZXNvdXJjZSBpZCAoYSBjaGFubmVsIG1lbWJlciwgc2F5KVxuICAvLyB3aW5zIG92ZXIgdGhlIGFtYmllbnQgaWRlbnRpdHkgYHN0YW1wUmVxdWVzdENvbnRleHRVc2VyYCBkZWZhdWx0ZWQgdG8uXG4gIGlmIChvcHRpb25zLnJlc291cmNlSWQpIHJlcXVlc3RDb250ZXh0LnNldChNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCBvcHRpb25zLnJlc291cmNlSWQpO1xuICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBvcHRpb25zLnJlcXVlc3RJZCA/PyBoYXNoLmlkKCkpO1xuICByZXR1cm4gcmVxdWVzdENvbnRleHQ7XG59XG5cbi8qKlxuICogYEBtYXN0cmEvZXhwcmVzc2Agc3ViY2xhc3MgdGhhdCBzdGFtcHMgYFJlcXVlc3RDb250ZXh0YCB3aXRoIHRoZVxuICogQXBwS2l0IHVzZXIsIHJlc291cmNlIGlkLCBhbmQgYSB0aHJlYWQgaWQgYmFja2VkIGJ5IGFuIEhUVFAtb25seVxuICogc2Vzc2lvbiBjb29raWUgKGBhcHBraXRfPHBsdWdpbi1uYW1lPl9zZXNzaW9uX2lkYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXN0cmFTZXJ2ZXIgZXh0ZW5kcyBFeHByZXNzTWFzdHJhU2VydmVyIHtcbiAgcHJpdmF0ZSBsb2c6IGxvZy5Mb2dnZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0YW1wIHRoZSBNTGZsb3cgdHJhY2UtaWQgaGVhZGVyIG9uIHJlc3BvbnNlcy4gU2hhcmVzIHRoZVxuICAgKiBwbHVnaW4ncyBmZWVkYmFjayBnYXRlIHZpYSB7QGxpbmsgcmVzb2x2ZUZlZWRiYWNrRW5hYmxlZH0uXG4gICAqL1xuICBwcml2YXRlIGZlZWRiYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogTWFzdHJhUGx1Z2luQ29uZmlnLFxuICAgIC4uLmFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgRXhwcmVzc01hc3RyYVNlcnZlcj5cbiAgKSB7XG4gICAgc3VwZXIoLi4uYXJncyk7XG4gICAgdGhpcy5sb2cgPSBsb2cubG9nZ2VyKGNvbmZpZyk7XG4gICAgdGhpcy5mZWVkYmFja0VuYWJsZWQgPSByZXNvbHZlRmVlZGJhY2tFbmFibGVkKGNvbmZpZy5mZWVkYmFjayk7XG4gIH1cblxuICBvdmVycmlkZSByZWdpc3RlckF1dGhNaWRkbGV3YXJlKCk6IHZvaWQge1xuICAgIHN1cGVyLnJlZ2lzdGVyQXV0aE1pZGRsZXdhcmUoKTtcbiAgICB0aGlzLmFwcC51c2UoYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IHJlcy5sb2NhbHMucmVxdWVzdENvbnRleHQhIGFzIFJlcXVlc3RDb250ZXh0O1xuICAgICAgY2xlYXJUcnVzdGVkUmVxdWVzdENvbnRleHQocmVxdWVzdENvbnRleHQpO1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVSZXF1ZXN0Q29udGV4dFVzZXIocmVxLCByZXF1ZXN0Q29udGV4dCk7XG4gICAgICB0aGlzLmNvbmZpZ3VyZVJlcXVlc3RDb250ZXh0VGhyZWFkSWQocmVxLCByZXMsIHJlcXVlc3RDb250ZXh0KTtcbiAgICAgIHRoaXMuY29uZmlndXJlUmVxdWVzdENvbnRleHRNb2RlbE92ZXJyaWRlKHJlcSwgcmVxdWVzdENvbnRleHQpO1xuICAgICAgdGhpcy5jb25maWd1cmVSZXF1ZXN0Q29udGV4dFJlcXVlc3RJZChyZXEsIHJlcywgcmVxdWVzdENvbnRleHQpO1xuICAgICAgdGhpcy5jb25maWd1cmVSZXF1ZXN0Q29udGV4dFNjb3BlcyhyZXEsIHJlcXVlc3RDb250ZXh0KTtcblxuICAgICAgdGhpcy5jb25maWd1cmVNbGZsb3dUcmFjZUlkKHJlcyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhcImF1dGg6bWlkZGxld2FyZVwiLCB7XG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgcGF0aDogcmVxLnBhdGgsXG4gICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9SRVFVRVNUX0lEX0tFWSksXG4gICAgICAgIHRocmVhZElkOiByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1RIUkVBRF9JRF9LRVkpLFxuICAgICAgICByZXNvdXJjZUlkOiByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1JFU09VUkNFX0lEX0tFWSksXG4gICAgICAgIHVzZXJOYW1lOiByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfTkFNRV9LRVkpLFxuICAgICAgICB1c2VyRW1haWw6IHJlcXVlc3RDb250ZXh0LmdldChNQVNUUkFfVVNFUl9FTUFJTF9LRVkpLFxuICAgICAgICBtb2RlbE92ZXJyaWRlOiByZXF1ZXN0Q29udGV4dC5nZXQoXG4gICAgICAgICAgLy8gaW1wb3J0ZWQgYmVsb3c7IGxvZ2dlZCBzbyBhIG1pc3JvdXRlZCByZXF1ZXN0IHNob3dzXG4gICAgICAgICAgLy8gdXAgYWxvbmdzaWRlIGl0cyBtb2RlbCBzZWxlY3Rpb24gaW4gYExPR19MRVZFTD1kZWJ1Z2AuXG4gICAgICAgICAgXCJtYXN0cmFfX21vZGVsX292ZXJyaWRlXCIsXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZVJlcXVlc3RDb250ZXh0VXNlcihyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0KSB7XG4gICAgLy8gUGFzcyB0aGUgZm9yd2FyZGVkIGNhbGxlciBpZGVudGl0eSBzbyBgc2VydmljZS1wcmluY2lwYWxgIG1vZGUgc3RpbGwga2V5c1xuICAgIC8vIG1lbW9yeSAvIGNhY2hlIC8gdHJhY2VzIHBlciB1c2VyIGV2ZW4gdGhvdWdoIHRoZSBjbGllbnQgaXMgdGhlIGFwcCBTUC5cbiAgICAvLyBJbiBhbiBPQk8gY29udGV4dCB0aGVzZSBhcmUgaWdub3JlZCBpbiBmYXZvciBvZiB0aGUgY29udGV4dCdzIG93biB1c2VyLlxuICAgIGF3YWl0IHN0YW1wUmVxdWVzdENvbnRleHRVc2VyKHJlcXVlc3RDb250ZXh0LCB7XG4gICAgICB1c2VySWQ6IHJlcXVlc3RVc2VySWQocmVxKSxcbiAgICAgIGVtYWlsOiByZXF1ZXN0VXNlckVtYWlsKHJlcSksXG4gICAgfSk7XG4gICAgY29uc3QgdXNlciA9IHJlcXVlc3RDb250ZXh0LmdldChNQVNUUkFfVVNFUl9LRVkpIGFzIFVzZXIgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHJlY29yZEFjdGl2ZVRyYWNlQXV0aChcImlzVXNlckNvbnRleHRcIiBpbiB1c2VyLmV4ZWN1dGlvbkNvbnRleHQgPyBcIm9ib1wiIDogXCJzZXJ2aWNlLXByaW5jaXBhbFwiKTtcbiAgICB9XG4gICAgY29uc3QgdHJhY2VVc2VyID0gW1xuICAgICAgcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9VU0VSX0VNQUlMX0tFWSksXG4gICAgICByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfTkFNRV9LRVkpLFxuICAgICAgcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9SRVNPVVJDRV9JRF9LRVkpLFxuICAgIF0uZmluZCgodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKTtcbiAgICByZWNvcmRBY3RpdmVUcmFjZVVzZXIodHJhY2VVc2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFtcCBhIHBlci1yZXF1ZXN0IGlkIGFuZCBlY2hvIGl0IG9uIHRoZSByZXNwb25zZSBzbyBhbiB1cHN0cmVhbVxuICAgKiBwcm94eSAvIGN1cmwgY2xpZW50IC8gYnJvd3Nlci1zaWRlIGxvZyBsaW5lIGNhbiBwYWlyIGl0cyB2aWV3IG9mXG4gICAqIHRoZSByZXF1ZXN0IHdpdGggdGhlIG1hdGNoaW5nIHRyYWNlIHNwYW4uIFJldXNlcyBgWC1SZXF1ZXN0LUlkYFxuICAgKiB3aGVuIHRoZSB1cHN0cmVhbSBhbHJlYWR5IHN1cHBsaWVzIG9uZSBzbyBtdWx0aS1ob3AgdHJhY2VzIHN0YXlcbiAgICogam9pbmVkOyBvdGhlcndpc2UgbWludHMgYSBVVUlEdjQuXG4gICAqXG4gICAqIFRoZSBpZCBpcyBzdXJmYWNlZCBhcyBgbWFzdHJhX19yZXF1ZXN0SWRgIHNwYW4gbWV0YWRhdGEgdmlhXG4gICAqIHtAbGluayBUUkFDRV9SRVFVRVNUX0NPTlRFWFRfS0VZU30gYW5kIGFzIHRoZSBgWC1SZXF1ZXN0LUlkYFxuICAgKiByZXNwb25zZSBoZWFkZXIgc28gZGV2IHRvb2xzIGNhbiBjb3B5IGl0IGZyb20gZWl0aGVyIHNpZGUuXG4gICAqL1xuICBjb25maWd1cmVSZXF1ZXN0Q29udGV4dFJlcXVlc3RJZChcbiAgICByZXE6IGV4cHJlc3MuUmVxdWVzdCxcbiAgICByZXM6IGV4cHJlc3MuUmVzcG9uc2UsXG4gICAgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0LFxuICApIHtcbiAgICBpZiAocmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9SRVFVRVNUX0lEX0tFWSkpIHJldHVybjtcbiAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IHJlcS5oZWFkZXJzW1wieC1yZXF1ZXN0LWlkXCJdO1xuICAgIGNvbnN0IHVwc3RyZWFtID0gQXJyYXkuaXNBcnJheShoZWFkZXJWYWx1ZSkgPyBoZWFkZXJWYWx1ZVswXSA6IGhlYWRlclZhbHVlO1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHVwc3RyZWFtPy50cmltKCkgfHwgaGFzaC5pZCgpO1xuICAgIHJlcXVlc3RDb250ZXh0LnNldChNQVNUUkFfUkVRVUVTVF9JRF9LRVksIHJlcXVlc3RJZCk7XG4gICAgcmVzLnNldEhlYWRlcihcIlgtUmVxdWVzdC1JZFwiLCByZXF1ZXN0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YW1wIE9BdXRoIHNjb3BlcyBmcm9tIHRoZSBmb3J3YXJkZWQgYWNjZXNzIHRva2VuIG9uXG4gICAqIHtAbGluayBNQVNUUkFfU0NPUEVTX0tFWX0gZm9yIHdvcmtzcGFjZSBtb3VudCBnYXRpbmcuXG4gICAqL1xuICBjb25maWd1cmVSZXF1ZXN0Q29udGV4dFNjb3BlcyhyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0KSB7XG4gICAgY29uc3Qgc2NvcGVzID0gW1xuICAgICAgLi4ub2JqZWN0XG4gICAgICAgIC5zZXF1ZW5jZSh0b2tlbi5nZXRBY2Nlc3NUb2tlblNjb3BlcyhyZXEpLCB0b2tlbi5nZXRBY2Nlc3NUb2tlblNjb3BlcyhyZXEsIFwiYXV0aG9yaXphdGlvblwiKSlcbiAgICAgICAgLmRpc3RpbmN0KCksXG4gICAgXTtcbiAgICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1NDT1BFU19LRVksIHNjb3Blcyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhbXAgdGhlIHR1cm4ncyBNTGZsb3cgdHJhY2UgaWQgb24gdGhlIHJlc3BvbnNlIHNvIHRoZSBjaGF0IGNsaWVudFxuICAgKiBjYW4gYXR0YWNoIHRodW1icyAvIGNvbW1lbnQgZmVlZGJhY2sgdG8gaXQgbGF0ZXIuIE1MZmxvdyBkZXJpdmVzXG4gICAqIGl0cyB0cmFjZSBpZCBmcm9tIHRoZSBPcGVuVGVsZW1ldHJ5IHRyYWNlIGlkIChgdHItPGhleD5gKSwgYW5kIGV2ZXJ5XG4gICAqIE1hc3RyYSBzcGFuIGZvciB0aGlzIHJlcXVlc3QgaW5oZXJpdHMgdGhlIGFtYmllbnQgT1RlbCBjb250ZXh0IChzZWVcbiAgICogYG9ic2VydmFiaWxpdHkudHNgKSwgc28gdGhlIGFjdGl2ZSBzcGFuJ3MgdHJhY2UgaWQgaGVyZSBpcyB0aGUgaWRcbiAgICogTUxmbG93IHdpbGwgcmVjb3JkIGZvciB0aGUgdHVybi5cbiAgICpcbiAgICogTm8tb3AgdW5sZXNzIGZlZWRiYWNrIGlzIGVuYWJsZWQsIGFuZCB3aGVuIG5vIGxpdmUgT1RlbCBzcGFuIGlzXG4gICAqIGFjdGl2ZSAoZS5nLiB0aGUgT1RMUCBTREsgaXNuJ3QgcmVnaXN0ZXJlZCk6IGluIHRoYXQgY2FzZSB0aGUgaGVhZGVyXG4gICAqIGlzIHNpbXBseSBhYnNlbnQgYW5kIHRoZSBjbGllbnQgaGlkZXMgZmVlZGJhY2sgZm9yIHRoYXQgbWVzc2FnZSxcbiAgICogZGVncmFkaW5nIGdyYWNlZnVsbHkgcmF0aGVyIHRoYW4gZW1pdHRpbmcgYSBib2d1cyB0cmFjZSBpZC5cbiAgICovXG4gIGNvbmZpZ3VyZU1sZmxvd1RyYWNlSWQocmVzOiBleHByZXNzLlJlc3BvbnNlKSB7XG4gICAgaWYgKCF0aGlzLmZlZWRiYWNrRW5hYmxlZCB8fCByZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcbiAgICBpZiAocmVzLmdldEhlYWRlcihmZWVkYmFjay5NTEZMT1dfVFJBQ0VfSURfSEVBREVSKSkgcmV0dXJuO1xuICAgIGNvbnN0IHRyYWNlSWQgPSB0cmFjZS5nZXRBY3RpdmVTcGFuKCk/LnNwYW5Db250ZXh0KCkudHJhY2VJZDtcbiAgICBpZiAoIXRyYWNlSWQgfHwgdHJhY2VJZCA9PT0gSU5WQUxJRF9UUkFDRV9JRCkgcmV0dXJuO1xuICAgIHJlcy5zZXRIZWFkZXIoZmVlZGJhY2suTUxGTE9XX1RSQUNFX0lEX0hFQURFUiwgYHRyLSR7dHJhY2VJZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSB0aHJlYWQgaWQgdGhpcyByZXF1ZXN0IHRhcmdldHMgYW5kIHBpbiBpdCBvblxuICAgKiBgUmVxdWVzdENvbnRleHRgIChjb25zdW1lZCBieSB0aGUgYWdlbnQgc3RyZWFtIGZvciBwZXJzaXN0ZW5jZSBhbmRcbiAgICogYnkgbmF0aXZlIG1lbW9yeSByb3V0ZXMpLiBSZXNvbHV0aW9uIG9yZGVyOlxuICAgKlxuICAgKiAgIDEuIEEgY2xpZW50LXN1cHBsaWVkIHRocmVhZCBpZCAodGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIC9cbiAgICogICAgICBgP3RocmVhZElkPWAgcXVlcnkpLiBUaGlzIGlzIGhvdyB0aGUgY2hhdCBVSSByZWZlcmVuY2VzIGFcbiAgICogICAgICBzcGVjaWZpYyBjb252ZXJzYXRpb24gYW1vbmcgdGhlIG1hbnkgYSB1c2VyIG93bnMgLSBpdCBwaWNrcyBhXG4gICAqICAgICAgdGhyZWFkIGlkIGZyb20gdGhlIGAvdGhyZWFkc2AgbGlzdGluZyAob3IgbWludHMgb25lIGZvciBhIG5ld1xuICAgKiAgICAgIGNvbnZlcnNhdGlvbikgYW5kIHN0YW1wcyBpdCBoZXJlLiBUaGUgaWQgaXMgc2NvcGVkIHRvIHRoZVxuICAgKiAgICAgIGNhbGxlcidzIHJlc291cmNlIGJ5IHRoZSByZWNhbGwgLyBsaXN0IHJvdXRlcywgc28gYSBjbGllbnRcbiAgICogICAgICBjYW4gb25seSBldmVyIHJlYWQgb3Igd3JpdGUgaXRzIG93biB0aHJlYWRzLlxuICAgKiAgIDIuIFRoZSBwZXItc2Vzc2lvbiBjb29raWUgKGBhcHBraXRfPHBsdWdpbi1uYW1lPl9zZXNzaW9uX2lkYCksXG4gICAqICAgICAgbWludGVkIG9uIGZpcnN0IGNvbnRhY3QuIFRoaXMgaXMgdGhlIGRlZmF1bHQgc2luZ2xlLXRocmVhZFxuICAgKiAgICAgIGZhbGxiYWNrIGZvciBjbGllbnRzIHRoYXQgZG9uJ3QgbWFuYWdlIHRocmVhZHMgZXhwbGljaXRseSwgc29cbiAgICogICAgICBleGlzdGluZyBlbWJlZHMga2VlcCBvbmUgc3RhYmxlIGNvbnZlcnNhdGlvbiBwZXIgc2Vzc2lvbiB3aXRoXG4gICAqICAgICAgbm8gY2xpZW50IGNoYW5nZXMuXG4gICAqL1xuICBjb25maWd1cmVSZXF1ZXN0Q29udGV4dFRocmVhZElkKFxuICAgIHJlcTogZXhwcmVzcy5SZXF1ZXN0LFxuICAgIHJlczogZXhwcmVzcy5SZXNwb25zZSxcbiAgICByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQsXG4gICkge1xuICAgIGlmIChyZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1RIUkVBRF9JRF9LRVkpKSByZXR1cm47XG4gICAgY29uc3QgcmVxdWVzdGVkID0gdGhpcy5yZWFkUmVxdWVzdGVkVGhyZWFkSWQocmVxKTtcbiAgICBpZiAocmVxdWVzdGVkKSB7XG4gICAgICByZXF1ZXN0Q29udGV4dC5zZXQoTUFTVFJBX1RIUkVBRF9JRF9LRVksIHJlcXVlc3RlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvb2tpZXMgPSBodHRwLnBhcnNlQ29va2llcyhyZXEuaGVhZGVycy5jb29raWUpO1xuICAgIGNvbnN0IGNvb2tpZU5hbWUgPSBzdHJpbmdVdGlscy50b0lkZW50aWZpZXJXaXRoT3B0aW9ucyhcbiAgICAgIHsgZGVsaW1pdGVyOiBcIl9cIiwgZGlzdGluY3Q6IHRydWUgfSxcbiAgICAgIFwiYXBwa2l0XCIsXG4gICAgICB0aGlzLmNvbmZpZy5uYW1lISxcbiAgICAgIFwic2Vzc2lvbklkXCIsXG4gICAgKTtcbiAgICBsZXQgc2Vzc2lvbklkID0gY29va2llc1tjb29raWVOYW1lXTtcbiAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgc2Vzc2lvbklkID0gaGFzaC5pZCgpO1xuICAgICAgcmVzLmNvb2tpZShjb29raWVOYW1lLCBzZXNzaW9uSWQsIHtcbiAgICAgICAgaHR0cE9ubHk6IHRydWUsXG4gICAgICAgIHNhbWVTaXRlOiBcImxheFwiLFxuICAgICAgICBzZWN1cmU6IHJlcS5zZWN1cmUsXG4gICAgICAgIHBhdGg6IFwiL1wiLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb250ZXh0LnNldChNQVNUUkFfVEhSRUFEX0lEX0tFWSwgc2Vzc2lvbklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIHRoZSBjbGllbnQtc2VsZWN0ZWQgdGhyZWFkIGlkIGZyb20gdGhlIHJlcXVlc3QsIHByZWZlcnJpbmdcbiAgICogdGhlIHRocmVhZC1zZWxlY3Rpb24gaGVhZGVyIG92ZXIgdGhlIGA/dGhyZWFkSWQ9YCBxdWVyeS4gUmV0dXJuc1xuICAgKiBgbnVsbGAgd2hlbiBuZWl0aGVyIGNhcnJpZXMgYSBub24tZW1wdHkgdmFsdWUgc28gdGhlIGNhbGxlciBmYWxsc1xuICAgKiBiYWNrIHRvIHRoZSBzZXNzaW9uIGNvb2tpZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZFJlcXVlc3RlZFRocmVhZElkKHJlcTogZXhwcmVzcy5SZXF1ZXN0KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSByZXEuaGVhZGVyc1t0aHJlYWQuVEhSRUFEX0lEX0hFQURFUl07XG4gICAgY29uc3QgcXVlcnlWYWx1ZSA9IHJlcS5xdWVyeVt0aHJlYWQuVEhSRUFEX0lEX1FVRVJZXTtcbiAgICByZXR1cm4gKFxuICAgICAgc3RyaW5nVXRpbHMudHJpbVRvTnVsbChBcnJheS5pc0FycmF5KGhlYWRlclZhbHVlKSA/IGhlYWRlclZhbHVlWzBdIDogaGVhZGVyVmFsdWUpID8/XG4gICAgICBzdHJpbmdVdGlscy50cmltVG9OdWxsKEFycmF5LmlzQXJyYXkocXVlcnlWYWx1ZSkgPyBxdWVyeVZhbHVlWzBdIDogcXVlcnlWYWx1ZSlcbiAgICApO1xuICB9XG5cbiAgY29uZmlndXJlUmVxdWVzdENvbnRleHRNb2RlbE92ZXJyaWRlKHJlcTogZXhwcmVzcy5SZXF1ZXN0LCByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQpIHtcbiAgICAvLyBQZXItcmVxdWVzdCBtb2RlbCBvdmVycmlkZTogb25seSBob25vcmVkIHdoZW4gdGhlIHBsdWdpblxuICAgIC8vIG9wdHMgaW4gKGRlZmF1bHQpLiBTb3VyY2VzLCBpbiBwcmlvcml0eSBvcmRlciwgYXJlXG4gICAgLy8gYFgtTWFzdHJhLU1vZGVsYCBoZWFkZXIsIGA/bW9kZWw9YCBxdWVyeSwgYW5kIGBtb2RlbGAgL1xuICAgIC8vIGBtb2RlbElkYCBib2R5IGZpZWxkOyBzZWUgYHNlcnZpbmcudHNgLlxuICAgIGNvbnN0IHNlcnZpbmcgPSByZXNvbHZlU2VydmluZ0NvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgaWYgKHNlcnZpbmcuYWxsb3dPdmVycmlkZSkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBleHRyYWN0TW9kZWxPdmVycmlkZSh7XG4gICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPixcbiAgICAgICAgcXVlcnk6IHJlcS5xdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgYm9keTogcmVxLmJvZHksXG4gICAgICB9KTtcbiAgICAgIGlmIChvdmVycmlkZSkgcmVxdWVzdENvbnRleHQuc2V0KE1BU1RSQV9NT0RFTF9PVkVSUklERV9LRVksIG92ZXJyaWRlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIElucHV0cyBmb3Ige0BsaW5rIGlzTWFzdHJhUmVxdWVzdEFsbG93ZWR9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0cmFBcGlHYXRlT3B0aW9ucyB7XG4gIC8qKiBgY29uZmlnLmFwaUFjY2Vzc2A7IGBcImZ1bGxcImAgc2hvcnQtY2lyY3VpdHMgdG8gYWxsb3cgZXZlcnl0aGluZy4gKi9cbiAgYWNjZXNzOiBcInNjb3BlZFwiIHwgXCJmdWxsXCI7XG4gIC8qKiBXaGV0aGVyIHRoZSBNQ1AgdHJhbnNwb3J0IGlzIG1vdW50ZWQgKHNvIGAvbWNwLypgIGlzIGxlZ2l0aW1hdGUpLiAqL1xuICBtY3BFbmFibGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vdW50LXJlbGF0aXZlIGFnZW50IGluZmVyZW5jZSBwYXRocyAoYC9hZ2VudHMvOmlkLzx2ZXJiPi4uLmApLiBNYXRjaGVkXG4gKiBieSBwcmVmaXggb24gdGhlIHZlcmIgc28gZnV0dXJlIHZhcmlhbnRzIChgc3RyZWFtVk5leHRgLCBgc3RyZWFtL3ZuZXh0YCxcbiAqIGBnZW5lcmF0ZVZOZXh0YCkgc3RheSBjb3ZlcmVkIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS5cbiAqXG4gKiBDb3ZlcnMgdGhlIHBsYWluIGluZmVyZW5jZSB2ZXJicyAoYHN0cmVhbWAgLyBgZ2VuZXJhdGVgIC8gYG5ldHdvcmtgKSBwbHVzXG4gKiB0aGUgaHVtYW4taW4tdGhlLWxvb3AgcmVzdW1lIHZlcmJzIGEgcGF1c2VkIGByZXF1aXJlQXBwcm92YWxgIHRvb2wgbmVlZHNcbiAqIHRvIGNvbnRpbnVlOiBgYXBwcm92ZS10b29sLWNhbGxgIC8gYGRlY2xpbmUtdG9vbC1jYWxsYCAoc3RyZWFtaW5nLCBhbmQgdmlhXG4gKiBwcmVmaXggdGhlaXIgYC1nZW5lcmF0ZWAgbm9uLXN0cmVhbWluZyB2YXJpYW50cyksIHRoZSBgLW5ldHdvcmstYCB2YXJpYW50cyxcbiAqIGFuZCBgcmVzdW1lLXN0cmVhbWAgKGNvdmVycyBgcmVzdW1lLXN0cmVhbS11bnRpbC1pZGxlYCkuIFdpdGhvdXQgdGhlc2UgYW5cbiAqIGFwcHJvdmFsLWdhdGVkIHRvb2wgKGUuZy4gYHNlbmRfZW1haWxgKSBjYW4gYmUgcmVxdWVzdGVkIGJ1dCBuZXZlciBhcHByb3ZlZFxuICogZnJvbSB0aGUgYnJvd3NlciAtIHRoZSByZXN1bWUgYFBPU1RgIDQwM3MgdW5kZXIgc2NvcGVkIG1vZGUuIFRvZ2V0aGVyIHdpdGhcbiAqIHRoZSByZXNvdXJjZS1zY29wZWQgbWVtb3J5IG11dGF0aW9ucyBiZWxvdywgdGhlc2UgYXJlIHRoZSBvbmx5IHN0b2NrIE1hc3RyYVxuICogd3JpdGVzIHRoZSBicm93c2VyIGNsaWVudCBjYW4gbWFrZS5cbiAqL1xuY29uc3QgQUdFTlRfSU5GRVJFTkNFID1cbiAgL15cXC9hZ2VudHNcXC9bXi9dK1xcLyhzdHJlYW18Z2VuZXJhdGV8bmV0d29ya3xyZXN1bWUtc3RyZWFtfGFwcHJvdmUtdG9vbC1jYWxsfGRlY2xpbmUtdG9vbC1jYWxsfGFwcHJvdmUtbmV0d29yay10b29sLWNhbGx8ZGVjbGluZS1uZXR3b3JrLXRvb2wtY2FsbCkvaTtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSAoYC9hZ2VudHNgLCBgL2FnZW50cy86aWRgKS4gKi9cbmNvbnN0IEFHRU5UX01FVEFEQVRBID0gL15cXC9hZ2VudHMoXFwvW14vXSspPyQvO1xuLyoqIFBlcnNpc3RlZCBhcHByb3ZhbCBkaXNjb3ZlcnkgZm9yIG9uZSBhZ2VudC4gKi9cbmNvbnN0IEFHRU5UX1NVU1BFTkRFRF9SVU5TID0gL15cXC9hZ2VudHNcXC9bXi9dK1xcL3N1c3BlbmRlZC1ydW5zJC9pO1xuLyoqIE9mZmljaWFsIEFJIFNESyBVSSBzdHJlYW0gcm91dGUsIGluY2x1ZGluZyBgcmVzdW1lRGF0YWAgY29udGludWF0aW9ucy4gKi9cbmNvbnN0IEFHRU5UX0NIQVQgPSAvXlxcL2NoYXRcXC9bXi9dKyQvaTtcbi8qKiBOYXRpdmUgcmVzb3VyY2Utc2NvcGVkIG1lbW9yeSByZWFkcyB1c2VkIGJ5IGhpc3RvcnkgYW5kIHRoZSB0aHJlYWQgbGlzdC4gKi9cbmNvbnN0IE1FTU9SWV9SRUFEID0gL15cXC9tZW1vcnlcXC90aHJlYWRzKD86XFwvW14vXSsoPzpcXC9tZXNzYWdlcyk/KT8kL2k7XG4vKiogTmF0aXZlIHRocmVhZCByZW5hbWUvZGVsZXRlIHJvdXRlcy4gKi9cbmNvbnN0IE1FTU9SWV9USFJFQURfTVVUQVRJT04gPSAvXlxcL21lbW9yeVxcL3RocmVhZHNcXC9bXi9dKyQvaTtcblxuLyoqXG4gKiBXaGV0aGVyIGEgcmVxdWVzdCB0byB0aGUgc3RvY2sgYEBtYXN0cmEvZXhwcmVzc2Agc3ViLWFwcCBzaG91bGQgYmVcbiAqIGRpc3BhdGNoZWQsIGdpdmVuIHRoZSBjb25maWd1cmVkIHtAbGluayBNYXN0cmFBcGlHYXRlT3B0aW9ucy5hY2Nlc3N9LlxuICpcbiAqIGBwYXRoYCBpcyBtb3VudC1yZWxhdGl2ZSAod2hhdCB0aGUgcGx1Z2luJ3MgY2F0Y2gtYWxsIHNlZXMsIGUuZy5cbiAqIGAvY2hhdC94YCwgYC9tZW1vcnkvdGhyZWFkc2AsIGAvbWNwLy4uLmApLiBJbiBgXCJzY29wZWRcImBcbiAqIG1vZGUgdGhlIGFsbG93bGlzdCBpcyBkZWxpYmVyYXRlbHkgdGlnaHQgLSB0aGUgY2hhdCBjbGllbnQgb25seSBldmVyXG4gKiBuZWVkcyBhZ2VudCBpbmZlcmVuY2UsIHJlYWQtb25seSBhZ2VudCBtZXRhZGF0YSwgcmVzb3VyY2Utc2NvcGVkIG1lbW9yeSxcbiAqIHRoaXMgcGx1Z2luJ3Mgb3duIGAvcm91dGUvKmAgcm91dGVzLCBhbmQgKHdoZW4gZW5hYmxlZCkgTUNQLiBUaGUgcmVtYWluaW5nXG4gKiBhZG1pbiwgbXV0YXRpbmcsIGFuZCBidWxrLWV4cG9ydCBzdXJmYWNlIHN0YXlzIGRlbmllZCBieSBkZWZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNYXN0cmFSZXF1ZXN0QWxsb3dlZChcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0czogTWFzdHJhQXBpR2F0ZU9wdGlvbnMsXG4pOiBib29sZWFuIHtcbiAgaWYgKG9wdHMuYWNjZXNzID09PSBcImZ1bGxcIikgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHAgPSBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gcGF0aCA6IGAvJHtwYXRofWA7XG4gIC8vIFRoZSBwbHVnaW4ncyBgL3JvdXRlLypgIGFkZGl0aW9ucyB2YWxpZGF0ZSB0aGVpciBvd24gaW5wdXRzIGFuZCB0cnVzdGVkXG4gIC8vIEFwcEtpdCByZXF1ZXN0IGNvbnRleHQgYmVmb3JlIHJlYWNoaW5nIHByb2R1Y3QgYmVoYXZpb3IuXG4gIGlmIChwID09PSBcIi9yb3V0ZVwiIHx8IHAuc3RhcnRzV2l0aChcIi9yb3V0ZS9cIikpIHJldHVybiB0cnVlO1xuICBpZiAob3B0cy5tY3BFbmFibGVkICYmIChwID09PSBcIi9tY3BcIiB8fCBwLnN0YXJ0c1dpdGgoXCIvbWNwL1wiKSkpIHJldHVybiB0cnVlO1xuICBjb25zdCBtID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gIGlmIChtID09PSBcIlBPU1RcIiAmJiBBR0VOVF9DSEFULnRlc3QocCkpIHJldHVybiB0cnVlO1xuICBpZiAobSA9PT0gXCJQT1NUXCIgJiYgQUdFTlRfSU5GRVJFTkNFLnRlc3QocCkpIHJldHVybiB0cnVlO1xuICBpZiAobSA9PT0gXCJHRVRcIiAmJiAoQUdFTlRfTUVUQURBVEEudGVzdChwKSB8fCBBR0VOVF9TVVNQRU5ERURfUlVOUy50ZXN0KHApKSkgcmV0dXJuIHRydWU7XG4gIGlmIChtID09PSBcIkdFVFwiICYmIE1FTU9SWV9SRUFELnRlc3QocCkpIHJldHVybiB0cnVlO1xuICBpZiAoKG0gPT09IFwiUEFUQ0hcIiB8fCBtID09PSBcIkRFTEVURVwiKSAmJiBNRU1PUllfVEhSRUFEX01VVEFUSU9OLnRlc3QocCkpIHJldHVybiB0cnVlO1xuICBpZiAobSA9PT0gXCJQT1NUXCIgJiYgcCA9PT0gXCIvbWVtb3J5L21lc3NhZ2VzL2RlbGV0ZVwiKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEtlZXAgTWFzdHJhIGN1c3RvbSBBUEkgcm91dGVzIG1vdW50LXJlbGF0aXZlIHdoZW4gdGhlIEV4cHJlc3Mgc3ViYXBwIGlzXG4gKiBob3N0ZWQgdW5kZXIgQXBwS2l0J3MgYC9hcGkvPHBsdWdpbj5gIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hSb3V0ZVBhdGNoTWlkZGxld2FyZShhcHA6IGV4cHJlc3MuRXhwcmVzcyk6IHZvaWQge1xuICBhcHAudXNlKChyZXEsIF9yZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBpc0N1c3RvbVJvdXRlID1cbiAgICAgIHJlcS5wYXRoID09PSBcIi9jaGF0XCIgfHxcbiAgICAgIHJlcS5wYXRoLnN0YXJ0c1dpdGgoXCIvY2hhdC9cIikgfHxcbiAgICAgIHJlcS5wYXRoID09PSBcIi9yb3V0ZVwiIHx8XG4gICAgICByZXEucGF0aC5zdGFydHNXaXRoKFwiL3JvdXRlL1wiKTtcbiAgICBpZiAoIWlzQ3VzdG9tUm91dGUpIHJldHVybiBuZXh0KCk7XG4gICAgcmVxLm9yaWdpbmFsVXJsID0gcmVxLnBhdGg7XG4gICAgbmV4dCgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBGaW5pc2ggYSBjaGF0IHJlcXVlc3Qgd2hlbiBNYXN0cmEgdGhyb3dzIGJlY2F1c2UgdGhlIHdvcmtmbG93IGlzIG5vXG4gKiBsb25nZXIgc3VzcGVuZGVkLiBEdXBsaWNhdGUgYXBwcm92ZS9yZXN1bWUgYW5kIGxhdGUgYGNvbnN1bWVTdHJlYW1gXG4gKiBib3RoIGhpdCB0aGF0IHBhdGg7IHRoZSBjbGllbnQgYWxyZWFkeSBoYXMgKG9yIHdpbGwgcmVsb2FkKSB0aGVcbiAqIGNvbXBsZXRlZCB0dXJuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoU3RhbGVSZXN1bWVSZWNvdmVyeShhcHA6IGV4cHJlc3MuRXhwcmVzcyk6IHZvaWQge1xuICBhcHAudXNlKFxuICAgIChlcnJvcjogdW5rbm93biwgcmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSwgbmV4dDogZXhwcmVzcy5OZXh0RnVuY3Rpb24pID0+IHtcbiAgICAgIGlmICghaXNTdGFsZU1hc3RyYVJlc3VtZUVycm9yKGVycm9yKSkge1xuICAgICAgICBuZXh0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLndhcm4oXCJpZ25vcmVkIHN0YWxlIG1hc3RyYSByZXN1bWVcIiwge1xuICAgICAgICBwYXRoOiByZXEucGF0aCxcbiAgICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlcy5oZWFkZXJzU2VudCkge1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJjb250ZW50LXR5cGVcIiwgXCJ0ZXh0L2V2ZW50LXN0cmVhbTsgY2hhcnNldD11dGYtOFwiKTtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJjYWNoZS1jb250cm9sXCIsIFwibm8tY2FjaGVcIik7XG4gICAgICByZXMud3JpdGUoYGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoeyB0eXBlOiBcInN0YXJ0XCIgfSl9XFxuXFxuYCk7XG4gICAgICByZXMud3JpdGUoYGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoeyB0eXBlOiBcImZpbmlzaFwiIH0pfVxcblxcbmApO1xuICAgICAgcmVzLndyaXRlKFwiZGF0YTogW0RPTkVdXFxuXFxuXCIpO1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0sXG4gICk7XG59XG4iXX0=
@@ -2,7 +2,7 @@
2
2
  * Where Databricks Assistant `SKILL.md` trees live.
3
3
  *
4
4
  * Two modules need these paths and must agree on them: `workspaces.ts` MOUNTS
5
- * them per request (see `DEFAULT_SKILL_FOLDERS`), and `remote-skills.ts`
5
+ * them per request (see `DEFAULT_DATABRICKS_WORKSPACE_PATHS`), and `remote-skills.ts`
6
6
  * WRITES provisioned skills into them at startup. They live here rather than being
7
7
  * spelled out in both, where a change to one would silently provision skills into a
8
8
  * tree the other never scanned.