@datagrok-libraries/utils 4.6.0 → 4.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # utils changelog
2
2
 
3
+ ## 4.6.1 (2025-07-28)
4
+
5
+ Expect support dayjs
6
+ Expect support checking for addinal keys/colums
7
+ Json serialization added dayjs
8
+
3
9
  ## 4.6.0 (2025-07-25)
4
10
 
5
11
  Compatibility with 1.26.0
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "email": "aparamonov@datagrok.ai"
9
9
  },
10
10
  "fullName": "Utils",
11
- "version": "4.6.0",
11
+ "version": "4.6.1",
12
12
  "description": "Common utilities",
13
13
  "dependencies": {
14
14
  "cash-dom": "^8.1.1",
package/src/expect.d.ts CHANGED
@@ -15,6 +15,7 @@ export declare class ExpectError extends Error {
15
15
  }
16
16
  export interface ExpectDeepEqualOptions {
17
17
  floatTolerance?: number;
18
+ forbidAdditionalProps?: boolean;
18
19
  maxErrorsReport?: number;
19
20
  maxDepth?: number;
20
21
  prefix?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["expect.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAA;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC;AACtE,MAAM,MAAM,aAAa,GACvB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,aAAa,KAAK,YAAY,EAAE,GAAG,IAAI,CAAC;AAExH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;CACxB;AAGD,eAAO,MAAM,iBAAiB,EAAE,WAAW,EAc1C,CAAC;AAGF,qBAAa,WAAY,SAAQ,KAAK;CAAG;AAGzC,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAGlG;AAGD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAC1C,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB"}
1
+ {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["expect.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAA;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC;AACtE,MAAM,MAAM,aAAa,GACvB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,aAAa,KAAK,YAAY,EAAE,GAAG,IAAI,CAAC;AAExH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;CACxB;AAGD,eAAO,MAAM,iBAAiB,EAAE,WAAW,EAe1C,CAAC;AAGF,qBAAa,WAAY,SAAQ,KAAK;CAAG;AAGzC,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAGlG;AAGD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAC1C,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB"}
package/src/expect.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
+ import dayjs from 'dayjs';
2
3
  // default checkers sequence, order matters!
3
4
  export const defaulCheckersSeq = [
4
5
  { name: 'NaN', predicate: nanPredicate, checker: nopChecker },
@@ -13,6 +14,7 @@ export const defaulCheckersSeq = [
13
14
  { name: 'ArrayBuffer', predicate: arrayBufferPredicate, checker: arrayBufferChecker },
14
15
  { name: 'Array', predicate: arrayPredicate, checker: arrayChecker },
15
16
  { name: 'DataFrame', predicate: dataframePredicate, checker: dataframeChecker },
17
+ { name: 'DayJs', predicate: dayjsPredicate, checker: dayjsChecker },
16
18
  { name: 'Object', predicate: objectPredicate, checker: objectChecker },
17
19
  ];
18
20
  // custom error class, just in case
@@ -68,13 +70,10 @@ function floatChecker(actual, expected, state) {
68
70
  function mapPredicate(actual, expected) {
69
71
  return (actual instanceof Map && expected instanceof Map);
70
72
  }
71
- function mapChecker(actual, expected, _state, checkDeep) {
73
+ function mapChecker(actual, expected, state, checkDeep) {
72
74
  const errors = [];
73
- if (actual.size !== expected.size) {
74
- const err = { msg: `Maps are of different size: actual map size is ${actual.size} ` +
75
- `and expected map size is ${expected.size}` };
76
- errors.push(err);
77
- }
75
+ if (state.options.forbidAdditionalProps)
76
+ errors.push(...checkAdditionalProps([...actual.keys()], [...expected.keys()]));
78
77
  for (const k of expected.keys()) {
79
78
  const aval = actual.get(k);
80
79
  const exval = expected.get(k);
@@ -115,13 +114,15 @@ function arrayChecker(actual, expected, _state, checkDeep) {
115
114
  function dataframePredicate(actual, expected) {
116
115
  return (actual instanceof DG.DataFrame && expected instanceof DG.DataFrame);
117
116
  }
118
- function dataframeChecker(actual, expected, _state, checkDeep) {
117
+ function dataframeChecker(actual, expected, state, checkDeep) {
119
118
  const errors = [];
120
119
  if (actual.rowCount !== expected.rowCount) {
121
120
  const err = { msg: `Dataframes has different row count: actual row count is ${actual.rowCount} ` +
122
121
  `and expected row count is ${expected.rowCount}` };
123
122
  errors.push(err);
124
123
  }
124
+ if (state.options.forbidAdditionalProps)
125
+ errors.push(...checkAdditionalProps([...actual.columns].map(x => x.name), [...expected.columns].map(x => x.name)));
125
126
  for (const column of expected.columns) {
126
127
  const actualColumn = actual.columns.byName(column.name);
127
128
  if (!actualColumn) {
@@ -148,20 +149,43 @@ function arrayBufferPredicate(actual, expected) {
148
149
  function arrayBufferChecker(actual, expected, state, checkDeep) {
149
150
  return arrayChecker(Array.from(new Uint8Array(actual)), Array.from(new Uint8Array(expected)), state, checkDeep);
150
151
  }
152
+ function dayjsPredicate(actual, expected) {
153
+ return dayjs.isDayjs(actual) && dayjs.isDayjs(expected);
154
+ }
155
+ function dayjsChecker(actual, expected) {
156
+ if (!expected.isSame(actual)) {
157
+ const msg = `Different date, expected ${expected.toISOString()} actual ${actual.toISOString()}`;
158
+ return [{ msg }];
159
+ }
160
+ }
151
161
  function objectPredicate(actual, expected) {
152
162
  return (typeof actual === 'object' && typeof expected === 'object');
153
163
  }
154
- function objectChecker(actual, expected, _state, checkDeep) {
164
+ function objectChecker(actual, expected, state, checkDeep) {
155
165
  const errors = [];
166
+ if (state.options.forbidAdditionalProps)
167
+ errors.push(...checkAdditionalProps([...Object.keys(actual)], [...Object.keys(expected)]));
156
168
  for (const [expectedKey, expectedValue] of Object.entries(expected)) {
157
169
  const actualValue = actual[expectedKey];
158
170
  checkDeep([expectedKey], actualValue, expectedValue);
159
171
  }
160
172
  return errors;
161
173
  }
174
+ function checkAdditionalProps(actual, expected) {
175
+ const errors = [];
176
+ const expectedSet = new Set(expected);
177
+ for (const prop of actual) {
178
+ if (!expectedSet.has(prop)) {
179
+ const err = { msg: `Additional key/col item in actual data found: ${prop}` };
180
+ errors.push(err);
181
+ }
182
+ }
183
+ return errors;
184
+ }
162
185
  const defaultOptions = {
163
186
  floatTolerance: 0.001,
164
187
  maxErrorsReport: 5,
188
+ forbidAdditionalProps: false,
165
189
  maxDepth: 128,
166
190
  checkersSeq: defaulCheckersSeq,
167
191
  prefix: '',
@@ -229,4 +253,4 @@ class ExpectRunner {
229
253
  return msg;
230
254
  }
231
255
  }
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhwZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFtQnRDLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBa0I7SUFDOUMsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQztJQUMzRCxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDO0lBQzdELEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUM7SUFDL0QsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQztJQUNoRSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUM7SUFDbEUsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBQztJQUNoRSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDO0lBQ2pFLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUM7SUFDM0QsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQztJQUMzRCxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBQztJQUNu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QUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs7WUFDdEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFBLENBQUMsQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbi8vIGN1c3RvbSBjaGVja2VycyBpbnRlcmZhY2VzIEFQSSBmb3IgYWRkaW5nIGN1c3RvbSBjaGVja3NcbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tlckVycm9yIHtcbiAgcGF0aD86IHN0cmluZ1tdLFxuICBtc2c6IHN0cmluZyxcbn1cblxuZXhwb3J0IHR5cGUgTmVzdGVkQ2hlY2tlciA9IChwYXRoOiBzdHJpbmdbXSwgYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpID0+IHZvaWRcbmV4cG9ydCB0eXBlIEV4cGVjdFByZWRpY2F0ZSA9IChhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkgPT4gYm9vbGVhbjtcbmV4cG9ydCB0eXBlIEV4cGVjdENoZWNrZXIgPVxuICAoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnksIHN0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrTmVzdGVkOiBOZXN0ZWRDaGVja2VyKSA9PiBDaGVja2VyRXJyb3JbXSB8IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tlckl0ZW0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHByZWRpY2F0ZTogRXhwZWN0UHJlZGljYXRlO1xuICBjaGVja2VyOiBFeHBlY3RDaGVja2VyO1xufVxuXG4vLyBkZWZhdWx0IGNoZWNrZXJzIHNlcXVlbmNlLCBvcmRlciBtYXR0ZXJzIVxuZXhwb3J0IGNvbnN0IGRlZmF1bENoZWNrZXJzU2VxOiBDaGVja2VySXRlbVtdID0gW1xuICB7bmFtZTogJ05hTicsIHByZWRpY2F0ZTogbmFuUHJlZGljYXRlLCBjaGVja2VyOiBub3BDaGVja2VyfSxcbiAge25hbWU6ICdOdWxsJywgcHJlZGljYXRlOiBudWxsUHJlZGljYXRlLCBjaGVja2VyOiBub3BDaGVja2VyfSxcbiAge25hbWU6ICdCb29sZWFuJywgcHJlZGljYXRlOiBib29sUHJlZGljYXRlLCBjaGVja2VyOiBlcUNoZWNrZXJ9LFxuICB7bmFtZTogJ1N0cmluZycsIHByZWRpY2F0ZTogc3RyaW5nUHJlZGljYXRlLCBjaGVja2VyOiBlcUNoZWNrZXJ9LFxuICB7bmFtZTogJ0ludGVnZXInLCBwcmVkaWNhdGU6IGludGVnZXJQcmVkaWNhdGUsIGNoZWNrZXI6IGVxQ2hlY2tlcn0sXG4gIHtuYW1lOiAnQmlnSW50JywgcHJlZGljYXRlOiBiaWdJbnRQcmVkaWNhdGUsIGNoZWNrZXI6IGVxQ2hlY2tlcn0sXG4gIHtuYW1lOiAnRmxvYXQnLCBwcmVkaWNhdGU6IGZsb2F0UHJlZGljYXRlLCBjaGVja2VyOiBmbG9hdENoZWNrZXJ9LFxuICB7bmFtZTogJ01hcCcsIHByZWRpY2F0ZTogbWFwUHJlZGljYXRlLCBjaGVja2VyOiBtYXBDaGVja2VyfSxcbiAge25hbWU6ICdTZXQnLCBwcmVkaWNhdGU6IHNldFByZWRpY2F0ZSwgY2hlY2tlcjogc2V0Q2hlY2tlcn0sXG4gIHtuYW1lOiAnQXJyYXlCdWZmZXInLCBwcmVkaWNhdGU6IGFycmF5QnVmZmVyUHJlZGljYXRlLCBjaGVja2VyOiBhcnJheUJ1ZmZlckNoZWNrZXJ9LFxuICB7bmFtZTogJ0FycmF5JywgcHJlZGljYXRlOiBhcnJheVByZWRpY2F0ZSwgY2hlY2tlcjogYXJyYXlDaGVja2VyfSxcbiAge25hbWU6ICdEYXRhRnJhbWUnLCBwcmVkaWNhdGU6IGRhdGFmcmFtZVByZWRpY2F0ZSwgY2hlY2tlcjogZGF0YWZyYW1lQ2hlY2tlcn0sXG4gIHtuYW1lOiAnT2JqZWN0JywgcHJlZGljYXRlOiBvYmplY3RQcmVkaWNhdGUsIGNoZWNrZXI6IG9iamVjdENoZWNrZXJ9LFxuXTtcblxuLy8gY3VzdG9tIGVycm9yIGNsYXNzLCBqdXN0IGluIGNhc2VcbmV4cG9ydCBjbGFzcyBFeHBlY3RFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbi8vIGV4cGVjdERlZXBFcXVhbCBvcHRpb25zXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVjdERlZXBFcXVhbE9wdGlvbnMge1xuICBmbG9hdFRvbGVyYW5jZT86IG51bWJlcixcbiAgbWF4RXJyb3JzUmVwb3J0PzogbnVtYmVyLFxuICBtYXhEZXB0aD86IG51bWJlcixcbiAgcHJlZml4Pzogc3RyaW5nLFxuICBjaGVja2Vyc1NlcT86IENoZWNrZXJJdGVtW10sXG59XG5cbi8vIHB1YmxpYyBBUElcbmV4cG9ydCBmdW5jdGlvbiBleHBlY3REZWVwRXF1YWwoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnksIG9wdGlvbnM/OiBFeHBlY3REZWVwRXF1YWxPcHRpb25zKTogdm9pZCB7XG4gIGNvbnN0IHJ1bm5lciA9IG5ldyBFeHBlY3RSdW5uZXIob3B0aW9ucyk7XG4gIHJ1bm5lci5ydW4oYWN0dWFsLCBleHBlY3RlZCk7XG59XG5cbi8vIGltcGxlbWVudGF0aW9uIGRldGFpbHNcbmV4cG9ydCBpbnRlcmZhY2UgRXhwZWN0UnVubmVyU3RhdGUge1xuICBvcHRpb25zOiBSZXF1aXJlZDxFeHBlY3REZWVwRXF1YWxPcHRpb25zPjtcbiAgZXJyb3JzOiBDaGVja2VyRXJyb3JbXTtcbiAgY3VycmVudFBhdGg6IHN0cmluZ1tdO1xufVxuXG5mdW5jdGlvbiBuYW5QcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIE51bWJlci5pc05hTihhY3R1YWwpICYmIE51bWJlci5pc05hTihleHBlY3RlZCk7XG59XG5cbmZ1bmN0aW9uIG51bGxQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIGFjdHVhbCA9PSBudWxsICYmIGV4cGVjdGVkID09IG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcENoZWNrZXIoKSB7XG4gIHJldHVybjtcbn1cblxuXG5mdW5jdGlvbiBpbnRlZ2VyUHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAoTnVtYmVyLmlzSW50ZWdlcihhY3R1YWwpICYmIE51bWJlci5pc0ludGVnZXIoZXhwZWN0ZWQpKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nUHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIGFjdHVhbCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIGJvb2xQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuICh0eXBlb2YgYWN0dWFsID09PSAnYm9vbGVhbicgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnYm9vbGVhbicpO1xufVxuXG5mdW5jdGlvbiBiaWdJbnRQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuICh0eXBlb2YgYWN0dWFsID09PSAnYmlnaW50JyAmJiB0eXBlb2YgZXhwZWN0ZWQgPT09ICdiaWdpbnQnKTtcbn1cblxuZnVuY3Rpb24gZXFDaGVja2VyKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIGNvbnN0IGFyZUVxdWFsID0gYWN0dWFsID09PSBleHBlY3RlZDtcbiAgaWYgKCFhcmVFcXVhbCkge1xuICAgIGNvbnN0IG1zZyA9IGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfWA7XG4gICAgcmV0dXJuIFt7bXNnfV07XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBmbG9hdFByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKHR5cGVvZiBhY3R1YWwgPT09ICdudW1iZXInICYmIHR5cGVvZiBleHBlY3RlZCA9PT0gJ251bWJlcicpO1xufVxuXG5mdW5jdGlvbiBmbG9hdENoZWNrZXIoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnksIHN0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4pOiBDaGVja2VyRXJyb3JbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICgoYWN0dWFsID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAoaXNOYU4oYWN0dWFsKSAmJiBpc05hTihleHBlY3RlZCkpKVxuICAgIHJldHVybjtcbiAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCBzdGF0ZS5vcHRpb25zLmZsb2F0VG9sZXJhbmNlO1xuICBpZiAoIWFyZUVxdWFsKSB7XG4gICAgY29uc3QgbXNnID0gYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3N0YXRlLm9wdGlvbnMuZmxvYXRUb2xlcmFuY2V9KWA7XG4gICAgcmV0dXJuIFt7bXNnfV07XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBtYXBQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIChhY3R1YWwgaW5zdGFuY2VvZiBNYXAgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBNYXApO1xufVxuXG5mdW5jdGlvbiBtYXBDaGVja2VyKGFjdHVhbDogTWFwPGFueSwgYW55PiwgZXhwZWN0ZWQ6IE1hcDxhbnksIGFueT4sXG4gIF9zdGF0ZTogUmVhZG9ubHk8RXhwZWN0UnVubmVyU3RhdGU+LCBjaGVja0RlZXA6IE5lc3RlZENoZWNrZXJcbik6IENoZWNrZXJFcnJvcltdIHtcbiAgY29uc3QgZXJyb3JzOiBDaGVja2VyRXJyb3JbXSA9IFtdO1xuICBpZiAoYWN0dWFsLnNpemUgIT09IGV4cGVjdGVkLnNpemUpIHtcbiAgICBjb25zdCBlcnIgPSB7bXNnOiBgTWFwcyBhcmUgb2YgZGlmZmVyZW50IHNpemU6IGFjdHVhbCBtYXAgc2l6ZSBpcyAke2FjdHVhbC5zaXplfSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgbWFwIHNpemUgaXMgJHtleHBlY3RlZC5zaXplfWB9O1xuICAgIGVycm9ycy5wdXNoKGVycik7XG4gIH1cbiAgZm9yIChjb25zdCBrIG9mIGV4cGVjdGVkLmtleXMoKSkge1xuICAgIGNvbnN0IGF2YWwgPSBhY3R1YWwuZ2V0KGspO1xuICAgIGNvbnN0IGV4dmFsID0gZXhwZWN0ZWQuZ2V0KGspO1xuICAgIGNoZWNrRGVlcChbU3RyaW5nKGspXSwgYXZhbCwgZXh2YWwpXG4gIH1cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuXG5mdW5jdGlvbiBzZXRQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIChhY3R1YWwgaW5zdGFuY2VvZiBTZXQgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBTZXQpO1xufVxuXG5mdW5jdGlvbiBzZXRDaGVja2VyKGFjdHVhbDogU2V0PGFueT4sIGV4cGVjdGVkOiBTZXQ8YW55PixcbiAgX3N0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrRGVlcDogTmVzdGVkQ2hlY2tlclxuKTogQ2hlY2tlckVycm9yW10ge1xuICBjb25zdCBlcnJvcnM6IENoZWNrZXJFcnJvcltdID0gW107XG4gIGlmIChhY3R1YWwuc2l6ZSAhPT0gZXhwZWN0ZWQuc2l6ZSkge1xuICAgIGNvbnN0IGVyciA9IHttc2c6IGBTZXRzIGFyZSBvZiBkaWZmZXJlbnQgc2l6ZTogYWN0dWFsIHNldCBzaXplIGlzICR7YWN0dWFsLnNpemV9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBzZXQgc2l6ZSBpcyAke2V4cGVjdGVkLnNpemV9YH07XG4gICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgfVxuICBmb3IgKGNvbnN0IGV4dmFsIG9mIGV4cGVjdGVkLnZhbHVlcygpKSB7XG4gICAgY29uc3QgYXZhbCA9IGFjdHVhbC5oYXMoZXh2YWwpO1xuICAgIGNoZWNrRGVlcChbU3RyaW5nKGV4dmFsKV0sIGF2YWwsIHRydWUpO1xuICB9XG4gIHJldHVybiBlcnJvcnM7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIChhY3R1YWwgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIEFycmF5KTtcbn1cblxuZnVuY3Rpb24gYXJyYXlDaGVja2VyKGFjdHVhbDogYW55W10sIGV4cGVjdGVkOiBhbnlbXSxcbiAgX3N0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrRGVlcDogTmVzdGVkQ2hlY2tlcik6IENoZWNrZXJFcnJvcltdIHtcbiAgY29uc3QgZXJyb3JzOiBDaGVja2VyRXJyb3JbXSA9IFtdO1xuICBpZiAoYWN0dWFsLmxlbmd0aCAhPT0gZXhwZWN0ZWQubGVuZ3RoKSB7XG4gICAgY29uc3QgZXJyID0ge21zZzogYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbC5sZW5ndGh9IGAgK1xuICAgICAgYGFuZCBleHBlY3RlZCBhcnJheSBsZW5ndGggaXMgJHtleHBlY3RlZC5sZW5ndGh9YH07XG4gICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbC5sZW5ndGg7IGkrKylcbiAgICBjaGVja0RlZXAoW1N0cmluZyhpKV0sIGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cblxuZnVuY3Rpb24gZGF0YWZyYW1lUHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAoYWN0dWFsIGluc3RhbmNlb2YgREcuRGF0YUZyYW1lICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgREcuRGF0YUZyYW1lKTtcbn1cblxuZnVuY3Rpb24gZGF0YWZyYW1lQ2hlY2tlcihhY3R1YWw6IERHLkRhdGFGcmFtZSwgZXhwZWN0ZWQ6IERHLkRhdGFGcmFtZSxcbiAgX3N0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrRGVlcDogTmVzdGVkQ2hlY2tlcik6IENoZWNrZXJFcnJvcltdIHtcbiAgY29uc3QgZXJyb3JzOiBDaGVja2VyRXJyb3JbXSA9IFtdO1xuICBpZiAoYWN0dWFsLnJvd0NvdW50ICE9PSBleHBlY3RlZC5yb3dDb3VudCkge1xuICAgIGNvbnN0IGVyciA9IHttc2c6IGBEYXRhZnJhbWVzIGhhcyBkaWZmZXJlbnQgcm93IGNvdW50OiBhY3R1YWwgcm93IGNvdW50IGlzICR7YWN0dWFsLnJvd0NvdW50fSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgcm93IGNvdW50IGlzICR7ZXhwZWN0ZWQucm93Q291bnR9YH07XG4gICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgfVxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBleHBlY3RlZC5jb2x1bW5zKSB7XG4gICAgY29uc3QgYWN0dWFsQ29sdW1uID0gYWN0dWFsLmNvbHVtbnMuYnlOYW1lKGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoIWFjdHVhbENvbHVtbikge1xuICAgICAgY29uc3QgZXJyID0ge21zZzogYENvbHVtbiAke2NvbHVtbi5uYW1lfSBub3QgZm91bmRgfTtcbiAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFjdHVhbENvbHVtbi50eXBlICE9PSBjb2x1bW4udHlwZSkge1xuICAgICAgY29uc3QgZXJyID0ge21zZzogYENvbHVtbiAke2NvbHVtbi5uYW1lfSB0eXBlIGV4cGVjdGVkICR7Y29sdW1uLnR5cGV9IGdvdCAke2FjdHVhbENvbHVtbi50eXBlfWB9O1xuICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkLnJvd0NvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsQ29sdW1uLmdldChpKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBjb2x1bW4uZ2V0KGkpO1xuICAgICAgY2hlY2tEZWVwKFtjb2x1bW4ubmFtZSwgU3RyaW5nKGkpXSwgYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3JzO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5QnVmZmVyUHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAoYWN0dWFsIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG59XG5cbmZ1bmN0aW9uIGFycmF5QnVmZmVyQ2hlY2tlcihhY3R1YWw6IEFycmF5QnVmZmVyLCBleHBlY3RlZDogQXJyYXlCdWZmZXIsXG4gIHN0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrRGVlcDogTmVzdGVkQ2hlY2tlcikge1xuICByZXR1cm4gYXJyYXlDaGVja2VyKEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoYWN0dWFsKSksIEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoZXhwZWN0ZWQpKSwgc3RhdGUsIGNoZWNrRGVlcCk7XG59XG5cblxuZnVuY3Rpb24gb2JqZWN0UHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnb2JqZWN0Jyk7XG59XG5cbmZ1bmN0aW9uIG9iamVjdENoZWNrZXIoYWN0dWFsOiBSZWNvcmQ8YW55LCBhbnk+LCBleHBlY3RlZDogUmVjb3JkPGFueSwgYW55PixcbiAgX3N0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrRGVlcDogTmVzdGVkQ2hlY2tlcik6IENoZWNrZXJFcnJvcltdIHtcbiAgY29uc3QgZXJyb3JzOiBDaGVja2VyRXJyb3JbXSA9IFtdO1xuICBmb3IgKGNvbnN0IFtleHBlY3RlZEtleSwgZXhwZWN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWQpKSB7XG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgIGNoZWNrRGVlcChbZXhwZWN0ZWRLZXldLCBhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IFJlcXVpcmVkPEV4cGVjdERlZXBFcXVhbE9wdGlvbnM+ID0ge1xuICBmbG9hdFRvbGVyYW5jZTogMC4wMDEsXG4gIG1heEVycm9yc1JlcG9ydDogNSxcbiAgbWF4RGVwdGg6IDEyOCxcbiAgY2hlY2tlcnNTZXE6IGRlZmF1bENoZWNrZXJzU2VxLFxuICBwcmVmaXg6ICcnLFxufTtcblxuXG5jbGFzcyBFeHBlY3RSdW5uZXIge1xuICBwcml2YXRlIG9wdGlvbnM6IFJlcXVpcmVkPEV4cGVjdERlZXBFcXVhbE9wdGlvbnM+O1xuICBwcml2YXRlIHN0YXRlOiBFeHBlY3RSdW5uZXJTdGF0ZTtcblxuICBjb25zdHJ1Y3RvcihvcHM6IEV4cGVjdERlZXBFcXVhbE9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMub3B0aW9ucyA9IHsuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3BzfTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZXJyb3JzOiBbXSxcbiAgICAgIGN1cnJlbnRQYXRoOiBbXSxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHJ1bihhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMubWF0Y2hDaGVja2VyKGFjdHVhbCwgZXhwZWN0ZWQpO1xuICAgIHRoaXMuY2hlY2tFcnJvcnNMaW1pdCgwKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tEZWVwKHBhdGg6IHN0cmluZ1tdLCBhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICAgIGNvbnN0IHBhdGhMZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICB0aGlzLnN0YXRlLmN1cnJlbnRQYXRoLnB1c2goLi4ucGF0aCk7XG4gICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFBhdGgubGVuZ3RoID4gdGhpcy5vcHRpb25zLm1heERlcHRoKVxuICAgICAgdGhyb3cgbmV3IEV4cGVjdEVycm9yKGBNYXggZGVwdGggJHt0aGlzLm9wdGlvbnMubWF4RGVwdGh9IGlzIGV4Y2VlZGVkLCBwb3RlbnRpYWxseSBhIGNpcmN1bGFyIHN0cnVjdHVyZWApO1xuXG4gICAgdGhpcy5tYXRjaENoZWNrZXIoYWN0dWFsLCBleHBlY3RlZCk7XG4gICAgdGhpcy5zdGF0ZS5jdXJyZW50UGF0aC5zcGxpY2UoLXBhdGhMZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaENoZWNrZXIoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHtwcmVkaWNhdGUsIGNoZWNrZXJ9IG9mIHRoaXMub3B0aW9ucy5jaGVja2Vyc1NlcSkge1xuICAgICAgaWYgKHByZWRpY2F0ZShhY3R1YWwsIGV4cGVjdGVkKSkge1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IGNoZWNrZXIoYWN0dWFsLCBleHBlY3RlZCwgdGhpcy5zdGF0ZSwgdGhpcy5jaGVja0RlZXAuYmluZCh0aGlzKSk7XG4gICAgICAgIGlmIChlcnJvcnMpXG4gICAgICAgICAgZXJyb3JzLm1hcCgoZSkgPT4gdGhpcy5hZGRFcnJvcihlKSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZm91bmQpIHtcbiAgICAgIGNvbnN0IGVyciA9IHttc2c6IGBUeXBlIG1pc21hdGNoIG9yIG5vIGNoZWNrZXIgZGVmaW5lZDogZXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH1gfTtcbiAgICAgIHRoaXMuYWRkRXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEVycm9yKGVycjogQ2hlY2tlckVycm9yKTogdm9pZCB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBbLi4uKHRoaXMuc3RhdGUuY3VycmVudFBhdGggPz8gW10pLCAuLi4oZXJyLnBhdGggPz8gW10pXTtcbiAgICBjb25zdCBmZXJyOiBDaGVja2VyRXJyb3IgPSB7XG4gICAgICBwYXRoOiBmdWxsUGF0aCxcbiAgICAgIG1zZzogZXJyLm1zZyxcbiAgICB9O1xuICAgIHRoaXMuc3RhdGUuZXJyb3JzLnB1c2goZmVycik7XG4gICAgdGhpcy5jaGVja0Vycm9yc0xpbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRXJyb3JzTGltaXQobGltaXQgPSB0aGlzLm9wdGlvbnMubWF4RXJyb3JzUmVwb3J0KSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZXJyb3JzLmxlbmd0aCA+IGxpbWl0KSB7XG4gICAgICBjb25zdCByZXBvcnQgPSB0aGlzLm1ha2VSZXBvcnQoKTtcbiAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihyZXBvcnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFrZVJlcG9ydCgpIHtcbiAgICBjb25zdCBtc2cgPSB0aGlzLnN0YXRlLmVycm9ycy5tYXAoKGUpID0+IHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IChlLnBhdGggPz8gW10pLm1hcCgoYSkgPT4gYFsnJHtTdHJpbmcoYSl9J11gKS5qb2luKCcuJyk7XG4gICAgICBjb25zdCBtc2cgPSBwcmVmaXggPyBgJHtwcmVmaXh9OiAke2UubXNnfWAgOiBlLm1zZztcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJlZml4ID8gYCR7dGhpcy5vcHRpb25zLnByZWZpeH06ICR7bXNnfWAgOiBtc2c7XG4gICAgfSkuc2xpY2UoMCwgdGhpcy5vcHRpb25zLm1heEVycm9yc1JlcG9ydCkuam9pbignXFxuJyk7XG4gICAgcmV0dXJuIG1zZztcbiAgfVxufVxuIl19
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhwZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBbUIxQiw0Q0FBNEM7QUFDNUMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWtCO0lBQzlDLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUM7SUFDM0QsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQztJQUM3RCxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDO0lBQy9ELEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUM7SUFDaEUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDO0lBQ2xFLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUM7SUFDaEUsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBQztJQUNqRSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDO0lBQzNELEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUM7SUFDM0QsRUFBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxvQkFBb0Is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QUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcblxuLy8gY3VzdG9tIGNoZWNrZXJzIGludGVyZmFjZXMgQVBJIGZvciBhZGRpbmcgY3VzdG9tIGNoZWNrc1xuZXhwb3J0IGludGVyZmFjZSBDaGVja2VyRXJyb3Ige1xuICBwYXRoPzogc3RyaW5nW10sXG4gIG1zZzogc3RyaW5nLFxufVxuXG5leHBvcnQgdHlwZSBOZXN0ZWRDaGVja2VyID0gKHBhdGg6IHN0cmluZ1tdLCBhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkgPT4gdm9pZFxuZXhwb3J0IHR5cGUgRXhwZWN0UHJlZGljYXRlID0gKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSA9PiBib29sZWFuO1xuZXhwb3J0IHR5cGUgRXhwZWN0Q2hlY2tlciA9XG4gIChhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSwgc3RhdGU6IFJlYWRvbmx5PEV4cGVjdFJ1bm5lclN0YXRlPiwgY2hlY2tOZXN0ZWQ6IE5lc3RlZENoZWNrZXIpID0+IENoZWNrZXJFcnJvcltdIHwgdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBDaGVja2VySXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgcHJlZGljYXRlOiBFeHBlY3RQcmVkaWNhdGU7XG4gIGNoZWNrZXI6IEV4cGVjdENoZWNrZXI7XG59XG5cbi8vIGRlZmF1bHQgY2hlY2tlcnMgc2VxdWVuY2UsIG9yZGVyIG1hdHRlcnMhXG5leHBvcnQgY29uc3QgZGVmYXVsQ2hlY2tlcnNTZXE6IENoZWNrZXJJdGVtW10gPSBbXG4gIHtuYW1lOiAnTmFOJywgcHJlZGljYXRlOiBuYW5QcmVkaWNhdGUsIGNoZWNrZXI6IG5vcENoZWNrZXJ9LFxuICB7bmFtZTogJ051bGwnLCBwcmVkaWNhdGU6IG51bGxQcmVkaWNhdGUsIGNoZWNrZXI6IG5vcENoZWNrZXJ9LFxuICB7bmFtZTogJ0Jvb2xlYW4nLCBwcmVkaWNhdGU6IGJvb2xQcmVkaWNhdGUsIGNoZWNrZXI6IGVxQ2hlY2tlcn0sXG4gIHtuYW1lOiAnU3RyaW5nJywgcHJlZGljYXRlOiBzdHJpbmdQcmVkaWNhdGUsIGNoZWNrZXI6IGVxQ2hlY2tlcn0sXG4gIHtuYW1lOiAnSW50ZWdlcicsIHByZWRpY2F0ZTogaW50ZWdlclByZWRpY2F0ZSwgY2hlY2tlcjogZXFDaGVja2VyfSxcbiAge25hbWU6ICdCaWdJbnQnLCBwcmVkaWNhdGU6IGJpZ0ludFByZWRpY2F0ZSwgY2hlY2tlcjogZXFDaGVja2VyfSxcbiAge25hbWU6ICdGbG9hdCcsIHByZWRpY2F0ZTogZmxvYXRQcmVkaWNhdGUsIGNoZWNrZXI6IGZsb2F0Q2hlY2tlcn0sXG4gIHtuYW1lOiAnTWFwJywgcHJlZGljYXRlOiBtYXBQcmVkaWNhdGUsIGNoZWNrZXI6IG1hcENoZWNrZXJ9LFxuICB7bmFtZTogJ1NldCcsIHByZWRpY2F0ZTogc2V0UHJlZGljYXRlLCBjaGVja2VyOiBzZXRDaGVja2VyfSxcbiAge25hbWU6ICdBcnJheUJ1ZmZlcicsIHByZWRpY2F0ZTogYXJyYXlCdWZmZXJQcmVkaWNhdGUsIGNoZWNrZXI6IGFycmF5QnVmZmVyQ2hlY2tlcn0sXG4gIHtuYW1lOiAnQXJyYXknLCBwcmVkaWNhdGU6IGFycmF5UHJlZGljYXRlLCBjaGVja2VyOiBhcnJheUNoZWNrZXJ9LFxuICB7bmFtZTogJ0RhdGFGcmFtZScsIHByZWRpY2F0ZTogZGF0YWZyYW1lUHJlZGljYXRlLCBjaGVja2VyOiBkYXRhZnJhbWVDaGVja2VyfSxcbiAge25hbWU6ICdEYXlKcycsIHByZWRpY2F0ZTogZGF5anNQcmVkaWNhdGUsIGNoZWNrZXI6IGRheWpzQ2hlY2tlcn0sXG4gIHtuYW1lOiAnT2JqZWN0JywgcHJlZGljYXRlOiBvYmplY3RQcmVkaWNhdGUsIGNoZWNrZXI6IG9iamVjdENoZWNrZXJ9LFxuXTtcblxuLy8gY3VzdG9tIGVycm9yIGNsYXNzLCBqdXN0IGluIGNhc2VcbmV4cG9ydCBjbGFzcyBFeHBlY3RFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbi8vIGV4cGVjdERlZXBFcXVhbCBvcHRpb25zXG5leHBvcnQgaW50ZXJmYWNlIEV4cGVjdERlZXBFcXVhbE9wdGlvbnMge1xuICBmbG9hdFRvbGVyYW5jZT86IG51bWJlcixcbiAgZm9yYmlkQWRkaXRpb25hbFByb3BzPzogYm9vbGVhbixcbiAgbWF4RXJyb3JzUmVwb3J0PzogbnVtYmVyLFxuICBtYXhEZXB0aD86IG51bWJlcixcbiAgcHJlZml4Pzogc3RyaW5nLFxuICBjaGVja2Vyc1NlcT86IENoZWNrZXJJdGVtW10sXG59XG5cbi8vIHB1YmxpYyBBUElcbmV4cG9ydCBmdW5jdGlvbiBleHBlY3REZWVwRXF1YWwoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnksIG9wdGlvbnM/OiBFeHBlY3REZWVwRXF1YWxPcHRpb25zKTogdm9pZCB7XG4gIGNvbnN0IHJ1bm5lciA9IG5ldyBFeHBlY3RSdW5uZXIob3B0aW9ucyk7XG4gIHJ1bm5lci5ydW4oYWN0dWFsLCBleHBlY3RlZCk7XG59XG5cbi8vIGltcGxlbWVudGF0aW9uIGRldGFpbHNcbmV4cG9ydCBpbnRlcmZhY2UgRXhwZWN0UnVubmVyU3RhdGUge1xuICBvcHRpb25zOiBSZXF1aXJlZDxFeHBlY3REZWVwRXF1YWxPcHRpb25zPjtcbiAgZXJyb3JzOiBDaGVja2VyRXJyb3JbXTtcbiAgY3VycmVudFBhdGg6IHN0cmluZ1tdO1xufVxuXG5mdW5jdGlvbiBuYW5QcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIE51bWJlci5pc05hTihhY3R1YWwpICYmIE51bWJlci5pc05hTihleHBlY3RlZCk7XG59XG5cbmZ1bmN0aW9uIG51bGxQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIGFjdHVhbCA9PSBudWxsICYmIGV4cGVjdGVkID09IG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcENoZWNrZXIoKSB7XG4gIHJldHVybjtcbn1cblxuXG5mdW5jdGlvbiBpbnRlZ2VyUHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAoTnVtYmVyLmlzSW50ZWdlcihhY3R1YWwpICYmIE51bWJlci5pc0ludGVnZXIoZXhwZWN0ZWQpKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nUHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIGFjdHVhbCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIGJvb2xQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuICh0eXBlb2YgYWN0dWFsID09PSAnYm9vbGVhbicgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnYm9vbGVhbicpO1xufVxuXG5mdW5jdGlvbiBiaWdJbnRQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuICh0eXBlb2YgYWN0dWFsID09PSAnYmlnaW50JyAmJiB0eXBlb2YgZXhwZWN0ZWQgPT09ICdiaWdpbnQnKTtcbn1cblxuZnVuY3Rpb24gZXFDaGVja2VyKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIGNvbnN0IGFyZUVxdWFsID0gYWN0dWFsID09PSBleHBlY3RlZDtcbiAgaWYgKCFhcmVFcXVhbCkge1xuICAgIGNvbnN0IG1zZyA9IGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfWA7XG4gICAgcmV0dXJuIFt7bXNnfV07XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBmbG9hdFByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKHR5cGVvZiBhY3R1YWwgPT09ICdudW1iZXInICYmIHR5cGVvZiBleHBlY3RlZCA9PT0gJ251bWJlcicpO1xufVxuXG5mdW5jdGlvbiBmbG9hdENoZWNrZXIoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnksIHN0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4pOiBDaGVja2VyRXJyb3JbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICgoYWN0dWFsID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgfHxcbiAgICAoYWN0dWFsID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgJiYgZXhwZWN0ZWQgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgfHxcbiAgICAoaXNOYU4oYWN0dWFsKSAmJiBpc05hTihleHBlY3RlZCkpKVxuICAgIHJldHVybjtcbiAgY29uc3QgYXJlRXF1YWwgPSBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCBzdGF0ZS5vcHRpb25zLmZsb2F0VG9sZXJhbmNlO1xuICBpZiAoIWFyZUVxdWFsKSB7XG4gICAgY29uc3QgbXNnID0gYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3N0YXRlLm9wdGlvbnMuZmxvYXRUb2xlcmFuY2V9KWA7XG4gICAgcmV0dXJuIFt7bXNnfV07XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBtYXBQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIChhY3R1YWwgaW5zdGFuY2VvZiBNYXAgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBNYXApO1xufVxuXG5mdW5jdGlvbiBtYXBDaGVja2VyKGFjdHVhbDogTWFwPGFueSwgYW55PiwgZXhwZWN0ZWQ6IE1hcDxhbnksIGFueT4sXG4gIHN0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrRGVlcDogTmVzdGVkQ2hlY2tlclxuKTogQ2hlY2tlckVycm9yW10ge1xuICBjb25zdCBlcnJvcnM6IENoZWNrZXJFcnJvcltdID0gW107XG4gIGlmIChzdGF0ZS5vcHRpb25zLmZvcmJpZEFkZGl0aW9uYWxQcm9wcylcbiAgICBlcnJvcnMucHVzaCguLi5jaGVja0FkZGl0aW9uYWxQcm9wcyhbLi4uYWN0dWFsLmtleXMoKV0sIFsuLi5leHBlY3RlZC5rZXlzKCldKSk7XG4gIGZvciAoY29uc3QgayBvZiBleHBlY3RlZC5rZXlzKCkpIHtcbiAgICBjb25zdCBhdmFsID0gYWN0dWFsLmdldChrKTtcbiAgICBjb25zdCBleHZhbCA9IGV4cGVjdGVkLmdldChrKTtcbiAgICBjaGVja0RlZXAoW1N0cmluZyhrKV0sIGF2YWwsIGV4dmFsKVxuICB9XG4gIHJldHVybiBlcnJvcnM7XG59XG5cblxuZnVuY3Rpb24gc2V0UHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAoYWN0dWFsIGluc3RhbmNlb2YgU2V0ICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgU2V0KTtcbn1cblxuZnVuY3Rpb24gc2V0Q2hlY2tlcihhY3R1YWw6IFNldDxhbnk+LCBleHBlY3RlZDogU2V0PGFueT4sXG4gIF9zdGF0ZTogUmVhZG9ubHk8RXhwZWN0UnVubmVyU3RhdGU+LCBjaGVja0RlZXA6IE5lc3RlZENoZWNrZXJcbik6IENoZWNrZXJFcnJvcltdIHtcbiAgY29uc3QgZXJyb3JzOiBDaGVja2VyRXJyb3JbXSA9IFtdO1xuICBpZiAoYWN0dWFsLnNpemUgIT09IGV4cGVjdGVkLnNpemUpIHtcbiAgICBjb25zdCBlcnIgPSB7bXNnOiBgU2V0cyBhcmUgb2YgZGlmZmVyZW50IHNpemU6IGFjdHVhbCBzZXQgc2l6ZSBpcyAke2FjdHVhbC5zaXplfSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgc2V0IHNpemUgaXMgJHtleHBlY3RlZC5zaXplfWB9O1xuICAgIGVycm9ycy5wdXNoKGVycik7XG4gIH1cbiAgZm9yIChjb25zdCBleHZhbCBvZiBleHBlY3RlZC52YWx1ZXMoKSkge1xuICAgIGNvbnN0IGF2YWwgPSBhY3R1YWwuaGFzKGV4dmFsKTtcbiAgICBjaGVja0RlZXAoW1N0cmluZyhleHZhbCldLCBhdmFsLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gZXJyb3JzO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5UHJlZGljYXRlKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gIHJldHVybiAoYWN0dWFsIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBBcnJheSk7XG59XG5cbmZ1bmN0aW9uIGFycmF5Q2hlY2tlcihhY3R1YWw6IGFueVtdLCBleHBlY3RlZDogYW55W10sXG4gIF9zdGF0ZTogUmVhZG9ubHk8RXhwZWN0UnVubmVyU3RhdGU+LCBjaGVja0RlZXA6IE5lc3RlZENoZWNrZXIpOiBDaGVja2VyRXJyb3JbXSB7XG4gIGNvbnN0IGVycm9yczogQ2hlY2tlckVycm9yW10gPSBbXTtcbiAgaWYgKGFjdHVhbC5sZW5ndGggIT09IGV4cGVjdGVkLmxlbmd0aCkge1xuICAgIGNvbnN0IGVyciA9IHttc2c6IGBBcnJheXMgYXJlIG9mIGRpZmZlcmVudCBsZW5ndGg6IGFjdHVhbCBhcnJheSBsZW5ndGggaXMgJHthY3R1YWwubGVuZ3RofSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgYXJyYXkgbGVuZ3RoIGlzICR7ZXhwZWN0ZWQubGVuZ3RofWB9O1xuICAgIGVycm9ycy5wdXNoKGVycik7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWwubGVuZ3RoOyBpKyspXG4gICAgY2hlY2tEZWVwKFtTdHJpbmcoaSldLCBhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG5cbmZ1bmN0aW9uIGRhdGFmcmFtZVByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKGFjdHVhbCBpbnN0YW5jZW9mIERHLkRhdGFGcmFtZSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERHLkRhdGFGcmFtZSk7XG59XG5cbmZ1bmN0aW9uIGRhdGFmcmFtZUNoZWNrZXIoYWN0dWFsOiBERy5EYXRhRnJhbWUsIGV4cGVjdGVkOiBERy5EYXRhRnJhbWUsXG4gIHN0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrRGVlcDogTmVzdGVkQ2hlY2tlcik6IENoZWNrZXJFcnJvcltdIHtcbiAgY29uc3QgZXJyb3JzOiBDaGVja2VyRXJyb3JbXSA9IFtdO1xuICBpZiAoYWN0dWFsLnJvd0NvdW50ICE9PSBleHBlY3RlZC5yb3dDb3VudCkge1xuICAgIGNvbnN0IGVyciA9IHttc2c6IGBEYXRhZnJhbWVzIGhhcyBkaWZmZXJlbnQgcm93IGNvdW50OiBhY3R1YWwgcm93IGNvdW50IGlzICR7YWN0dWFsLnJvd0NvdW50fSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgcm93IGNvdW50IGlzICR7ZXhwZWN0ZWQucm93Q291bnR9YH07XG4gICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgfVxuICBpZiAoc3RhdGUub3B0aW9ucy5mb3JiaWRBZGRpdGlvbmFsUHJvcHMpXG4gICAgZXJyb3JzLnB1c2goLi4uY2hlY2tBZGRpdGlvbmFsUHJvcHMoWy4uLmFjdHVhbC5jb2x1bW5zXS5tYXAoeCA9PiB4Lm5hbWUpLCBbLi4uZXhwZWN0ZWQuY29sdW1uc10ubWFwKHggPT4geC5uYW1lKSkpO1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGV4cGVjdGVkLmNvbHVtbnMpIHtcbiAgICBjb25zdCBhY3R1YWxDb2x1bW4gPSBhY3R1YWwuY29sdW1ucy5ieU5hbWUoY29sdW1uLm5hbWUpO1xuICAgIGlmICghYWN0dWFsQ29sdW1uKSB7XG4gICAgICBjb25zdCBlcnIgPSB7bXNnOiBgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGB9O1xuICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWN0dWFsQ29sdW1uLnR5cGUgIT09IGNvbHVtbi50eXBlKSB7XG4gICAgICBjb25zdCBlcnIgPSB7bXNnOiBgQ29sdW1uICR7Y29sdW1uLm5hbWV9IHR5cGUgZXhwZWN0ZWQgJHtjb2x1bW4udHlwZX0gZ290ICR7YWN0dWFsQ29sdW1uLnR5cGV9YH07XG4gICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWQucm93Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxDb2x1bW4uZ2V0KGkpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9IGNvbHVtbi5nZXQoaSk7XG4gICAgICBjaGVja0RlZXAoW2NvbHVtbi5uYW1lLCBTdHJpbmcoaSldLCBhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvcnM7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlCdWZmZXJQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIChhY3R1YWwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbn1cblxuZnVuY3Rpb24gYXJyYXlCdWZmZXJDaGVja2VyKGFjdHVhbDogQXJyYXlCdWZmZXIsIGV4cGVjdGVkOiBBcnJheUJ1ZmZlcixcbiAgc3RhdGU6IFJlYWRvbmx5PEV4cGVjdFJ1bm5lclN0YXRlPiwgY2hlY2tEZWVwOiBOZXN0ZWRDaGVja2VyKSB7XG4gIHJldHVybiBhcnJheUNoZWNrZXIoQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShhY3R1YWwpKSwgQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShleHBlY3RlZCkpLCBzdGF0ZSwgY2hlY2tEZWVwKTtcbn1cblxuZnVuY3Rpb24gZGF5anNQcmVkaWNhdGUoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgcmV0dXJuIGRheWpzLmlzRGF5anMoYWN0dWFsKSAmJiBkYXlqcy5pc0RheWpzKGV4cGVjdGVkKTtcbn1cblxuZnVuY3Rpb24gZGF5anNDaGVja2VyKGFjdHVhbDogZGF5anMuRGF5anMsIGV4cGVjdGVkOiBkYXlqcy5EYXlqcykge1xuICBpZighZXhwZWN0ZWQuaXNTYW1lKGFjdHVhbCkpIHtcbiAgICBjb25zdCBtc2cgPSBgRGlmZmVyZW50IGRhdGUsIGV4cGVjdGVkICR7ZXhwZWN0ZWQudG9JU09TdHJpbmcoKX0gYWN0dWFsICR7YWN0dWFsLnRvSVNPU3RyaW5nKCl9YDtcbiAgICByZXR1cm4gW3ttc2d9XTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIG9iamVjdFByZWRpY2F0ZShhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSkge1xuICByZXR1cm4gKHR5cGVvZiBhY3R1YWwgPT09ICdvYmplY3QnICYmIHR5cGVvZiBleHBlY3RlZCA9PT0gJ29iamVjdCcpO1xufVxuXG5mdW5jdGlvbiBvYmplY3RDaGVja2VyKGFjdHVhbDogUmVjb3JkPGFueSwgYW55PiwgZXhwZWN0ZWQ6IFJlY29yZDxhbnksIGFueT4sXG4gIHN0YXRlOiBSZWFkb25seTxFeHBlY3RSdW5uZXJTdGF0ZT4sIGNoZWNrRGVlcDogTmVzdGVkQ2hlY2tlcik6IENoZWNrZXJFcnJvcltdIHtcbiAgY29uc3QgZXJyb3JzOiBDaGVja2VyRXJyb3JbXSA9IFtdO1xuXG4gIGlmIChzdGF0ZS5vcHRpb25zLmZvcmJpZEFkZGl0aW9uYWxQcm9wcylcbiAgICBlcnJvcnMucHVzaCguLi5jaGVja0FkZGl0aW9uYWxQcm9wcyhbLi4uT2JqZWN0LmtleXMoYWN0dWFsKV0sIFsuLi5PYmplY3Qua2V5cyhleHBlY3RlZCldKSk7XG5cbiAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICBjaGVja0RlZXAoW2V4cGVjdGVkS2V5XSwgYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICB9XG4gIHJldHVybiBlcnJvcnM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQWRkaXRpb25hbFByb3BzKGFjdHVhbDogc3RyaW5nW10sIGV4cGVjdGVkOiBzdHJpbmdbXSkge1xuICBjb25zdCBlcnJvcnM6IENoZWNrZXJFcnJvcltdID0gW107XG4gIGNvbnN0IGV4cGVjdGVkU2V0ID0gbmV3IFNldChleHBlY3RlZCk7XG4gIGZvciAoY29uc3QgcHJvcCBvZiBhY3R1YWwpIHtcbiAgICBpZiAoIWV4cGVjdGVkU2V0Lmhhcyhwcm9wKSkge1xuICAgICAgY29uc3QgZXJyID0ge21zZzogYEFkZGl0aW9uYWwga2V5L2NvbCBpdGVtIGluIGFjdHVhbCBkYXRhIGZvdW5kOiAke3Byb3B9YH1cbiAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvcnM7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBSZXF1aXJlZDxFeHBlY3REZWVwRXF1YWxPcHRpb25zPiA9IHtcbiAgZmxvYXRUb2xlcmFuY2U6IDAuMDAxLFxuICBtYXhFcnJvcnNSZXBvcnQ6IDUsXG4gIGZvcmJpZEFkZGl0aW9uYWxQcm9wczogZmFsc2UsXG4gIG1heERlcHRoOiAxMjgsXG4gIGNoZWNrZXJzU2VxOiBkZWZhdWxDaGVja2Vyc1NlcSxcbiAgcHJlZml4OiAnJyxcbn07XG5cblxuY2xhc3MgRXhwZWN0UnVubmVyIHtcbiAgcHJpdmF0ZSBvcHRpb25zOiBSZXF1aXJlZDxFeHBlY3REZWVwRXF1YWxPcHRpb25zPjtcbiAgcHJpdmF0ZSBzdGF0ZTogRXhwZWN0UnVubmVyU3RhdGU7XG5cbiAgY29uc3RydWN0b3Iob3BzOiBFeHBlY3REZWVwRXF1YWxPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7Li4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wc307XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGVycm9yczogW10sXG4gICAgICBjdXJyZW50UGF0aDogW10sXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBydW4oYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1hdGNoQ2hlY2tlcihhY3R1YWwsIGV4cGVjdGVkKTtcbiAgICB0aGlzLmNoZWNrRXJyb3JzTGltaXQoMCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRGVlcChwYXRoOiBzdHJpbmdbXSwgYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgICBjb25zdCBwYXRoTGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgdGhpcy5zdGF0ZS5jdXJyZW50UGF0aC5wdXNoKC4uLnBhdGgpO1xuICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnRQYXRoLmxlbmd0aCA+IHRoaXMub3B0aW9ucy5tYXhEZXB0aClcbiAgICAgIHRocm93IG5ldyBFeHBlY3RFcnJvcihgTWF4IGRlcHRoICR7dGhpcy5vcHRpb25zLm1heERlcHRofSBpcyBleGNlZWRlZCwgcG90ZW50aWFsbHkgYSBjaXJjdWxhciBzdHJ1Y3R1cmVgKTtcblxuICAgIHRoaXMubWF0Y2hDaGVja2VyKGFjdHVhbCwgZXhwZWN0ZWQpO1xuICAgIHRoaXMuc3RhdGUuY3VycmVudFBhdGguc3BsaWNlKC1wYXRoTGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hDaGVja2VyKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB7cHJlZGljYXRlLCBjaGVja2VyfSBvZiB0aGlzLm9wdGlvbnMuY2hlY2tlcnNTZXEpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYWN0dWFsLCBleHBlY3RlZCkpIHtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBjaGVja2VyKGFjdHVhbCwgZXhwZWN0ZWQsIHRoaXMuc3RhdGUsIHRoaXMuY2hlY2tEZWVwLmJpbmQodGhpcykpO1xuICAgICAgICBpZiAoZXJyb3JzKVxuICAgICAgICAgIGVycm9ycy5tYXAoKGUpID0+IHRoaXMuYWRkRXJyb3IoZSkpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICBjb25zdCBlcnIgPSB7bXNnOiBgVHlwZSBtaXNtYXRjaCBvciBubyBjaGVja2VyIGRlZmluZWQ6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YH07XG4gICAgICB0aGlzLmFkZEVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFcnJvcihlcnI6IENoZWNrZXJFcnJvcik6IHZvaWQge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gWy4uLih0aGlzLnN0YXRlLmN1cnJlbnRQYXRoID8/IFtdKSwgLi4uKGVyci5wYXRoID8/IFtdKV07XG4gICAgY29uc3QgZmVycjogQ2hlY2tlckVycm9yID0ge1xuICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgICBtc2c6IGVyci5tc2csXG4gICAgfTtcbiAgICB0aGlzLnN0YXRlLmVycm9ycy5wdXNoKGZlcnIpO1xuICAgIHRoaXMuY2hlY2tFcnJvcnNMaW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0Vycm9yc0xpbWl0KGxpbWl0ID0gdGhpcy5vcHRpb25zLm1heEVycm9yc1JlcG9ydCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmVycm9ycy5sZW5ndGggPiBsaW1pdCkge1xuICAgICAgY29uc3QgcmVwb3J0ID0gdGhpcy5tYWtlUmVwb3J0KCk7XG4gICAgICB0aHJvdyBuZXcgRXhwZWN0RXJyb3IocmVwb3J0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1ha2VSZXBvcnQoKSB7XG4gICAgY29uc3QgbXNnID0gdGhpcy5zdGF0ZS5lcnJvcnMubWFwKChlKSA9PiB7XG4gICAgICBjb25zdCBwcmVmaXggPSAoZS5wYXRoID8/IFtdKS5tYXAoKGEpID0+IGBbJyR7U3RyaW5nKGEpfSddYCkuam9pbignLicpO1xuICAgICAgY29uc3QgbXNnID0gcHJlZml4ID8gYCR7cHJlZml4fTogJHtlLm1zZ31gIDogZS5tc2c7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnByZWZpeCA/IGAke3RoaXMub3B0aW9ucy5wcmVmaXh9OiAke21zZ31gIDogbXNnO1xuICAgIH0pLnNsaWNlKDAsIHRoaXMub3B0aW9ucy5tYXhFcnJvcnNSZXBvcnQpLmpvaW4oJ1xcbicpO1xuICAgIHJldHVybiBtc2c7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"json-serialization.d.ts","sourceRoot":"","sources":["json-serialization.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,gBAAqB,UAwDjE;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,OAsBjD"}
1
+ {"version":3,"file":"json-serialization.d.ts","sourceRoot":"","sources":["json-serialization.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,gBAAqB,UA8DjE;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,OAwBjD"}
@@ -1,8 +1,9 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
2
  import { fromUint8Array, toUint8Array } from 'js-base64';
3
+ import dayjs from 'dayjs';
3
4
  const customTypeKey = '_DG_CUSTOM_SERIALIZED_TOKEN_';
4
5
  export function serialize(obj, options = {}) {
5
- return JSON.stringify(obj, (_key, value) => {
6
+ return JSON.stringify(obj, function (key, value) {
6
7
  if (value === Infinity) {
7
8
  return {
8
9
  [customTypeKey]: 'Infinity',
@@ -51,6 +52,12 @@ export function serialize(obj, options = {}) {
51
52
  value: Array.from(value)
52
53
  };
53
54
  }
55
+ if (dayjs.isDayjs(this[key])) {
56
+ return {
57
+ [customTypeKey]: 'DayJs',
58
+ value: this[key].toISOString()
59
+ };
60
+ }
54
61
  return value;
55
62
  }, options.space);
56
63
  }
@@ -72,6 +79,8 @@ export function transform(_key, value) {
72
79
  return toUint8Array(value.value).buffer;
73
80
  case 'Map':
74
81
  return new Map(value.value);
82
+ case 'DayJs':
83
+ return dayjs(value.value);
75
84
  case 'Set':
76
85
  return new Set(value.value);
77
86
  case 'Infinity':
@@ -84,4 +93,4 @@ export function transform(_key, value) {
84
93
  }
85
94
  return value;
86
95
  }
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zZXJpYWxpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsianNvbi1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFdkQsTUFBTSxhQUFhLEdBQUcsOEJBQThCLENBQUM7QUFPckQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFRLEVBQUUsVUFBNEIsRUFBRTtJQUNoRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQ25CLEdBQUcsRUFDSCxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNkLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUN0QixPQUFPO2dCQUNMLENBQUMsYUFBYSxDQUFDLEVBQUUsVUFBVTtnQkFDM0IsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDO1NBQ0g7UUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN2QixPQUFPO2dCQUNMLENBQUMsYUFBYSxDQUFDLEVBQUUsV0FBVztnQkFDNUIsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDO1NBQ0g7UUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTztnQkFDTCxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUs7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQztTQUNIO1FBQ0QsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdkQsT0FBTztnQkFDTCxDQUFDLGFBQWEsQ0FBQyxFQUFFLFdBQVc7Z0JBQzVCLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQzNDLENBQUM7U0FDSDtRQUNELElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN0RCxPQUFPO2dCQUNMLENBQUMsYUFBYSxDQUFDLEVBQUUsZUFBZTtnQkFDaEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUU7YUFDdEIsQ0FBQztTQUNIO1FBQ0QsSUFBSSxLQUFLLFlBQVksV0FBVyxFQUFFO1lBQ2hDLE9BQU87Z0JBQ0wsQ0FBQyxhQUFhLENBQUMsRUFBRSxhQUFhO2dCQUM5QixLQUFLLEVBQUUsY0FBYyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdDLENBQUM7U0FDSDtRQUNELElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRTtZQUN4QixPQUFPO2dCQUNMLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSztnQkFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3pCLENBQUM7U0FDSDtRQUNELElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRTtZQUN4QixPQUFPO2dCQUNMLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSztnQkFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3pCLENBQUM7U0FDSDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxFQUNELE9BQU8sQ0FBQyxLQUFLLENBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVc7SUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLEdBQUcsRUFDSCxTQUFTLENBQ1YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBUTtJQUMzQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELDRDQUE0QztBQUM1QyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVksRUFBRSxLQUFVO0lBQ2hELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQ2hELFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzlCLEtBQUssV0FBVztnQkFDZCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRCxLQUFLLGVBQWU7Z0JBQ2xCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM1RCxLQUFLLGFBQWE7Z0JBQ2hCLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDMUMsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxRQUFRLENBQUM7WUFDbEIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDbkIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sR0FBRyxDQUFDO1NBQ1o7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge2Zyb21VaW50OEFycmF5LCB0b1VpbnQ4QXJyYXl9IGZyb20gJ2pzLWJhc2U2NCc7XG5cbmNvbnN0IGN1c3RvbVR5cGVLZXkgPSAnX0RHX0NVU1RPTV9TRVJJQUxJWkVEX1RPS0VOXyc7XG5cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZU9wdGlvbnMgPSB7XG4gIHNwYWNlPzogbnVtYmVyLFxuICB1c2VKc29uREY/OiBib29sZWFuLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShvYmo6IGFueSwgb3B0aW9uczogU2VyaWFsaXplT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICBvYmosXG4gICAgKF9rZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2N1c3RvbVR5cGVLZXldOiAnSW5maW5pdHknLFxuICAgICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICctSW5maW5pdHknLFxuICAgICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICdOYU4nLFxuICAgICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgREcuRGF0YUZyYW1lICYmICFvcHRpb25zLnVzZUpzb25ERikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFtjdXN0b21UeXBlS2V5XTogJ0RhdGFGcmFtZScsXG4gICAgICAgICAgdmFsdWU6IGZyb21VaW50OEFycmF5KHZhbHVlLnRvQnl0ZUFycmF5KCkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUgJiYgb3B0aW9ucy51c2VKc29uREYpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICdEYXRhRnJhbWVKU09OJyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUudG9Kc29uKClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2N1c3RvbVR5cGVLZXldOiAnQXJyYXlCdWZmZXInLFxuICAgICAgICAgIHZhbHVlOiBmcm9tVWludDhBcnJheShuZXcgVWludDhBcnJheSh2YWx1ZSkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICdNYXAnLFxuICAgICAgICAgIHZhbHVlOiBBcnJheS5mcm9tKHZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2N1c3RvbVR5cGVLZXldOiAnU2V0JyxcbiAgICAgICAgICB2YWx1ZTogQXJyYXkuZnJvbSh2YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG9wdGlvbnMuc3BhY2VcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplKG9iajogc3RyaW5nKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKFxuICAgIG9iaixcbiAgICB0cmFuc2Zvcm1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5VHJhbnNmb3JtYXRpb25zKG9iajogYW55KSB7XG4gIHJldHVybiBkZXNlcmlhbGl6ZShKU09OLnN0cmluZ2lmeShvYmopKTtcbn1cblxuLy8ganVzdCBhcHBseSBkYXRhIHRyYW5zZm9ybWF0aW9ucyBpZiBuZWVkZWRcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm0oX2tleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZVtjdXN0b21UeXBlS2V5XSAmJiB2YWx1ZS52YWx1ZSkge1xuICAgIHN3aXRjaCAodmFsdWVbY3VzdG9tVHlwZUtleV0pIHtcbiAgICBjYXNlICdEYXRhRnJhbWUnOlxuICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQnl0ZUFycmF5KHRvVWludDhBcnJheSh2YWx1ZS52YWx1ZSkpO1xuICAgIGNhc2UgJ0RhdGFGcmFtZUpTT04nOlxuICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tSnNvbihKU09OLnN0cmluZ2lmeSh2YWx1ZS52YWx1ZSkpO1xuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzpcbiAgICAgIHJldHVybiB0b1VpbnQ4QXJyYXkodmFsdWUudmFsdWUpLmJ1ZmZlcjtcbiAgICBjYXNlICdNYXAnOlxuICAgICAgcmV0dXJuIG5ldyBNYXAodmFsdWUudmFsdWUpO1xuICAgIGNhc2UgJ1NldCc6XG4gICAgICByZXR1cm4gbmV3IFNldCh2YWx1ZS52YWx1ZSk7XG4gICAgY2FzZSAnSW5maW5pdHknOlxuICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIGNhc2UgJy1JbmZpbml0eSc6XG4gICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgIGNhc2UgJ05hTic6XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG4iXX0=
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zZXJpYWxpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsianNvbi1zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDdkQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sYUFBYSxHQUFHLDhCQUE4QixDQUFDO0FBT3JELE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBUSxFQUFFLFVBQTRCLEVBQUU7SUFDaEUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUNuQixHQUFHLEVBQ0gsVUFBcUIsR0FBRyxFQUFFLEtBQUs7UUFDN0IsSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ3RCLE9BQU87Z0JBQ0wsQ0FBQyxhQUFhLENBQUMsRUFBRSxVQUFVO2dCQUMzQixLQUFLLEVBQUUsSUFBSTthQUNaLENBQUM7U0FDSDtRQUNELElBQUksS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLE9BQU87Z0JBQ0wsQ0FBQyxhQUFhLENBQUMsRUFBRSxXQUFXO2dCQUM1QixLQUFLLEVBQUUsSUFBSTthQUNaLENBQUM7U0FDSDtRQUNELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2QixPQUFPO2dCQUNMLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSztnQkFDdEIsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDO1NBQ0g7UUFDRCxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUN2RCxPQUFPO2dCQUNMLENBQUMsYUFBYSxDQUFDLEVBQUUsV0FBVztnQkFDNUIsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDM0MsQ0FBQztT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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtmcm9tVWludDhBcnJheSwgdG9VaW50OEFycmF5fSBmcm9tICdqcy1iYXNlNjQnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcblxuY29uc3QgY3VzdG9tVHlwZUtleSA9ICdfREdfQ1VTVE9NX1NFUklBTElaRURfVE9LRU5fJztcblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplT3B0aW9ucyA9IHtcbiAgc3BhY2U/OiBudW1iZXIsXG4gIHVzZUpzb25ERj86IGJvb2xlYW4sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKG9iajogYW55LCBvcHRpb25zOiBTZXJpYWxpemVPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgIG9iaixcbiAgICBmdW5jdGlvbiAodGhpczogYW55LCBrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2N1c3RvbVR5cGVLZXldOiAnSW5maW5pdHknLFxuICAgICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICctSW5maW5pdHknLFxuICAgICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICdOYU4nLFxuICAgICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgREcuRGF0YUZyYW1lICYmICFvcHRpb25zLnVzZUpzb25ERikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFtjdXN0b21UeXBlS2V5XTogJ0RhdGFGcmFtZScsXG4gICAgICAgICAgdmFsdWU6IGZyb21VaW50OEFycmF5KHZhbHVlLnRvQnl0ZUFycmF5KCkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUgJiYgb3B0aW9ucy51c2VKc29uREYpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICdEYXRhRnJhbWVKU09OJyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUudG9Kc29uKClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2N1c3RvbVR5cGVLZXldOiAnQXJyYXlCdWZmZXInLFxuICAgICAgICAgIHZhbHVlOiBmcm9tVWludDhBcnJheShuZXcgVWludDhBcnJheSh2YWx1ZSkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICdNYXAnLFxuICAgICAgICAgIHZhbHVlOiBBcnJheS5mcm9tKHZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2N1c3RvbVR5cGVLZXldOiAnU2V0JyxcbiAgICAgICAgICB2YWx1ZTogQXJyYXkuZnJvbSh2YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXlqcy5pc0RheWpzKHRoaXNba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbY3VzdG9tVHlwZUtleV06ICdEYXlKcycsXG4gICAgICAgICAgdmFsdWU6ICh0aGlzW2tleV0gYXMgZGF5anMuRGF5anMpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG9wdGlvbnMuc3BhY2VcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplKG9iajogc3RyaW5nKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKFxuICAgIG9iaixcbiAgICB0cmFuc2Zvcm1cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5VHJhbnNmb3JtYXRpb25zKG9iajogYW55KSB7XG4gIHJldHVybiBkZXNlcmlhbGl6ZShKU09OLnN0cmluZ2lmeShvYmopKTtcbn1cblxuLy8ganVzdCBhcHBseSBkYXRhIHRyYW5zZm9ybWF0aW9ucyBpZiBuZWVkZWRcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm0oX2tleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZVtjdXN0b21UeXBlS2V5XSAmJiB2YWx1ZS52YWx1ZSkge1xuICAgIHN3aXRjaCAodmFsdWVbY3VzdG9tVHlwZUtleV0pIHtcbiAgICBjYXNlICdEYXRhRnJhbWUnOlxuICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQnl0ZUFycmF5KHRvVWludDhBcnJheSh2YWx1ZS52YWx1ZSkpO1xuICAgIGNhc2UgJ0RhdGFGcmFtZUpTT04nOlxuICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tSnNvbihKU09OLnN0cmluZ2lmeSh2YWx1ZS52YWx1ZSkpO1xuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzpcbiAgICAgIHJldHVybiB0b1VpbnQ4QXJyYXkodmFsdWUudmFsdWUpLmJ1ZmZlcjtcbiAgICBjYXNlICdNYXAnOlxuICAgICAgcmV0dXJuIG5ldyBNYXAodmFsdWUudmFsdWUpO1xuICAgIGNhc2UgJ0RheUpzJzpcbiAgICAgIHJldHVybiBkYXlqcyh2YWx1ZS52YWx1ZSk7XG4gICAgY2FzZSAnU2V0JzpcbiAgICAgIHJldHVybiBuZXcgU2V0KHZhbHVlLnZhbHVlKTtcbiAgICBjYXNlICdJbmZpbml0eSc6XG4gICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgY2FzZSAnLUluZmluaXR5JzpcbiAgICAgIHJldHVybiAtSW5maW5pdHk7XG4gICAgY2FzZSAnTmFOJzpcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdfQ==