@bitgo-beta/unspents 0.13.2-beta.96 → 0.13.2-beta.961

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.mocharc.js +1 -1
  2. package/CHANGELOG.md +495 -0
  3. package/dist/bin/generate_tables.js +25 -12
  4. package/dist/src/codes.d.ts +10 -10
  5. package/dist/src/codes.d.ts.map +1 -1
  6. package/dist/src/codes.js +27 -13
  7. package/dist/src/dimensions.d.ts +4 -4
  8. package/dist/src/dimensions.d.ts.map +1 -1
  9. package/dist/src/dimensions.js +34 -19
  10. package/dist/src/index.js +23 -9
  11. package/dist/src/inputWeights.d.ts +3 -3
  12. package/dist/src/inputWeights.d.ts.map +1 -1
  13. package/dist/src/inputWeights.js +7 -7
  14. package/dist/src/scriptSizes.js +3 -4
  15. package/dist/src/types.js +23 -9
  16. package/dist/src/virtualSizes.d.ts +12 -12
  17. package/dist/src/virtualSizes.js +2 -2
  18. package/dist/src/zcash.d.ts +9 -0
  19. package/dist/src/zcash.d.ts.map +1 -0
  20. package/dist/src/zcash.js +22 -0
  21. package/dist/test/dimensions.js +39 -15
  22. package/dist/test/signedTx/inputWeights.js +27 -13
  23. package/dist/test/signedTx/txCombinations.d.ts +1 -1
  24. package/dist/test/signedTx/txCombinations.d.ts.map +1 -1
  25. package/dist/test/signedTx/txCombinations.js +29 -15
  26. package/dist/test/signedTx/txGen.d.ts +2 -3
  27. package/dist/test/signedTx/txGen.d.ts.map +1 -1
  28. package/dist/test/signedTx/txGen.js +25 -11
  29. package/dist/test/testutils.d.ts +2 -2
  30. package/dist/test/testutils.d.ts.map +1 -1
  31. package/dist/test/testutils.js +28 -14
  32. package/dist/test/zcash.d.ts +2 -0
  33. package/dist/test/zcash.d.ts.map +1 -0
  34. package/dist/test/zcash.js +60 -0
  35. package/dist/tsconfig.build.tsbuildinfo +1 -1
  36. package/dist/tsconfig.tsbuildinfo +1 -1
  37. package/docs/input-costs.md +10 -9
  38. package/package.json +5 -5
@@ -1,5 +1,5 @@
1
1
  import * as tcomb from 'tcomb';
2
- export declare type ChainCode = number;
2
+ export type ChainCode = number;
3
3
  export declare class ErrorInvalidCode extends Error {
4
4
  constructor(code: ChainCode);
5
5
  }
@@ -34,6 +34,7 @@ export declare class CodesByType extends CodeGroup {
34
34
  p2tr: ChainCode;
35
35
  constructor(p: Purpose);
36
36
  }
37
+ /** @deprecated - use utxolib.bitgo */
37
38
  declare const _default: Readonly<{
38
39
  ChainType: tcomb.Irreducible<unknown>;
39
40
  /** @deprecated - use utxolib.bitgo */
@@ -57,24 +58,23 @@ declare const _default: Readonly<{
57
58
  /** @deprecated - use utxolib.bitgo */
58
59
  all: readonly number[];
59
60
  /** @deprecated - use utxolib.bitgo */
60
- isP2sh: (code: number) => boolean;
61
+ isP2sh: (code: ChainCode) => boolean;
61
62
  /** @deprecated - use utxolib.bitgo */
62
- isP2shP2wsh: (code: number) => boolean;
63
+ isP2shP2wsh: (code: ChainCode) => boolean;
63
64
  /** @deprecated - use utxolib.bitgo */
64
- isP2wsh: (code: number) => boolean;
65
+ isP2wsh: (code: ChainCode) => boolean;
65
66
  /** @deprecated - use utxolib.bitgo */
66
- isP2tr: (code: number) => boolean;
67
+ isP2tr: (code: ChainCode) => boolean;
67
68
  /** @deprecated - use utxolib.bitgo */
68
- isExternal: (code: number) => boolean;
69
+ isExternal: (code: ChainCode) => boolean;
69
70
  /** @deprecated - use utxolib.bitgo */
70
- isInternal: (code: number) => boolean;
71
+ isInternal: (code: ChainCode) => boolean;
71
72
  /** @deprecated - use utxolib.bitgo */
72
- isValid: (c: number) => boolean;
73
+ isValid: (c: ChainCode) => boolean;
73
74
  /** @deprecated - use utxolib.bitgo */
74
75
  forType: (u: UnspentType) => CodesByPurpose;
75
76
  /** @deprecated - use utxolib.bitgo */
76
- typeForCode: (c: number) => UnspentType;
77
+ typeForCode: (c: ChainCode) => UnspentType;
77
78
  }>;
78
- /** @deprecated - use utxolib.bitgo */
79
79
  export default _default;
80
80
  //# sourceMappingURL=codes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/codes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,oBAAY,SAAS,GAAG,MAAM,CAAC;AAE/B,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,IAAI,EAAE,SAAS;CAG5B;AAED,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAID,oBAAY,OAAO;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AA0BD,eAAO,MAAM,SAAS,4BAAoD,CAAC;AAmB3E,eAAO,MAAM,OAAO,MAAO,SAAS,KAAG,OAA8C,CAAC;AAStF,qBAAa,SAAS;IACb,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC5B,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;IAIhC,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;CAMrC;AAED,qBAAa,cAAe,SAAQ,SAAS;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;gBAEf,CAAC,EAAE,WAAW;CAa3B;AAED,qBAAa,WAAY,SAAQ,SAAS;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;gBAEX,CAAC,EAAE,OAAO;CAevB;;;IAgBC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;;AAxCxC,sCAAsC;AACtC,wBAyCG"}
1
+ {"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/codes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,IAAI,EAAE,SAAS;CAG5B;AAED,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAID,oBAAY,OAAO;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AA0BD,eAAO,MAAM,SAAS,4BAAoD,CAAC;AAmB3E,eAAO,MAAM,OAAO,MAAO,SAAS,KAAG,OAA8C,CAAC;AAStF,qBAAa,SAAS;IACb,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC5B,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;IAIhC,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;CAMrC;AAED,qBAAa,cAAe,SAAQ,SAAS;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;gBAEf,CAAC,EAAE,WAAW;CAa3B;AAED,qBAAa,WAAY,SAAQ,SAAS;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;gBAEX,CAAC,EAAE,OAAO;CAevB;AAYD,sCAAsC;;;IAIpC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;;IAEtC,sCAAsC;mBApFrB,SAAS,KAAG,OAAO;IAsFpC,sCAAsC;wBAtFrB,SAAS,KAAG,OAAO;IAwFpC,sCAAsC;oBAxFrB,SAAS,KAAG,OAAO;IA0FpC,sCAAsC;mBA1FrB,SAAS,KAAG,OAAO;IA4FpC,sCAAsC;uBA5FrB,SAAS,KAAG,OAAO;IA8FpC,sCAAsC;uBA9FrB,SAAS,KAAG,OAAO;IAgGpC,sCAAsC;iBA/Gb,SAAS,KAAG,OAAO;IAiH5C,sCAAsC;iBAlIpB,WAAW,KAAG,cAAc;IAoI9C,sCAAsC;qBA3HhB,SAAS,KAAG,WAAW;;AAoF/C,wBAyCG"}
package/dist/src/codes.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
36
  exports.CodesByType = exports.CodesByPurpose = exports.CodeGroup = exports.isValid = exports.ChainType = exports.Purpose = exports.UnspentType = exports.ErrorInvalidCode = void 0;
23
37
  const tcomb = __importStar(require("tcomb"));
@@ -35,13 +49,13 @@ var UnspentType;
35
49
  UnspentType["p2wpkh"] = "p2wpkh";
36
50
  UnspentType["p2wsh"] = "p2wsh";
37
51
  UnspentType["p2tr"] = "p2tr";
38
- })(UnspentType = exports.UnspentType || (exports.UnspentType = {}));
52
+ })(UnspentType || (exports.UnspentType = UnspentType = {}));
39
53
  const UnspentTypeTcomb = tcomb.enums.of(Object.keys(UnspentType));
40
54
  var Purpose;
41
55
  (function (Purpose) {
42
56
  Purpose["internal"] = "internal";
43
57
  Purpose["external"] = "external";
44
- })(Purpose = exports.Purpose || (exports.Purpose = {}));
58
+ })(Purpose || (exports.Purpose = Purpose = {}));
45
59
  const PurposeTcomb = tcomb.enums.of(Object.keys(Purpose));
46
60
  const codeList = Object.freeze([
47
61
  [0, UnspentType.p2sh, Purpose.external],
@@ -53,7 +67,7 @@ const codeList = Object.freeze([
53
67
  [21, UnspentType.p2wsh, Purpose.internal],
54
68
  [31, UnspentType.p2tr, Purpose.internal],
55
69
  ].map(([id, type, purpose]) => Object.freeze({ id, type, purpose })));
56
- exports.ChainType = tcomb.irreducible('ChainType', (n) => exports.isValid(n));
70
+ exports.ChainType = tcomb.irreducible('ChainType', (n) => (0, exports.isValid)(n));
57
71
  const forType = (u) => {
58
72
  // Do tcomb type checking in js projects that use this lib
59
73
  if (!UnspentTypeTcomb.is(u)) {
@@ -81,7 +95,7 @@ class CodeGroup {
81
95
  this.values = Object.freeze([...values]);
82
96
  }
83
97
  has(code) {
84
- if (!exports.isValid(code)) {
98
+ if (!(0, exports.isValid)(code)) {
85
99
  throw new ErrorInvalidCode(code);
86
100
  }
87
101
  return this.values.includes(code);
@@ -165,4 +179,4 @@ exports.default = Object.freeze({
165
179
  /** @deprecated - use utxolib.bitgo */
166
180
  typeForCode,
167
181
  });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUErQjtBQUkvQixNQUFhLGdCQUFpQixTQUFRLEtBQUs7SUFDekMsWUFBWSxJQUFlO1FBQ3pCLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFKRCw0Q0FJQztBQUVELElBQVksV0FPWDtBQVBELFdBQVksV0FBVztJQUNyQiw4QkFBZSxDQUFBO0lBQ2YsNEJBQWEsQ0FBQTtJQUNiLHNDQUF1QixDQUFBO0lBQ3ZCLGdDQUFpQixDQUFBO0lBQ2pCLDhCQUFlLENBQUE7SUFDZiw0QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQVBXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBT3RCO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFbEUsSUFBWSxPQUdYO0FBSEQsV0FBWSxPQUFPO0lBQ2pCLGdDQUFxQixDQUFBO0lBQ3JCLGdDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxPQUFPLEdBQVAsZUFBTyxLQUFQLGVBQU8sUUFHbEI7QUFFRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFRMUQsTUFBTSxRQUFRLEdBQW1DLE1BQU0sQ0FBQyxNQUFNLENBRTFEO0lBQ0UsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUM3QyxDQUFD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SUFDdEMsV0FBVztDQUNaLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRjb21iIGZyb20gJ3Rjb21iJztcblxuZXhwb3J0IHR5cGUgQ2hhaW5Db2RlID0gbnVtYmVyO1xuXG5leHBvcnQgY2xhc3MgRXJyb3JJbnZhbGlkQ29kZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoY29kZTogQ2hhaW5Db2RlKSB7XG4gICAgc3VwZXIoYGludmFsaWQgY29kZSAke2NvZGV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gVW5zcGVudFR5cGUge1xuICBwMnBraCA9ICdwMnBraCcsXG4gIHAyc2ggPSAncDJzaCcsXG4gIHAyc2hQMndzaCA9ICdwMnNoUDJ3c2gnLFxuICBwMndwa2ggPSAncDJ3cGtoJyxcbiAgcDJ3c2ggPSAncDJ3c2gnLFxuICBwMnRyID0gJ3AydHInLFxufVxuXG5jb25zdCBVbnNwZW50VHlwZVRjb21iID0gdGNvbWIuZW51bXMub2YoT2JqZWN0LmtleXMoVW5zcGVudFR5cGUpKTtcblxuZXhwb3J0IGVudW0gUHVycG9zZSB7XG4gIGludGVybmFsID0gJ2ludGVybmFsJyxcbiAgZXh0ZXJuYWwgPSAnZXh0ZXJuYWwnLFxufVxuXG5jb25zdCBQdXJwb3NlVGNvbWIgPSB0Y29tYi5lbnVtcy5vZihPYmplY3Qua2V5cyhQdXJwb3NlKSk7XG5cbmludGVyZmFjZSBJQ29kZSB7XG4gIGlkOiBDaGFpbkNvZGU7XG4gIHR5cGU6IFVuc3BlbnRUeXBlO1xuICBwdXJwb3NlOiBQdXJwb3NlO1xufVxuXG5jb25zdCBjb2RlTGlzdDogUmVhZG9ubHlBcnJheTxSZWFkb25seTxJQ29kZT4+ID0gT2JqZWN0LmZyZWV6ZShcbiAgKFxuICAgIFtcbiAgICAgIFswLCBVbnNwZW50VHlwZS5wMnNoLCBQdXJwb3NlLmV4dGVybmFsXSxcbiAgICAgIFsxMCwgVW5zcGVudFR5cGUucDJzaFAyd3NoLCBQdXJwb3NlLmV4dGVybmFsXSxcbiAgICAgIFsyMCwgVW5zcGVudFR5cGUucDJ3c2gsIFB1cnBvc2UuZXh0ZXJuYWxdLFxuICAgICAgWzMwLCBVbnNwZW50VHlwZS5wMnRyLCBQdXJwb3NlLmV4dGVybmFsXSxcblxuICAgICAgWzEsIFVuc3BlbnRUeXBlLnAyc2gsIFB1cnBvc2UuaW50ZXJuYWxdLFxuICAgICAgWzExLCBVbnNwZW50VHlwZS5wMnNoUDJ3c2gsIFB1cnBvc2UuaW50ZXJuYWxdLFxuICAgICAgWzIxLCBVbnNwZW50VHlwZS5wMndzaCwgUHVycG9zZS5pbnRlcm5hbF0sXG4gICAgICBbMzEsIFVuc3BlbnRUeXBlLnAydHIsIFB1cnBvc2UuaW50ZXJuYWxdLFxuICAgIF0gYXMgQXJyYXk8W0NoYWluQ29kZSwgVW5zcGVudFR5cGUsIFB1cnBvc2VdPlxuICApLm1hcCgoW2lkLCB0eXBlLCBwdXJwb3NlXSkgPT4gT2JqZWN0LmZyZWV6ZSh7IGlkLCB0eXBlLCBwdXJwb3NlIH0pKVxuKTtcblxuZXhwb3J0IGNvbnN0IENoYWluVHlwZSA9IHRjb21iLmlycmVkdWNpYmxlKCdDaGFpblR5cGUnLCAobikgPT4gaXNWYWxpZChuKSk7XG5cbmNvbnN0IGZvclR5cGUgPSAodTogVW5zcGVudFR5cGUpOiBDb2Rlc0J5UHVycG9zZSA9PiB7XG4gIC8vIERvIHRjb21iIHR5cGUgY2hlY2tpbmcgaW4ganMgcHJvamVjdHMgdGhhdCB1c2UgdGhpcyBsaWJcbiAgaWYgKCFVbnNwZW50VHlwZVRjb21iLmlzKHUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHVuc3BlbnQgdHlwZTogJHt1fWApO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDb2Rlc0J5UHVycG9zZSh1KTtcbn07XG5cbmNvbnN0IHR5cGVGb3JDb2RlID0gKGM6IENoYWluQ29kZSk6IFVuc3BlbnRUeXBlID0+IHtcbiAgY29uc3QgY29kZSA9IGNvZGVMaXN0LmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IGMpO1xuICBpZiAoIWNvZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3JJbnZhbGlkQ29kZShjKTtcbiAgfVxuICByZXR1cm4gY29kZS50eXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWQgPSAoYzogQ2hhaW5Db2RlKTogYm9vbGVhbiA9PiBjb2RlTGlzdC5zb21lKCh7IGlkIH0pID0+IGlkID09PSBjKTtcblxuY29uc3QgdGhyb3dJZlVuZGVmaW5lZCA9IDxUPih2OiBUIHwgdW5kZWZpbmVkKTogVCA9PiB7XG4gIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIHZhbHVlIHRvIGJlIGRlZmluZWRgKTtcbiAgfVxuICByZXR1cm4gdjtcbn07XG5cbmV4cG9ydCBjbGFzcyBDb2RlR3JvdXAge1xuICBwdWJsaWMgdmFsdWVzOiBSZWFkb25seUFycmF5PENoYWluQ29kZT47XG4gIGNvbnN0cnVjdG9yKHZhbHVlczogSXRlcmFibGU8Q2hhaW5Db2RlPikge1xuICAgIHRoaXMudmFsdWVzID0gT2JqZWN0LmZyZWV6ZShbLi4udmFsdWVzXSk7XG4gIH1cblxuICBwdWJsaWMgaGFzKGNvZGU6IENoYWluQ29kZSk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNWYWxpZChjb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9ySW52YWxpZENvZGUoY29kZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZhbHVlcy5pbmNsdWRlcyhjb2RlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29kZXNCeVB1cnBvc2UgZXh0ZW5kcyBDb2RlR3JvdXAge1xuICBwdWJsaWMgaW50ZXJuYWw6IENoYWluQ29kZTtcbiAgcHVibGljIGV4dGVybmFsOiBDaGFpbkNvZGU7XG5cbiAgY29uc3RydWN0b3IodDogVW5zcGVudFR5cGUpIHtcbiAgICBjb25zdCBjb2RlTWFwOiBNYXA8UHVycG9zZSwgQ2hhaW5Db2RlPiA9IG5ldyBNYXAoXG4gICAgICBjb2RlTGlzdC5maWx0ZXIoKHsgdHlwZSB9KSA9PiB0eXBlID09PSB0KS5tYXAoKHsgcHVycG9zZSwgaWQgfSk6IFtQdXJwb3NlLCBDaGFpbkNvZGVdID0+IFtwdXJwb3NlLCBpZF0pXG4gICAgKTtcbiAgICBpZiAoY29kZU1hcC5zaXplICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgbnVtYmVyIG9mIGNvZGVzIGZvciB0eXBlICR7dH1gKTtcbiAgICB9XG5cbiAgICBzdXBlcihjb2RlTWFwLnZhbHVlcygpKTtcblxuICAgIHRoaXMuaW50ZXJuYWwgPSB0aHJvd0lmVW5kZWZpbmVkKGNvZGVNYXAuZ2V0KFB1cnBvc2UuaW50ZXJuYWwpKTtcbiAgICB0aGlzLmV4dGVybmFsID0gdGhyb3dJZlVuZGVmaW5lZChjb2RlTWFwLmdldChQdXJwb3NlLmV4dGVybmFsKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvZGVzQnlUeXBlIGV4dGVuZHMgQ29kZUdyb3VwIHtcbiAgcHVibGljIHAyc2g6IENoYWluQ29kZTtcbiAgcHVibGljIHAyc2hQMndzaDogQ2hhaW5Db2RlO1xuICBwdWJsaWMgcDJ3c2g6IENoYWluQ29kZTtcbiAgcHVibGljIHAydHI6IENoYWluQ29kZTtcblxuICBjb25zdHJ1Y3RvcihwOiBQdXJwb3NlKSB7XG4gICAgY29uc3QgY29kZU1hcDogTWFwPFVuc3BlbnRUeXBlLCBDaGFpbkNvZGU+ID0gbmV3IE1hcChcbiAgICAgIGNvZGVMaXN0LmZpbHRlcigoeyBwdXJwb3NlIH0pID0+IHB1cnBvc2UgPT09IHApLm1hcCgoeyB0eXBlLCBpZCB9KTogW1Vuc3BlbnRUeXBlLCBDaGFpbkNvZGVdID0+IFt0eXBlLCBpZF0pXG4gICAgKTtcbiAgICBpZiAoY29kZU1hcC5zaXplICE9PSA0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgbnVtYmVyIG9mIGNvZGVzYCk7XG4gICAgfVxuXG4gICAgc3VwZXIoY29kZU1hcC52YWx1ZXMoKSk7XG5cbiAgICB0aGlzLnAyc2ggPSB0aHJvd0lmVW5kZWZpbmVkKGNvZGVNYXAuZ2V0KFVuc3BlbnRUeXBlLnAyc2gpKTtcbiAgICB0aGlzLnAyc2hQMndzaCA9IHRocm93SWZVbmRlZmluZWQoY29kZU1hcC5nZXQoVW5zcGVudFR5cGUucDJzaFAyd3NoKSk7XG4gICAgdGhpcy5wMndzaCA9IHRocm93SWZVbmRlZmluZWQoY29kZU1hcC5nZXQoVW5zcGVudFR5cGUucDJ3c2gpKTtcbiAgICB0aGlzLnAydHIgPSB0aHJvd0lmVW5kZWZpbmVkKGNvZGVNYXAuZ2V0KFVuc3BlbnRUeXBlLnAydHIpKTtcbiAgfVxufVxuXG5jb25zdCBib3VuZEhhcyA9IChpbnN0YW5jZTogQ29kZUdyb3VwKSA9PiBpbnN0YW5jZS5oYXMuYmluZChpbnN0YW5jZSk7XG5cbmNvbnN0IHAyc2ggPSBPYmplY3QuZnJlZXplKG5ldyBDb2Rlc0J5UHVycG9zZShVbnNwZW50VHlwZS5wMnNoKSk7XG5jb25zdCBwMnNoUDJ3c2ggPSBPYmplY3QuZnJlZXplKG5ldyBDb2Rlc0J5UHVycG9zZShVbnNwZW50VHlwZS5wMnNoUDJ3c2gpKTtcbmNvbnN0IHAyd3NoID0gT2JqZWN0LmZyZWV6ZShuZXcgQ29kZXNCeVB1cnBvc2UoVW5zcGVudFR5cGUucDJ3c2gpKTtcbmNvbnN0IHAydHIgPSBPYmplY3QuZnJlZXplKG5ldyBDb2Rlc0J5UHVycG9zZShVbnNwZW50VHlwZS5wMnRyKSk7XG5jb25zdCBleHRlcm5hbCA9IE9iamVjdC5mcmVlemUobmV3IENvZGVzQnlUeXBlKFB1cnBvc2UuZXh0ZXJuYWwpKTtcbmNvbnN0IGludGVybmFsID0gT2JqZWN0LmZyZWV6ZShuZXcgQ29kZXNCeVR5cGUoUHVycG9zZS5pbnRlcm5hbCkpO1xuY29uc3QgYWxsID0gT2JqZWN0LmZyZWV6ZShjb2RlTGlzdC5tYXAoKHsgaWQgfSkgPT4gaWQpKTtcblxuLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5mcmVlemUoe1xuICAvKiBAZGVwcmVjYXRlZDogdXNlIENoYWluQ29kZVRjb21iICovXG4gIENoYWluVHlwZSxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgQ2hhaW5Db2RlVGNvbWI6IENoYWluVHlwZSxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgUHVycG9zZVRjb21iLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBVbnNwZW50VHlwZVRjb21iLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBwMnNoLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBwMnNoUDJ3c2gsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIHAyd3NoLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBwMnRyLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBleHRlcm5hbCxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgaW50ZXJuYWwsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIGFsbCxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgaXNQMnNoOiBib3VuZEhhcyhwMnNoKSxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgaXNQMnNoUDJ3c2g6IGJvdW5kSGFzKHAyc2hQMndzaCksXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIGlzUDJ3c2g6IGJvdW5kSGFzKHAyd3NoKSxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgaXNQMnRyOiBib3VuZEhhcyhwMnRyKSxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgaXNFeHRlcm5hbDogYm91bmRIYXMoZXh0ZXJuYWwpLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBpc0ludGVybmFsOiBib3VuZEhhcyhpbnRlcm5hbCksXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIGlzVmFsaWQsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIGZvclR5cGUsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIHR5cGVGb3JDb2RlLFxufSk7XG4iXX0=
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQStCO0FBSS9CLE1BQWEsZ0JBQWlCLFNBQVEsS0FBSztJQUN6QyxZQUFZLElBQWU7UUFDekIsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUpELDRDQUlDO0FBRUQsSUFBWSxXQU9YO0FBUEQsV0FBWSxXQUFXO0lBQ3JCLDhCQUFlLENBQUE7SUFDZiw0QkFBYSxDQUFBO0lBQ2Isc0NBQXVCLENBQUE7SUFDdkIsZ0NBQWlCLENBQUE7SUFDakIsOEJBQWUsQ0FBQTtJQUNmLDRCQUFhLENBQUE7QUFDZixDQUFDLEVBUFcsV0FBVywyQkFBWCxXQUFXLFFBT3RCO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFbEUsSUFBWSxPQUdYO0FBSEQsV0FBWSxPQUFPO0lBQ2pCLGdDQUFxQixDQUFBO0lBQ3JCLGdDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxPQUFPLHVCQUFQLE9BQU8sUUFHbEI7QUFFRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFRMUQsTUFBTSxRQUFRLEdBQW1DLE1BQU0sQ0FBQyxNQUFNLENBRTFEO0lBQ0UsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUM3QyxDQUFDLEVBQUUs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LHNDQUFzQztJQUN0QyxPQUFPLEVBQVAsZUFBTztJQUNQLHNDQUFzQztJQUN0QyxPQUFPO0lBQ1Asc0NBQXNDO0lBQ3RDLFdBQVc7Q0FDWixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0Y29tYiBmcm9tICd0Y29tYic7XG5cbmV4cG9ydCB0eXBlIENoYWluQ29kZSA9IG51bWJlcjtcblxuZXhwb3J0IGNsYXNzIEVycm9ySW52YWxpZENvZGUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGNvZGU6IENoYWluQ29kZSkge1xuICAgIHN1cGVyKGBpbnZhbGlkIGNvZGUgJHtjb2RlfWApO1xuICB9XG59XG5cbmV4cG9ydCBlbnVtIFVuc3BlbnRUeXBlIHtcbiAgcDJwa2ggPSAncDJwa2gnLFxuICBwMnNoID0gJ3Ayc2gnLFxuICBwMnNoUDJ3c2ggPSAncDJzaFAyd3NoJyxcbiAgcDJ3cGtoID0gJ3Ayd3BraCcsXG4gIHAyd3NoID0gJ3Ayd3NoJyxcbiAgcDJ0ciA9ICdwMnRyJyxcbn1cblxuY29uc3QgVW5zcGVudFR5cGVUY29tYiA9IHRjb21iLmVudW1zLm9mKE9iamVjdC5rZXlzKFVuc3BlbnRUeXBlKSk7XG5cbmV4cG9ydCBlbnVtIFB1cnBvc2Uge1xuICBpbnRlcm5hbCA9ICdpbnRlcm5hbCcsXG4gIGV4dGVybmFsID0gJ2V4dGVybmFsJyxcbn1cblxuY29uc3QgUHVycG9zZVRjb21iID0gdGNvbWIuZW51bXMub2YoT2JqZWN0LmtleXMoUHVycG9zZSkpO1xuXG5pbnRlcmZhY2UgSUNvZGUge1xuICBpZDogQ2hhaW5Db2RlO1xuICB0eXBlOiBVbnNwZW50VHlwZTtcbiAgcHVycG9zZTogUHVycG9zZTtcbn1cblxuY29uc3QgY29kZUxpc3Q6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHk8SUNvZGU+PiA9IE9iamVjdC5mcmVlemUoXG4gIChcbiAgICBbXG4gICAgICBbMCwgVW5zcGVudFR5cGUucDJzaCwgUHVycG9zZS5leHRlcm5hbF0sXG4gICAgICBbMTAsIFVuc3BlbnRUeXBlLnAyc2hQMndzaCwgUHVycG9zZS5leHRlcm5hbF0sXG4gICAgICBbMjAsIFVuc3BlbnRUeXBlLnAyd3NoLCBQdXJwb3NlLmV4dGVybmFsXSxcbiAgICAgIFszMCwgVW5zcGVudFR5cGUucDJ0ciwgUHVycG9zZS5leHRlcm5hbF0sXG5cbiAgICAgIFsxLCBVbnNwZW50VHlwZS5wMnNoLCBQdXJwb3NlLmludGVybmFsXSxcbiAgICAgIFsxMSwgVW5zcGVudFR5cGUucDJzaFAyd3NoLCBQdXJwb3NlLmludGVybmFsXSxcbiAgICAgIFsyMSwgVW5zcGVudFR5cGUucDJ3c2gsIFB1cnBvc2UuaW50ZXJuYWxdLFxuICAgICAgWzMxLCBVbnNwZW50VHlwZS5wMnRyLCBQdXJwb3NlLmludGVybmFsXSxcbiAgICBdIGFzIEFycmF5PFtDaGFpbkNvZGUsIFVuc3BlbnRUeXBlLCBQdXJwb3NlXT5cbiAgKS5tYXAoKFtpZCwgdHlwZSwgcHVycG9zZV0pID0+IE9iamVjdC5mcmVlemUoeyBpZCwgdHlwZSwgcHVycG9zZSB9KSlcbik7XG5cbmV4cG9ydCBjb25zdCBDaGFpblR5cGUgPSB0Y29tYi5pcnJlZHVjaWJsZSgnQ2hhaW5UeXBlJywgKG4pID0+IGlzVmFsaWQobikpO1xuXG5jb25zdCBmb3JUeXBlID0gKHU6IFVuc3BlbnRUeXBlKTogQ29kZXNCeVB1cnBvc2UgPT4ge1xuICAvLyBEbyB0Y29tYiB0eXBlIGNoZWNraW5nIGluIGpzIHByb2plY3RzIHRoYXQgdXNlIHRoaXMgbGliXG4gIGlmICghVW5zcGVudFR5cGVUY29tYi5pcyh1KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB1bnNwZW50IHR5cGU6ICR7dX1gKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgQ29kZXNCeVB1cnBvc2UodSk7XG59O1xuXG5jb25zdCB0eXBlRm9yQ29kZSA9IChjOiBDaGFpbkNvZGUpOiBVbnNwZW50VHlwZSA9PiB7XG4gIGNvbnN0IGNvZGUgPSBjb2RlTGlzdC5maW5kKCh7IGlkIH0pID0+IGlkID09PSBjKTtcbiAgaWYgKCFjb2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9ySW52YWxpZENvZGUoYyk7XG4gIH1cbiAgcmV0dXJuIGNvZGUudHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkID0gKGM6IENoYWluQ29kZSk6IGJvb2xlYW4gPT4gY29kZUxpc3Quc29tZSgoeyBpZCB9KSA9PiBpZCA9PT0gYyk7XG5cbmNvbnN0IHRocm93SWZVbmRlZmluZWQgPSA8VD4odjogVCB8IHVuZGVmaW5lZCk6IFQgPT4ge1xuICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCB2YWx1ZSB0byBiZSBkZWZpbmVkYCk7XG4gIH1cbiAgcmV0dXJuIHY7XG59O1xuXG5leHBvcnQgY2xhc3MgQ29kZUdyb3VwIHtcbiAgcHVibGljIHZhbHVlczogUmVhZG9ubHlBcnJheTxDaGFpbkNvZGU+O1xuICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IEl0ZXJhYmxlPENoYWluQ29kZT4pIHtcbiAgICB0aGlzLnZhbHVlcyA9IE9iamVjdC5mcmVlemUoWy4uLnZhbHVlc10pO1xuICB9XG5cbiAgcHVibGljIGhhcyhjb2RlOiBDaGFpbkNvZGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzVmFsaWQoY29kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvckludmFsaWRDb2RlKGNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZXMuaW5jbHVkZXMoY29kZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvZGVzQnlQdXJwb3NlIGV4dGVuZHMgQ29kZUdyb3VwIHtcbiAgcHVibGljIGludGVybmFsOiBDaGFpbkNvZGU7XG4gIHB1YmxpYyBleHRlcm5hbDogQ2hhaW5Db2RlO1xuXG4gIGNvbnN0cnVjdG9yKHQ6IFVuc3BlbnRUeXBlKSB7XG4gICAgY29uc3QgY29kZU1hcDogTWFwPFB1cnBvc2UsIENoYWluQ29kZT4gPSBuZXcgTWFwKFxuICAgICAgY29kZUxpc3QuZmlsdGVyKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gdCkubWFwKCh7IHB1cnBvc2UsIGlkIH0pOiBbUHVycG9zZSwgQ2hhaW5Db2RlXSA9PiBbcHVycG9zZSwgaWRdKVxuICAgICk7XG4gICAgaWYgKGNvZGVNYXAuc2l6ZSAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIG51bWJlciBvZiBjb2RlcyBmb3IgdHlwZSAke3R9YCk7XG4gICAgfVxuXG4gICAgc3VwZXIoY29kZU1hcC52YWx1ZXMoKSk7XG5cbiAgICB0aGlzLmludGVybmFsID0gdGhyb3dJZlVuZGVmaW5lZChjb2RlTWFwLmdldChQdXJwb3NlLmludGVybmFsKSk7XG4gICAgdGhpcy5leHRlcm5hbCA9IHRocm93SWZVbmRlZmluZWQoY29kZU1hcC5nZXQoUHVycG9zZS5leHRlcm5hbCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2Rlc0J5VHlwZSBleHRlbmRzIENvZGVHcm91cCB7XG4gIHB1YmxpYyBwMnNoOiBDaGFpbkNvZGU7XG4gIHB1YmxpYyBwMnNoUDJ3c2g6IENoYWluQ29kZTtcbiAgcHVibGljIHAyd3NoOiBDaGFpbkNvZGU7XG4gIHB1YmxpYyBwMnRyOiBDaGFpbkNvZGU7XG5cbiAgY29uc3RydWN0b3IocDogUHVycG9zZSkge1xuICAgIGNvbnN0IGNvZGVNYXA6IE1hcDxVbnNwZW50VHlwZSwgQ2hhaW5Db2RlPiA9IG5ldyBNYXAoXG4gICAgICBjb2RlTGlzdC5maWx0ZXIoKHsgcHVycG9zZSB9KSA9PiBwdXJwb3NlID09PSBwKS5tYXAoKHsgdHlwZSwgaWQgfSk6IFtVbnNwZW50VHlwZSwgQ2hhaW5Db2RlXSA9PiBbdHlwZSwgaWRdKVxuICAgICk7XG4gICAgaWYgKGNvZGVNYXAuc2l6ZSAhPT0gNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIG51bWJlciBvZiBjb2Rlc2ApO1xuICAgIH1cblxuICAgIHN1cGVyKGNvZGVNYXAudmFsdWVzKCkpO1xuXG4gICAgdGhpcy5wMnNoID0gdGhyb3dJZlVuZGVmaW5lZChjb2RlTWFwLmdldChVbnNwZW50VHlwZS5wMnNoKSk7XG4gICAgdGhpcy5wMnNoUDJ3c2ggPSB0aHJvd0lmVW5kZWZpbmVkKGNvZGVNYXAuZ2V0KFVuc3BlbnRUeXBlLnAyc2hQMndzaCkpO1xuICAgIHRoaXMucDJ3c2ggPSB0aHJvd0lmVW5kZWZpbmVkKGNvZGVNYXAuZ2V0KFVuc3BlbnRUeXBlLnAyd3NoKSk7XG4gICAgdGhpcy5wMnRyID0gdGhyb3dJZlVuZGVmaW5lZChjb2RlTWFwLmdldChVbnNwZW50VHlwZS5wMnRyKSk7XG4gIH1cbn1cblxuY29uc3QgYm91bmRIYXMgPSAoaW5zdGFuY2U6IENvZGVHcm91cCkgPT4gaW5zdGFuY2UuaGFzLmJpbmQoaW5zdGFuY2UpO1xuXG5jb25zdCBwMnNoID0gT2JqZWN0LmZyZWV6ZShuZXcgQ29kZXNCeVB1cnBvc2UoVW5zcGVudFR5cGUucDJzaCkpO1xuY29uc3QgcDJzaFAyd3NoID0gT2JqZWN0LmZyZWV6ZShuZXcgQ29kZXNCeVB1cnBvc2UoVW5zcGVudFR5cGUucDJzaFAyd3NoKSk7XG5jb25zdCBwMndzaCA9IE9iamVjdC5mcmVlemUobmV3IENvZGVzQnlQdXJwb3NlKFVuc3BlbnRUeXBlLnAyd3NoKSk7XG5jb25zdCBwMnRyID0gT2JqZWN0LmZyZWV6ZShuZXcgQ29kZXNCeVB1cnBvc2UoVW5zcGVudFR5cGUucDJ0cikpO1xuY29uc3QgZXh0ZXJuYWwgPSBPYmplY3QuZnJlZXplKG5ldyBDb2Rlc0J5VHlwZShQdXJwb3NlLmV4dGVybmFsKSk7XG5jb25zdCBpbnRlcm5hbCA9IE9iamVjdC5mcmVlemUobmV3IENvZGVzQnlUeXBlKFB1cnBvc2UuaW50ZXJuYWwpKTtcbmNvbnN0IGFsbCA9IE9iamVjdC5mcmVlemUoY29kZUxpc3QubWFwKCh7IGlkIH0pID0+IGlkKSk7XG5cbi8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuZnJlZXplKHtcbiAgLyogQGRlcHJlY2F0ZWQ6IHVzZSBDaGFpbkNvZGVUY29tYiAqL1xuICBDaGFpblR5cGUsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIENoYWluQ29kZVRjb21iOiBDaGFpblR5cGUsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIFB1cnBvc2VUY29tYixcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgVW5zcGVudFR5cGVUY29tYixcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgcDJzaCxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgcDJzaFAyd3NoLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBwMndzaCxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgcDJ0cixcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgZXh0ZXJuYWwsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIGludGVybmFsLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBhbGwsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIGlzUDJzaDogYm91bmRIYXMocDJzaCksXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIGlzUDJzaFAyd3NoOiBib3VuZEhhcyhwMnNoUDJ3c2gpLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBpc1Ayd3NoOiBib3VuZEhhcyhwMndzaCksXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIGlzUDJ0cjogYm91bmRIYXMocDJ0ciksXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIGlzRXh0ZXJuYWw6IGJvdW5kSGFzKGV4dGVybmFsKSxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgaXNJbnRlcm5hbDogYm91bmRIYXMoaW50ZXJuYWwpLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBpc1ZhbGlkLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBmb3JUeXBlLFxuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICB0eXBlRm9yQ29kZSxcbn0pO1xuIl19
@@ -1,7 +1,6 @@
1
- /// <reference types="node" />
2
1
  import * as utxolib from '@bitgo-beta/utxo-lib';
3
2
  import { bitgo } from '@bitgo-beta/utxo-lib';
4
- declare type ChainCode = bitgo.ChainCode;
3
+ type ChainCode = bitgo.ChainCode;
5
4
  import { VirtualSizes } from './virtualSizes';
6
5
  export { VirtualSizes };
7
6
  /**
@@ -164,7 +163,7 @@ export declare class Dimensions {
164
163
  /**
165
164
  * Return dimensions of an unspent according to `chain` parameter
166
165
  * @param chain - Chain code as defined by utxo.chain
167
- * @param params - Hint for unspents with variable input sizes (p2tr).
166
+ * @param params - Hint for unspents with variable input sizes (p2tr, p2trMusig2)
168
167
  * @return {Dimensions} of the unspent
169
168
  * @throws if the chain code is invalid or unsupported
170
169
  */
@@ -173,11 +172,12 @@ export declare class Dimensions {
173
172
  }, params?: FromUnspentParams): Dimensions;
174
173
  /**
175
174
  * @param unspents
175
+ * @param params - Hint for unspents with variable input sizes (p2tr, p2trMusig2)
176
176
  * @return {Dimensions} sum of the dimensions for each unspent (@see Dimensions.fromUnspent())
177
177
  */
178
178
  static fromUnspents(unspents: {
179
179
  chain: ChainCode;
180
- }[]): Dimensions;
180
+ }[], params?: FromUnspentParams): Dimensions;
181
181
  /**
182
182
  * @param transaction - bitcoin-like transaction
183
183
  * @param [param.assumeUnsigned] - default type for unsigned inputs
@@ -1 +1 @@
1
- {"version":3,"file":"dimensions.d.ts","sourceRoot":"","sources":["../../src/dimensions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dimensions.d.ts","sourceRoot":"","sources":["../../src/dimensions.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
36
  exports.Dimensions = exports.OutputDimensions = exports.VirtualSizes = void 0;
23
37
  const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
@@ -51,11 +65,13 @@ class OutputDimensions {
51
65
  exports.OutputDimensions = OutputDimensions;
52
66
  const defaultUnspentParams = {
53
67
  p2tr: {
54
- scriptPathLevel: 1,
68
+ // Default to recovery script paths, to make it easier for recovery case callers (WRW etc).
69
+ // WP can explicitly pass scriptPathLevel: 1 to use happy path.
70
+ scriptPathLevel: 2,
55
71
  },
56
72
  p2trMusig2: {
57
73
  // Default to script path spend, to make it easier for recovery case callers (WRW etc).
58
- // WP can explicitly pass undefined to use key path.
74
+ // WP can explicitly pass scriptPathLevel: undefined to use key path.
59
75
  scriptPathLevel: 1,
60
76
  },
61
77
  };
@@ -170,7 +186,7 @@ class Dimensions {
170
186
  if (!types_1.PositiveInteger.is(scriptLength)) {
171
187
  throw new TypeError(`expected positive integer for scriptLength, got ${scriptLength}`);
172
188
  }
173
- return scriptLength + scriptSizes_1.compactSize(scriptLength) + virtualSizes_1.VirtualSizes.txOutputAmountSize;
189
+ return scriptLength + (0, scriptSizes_1.compactSize)(scriptLength) + virtualSizes_1.VirtualSizes.txOutputAmountSize;
174
190
  }
175
191
  /**
176
192
  * @return
@@ -220,8 +236,7 @@ class Dimensions {
220
236
  * [param.assumeUnsigned] - default type for unsigned input
221
237
  */
222
238
  static fromInput(input, params = {}) {
223
- var _a, _b;
224
- if (((_a = input.script) === null || _a === void 0 ? void 0 : _a.length) || ((_b = input.witness) === null || _b === void 0 ? void 0 : _b.length)) {
239
+ if (input.script?.length || input.witness?.length) {
225
240
  const parsed = utxolib.bitgo.parseSignatureScript(input);
226
241
  return Dimensions.fromScriptType(parsed.scriptType, parsed);
227
242
  }
@@ -305,7 +320,7 @@ class Dimensions {
305
320
  /**
306
321
  * Return dimensions of an unspent according to `chain` parameter
307
322
  * @param chain - Chain code as defined by utxo.chain
308
- * @param params - Hint for unspents with variable input sizes (p2tr).
323
+ * @param params - Hint for unspents with variable input sizes (p2tr, p2trMusig2)
309
324
  * @return {Dimensions} of the unspent
310
325
  * @throws if the chain code is invalid or unsupported
311
326
  */
@@ -318,14 +333,15 @@ class Dimensions {
318
333
  }
319
334
  /**
320
335
  * @param unspents
336
+ * @param params - Hint for unspents with variable input sizes (p2tr, p2trMusig2)
321
337
  * @return {Dimensions} sum of the dimensions for each unspent (@see Dimensions.fromUnspent())
322
338
  */
323
- static fromUnspents(unspents) {
339
+ static fromUnspents(unspents, params = defaultUnspentParams) {
324
340
  if (!Array.isArray(unspents)) {
325
341
  throw new TypeError(`unspents must be array`);
326
342
  }
327
343
  // Convert the individual unspents into dimensions and sum them up
328
- return Dimensions.sum(...unspents.map((u) => Dimensions.fromUnspent(u)));
344
+ return Dimensions.sum(...unspents.map((u) => Dimensions.fromUnspent(u, params)));
329
345
  }
330
346
  /**
331
347
  * @param transaction - bitcoin-like transaction
@@ -366,8 +382,7 @@ class Dimensions {
366
382
  }
367
383
  }
368
384
  return mapDimensions(this, (key, v) => {
369
- var _a;
370
- const w = (_a = dimensions[key]) !== null && _a !== void 0 ? _a : Dimensions.ZERO[key];
385
+ const w = dimensions[key] ?? Dimensions.ZERO[key];
371
386
  if (key === 'outputs') {
372
387
  const vOutputs = v;
373
388
  const wOutputs = w;
@@ -482,4 +497,4 @@ Dimensions.ASSUME_P2TR_KEYPATH = Dimensions.SingleInput.p2trKeypath;
482
497
  Dimensions.ASSUME_P2TR_SCRIPTPATH_LEVEL1 = Dimensions.SingleInput.p2trScriptPathLevel1;
483
498
  Dimensions.ASSUME_P2TR_SCRIPTPATH_LEVEL2 = Dimensions.SingleInput.p2trScriptPathLevel2;
484
499
  Dimensions.ASSUME_P2SH_P2PK_INPUT = Dimensions.SingleInput.p2shP2pk;
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaW1lbnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBZ0Q7QUFDaEQsbURBQTZDO0FBQzdDLE1BQU0sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxnQkFBSyxDQUFDO0FBR2xELCtDQUE0QztBQUM1QyxtQ0FBMEM7QUFFMUMsaURBQThDO0FBQ3JDLDZGQURBLDJCQUFZLE9BQ0E7QUFFckI7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FDcEIsQ0FBc0IsRUFDdEIsQ0FBZ0Y7SUFFaEYsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEcsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQWEsZ0JBQWdCO0lBVTNCLFlBQVksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEtBQXVCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQzNFLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7YUFDcEU7U0FDRjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxD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LFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN4QyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2xELEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzFDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdEQsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLDJCQUEyQixFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3hFLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN4RSxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNqRCxDQUFDLENBQUM7QUEyQ2Esc0JBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztBQUMxQyw0QkFBaUIsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztBQUNyRCx1QkFBWSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQzVDLDhCQUFtQixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBQ3pELHdDQUE2QixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUM7QUFDNUUsd0NBQTZCLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztBQUM1RSxpQ0FBc0IsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgYml0Z28gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5jb25zdCB7IGlzQ2hhaW5Db2RlLCBzY3JpcHRUeXBlRm9yQ2hhaW4gfSA9IGJpdGdvO1xudHlwZSBDaGFpbkNvZGUgPSBiaXRnby5DaGFpbkNvZGU7XG5cbmltcG9ydCB7IGNvbXBhY3RTaXplIH0gZnJvbSAnLi9zY3JpcHRTaXplcyc7XG5pbXBvcnQgeyBQb3NpdGl2ZUludGVnZXIgfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgVmlydHVhbFNpemVzIH0gZnJvbSAnLi92aXJ0dWFsU2l6ZXMnO1xuZXhwb3J0IHsgVmlydHVhbFNpemVzIH07XG5cbi8qKlxuICogQXBwbHkgYGZgIHRvIGFsbCBwcm9wZXJ0aWVzIG9mIGBkYFxuICovXG5mdW5jdGlvbiBtYXBEaW1lbnNpb25zKFxuICBkOiBQYXJ0aWFsPERpbWVuc2lvbnM+LFxuICBmOiA8VCBleHRlbmRzIGtleW9mIERpbWVuc2lvbnM+KGtleTogVCwgdjogRGltZW5zaW9uc1tUXSB8IHVuZGVmaW5lZCkgPT4gdW5rbm93blxuKTogRGltZW5zaW9ucyB7XG4gIHJldHVybiBuZXcgRGltZW5zaW9ucyhcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZCkubWFwKChba2V5LCB2YWx1ZV0pID0+IFtrZXksIGYoa2V5IGFzIGtleW9mIERpbWVuc2lvbnMsIHZhbHVlKV0pKVxuICApO1xufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZSBjb3VudCBhbmQgc2l6ZSBvZiB0cmFuc2FjdGlvbiBvdXRwdXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBPdXRwdXREaW1lbnNpb25zIHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBvdXRwdXRzXG4gICAqL1xuICBjb3VudDogbnVtYmVyO1xuICAvKipcbiAgICogQWdncmVnYXRlIHZTaXplXG4gICAqL1xuICBzaXplOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoeyBjb3VudCA9IDAsIHNpemUgPSAwIH06IE91dHB1dERpbWVuc2lvbnMgPSB7IGNvdW50OiAwLCBzaXplOiAwIH0pIHtcbiAgICBpZiAoY291bnQgPT09IDAgfHwgc2l6ZSA9PT0gMCkge1xuICAgICAgaWYgKGNvdW50ICE9PSAwIHx8IHNpemUgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb3VudCBhbmQgc2l6ZSBtdXN0IGJvdGggYmUgemVybyBpZiBvbmUgaXMgemVyb2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY291bnQgPSBjb3VudDtcbiAgICB0aGlzLnNpemUgPSBzaXplO1xuXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRnJvbUlucHV0UGFyYW1zIHtcbiAgLy8gSW4gY2FzZXMgd2hlcmUgdGhlIGlucHV0IHR5cGUgaXMgYW1iaWd1b3VzLCB3ZSBtdXN0IHByb3ZpZGUgYSBoaW50IGFib3V0IHNwZW5kIHNjcmlwdCB0eXBlLlxuICBhc3N1bWVVbnNpZ25lZD86IERpbWVuc2lvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbVVuc3BlbnRQYXJhbXMge1xuICBwMnRyOiB7XG4gICAgc2NyaXB0UGF0aExldmVsPzogbnVtYmVyO1xuICB9O1xuICBwMnRyTXVzaWcyOiB7XG4gICAgc2NyaXB0UGF0aExldmVsPzogbnVtYmVyO1xuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0VW5zcGVudFBhcmFtczogRnJvbVVuc3BlbnRQYXJhbXMgPSB7XG4gIHAydHI6IHtcbiAgICBzY3JpcHRQYXRoTGV2ZWw6IDEsXG4gIH0sXG4gIHAydHJNdXNpZzI6IHtcbiAgICAvLyBEZWZhdWx0IHRvIHNjcmlwdCBwYXRoIHNwZW5kLCB0byBtYWtlIGl0IGVhc2llciBmb3IgcmVjb3ZlcnkgY2FzZSBjYWxsZXJzIChXUlcgZXRjKS5cbiAgICAvLyBXUCBjYW4gZXhwbGljaXRseSBwYXNzIHVuZGVmaW5lZCB0byB1c2Uga2V5IHBhdGguXG4gICAgc2NyaXB0UGF0aExldmVsOiAxLFxuICB9LFxufTtcblxuLyoqXG4gKiBEaW1lbnNpb25zIG9mIGEgQml0R28gd2FsbGV0IHRyYW5zYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIERpbWVuc2lvbnMge1xuICAvKiogSW5wdXQgY291bnRzIGZvciBCaXRHbyB3YWxsZXQgbXVsdGktc2lnbmF0dXJlIGlucHV0cyAqL1xuICBwdWJsaWMgcmVhZG9ubHkgblAyc2hJbnB1dHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBuUDJzaFAyd3NoSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAyd3NoSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAydHJLZXlwYXRoSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVhZG9ubHkgblAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzOiBudW1iZXIgPSAwO1xuXG4gIC8qIElucHV0IGNvdW50IGZvciBzaW5nbGUtc2lnbmF0dXJlIGlucHV0cyAoUmVwbGF5IFByb3RlY3Rpb24gaW5wdXRzKSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgblAyc2hQMnBrSW5wdXRzOiBudW1iZXIgPSAwO1xuXG4gIHB1YmxpYyByZWFkb25seSBvdXRwdXRzOiBPdXRwdXREaW1lbnNpb25zID0gbmV3IE91dHB1dERpbWVuc2lvbnMoKTtcblxuICBjb25zdHJ1Y3RvcihkOiBQYXJ0aWFsPERpbWVuc2lvbnM+ID0ge30pIHtcbiAgICBPYmplY3QuZW50cmllcyhkKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHRoaXMuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkpO1xuXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UHJvcGVydHkoazogc3RyaW5nLCB2OiB1bmtub3duKTogdm9pZCB7XG4gICAgc3dpdGNoIChrKSB7XG4gICAgICBjYXNlICduUDJzaElucHV0cyc6XG4gICAgICBjYXNlICduUDJzaFAyd3NoSW5wdXRzJzpcbiAgICAgIGNhc2UgJ25QMndzaElucHV0cyc6XG4gICAgICBjYXNlICduUDJ0cktleXBhdGhJbnB1dHMnOlxuICAgICAgY2FzZSAnblAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzJzpcbiAgICAgIGNhc2UgJ25QMnRyU2NyaXB0UGF0aExldmVsMklucHV0cyc6XG4gICAgICBjYXNlICduUDJzaFAycGtJbnB1dHMnOlxuICAgICAgICBpZiAodHlwZW9mIHYgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9wZXJ0eSAke2t9IG11c3QgYmUgbnVtYmVyYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2KSB8fCB2IDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtrfSBtdXN0IGJlIHplcm8gb3IgcG9zaXRpdmUgaW50ZWdlcmApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3V0cHV0cyc6XG4gICAgICAgIGlmICghKHYgaW5zdGFuY2VvZiBPdXRwdXREaW1lbnNpb25zKSkge1xuICAgICAgICAgIHYgPSBuZXcgT3V0cHV0RGltZW5zaW9ucyh2IGFzIE91dHB1dERpbWVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHByb3BlcnR5ICR7a31gKTtcbiAgICB9XG5cbiAgICAodGhpcyBhcyBhbnkpW2tdID0gdjtcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgRGltZW5zaW9ucygpKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIFpFUk9cbiAgICogQHJldHVybiBEaW1lbnNpb25zIGZvciBhbiBlbXB0eSB0cmFuc2FjdGlvblxuICAgKi9cbiAgc3RhdGljIHplcm8oKTogUmVhZG9ubHk8RGltZW5zaW9ucz4ge1xuICAgIHJldHVybiB0aGlzLlpFUk87XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHNpemVcbiAgICogQHJldHVybiBEaW1lbnNpb25zIGZvciBhIHNpbmdsZSBvdXRwdXQgd2l0aCBnaXZlbiBzaXplXG4gICAqL1xuICBzdGF0aWMgc2luZ2xlT3V0cHV0KHNpemU6IG51bWJlcik6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLnN1bSh7IG91dHB1dHM6IHsgY291bnQ6IDEsIHNpemUgfSB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBTaW5nbGVPdXRwdXQgPSBPYmplY3QuZnJlZXplKHtcbiAgICBwMnNoOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMnNoT3V0cHV0U2l6ZSksXG4gICAgcDJzaFAyd3NoOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMnNoUDJ3c2hPdXRwdXRTaXplKSxcbiAgICBwMndzaDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJ3c2hPdXRwdXRTaXplKSxcbiAgICBwMnRyOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMnRyT3V0cHV0U2l6ZSksXG5cbiAgICBwMnBraDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJwa2hPdXRwdXRTaXplKSxcbiAgICBwMndwa2g6IERpbWVuc2lvbnMuc2luZ2xlT3V0cHV0KFZpcnR1YWxTaXplcy50eFAyd3BraE91dHB1dFNpemUpLFxuICB9KTtcblxuICAvKipcbiAgICogQHJldHVybiBOdW1iZXIgb2YgdG90YWwgaW5wdXRzIChwMnNoICsgcDJzaFAyd3NoICsgcDJ3c2ggKyBwMnRyKVxuICAgKi9cbiAgZ2V0IG5JbnB1dHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5uUDJzaElucHV0cyArXG4gICAgICB0aGlzLm5QMnNoUDJ3c2hJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJ3c2hJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJ0cktleXBhdGhJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHMgK1xuICAgICAgdGhpcy5uUDJzaFAycGtJbnB1dHNcbiAgICApO1xuICB9XG5cbiAgc2V0IG5JbnB1dHMoXzogbnVtYmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWFkLW9ubHkgcHJvcGVydHkgbklucHV0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4gTnVtYmVyIG9mIHRvdGFsIG91dHB1dHNcbiAgICovXG4gIGdldCBuT3V0cHV0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm91dHB1dHMuY291bnQ7XG4gIH1cblxuICBzZXQgbk91dHB1dHMoXzogbnVtYmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByZWFkLW9ubHkgcHJvcGVydHkgbk91dHB1dHNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYXJncyAtIERpbWVuc2lvbnMgKGNhbiBiZSBwYXJ0aWFsbHkgZGVmaW5lZClcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gc3VtIG9mIGFyZ3VtZW50c1xuICAgKi9cbiAgc3RhdGljIHN1bSguLi5hcmdzOiBQYXJ0aWFsPERpbWVuc2lvbnM+W10pOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gYXJncy5yZWR1Y2UoKGE6IERpbWVuc2lvbnMsIGI6IFBhcnRpYWw8RGltZW5zaW9ucz4pID0+IGEucGx1cyhiKSwgbmV3IERpbWVuc2lvbnMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIHN0YXRpYyBnZXRPdXRwdXRTY3JpcHRMZW5ndGhGb3JDaGFpbihjaGFpbjogQ2hhaW5Db2RlKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbikpIHtcbiAgICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIGNhc2UgJ3AydHInOlxuICAgICAgY2FzZSAncDJ0ck11c2lnMic6XG4gICAgICAgIHJldHVybiAzNDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAyMztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHNjcmlwdExlbmd0aFxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHZTaXplIG9mIGFuIG91dHB1dCB3aXRoIHNjcmlwdCBsZW5ndGhcbiAgICovXG4gIHN0YXRpYyBnZXRWU2l6ZUZvck91dHB1dFdpdGhTY3JpcHRMZW5ndGgoc2NyaXB0TGVuZ3RoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghUG9zaXRpdmVJbnRlZ2VyLmlzKHNjcmlwdExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGV4cGVjdGVkIHBvc2l0aXZlIGludGVnZXIgZm9yIHNjcmlwdExlbmd0aCwgZ290ICR7c2NyaXB0TGVuZ3RofWApO1xuICAgIH1cbiAgICByZXR1cm4gc2NyaXB0TGVuZ3RoICsgY29tcGFjdFNpemUoc2NyaXB0TGVuZ3RoKSArIFZpcnR1YWxTaXplcy50eE91dHB1dEFtb3VudFNpemU7XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgU2luZ2xlSW5wdXQgPSBPYmplY3QuZnJlZXplKHtcbiAgICBwMnNoOiBEaW1lbnNpb25zLnN1bSh7IG5QMnNoSW5wdXRzOiAxIH0pLFxuICAgIHAyc2hQMndzaDogRGltZW5zaW9ucy5zdW0oeyBuUDJzaFAyd3NoSW5wdXRzOiAxIH0pLFxuICAgIHAyd3NoOiBEaW1lbnNpb25zLnN1bSh7IG5QMndzaElucHV0czogMSB9KSxcbiAgICBwMnRyS2V5cGF0aDogRGltZW5zaW9ucy5zdW0oeyBuUDJ0cktleXBhdGhJbnB1dHM6IDEgfSksXG4gICAgcDJ0clNjcmlwdFBhdGhMZXZlbDE6IERpbWVuc2lvbnMuc3VtKHsgblAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRzOiAxIH0pLFxuICAgIHAydHJTY3JpcHRQYXRoTGV2ZWwyOiBEaW1lbnNpb25zLnN1bSh7IG5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0czogMSB9KSxcbiAgICBwMnNoUDJwazogRGltZW5zaW9ucy5zdW0oeyBuUDJzaFAycGtJbnB1dHM6IDEgfSksXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuXG4gICAqL1xuICBzdGF0aWMgZnJvbVNjcmlwdFR5cGUoXG4gICAgc2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUgfCB1dHhvbGliLmJpdGdvLlBhcnNlZFNjcmlwdFR5cGUyT2YzIHwgJ3AycGtoJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHNjcmlwdFBhdGhMZXZlbD86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKTogRGltZW5zaW9ucyB7XG4gICAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgICBjYXNlICdwMnNoJzpcbiAgICAgIGNhc2UgJ3Ayc2hQMndzaCc6XG4gICAgICBjYXNlICdwMndzaCc6XG4gICAgICBjYXNlICdwMnNoUDJwayc6XG4gICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0W3NjcmlwdFR5cGVdO1xuICAgICAgY2FzZSAncDJ0cic6XG4gICAgICBjYXNlICd0YXByb290U2NyaXB0UGF0aFNwZW5kJzpcbiAgICAgICAgc3dpdGNoIChwYXJhbXMuc2NyaXB0UGF0aExldmVsKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcmV0dXJuIERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0clNjcmlwdFBhdGhMZXZlbDE7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0clNjcmlwdFBhdGhMZXZlbDI7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBzY3JpcHQgcGF0aCBsZXZlbGApO1xuICAgICAgICB9XG4gICAgICBjYXNlICdwMnRyTXVzaWcyJzpcbiAgICAgICAgc3dpdGNoIChwYXJhbXMuc2NyaXB0UGF0aExldmVsKSB7XG4gICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyS2V5cGF0aDtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyU2NyaXB0UGF0aExldmVsMTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdCBwYXRoIGxldmVsYCk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnOlxuICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyS2V5cGF0aDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBzY3JpcHRUeXBlICR7c2NyaXB0VHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyU0ggPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAyc2g7XG4gIHN0YXRpYyByZWFkb25seSBBU1NVTUVfUDJTSF9QMldTSCA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJzaFAyd3NoO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyV1NIID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMndzaDtcbiAgc3RhdGljIHJlYWRvbmx5IEFTU1VNRV9QMlRSX0tFWVBBVEggPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJLZXlwYXRoO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyVFJfU0NSSVBUUEFUSF9MRVZFTDEgPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJTY3JpcHRQYXRoTGV2ZWwxO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyVFJfU0NSSVBUUEFUSF9MRVZFTDIgPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJTY3JpcHRQYXRoTGV2ZWwyO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyU0hfUDJQS19JTlBVVCA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJzaFAycGs7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0QXNzdW1lZERpbWVuc2lvbihwYXJhbXM6IEZyb21JbnB1dFBhcmFtcyA9IHt9LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgeyBhc3N1bWVVbnNpZ25lZCB9ID0gcGFyYW1zO1xuICAgIGlmICghYXNzdW1lVW5zaWduZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaWxsZWdhbCBpbnB1dCAke2luZGV4fTogZW1wdHkgc2NyaXB0IGFuZCBhc3N1bWVVbnNpZ25lZCBub3Qgc2V0YCk7XG4gICAgfVxuICAgIHJldHVybiBhc3N1bWVVbnNpZ25lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaW5wdXQgLSB0aGUgdHJhbnNhY3Rpb24gaW5wdXQgdG8gY291bnRcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiAgICAgICAgW3BhcmFtLmFzc3VtZVVuc2lnbmVkXSAtIGRlZmF1bHQgdHlwZSBmb3IgdW5zaWduZWQgaW5wdXRcbiAgICovXG4gIHN0YXRpYyBmcm9tSW5wdXQoaW5wdXQ6IHV0eG9saWIuVHhJbnB1dCwgcGFyYW1zOiBGcm9tSW5wdXRQYXJhbXMgPSB7fSk6IERpbWVuc2lvbnMge1xuICAgIGlmIChpbnB1dC5zY3JpcHQ/Lmxlbmd0aCB8fCBpbnB1dC53aXRuZXNzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHV0eG9saWIuYml0Z28ucGFyc2VTaWduYXR1cmVTY3JpcHQoaW5wdXQpO1xuICAgICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVNjcmlwdFR5cGUocGFyc2VkLnNjcmlwdFR5cGUsIHBhcnNlZCBhcyB7IHNjcmlwdFBhdGhMZXZlbD86IG51bWJlciB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gRGltZW5zaW9ucy5nZXRBc3N1bWVkRGltZW5zaW9uKHBhcmFtcywgaW5wdXQuaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEaW1lbnNpb25zIGZyb20gcHNidCBpbnB1dFxuICAgKiBAcGFyYW0gaW5wdXQgLSBwc2J0IGlucHV0XG4gICAqL1xuICBzdGF0aWMgZnJvbVBzYnRJbnB1dChpbnB1dDogYml0Z28uUHNidElucHV0VHlwZSk6IERpbWVuc2lvbnMge1xuICAgIGNvbnN0IHBhcnNlZCA9IGJpdGdvLnBhcnNlUHNidElucHV0KGlucHV0KTtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tU2NyaXB0VHlwZShwYXJzZWQuc2NyaXB0VHlwZSwgcGFyc2VkIGFzIHsgc2NyaXB0UGF0aExldmVsPzogbnVtYmVyIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpbnB1dHMgLSBBcnJheSBvZiBpbnB1dHNcbiAgICogQHBhcmFtIHBhcmFtcyAtIEBzZWUgRGltZW5zaW9ucy5mcm9tSW5wdXQoKVxuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSBzdW0gb2YgdGhlIGRpbWVuc2lvbnMgZm9yIGVhY2ggaW5wdXQgKEBzZWUgRGltZW5zaW9ucy5mcm9tSW5wdXQoKSlcbiAgICovXG4gIHN0YXRpYyBmcm9tSW5wdXRzKGlucHV0czogdXR4b2xpYi5UeElucHV0W10sIHBhcmFtcz86IEZyb21JbnB1dFBhcmFtcyk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnB1dHMgbXVzdCBiZSBhcnJheWApO1xuICAgIH1cbiAgICByZXR1cm4gRGltZW5zaW9ucy5zdW0oLi4uaW5wdXRzLm1hcCgoaSkgPT4gRGltZW5zaW9ucy5mcm9tSW5wdXQoaSwgcGFyYW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEaW1lbnNpb25zIGZyb20gbXVsdGlwbGUgcHNidCBpbnB1dHNcbiAgICogQHBhcmFtIGlucHV0cyBwc2J0IGlucHV0IGFycmF5XG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IHN1bSBvZiB0aGUgZGltZW5zaW9ucyBmb3IgZWFjaCBpbnB1dCAoQHNlZSBEaW1lbnNpb25zLmZyb21Qc2J0SW5wdXQoKSlcbiAgICovXG4gIHN0YXRpYyBmcm9tUHNidElucHV0cyhpbnB1dHM6IGJpdGdvLlBzYnRJbnB1dFR5cGVbXSk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnB1dHMgbXVzdCBiZSBhcnJheWApO1xuICAgIH1cbiAgICByZXR1cm4gRGltZW5zaW9ucy5zdW0oLi4uaW5wdXRzLm1hcCgoaW5wdXQsIF8pID0+IERpbWVuc2lvbnMuZnJvbVBzYnRJbnB1dChpbnB1dCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc2NyaXB0TGVuZ3RoIHtudW1iZXJ9IC0gc2l6ZSBvZiB0aGUgb3V0cHV0IHNjcmlwdCBpbiBieXRlc1xuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSAtIERpbWVuc2lvbnMgb2YgdGhlIG91dHB1dFxuICAgKi9cbiAgc3RhdGljIGZyb21PdXRwdXRTY3JpcHRMZW5ndGgoc2NyaXB0TGVuZ3RoOiBudW1iZXIpOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5zdW0oe1xuICAgICAgb3V0cHV0czoge1xuICAgICAgICBjb3VudDogMSxcbiAgICAgICAgc2l6ZTogRGltZW5zaW9ucy5nZXRWU2l6ZUZvck91dHB1dFdpdGhTY3JpcHRMZW5ndGgoc2NyaXB0TGVuZ3RoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG91dHB1dCAtIGEgdHggb3V0cHV0XG4gICAqIEByZXR1cm4gRGltZW5zaW9ucyAtIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBnaXZlbiBvdXRwdXRcbiAgICovXG4gIHN0YXRpYyBmcm9tT3V0cHV0KHsgc2NyaXB0IH06IHsgc2NyaXB0OiBCdWZmZXIgfSk6IERpbWVuc2lvbnMge1xuICAgIGlmICghc2NyaXB0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIG91dHB1dCBzY3JpcHQgdG8gYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzY3JpcHQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBzY3JpcHQgdG8gYmUgYnVmZmVyLCBnb3QgJyArIHR5cGVvZiBzY3JpcHQpO1xuICAgIH1cbiAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKHNjcmlwdC5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvdXRwdXRzIC0gQXJyYXkgb2Ygb3V0cHV0c1xuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSBzdW0gb2YgdGhlIGRpbWVuc2lvbnMgZm9yIGVhY2ggb3V0cHV0IChAc2VlIERpbWVuc2lvbnMuZnJvbU91dHB1dCgpKVxuICAgKi9cbiAgc3RhdGljIGZyb21PdXRwdXRzKG91dHB1dHM6IHsgc2NyaXB0OiBCdWZmZXIgfVtdKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG91dHB1dHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBvdXRwdXRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLm91dHB1dHMubWFwKERpbWVuc2lvbnMuZnJvbU91dHB1dCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRpbWVuc2lvbnMgb2YgYW4gb3V0cHV0IHRoYXQgd2lsbCBiZSBjcmVhdGVkIG9uIGEgc3BlY2lmaWMgY2hhaW4uXG4gICAqIEN1cnJlbnRseSwgdGhpcyBzaW1wbHkgYWRkcyBhIGRlZmF1bHQgb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0gY2hhaW4gLSBDaGFpbiBjb2RlIGFzIGRlZmluZWQgYnkgdXR4b2xpYi5iaXRnb1xuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSAtIERpbWVuc2lvbnMgZm9yIGEgc2luZ2xlIG91dHB1dCBvbiB0aGUgZ2l2ZW4gY2hhaW4uXG4gICAqL1xuICBzdGF0aWMgZnJvbU91dHB1dE9uQ2hhaW4oY2hhaW46IENoYWluQ29kZSk6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21PdXRwdXRTY3JpcHRMZW5ndGgoRGltZW5zaW9ucy5nZXRPdXRwdXRTY3JpcHRMZW5ndGhGb3JDaGFpbihjaGFpbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBkaW1lbnNpb25zIG9mIGFuIHVuc3BlbnQgYWNjb3JkaW5nIHRvIGBjaGFpbmAgcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBjaGFpbiAtIENoYWluIGNvZGUgYXMgZGVmaW5lZCBieSB1dHhvLmNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBIaW50IGZvciB1bnNwZW50cyB3aXRoIHZhcmlhYmxlIGlucHV0IHNpemVzIChwMnRyKS5cbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gb2YgdGhlIHVuc3BlbnRcbiAgICogQHRocm93cyBpZiB0aGUgY2hhaW4gY29kZSBpcyBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkXG4gICAqL1xuICBzdGF0aWMgZnJvbVVuc3BlbnQoeyBjaGFpbiB9OiB7IGNoYWluOiBudW1iZXIgfSwgcGFyYW1zOiBGcm9tVW5zcGVudFBhcmFtcyA9IGRlZmF1bHRVbnNwZW50UGFyYW1zKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFpc0NoYWluQ29kZShjaGFpbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgY2hhaW4gY29kZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pO1xuXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbVNjcmlwdFR5cGUoXG4gICAgICBzY3JpcHRUeXBlLFxuICAgICAgc2NyaXB0VHlwZSA9PT0gJ3AydHInID8gcGFyYW1zLnAydHIgOiBzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicgPyBwYXJhbXMucDJ0ck11c2lnMiA6IHt9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudHNcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gc3VtIG9mIHRoZSBkaW1lbnNpb25zIGZvciBlYWNoIHVuc3BlbnQgKEBzZWUgRGltZW5zaW9ucy5mcm9tVW5zcGVudCgpKVxuICAgKi9cbiAgc3RhdGljIGZyb21VbnNwZW50cyh1bnNwZW50czogeyBjaGFpbjogQ2hhaW5Db2RlIH1bXSk6IERpbWVuc2lvbnMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh1bnNwZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3BlbnRzIG11c3QgYmUgYXJyYXlgKTtcbiAgICB9XG4gICAgLy8gQ29udmVydCB0aGUgaW5kaXZpZHVhbCB1bnNwZW50cyBpbnRvIGRpbWVuc2lvbnMgYW5kIHN1bSB0aGVtIHVwXG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKC4uLnVuc3BlbnRzLm1hcCgodSkgPT4gRGltZW5zaW9ucy5mcm9tVW5zcGVudCh1KSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbiAtIGJpdGNvaW4tbGlrZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gW3BhcmFtLmFzc3VtZVVuc2lnbmVkXSAtIGRlZmF1bHQgdHlwZSBmb3IgdW5zaWduZWQgaW5wdXRzXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gICAqL1xuICBzdGF0aWMgZnJvbVRyYW5zYWN0aW9uKFxuICAgIHtcbiAgICAgIGlucyxcbiAgICAgIG91dHMsXG4gICAgfToge1xuICAgICAgaW5zOiB1dHhvbGliLlR4SW5wdXRbXTtcbiAgICAgIG91dHM6IHV0eG9saWIuVHhPdXRwdXRbXTtcbiAgICB9LFxuICAgIHBhcmFtcz86IEZyb21JbnB1dFBhcmFtc1xuICApOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tSW5wdXRzKGlucywgcGFyYW1zKS5wbHVzKERpbWVuc2lvbnMuZnJvbU91dHB1dHMob3V0cykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEaW1lbnNpb25zIGZyb20gcHNidCBpbnB1dHMgYW5kIG91dHB1dHNcbiAgICogQHBhcmFtIHBzYnRcbiAgICogQHJldHVybiB7RGltZW5zaW9uc31cbiAgICovXG4gIHN0YXRpYyBmcm9tUHNidChwc2J0OiBiaXRnby5VdHhvUHNidCk6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21Qc2J0SW5wdXRzKHBzYnQuZGF0YS5pbnB1dHMpLnBsdXMoRGltZW5zaW9ucy5mcm9tT3V0cHV0cyhwc2J0LmdldFVuc2lnbmVkVHgoKS5vdXRzKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGRpbWVuc2lvbnMgKGNhbiBiZSBwYXJ0aWFsbHkgZGVmaW5lZClcbiAgICogQHJldHVybiBuZXcgZGltZW5zaW9ucyB3aXRoIGFyZ3VtZW50IGFkZGVkXG4gICAqL1xuICBwbHVzKGRpbWVuc2lvbnM6IFBhcnRpYWw8RGltZW5zaW9ucz4pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAodHlwZW9mIGRpbWVuc2lvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBleHBlY3RlZCBhcmd1bWVudCB0byBiZSBvYmplY3RgKTtcbiAgICB9XG5cbiAgICBpZiAoIShkaW1lbnNpb25zIGluc3RhbmNlb2YgRGltZW5zaW9ucykpIHtcbiAgICAgIGRpbWVuc2lvbnMgPSBuZXcgRGltZW5zaW9ucyhkaW1lbnNpb25zKTtcbiAgICB9XG5cbiAgICAvLyBDYXRjaCBpbnN0YW5jZXMgd2hlcmUgd2UgdHJ5IHRvIGluaXRpYWxpemUgRGltZW5zaW9ucyBmcm9tIHBhcnRpYWwgZGF0YSB1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnNcbiAgICAvLyB1c2luZyBvbmx5IFwibk91dHB1dHNcIi5cbiAgICBpZiAoJ25PdXRwdXRzJyBpbiBkaW1lbnNpb25zKSB7XG4gICAgICBpZiAoISgnb3V0cHV0cycgaW4gZGltZW5zaW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXByZWNhdGVkIHBhcnRpYWwgYWRkaXRpb246IGFyZ3VtZW50IGhhcyBrZXkgXCJuT3V0cHV0c1wiIGJ1dCBubyBcIm91dHB1dHNcIicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG91dHB1dHMsIG5PdXRwdXRzIH0gPSBkaW1lbnNpb25zIGFzIERpbWVuc2lvbnM7XG5cbiAgICAgIGlmIChvdXRwdXRzLmNvdW50ICE9PSBuT3V0cHV0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQgcGFydGlhbCBhZGRpdGlvbjogaW5jb25zaXN0ZW50IHZhbHVlcyBmb3IgXCJuT3V0cHV0c1wiIGFuZCBcIm91dHB1dHMuY291bnRcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBEaW1lbnNpb25zKHRoaXMsIChrZXksIHYpID0+IHtcbiAgICAgIGNvbnN0IHcgPSBkaW1lbnNpb25zW2tleV0gPz8gRGltZW5zaW9ucy5aRVJPW2tleV07XG4gICAgICBpZiAoa2V5ID09PSAnb3V0cHV0cycpIHtcbiAgICAgICAgY29uc3Qgdk91dHB1dHMgPSB2IGFzIE91dHB1dERpbWVuc2lvbnM7XG4gICAgICAgIGNvbnN0IHdPdXRwdXRzID0gdyBhcyBPdXRwdXREaW1lbnNpb25zO1xuICAgICAgICByZXR1cm4gbmV3IE91dHB1dERpbWVuc2lvbnMoe1xuICAgICAgICAgIGNvdW50OiB2T3V0cHV0cy5jb3VudCArIHdPdXRwdXRzLmNvdW50LFxuICAgICAgICAgIHNpemU6IHZPdXRwdXRzLnNpemUgKyB3T3V0cHV0cy5zaXplLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAodiBhcyBudW1iZXIpICsgKHcgYXMgbnVtYmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBseSBkaW1lbnNpb25zIGJ5IGEgZ2l2ZW4gZmFjdG9yXG4gICAqIEBwYXJhbSBmYWN0b3IgLSBQb3NpdGl2ZSBpbnRlZ2VyXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gICAqL1xuICB0aW1lcyhmYWN0b3I6IG51bWJlcik6IERpbWVuc2lvbnMge1xuICAgIGlmICghUG9zaXRpdmVJbnRlZ2VyLmlzKGZhY3RvcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGV4cGVjdGVkIGZhY3RvciB0byBiZSBwb3NpdGl2ZSBpbnRlZ2VyYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcERpbWVuc2lvbnModGhpcywgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICdvdXRwdXRzJykge1xuICAgICAgICBjb25zdCB2T3V0cHV0cyA9IHZhbHVlIGFzIE91dHB1dERpbWVuc2lvbnM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY291bnQ6IHZPdXRwdXRzLmNvdW50ICogZmFjdG9yLFxuICAgICAgICAgIHNpemU6IHZPdXRwdXRzLnNpemUgKiBmYWN0b3IsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlIGFzIG51bWJlcikgKiBmYWN0b3I7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBOdW1iZXIgb2YgdG90YWwgaW5wdXRzIChwMnNoLCBwMnNoUDJ3c2ggYW5kIHAyd3NoKVxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGRpbWVuc2lvbi5uSW5wdXRzYCBpbnN0ZWFkXG4gICAqL1xuICBnZXROSW5wdXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubklucHV0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZmYgZGltZW5zaW9ucyBoYXZlIG9uZSBvciBtb3JlIChwMnNoKXAyd3NoIGlucHV0c1xuICAgKi9cbiAgaXNTZWd3aXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMublAyd3NoSW5wdXRzICtcbiAgICAgICAgdGhpcy5uUDJzaFAyd3NoSW5wdXRzICtcbiAgICAgICAgdGhpcy5uUDJ0cktleXBhdGhJbnB1dHMgK1xuICAgICAgICB0aGlzLm5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyArXG4gICAgICAgIHRoaXMublAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzID5cbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gb3ZlcmhlYWQgdnNpemUsIGJhc2VkIG9uIHJlc3VsdCBpc1NlZ3dpdCgpLlxuICAgKi9cbiAgZ2V0T3ZlcmhlYWRWU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlzU2Vnd2l0KCkgPyBWaXJ0dWFsU2l6ZXMudHhTZWdPdmVyaGVhZFZTaXplIDogVmlydHVhbFNpemVzLnR4T3ZlcmhlYWRTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHZzaXplIG9mIGlucHV0cywgd2l0aG91dCB0cmFuc2FjdGlvbiBvdmVyaGVhZFxuICAgKi9cbiAgZ2V0SW5wdXRzVlNpemUoKTogbnVtYmVyIHtcbiAgICBjb25zdCB7XG4gICAgICB0eFAyc2hJbnB1dFNpemUsXG4gICAgICB0eFAyc2hQMndzaElucHV0U2l6ZSxcbiAgICAgIHR4UDJ3c2hJbnB1dFNpemUsXG4gICAgICB0eFAydHJLZXlwYXRoSW5wdXRTaXplLFxuICAgICAgdHhQMnRyU2NyaXB0UGF0aExldmVsMUlucHV0U2l6ZSxcbiAgICAgIHR4UDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dFNpemUsXG4gICAgICB0eFAyc2hQMnBrSW5wdXRTaXplLFxuICAgIH0gPSBWaXJ0dWFsU2l6ZXM7XG5cbiAgICBjb25zdCB7XG4gICAgICBuUDJzaElucHV0cyxcbiAgICAgIG5QMnNoUDJ3c2hJbnB1dHMsXG4gICAgICBuUDJ3c2hJbnB1dHMsXG4gICAgICBuUDJ0cktleXBhdGhJbnB1dHMsXG4gICAgICBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHMsXG4gICAgICBuUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHMsXG4gICAgICBuUDJzaFAycGtJbnB1dHMsXG4gICAgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBzaXplID1cbiAgICAgIG5QMnNoSW5wdXRzICogdHhQMnNoSW5wdXRTaXplICtcbiAgICAgIG5QMnNoUDJ3c2hJbnB1dHMgKiB0eFAyc2hQMndzaElucHV0U2l6ZSArXG4gICAgICBuUDJ3c2hJbnB1dHMgKiB0eFAyd3NoSW5wdXRTaXplICtcbiAgICAgIG5QMnRyS2V5cGF0aElucHV0cyAqIHR4UDJ0cktleXBhdGhJbnB1dFNpemUgK1xuICAgICAgblAyc2hQMnBrSW5wdXRzICogdHhQMnNoUDJwa0lucHV0U2l6ZSArXG4gICAgICBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHMgKiB0eFAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRTaXplICtcbiAgICAgIG5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0cyAqIHR4UDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dFNpemU7XG4gICAgaWYgKE51bWJlci5pc05hTihzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNpemVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSByZXR1cm4gdnNpemUgb2Ygb3V0cHV0cywgd2l0aG91dCBvdmVyaGVhZFxuICAgKi9cbiAgZ2V0T3V0cHV0c1ZTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub3V0cHV0cy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEVzdGltYXRlcyB0aGUgdmlydHVhbCBzaXplICgxLzQgd2VpZ2h0KSBvZiBhIHNpZ25lZCB0cmFuc2FjdGlvbiBhcyBzdW0gb2ZcbiAgICogb3ZlcmhlYWQgdnNpemUsIGlucHV0IHZzaXplIGFuZCBvdXRwdXQgdnNpemUuXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBlc3RpbWF0ZWQgdnNpemUgb2YgdGhlIHRyYW5zYWN0aW9uIGRpbWVuc2lvbnMuXG4gICAqL1xuICBnZXRWU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldE92ZXJoZWFkVlNpemUoKSArIHRoaXMuZ2V0SW5wdXRzVlNpemUoKSArIHRoaXMuZ2V0T3V0cHV0c1ZTaXplKCk7XG4gIH1cbn1cbiJdfQ==
500
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaW1lbnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUFnRDtBQUNoRCxtREFBNkM7QUFDN0MsTUFBTSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLGdCQUFLLENBQUM7QUFHbEQsK0NBQTRDO0FBQzVDLG1DQUEwQztBQUUxQyxpREFBOEM7QUFDckMsNkZBREEsMkJBQVksT0FDQTtBQUVyQjs7R0FFRztBQUNILFNBQVMsYUFBYSxDQUNwQixDQUFzQixFQUN0QixDQUFnRjtJQUVoRixPQUFPLElBQUksVUFBVSxDQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0RyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFVM0IsWUFBWSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBdUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDM0UsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FB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UyxBQUFuQyxDQUFvQztBQUNyRCx1QkFBWSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxBQUEvQixDQUFnQztBQUM1Qyw4QkFBbUIsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQUFBckMsQ0FBc0M7QUFDekQsd0NBQTZCLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQUFBOUMsQ0FBK0M7QUFDNUUsd0NBQTZCLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQUFBOUMsQ0FBK0M7QUFDNUUsaUNBQXNCLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEFBQWxDLENBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXRnbyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmNvbnN0IHsgaXNDaGFpbkNvZGUsIHNjcmlwdFR5cGVGb3JDaGFpbiB9ID0gYml0Z287XG50eXBlIENoYWluQ29kZSA9IGJpdGdvLkNoYWluQ29kZTtcblxuaW1wb3J0IHsgY29tcGFjdFNpemUgfSBmcm9tICcuL3NjcmlwdFNpemVzJztcbmltcG9ydCB7IFBvc2l0aXZlSW50ZWdlciB9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgeyBWaXJ0dWFsU2l6ZXMgfSBmcm9tICcuL3ZpcnR1YWxTaXplcyc7XG5leHBvcnQgeyBWaXJ0dWFsU2l6ZXMgfTtcblxuLyoqXG4gKiBBcHBseSBgZmAgdG8gYWxsIHByb3BlcnRpZXMgb2YgYGRgXG4gKi9cbmZ1bmN0aW9uIG1hcERpbWVuc2lvbnMoXG4gIGQ6IFBhcnRpYWw8RGltZW5zaW9ucz4sXG4gIGY6IDxUIGV4dGVuZHMga2V5b2YgRGltZW5zaW9ucz4oa2V5OiBULCB2OiBEaW1lbnNpb25zW1RdIHwgdW5kZWZpbmVkKSA9PiB1bmtub3duXG4pOiBEaW1lbnNpb25zIHtcbiAgcmV0dXJuIG5ldyBEaW1lbnNpb25zKFxuICAgIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhkKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW2tleSwgZihrZXkgYXMga2V5b2YgRGltZW5zaW9ucywgdmFsdWUpXSkpXG4gICk7XG59XG5cbi8qKlxuICogQWdncmVnYXRlIGNvdW50IGFuZCBzaXplIG9mIHRyYW5zYWN0aW9uIG91dHB1dHNcbiAqL1xuZXhwb3J0IGNsYXNzIE91dHB1dERpbWVuc2lvbnMge1xuICAvKipcbiAgICogTnVtYmVyIG9mIG91dHB1dHNcbiAgICovXG4gIGNvdW50OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgdlNpemVcbiAgICovXG4gIHNpemU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih7IGNvdW50ID0gMCwgc2l6ZSA9IDAgfTogT3V0cHV0RGltZW5zaW9ucyA9IHsgY291bnQ6IDAsIHNpemU6IDAgfSkge1xuICAgIGlmIChjb3VudCA9PT0gMCB8fCBzaXplID09PSAwKSB7XG4gICAgICBpZiAoY291bnQgIT09IDAgfHwgc2l6ZSAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdW50IGFuZCBzaXplIG11c3QgYm90aCBiZSB6ZXJvIGlmIG9uZSBpcyB6ZXJvYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb3VudCA9IGNvdW50O1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG5cbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG59XG5cbmludGVyZmFjZSBGcm9tSW5wdXRQYXJhbXMge1xuICAvLyBJbiBjYXNlcyB3aGVyZSB0aGUgaW5wdXQgdHlwZSBpcyBhbWJpZ3VvdXMsIHdlIG11c3QgcHJvdmlkZSBhIGhpbnQgYWJvdXQgc3BlbmQgc2NyaXB0IHR5cGUuXG4gIGFzc3VtZVVuc2lnbmVkPzogRGltZW5zaW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGcm9tVW5zcGVudFBhcmFtcyB7XG4gIHAydHI6IHtcbiAgICBzY3JpcHRQYXRoTGV2ZWw/OiBudW1iZXI7XG4gIH07XG4gIHAydHJNdXNpZzI6IHtcbiAgICBzY3JpcHRQYXRoTGV2ZWw/OiBudW1iZXI7XG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRVbnNwZW50UGFyYW1zOiBGcm9tVW5zcGVudFBhcmFtcyA9IHtcbiAgcDJ0cjoge1xuICAgIC8vIERlZmF1bHQgdG8gcmVjb3Zlcnkgc2NyaXB0IHBhdGhzLCB0byBtYWtlIGl0IGVhc2llciBmb3IgcmVjb3ZlcnkgY2FzZSBjYWxsZXJzIChXUlcgZXRjKS5cbiAgICAvLyBXUCBjYW4gZXhwbGljaXRseSBwYXNzIHNjcmlwdFBhdGhMZXZlbDogMSB0byB1c2UgaGFwcHkgcGF0aC5cbiAgICBzY3JpcHRQYXRoTGV2ZWw6IDIsXG4gIH0sXG4gIHAydHJNdXNpZzI6IHtcbiAgICAvLyBEZWZhdWx0IHRvIHNjcmlwdCBwYXRoIHNwZW5kLCB0byBtYWtlIGl0IGVhc2llciBmb3IgcmVjb3ZlcnkgY2FzZSBjYWxsZXJzIChXUlcgZXRjKS5cbiAgICAvLyBXUCBjYW4gZXhwbGljaXRseSBwYXNzIHNjcmlwdFBhdGhMZXZlbDogdW5kZWZpbmVkIHRvIHVzZSBrZXkgcGF0aC5cbiAgICBzY3JpcHRQYXRoTGV2ZWw6IDEsXG4gIH0sXG59O1xuXG4vKipcbiAqIERpbWVuc2lvbnMgb2YgYSBCaXRHbyB3YWxsZXQgdHJhbnNhY3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgRGltZW5zaW9ucyB7XG4gIC8qKiBJbnB1dCBjb3VudHMgZm9yIEJpdEdvIHdhbGxldCBtdWx0aS1zaWduYXR1cmUgaW5wdXRzICovXG4gIHB1YmxpYyByZWFkb25seSBuUDJzaElucHV0czogbnVtYmVyID0gMDtcbiAgcHVibGljIHJlYWRvbmx5IG5QMnNoUDJ3c2hJbnB1dHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBuUDJ3c2hJbnB1dHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBuUDJ0cktleXBhdGhJbnB1dHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyByZWFkb25seSBuUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHM6IG51bWJlciA9IDA7XG5cbiAgLyogSW5wdXQgY291bnQgZm9yIHNpbmdsZS1zaWduYXR1cmUgaW5wdXRzIChSZXBsYXkgUHJvdGVjdGlvbiBpbnB1dHMpICovXG4gIHB1YmxpYyByZWFkb25seSBuUDJzaFAycGtJbnB1dHM6IG51bWJlciA9IDA7XG5cbiAgcHVibGljIHJlYWRvbmx5IG91dHB1dHM6IE91dHB1dERpbWVuc2lvbnMgPSBuZXcgT3V0cHV0RGltZW5zaW9ucygpO1xuXG4gIGNvbnN0cnVjdG9yKGQ6IFBhcnRpYWw8RGltZW5zaW9ucz4gPSB7fSkge1xuICAgIE9iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gdGhpcy5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKSk7XG5cbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcm9wZXJ0eShrOiBzdHJpbmcsIHY6IHVua25vd24pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGspIHtcbiAgICAgIGNhc2UgJ25QMnNoSW5wdXRzJzpcbiAgICAgIGNhc2UgJ25QMnNoUDJ3c2hJbnB1dHMnOlxuICAgICAgY2FzZSAnblAyd3NoSW5wdXRzJzpcbiAgICAgIGNhc2UgJ25QMnRyS2V5cGF0aElucHV0cyc6XG4gICAgICBjYXNlICduUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHMnOlxuICAgICAgY2FzZSAnblAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzJzpcbiAgICAgIGNhc2UgJ25QMnNoUDJwa0lucHV0cyc6XG4gICAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3BlcnR5ICR7a30gbXVzdCBiZSBudW1iZXJgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHYpIHx8IHYgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9wZXJ0eSAke2t9IG11c3QgYmUgemVybyBvciBwb3NpdGl2ZSBpbnRlZ2VyYCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvdXRwdXRzJzpcbiAgICAgICAgaWYgKCEodiBpbnN0YW5jZW9mIE91dHB1dERpbWVuc2lvbnMpKSB7XG4gICAgICAgICAgdiA9IG5ldyBPdXRwdXREaW1lbnNpb25zKHYgYXMgT3V0cHV0RGltZW5zaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gcHJvcGVydHkgJHtrfWApO1xuICAgIH1cblxuICAgICh0aGlzIGFzIGFueSlba10gPSB2O1xuICB9XG5cbiAgc3RhdGljIHJlYWRvbmx5IFpFUk8gPSBPYmplY3QuZnJlZXplKG5ldyBEaW1lbnNpb25zKCkpO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgWkVST1xuICAgKiBAcmV0dXJuIERpbWVuc2lvbnMgZm9yIGFuIGVtcHR5IHRyYW5zYWN0aW9uXG4gICAqL1xuICBzdGF0aWMgemVybygpOiBSZWFkb25seTxEaW1lbnNpb25zPiB7XG4gICAgcmV0dXJuIHRoaXMuWkVSTztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc2l6ZVxuICAgKiBAcmV0dXJuIERpbWVuc2lvbnMgZm9yIGEgc2luZ2xlIG91dHB1dCB3aXRoIGdpdmVuIHNpemVcbiAgICovXG4gIHN0YXRpYyBzaW5nbGVPdXRwdXQoc2l6ZTogbnVtYmVyKTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuc3VtKHsgb3V0cHV0czogeyBjb3VudDogMSwgc2l6ZSB9IH0pO1xuICB9XG5cbiAgc3RhdGljIHJlYWRvbmx5IFNpbmdsZU91dHB1dCA9IE9iamVjdC5mcmVlemUoe1xuICAgIHAyc2g6IERpbWVuc2lvbnMuc2luZ2xlT3V0cHV0KFZpcnR1YWxTaXplcy50eFAyc2hPdXRwdXRTaXplKSxcbiAgICBwMnNoUDJ3c2g6IERpbWVuc2lvbnMuc2luZ2xlT3V0cHV0KFZpcnR1YWxTaXplcy50eFAyc2hQMndzaE91dHB1dFNpemUpLFxuICAgIHAyd3NoOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMndzaE91dHB1dFNpemUpLFxuICAgIHAydHI6IERpbWVuc2lvbnMuc2luZ2xlT3V0cHV0KFZpcnR1YWxTaXplcy50eFAydHJPdXRwdXRTaXplKSxcblxuICAgIHAycGtoOiBEaW1lbnNpb25zLnNpbmdsZU91dHB1dChWaXJ0dWFsU2l6ZXMudHhQMnBraE91dHB1dFNpemUpLFxuICAgIHAyd3BraDogRGltZW5zaW9ucy5zaW5nbGVPdXRwdXQoVmlydHVhbFNpemVzLnR4UDJ3cGtoT3V0cHV0U2l6ZSksXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIE51bWJlciBvZiB0b3RhbCBpbnB1dHMgKHAyc2ggKyBwMnNoUDJ3c2ggKyBwMndzaCArIHAydHIpXG4gICAqL1xuICBnZXQgbklucHV0cygpOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm5QMnNoSW5wdXRzICtcbiAgICAgIHRoaXMublAyc2hQMndzaElucHV0cyArXG4gICAgICB0aGlzLm5QMndzaElucHV0cyArXG4gICAgICB0aGlzLm5QMnRyS2V5cGF0aElucHV0cyArXG4gICAgICB0aGlzLm5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyArXG4gICAgICB0aGlzLm5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0cyArXG4gICAgICB0aGlzLm5QMnNoUDJwa0lucHV0c1xuICAgICk7XG4gIH1cblxuICBzZXQgbklucHV0cyhfOiBudW1iZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlYWQtb25seSBwcm9wZXJ0eSBuSW5wdXRzJyk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBOdW1iZXIgb2YgdG90YWwgb3V0cHV0c1xuICAgKi9cbiAgZ2V0IG5PdXRwdXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub3V0cHV0cy5jb3VudDtcbiAgfVxuXG4gIHNldCBuT3V0cHV0cyhfOiBudW1iZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlYWQtb25seSBwcm9wZXJ0eSBuT3V0cHV0c2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhcmdzIC0gRGltZW5zaW9ucyAoY2FuIGJlIHBhcnRpYWxseSBkZWZpbmVkKVxuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSBzdW0gb2YgYXJndW1lbnRzXG4gICAqL1xuICBzdGF0aWMgc3VtKC4uLmFyZ3M6IFBhcnRpYWw8RGltZW5zaW9ucz5bXSk6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZSgoYTogRGltZW5zaW9ucywgYjogUGFydGlhbDxEaW1lbnNpb25zPikgPT4gYS5wbHVzKGIpLCBuZXcgRGltZW5zaW9ucygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gY2hhaW5cbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldE91dHB1dFNjcmlwdExlbmd0aEZvckNoYWluKGNoYWluOiBDaGFpbkNvZGUpOiBudW1iZXIge1xuICAgIHN3aXRjaCAoc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKSkge1xuICAgICAgY2FzZSAncDJ3c2gnOlxuICAgICAgY2FzZSAncDJ0cic6XG4gICAgICBjYXNlICdwMnRyTXVzaWcyJzpcbiAgICAgICAgcmV0dXJuIDM0O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDIzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc2NyaXB0TGVuZ3RoXG4gICAqIEByZXR1cm4ge051bWJlcn0gdlNpemUgb2YgYW4gb3V0cHV0IHdpdGggc2NyaXB0IGxlbmd0aFxuICAgKi9cbiAgc3RhdGljIGdldFZTaXplRm9yT3V0cHV0V2l0aFNjcmlwdExlbmd0aChzY3JpcHRMZW5ndGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCFQb3NpdGl2ZUludGVnZXIuaXMoc2NyaXB0TGVuZ3RoKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlciBmb3Igc2NyaXB0TGVuZ3RoLCBnb3QgJHtzY3JpcHRMZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiBzY3JpcHRMZW5ndGggKyBjb21wYWN0U2l6ZShzY3JpcHRMZW5ndGgpICsgVmlydHVhbFNpemVzLnR4T3V0cHV0QW1vdW50U2l6ZTtcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBTaW5nbGVJbnB1dCA9IE9iamVjdC5mcmVlemUoe1xuICAgIHAyc2g6IERpbWVuc2lvbnMuc3VtKHsgblAyc2hJbnB1dHM6IDEgfSksXG4gICAgcDJzaFAyd3NoOiBEaW1lbnNpb25zLnN1bSh7IG5QMnNoUDJ3c2hJbnB1dHM6IDEgfSksXG4gICAgcDJ3c2g6IERpbWVuc2lvbnMuc3VtKHsgblAyd3NoSW5wdXRzOiAxIH0pLFxuICAgIHAydHJLZXlwYXRoOiBEaW1lbnNpb25zLnN1bSh7IG5QMnRyS2V5cGF0aElucHV0czogMSB9KSxcbiAgICBwMnRyU2NyaXB0UGF0aExldmVsMTogRGltZW5zaW9ucy5zdW0oeyBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHM6IDEgfSksXG4gICAgcDJ0clNjcmlwdFBhdGhMZXZlbDI6IERpbWVuc2lvbnMuc3VtKHsgblAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzOiAxIH0pLFxuICAgIHAyc2hQMnBrOiBEaW1lbnNpb25zLnN1bSh7IG5QMnNoUDJwa0lucHV0czogMSB9KSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5cbiAgICovXG4gIHN0YXRpYyBmcm9tU2NyaXB0VHlwZShcbiAgICBzY3JpcHRUeXBlOiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZSB8IHV0eG9saWIuYml0Z28uUGFyc2VkU2NyaXB0VHlwZTJPZjMgfCAncDJwa2gnLFxuICAgIHBhcmFtczoge1xuICAgICAgc2NyaXB0UGF0aExldmVsPzogbnVtYmVyO1xuICAgIH0gPSB7fVxuICApOiBEaW1lbnNpb25zIHtcbiAgICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICAgIGNhc2UgJ3Ayc2gnOlxuICAgICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIGNhc2UgJ3Ayc2hQMnBrJzpcbiAgICAgICAgcmV0dXJuIERpbWVuc2lvbnMuU2luZ2xlSW5wdXRbc2NyaXB0VHlwZV07XG4gICAgICBjYXNlICdwMnRyJzpcbiAgICAgIGNhc2UgJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnOlxuICAgICAgICBzd2l0Y2ggKHBhcmFtcy5zY3JpcHRQYXRoTGV2ZWwpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyU2NyaXB0UGF0aExldmVsMTtcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnRyU2NyaXB0UGF0aExldmVsMjtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdCBwYXRoIGxldmVsYCk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3AydHJNdXNpZzInOlxuICAgICAgICBzd2l0Y2ggKHBhcmFtcy5zY3JpcHRQYXRoTGV2ZWwpIHtcbiAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJLZXlwYXRoO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJTY3JpcHRQYXRoTGV2ZWwxO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgc2NyaXB0IHBhdGggbGV2ZWxgKTtcbiAgICAgICAgfVxuICAgICAgY2FzZSAndGFwcm9vdEtleVBhdGhTcGVuZCc6XG4gICAgICAgIHJldHVybiBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAydHJLZXlwYXRoO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHNjcmlwdFR5cGUgJHtzY3JpcHRUeXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBBU1NVTUVfUDJTSCA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJzaDtcbiAgc3RhdGljIHJlYWRvbmx5IEFTU1VNRV9QMlNIX1AyV1NIID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnNoUDJ3c2g7XG4gIHN0YXRpYyByZWFkb25seSBBU1NVTUVfUDJXU0ggPSBEaW1lbnNpb25zLlNpbmdsZUlucHV0LnAyd3NoO1xuICBzdGF0aWMgcmVhZG9ubHkgQVNTVU1FX1AyVFJfS0VZUEFUSCA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0cktleXBhdGg7XG4gIHN0YXRpYyByZWFkb25seSBBU1NVTUVfUDJUUl9TQ1JJUFRQQVRIX0xFVkVMMSA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0clNjcmlwdFBhdGhMZXZlbDE7XG4gIHN0YXRpYyByZWFkb25seSBBU1NVTUVfUDJUUl9TQ1JJUFRQQVRIX0xFVkVMMiA9IERpbWVuc2lvbnMuU2luZ2xlSW5wdXQucDJ0clNjcmlwdFBhdGhMZXZlbDI7XG4gIHN0YXRpYyByZWFkb25seSBBU1NVTUVfUDJTSF9QMlBLX0lOUFVUID0gRGltZW5zaW9ucy5TaW5nbGVJbnB1dC5wMnNoUDJwaztcblxuICBwcml2YXRlIHN0YXRpYyBnZXRBc3N1bWVkRGltZW5zaW9uKHBhcmFtczogRnJvbUlucHV0UGFyYW1zID0ge30sIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB7IGFzc3VtZVVuc2lnbmVkIH0gPSBwYXJhbXM7XG4gICAgaWYgKCFhc3N1bWVVbnNpZ25lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbGxlZ2FsIGlucHV0ICR7aW5kZXh9OiBlbXB0eSBzY3JpcHQgYW5kIGFzc3VtZVVuc2lnbmVkIG5vdCBzZXRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFzc3VtZVVuc2lnbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpbnB1dCAtIHRoZSB0cmFuc2FjdGlvbiBpbnB1dCB0byBjb3VudFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqICAgICAgICBbcGFyYW0uYXNzdW1lVW5zaWduZWRdIC0gZGVmYXVsdCB0eXBlIGZvciB1bnNpZ25lZCBpbnB1dFxuICAgKi9cbiAgc3RhdGljIGZyb21JbnB1dChpbnB1dDogdXR4b2xpYi5UeElucHV0LCBwYXJhbXM6IEZyb21JbnB1dFBhcmFtcyA9IHt9KTogRGltZW5zaW9ucyB7XG4gICAgaWYgKGlucHV0LnNjcmlwdD8ubGVuZ3RoIHx8IGlucHV0LndpdG5lc3M/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gdXR4b2xpYi5iaXRnby5wYXJzZVNpZ25hdHVyZVNjcmlwdChpbnB1dCk7XG4gICAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tU2NyaXB0VHlwZShwYXJzZWQuc2NyaXB0VHlwZSwgcGFyc2VkIGFzIHsgc2NyaXB0UGF0aExldmVsPzogbnVtYmVyIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBEaW1lbnNpb25zLmdldEFzc3VtZWREaW1lbnNpb24ocGFyYW1zLCBpbnB1dC5pbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIERpbWVuc2lvbnMgZnJvbSBwc2J0IGlucHV0XG4gICAqIEBwYXJhbSBpbnB1dCAtIHBzYnQgaW5wdXRcbiAgICovXG4gIHN0YXRpYyBmcm9tUHNidElucHV0KGlucHV0OiBiaXRnby5Qc2J0SW5wdXRUeXBlKTogRGltZW5zaW9ucyB7XG4gICAgY29uc3QgcGFyc2VkID0gYml0Z28ucGFyc2VQc2J0SW5wdXQoaW5wdXQpO1xuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21TY3JpcHRUeXBlKHBhcnNlZC5zY3JpcHRUeXBlLCBwYXJzZWQgYXMgeyBzY3JpcHRQYXRoTGV2ZWw/OiBudW1iZXIgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGlucHV0cyAtIEFycmF5IG9mIGlucHV0c1xuICAgKiBAcGFyYW0gcGFyYW1zIC0gQHNlZSBEaW1lbnNpb25zLmZyb21JbnB1dCgpXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IHN1bSBvZiB0aGUgZGltZW5zaW9ucyBmb3IgZWFjaCBpbnB1dCAoQHNlZSBEaW1lbnNpb25zLmZyb21JbnB1dCgpKVxuICAgKi9cbiAgc3RhdGljIGZyb21JbnB1dHMoaW5wdXRzOiB1dHhvbGliLlR4SW5wdXRbXSwgcGFyYW1zPzogRnJvbUlucHV0UGFyYW1zKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0cykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0cyBtdXN0IGJlIGFycmF5YCk7XG4gICAgfVxuICAgIHJldHVybiBEaW1lbnNpb25zLnN1bSguLi5pbnB1dHMubWFwKChpKSA9PiBEaW1lbnNpb25zLmZyb21JbnB1dChpLCBwYXJhbXMpKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIERpbWVuc2lvbnMgZnJvbSBtdWx0aXBsZSBwc2J0IGlucHV0c1xuICAgKiBAcGFyYW0gaW5wdXRzIHBzYnQgaW5wdXQgYXJyYXlcbiAgICogQHJldHVybiB7RGltZW5zaW9uc30gc3VtIG9mIHRoZSBkaW1lbnNpb25zIGZvciBlYWNoIGlucHV0IChAc2VlIERpbWVuc2lvbnMuZnJvbVBzYnRJbnB1dCgpKVxuICAgKi9cbiAgc3RhdGljIGZyb21Qc2J0SW5wdXRzKGlucHV0czogYml0Z28uUHNidElucHV0VHlwZVtdKTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0cykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGlucHV0cyBtdXN0IGJlIGFycmF5YCk7XG4gICAgfVxuICAgIHJldHVybiBEaW1lbnNpb25zLnN1bSguLi5pbnB1dHMubWFwKChpbnB1dCwgXykgPT4gRGltZW5zaW9ucy5mcm9tUHNidElucHV0KGlucHV0KSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzY3JpcHRMZW5ndGgge251bWJlcn0gLSBzaXplIG9mIHRoZSBvdXRwdXQgc2NyaXB0IGluIGJ5dGVzXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IC0gRGltZW5zaW9ucyBvZiB0aGUgb3V0cHV0XG4gICAqL1xuICBzdGF0aWMgZnJvbU91dHB1dFNjcmlwdExlbmd0aChzY3JpcHRMZW5ndGg6IG51bWJlcik6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLnN1bSh7XG4gICAgICBvdXRwdXRzOiB7XG4gICAgICAgIGNvdW50OiAxLFxuICAgICAgICBzaXplOiBEaW1lbnNpb25zLmdldFZTaXplRm9yT3V0cHV0V2l0aFNjcmlwdExlbmd0aChzY3JpcHRMZW5ndGgpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3V0cHV0IC0gYSB0eCBvdXRwdXRcbiAgICogQHJldHVybiBEaW1lbnNpb25zIC0gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGdpdmVuIG91dHB1dFxuICAgKi9cbiAgc3RhdGljIGZyb21PdXRwdXQoeyBzY3JpcHQgfTogeyBzY3JpcHQ6IEJ1ZmZlciB9KTogRGltZW5zaW9ucyB7XG4gICAgaWYgKCFzY3JpcHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgb3V0cHV0IHNjcmlwdCB0byBiZSBkZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHNjcmlwdCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIHNjcmlwdCB0byBiZSBidWZmZXIsIGdvdCAnICsgdHlwZW9mIHNjcmlwdCk7XG4gICAgfVxuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21PdXRwdXRTY3JpcHRMZW5ndGgoc2NyaXB0Lmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG91dHB1dHMgLSBBcnJheSBvZiBvdXRwdXRzXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IHN1bSBvZiB0aGUgZGltZW5zaW9ucyBmb3IgZWFjaCBvdXRwdXQgKEBzZWUgRGltZW5zaW9ucy5mcm9tT3V0cHV0KCkpXG4gICAqL1xuICBzdGF0aWMgZnJvbU91dHB1dHMob3V0cHV0czogeyBzY3JpcHQ6IEJ1ZmZlciB9W10pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob3V0cHV0cykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYG91dHB1dHMgbXVzdCBiZSBhcnJheWApO1xuICAgIH1cbiAgICByZXR1cm4gRGltZW5zaW9ucy5zdW0oLi4ub3V0cHV0cy5tYXAoRGltZW5zaW9ucy5mcm9tT3V0cHV0KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGltZW5zaW9ucyBvZiBhbiBvdXRwdXQgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgb24gYSBzcGVjaWZpYyBjaGFpbi5cbiAgICogQ3VycmVudGx5LCB0aGlzIHNpbXBseSBhZGRzIGEgZGVmYXVsdCBvdXRwdXQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFpbiAtIENoYWluIGNvZGUgYXMgZGVmaW5lZCBieSB1dHhvbGliLmJpdGdvXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IC0gRGltZW5zaW9ucyBmb3IgYSBzaW5nbGUgb3V0cHV0IG9uIHRoZSBnaXZlbiBjaGFpbi5cbiAgICovXG4gIHN0YXRpYyBmcm9tT3V0cHV0T25DaGFpbihjaGFpbjogQ2hhaW5Db2RlKTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aChEaW1lbnNpb25zLmdldE91dHB1dFNjcmlwdExlbmd0aEZvckNoYWluKGNoYWluKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGRpbWVuc2lvbnMgb2YgYW4gdW5zcGVudCBhY2NvcmRpbmcgdG8gYGNoYWluYCBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGNoYWluIC0gQ2hhaW4gY29kZSBhcyBkZWZpbmVkIGJ5IHV0eG8uY2hhaW5cbiAgICogQHBhcmFtIHBhcmFtcyAtIEhpbnQgZm9yIHVuc3BlbnRzIHdpdGggdmFyaWFibGUgaW5wdXQgc2l6ZXMgKHAydHIsIHAydHJNdXNpZzIpXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9IG9mIHRoZSB1bnNwZW50XG4gICAqIEB0aHJvd3MgaWYgdGhlIGNoYWluIGNvZGUgaXMgaW52YWxpZCBvciB1bnN1cHBvcnRlZFxuICAgKi9cbiAgc3RhdGljIGZyb21VbnNwZW50KHsgY2hhaW4gfTogeyBjaGFpbjogbnVtYmVyIH0sIHBhcmFtczogRnJvbVVuc3BlbnRQYXJhbXMgPSBkZWZhdWx0VW5zcGVudFBhcmFtcyk6IERpbWVuc2lvbnMge1xuICAgIGlmICghaXNDaGFpbkNvZGUoY2hhaW4pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGNoYWluIGNvZGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKTtcblxuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21TY3JpcHRUeXBlKFxuICAgICAgc2NyaXB0VHlwZSxcbiAgICAgIHNjcmlwdFR5cGUgPT09ICdwMnRyJyA/IHBhcmFtcy5wMnRyIDogc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzInID8gcGFyYW1zLnAydHJNdXNpZzIgOiB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHVuc3BlbnRzXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBIaW50IGZvciB1bnNwZW50cyB3aXRoIHZhcmlhYmxlIGlucHV0IHNpemVzIChwMnRyLCBwMnRyTXVzaWcyKVxuICAgKiBAcmV0dXJuIHtEaW1lbnNpb25zfSBzdW0gb2YgdGhlIGRpbWVuc2lvbnMgZm9yIGVhY2ggdW5zcGVudCAoQHNlZSBEaW1lbnNpb25zLmZyb21VbnNwZW50KCkpXG4gICAqL1xuICBzdGF0aWMgZnJvbVVuc3BlbnRzKHVuc3BlbnRzOiB7IGNoYWluOiBDaGFpbkNvZGUgfVtdLCBwYXJhbXM6IEZyb21VbnNwZW50UGFyYW1zID0gZGVmYXVsdFVuc3BlbnRQYXJhbXMpOiBEaW1lbnNpb25zIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodW5zcGVudHMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnNwZW50cyBtdXN0IGJlIGFycmF5YCk7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgdGhlIGluZGl2aWR1YWwgdW5zcGVudHMgaW50byBkaW1lbnNpb25zIGFuZCBzdW0gdGhlbSB1cFxuICAgIHJldHVybiBEaW1lbnNpb25zLnN1bSguLi51bnNwZW50cy5tYXAoKHUpID0+IERpbWVuc2lvbnMuZnJvbVVuc3BlbnQodSwgcGFyYW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbiAtIGJpdGNvaW4tbGlrZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gW3BhcmFtLmFzc3VtZVVuc2lnbmVkXSAtIGRlZmF1bHQgdHlwZSBmb3IgdW5zaWduZWQgaW5wdXRzXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gICAqL1xuICBzdGF0aWMgZnJvbVRyYW5zYWN0aW9uKFxuICAgIHtcbiAgICAgIGlucyxcbiAgICAgIG91dHMsXG4gICAgfToge1xuICAgICAgaW5zOiB1dHhvbGliLlR4SW5wdXRbXTtcbiAgICAgIG91dHM6IHV0eG9saWIuVHhPdXRwdXRbXTtcbiAgICB9LFxuICAgIHBhcmFtcz86IEZyb21JbnB1dFBhcmFtc1xuICApOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gRGltZW5zaW9ucy5mcm9tSW5wdXRzKGlucywgcGFyYW1zKS5wbHVzKERpbWVuc2lvbnMuZnJvbU91dHB1dHMob3V0cykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBEaW1lbnNpb25zIGZyb20gcHNidCBpbnB1dHMgYW5kIG91dHB1dHNcbiAgICogQHBhcmFtIHBzYnRcbiAgICogQHJldHVybiB7RGltZW5zaW9uc31cbiAgICovXG4gIHN0YXRpYyBmcm9tUHNidChwc2J0OiBiaXRnby5VdHhvUHNidCk6IERpbWVuc2lvbnMge1xuICAgIHJldHVybiBEaW1lbnNpb25zLmZyb21Qc2J0SW5wdXRzKHBzYnQuZGF0YS5pbnB1dHMpLnBsdXMoRGltZW5zaW9ucy5mcm9tT3V0cHV0cyhwc2J0LmdldFVuc2lnbmVkVHgoKS5vdXRzKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGRpbWVuc2lvbnMgKGNhbiBiZSBwYXJ0aWFsbHkgZGVmaW5lZClcbiAgICogQHJldHVybiBuZXcgZGltZW5zaW9ucyB3aXRoIGFyZ3VtZW50IGFkZGVkXG4gICAqL1xuICBwbHVzKGRpbWVuc2lvbnM6IFBhcnRpYWw8RGltZW5zaW9ucz4pOiBEaW1lbnNpb25zIHtcbiAgICBpZiAodHlwZW9mIGRpbWVuc2lvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBleHBlY3RlZCBhcmd1bWVudCB0byBiZSBvYmplY3RgKTtcbiAgICB9XG5cbiAgICBpZiAoIShkaW1lbnNpb25zIGluc3RhbmNlb2YgRGltZW5zaW9ucykpIHtcbiAgICAgIGRpbWVuc2lvbnMgPSBuZXcgRGltZW5zaW9ucyhkaW1lbnNpb25zKTtcbiAgICB9XG5cbiAgICAvLyBDYXRjaCBpbnN0YW5jZXMgd2hlcmUgd2UgdHJ5IHRvIGluaXRpYWxpemUgRGltZW5zaW9ucyBmcm9tIHBhcnRpYWwgZGF0YSB1c2luZyBkZXByZWNhdGVkIHBhcmFtZXRlcnNcbiAgICAvLyB1c2luZyBvbmx5IFwibk91dHB1dHNcIi5cbiAgICBpZiAoJ25PdXRwdXRzJyBpbiBkaW1lbnNpb25zKSB7XG4gICAgICBpZiAoISgnb3V0cHV0cycgaW4gZGltZW5zaW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXByZWNhdGVkIHBhcnRpYWwgYWRkaXRpb246IGFyZ3VtZW50IGhhcyBrZXkgXCJuT3V0cHV0c1wiIGJ1dCBubyBcIm91dHB1dHNcIicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG91dHB1dHMsIG5PdXRwdXRzIH0gPSBkaW1lbnNpb25zIGFzIERpbWVuc2lvbnM7XG5cbiAgICAgIGlmIChvdXRwdXRzLmNvdW50ICE9PSBuT3V0cHV0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQgcGFydGlhbCBhZGRpdGlvbjogaW5jb25zaXN0ZW50IHZhbHVlcyBmb3IgXCJuT3V0cHV0c1wiIGFuZCBcIm91dHB1dHMuY291bnRcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBEaW1lbnNpb25zKHRoaXMsIChrZXksIHYpID0+IHtcbiAgICAgIGNvbnN0IHcgPSBkaW1lbnNpb25zW2tleV0gPz8gRGltZW5zaW9ucy5aRVJPW2tleV07XG4gICAgICBpZiAoa2V5ID09PSAnb3V0cHV0cycpIHtcbiAgICAgICAgY29uc3Qgdk91dHB1dHMgPSB2IGFzIE91dHB1dERpbWVuc2lvbnM7XG4gICAgICAgIGNvbnN0IHdPdXRwdXRzID0gdyBhcyBPdXRwdXREaW1lbnNpb25zO1xuICAgICAgICByZXR1cm4gbmV3IE91dHB1dERpbWVuc2lvbnMoe1xuICAgICAgICAgIGNvdW50OiB2T3V0cHV0cy5jb3VudCArIHdPdXRwdXRzLmNvdW50LFxuICAgICAgICAgIHNpemU6IHZPdXRwdXRzLnNpemUgKyB3T3V0cHV0cy5zaXplLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAodiBhcyBudW1iZXIpICsgKHcgYXMgbnVtYmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBseSBkaW1lbnNpb25zIGJ5IGEgZ2l2ZW4gZmFjdG9yXG4gICAqIEBwYXJhbSBmYWN0b3IgLSBQb3NpdGl2ZSBpbnRlZ2VyXG4gICAqIEByZXR1cm4ge0RpbWVuc2lvbnN9XG4gICAqL1xuICB0aW1lcyhmYWN0b3I6IG51bWJlcik6IERpbWVuc2lvbnMge1xuICAgIGlmICghUG9zaXRpdmVJbnRlZ2VyLmlzKGZhY3RvcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGV4cGVjdGVkIGZhY3RvciB0byBiZSBwb3NpdGl2ZSBpbnRlZ2VyYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcERpbWVuc2lvbnModGhpcywgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICdvdXRwdXRzJykge1xuICAgICAgICBjb25zdCB2T3V0cHV0cyA9IHZhbHVlIGFzIE91dHB1dERpbWVuc2lvbnM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY291bnQ6IHZPdXRwdXRzLmNvdW50ICogZmFjdG9yLFxuICAgICAgICAgIHNpemU6IHZPdXRwdXRzLnNpemUgKiBmYWN0b3IsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlIGFzIG51bWJlcikgKiBmYWN0b3I7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBOdW1iZXIgb2YgdG90YWwgaW5wdXRzIChwMnNoLCBwMnNoUDJ3c2ggYW5kIHAyd3NoKVxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGRpbWVuc2lvbi5uSW5wdXRzYCBpbnN0ZWFkXG4gICAqL1xuICBnZXROSW5wdXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubklucHV0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZmYgZGltZW5zaW9ucyBoYXZlIG9uZSBvciBtb3JlIChwMnNoKXAyd3NoIGlucHV0c1xuICAgKi9cbiAgaXNTZWd3aXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMublAyd3NoSW5wdXRzICtcbiAgICAgICAgdGhpcy5uUDJzaFAyd3NoSW5wdXRzICtcbiAgICAgICAgdGhpcy5uUDJ0cktleXBhdGhJbnB1dHMgK1xuICAgICAgICB0aGlzLm5QMnRyU2NyaXB0UGF0aExldmVsMUlucHV0cyArXG4gICAgICAgIHRoaXMublAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRzID5cbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge051bWJlcn0gb3ZlcmhlYWQgdnNpemUsIGJhc2VkIG9uIHJlc3VsdCBpc1NlZ3dpdCgpLlxuICAgKi9cbiAgZ2V0T3ZlcmhlYWRWU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlzU2Vnd2l0KCkgPyBWaXJ0dWFsU2l6ZXMudHhTZWdPdmVyaGVhZFZTaXplIDogVmlydHVhbFNpemVzLnR4T3ZlcmhlYWRTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHZzaXplIG9mIGlucHV0cywgd2l0aG91dCB0cmFuc2FjdGlvbiBvdmVyaGVhZFxuICAgKi9cbiAgZ2V0SW5wdXRzVlNpemUoKTogbnVtYmVyIHtcbiAgICBjb25zdCB7XG4gICAgICB0eFAyc2hJbnB1dFNpemUsXG4gICAgICB0eFAyc2hQMndzaElucHV0U2l6ZSxcbiAgICAgIHR4UDJ3c2hJbnB1dFNpemUsXG4gICAgICB0eFAydHJLZXlwYXRoSW5wdXRTaXplLFxuICAgICAgdHhQMnRyU2NyaXB0UGF0aExldmVsMUlucHV0U2l6ZSxcbiAgICAgIHR4UDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dFNpemUsXG4gICAgICB0eFAyc2hQMnBrSW5wdXRTaXplLFxuICAgIH0gPSBWaXJ0dWFsU2l6ZXM7XG5cbiAgICBjb25zdCB7XG4gICAgICBuUDJzaElucHV0cyxcbiAgICAgIG5QMnNoUDJ3c2hJbnB1dHMsXG4gICAgICBuUDJ3c2hJbnB1dHMsXG4gICAgICBuUDJ0cktleXBhdGhJbnB1dHMsXG4gICAgICBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHMsXG4gICAgICBuUDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dHMsXG4gICAgICBuUDJzaFAycGtJbnB1dHMsXG4gICAgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBzaXplID1cbiAgICAgIG5QMnNoSW5wdXRzICogdHhQMnNoSW5wdXRTaXplICtcbiAgICAgIG5QMnNoUDJ3c2hJbnB1dHMgKiB0eFAyc2hQMndzaElucHV0U2l6ZSArXG4gICAgICBuUDJ3c2hJbnB1dHMgKiB0eFAyd3NoSW5wdXRTaXplICtcbiAgICAgIG5QMnRyS2V5cGF0aElucHV0cyAqIHR4UDJ0cktleXBhdGhJbnB1dFNpemUgK1xuICAgICAgblAyc2hQMnBrSW5wdXRzICogdHhQMnNoUDJwa0lucHV0U2l6ZSArXG4gICAgICBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHMgKiB0eFAydHJTY3JpcHRQYXRoTGV2ZWwxSW5wdXRTaXplICtcbiAgICAgIG5QMnRyU2NyaXB0UGF0aExldmVsMklucHV0cyAqIHR4UDJ0clNjcmlwdFBhdGhMZXZlbDJJbnB1dFNpemU7XG4gICAgaWYgKE51bWJlci5pc05hTihzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNpemVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSByZXR1cm4gdnNpemUgb2Ygb3V0cHV0cywgd2l0aG91dCBvdmVyaGVhZFxuICAgKi9cbiAgZ2V0T3V0cHV0c1ZTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub3V0cHV0cy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEVzdGltYXRlcyB0aGUgdmlydHVhbCBzaXplICgxLzQgd2VpZ2h0KSBvZiBhIHNpZ25lZCB0cmFuc2FjdGlvbiBhcyBzdW0gb2ZcbiAgICogb3ZlcmhlYWQgdnNpemUsIGlucHV0IHZzaXplIGFuZCBvdXRwdXQgdnNpemUuXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBlc3RpbWF0ZWQgdnNpemUgb2YgdGhlIHRyYW5zYWN0aW9uIGRpbWVuc2lvbnMuXG4gICAqL1xuICBnZXRWU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldE92ZXJoZWFkVlNpemUoKSArIHRoaXMuZ2V0SW5wdXRzVlNpemUoKSArIHRoaXMuZ2V0T3V0cHV0c1ZTaXplKCk7XG4gIH1cbn1cbiJdfQ==
package/dist/src/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
37
  };
@@ -27,4 +41,4 @@ const codes_1 = __importStar(require("./codes")), CodesTypes = codes_1;
27
41
  exports.Codes = codes_1.default;
28
42
  exports.CodesTypes = CodesTypes;
29
43
  __exportStar(require("./dimensions"), exports);
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVFQUE2QztBQUczQyxnQkFISyxlQUFLLENBR0w7QUFFTCxnQ0FBVTtBQUdaLCtDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb2RlcywgKiBhcyBDb2Rlc1R5cGVzIGZyb20gJy4vY29kZXMnO1xuZXhwb3J0IHtcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgQ29kZXMsXG4gIC8qKiBAZGVwcmVjYXRlZCAtIHVzZSB1dHhvbGliLmJpdGdvICovXG4gIENvZGVzVHlwZXMsXG59O1xuXG5leHBvcnQgKiBmcm9tICcuL2RpbWVuc2lvbnMnO1xuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUVBQTZDO0FBRzNDLGdCQUhLLGVBQUssQ0FHTDtBQUVMLGdDQUFVO0FBR1osK0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvZGVzLCAqIGFzIENvZGVzVHlwZXMgZnJvbSAnLi9jb2Rlcyc7XG5leHBvcnQge1xuICAvKiogQGRlcHJlY2F0ZWQgLSB1c2UgdXR4b2xpYi5iaXRnbyAqL1xuICBDb2RlcyxcbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHV0eG9saWIuYml0Z28gKi9cbiAgQ29kZXNUeXBlcyxcbn07XG5cbmV4cG9ydCAqIGZyb20gJy4vZGltZW5zaW9ucyc7XG4iXX0=