@datagrok-libraries/utils 4.1.25 → 4.1.27

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.
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "email": "amuzychyna@datagrok.ai"
9
9
  },
10
10
  "fullName": "Utils",
11
- "version": "4.1.25",
11
+ "version": "4.1.27",
12
12
  "description": "Common utilities",
13
13
  "dependencies": {
14
14
  "cash-dom": "^8.1.1",
@@ -36,4 +36,4 @@
36
36
  "lint-fix": "eslint \"./src/**/*.ts\" --fix",
37
37
  "build-all": "npm --prefix ./../../js-api run build && npm run build"
38
38
  }
39
- }
39
+ }
package/src/expect.js CHANGED
@@ -6,8 +6,8 @@ export const defaulCheckersSeq = [
6
6
  { name: 'String', predicate: stringPredicate, checker: eqChecker },
7
7
  { name: 'Integer', predicate: integerPredicate, checker: eqChecker },
8
8
  { name: 'Float', predicate: floatPredicate, checker: floatChecker },
9
+ { name: 'ArrayBuffer', predicate: arrayBufferPredicate, checker: arrayBufferChecker },
9
10
  { name: 'Array', predicate: arrayPredicate, checker: arrayChecker },
10
- { name: 'FuncCall', predicate: funccallPredicate, checker: funccallChecker },
11
11
  { name: 'DataFrame', predicate: dataframePredicate, checker: dataframeChecker },
12
12
  { name: 'Object', predicate: objectPredicate, checker: objectChecker },
13
13
  ];
@@ -99,12 +99,11 @@ function dataframeChecker(actual, expected, _state, checkDeep) {
99
99
  }
100
100
  return errors;
101
101
  }
102
- function funccallPredicate(actual, expected) {
103
- return (actual instanceof DG.FuncCall && expected instanceof DG.FuncCall);
102
+ function arrayBufferPredicate(actual, expected) {
103
+ return (actual instanceof ArrayBuffer && expected instanceof ArrayBuffer);
104
104
  }
105
- function funccallChecker(actual, expected, _state, checkDeep) {
106
- checkDeep(['inputs'], [...actual.inputs.entries()], [...expected.inputs.entries()]);
107
- checkDeep(['outputs'], [...actual.outputs.entries()], [...expected.outputs.entries()]);
105
+ function arrayBufferChecker(actual, expected, state, checkDeep) {
106
+ return arrayChecker(Array.from(new Uint8Array(actual)), Array.from(new Uint8Array(expected)), state, checkDeep);
108
107
  }
109
108
  function objectPredicate(actual, expected) {
110
109
  return (typeof actual === 'object' && typeof expected === 'object');
@@ -187,4 +186,4 @@ class ExpectRunner {
187
186
  return msg;
188
187
  }
189
188
  }
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhwZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFvQnRDLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBa0I7SUFDOUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBQztJQUM5RCxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDO0lBQy9ELEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUM7SUFDaEUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDO0lBQ2xFLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUM7SUFDakUsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBQztJQUNqRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUM7SUFDMUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUM7SUFDN0UsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBQztDQUNyRSxDQUFDO0FBR0YsbUNBQW1DO0FBQ25DLE1BQU0sT0FBTyxXQUFZLFNBQVEsS0FBSztDQUFHO0FBV3pDLGFBQWE7QUFD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QU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7O1lBQ3RDLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBQSxDQUFDLENBQUMsSUFBSSxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG4vLyBjdXN0b20gY2hlY2tlcnMgaW50ZXJmYWNlcyBBUEkgZm9yIGFkZGluZyBjdXN0b20gY2hlY2tzXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrZXJFcnJvciB7XG4gIHBhdGg/OiBzdHJpbmdbXSxcbiAgbXNnOiBzdHJpbmcsXG59XG5cbmV4cG9ydCB0eXBlIE5lc3RlZENoZWNrZXIgPSAocGF0aDogc3RyaW5nW10sIGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSA9PiB2b2lkXG5leHBvcnQgdHlwZSBFeHBlY3RQcmVkaWNhdGUgPSAoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpID0+IGJvb2xlYW47XG5leHBvcnQgdHlwZSBFeHBlY3RDaGVja2VyID1cbiAgKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55LCBzdGF0ZTogUmVhZG9ubHk8RXhwZWN0UnVubmVyU3RhdGU+LCBjaGVja05lc3RlZDogTmVzdGVkQ2hlY2tlcikgPT4gQ2hlY2tlckVycm9yW10gfCB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrZXJJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwcmVkaWNhdGU6IEV4cGVjdFByZWRpY2F0ZTtcbiAgY2hlY2tlcjogRXhwZWN0Q2hlY2tlcjtcbn1cblxuXG4vLyBkZWZhdWx0IGNoZWNrZXJzIHNlcXVlbmNlLCBvcmRlciBtYXR0ZXJzIVxuZXhwb3J0IGNvbnN0IGRlZmF1bENoZWNrZXJzU2VxOiBDaGVja2VySXRlbVtdID0gW1xuICB7bmFtZTogJ051bGwnLCBwcmVkaWNhdGU6IG51bGxQcmVkaWNhdGUsIGNoZWNrZXI6IG51bGxDaGVja2VyfSxcbiAge25hbWU6ICdCb29sZWFuJywgcHJlZGljYXRlOiBib29sUHJlZGljYXRlLCBjaGVja2VyOiBlcUNoZWNrZXJ9LFxuICB7bmFtZTogJ1N0cmluZycsIHByZWRpY2F0ZTogc3RyaW5nUHJlZGljYXRlLCBjaGVja2VyOiBlcUNoZWNrZXJ9LFxuICB7bmFtZTogJ0ludGVnZXInLCBwcmVkaWNhdGU6IGludGVnZXJQcmVkaWNhdGUsIGNoZWNrZXI6IGVxQ2hlY2tlcn0sXG4gIHtuYW1lOiAnRmxvYXQnLCBwcmVkaWNhdGU6IGZsb2F0UHJlZGljYXRlLCBjaGVja2VyOiBmbG9hdENoZWNrZXJ9LFxuICB7bmFtZTogJ0FycmF5JywgcHJlZGljYXRlOiBhcnJheVByZWRpY2F0ZSwgY2hlY2tlcjogYXJyYXlDaGVja2VyfSxcbiAge25hbWU6ICdGdW5jQ2FsbCcsIHByZWRpY2F0ZTogZnVuY2NhbGxQcmVkaWNhdGUsIGNoZWNrZXI6IGZ1bmNjYWxsQ2hlY2tlcn0sXG4gIHtuYW1lOiAnRGF0YUZyYW1lJywgcHJlZGljYXRlOiBkYXRhZnJhbWVQcmVkaWNhdGUsIGNoZWNrZXI6IGRhdGFmcmFtZUNoZWNrZXJ9LFxuICB7bmFtZTogJ09iamVjdCcsIHByZWRpY2F0ZTogb2JqZWN0UHJlZGljYXRlLCBjaGVja2VyOiBvYmplY3RDaGVja2VyfSxcbl07XG5cblxuLy8gY3VzdG9tIGVycm9yIGNsYXNzLCBqdXN0IGluIGNhc2VcbmV4cG9ydCBjbGFzcyBFeHBlY3RFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbi8vIGV4cGVjdERlZXBFcXVhbCBvcHRpb25zXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVjdERlZXBFcXVhbE9wdGlvbnMge1xuICBmbG9hdFRvbGVyYW5jZT86IG51bWJlcixcbiAgbWF4RXJyb3JzUmVwb3J0PzogbnVtYmVyLFxuICBtYXhEZXB0aD86IG51bWJlcixcbiAgcHJlZml4Pzogc3RyaW5nLFxuICBjaGVja2Vyc1NlcT86IENoZWNrZXJJdGVtW10sXG59XG5cbi8vIHB1YmxpYyBBUElcbmV4cG9ydCBmdW5jdGlvbiBleHBlY3REZWVwRXF1YWwoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnksIG9wdGlvbnM/OiBFeHBlY3REZWVwRXF1YWxPcHRpb25zKTogdm9pZCB7XG4gIGNvbnN0IHJ1bm5lciA9IG5ldyBFeHBlY3RSdW5uZXIob3B0aW9ucyk7XG4gIHJ1bm5lci5ydW4oYWN0dWFsLCBleHBlY3RlZCk7XG59XG5cbi8vIGltcGxlbWVudGF0aW9uIGRldGFpbHNcbmV4cG9ydCBpbnRlcmZhY2UgRXhwZWN0UnVubmVyU3RhdGUge1xuICBvcHRpb25zOiBSZXF1aXJlZDxFeHBlY3REZWVwRXF1YWxPcHRpb25zPjtcbiAgZXJyb3JzOiBDaGVja2VyRXJyb3JbXTtcbiAgY3VycmVudFBhdGg6IHN0cmluZ1tdO1xufVxuXG5cbmZ1bmN0aW9uIG51bGxQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIGFjdHVhbCA9PSBudWxsICYmIGV4cGVjdGVkID09IG51bGw7XG59XG5cbmZ1bmN0aW9uIG51bGxDaGVja2VyKCkge1xuICByZXR1cm47XG59XG5cblxuZnVuY3Rpb24gaW50ZWdlclByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKE51bWJlci5pc0ludGVnZXIoYWN0dWFsKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKGV4cGVjdGVkKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1ByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKHR5cGVvZiBhY3R1YWwgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycpO1xufVxuXG5mdW5jdGlvbiBib29sUHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIGFjdHVhbCA9PT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiBleHBlY3RlZCA9PT0gJ2Jvb2xlYW4nKTtcbn1cblxuZnVuY3Rpb24gZXFDaGVja2VyKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIGNvbnN0IGFyZUVxdWFsID0gYWN0dWFsID09PSBleHBlY3RlZDtcbiAgaWYgKCFhcmVFcXVhbCkge1xuICAgIGNvbnN0IG1zZyA9IGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfWA7XG4gICAgcmV0dXJuIFt7bXNnfV07XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBmbG9hdFByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKHR5cGVvZiBhY3R1YWwgPT09ICdudW1iZXInICYmIHR5cGVvZiBleHBlY3RlZCA9PT0gJ251bWJlcicpO1xufVxuXG5mdW5jdGlvbiBmbG9hdENoZWNrZXIoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnksIHN0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4pOiBDaGVja2VyRXJyb3JbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICgoYWN0dWFsID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAoaXNOYU4oYWN0dWFsKSAmJiBpc05hTihleHBlY3RlZCkpKVxuICAgIHJldHVybjtcbiAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCBzdGF0ZS5vcHRpb25zLmZsb2F0VG9sZXJhbmNlO1xuICBpZiAoIWFyZUVxdWFsKSB7XG4gICAgY29uc3QgbXNnID0gYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3N0YXRlLm9wdGlvbnMuZmxvYXRUb2xlcmFuY2V9KWA7XG4gICAgcmV0dXJuIFt7bXNnfV07XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBhcnJheVByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKGFjdHVhbCBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgQXJyYXkpO1xufVxuXG5mdW5jdGlvbiBhcnJheUNoZWNrZXIoYWN0dWFsOiBhbnlbXSwgZXhwZWN0ZWQ6IGFueVtdLFxuICBfc3RhdGU6IFJlYWRvbmx5PEV4cGVjdFJ1bm5lclN0YXRlPiwgY2hlY2tEZWVwOiBOZXN0ZWRDaGVja2VyKTogQ2hlY2tlckVycm9yW10ge1xuICBjb25zdCBlcnJvcnM6IENoZWNrZXJFcnJvcltdID0gW107XG4gIGlmIChhY3R1YWwubGVuZ3RoICE9PSBleHBlY3RlZC5sZW5ndGgpIHtcbiAgICBjb25zdCBlcnIgPSB7bXNnOiBgQXJyYXlzIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3RoOiBhY3R1YWwgYXJyYXkgbGVuZ3RoIGlzICR7YWN0dWFsLmxlbmd0aH0gYCArXG4gICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkLmxlbmd0aH1gfTtcbiAgICBlcnJvcnMucHVzaChlcnIpO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKVxuICAgIGNoZWNrRGVlcChbU3RyaW5nKGkpXSwgYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuXG5mdW5jdGlvbiBkYXRhZnJhbWVQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIChhY3R1YWwgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUpO1xufVxuXG5mdW5jdGlvbiBkYXRhZnJhbWVDaGVja2VyKGFjdHVhbDogREcuRGF0YUZyYW1lLCBleHBlY3RlZDogREcuRGF0YUZyYW1lLFxuICBfc3RhdGU6IFJlYWRvbmx5PEV4cGVjdFJ1bm5lclN0YXRlPiwgY2hlY2tEZWVwOiBOZXN0ZWRDaGVja2VyKTogQ2hlY2tlckVycm9yW10ge1xuICBjb25zdCBlcnJvcnM6IENoZWNrZXJFcnJvcltdID0gW107XG4gIGlmIChhY3R1YWwucm93Q291bnQgIT09IGV4cGVjdGVkLnJvd0NvdW50KSB7XG4gICAgY29uc3QgZXJyID0ge21zZzogYERhdGFmcmFtZXMgaGFzIGRpZmZlcmVudCByb3cgY291bnQ6IGFjdHVhbCByb3cgY291bnQgaXMgJHthY3R1YWwucm93Q291bnR9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCByb3cgY291bnQgaXMgJHtleHBlY3RlZC5yb3dDb3VudH1gfTtcbiAgICBlcnJvcnMucHVzaChlcnIpO1xuICB9XG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGV4cGVjdGVkLmNvbHVtbnMpIHtcbiAgICBjb25zdCBhY3R1YWxDb2x1bW4gPSBhY3R1YWwuY29sdW1ucy5ieU5hbWUoY29sdW1uLm5hbWUpO1xuICAgIGlmICghYWN0dWFsQ29sdW1uKSB7XG4gICAgICBjb25zdCBlcnIgPSB7bXNnOiBgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGB9O1xuICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT09IGNvbHVtbi50eXBlKSB7XG4gICAgICBjb25zdCBlcnIgPSB7bXNnOiBgQ29sdW1uICR7Y29sdW1uLm5hbWV9IHR5cGUgZXhwZWN0ZWQgJHtjb2x1bW4udHlwZX0gZ290ICR7YWN0dWFsQ29sdW1uLnR5cGV9YH07XG4gICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWQucm93Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxDb2x1bW4uZ2V0KGkpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICBjaGVja0RlZXAoW2NvbHVtbi5uYW1lLCBTdHJpbmcoaSldLCBhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvcnM7XG59XG5cblxuZnVuY3Rpb24gZnVuY2NhbGxQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIChhY3R1YWwgaW5zdGFuY2VvZiBERy5GdW5jQ2FsbCAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERHLkZ1bmNDYWxsKTtcbn1cblxuZnVuY3Rpb24gZnVuY2NhbGxDaGVja2VyKGFjdHVhbDogREcuRnVuY0NhbGwsIGV4cGVjdGVkOiBERy5GdW5jQ2FsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICBfc3RhdGU6IFJlYWRvbmx5PEV4cGVjdFJ1bm5lclN0YXRlPiwgY2hlY2tEZWVwOiBOZXN0ZWRDaGVja2VyKSB7XG4gIGNoZWNrRGVlcChbJ2lucHV0cyddLCBbLi4uYWN0dWFsLmlucHV0cy5lbnRyaWVzKCldLCBbLi4uZXhwZWN0ZWQuaW5wdXRzLmVudHJpZXMoKV0pO1xuICBjaGVja0RlZXAoWydvdXRwdXRzJ10sIFsuLi5hY3R1YWwub3V0cHV0cy5lbnRyaWVzKCldLCBbLi4uZXhwZWN0ZWQub3V0cHV0cy5lbnRyaWVzKCldKTtcbn1cblxuXG5mdW5jdGlvbiBvYmplY3RQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuICh0eXBlb2YgYWN0dWFsID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZXhwZWN0ZWQgPT09ICdvYmplY3QnKTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0Q2hlY2tlcihhY3R1YWw6IFJlY29yZDxhbnksIGFueT4sIGV4cGVjdGVkOiBSZWNvcmQ8YW55LCBhbnk+LFxuICBfc3RhdGU6IFJlYWRvbmx5PEV4cGVjdFJ1bm5lclN0YXRlPiwgY2hlY2tEZWVwOiBOZXN0ZWRDaGVja2VyKTogQ2hlY2tlckVycm9yW10ge1xuICBjb25zdCBlcnJvcnM6IENoZWNrZXJFcnJvcltdID0gW107XG4gIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbFtleHBlY3RlZEtleV07XG4gICAgY2hlY2tEZWVwKFtleHBlY3RlZEtleV0sIGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgfVxuICByZXR1cm4gZXJyb3JzO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogUmVxdWlyZWQ8RXhwZWN0RGVlcEVxdWFsT3B0aW9ucz4gPSB7XG4gIGZsb2F0VG9sZXJhbmNlOiAwLjAwMSxcbiAgbWF4RXJyb3JzUmVwb3J0OiA1LFxuICBtYXhEZXB0aDogMTI4LFxuICBjaGVja2Vyc1NlcTogZGVmYXVsQ2hlY2tlcnNTZXEsXG4gIHByZWZpeDogJycsXG59O1xuXG5cbmNsYXNzIEV4cGVjdFJ1bm5lciB7XG4gIHByaXZhdGUgb3B0aW9uczogUmVxdWlyZWQ8RXhwZWN0RGVlcEVxdWFsT3B0aW9ucz47XG4gIHByaXZhdGUgc3RhdGU6IEV4cGVjdFJ1bm5lclN0YXRlO1xuXG4gIGNvbnN0cnVjdG9yKG9wczogRXhwZWN0RGVlcEVxdWFsT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5vcHRpb25zID0gey4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHN9O1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBlcnJvcnM6IFtdLFxuICAgICAgY3VycmVudFBhdGg6IFtdLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcnVuKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5tYXRjaENoZWNrZXIoYWN0dWFsLCBleHBlY3RlZCk7XG4gICAgdGhpcy5jaGVja0Vycm9yc0xpbWl0KDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0RlZXAocGF0aDogc3RyaW5nW10sIGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gICAgY29uc3QgcGF0aExlbmd0aCA9IHBhdGgubGVuZ3RoO1xuICAgIHRoaXMuc3RhdGUuY3VycmVudFBhdGgucHVzaCguLi5wYXRoKTtcbiAgICBpZiAodGhpcy5zdGF0ZS5jdXJyZW50UGF0aC5sZW5ndGggPiB0aGlzLm9wdGlvbnMubWF4RGVwdGgpXG4gICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IoYE1heCBkZXB0aCAke3RoaXMub3B0aW9ucy5tYXhEZXB0aH0gaXMgZXhjZWVkZWQsIHBvdGVudGlhbGx5IGEgY2lyY3VsYXIgc3RydWN0dXJlYCk7XG5cbiAgICB0aGlzLm1hdGNoQ2hlY2tlcihhY3R1YWwsIGV4cGVjdGVkKTtcbiAgICB0aGlzLnN0YXRlLmN1cnJlbnRQYXRoLnNwbGljZSgtcGF0aExlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIG1hdGNoQ2hlY2tlcihhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qge3ByZWRpY2F0ZSwgY2hlY2tlcn0gb2YgdGhpcy5vcHRpb25zLmNoZWNrZXJzU2VxKSB7XG4gICAgICBpZiAocHJlZGljYXRlKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gY2hlY2tlcihhY3R1YWwsIGV4cGVjdGVkLCB0aGlzLnN0YXRlLCB0aGlzLmNoZWNrRGVlcC5iaW5kKHRoaXMpKTtcbiAgICAgICAgaWYgKGVycm9ycylcbiAgICAgICAgICBlcnJvcnMubWFwKChlKSA9PiB0aGlzLmFkZEVycm9yKGUpKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmb3VuZCkge1xuICAgICAgY29uc3QgZXJyID0ge21zZzogYFR5cGUgbWlzbWF0Y2ggb3Igbm8gY2hlY2tlciBkZWZpbmVkOiBleHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfWB9O1xuICAgICAgdGhpcy5hZGRFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRXJyb3IoZXJyOiBDaGVja2VyRXJyb3IpOiB2b2lkIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IFsuLi4odGhpcy5zdGF0ZS5jdXJyZW50UGF0aCA/PyBbXSksIC4uLihlcnIucGF0aCA/PyBbXSldO1xuICAgIGNvbnN0IGZlcnI6IENoZWNrZXJFcnJvciA9IHtcbiAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgICAgbXNnOiBlcnIubXNnLFxuICAgIH07XG4gICAgdGhpcy5zdGF0ZS5lcnJvcnMucHVzaChmZXJyKTtcbiAgICB0aGlzLmNoZWNrRXJyb3JzTGltaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tFcnJvcnNMaW1pdChsaW1pdCA9IHRoaXMub3B0aW9ucy5tYXhFcnJvcnNSZXBvcnQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5lcnJvcnMubGVuZ3RoID4gbGltaXQpIHtcbiAgICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMubWFrZVJlcG9ydCgpO1xuICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKHJlcG9ydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYWtlUmVwb3J0KCkge1xuICAgIGNvbnN0IG1zZyA9IHRoaXMuc3RhdGUuZXJyb3JzLm1hcCgoZSkgPT4ge1xuICAgICAgY29uc3QgcHJlZml4ID0gKGUucGF0aCA/PyBbXSkubWFwKChhKSA9PiBgWycke1N0cmluZyhhKX0nXWApLmpvaW4oJy4nKTtcbiAgICAgIGNvbnN0IG1zZyA9IHByZWZpeCA/IGAke3ByZWZpeH06ICR7ZS5tc2d9YCA6IGUubXNnO1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmaXggPyBgJHt0aGlzLm9wdGlvbnMucHJlZml4fTogJHttc2d9YCA6IG1zZztcbiAgICB9KS5zbGljZSgwLCB0aGlzLm9wdGlvbnMubWF4RXJyb3JzUmVwb3J0KS5qb2luKCdcXG4nKTtcbiAgICByZXR1cm4gbXNnO1xuICB9XG59XG4iXX0=
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhwZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFvQnRDLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBa0I7SUFDOUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBQztJQUM5RCxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDO0lBQy9ELEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUM7SUFDaEUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDO0lBQ2xFLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUM7SUFDakUsRUFBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUM7SUFDbkYsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBQztJQUNqRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBQztJQUM3RSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDO0NBQ3JFLENBQUM7QUFHRixtQ0FBbUM7QUFDbkMsTUFBTSxPQUFPLFdBQVksU0FBUSxLQUFLO0NBQUc7QUFXekMsYUFBYTtB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QUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs7WUFDdEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFBLENBQUMsQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbi8vIGN1c3RvbSBjaGVja2VycyBpbnRlcmZhY2VzIEFQSSBmb3IgYWRkaW5nIGN1c3RvbSBjaGVja3NcbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tlckVycm9yIHtcbiAgcGF0aD86IHN0cmluZ1tdLFxuICBtc2c6IHN0cmluZyxcbn1cblxuZXhwb3J0IHR5cGUgTmVzdGVkQ2hlY2tlciA9IChwYXRoOiBzdHJpbmdbXSwgYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpID0+IHZvaWRcbmV4cG9ydCB0eXBlIEV4cGVjdFByZWRpY2F0ZSA9IChhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkgPT4gYm9vbGVhbjtcbmV4cG9ydCB0eXBlIEV4cGVjdENoZWNrZXIgPVxuICAoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnksIHN0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrTmVzdGVkOiBOZXN0ZWRDaGVja2VyKSA9PiBDaGVja2VyRXJyb3JbXSB8IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tlckl0ZW0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHByZWRpY2F0ZTogRXhwZWN0UHJlZGljYXRlO1xuICBjaGVja2VyOiBFeHBlY3RDaGVja2VyO1xufVxuXG5cbi8vIGRlZmF1bHQgY2hlY2tlcnMgc2VxdWVuY2UsIG9yZGVyIG1hdHRlcnMhXG5leHBvcnQgY29uc3QgZGVmYXVsQ2hlY2tlcnNTZXE6IENoZWNrZXJJdGVtW10gPSBbXG4gIHtuYW1lOiAnTnVsbCcsIHByZWRpY2F0ZTogbnVsbFByZWRpY2F0ZSwgY2hlY2tlcjogbnVsbENoZWNrZXJ9LFxuICB7bmFtZTogJ0Jvb2xlYW4nLCBwcmVkaWNhdGU6IGJvb2xQcmVkaWNhdGUsIGNoZWNrZXI6IGVxQ2hlY2tlcn0sXG4gIHtuYW1lOiAnU3RyaW5nJywgcHJlZGljYXRlOiBzdHJpbmdQcmVkaWNhdGUsIGNoZWNrZXI6IGVxQ2hlY2tlcn0sXG4gIHtuYW1lOiAnSW50ZWdlcicsIHByZWRpY2F0ZTogaW50ZWdlclByZWRpY2F0ZSwgY2hlY2tlcjogZXFDaGVja2VyfSxcbiAge25hbWU6ICdGbG9hdCcsIHByZWRpY2F0ZTogZmxvYXRQcmVkaWNhdGUsIGNoZWNrZXI6IGZsb2F0Q2hlY2tlcn0sXG4gIHtuYW1lOiAnQXJyYXlCdWZmZXInLCBwcmVkaWNhdGU6IGFycmF5QnVmZmVyUHJlZGljYXRlLCBjaGVja2VyOiBhcnJheUJ1ZmZlckNoZWNrZXJ9LFxuICB7bmFtZTogJ0FycmF5JywgcHJlZGljYXRlOiBhcnJheVByZWRpY2F0ZSwgY2hlY2tlcjogYXJyYXlDaGVja2VyfSxcbiAge25hbWU6ICdEYXRhRnJhbWUnLCBwcmVkaWNhdGU6IGRhdGFmcmFtZVByZWRpY2F0ZSwgY2hlY2tlcjogZGF0YWZyYW1lQ2hlY2tlcn0sXG4gIHtuYW1lOiAnT2JqZWN0JywgcHJlZGljYXRlOiBvYmplY3RQcmVkaWNhdGUsIGNoZWNrZXI6IG9iamVjdENoZWNrZXJ9LFxuXTtcblxuXG4vLyBjdXN0b20gZXJyb3IgY2xhc3MsIGp1c3QgaW4gY2FzZVxuZXhwb3J0IGNsYXNzIEV4cGVjdEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLy8gZXhwZWN0RGVlcEVxdWFsIG9wdGlvbnNcbmV4cG9ydCBpbnRlcmZhY2UgRXhwZWN0RGVlcEVxdWFsT3B0aW9ucyB7XG4gIGZsb2F0VG9sZXJhbmNlPzogbnVtYmVyLFxuICBtYXhFcnJvcnNSZXBvcnQ/OiBudW1iZXIsXG4gIG1heERlcHRoPzogbnVtYmVyLFxuICBwcmVmaXg/OiBzdHJpbmcsXG4gIGNoZWNrZXJzU2VxPzogQ2hlY2tlckl0ZW1bXSxcbn1cblxuLy8gcHVibGljIEFQSVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdERlZXBFcXVhbChhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSwgb3B0aW9ucz86IEV4cGVjdERlZXBFcXVhbE9wdGlvbnMpOiB2b2lkIHtcbiAgY29uc3QgcnVubmVyID0gbmV3IEV4cGVjdFJ1bm5lcihvcHRpb25zKTtcbiAgcnVubmVyLnJ1bihhY3R1YWwsIGV4cGVjdGVkKTtcbn1cblxuLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsc1xuZXhwb3J0IGludGVyZmFjZSBFeHBlY3RSdW5uZXJTdGF0ZSB7XG4gIG9wdGlvbnM6IFJlcXVpcmVkPEV4cGVjdERlZXBFcXVhbE9wdGlvbnM+O1xuICBlcnJvcnM6IENoZWNrZXJFcnJvcltdO1xuICBjdXJyZW50UGF0aDogc3RyaW5nW107XG59XG5cblxuZnVuY3Rpb24gbnVsbFByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gYWN0dWFsID09IG51bGwgJiYgZXhwZWN0ZWQgPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gbnVsbENoZWNrZXIoKSB7XG4gIHJldHVybjtcbn1cblxuXG5mdW5jdGlvbiBpbnRlZ2VyUHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAoTnVtYmVyLmlzSW50ZWdlcihhY3R1YWwpICYmIE51bWJlci5pc0ludGVnZXIoZXhwZWN0ZWQpKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nUHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIGFjdHVhbCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIGJvb2xQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuICh0eXBlb2YgYWN0dWFsID09PSAnYm9vbGVhbicgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnYm9vbGVhbicpO1xufVxuXG5mdW5jdGlvbiBlcUNoZWNrZXIoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgY29uc3QgYXJlRXF1YWwgPSBhY3R1YWwgPT09IGV4cGVjdGVkO1xuICBpZiAoIWFyZUVxdWFsKSB7XG4gICAgY29uc3QgbXNnID0gYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YDtcbiAgICByZXR1cm4gW3ttc2d9XTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGZsb2F0UHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIGFjdHVhbCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnbnVtYmVyJyk7XG59XG5cbmZ1bmN0aW9uIGZsb2F0Q2hlY2tlcihhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSwgc3RhdGU6IFJlYWRvbmx5PEV4cGVjdFJ1bm5lclN0YXRlPik6IENoZWNrZXJFcnJvcltdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB8fFxuICAgIChpc05hTihhY3R1YWwpICYmIGlzTmFOKGV4cGVjdGVkKSkpXG4gICAgcmV0dXJuO1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHN0YXRlLm9wdGlvbnMuZmxvYXRUb2xlcmFuY2U7XG4gIGlmICghYXJlRXF1YWwpIHtcbiAgICBjb25zdCBtc2cgPSBgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7c3RhdGUub3B0aW9ucy5mbG9hdFRvbGVyYW5jZX0pYDtcbiAgICByZXR1cm4gW3ttc2d9XTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGFycmF5UHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAoYWN0dWFsIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBBcnJheSk7XG59XG5cbmZ1bmN0aW9uIGFycmF5Q2hlY2tlcihhY3R1YWw6IGFueVtdLCBleHBlY3RlZDogYW55W10sXG4gIF9zdGF0ZTogUmVhZG9ubHk8RXhwZWN0UnVubmVyU3RhdGU+LCBjaGVja0RlZXA6IE5lc3RlZENoZWNrZXIpOiBDaGVja2VyRXJyb3JbXSB7XG4gIGNvbnN0IGVycm9yczogQ2hlY2tlckVycm9yW10gPSBbXTtcbiAgaWYgKGFjdHVhbC5sZW5ndGggIT09IGV4cGVjdGVkLmxlbmd0aCkge1xuICAgIGNvbnN0IGVyciA9IHttc2c6IGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWwubGVuZ3RofSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgYXJyYXkgbGVuZ3RoIGlzICR7ZXhwZWN0ZWQubGVuZ3RofWB9O1xuICAgIGVycm9ycy5wdXNoKGVycik7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWwubGVuZ3RoOyBpKyspXG4gICAgY2hlY2tEZWVwKFtTdHJpbmcoaSldLCBhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG5cbmZ1bmN0aW9uIGRhdGFmcmFtZVByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKGFjdHVhbCBpbnN0YW5jZW9mIERHLkRhdGFGcmFtZSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERHLkRhdGFGcmFtZSk7XG59XG5cbmZ1bmN0aW9uIGRhdGFmcmFtZUNoZWNrZXIoYWN0dWFsOiBERy5EYXRhRnJhbWUsIGV4cGVjdGVkOiBERy5EYXRhRnJhbWUsXG4gIF9zdGF0ZTogUmVhZG9ubHk8RXhwZWN0UnVubmVyU3RhdGU+LCBjaGVja0RlZXA6IE5lc3RlZENoZWNrZXIpOiBDaGVja2VyRXJyb3JbXSB7XG4gIGNvbnN0IGVycm9yczogQ2hlY2tlckVycm9yW10gPSBbXTtcbiAgaWYgKGFjdHVhbC5yb3dDb3VudCAhPT0gZXhwZWN0ZWQucm93Q291bnQpIHtcbiAgICBjb25zdCBlcnIgPSB7bXNnOiBgRGF0YWZyYW1lcyBoYXMgZGlmZmVyZW50IHJvdyBjb3VudDogYWN0dWFsIHJvdyBjb3VudCBpcyAke2FjdHVhbC5yb3dDb3VudH0gYCArXG4gICAgICBgYW5kIGV4cGVjdGVkIHJvdyBjb3VudCBpcyAke2V4cGVjdGVkLnJvd0NvdW50fWB9O1xuICAgIGVycm9ycy5wdXNoKGVycik7XG4gIH1cbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgZXhwZWN0ZWQuY29sdW1ucykge1xuICAgIGNvbnN0IGFjdHVhbENvbHVtbiA9IGFjdHVhbC5jb2x1bW5zLmJ5TmFtZShjb2x1bW4ubmFtZSk7XG4gICAgaWYgKCFhY3R1YWxDb2x1bW4pIHtcbiAgICAgIGNvbnN0IGVyciA9IHttc2c6IGBDb2x1bW4gJHtjb2x1bW4ubmFtZX0gbm90IGZvdW5kYH07XG4gICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhY3R1YWxDb2x1bW4udHlwZSAhPT0gY29sdW1uLnR5cGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHttc2c6IGBDb2x1bW4gJHtjb2x1bW4ubmFtZX0gdHlwZSBleHBlY3RlZCAke2NvbHVtbi50eXBlfSBnb3QgJHthY3R1YWxDb2x1bW4udHlwZX1gfTtcbiAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBlY3RlZC5yb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGFjdHVhbENvbHVtbi5nZXQoaSk7XG4gICAgICBjb25zdCBleHBlY3RlZFZhbHVlID0gY29sdW1uLmdldChpKTtcbiAgICAgIGNoZWNrRGVlcChbY29sdW1uLm5hbWUsIFN0cmluZyhpKV0sIGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKGFjdHVhbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xufVxuXG5mdW5jdGlvbiBhcnJheUJ1ZmZlckNoZWNrZXIoYWN0dWFsOiBBcnJheUJ1ZmZlciwgZXhwZWN0ZWQ6IEFycmF5QnVmZmVyLFxuICBzdGF0ZTogUmVhZG9ubHk8RXhwZWN0UnVubmVyU3RhdGU+LCBjaGVja0RlZXA6IE5lc3RlZENoZWNrZXIpIHtcbiAgcmV0dXJuIGFycmF5Q2hlY2tlcihBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGFjdHVhbCkpLCBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGV4cGVjdGVkKSksIHN0YXRlLCBjaGVja0RlZXApO1xufVxuXG5cbmZ1bmN0aW9uIG9iamVjdFByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKHR5cGVvZiBhY3R1YWwgPT09ICdvYmplY3QnICYmIHR5cGVvZiBleHBlY3RlZCA9PT0gJ29iamVjdCcpO1xufVxuXG5mdW5jdGlvbiBvYmplY3RDaGVja2VyKGFjdHVhbDogUmVjb3JkPGFueSwgYW55PiwgZXhwZWN0ZWQ6IFJlY29yZDxhbnksIGFueT4sXG4gIF9zdGF0ZTogUmVhZG9ubHk8RXhwZWN0UnVubmVyU3RhdGU+LCBjaGVja0RlZXA6IE5lc3RlZENoZWNrZXIpOiBDaGVja2VyRXJyb3JbXSB7XG4gIGNvbnN0IGVycm9yczogQ2hlY2tlckVycm9yW10gPSBbXTtcbiAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICBjaGVja0RlZXAoW2V4cGVjdGVkS2V5XSwgYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICB9XG4gIHJldHVybiBlcnJvcnM7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBSZXF1aXJlZDxFeHBlY3REZWVwRXF1YWxPcHRpb25zPiA9IHtcbiAgZmxvYXRUb2xlcmFuY2U6IDAuMDAxLFxuICBtYXhFcnJvcnNSZXBvcnQ6IDUsXG4gIG1heERlcHRoOiAxMjgsXG4gIGNoZWNrZXJzU2VxOiBkZWZhdWxDaGVja2Vyc1NlcSxcbiAgcHJlZml4OiAnJyxcbn07XG5cblxuY2xhc3MgRXhwZWN0UnVubmVyIHtcbiAgcHJpdmF0ZSBvcHRpb25zOiBSZXF1aXJlZDxFeHBlY3REZWVwRXF1YWxPcHRpb25zPjtcbiAgcHJpdmF0ZSBzdGF0ZTogRXhwZWN0UnVubmVyU3RhdGU7XG5cbiAgY29uc3RydWN0b3Iob3BzOiBFeHBlY3REZWVwRXF1YWxPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7Li4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wc307XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGVycm9yczogW10sXG4gICAgICBjdXJyZW50UGF0aDogW10sXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBydW4oYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1hdGNoQ2hlY2tlcihhY3R1YWwsIGV4cGVjdGVkKTtcbiAgICB0aGlzLmNoZWNrRXJyb3JzTGltaXQoMCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRGVlcChwYXRoOiBzdHJpbmdbXSwgYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgICBjb25zdCBwYXRoTGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgdGhpcy5zdGF0ZS5jdXJyZW50UGF0aC5wdXNoKC4uLnBhdGgpO1xuICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnRQYXRoLmxlbmd0aCA+IHRoaXMub3B0aW9ucy5tYXhEZXB0aClcbiAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihgTWF4IGRlcHRoICR7dGhpcy5vcHRpb25zLm1heERlcHRofSBpcyBleGNlZWRlZCwgcG90ZW50aWFsbHkgYSBjaXJjdWxhciBzdHJ1Y3R1cmVgKTtcblxuICAgIHRoaXMubWF0Y2hDaGVja2VyKGFjdHVhbCwgZXhwZWN0ZWQpO1xuICAgIHRoaXMuc3RhdGUuY3VycmVudFBhdGguc3BsaWNlKC1wYXRoTGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hDaGVja2VyKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB7cHJlZGljYXRlLCBjaGVja2VyfSBvZiB0aGlzLm9wdGlvbnMuY2hlY2tlcnNTZXEpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYWN0dWFsLCBleHBlY3RlZCkpIHtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBjaGVja2VyKGFjdHVhbCwgZXhwZWN0ZWQsIHRoaXMuc3RhdGUsIHRoaXMuY2hlY2tEZWVwLmJpbmQodGhpcykpO1xuICAgICAgICBpZiAoZXJyb3JzKVxuICAgICAgICAgIGVycm9ycy5tYXAoKGUpID0+IHRoaXMuYWRkRXJyb3IoZSkpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICBjb25zdCBlcnIgPSB7bXNnOiBgVHlwZSBtaXNtYXRjaCBvciBubyBjaGVja2VyIGRlZmluZWQ6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YH07XG4gICAgICB0aGlzLmFkZEVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFcnJvcihlcnI6IENoZWNrZXJFcnJvcik6IHZvaWQge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gWy4uLih0aGlzLnN0YXRlLmN1cnJlbnRQYXRoID8/IFtdKSwgLi4uKGVyci5wYXRoID8/IFtdKV07XG4gICAgY29uc3QgZmVycjogQ2hlY2tlckVycm9yID0ge1xuICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgICBtc2c6IGVyci5tc2csXG4gICAgfTtcbiAgICB0aGlzLnN0YXRlLmVycm9ycy5wdXNoKGZlcnIpO1xuICAgIHRoaXMuY2hlY2tFcnJvcnNMaW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0Vycm9yc0xpbWl0KGxpbWl0ID0gdGhpcy5vcHRpb25zLm1heEVycm9yc1JlcG9ydCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmVycm9ycy5sZW5ndGggPiBsaW1pdCkge1xuICAgICAgY29uc3QgcmVwb3J0ID0gdGhpcy5tYWtlUmVwb3J0KCk7XG4gICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IocmVwb3J0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1ha2VSZXBvcnQoKSB7XG4gICAgY29uc3QgbXNnID0gdGhpcy5zdGF0ZS5lcnJvcnMubWFwKChlKSA9PiB7XG4gICAgICBjb25zdCBwcmVmaXggPSAoZS5wYXRoID8/IFtdKS5tYXAoKGEpID0+IGBbJyR7U3RyaW5nKGEpfSddYCkuam9pbignLicpO1xuICAgICAgY29uc3QgbXNnID0gcHJlZml4ID8gYCR7cHJlZml4fTogJHtlLm1zZ31gIDogZS5tc2c7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnByZWZpeCA/IGAke3RoaXMub3B0aW9ucy5wcmVmaXh9OiAke21zZ31gIDogbXNnO1xuICAgIH0pLnNsaWNlKDAsIHRoaXMub3B0aW9ucy5tYXhFcnJvcnNSZXBvcnQpLmpvaW4oJ1xcbicpO1xuICAgIHJldHVybiBtc2c7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"json-serialization.d.ts","sourceRoot":"","sources":["json-serialization.ts"],"names":[],"mappings":"AAOA,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,SAAI,UAc5C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,OAKtC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,OAE5C;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAQjD"}
1
+ {"version":3,"file":"json-serialization.d.ts","sourceRoot":"","sources":["json-serialization.ts"],"names":[],"mappings":"AAOA,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,SAAI,UAoB5C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,OAKtC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,OAE5C;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAUjD"}
@@ -10,6 +10,12 @@ export function serialize(obj, space = 2) {
10
10
  value: Array.from(value.toByteArray())
11
11
  };
12
12
  }
13
+ if (value instanceof ArrayBuffer) {
14
+ return {
15
+ [customTypeKey]: 'ArrayBuffer',
16
+ value: Array.from(new Uint8Array(value))
17
+ };
18
+ }
13
19
  return value;
14
20
  }, space);
15
21
  }
@@ -25,8 +31,10 @@ export function transform(_key, value) {
25
31
  switch (value[customTypeKey]) {
26
32
  case 'DataFrame':
27
33
  return DG.DataFrame.fromByteArray(new Uint8Array(value.value));
34
+ case 'ArrayBuffer':
35
+ return new Uint8Array(value.value).buffer;
28
36
  }
29
37
  }
30
38
  return value;
31
39
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zZXJpYWxpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsianNvbi1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsaUVBQWlFO0FBQ2pFLGlFQUFpRTtBQUVqRSxNQUFNLGFBQWEsR0FBRyw4QkFBOEIsQ0FBQztBQUVyRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUMzQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQ25CLEdBQUcsRUFDSCxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNkLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQyxTQUFTLEVBQUU7WUFDakMsT0FBTztnQkFDTCxDQUFDLGFBQWEsQ0FBQyxFQUFFLFdBQVc7Z0JBQzVCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN2QyxDQUFDO1NBQ0g7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsRUFDRCxLQUFLLENBQ04sQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVc7SUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLEdBQUcsRUFDSCxTQUFTLENBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBUTtJQUMzQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELHNDQUFzQztBQUN0QyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVksRUFBRSxLQUFVO0lBQ2hELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQ2hELFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzlCLEtBQUssV0FBVztnQkFDZCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO0tBQ0Y7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG4vLyBTdXBwb3J0IGZvciBqc29uIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIG9mIG9iamVjdHMgdGhhdFxuLy8gaW5jbHVkZSBEYXRhRnJhbWVzLiBOb3QgZWZmaWNpZW50LCBpbnRlbmRlZCBmb3Igd3JpdGluZyB0ZXN0cy5cblxuY29uc3QgY3VzdG9tVHlwZUtleSA9ICdfREdfQ1VTVE9NX1NFUklBTElaRURfVE9LRU5fJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShvYmo6IGFueSwgc3BhY2UgPSAyKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBvYmosXG4gICAgKF9rZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICdEYXRhRnJhbWUnLFxuICAgICAgICAgIHZhbHVlOiBBcnJheS5mcm9tKHZhbHVlLnRvQnl0ZUFycmF5KCkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBzcGFjZVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemUob2JqOiBzdHJpbmcpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgb2JqLFxuICAgIHRyYW5zZm9ybVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlUcmFuc2Zvcm1hdGlvbnMob2JqOiBhbnkpIHtcbiAgcmV0dXJuIGRlc2VyaWFsaXplKEpTT04uc3RyaW5naWZ5KG9iaikpO1xufVxuXG4vLyBqdXN0IGFwcGx5IGRmIHRyYW5zZm9ybSBpZiB0aGUgZGF0YVxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybShfa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgaWYgKHZhbHVlICYmIHZhbHVlW2N1c3RvbVR5cGVLZXldICYmIHZhbHVlLnZhbHVlKSB7XG4gICAgc3dpdGNoICh2YWx1ZVtjdXN0b21UeXBlS2V5XSkge1xuICAgIGNhc2UgJ0RhdGFGcmFtZSc6XG4gICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21CeXRlQXJyYXkobmV3IFVpbnQ4QXJyYXkodmFsdWUudmFsdWUpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zZXJpYWxpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsianNvbi1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsaUVBQWlFO0FBQ2pFLGlFQUFpRTtBQUVqRSxNQUFNLGFBQWEsR0FBRyw4QkFBOEIsQ0FBQztBQUVyRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUMzQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQ25CLEdBQUcsRUFDSCxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNkLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQyxTQUFTLEVBQUU7WUFDakMsT0FBTztnQkFDTCxDQUFDLGFBQWEsQ0FBQyxFQUFFLFdBQVc7Z0JBQzVCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN2QyxDQUFDO1NBQ0g7UUFDRCxJQUFJLEtBQUssWUFBWSxXQUFXLEVBQUU7WUFDaEMsT0FBTztnQkFDTCxDQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQWE7Z0JBQzlCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pDLENBQUM7U0FDSDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxFQUNELEtBQUssQ0FDTixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBVztJQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsR0FBRyxFQUNILFNBQVMsQ0FDVixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxHQUFRO0lBQzNDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsc0NBQXNDO0FBQ3RDLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQVU7SUFDaEQsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7UUFDaEQsUUFBUSxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDOUIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakUsS0FBSyxhQUFhO2dCQUNoQixPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDM0M7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbi8vIFN1cHBvcnQgZm9yIGpzb24gc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gb2Ygb2JqZWN0cyB0aGF0XG4vLyBpbmNsdWRlIERhdGFGcmFtZXMuIE5vdCBlZmZpY2llbnQsIGludGVuZGVkIGZvciB3cml0aW5nIHRlc3RzLlxuXG5jb25zdCBjdXN0b21UeXBlS2V5ID0gJ19ER19DVVNUT01fU0VSSUFMSVpFRF9UT0tFTl8nO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKG9iajogYW55LCBzcGFjZSA9IDIpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgIG9iaixcbiAgICAoX2tleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERHLkRhdGFGcmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFtjdXN0b21UeXBlS2V5XTogJ0RhdGFGcmFtZScsXG4gICAgICAgICAgdmFsdWU6IEFycmF5LmZyb20odmFsdWUudG9CeXRlQXJyYXkoKSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2N1c3RvbVR5cGVLZXldOiAnQXJyYXlCdWZmZXInLFxuICAgICAgICAgIHZhbHVlOiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIHNwYWNlXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZShvYmo6IHN0cmluZykge1xuICByZXR1cm4gSlNPTi5wYXJzZShcbiAgICBvYmosXG4gICAgdHJhbnNmb3JtXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVRyYW5zZm9ybWF0aW9ucyhvYmo6IGFueSkge1xuICByZXR1cm4gZGVzZXJpYWxpemUoSlNPTi5zdHJpbmdpZnkob2JqKSk7XG59XG5cbi8vIGp1c3QgYXBwbHkgZGYgdHJhbnNmb3JtIGlmIHRoZSBkYXRhXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtKF9rZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICBpZiAodmFsdWUgJiYgdmFsdWVbY3VzdG9tVHlwZUtleV0gJiYgdmFsdWUudmFsdWUpIHtcbiAgICBzd2l0Y2ggKHZhbHVlW2N1c3RvbVR5cGVLZXldKSB7XG4gICAgY2FzZSAnRGF0YUZyYW1lJzpcbiAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUJ5dGVBcnJheShuZXcgVWludDhBcnJheSh2YWx1ZS52YWx1ZSkpO1xuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzpcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh2YWx1ZS52YWx1ZSkuYnVmZmVyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG4iXX0=
@@ -27,6 +27,7 @@ export type ILineSeries = {
27
27
  drawArrows?: boolean;
28
28
  drawArrowsArr?: BitArray;
29
29
  visibility?: BitArray;
30
+ arrowSize?: number;
30
31
  };
31
32
  export declare class ScatterPlotLinesRenderer {
32
33
  sp: DG.ScatterPlotViewer;
@@ -1 +1 @@
1
- {"version":3,"file":"render-lines-on-sp.d.ts","sourceRoot":"","sources":["render-lines-on-sp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-lines-on-sp.d.ts","sourceRoot":"","sources":["render-lines-on-sp.ts"],"names":[],"mappings":"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"}
@@ -42,8 +42,11 @@ export class ScatterPlotLinesRenderer {
42
42
  this.visibility = (_a = lines.visibility) !== null && _a !== void 0 ? _a : new BitArray(this.lines.from.length);
43
43
  if (!lines.visibility)
44
44
  this.visibility.setAll(true, false);
45
+ if (lines.arrowSize)
46
+ this.arrowWidth = lines.arrowSize;
45
47
  this.canvas.onmousedown = (event) => {
46
- this.lineClicked.next({ x: event.clientX, y: event.clientY, id: this.mouseOverLineId });
48
+ if (this.mouseOverLineId !== -1)
49
+ this.lineClicked.next({ x: event.clientX, y: event.clientY, id: this.mouseOverLineId });
47
50
  };
48
51
  this.canvas.onmousemove = (event) => {
49
52
  this.mouseOverLineId = this.checkCoordsOnLine(event.offsetX, event.offsetY);
@@ -320,4 +323,4 @@ export class ScatterPlotLinesRenderer {
320
323
  path.lineTo(arrowEndX - (this.arrowWidth * Math.sin(arrowAngle + Math.PI / 10)), arrowEndY - (this.arrowWidth * Math.cos(arrowAngle + Math.PI / 10)));
321
324
  }
322
325
  }
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWxpbmVzLW9uLXNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVuZGVyLWxpbmVzLW9uLXNwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFFbkMsTUFBTSxDQUFOLElBQVksMkJBSVg7QUFKRCxXQUFZLDJCQUEyQjtJQUNuQyw0Q0FBYSxDQUFBO0lBQ2IsNENBQWEsQ0FBQTtJQUNiLGdEQUFpQixDQUFBO0FBQ3JCLENBQUMsRUFKVywyQkFBMkIsS0FBM0IsMkJBQTJCLFFBSXRDO0FBMkJELE1BQU0sT0FBTyx3QkFBd0I7SUFnQmpDLElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsRUFBVTtRQUN4QixJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxLQUFrQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsVUFBb0I7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFF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QUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pILE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3pFLENBQUM7SUFFRCx3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R0FBRyxTQUFTLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFDM0UsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUMzRSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnLi9iaXQtYXJyYXknO1xuXG5leHBvcnQgZW51bSBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUge1xuICAgIG5vbmUgPSAnbm9uZScsXG4gICAgYm9sZCA9ICdib2xkJyxcbiAgICBkYXNoZWQgPSAnZGFzaGVkJ1xufVxuXG50eXBlIE1hcmtlclNpemUgPSB7XG4gICAgc2l6ZUZyb206IG51bWJlcixcbiAgICBzaXplVG86IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBNb3VzZU92ZXJMaW5lRXZlbnQgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBpZDogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBJTGluZVNlcmllcyA9IHtcbiAgICBmcm9tOiBVaW50MzJBcnJheTtcbiAgICB0bzogVWludDMyQXJyYXk7XG4gICAgY29sb3I/OiBzdHJpbmc7ICAgICAgICAgICAgIC8vIGNvbW1vbiBjb2xvci4gVXNlIFtjb2xvcnNdIGlmIHlvdSBuZWVkIGluZGl2aWR1YWwgY29sb3JzIHBlciBsaW5lXG4gICAgY29sb3JzPzogc3RyaW5nW107ICAgICAgICAgIC8vIGxpbmUgY29sb3JzLiBJZiB0aGV5IGFyZSB0aGUgc2FtZSBmb3IgdGhlIHNlcmllcywgdXNlIFtjb2xvcl0gaW5zdGVhZC5cbiAgICB3aWR0aD86IG51bWJlcjsgICAgICAgICAgICAgLy8gY29tbW9uIHdpZHRoLiBVc2UgW2NvbG9yc10gaWYgeW91IG5lZWQgaW5kaXZpZHVhbCB3aWR0aHMgcGVyIGxpbmVcbiAgICB3aWR0aHM/OiBGbG9hdDMyQXJyYXk7ICAgICAgLy8gbGluZSB3aWR0aHMuIElmIHRoZXkgYXJlIHRoZSBzYW1lIGZvciB0aGUgc2VyaWVzLCB1c2UgW3dpZHRoXSBpbnN0ZWFkLlxuICAgIG9wYWNpdHk/OiBudW1iZXI7ICAgICAgICAgICAvLyBjb21tb24gb3BhY2l0eS4gVXNlIFtvcGFjaXRpZXNdIGlmIHlvdSBuZWVkIGluZGl2aWR1YWwgb3BhY2l0aWVzIHBlciBsaW5lXG4gICAgb3BhY2l0aWVzPzogRmxvYXQzMkFycmF5OyAgIC8vIGxpbmUgb3BhY2l0aWVzLiBJZiB0aGV5IGFyZSB0aGUgc2FtZSBmb3IgdGhlIHNlcmllcywgdXNlIFtvcGFjaXR5XSBpbnN0ZWFkXG4gICAgZHJhd0Fycm93cz86IGJvb2xlYW47ICAgICAgIC8vIGNvbW1vbiBwYXJhbWV0ZXIgdG8gZHJhdyBhcnJvd3MuIFVzZSBbZHJhd0Fycm93c0Fycl0gaWYgeW91IG5lZWQgdG8gZHJhdyBhcnJvd3Mgbm90IGZvciBlYWNoIGxpbmVcbiAgICBkcmF3QXJyb3dzQXJyPzogQml0QXJyYXk7ICAgLy8gaW5kaXZpZHVhbCBwYXJhbWV0ZXIgZm9yIGVhY2ggbGluZS4gSWYgdGhleSBhcmUgdGhlIHNhbWUgZm9yIHRoZSBzZXJpZXMsIHVzZSBbZHJhd0Fycm93c10gaW5zdGVhZFxuICAgIHZpc2liaWxpdHk/OiBCaXRBcnJheTsgICAgICAvLyBpbmRpdmlkdWFsIHBhcmFtZXRlciBmb3IgZWFjaCBsaW5lLiBTZXQgYml0IHRvIGZhbHNlIHRvIGhpZGUgdGhlIGxpbmUuXG59XG5cbmV4cG9ydCBjbGFzcyBTY2F0dGVyUGxvdExpbmVzUmVuZGVyZXIge1xuICAgIHNwOiBERy5TY2F0dGVyUGxvdFZpZXdlcjtcbiAgICB4QXhpc0NvbDogREcuQ29sdW1uO1xuICAgIHlBeGlzQ29sOiBERy5Db2x1bW47XG4gICAgX2N1cnJlbnRMaW5lSWR4ID0gLTE7XG4gICAgbGluZXMhOiBJTGluZVNlcmllcztcbiAgICBsaW5lQ2xpY2tlZCA9IG5ldyBTdWJqZWN0PE1vdXNlT3ZlckxpbmVFdmVudD4oKTtcbiAgICBsaW5lSG92ZXIgPSBuZXcgU3ViamVjdDxNb3VzZU92ZXJMaW5lRXZlbnQ+KCk7XG4gICAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICBtb3VzZU92ZXJMaW5lSWQgPSAtMTtcbiAgICBtdWx0aXBsZUxpbmVzQ291bnRzITogVWludDhBcnJheTtcbiAgICB2aXNpYmlsaXR5OiBCaXRBcnJheTtcbiAgICBjdXJyZW50TGluZVN0eWxlOiBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGU7XG4gICAgYXJyb3dXaWR0aCA9IDE1O1xuXG4gICAgZ2V0IGN1cnJlbnRMaW5lSWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRMaW5lSWR4O1xuICAgIH1cblxuICAgIHNldCBjdXJyZW50TGluZUlkKGlkOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGlkICE9PSB0aGlzLl9jdXJyZW50TGluZUlkeCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudExpbmVJZHggPSBpZDtcbiAgICAgICAgICAgIHRoaXMuc3AucmVuZGVyKHRoaXMuY3R4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldCBsaW5lc1RvUmVuZGVyKGxpbmVzOiBJTGluZVNlcmllcykge1xuICAgICAgICB0aGlzLnVwZGF0ZUxpbmVzKGxpbmVzKTtcbiAgICAgICAgdGhpcy5zcC5yZW5kZXIodGhpcy5jdHgpO1xuICAgIH1cblxuICAgIHNldCBsaW5lc1Zpc2liaWxpdHkodmlzaWJpbGl0eTogQml0QXJyYXkpIHtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgICAgdGhpcy5zcC5yZW5kZXIodGhpcy5jdHgpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHNwOiBERy5TY2F0dGVyUGxvdFZpZXdlciwgeEF4aXM6IHN0cmluZywgeUF4aXM6IHN0cmluZywgbGluZXM6IElMaW5lU2VyaWVzLFxuICAgICAgICBjdXJyZW50TGluZVN0eWxlID0gU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLm5vbmUpIHtcbiAgICAgICAgdGhpcy5zcCA9IHNwO1xuICAgICAgICB0aGlzLnhBeGlzQ29sID0gdGhpcy5zcC5kYXRhRnJhbWUhLmNvbHVtbnMuYnlOYW1lKHhBeGlzKTtcbiAgICAgICAgdGhpcy55QXhpc0NvbCA9IHRoaXMuc3AuZGF0YUZyYW1lIS5jb2x1bW5zLmJ5TmFtZSh5QXhpcyk7XG4gICAgICAgIHRoaXMuY2FudmFzID0gdGhpcy5zcC5nZXRJbmZvKClbJ2NhbnZhcyddO1xuICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgICAgICB0aGlzLmN1cnJlbnRMaW5lU3R5bGUgPSBjdXJyZW50TGluZVN0eWxlO1xuICAgICAgICB0aGlzLnVwZGF0ZUxpbmVzKGxpbmVzKTtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gbGluZXMudmlzaWJpbGl0eSA/PyBuZXcgQml0QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgICAgIGlmICghbGluZXMudmlzaWJpbGl0eSlcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eS5zZXRBbGwodHJ1ZSwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuY2FudmFzLm9ubW91c2Vkb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxpbmVDbGlja2VkLm5leHQoe3g6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFksIGlkOiB0aGlzLm1vdXNlT3ZlckxpbmVJZH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYW52YXMub25tb3VzZW1vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VPdmVyTGluZUlkID0gdGhpcy5jaGVja0Nvb3Jkc09uTGluZShldmVudC5vZmZzZXRYLCBldmVudC5vZmZzZXRZKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vdXNlT3ZlckxpbmVJZCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lSG92ZXIubmV4dCh7eDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSwgaWQ6IHRoaXMubW91c2VPdmVyTGluZUlkfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzcC5vbkV2ZW50KCdkNC1iZWZvcmUtZHJhdy1zY2VuZScpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChfOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckxpbmVzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVMaW5lcyhsaW5lczogSUxpbmVTZXJpZXMpIHtcbiAgICAgICAgdGhpcy5saW5lcyA9IGxpbmVzO1xuICAgICAgICB0aGlzLm11bHRpcGxlTGluZXNDb3VudHMgPSBuZXcgVWludDhBcnJheSh0aGlzLmxpbmVzLmZyb20ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVNdWx0aUxpbmVzSW5kaWNlcygpO1xuICAgIH1cblxuICAgIHJlbmRlckxpbmVzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzcExvb2sgPSB0aGlzLnNwLmdldE9wdGlvbnMoKS5sb29rO1xuICAgICAgICBjb25zdCBpbmRpdmlkdWFsTGluZVN0eWxlcyA9IHRoaXMubGluZXMuY29sb3JzIHx8IHRoaXMubGluZXMud2lkdGggfHwgdGhpcy5saW5lcy5vcGFjaXRpZXMgfHwgdGhpcy5saW5lcy5kcmF3QXJyb3dzQXJyO1xuICAgICAgICBpZiAoIWluZGl2aWR1YWxMaW5lU3R5bGVzKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB0aGlzLmxpbmVzLndpZHRoID8/IDE7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IGByZ2JhKCR7dGhpcy5saW5lcy5jb2xvciA/PyAnMCwxMjgsMCd9LCR7dGhpcy5saW5lcy5vcGFjaXR5ID8/IDF9KWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFya2VyU2l6ZUNvbCA9IHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSA/IHRoaXMuc3AuZGF0YUZyYW1lLmNvbChzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10pIDogbnVsbDtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5zcC5kYXRhRnJhbWUuZmlsdGVyO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZXMuZnJvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZpbHRlci5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSAmJiBmaWx0ZXIuZ2V0KHRoaXMubGluZXMudG9baV0pICYmIHRoaXMudmlzaWJpbGl0eS5nZXRCaXQoaSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGluZUxlbiA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzaXplRnJvbSwgc2l6ZVRvIH0gPSB0aGlzLmdldE1hcmtlcnNTaXplcyhzcExvb2ssIG1hcmtlclNpemVDb2wsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50RnJvbSA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLmZyb21baV0pLCB0aGlzLnlBeGlzQ29sLmdldCh0aGlzLmxpbmVzLmZyb21baV0pKTtcbiAgICAgICAgICAgICAgICBsZXQgYVggPSBwb2ludEZyb20/Lng7XG4gICAgICAgICAgICAgICAgbGV0IGFZID0gcG9pbnRGcm9tPy55O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50VG8gPSB0aGlzLnNwLndvcmxkVG9TY3JlZW4odGhpcy54QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSksIHRoaXMueUF4aXNDb2wuZ2V0KHRoaXMubGluZXMudG9baV0pKTtcbiAgICAgICAgICAgICAgICBsZXQgYlggPSBwb2ludFRvPy54O1xuICAgICAgICAgICAgICAgIGxldCBiWSA9IHBvaW50VG8/Lnk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKGFYICYmIGFZICYmIGJYICYmIGJZKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRpdmlkdWFsTGluZVN0eWxlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLmxpbmVzLmNvbG9ycz8uW2ldID8gdGhpcy5saW5lcy5jb2xvcnM/LltpXSA6ICcwLDEyOCwwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wYWNpdHkgPSB0aGlzLmxpbmVzLm9wYWNpdGllcz8uW2ldID8gdGhpcy5saW5lcy5vcGFjaXRpZXM/LltpXSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IGByZ2JhKCR7Y29sb3J9LCR7b3BhY2l0eX0pYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IHRoaXMubGluZXMud2lkdGhzPy5baV0gPyB0aGlzLmxpbmVzLndpZHRocz8uW2ldIDogMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gdGhpcy5fY3VycmVudExpbmVJZHgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUN1cnJlbnRMaW5lU3R5bGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpTGluZXMgPSB0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250cm9sUG9pbnQ6IERHLlBvaW50IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtdWx0aUxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTGVuID0gdGhpcy5nZXRMaW5lTGVuZ3RoKGFYLCBhWSwgYlgsIGJZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9pbnRXaXRoTWFya2VyID0gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UoYVgsIGFZLCBiWCwgYlksIHNpemVUbywgbGluZUxlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmR0UG9pbnRXaXRoTWFya2VyID0gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UoYlgsIGJZLCBhWCwgYVksIHNpemVGcm9tLCBsaW5lTGVuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFYID0gc3RhcnRQb2ludFdpdGhNYXJrZXIueDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFZID0gc3RhcnRQb2ludFdpdGhNYXJrZXIueTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJYID0gZW5kdFBvaW50V2l0aE1hcmtlci54O1xuICAgICAgICAgICAgICAgICAgICAgICAgYlkgPSBlbmR0UG9pbnRXaXRoTWFya2VyLnk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sUG9pbnQgPSB0aGlzLmxpbmVzLmZyb21baV0gPiB0aGlzLmxpbmVzLnRvW2ldID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sUG9pbnQobXVsdGlMaW5lcywgYVgsIGFZLCBiWCwgYlksIGkpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sUG9pbnQobXVsdGlMaW5lcywgYlgsIGJZLCBhWCwgYVksIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKGFYISwgYVkhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8oY29udHJvbFBvaW50LngsIGNvbnRyb2xQb2ludC55LCBiWCwgYlkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKGFYISwgYVkhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyhiWCwgYlkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmVzLmRyYXdBcnJvd3MgPz8gdGhpcy5saW5lcy5kcmF3QXJyb3dzQXJyPy5nZXRCaXQoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGluZUxlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTGVuID0gdGhpcy5nZXRMaW5lTGVuZ3RoKGFYLCBhWSwgYlgsIGJZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lTGVuID4gdGhpcy5hcnJvd1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3dQb2ludCA9ICFtdWx0aUxpbmVzID8gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UoYVgsIGFZLCBiWCwgYlksIHNpemVUbywgbGluZUxlbikgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycm93Q1BYID0gbXVsdGlMaW5lcyA/IGNvbnRyb2xQb2ludCEueCA6IGFYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycm93Q1BZID0gbXVsdGlMaW5lcyA/IGNvbnRyb2xQb2ludCEueSA6IGFZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQXJyb3codGhpcy5jdHgsIGFycm93UG9pbnQ/LnggPz8gYlgsIGFycm93UG9pbnQ/LnkgPz8gYlksIGFycm93Q1BYLCBhcnJvd0NQWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gdGhpcy5fY3VycmVudExpbmVJZHgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUN1cnJlbnRMaW5lU3R5bGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGxMZWZ0Qm90dG9tUmVjdCgpO1xuICAgIH1cblxuICAgIHRvZ2dsZUN1cnJlbnRMaW5lU3R5bGUoZmxhZzogYm9vbGVhbikge1xuICAgICAgICBzd2l0Y2godGhpcy5jdXJyZW50TGluZVN0eWxlKXtcbiAgICAgICAgICAgIGNhc2UgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLmJvbGQ6IHtcbiAgICAgICAgICAgICAgICBmbGFnID8gdGhpcy5jdHgubGluZVdpZHRoICs9IDIgOiB0aGlzLmN0eC5saW5lV2lkdGggLT0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLmRhc2hlZDoge1xuICAgICAgICAgICAgICAgIGZsYWcgPyB0aGlzLmN0eC5zZXRMaW5lRGFzaChbNSwgNV0pIDogdGhpcy5jdHguc2V0TGluZURhc2goW10pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNYXJrZXJzU2l6ZXMoc3BMb29rOiBhbnksIG1hcmtlclNpemVDb2w6IERHLkNvbHVtbiB8IG51bGwsIGk6IG51bWJlcik6IE1hcmtlclNpemUge1xuICAgICAgICBsZXQgc2l6ZUZyb20gPSAzO1xuICAgICAgICBsZXQgc2l6ZVRvID0gMztcbiAgICAgICAgaWYgKG1hcmtlclNpemVDb2wpIHtcbiAgICAgICAgICAgIHNpemVGcm9tID0gKHNwTG9vay5tYXJrZXJNaW5TaXplICsgKHNwTG9vay5tYXJrZXJNYXhTaXplIC0gc3BMb29rLm1hcmtlck1pblNpemUpICogbWFya2VyU2l6ZUNvbC5zY2FsZSh0aGlzLmxpbmVzLmZyb21baV0pKSAvIDI7XG4gICAgICAgICAgICBzaXplVG8gPSAoc3BMb29rLm1hcmtlck1pblNpemUgKyAoc3BMb29rLm1hcmtlck1heFNpemUgLSBzcExvb2subWFya2VyTWluU2l6ZSkgKiBtYXJrZXJTaXplQ29sLnNjYWxlKHRoaXMubGluZXMudG9baV0pKSAvIDI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BMb29rLm1hcmtlckRlZmF1bHRTaXplKSB7XG4gICAgICAgICAgICBzaXplRnJvbSA9IHNwTG9vay5tYXJrZXJEZWZhdWx0U2l6ZSAvIDI7XG4gICAgICAgICAgICBzaXplVG8gPSBzcExvb2subWFya2VyRGVmYXVsdFNpemUgLyAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHNpemVGcm9tLCBzaXplVG8gfTtcbiAgICB9XG5cblxuICAgIGZpbGxMZWZ0Qm90dG9tUmVjdCgpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IG5ldyBQYXRoMkQoKTtcbiAgICAgICAgcmVjdC5yZWN0KHRoaXMuc3AueUF4aXNCb3gubWluWCwgdGhpcy5zcC55QXhpc0JveC5tYXhZLCB0aGlzLnNwLnlBeGlzQm94LndpZHRoLCB0aGlzLnNwLnhBeGlzQm94LmhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGB3aGl0ZWA7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsKHJlY3QpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVNdWx0aUxpbmVzSW5kaWNlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJyYXlJZHhzQml0QXJyYXkgPSBuZXcgQml0QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgICAgIGFycmF5SWR4c0JpdEFycmF5LnNldEFsbCh0cnVlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IC0xOyAoaSA9IGFycmF5SWR4c0JpdEFycmF5LmZpbmROZXh0KGkpKSAhPT0gLTE7KSB7XG4gICAgICAgICAgICBsZXQgZmlyc3RMaW5lSWR4ID0gaTtcbiAgICAgICAgICAgIGxldCBwMSA9IHRoaXMubGluZXMuZnJvbVtmaXJzdExpbmVJZHhdO1xuICAgICAgICAgICAgbGV0IHAyID0gdGhpcy5saW5lcy50b1tmaXJzdExpbmVJZHhdO1xuICAgICAgICAgICAgbGV0IGxpbmVzUGVyUGFpciA9IDE7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaTsgKGogPSBhcnJheUlkeHNCaXRBcnJheS5maW5kTmV4dChqKSkgIT09IC0xOykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50VG9Db21wYXJlMSA9IHRoaXMubGluZXMuZnJvbVtqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludFRvQ29tcGFyZTIgPSB0aGlzLmxpbmVzLnRvW2pdO1xuICAgICAgICAgICAgICAgIGlmIChwb2ludFRvQ29tcGFyZTEgPT09IHAxICYmIHBvaW50VG9Db21wYXJlMiA9PT0gcDIgfHxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRUb0NvbXBhcmUyID09PSBwMSAmJiBwb2ludFRvQ29tcGFyZTEgPT09IHAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tqXSA9ICsrbGluZXNQZXJQYWlyO1xuICAgICAgICAgICAgICAgICAgICBhcnJheUlkeHNCaXRBcnJheS5zZXRCaXQoaiwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGluZXNQZXJQYWlyID4gMSlcbiAgICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbZmlyc3RMaW5lSWR4XSA9IDE7XG4gICAgICAgICAgICBhcnJheUlkeHNCaXRBcnJheS5zZXRCaXQoaSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrQ29vcmRzT25MaW5lKHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZUlkeCA9IC0xO1xuICAgICAgICBsZXQgbWluRGlzdCA9IG51bGw7XG4gICAgICAgIGxldCBkaXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc3BMb29rID0gdGhpcy5zcC5nZXRPcHRpb25zKCkubG9vaztcbiAgICAgICAgY29uc3QgbWFya2VyU2l6ZUNvbCA9IHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSA/IHRoaXMuc3AuZGF0YUZyYW1lLmNvbChzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10pIDogbnVsbDtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5zcC5kYXRhRnJhbWUuZmlsdGVyO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZXMuZnJvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZpbHRlci5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSAmJiBmaWx0ZXIuZ2V0KHRoaXMubGluZXMudG9baV0pICYmIHRoaXMudmlzaWJpbGl0eS5nZXRCaXQoaSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNpemVGcm9tLCBzaXplVG8gfSA9IHRoaXMuZ2V0TWFya2Vyc1NpemVzKHNwTG9vaywgbWFya2VyU2l6ZUNvbCwgaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcEZyb20gPSB0aGlzLnNwLndvcmxkVG9TY3JlZW4odGhpcy54QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcFRvID0gdGhpcy5zcC53b3JsZFRvU2NyZWVuKHRoaXMueEF4aXNDb2wuZ2V0KHRoaXMubGluZXMudG9baV0pLCB0aGlzLnlBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmdldExpbmVMZW5ndGgocEZyb20ueCwgcEZyb20ueSwgcFRvLngsIHBUby55KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJvbU1hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKHBGcm9tLngsIHBGcm9tLnksIHBUby54LCBwVG8ueSwgc2l6ZVRvLCBsZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b01hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKHBUby54LCBwVG8ueSwgcEZyb20/LngsIHBGcm9tPy55LCBzaXplRnJvbSwgbGVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbFBvaW50ID0gdGhpcy5saW5lcy5mcm9tW2ldID4gdGhpcy5saW5lcy50b1tpXSA/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sUG9pbnQodGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldLCBmcm9tTWFya2VyLngsIGZyb21NYXJrZXIueSwgdG9NYXJrZXIueCwgdG9NYXJrZXIueSwgaSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXSwgdG9NYXJrZXIueCwgdG9NYXJrZXIueSwgZnJvbU1hcmtlci54LCBmcm9tTWFya2VyLnksIGkpO1xuICAgICAgICAgICAgICAgICAgICBkaXN0ID0gdGhpcy5jYWxjdWxhdGVEaXN0VG9DdXJ2ZUxpbmUoaSwgeCwgeSwgZnJvbU1hcmtlciwgdG9NYXJrZXIsIGNvbnRyb2xQb2ludCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdCA9IHRoaXMuY2FsY3VsYXRlRGlzdFRvU3RyYWlnaHRMaW5lKHgsIHksIHBGcm9tLCBwVG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKCFtaW5EaXN0ICYmIGRpc3QgIT09IG51bGwgJiYgZGlzdCA8IDUpIHx8IG1pbkRpc3QgJiYgZGlzdCAhPT0gbnVsbCAmJiBkaXN0IDwgbWluRGlzdCkge1xuICAgICAgICAgICAgICAgICAgICBtaW5EaXN0ID0gZGlzdDtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlSWR4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUlkeDtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVEaXN0VG9TdHJhaWdodExpbmUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHAxOiBERy5Qb2ludCwgcDI6IERHLlBvaW50KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIC8qIGNhbGN1bGF0aW5nIGNvb3JkaW5hdGVzIG9mIGEgcmVjdCBhcm91bmQgYSBsaW5lLiBJZiBjdXJzb3IgY29vcmRzIGFyZSBvdXRzaWRlIHRoaXMgcmVjdCAtIGFzc3VtZSB0aGF0XG4gICAgICAgIHBvaW50IGlzIG5vdCBvbiBsaW5lIGFuZCBkbyBub3QgY2FsY3VsYXRlIGRpc3RhbmNlIHRvIGxpbmUgKi9cbiAgICAgICAgbGV0IHhNaW4gPSBNYXRoLm1pbihwMS54LCBwMi54KTtcbiAgICAgICAgbGV0IHhNYXggPSBNYXRoLm1heChwMS54LCBwMi54KTtcbiAgICAgICAgbGV0IHlNaW4gPSBNYXRoLm1pbihwMS55LCBwMi55KTtcbiAgICAgICAgbGV0IHlNYXggPSBNYXRoLm1heChwMS55LCBwMi55KTtcblxuICAgICAgICAvL2FkZGluZyBhIGNvdXBsZSBvZiBwaXhlbHMgdG8gaW5jcmVhc2UgdGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgcmVjdFxuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSAyO1xuICAgICAgICByZXR1cm4geCA+PSB4TWluIC0gdGhyZXNob2xkICYmIHggPD0geE1heCArIHRocmVzaG9sZCAmJiB5ID49IHlNaW4gLSB0aHJlc2hvbGQgJiYgeSA8PSB5TWF4ICsgdGhyZXNob2xkID9cbiAgICAgICAgICAgIHRoaXMuZGlzdFRvU3RyYWlnaHRMaW5lU2VnbWVudCh4LCB5LCBwMSwgcDIpIDpcbiAgICAgICAgICAgIG51bGw7XG4gICAgfVxuXG4gICAgZGlzdFRvU3RyYWlnaHRMaW5lU2VnbWVudCh4OiBudW1iZXIsIHk6IG51bWJlciwgcDE6IERHLlBvaW50LCBwMjogREcuUG9pbnQpIHtcbiAgICAgICAgY29uc3QgZGlzdCA9ICh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSA9PiBNYXRoLnBvdygoeDEgLSB4MiksIDIpICsgTWF0aC5wb3coKHkxIC0geTIpLCAyKTtcbiAgICAgICAgY29uc3QgbCA9IGRpc3QocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgIGlmIChsID09IDApIHJldHVybiBkaXN0KHgsIHksIHAxLngsIHAxLnkpO1xuICAgICAgICBsZXQgdCA9ICgoeCAtIHAxLngpICogKHAyLnggLSBwMS54KSArICh5IC0gcDEueSkgKiAocDIueSAtIHAxLnkpKSAvIGw7XG4gICAgICAgIHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSk7XG4gICAgICAgIHJldHVybiBkaXN0KHgsIHksIHAxLnggKyB0ICogKHAyLnggLSBwMS54KSwgcDEueSArIHQgKiAocDIueSAtIHAxLnkpKVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZURpc3RUb0N1cnZlTGluZShpOiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyLCBwMTogREcuUG9pbnQsIHAyOiBERy5Qb2ludCxcbiAgICAgICAgcGM6IERHLlBvaW50KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIC8qIGNhbGN1bGF0aW5nIGNvb3JkaW5hdGVzIG9mIGEgcmVjdCBhcm91bmQgYSBsaW5lLiBJZiBjdXJzb3IgY29vcmRzIGFyZSBvdXRzaWRlIHRoaXMgc2hhcGUgLSBhc3N1bWUgdGhhdFxuICAgICAgICBwb2ludCBpcyBub3Qgb24gbGluZSBhbmQgZG8gbm90IGNhbGN1bGF0ZSBkaXN0YW5jZSB0byBsaW5lICovXG4gICAgICAgIGxldCB4TWluID0gTWF0aC5taW4ocDEueCwgcDIueCwgcGMueCk7XG4gICAgICAgIGxldCB4TWF4ID0gTWF0aC5tYXgocDEueCwgcDIueCwgcGMueCk7XG4gICAgICAgIGxldCB5TWluID0gTWF0aC5taW4ocDEueSwgcDIueSwgcGMueSk7XG4gICAgICAgIGxldCB5TWF4ID0gTWF0aC5tYXgocDEueSwgcDIueSwgcGMueSk7XG5cbiAgICAgICAgLy9hZGRpbmcgYSBjb3VwbGUgb2YgcGl4ZWxzIHRvIGluY3JlYXNlIHRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIHJlY3RcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICAgICAgaWYgKHggPj0geE1pbiAtIHRocmVzaG9sZCAmJiB4IDw9IHhNYXggKyB0aHJlc2hvbGQgJiYgeSA+PSB5TWluIC0gdGhyZXNob2xkICYmIHkgPD0geU1heCArIHRocmVzaG9sZCkge1xuICAgICAgICAgICAgY29uc3QgdyA9IHhNYXggLSB4TWluO1xuICAgICAgICAgICAgY29uc3QgaCA9IHlNYXggLSB5TWluO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlRGlzdFRvQ3VydmVJblJlY3QoeCwgeSwgcDEsIHBjLCBwMiwgdywgaCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlRGlzdFRvQ3VydmVJblJlY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHAwOiBERy5Qb2ludCwgcDE6IERHLlBvaW50LCBwMjogREcuUG9pbnQsXG4gICAgICAgIHc6IG51bWJlciwgaDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc3RlcExlbiA9IDM7XG4gICAgICAgIGNvbnN0IHN0ZXBzTnVtID0gTWF0aC5mbG9vcigodyArIGgpIC8gc3RlcExlbik7XG4gICAgICAgIGNvbnN0IGRlbHRhVCA9IDEgLyBzdGVwc051bTtcbiAgICAgICAgY29uc3QgYXJyWCA9IG5ldyBVaW50MzJBcnJheShzdGVwc051bSk7XG4gICAgICAgIGNvbnN0IGFyclkgPSBuZXcgVWludDMyQXJyYXkoc3RlcHNOdW0pO1xuICAgICAgICBsZXQgbWF4SFcgPSBuZXcgVWludDMyQXJyYXkoc3RlcHNOdW0pO1xuICAgICAgICBsZXQgbWluU3VtSFc6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVJZHhzID0gbmV3IEJpdEFycmF5KHN0ZXBzTnVtKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJYLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gaSAqIGRlbHRhVDtcbiAgICAgICAgICAgIGNvbnN0IHhPbkN1cnZlID0gTWF0aC5wb3coKDEgLSB0KSwgMikgKiBwMC54ICsgMiAqIHQgKiAoMSAtIHQpICogcDEueCArIE1hdGgucG93KHQsIDIpICogcDIueDtcbiAgICAgICAgICAgIGNvbnN0IHlPbkN1cnZlID0gTWF0aC5wb3coKDEgLSB0KSwgMikgKiBwMC55ICsgMiAqIHQgKiAoMSAtIHQpICogcDEueSArIE1hdGgucG93KHQsIDIpICogcDIueTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RXID0gTWF0aC5hYnMoeCAtIHhPbkN1cnZlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RIID0gTWF0aC5hYnMoeSAtIHlPbkN1cnZlKTtcbiAgICAgICAgICAgIGNvbnN0IHN1bUhXID0gcmVjdFcgKyByZWN0SDtcbiAgICAgICAgICAgIGlmICghbWluU3VtSFcgfHwgbWluU3VtSFcgPiBzdW1IVylcbiAgICAgICAgICAgICAgICBtaW5TdW1IVyA9IHN1bUhXO1xuICAgICAgICAgICAgbWF4SFdbaV0gPSBNYXRoLm1heChyZWN0VywgcmVjdEgpO1xuICAgICAgICAgICAgYXJyWFtpXSA9IHhPbkN1cnZlO1xuICAgICAgICAgICAgYXJyWVtpXSA9IHlPbkN1cnZlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyWC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG1heEhXW2ldIDwgbWluU3VtSFchKVxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUlkeHMuc2V0Qml0KGksIHRydWUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluRGlzdDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGZvciAobGV0IGogPSAtMTsgKGogPSBjYW5kaWRhdGVJZHhzLmZpbmROZXh0KGopKSAhPT0gLTE7KSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0ID0gTWF0aC5oeXBvdCgoYXJyWFtqXSAtIHgpLCAoYXJyWVtqXSAtIHkpKTtcbiAgICAgICAgICAgIGlmICghbWluRGlzdCB8fCBtaW5EaXN0ID4gZGlzdClcbiAgICAgICAgICAgICAgICBtaW5EaXN0ID0gZGlzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluRGlzdCE7XG4gICAgfVxuXG4gICAgZ2V0TGluZUxlbmd0aChwMXg6IG51bWJlciwgcDF5OiBudW1iZXIsIHAyeDogbnVtYmVyLCBwMnk6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocDJ4IC0gcDF4LCAyKSArIE1hdGgucG93KHAyeSAtIHAxeSwgMikpO1xuICAgIH1cblxuICAgIGdldFBvaW50T25EaXN0YW5jZShwMXg6IG51bWJlciwgcDF5OiBudW1iZXIsIHAyeDogbnVtYmVyLCBwMnk6IG51bWJlciwgZGlzdGFuY2U6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiBERy5Qb2ludCB7XG4gICAgICAgIGNvbnN0IGR4ID0gKHAyeCAtIHAxeCkgLyBsZW5ndGg7XG4gICAgICAgIGNvbnN0IGR5ID0gKHAyeSAtIHAxeSkgLyBsZW5ndGg7XG4gICAgICAgIGNvbnN0IHAzeCA9IHAyeCAtIGRpc3RhbmNlICogZHg7XG4gICAgICAgIGNvbnN0IHAzeSA9IHAyeSAtIGRpc3RhbmNlICogZHk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBERy5Qb2ludChwM3gsIHAzeSk7XG4gICAgfVxuXG4gICAgZmluZENvbnRyb2xQb2ludChpZHg6IG51bWJlciwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgaT86IG51bWJlcik6IERHLlBvaW50IHtcbiAgICAgICAgY29uc3QgbWlkWCA9IHgxICsgKHgyIC0geDEpIC8gMjtcbiAgICAgICAgY29uc3QgbWlkWSA9IHkxICsgKHkyIC0geTEpIC8gMjtcbiAgICAgICAgbGV0IGR4ID0gbWlkWCAtIHgxO1xuICAgICAgICBsZXQgZHkgPSBtaWRZIC0geTE7XG4gICAgICAgIGNvbnN0IGRpc3QgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgICBkeCAvPSBkaXN0O1xuICAgICAgICBkeSAvPSBkaXN0O1xuICAgICAgICBjb25zdCBwZXJwZW5kaWN1bGFyTGVuID0gNTAgKiBNYXRoLmNlaWwoaWR4IC8gMik7XG4gICAgICAgIHJldHVybiBpZHggJSAyID09PSAwID9cbiAgICAgICAgICAgIG5ldyBERy5Qb2ludChtaWRYICsgKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR5LCBtaWRZIC0gKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR4KSA6XG4gICAgICAgICAgICBuZXcgREcuUG9pbnQobWlkWCAtIChwZXJwZW5kaWN1bGFyTGVuIC8gMikgKiBkeSwgbWlkWSArIChwZXJwZW5kaWN1bGFyTGVuIC8gMikgKiBkeCk7XG4gICAgfVxuXG4gICAgY2FudmFzQXJyb3cocGF0aDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBhcnJvd0VuZFg6IG51bWJlciwgYXJyb3dFbmRZOiBudW1iZXIsIHF1YWRYOiBudW1iZXIsIHF1YWRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJyb3dBbmdsZSA9IE1hdGguYXRhbjIocXVhZFggLSBhcnJvd0VuZFgsIHF1YWRZIC0gYXJyb3dFbmRZKSArIE1hdGguUEk7XG4gICAgICAgIHBhdGgubW92ZVRvKGFycm93RW5kWCAtICh0aGlzLmFycm93V2lkdGggKiBNYXRoLnNpbihhcnJvd0FuZ2xlIC0gTWF0aC5QSSAvIDEwKSksXG4gICAgICAgICAgICBhcnJvd0VuZFkgLSAodGhpcy5hcnJvd1dpZHRoICogTWF0aC5jb3MoYXJyb3dBbmdsZSAtIE1hdGguUEkgLyAxMCkpKTtcbiAgICAgICAgcGF0aC5saW5lVG8oYXJyb3dFbmRYLCBhcnJvd0VuZFkpO1xuICAgICAgICBwYXRoLmxpbmVUbyhhcnJvd0VuZFggLSAodGhpcy5hcnJvd1dpZHRoICogTWF0aC5zaW4oYXJyb3dBbmdsZSArIE1hdGguUEkgLyAxMCkpLFxuICAgICAgICAgICAgYXJyb3dFbmRZIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguY29zKGFycm93QW5nbGUgKyBNYXRoLlBJIC8gMTApKSk7XG4gICAgfVxuXG59Il19
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWxpbmVzLW9uLXNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVuZGVyLWxpbmVzLW9uLXNwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFFbkMsTUFBTSxDQUFOLElBQVksMkJBSVg7QUFKRCxXQUFZLDJCQUEyQjtJQUNuQyw0Q0FBYSxDQUFBO0lBQ2IsNENBQWEsQ0FBQTtJQUNiLGdEQUFpQixDQUFBO0FBQ3JCLENBQUMsRUFKVywyQkFBMkIsS0FBM0IsMkJBQTJCLFFBSXRDO0FBNEJELE1BQU0sT0FBTyx3QkFBd0I7SUFnQmpDLElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsRUFBVTtRQUN4QixJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxLQUFrQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsVUFBb0I7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLEVBQXdCLEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxLQUFrQixFQUNsRixnQkFBZ0IsR0FBRywyQkFBMkIsQ0FBQyxJQUFJOztRQWxDdkQsb0JBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVyQixnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFzQixDQUFDO1FBQ2hELGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztRQUc5QyxvQkFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBSXJCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUF5QlosSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBNkIsQ0FBQztRQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQUEsS0FBSyxDQUFDLFVBQVUsbUNBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxTQUFTO1lBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBRXRDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQzVDLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDO1FBQzlGLENBQUMsQ0FBQTtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVFLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDO1FBQzVGLENBQUMsQ0FBQTtRQUVELEVBQUUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDN0IsU0FBUyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFrQjtRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVc7O1FBQ1AsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDekMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN2SCxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUNBQUksQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLFFBQVEsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUNBQUksU0FBUyxJQUFJLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLG1DQUFJLENBQUMsR0FBRyxDQUFDO1NBQzlGO1FBQ0QsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEcsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM3RixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxFQUFFLEdBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxFQUFFLEdBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLENBQUMsQ0FBQztnQkFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hILElBQUksRUFBRSxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO29CQUN0QixJQUFJLG9CQUFvQixFQUFFO3dCQUN0QixNQUFNLEtBQUssR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLDBDQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSwwQ0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUMxRSxNQUFNLE9BQU8sR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLDBDQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUywwQ0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMxRSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxRQUFRLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSwwQ0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sMENBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDNUU7b0JBQ0QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGVBQWU7d0JBQzFCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvQyxJQUFJLFlBQVksR0FBb0IsSUFBSSxDQUFDO29CQUN6QyxJQUFJLFVBQVUsRUFBRTt3QkFDWixPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDN0MsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDdEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDdkYsRUFBRSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQzt3QkFDNUIsRUFBRSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQzt3QkFDNUIsRUFBRSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQzt3QkFDM0IsRUFBRSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQzt3QkFDM0IsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3RELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFDLENBQUM7d0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDckU7eUJBQU07d0JBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRyxFQUFFLEVBQUcsQ0FBQyxDQUFDO3dCQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQzNCO29CQUNELElBQUksTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsbUNBQUksTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsMENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUM5RCxJQUFJLENBQUMsT0FBTzs0QkFDUixPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDakQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTs0QkFDM0IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7NEJBQ2pHLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNuRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLENBQUMsbUNBQUksRUFBRSxFQUFFLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLENBQUMsbUNBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQzt5QkFDNUY7cUJBQ0o7b0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGVBQWU7d0JBQzFCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDMUM7YUFDSjtTQUNKO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQWE7UUFDaEMsUUFBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUM7WUFDekIsS0FBSywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztnQkFDekQsTUFBTTthQUNUO1lBQ0QsS0FBSywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDL0QsTUFBTTthQUNUO1lBQ0Q7Z0JBQ0ksT0FBTztTQUNkO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFXLEVBQUUsYUFBK0IsRUFBRSxDQUFTO1FBQ25FLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLGFBQWEsRUFBRTtZQUNmLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEksTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvSDthQUFNLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQ2pDLFFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBR0Qsa0JBQWtCO1FBQ2QsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELHVCQUF1QjtRQUNuQixNQUFNLGlCQUFpQixHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHO1lBQzFELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2QyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyQyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUc7Z0JBQ3pELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsSUFBSSxlQUFlLEtBQUssRUFBRSxJQUFJLGVBQWUsS0FBSyxFQUFFO29CQUNoRCxlQUFlLEtBQUssRUFBRSxJQUFJLGVBQWUsS0FBSyxFQUFFLEVBQUU7b0JBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQztvQkFDN0MsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzdDO2FBQ0o7WUFDRCxJQUFJLFlBQVksR0FBRyxDQUFDO2dCQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ2xDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDekMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEcsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM3RixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDeEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsQ0FBQyxFQUFFLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUMxRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDM0csSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUM5RyxJQUFJLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7aUJBQ3JGO3FCQUFNO29CQUNILElBQUksR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQzdEO2dCQUNELElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsT0FBTyxFQUFFO29CQUN2RixPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNmLFlBQVksR0FBRyxDQUFDLENBQUM7aUJBQ3BCO2FBQ0o7U0FDSjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQVksRUFBRSxFQUFZO1FBQ3hFO3FFQUM2RDtRQUM3RCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhDLG9FQUFvRTtRQUNwRSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDcEIsT0FBTyxDQUFDLElBQUksSUFBSSxHQUFHLFNBQVMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLFNBQVMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLFNBQVMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQVksRUFBRSxFQUFZO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakgsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFD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QUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUNyQyxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxHQUFHLEtBQUs7Z0JBQzdCLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztTQUN0QjtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVM7Z0JBQ3BCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM1QztRQUNELElB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QUFDO0lBRUQsV0FBVyxDQUFDLElBQThCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUFFLEtBQWEsRUFBRSxLQUFhO1FBQzFHLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUMzRSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQzNFLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCBCaXRBcnJheSBmcm9tICcuL2JpdC1hcnJheSc7XG5cbmV4cG9ydCBlbnVtIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZSB7XG4gICAgbm9uZSA9ICdub25lJyxcbiAgICBib2xkID0gJ2JvbGQnLFxuICAgIGRhc2hlZCA9ICdkYXNoZWQnXG59XG5cbnR5cGUgTWFya2VyU2l6ZSA9IHtcbiAgICBzaXplRnJvbTogbnVtYmVyLFxuICAgIHNpemVUbzogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIE1vdXNlT3ZlckxpbmVFdmVudCA9IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIGlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIElMaW5lU2VyaWVzID0ge1xuICAgIGZyb206IFVpbnQzMkFycmF5O1xuICAgIHRvOiBVaW50MzJBcnJheTtcbiAgICBjb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgLy8gY29tbW9uIGNvbG9yLiBVc2UgW2NvbG9yc10gaWYgeW91IG5lZWQgaW5kaXZpZHVhbCBjb2xvcnMgcGVyIGxpbmVcbiAgICBjb2xvcnM/OiBzdHJpbmdbXTsgICAgICAgICAgLy8gbGluZSBjb2xvcnMuIElmIHRoZXkgYXJlIHRoZSBzYW1lIGZvciB0aGUgc2VyaWVzLCB1c2UgW2NvbG9yXSBpbnN0ZWFkLlxuICAgIHdpZHRoPzogbnVtYmVyOyAgICAgICAgICAgICAvLyBjb21tb24gd2lkdGguIFVzZSBbY29sb3JzXSBpZiB5b3UgbmVlZCBpbmRpdmlkdWFsIHdpZHRocyBwZXIgbGluZVxuICAgIHdpZHRocz86IEZsb2F0MzJBcnJheTsgICAgICAvLyBsaW5lIHdpZHRocy4gSWYgdGhleSBhcmUgdGhlIHNhbWUgZm9yIHRoZSBzZXJpZXMsIHVzZSBbd2lkdGhdIGluc3RlYWQuXG4gICAgb3BhY2l0eT86IG51bWJlcjsgICAgICAgICAgIC8vIGNvbW1vbiBvcGFjaXR5LiBVc2UgW29wYWNpdGllc10gaWYgeW91IG5lZWQgaW5kaXZpZHVhbCBvcGFjaXRpZXMgcGVyIGxpbmVcbiAgICBvcGFjaXRpZXM/OiBGbG9hdDMyQXJyYXk7ICAgLy8gbGluZSBvcGFjaXRpZXMuIElmIHRoZXkgYXJlIHRoZSBzYW1lIGZvciB0aGUgc2VyaWVzLCB1c2UgW29wYWNpdHldIGluc3RlYWRcbiAgICBkcmF3QXJyb3dzPzogYm9vbGVhbjsgICAgICAgLy8gY29tbW9uIHBhcmFtZXRlciB0byBkcmF3IGFycm93cy4gVXNlIFtkcmF3QXJyb3dzQXJyXSBpZiB5b3UgbmVlZCB0byBkcmF3IGFycm93cyBub3QgZm9yIGVhY2ggbGluZVxuICAgIGRyYXdBcnJvd3NBcnI/OiBCaXRBcnJheTsgICAvLyBpbmRpdmlkdWFsIHBhcmFtZXRlciBmb3IgZWFjaCBsaW5lLiBJZiB0aGV5IGFyZSB0aGUgc2FtZSBmb3IgdGhlIHNlcmllcywgdXNlIFtkcmF3QXJyb3dzXSBpbnN0ZWFkXG4gICAgdmlzaWJpbGl0eT86IEJpdEFycmF5OyAgICAgIC8vIGluZGl2aWR1YWwgcGFyYW1ldGVyIGZvciBlYWNoIGxpbmUuIFNldCBiaXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgbGluZVxuICAgIGFycm93U2l6ZT86IG51bWJlcjsgICAgICAgICAvLyBjb21tb24gZm9yIGFsbCBhcnJvd3Ncbn1cblxuZXhwb3J0IGNsYXNzIFNjYXR0ZXJQbG90TGluZXNSZW5kZXJlciB7XG4gICAgc3A6IERHLlNjYXR0ZXJQbG90Vmlld2VyO1xuICAgIHhBeGlzQ29sOiBERy5Db2x1bW47XG4gICAgeUF4aXNDb2w6IERHLkNvbHVtbjtcbiAgICBfY3VycmVudExpbmVJZHggPSAtMTtcbiAgICBsaW5lcyE6IElMaW5lU2VyaWVzO1xuICAgIGxpbmVDbGlja2VkID0gbmV3IFN1YmplY3Q8TW91c2VPdmVyTGluZUV2ZW50PigpO1xuICAgIGxpbmVIb3ZlciA9IG5ldyBTdWJqZWN0PE1vdXNlT3ZlckxpbmVFdmVudD4oKTtcbiAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIG1vdXNlT3ZlckxpbmVJZCA9IC0xO1xuICAgIG11bHRpcGxlTGluZXNDb3VudHMhOiBVaW50OEFycmF5O1xuICAgIHZpc2liaWxpdHk6IEJpdEFycmF5O1xuICAgIGN1cnJlbnRMaW5lU3R5bGU6IFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZTtcbiAgICBhcnJvd1dpZHRoID0gMTU7XG5cbiAgICBnZXQgY3VycmVudExpbmVJZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudExpbmVJZHg7XG4gICAgfVxuXG4gICAgc2V0IGN1cnJlbnRMaW5lSWQoaWQ6IG51bWJlcikge1xuICAgICAgICBpZiAoaWQgIT09IHRoaXMuX2N1cnJlbnRMaW5lSWR4KSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50TGluZUlkeCA9IGlkO1xuICAgICAgICAgICAgdGhpcy5zcC5yZW5kZXIodGhpcy5jdHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0IGxpbmVzVG9SZW5kZXIobGluZXM6IElMaW5lU2VyaWVzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTGluZXMobGluZXMpO1xuICAgICAgICB0aGlzLnNwLnJlbmRlcih0aGlzLmN0eCk7XG4gICAgfVxuXG4gICAgc2V0IGxpbmVzVmlzaWJpbGl0eSh2aXNpYmlsaXR5OiBCaXRBcnJheSkge1xuICAgICAgICB0aGlzLnZpc2liaWxpdHkgPSB2aXNpYmlsaXR5O1xuICAgICAgICB0aGlzLnNwLnJlbmRlcih0aGlzLmN0eCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioc3A6IERHLlNjYXR0ZXJQbG90Vmlld2VyLCB4QXhpczogc3RyaW5nLCB5QXhpczogc3RyaW5nLCBsaW5lczogSUxpbmVTZXJpZXMsXG4gICAgICAgIGN1cnJlbnRMaW5lU3R5bGUgPSBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUubm9uZSkge1xuICAgICAgICB0aGlzLnNwID0gc3A7XG4gICAgICAgIHRoaXMueEF4aXNDb2wgPSB0aGlzLnNwLmRhdGFGcmFtZSEuY29sdW1ucy5ieU5hbWUoeEF4aXMpO1xuICAgICAgICB0aGlzLnlBeGlzQ29sID0gdGhpcy5zcC5kYXRhRnJhbWUhLmNvbHVtbnMuYnlOYW1lKHlBeGlzKTtcbiAgICAgICAgdGhpcy5jYW52YXMgPSB0aGlzLnNwLmdldEluZm8oKVsnY2FudmFzJ107XG4gICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgIHRoaXMuY3VycmVudExpbmVTdHlsZSA9IGN1cnJlbnRMaW5lU3R5bGU7XG4gICAgICAgIHRoaXMudXBkYXRlTGluZXMobGluZXMpO1xuICAgICAgICB0aGlzLnZpc2liaWxpdHkgPSBsaW5lcy52aXNpYmlsaXR5ID8/IG5ldyBCaXRBcnJheSh0aGlzLmxpbmVzLmZyb20ubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFsaW5lcy52aXNpYmlsaXR5KVxuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5LnNldEFsbCh0cnVlLCBmYWxzZSk7XG4gICAgICAgIGlmIChsaW5lcy5hcnJvd1NpemUpXG4gICAgICAgICAgICB0aGlzLmFycm93V2lkdGggPSBsaW5lcy5hcnJvd1NpemU7XG5cbiAgICAgICAgdGhpcy5jYW52YXMub25tb3VzZWRvd24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vdXNlT3ZlckxpbmVJZCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lQ2xpY2tlZC5uZXh0KHt4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZLCBpZDogdGhpcy5tb3VzZU92ZXJMaW5lSWR9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FudmFzLm9ubW91c2Vtb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlT3ZlckxpbmVJZCA9IHRoaXMuY2hlY2tDb29yZHNPbkxpbmUoZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WSk7XG4gICAgICAgICAgICBpZiAodGhpcy5tb3VzZU92ZXJMaW5lSWQgIT09IC0xKVxuICAgICAgICAgICAgICAgIHRoaXMubGluZUhvdmVyLm5leHQoe3g6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFksIGlkOiB0aGlzLm1vdXNlT3ZlckxpbmVJZH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3Aub25FdmVudCgnZDQtYmVmb3JlLWRyYXctc2NlbmUnKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoXzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJMaW5lcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZXMobGluZXM6IElMaW5lU2VyaWVzKSB7XG4gICAgICAgIHRoaXMubGluZXMgPSBsaW5lcztcbiAgICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY3JlYXRlTXVsdGlMaW5lc0luZGljZXMoKTtcbiAgICB9XG5cbiAgICByZW5kZXJMaW5lcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3BMb29rID0gdGhpcy5zcC5nZXRPcHRpb25zKCkubG9vaztcbiAgICAgICAgY29uc3QgaW5kaXZpZHVhbExpbmVTdHlsZXMgPSB0aGlzLmxpbmVzLmNvbG9ycyB8fCB0aGlzLmxpbmVzLndpZHRoIHx8IHRoaXMubGluZXMub3BhY2l0aWVzIHx8IHRoaXMubGluZXMuZHJhd0Fycm93c0FycjtcbiAgICAgICAgaWYgKCFpbmRpdmlkdWFsTGluZVN0eWxlcykge1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gdGhpcy5saW5lcy53aWR0aCA/PyAxO1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBgcmdiYSgke3RoaXMubGluZXMuY29sb3IgPz8gJzAsMTI4LDAnfSwke3RoaXMubGluZXMub3BhY2l0eSA/PyAxfSlgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hcmtlclNpemVDb2wgPSBzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10gPyB0aGlzLnNwLmRhdGFGcmFtZS5jb2woc3BMb29rWydzaXplQ29sdW1uTmFtZSddKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3AuZGF0YUZyYW1lLmZpbHRlcjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkgJiYgZmlsdGVyLmdldCh0aGlzLmxpbmVzLnRvW2ldKSAmJiB0aGlzLnZpc2liaWxpdHkuZ2V0Qml0KGkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmVMZW4gPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2l6ZUZyb20sIHNpemVUbyB9ID0gdGhpcy5nZXRNYXJrZXJzU2l6ZXMoc3BMb29rLCBtYXJrZXJTaXplQ29sLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludEZyb20gPSB0aGlzLnNwLndvcmxkVG9TY3JlZW4odGhpcy54QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSk7XG4gICAgICAgICAgICAgICAgbGV0IGFYID0gcG9pbnRGcm9tPy54O1xuICAgICAgICAgICAgICAgIGxldCBhWSA9IHBvaW50RnJvbT8ueTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludFRvID0gdGhpcy5zcC53b3JsZFRvU2NyZWVuKHRoaXMueEF4aXNDb2wuZ2V0KHRoaXMubGluZXMudG9baV0pLCB0aGlzLnlBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSk7XG4gICAgICAgICAgICAgICAgbGV0IGJYID0gcG9pbnRUbz8ueDtcbiAgICAgICAgICAgICAgICBsZXQgYlkgPSBwb2ludFRvPy55O1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChhWCAmJiBhWSAmJiBiWCAmJiBiWSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kaXZpZHVhbExpbmVTdHlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5saW5lcy5jb2xvcnM/LltpXSA/IHRoaXMubGluZXMuY29sb3JzPy5baV0gOiAnMCwxMjgsMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGFjaXR5ID0gdGhpcy5saW5lcy5vcGFjaXRpZXM/LltpXSA/IHRoaXMubGluZXMub3BhY2l0aWVzPy5baV0gOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBgcmdiYSgke2NvbG9yfSwke29wYWNpdHl9KWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB0aGlzLmxpbmVzLndpZHRocz8uW2ldID8gdGhpcy5saW5lcy53aWR0aHM/LltpXSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuX2N1cnJlbnRMaW5lSWR4KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDdXJyZW50TGluZVN0eWxlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aUxpbmVzID0gdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbFBvaW50OiBERy5Qb2ludCB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGlMaW5lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZUxlbiA9IHRoaXMuZ2V0TGluZUxlbmd0aChhWCwgYVksIGJYLCBiWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFBvaW50V2l0aE1hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKGFYLCBhWSwgYlgsIGJZLCBzaXplVG8sIGxpbmVMZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kdFBvaW50V2l0aE1hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKGJYLCBiWSwgYVgsIGFZLCBzaXplRnJvbSwgbGluZUxlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhWCA9IHN0YXJ0UG9pbnRXaXRoTWFya2VyLng7XG4gICAgICAgICAgICAgICAgICAgICAgICBhWSA9IHN0YXJ0UG9pbnRXaXRoTWFya2VyLnk7XG4gICAgICAgICAgICAgICAgICAgICAgICBiWCA9IGVuZHRQb2ludFdpdGhNYXJrZXIueDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJZID0gZW5kdFBvaW50V2l0aE1hcmtlci55O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFBvaW50ID0gdGhpcy5saW5lcy5mcm9tW2ldID4gdGhpcy5saW5lcy50b1tpXSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KG11bHRpTGluZXMsIGFYLCBhWSwgYlgsIGJZLCBpKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KG11bHRpTGluZXMsIGJYLCBiWSwgYVgsIGFZLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyhhWCEsIGFZISk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgYlgsIGJZKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyhhWCEsIGFZISk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oYlgsIGJZKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5saW5lcy5kcmF3QXJyb3dzID8/IHRoaXMubGluZXMuZHJhd0Fycm93c0Fycj8uZ2V0Qml0KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmVMZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUxlbiA9IHRoaXMuZ2V0TGluZUxlbmd0aChhWCwgYVksIGJYLCBiWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZUxlbiA+IHRoaXMuYXJyb3dXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycm93UG9pbnQgPSAhbXVsdGlMaW5lcyA/IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKGFYLCBhWSwgYlgsIGJZLCBzaXplVG8sIGxpbmVMZW4pIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJvd0NQWCA9IG11bHRpTGluZXMgPyBjb250cm9sUG9pbnQhLnggOiBhWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJvd0NQWSA9IG11bHRpTGluZXMgPyBjb250cm9sUG9pbnQhLnkgOiBhWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0Fycm93KHRoaXMuY3R4LCBhcnJvd1BvaW50Py54ID8/IGJYLCBhcnJvd1BvaW50Py55ID8/IGJZLCBhcnJvd0NQWCwgYXJyb3dDUFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuX2N1cnJlbnRMaW5lSWR4KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDdXJyZW50TGluZVN0eWxlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxsTGVmdEJvdHRvbVJlY3QoKTtcbiAgICB9XG5cbiAgICB0b2dnbGVDdXJyZW50TGluZVN0eWxlKGZsYWc6IGJvb2xlYW4pIHtcbiAgICAgICAgc3dpdGNoKHRoaXMuY3VycmVudExpbmVTdHlsZSl7XG4gICAgICAgICAgICBjYXNlIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZS5ib2xkOiB7XG4gICAgICAgICAgICAgICAgZmxhZyA/IHRoaXMuY3R4LmxpbmVXaWR0aCArPSAyIDogdGhpcy5jdHgubGluZVdpZHRoIC09IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZS5kYXNoZWQ6IHtcbiAgICAgICAgICAgICAgICBmbGFnID8gdGhpcy5jdHguc2V0TGluZURhc2goWzUsIDVdKSA6IHRoaXMuY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TWFya2Vyc1NpemVzKHNwTG9vazogYW55LCBtYXJrZXJTaXplQ29sOiBERy5Db2x1bW4gfCBudWxsLCBpOiBudW1iZXIpOiBNYXJrZXJTaXplIHtcbiAgICAgICAgbGV0IHNpemVGcm9tID0gMztcbiAgICAgICAgbGV0IHNpemVUbyA9IDM7XG4gICAgICAgIGlmIChtYXJrZXJTaXplQ29sKSB7XG4gICAgICAgICAgICBzaXplRnJvbSA9IChzcExvb2subWFya2VyTWluU2l6ZSArIChzcExvb2subWFya2VyTWF4U2l6ZSAtIHNwTG9vay5tYXJrZXJNaW5TaXplKSAqIG1hcmtlclNpemVDb2wuc2NhbGUodGhpcy5saW5lcy5mcm9tW2ldKSkgLyAyO1xuICAgICAgICAgICAgc2l6ZVRvID0gKHNwTG9vay5tYXJrZXJNaW5TaXplICsgKHNwTG9vay5tYXJrZXJNYXhTaXplIC0gc3BMb29rLm1hcmtlck1pblNpemUpICogbWFya2VyU2l6ZUNvbC5zY2FsZSh0aGlzLmxpbmVzLnRvW2ldKSkgLyAyO1xuICAgICAgICB9IGVsc2UgaWYgKHNwTG9vay5tYXJrZXJEZWZhdWx0U2l6ZSkge1xuICAgICAgICAgICAgc2l6ZUZyb20gPSBzcExvb2subWFya2VyRGVmYXVsdFNpemUgLyAyO1xuICAgICAgICAgICAgc2l6ZVRvID0gc3BMb29rLm1hcmtlckRlZmF1bHRTaXplIC8gMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzaXplRnJvbSwgc2l6ZVRvIH07XG4gICAgfVxuXG5cbiAgICBmaWxsTGVmdEJvdHRvbVJlY3QoKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBuZXcgUGF0aDJEKCk7XG4gICAgICAgIHJlY3QucmVjdCh0aGlzLnNwLnlBeGlzQm94Lm1pblgsIHRoaXMuc3AueUF4aXNCb3gubWF4WSwgdGhpcy5zcC55QXhpc0JveC53aWR0aCwgdGhpcy5zcC54QXhpc0JveC5oZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBgd2hpdGVgO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbChyZWN0KTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlTXVsdGlMaW5lc0luZGljZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFycmF5SWR4c0JpdEFycmF5ID0gbmV3IEJpdEFycmF5KHRoaXMubGluZXMuZnJvbS5sZW5ndGgpO1xuICAgICAgICBhcnJheUlkeHNCaXRBcnJheS5zZXRBbGwodHJ1ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAtMTsgKGkgPSBhcnJheUlkeHNCaXRBcnJheS5maW5kTmV4dChpKSkgIT09IC0xOykge1xuICAgICAgICAgICAgbGV0IGZpcnN0TGluZUlkeCA9IGk7XG4gICAgICAgICAgICBsZXQgcDEgPSB0aGlzLmxpbmVzLmZyb21bZmlyc3RMaW5lSWR4XTtcbiAgICAgICAgICAgIGxldCBwMiA9IHRoaXMubGluZXMudG9bZmlyc3RMaW5lSWR4XTtcbiAgICAgICAgICAgIGxldCBsaW5lc1BlclBhaXIgPSAxO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGk7IChqID0gYXJyYXlJZHhzQml0QXJyYXkuZmluZE5leHQoaikpICE9PSAtMTspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludFRvQ29tcGFyZTEgPSB0aGlzLmxpbmVzLmZyb21bal07XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRUb0NvbXBhcmUyID0gdGhpcy5saW5lcy50b1tqXTtcbiAgICAgICAgICAgICAgICBpZiAocG9pbnRUb0NvbXBhcmUxID09PSBwMSAmJiBwb2ludFRvQ29tcGFyZTIgPT09IHAyIHx8XG4gICAgICAgICAgICAgICAgICAgIHBvaW50VG9Db21wYXJlMiA9PT0gcDEgJiYgcG9pbnRUb0NvbXBhcmUxID09PSBwMikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbal0gPSArK2xpbmVzUGVyUGFpcjtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlJZHhzQml0QXJyYXkuc2V0Qml0KGosIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbmVzUGVyUGFpciA+IDEpXG4gICAgICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ZpcnN0TGluZUlkeF0gPSAxO1xuICAgICAgICAgICAgYXJyYXlJZHhzQml0QXJyYXkuc2V0Qml0KGksIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja0Nvb3Jkc09uTGluZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBjYW5kaWRhdGVJZHggPSAtMTtcbiAgICAgICAgbGV0IG1pbkRpc3QgPSBudWxsO1xuICAgICAgICBsZXQgZGlzdCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHNwTG9vayA9IHRoaXMuc3AuZ2V0T3B0aW9ucygpLmxvb2s7XG4gICAgICAgIGNvbnN0IG1hcmtlclNpemVDb2wgPSBzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10gPyB0aGlzLnNwLmRhdGFGcmFtZS5jb2woc3BMb29rWydzaXplQ29sdW1uTmFtZSddKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3AuZGF0YUZyYW1lLmZpbHRlcjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkgJiYgZmlsdGVyLmdldCh0aGlzLmxpbmVzLnRvW2ldKSAmJiB0aGlzLnZpc2liaWxpdHkuZ2V0Qml0KGkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzaXplRnJvbSwgc2l6ZVRvIH0gPSB0aGlzLmdldE1hcmtlcnNTaXplcyhzcExvb2ssIG1hcmtlclNpemVDb2wsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBGcm9tID0gdGhpcy5zcC53b3JsZFRvU2NyZWVuKHRoaXMueEF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSksIHRoaXMueUF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBUbyA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5nZXRMaW5lTGVuZ3RoKHBGcm9tLngsIHBGcm9tLnksIHBUby54LCBwVG8ueSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb21NYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShwRnJvbS54LCBwRnJvbS55LCBwVG8ueCwgcFRvLnksIHNpemVUbywgbGVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9NYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShwVG8ueCwgcFRvLnksIHBGcm9tPy54LCBwRnJvbT8ueSwgc2l6ZUZyb20sIGxlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludCA9IHRoaXMubGluZXMuZnJvbVtpXSA+IHRoaXMubGluZXMudG9baV0gP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXSwgZnJvbU1hcmtlci54LCBmcm9tTWFya2VyLnksIHRvTWFya2VyLngsIHRvTWFya2VyLnksIGkpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZENvbnRyb2xQb2ludCh0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbaV0sIHRvTWFya2VyLngsIHRvTWFya2VyLnksIGZyb21NYXJrZXIueCwgZnJvbU1hcmtlci55LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzdCA9IHRoaXMuY2FsY3VsYXRlRGlzdFRvQ3VydmVMaW5lKGksIHgsIHksIGZyb21NYXJrZXIsIHRvTWFya2VyLCBjb250cm9sUG9pbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3QgPSB0aGlzLmNhbGN1bGF0ZURpc3RUb1N0cmFpZ2h0TGluZSh4LCB5LCBwRnJvbSwgcFRvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCghbWluRGlzdCAmJiBkaXN0ICE9PSBudWxsICYmIGRpc3QgPCA1KSB8fCBtaW5EaXN0ICYmIGRpc3QgIT09IG51bGwgJiYgZGlzdCA8IG1pbkRpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUlkeCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGVJZHg7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlRGlzdFRvU3RyYWlnaHRMaW5lKHg6IG51bWJlciwgeTogbnVtYmVyLCBwMTogREcuUG9pbnQsIHAyOiBERy5Qb2ludCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICAvKiBjYWxjdWxhdGluZyBjb29yZGluYXRlcyBvZiBhIHJlY3QgYXJvdW5kIGEgbGluZS4gSWYgY3Vyc29yIGNvb3JkcyBhcmUgb3V0c2lkZSB0aGlzIHJlY3QgLSBhc3N1bWUgdGhhdFxuICAgICAgICBwb2ludCBpcyBub3Qgb24gbGluZSBhbmQgZG8gbm90IGNhbGN1bGF0ZSBkaXN0YW5jZSB0byBsaW5lICovXG4gICAgICAgIGxldCB4TWluID0gTWF0aC5taW4ocDEueCwgcDIueCk7XG4gICAgICAgIGxldCB4TWF4ID0gTWF0aC5tYXgocDEueCwgcDIueCk7XG4gICAgICAgIGxldCB5TWluID0gTWF0aC5taW4ocDEueSwgcDIueSk7XG4gICAgICAgIGxldCB5TWF4ID0gTWF0aC5tYXgocDEueSwgcDIueSk7XG5cbiAgICAgICAgLy9hZGRpbmcgYSBjb3VwbGUgb2YgcGl4ZWxzIHRvIGluY3JlYXNlIHRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIHJlY3RcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICAgICAgcmV0dXJuIHggPj0geE1pbiAtIHRocmVzaG9sZCAmJiB4IDw9IHhNYXggKyB0aHJlc2hvbGQgJiYgeSA+PSB5TWluIC0gdGhyZXNob2xkICYmIHkgPD0geU1heCArIHRocmVzaG9sZCA/XG4gICAgICAgICAgICB0aGlzLmRpc3RUb1N0cmFpZ2h0TGluZVNlZ21lbnQoeCwgeSwgcDEsIHAyKSA6XG4gICAgICAgICAgICBudWxsO1xuICAgIH1cblxuICAgIGRpc3RUb1N0cmFpZ2h0TGluZVNlZ21lbnQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHAxOiBERy5Qb2ludCwgcDI6IERHLlBvaW50KSB7XG4gICAgICAgIGNvbnN0IGRpc3QgPSAoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikgPT4gTWF0aC5wb3coKHgxIC0geDIpLCAyKSArIE1hdGgucG93KCh5MSAtIHkyKSwgMik7XG4gICAgICAgIGNvbnN0IGwgPSBkaXN0KHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgICAgICBpZiAobCA9PSAwKSByZXR1cm4gZGlzdCh4LCB5LCBwMS54LCBwMS55KTtcbiAgICAgICAgbGV0IHQgPSAoKHggLSBwMS54KSAqIChwMi54IC0gcDEueCkgKyAoeSAtIHAxLnkpICogKHAyLnkgLSBwMS55KSkgLyBsO1xuICAgICAgICB0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpO1xuICAgICAgICByZXR1cm4gZGlzdCh4LCB5LCBwMS54ICsgdCAqIChwMi54IC0gcDEueCksIHAxLnkgKyB0ICogKHAyLnkgLSBwMS55KSlcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVEaXN0VG9DdXJ2ZUxpbmUoaTogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlciwgcDE6IERHLlBvaW50LCBwMjogREcuUG9pbnQsXG4gICAgICAgIHBjOiBERy5Qb2ludCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICAvKiBjYWxjdWxhdGluZyBjb29yZGluYXRlcyBvZiBhIHJlY3QgYXJvdW5kIGEgbGluZS4gSWYgY3Vyc29yIGNvb3JkcyBhcmUgb3V0c2lkZSB0aGlzIHNoYXBlIC0gYXNzdW1lIHRoYXRcbiAgICAgICAgcG9pbnQgaXMgbm90IG9uIGxpbmUgYW5kIGRvIG5vdCBjYWxjdWxhdGUgZGlzdGFuY2UgdG8gbGluZSAqL1xuICAgICAgICBsZXQgeE1pbiA9IE1hdGgubWluKHAxLngsIHAyLngsIHBjLngpO1xuICAgICAgICBsZXQgeE1heCA9IE1hdGgubWF4KHAxLngsIHAyLngsIHBjLngpO1xuICAgICAgICBsZXQgeU1pbiA9IE1hdGgubWluKHAxLnksIHAyLnksIHBjLnkpO1xuICAgICAgICBsZXQgeU1heCA9IE1hdGgubWF4KHAxLnksIHAyLnksIHBjLnkpO1xuXG4gICAgICAgIC8vYWRkaW5nIGEgY291cGxlIG9mIHBpeGVscyB0byBpbmNyZWFzZSB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSByZWN0XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDI7XG4gICAgICAgIGlmICh4ID49IHhNaW4gLSB0aHJlc2hvbGQgJiYgeCA8PSB4TWF4ICsgdGhyZXNob2xkICYmIHkgPj0geU1pbiAtIHRocmVzaG9sZCAmJiB5IDw9IHlNYXggKyB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHcgPSB4TWF4IC0geE1pbjtcbiAgICAgICAgICAgIGNvbnN0IGggPSB5TWF4IC0geU1pbjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZURpc3RUb0N1cnZlSW5SZWN0KHgsIHksIHAxLCBwYywgcDIsIHcsIGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZURpc3RUb0N1cnZlSW5SZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCBwMDogREcuUG9pbnQsIHAxOiBERy5Qb2ludCwgcDI6IERHLlBvaW50LFxuICAgICAgICB3OiBudW1iZXIsIGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHN0ZXBMZW4gPSAzO1xuICAgICAgICBjb25zdCBzdGVwc051bSA9IE1hdGguZmxvb3IoKHcgKyBoKSAvIHN0ZXBMZW4pO1xuICAgICAgICBjb25zdCBkZWx0YVQgPSAxIC8gc3RlcHNOdW07XG4gICAgICAgIGNvbnN0IGFyclggPSBuZXcgVWludDMyQXJyYXkoc3RlcHNOdW0pO1xuICAgICAgICBjb25zdCBhcnJZID0gbmV3IFVpbnQzMkFycmF5KHN0ZXBzTnVtKTtcbiAgICAgICAgbGV0IG1heEhXID0gbmV3IFVpbnQzMkFycmF5KHN0ZXBzTnVtKTtcbiAgICAgICAgbGV0IG1pblN1bUhXOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlSWR4cyA9IG5ldyBCaXRBcnJheShzdGVwc051bSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyWC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdCA9IGkgKiBkZWx0YVQ7XG4gICAgICAgICAgICBjb25zdCB4T25DdXJ2ZSA9IE1hdGgucG93KCgxIC0gdCksIDIpICogcDAueCArIDIgKiB0ICogKDEgLSB0KSAqIHAxLnggKyBNYXRoLnBvdyh0LCAyKSAqIHAyLng7XG4gICAgICAgICAgICBjb25zdCB5T25DdXJ2ZSA9IE1hdGgucG93KCgxIC0gdCksIDIpICogcDAueSArIDIgKiB0ICogKDEgLSB0KSAqIHAxLnkgKyBNYXRoLnBvdyh0LCAyKSAqIHAyLnk7XG4gICAgICAgICAgICBjb25zdCByZWN0VyA9IE1hdGguYWJzKHggLSB4T25DdXJ2ZSk7XG4gICAgICAgICAgICBjb25zdCByZWN0SCA9IE1hdGguYWJzKHkgLSB5T25DdXJ2ZSk7XG4gICAgICAgICAgICBjb25zdCBzdW1IVyA9IHJlY3RXICsgcmVjdEg7XG4gICAgICAgICAgICBpZiAoIW1pblN1bUhXIHx8IG1pblN1bUhXID4gc3VtSFcpXG4gICAgICAgICAgICAgICAgbWluU3VtSFcgPSBzdW1IVztcbiAgICAgICAgICAgIG1heEhXW2ldID0gTWF0aC5tYXgocmVjdFcsIHJlY3RIKTtcbiAgICAgICAgICAgIGFyclhbaV0gPSB4T25DdXJ2ZTtcbiAgICAgICAgICAgIGFycllbaV0gPSB5T25DdXJ2ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyclgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChtYXhIV1tpXSA8IG1pblN1bUhXISlcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVJZHhzLnNldEJpdChpLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1pbkRpc3Q6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBqID0gLTE7IChqID0gY2FuZGlkYXRlSWR4cy5maW5kTmV4dChqKSkgIT09IC0xOykge1xuICAgICAgICAgICAgY29uc3QgZGlzdCA9IE1hdGguaHlwb3QoKGFyclhbal0gLSB4KSwgKGFycllbal0gLSB5KSk7XG4gICAgICAgICAgICBpZiAoIW1pbkRpc3QgfHwgbWluRGlzdCA+IGRpc3QpXG4gICAgICAgICAgICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbkRpc3QhO1xuICAgIH1cblxuICAgIGdldExpbmVMZW5ndGgocDF4OiBudW1iZXIsIHAxeTogbnVtYmVyLCBwMng6IG51bWJlciwgcDJ5OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHAyeCAtIHAxeCwgMikgKyBNYXRoLnBvdyhwMnkgLSBwMXksIDIpKTtcbiAgICB9XG5cbiAgICBnZXRQb2ludE9uRGlzdGFuY2UocDF4OiBudW1iZXIsIHAxeTogbnVtYmVyLCBwMng6IG51bWJlciwgcDJ5OiBudW1iZXIsIGRpc3RhbmNlOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogREcuUG9pbnQge1xuICAgICAgICBjb25zdCBkeCA9IChwMnggLSBwMXgpIC8gbGVuZ3RoO1xuICAgICAgICBjb25zdCBkeSA9IChwMnkgLSBwMXkpIC8gbGVuZ3RoO1xuICAgICAgICBjb25zdCBwM3ggPSBwMnggLSBkaXN0YW5jZSAqIGR4O1xuICAgICAgICBjb25zdCBwM3kgPSBwMnkgLSBkaXN0YW5jZSAqIGR5O1xuXG4gICAgICAgIHJldHVybiBuZXcgREcuUG9pbnQocDN4LCBwM3kpO1xuICAgIH1cblxuICAgIGZpbmRDb250cm9sUG9pbnQoaWR4OiBudW1iZXIsIHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGk/OiBudW1iZXIpOiBERy5Qb2ludCB7XG4gICAgICAgIGNvbnN0IG1pZFggPSB4MSArICh4MiAtIHgxKSAvIDI7XG4gICAgICAgIGNvbnN0IG1pZFkgPSB5MSArICh5MiAtIHkxKSAvIDI7XG4gICAgICAgIGxldCBkeCA9IG1pZFggLSB4MTtcbiAgICAgICAgbGV0IGR5ID0gbWlkWSAtIHkxO1xuICAgICAgICBjb25zdCBkaXN0ID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgICAgZHggLz0gZGlzdDtcbiAgICAgICAgZHkgLz0gZGlzdDtcbiAgICAgICAgY29uc3QgcGVycGVuZGljdWxhckxlbiA9IDUwICogTWF0aC5jZWlsKGlkeCAvIDIpO1xuICAgICAgICByZXR1cm4gaWR4ICUgMiA9PT0gMCA/XG4gICAgICAgICAgICBuZXcgREcuUG9pbnQobWlkWCArIChwZXJwZW5kaWN1bGFyTGVuIC8gMikgKiBkeSwgbWlkWSAtIChwZXJwZW5kaWN1bGFyTGVuIC8gMikgKiBkeCkgOlxuICAgICAgICAgICAgbmV3IERHLlBvaW50KG1pZFggLSAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHksIG1pZFkgKyAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHgpO1xuICAgIH1cblxuICAgIGNhbnZhc0Fycm93KHBhdGg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgYXJyb3dFbmRYOiBudW1iZXIsIGFycm93RW5kWTogbnVtYmVyLCBxdWFkWDogbnVtYmVyLCBxdWFkWTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFycm93QW5nbGUgPSBNYXRoLmF0YW4yKHF1YWRYIC0gYXJyb3dFbmRYLCBxdWFkWSAtIGFycm93RW5kWSkgKyBNYXRoLlBJO1xuICAgICAgICBwYXRoLm1vdmVUbyhhcnJvd0VuZFggLSAodGhpcy5hcnJvd1dpZHRoICogTWF0aC5zaW4oYXJyb3dBbmdsZSAtIE1hdGguUEkgLyAxMCkpLFxuICAgICAgICAgICAgYXJyb3dFbmRZIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguY29zKGFycm93QW5nbGUgLSBNYXRoLlBJIC8gMTApKSk7XG4gICAgICAgIHBhdGgubGluZVRvKGFycm93RW5kWCwgYXJyb3dFbmRZKTtcbiAgICAgICAgcGF0aC5saW5lVG8oYXJyb3dFbmRYIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguc2luKGFycm93QW5nbGUgKyBNYXRoLlBJIC8gMTApKSxcbiAgICAgICAgICAgIGFycm93RW5kWSAtICh0aGlzLmFycm93V2lkdGggKiBNYXRoLmNvcyhhcnJvd0FuZ2xlICsgTWF0aC5QSSAvIDEwKSkpO1xuICAgIH1cblxufSJdfQ==