@bitgo/sdk-core 3.0.0 → 4.0.0

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 (59) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +2 -2
  3. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +2 -0
  4. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  5. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  6. package/dist/src/bitgo/config.d.ts +6 -0
  7. package/dist/src/bitgo/config.d.ts.map +1 -1
  8. package/dist/src/bitgo/features/constructFinalSignedMessageHash.d.ts +5 -0
  9. package/dist/src/bitgo/features/constructFinalSignedMessageHash.d.ts.map +1 -0
  10. package/dist/src/bitgo/features/constructFinalSignedMessageHash.js +8 -0
  11. package/dist/src/bitgo/keychain/iKeychains.d.ts +2 -0
  12. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  13. package/dist/src/bitgo/keychain/iKeychains.js +1 -1
  14. package/dist/src/bitgo/lightning/iLightning.d.ts +24 -17
  15. package/dist/src/bitgo/lightning/iLightning.d.ts.map +1 -1
  16. package/dist/src/bitgo/lightning/iLightning.js +18 -4
  17. package/dist/src/bitgo/lightning/lightning.d.ts +7 -1
  18. package/dist/src/bitgo/lightning/lightning.d.ts.map +1 -1
  19. package/dist/src/bitgo/lightning/lightning.js +25 -3
  20. package/dist/src/bitgo/staking/stakingWallet.d.ts +6 -0
  21. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  22. package/dist/src/bitgo/staking/stakingWallet.js +9 -1
  23. package/dist/src/bitgo/tss/common.d.ts +14 -0
  24. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  25. package/dist/src/bitgo/tss/common.js +34 -2
  26. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +1 -1
  27. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  28. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +18 -18
  29. package/dist/src/bitgo/tss/ecdsa/types.d.ts +1 -0
  30. package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
  31. package/dist/src/bitgo/tss/ecdsa/types.js +1 -1
  32. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +15 -0
  33. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
  34. package/dist/src/bitgo/tss/eddsa/eddsa.js +25 -3
  35. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +2 -2
  36. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  37. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +5 -2
  38. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +24 -6
  39. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  40. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  41. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  42. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +10 -6
  43. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +1 -0
  44. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  45. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +53 -8
  46. package/dist/src/bitgo/wallet/iWallet.d.ts +3 -3
  47. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  48. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  49. package/dist/src/bitgo/wallet/wallet.d.ts +1 -1
  50. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  51. package/dist/src/bitgo/wallet/wallet.js +57 -37
  52. package/dist/src/index.d.ts +1 -0
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +2 -1
  55. package/dist/src/units.d.ts +29 -0
  56. package/dist/src/units.d.ts.map +1 -0
  57. package/dist/src/units.js +52 -0
  58. package/dist/tsconfig.tsbuildinfo +135 -85
  59. package/package.json +8 -5
@@ -8,5 +8,6 @@ import { EddsaUtils } from './bitgo/utils/tss/eddsa/eddsa';
8
8
  export { EddsaUtils };
9
9
  export { GShare, SignShare, YShare } from './account-lib/mpc/tss/eddsa/types';
10
10
  import * as common from './common';
11
+ export * from './units';
11
12
  export { common };
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,CAAC"}
package/dist/src/index.js CHANGED
@@ -33,4 +33,5 @@ const eddsa_1 = require("./bitgo/utils/tss/eddsa/eddsa");
33
33
  Object.defineProperty(exports, "EddsaUtils", { enumerable: true, get: function () { return eddsa_1.EddsaUtils; } });
34
34
  const common = __importStar(require("./common"));
35
35
  exports.common = common;
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QjtBQUM5Qiw0REFBNEM7QUFDNUMsd0NBQXNCO0FBQ3RCLDBDQUF3QjtBQUN4QixpREFBK0I7QUFDL0IsaURBQWlDO0FBQ2pDLHlEQUEyRDtBQUNsRCwyRkFEQSxrQkFBVSxPQUNBO0FBRW5CLGlEQUFtQztBQUMxQix3QkFBTSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC1saWInO1xuZXhwb3J0ICogYXMgYWNjb3VudExpYiBmcm9tICcuL2FjY291bnQtbGliJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vYml0Z28nO1xuZXhwb3J0ICogZnJvbSAnLi9iaXRnb2pzRXJyb3InO1xuZXhwb3J0ICogYXMgY29pbnMgZnJvbSAnLi9jb2lucyc7XG5pbXBvcnQgeyBFZGRzYVV0aWxzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2EnO1xuZXhwb3J0IHsgRWRkc2FVdGlscyB9O1xuZXhwb3J0IHsgR1NoYXJlLCBTaWduU2hhcmUsIFlTaGFyZSB9IGZyb20gJy4vYWNjb3VudC1saWIvbXBjL3Rzcy9lZGRzYS90eXBlcyc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnLi9jb21tb24nO1xuZXhwb3J0IHsgY29tbW9uIH07XG4iXX0=
36
+ __exportStar(require("./units"), exports);
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QjtBQUM5Qiw0REFBNEM7QUFDNUMsd0NBQXNCO0FBQ3RCLDBDQUF3QjtBQUN4QixpREFBK0I7QUFDL0IsaURBQWlDO0FBQ2pDLHlEQUEyRDtBQUNsRCwyRkFEQSxrQkFBVSxPQUNBO0FBRW5CLGlEQUFtQztBQUUxQix3QkFBTTtBQURmLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC1saWInO1xuZXhwb3J0ICogYXMgYWNjb3VudExpYiBmcm9tICcuL2FjY291bnQtbGliJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vYml0Z28nO1xuZXhwb3J0ICogZnJvbSAnLi9iaXRnb2pzRXJyb3InO1xuZXhwb3J0ICogYXMgY29pbnMgZnJvbSAnLi9jb2lucyc7XG5pbXBvcnQgeyBFZGRzYVV0aWxzIH0gZnJvbSAnLi9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2EnO1xuZXhwb3J0IHsgRWRkc2FVdGlscyB9O1xuZXhwb3J0IHsgR1NoYXJlLCBTaWduU2hhcmUsIFlTaGFyZSB9IGZyb20gJy4vYWNjb3VudC1saWIvbXBjL3Rzcy9lZGRzYS90eXBlcyc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnLi9jb21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi91bml0cyc7XG5leHBvcnQgeyBjb21tb24gfTtcbiJdfQ==
@@ -0,0 +1,29 @@
1
+ import BigNumber from 'bignumber.js';
2
+ /**
3
+ * Converts an amount of coin in base units (such as satoshis, cents, or wei) to full units (such as bitcoin, dollars, or ether)
4
+ * @param baseUnits number of base units
5
+ * @param coin coin ticker
6
+ */
7
+ export declare function toFullUnits(baseUnits: number | string | BigNumber, coin: string): string;
8
+ /**
9
+ * Converts an amount of coin in base units (such as satoshis, cents, or wei) to full units (such as bitcoin, dollars, or ether) fixed amount
10
+ * @param baseUnits number of base units
11
+ * @param coin coin ticker
12
+ */
13
+ export declare function toFullUnitsFixed(baseUnits: number | string | BigNumber, coin: string): string;
14
+ /**
15
+ * Converts an amount of coin in full units (such as bitcoin, dollars, or ether) to base units (such as satoshis, cents, or wei)
16
+ * @param fullUnits number of full units
17
+ * @param coin coin ticker
18
+ */
19
+ export declare function toBaseUnits(fullUnits: number | string | BigNumber, coin: string): string;
20
+ /**
21
+ * Converts price and quantity for a coin into base units market value
22
+ * (note, price might be 2 decimal places longer than priceIn decimal places for base units)
23
+ * @param coin - which coin to calculate for
24
+ * @param price - price of a unit of the coin specified
25
+ * @param quantity - number of coins
26
+ * @param priceIn - numerator of trading pair, for example USD of BTC/USD
27
+ */
28
+ export declare function toMarketValueBaseUnits(coin: string, price: number | string | BigNumber, quantity: string | number | bigint, priceIn?: string): bigint;
29
+ //# sourceMappingURL=units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/units.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAIrC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7F;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAClC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAClC,OAAO,SAAU,GAChB,MAAM,CAKR"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.toMarketValueBaseUnits = exports.toBaseUnits = exports.toFullUnitsFixed = exports.toFullUnits = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const statics_1 = require("@bitgo/statics");
9
+ /**
10
+ * Converts an amount of coin in base units (such as satoshis, cents, or wei) to full units (such as bitcoin, dollars, or ether)
11
+ * @param baseUnits number of base units
12
+ * @param coin coin ticker
13
+ */
14
+ function toFullUnits(baseUnits, coin) {
15
+ return new bignumber_js_1.default(baseUnits).div(10 ** statics_1.coins.get(coin).decimalPlaces).toString();
16
+ }
17
+ exports.toFullUnits = toFullUnits;
18
+ /**
19
+ * Converts an amount of coin in base units (such as satoshis, cents, or wei) to full units (such as bitcoin, dollars, or ether) fixed amount
20
+ * @param baseUnits number of base units
21
+ * @param coin coin ticker
22
+ */
23
+ function toFullUnitsFixed(baseUnits, coin) {
24
+ const decimalPlaces = statics_1.coins.get(coin).decimalPlaces;
25
+ return new bignumber_js_1.default(baseUnits).div(10 ** decimalPlaces).toFixed(decimalPlaces);
26
+ }
27
+ exports.toFullUnitsFixed = toFullUnitsFixed;
28
+ /**
29
+ * Converts an amount of coin in full units (such as bitcoin, dollars, or ether) to base units (such as satoshis, cents, or wei)
30
+ * @param fullUnits number of full units
31
+ * @param coin coin ticker
32
+ */
33
+ function toBaseUnits(fullUnits, coin) {
34
+ return new bignumber_js_1.default(fullUnits).times(10 ** statics_1.coins.get(coin).decimalPlaces).toString();
35
+ }
36
+ exports.toBaseUnits = toBaseUnits;
37
+ /**
38
+ * Converts price and quantity for a coin into base units market value
39
+ * (note, price might be 2 decimal places longer than priceIn decimal places for base units)
40
+ * @param coin - which coin to calculate for
41
+ * @param price - price of a unit of the coin specified
42
+ * @param quantity - number of coins
43
+ * @param priceIn - numerator of trading pair, for example USD of BTC/USD
44
+ */
45
+ function toMarketValueBaseUnits(coin, price, quantity, priceIn = 'tsusd') {
46
+ const roundFactor = BigInt(1000000);
47
+ const priceInBaseUnitsBy100 = Math.round(Number(toBaseUnits(price, priceIn)) * 100);
48
+ const decimalPlacesCoinBy100 = BigInt(toBaseUnits(1, coin)) * BigInt(100);
49
+ return (roundFactor * BigInt(quantity) * BigInt(priceInBaseUnitsBy100)) / (decimalPlacesCoinBy100 * roundFactor);
50
+ }
51
+ exports.toMarketValueBaseUnits = toMarketValueBaseUnits;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdW5pdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQXFDO0FBRXJDLDRDQUF1QztBQUV2Qzs7OztHQUlHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLFNBQXNDLEVBQUUsSUFBWTtJQUM5RSxPQUFPLElBQUksc0JBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdEYsQ0FBQztBQUZELGtDQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFNBQXNDLEVBQUUsSUFBWTtJQUNuRixNQUFNLGFBQWEsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUNwRCxPQUFPLElBQUksc0JBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBSEQsNENBR0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLFNBQXNDLEVBQUUsSUFBWTtJQUM5RSxPQUFPLElBQUksc0JBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEYsQ0FBQztBQUZELGtDQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHNCQUFzQixDQUNwQyxJQUFZLEVBQ1osS0FBa0MsRUFDbEMsUUFBa0MsRUFDbEMsT0FBTyxHQUFHLE9BQU87SUFFakIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUUsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxDQUFDO0FBQ25ILENBQUM7QUFWRCx3REFVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbi8qKlxuICogQ29udmVydHMgYW4gYW1vdW50IG9mIGNvaW4gaW4gYmFzZSB1bml0cyAoc3VjaCBhcyBzYXRvc2hpcywgY2VudHMsIG9yIHdlaSkgdG8gZnVsbCB1bml0cyAoc3VjaCBhcyBiaXRjb2luLCBkb2xsYXJzLCBvciBldGhlcilcbiAqIEBwYXJhbSBiYXNlVW5pdHMgbnVtYmVyIG9mIGJhc2UgdW5pdHNcbiAqIEBwYXJhbSBjb2luIGNvaW4gdGlja2VyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Z1bGxVbml0cyhiYXNlVW5pdHM6IG51bWJlciB8IHN0cmluZyB8IEJpZ051bWJlciwgY29pbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoYmFzZVVuaXRzKS5kaXYoMTAgKiogY29pbnMuZ2V0KGNvaW4pLmRlY2ltYWxQbGFjZXMpLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYW1vdW50IG9mIGNvaW4gaW4gYmFzZSB1bml0cyAoc3VjaCBhcyBzYXRvc2hpcywgY2VudHMsIG9yIHdlaSkgdG8gZnVsbCB1bml0cyAoc3VjaCBhcyBiaXRjb2luLCBkb2xsYXJzLCBvciBldGhlcikgZml4ZWQgYW1vdW50XG4gKiBAcGFyYW0gYmFzZVVuaXRzIG51bWJlciBvZiBiYXNlIHVuaXRzXG4gKiBAcGFyYW0gY29pbiBjb2luIHRpY2tlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9GdWxsVW5pdHNGaXhlZChiYXNlVW5pdHM6IG51bWJlciB8IHN0cmluZyB8IEJpZ051bWJlciwgY29pbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IGNvaW5zLmdldChjb2luKS5kZWNpbWFsUGxhY2VzO1xuICByZXR1cm4gbmV3IEJpZ051bWJlcihiYXNlVW5pdHMpLmRpdigxMCAqKiBkZWNpbWFsUGxhY2VzKS50b0ZpeGVkKGRlY2ltYWxQbGFjZXMpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFtb3VudCBvZiBjb2luIGluIGZ1bGwgdW5pdHMgKHN1Y2ggYXMgYml0Y29pbiwgZG9sbGFycywgb3IgZXRoZXIpIHRvIGJhc2UgdW5pdHMgKHN1Y2ggYXMgc2F0b3NoaXMsIGNlbnRzLCBvciB3ZWkpXG4gKiBAcGFyYW0gZnVsbFVuaXRzIG51bWJlciBvZiBmdWxsIHVuaXRzXG4gKiBAcGFyYW0gY29pbiBjb2luIHRpY2tlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9CYXNlVW5pdHMoZnVsbFVuaXRzOiBudW1iZXIgfCBzdHJpbmcgfCBCaWdOdW1iZXIsIGNvaW46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgQmlnTnVtYmVyKGZ1bGxVbml0cykudGltZXMoMTAgKiogY29pbnMuZ2V0KGNvaW4pLmRlY2ltYWxQbGFjZXMpLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgcHJpY2UgYW5kIHF1YW50aXR5IGZvciBhIGNvaW4gaW50byBiYXNlIHVuaXRzIG1hcmtldCB2YWx1ZVxuICogKG5vdGUsIHByaWNlIG1pZ2h0IGJlIDIgZGVjaW1hbCBwbGFjZXMgbG9uZ2VyIHRoYW4gcHJpY2VJbiBkZWNpbWFsIHBsYWNlcyBmb3IgYmFzZSB1bml0cylcbiAqIEBwYXJhbSBjb2luIC0gd2hpY2ggY29pbiB0byBjYWxjdWxhdGUgZm9yXG4gKiBAcGFyYW0gcHJpY2UgLSBwcmljZSBvZiBhIHVuaXQgb2YgdGhlIGNvaW4gc3BlY2lmaWVkXG4gKiBAcGFyYW0gcXVhbnRpdHkgLSBudW1iZXIgb2YgY29pbnNcbiAqIEBwYXJhbSBwcmljZUluIC0gbnVtZXJhdG9yIG9mIHRyYWRpbmcgcGFpciwgZm9yIGV4YW1wbGUgVVNEIG9mIEJUQy9VU0RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTWFya2V0VmFsdWVCYXNlVW5pdHMoXG4gIGNvaW46IHN0cmluZyxcbiAgcHJpY2U6IG51bWJlciB8IHN0cmluZyB8IEJpZ051bWJlcixcbiAgcXVhbnRpdHk6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCxcbiAgcHJpY2VJbiA9ICd0c3VzZCdcbik6IGJpZ2ludCB7XG4gIGNvbnN0IHJvdW5kRmFjdG9yID0gQmlnSW50KDEwMDAwMDApO1xuICBjb25zdCBwcmljZUluQmFzZVVuaXRzQnkxMDAgPSBNYXRoLnJvdW5kKE51bWJlcih0b0Jhc2VVbml0cyhwcmljZSwgcHJpY2VJbikpICogMTAwKTtcbiAgY29uc3QgZGVjaW1hbFBsYWNlc0NvaW5CeTEwMCA9IEJpZ0ludCh0b0Jhc2VVbml0cygxLCBjb2luKSkgKiBCaWdJbnQoMTAwKTtcbiAgcmV0dXJuIChyb3VuZEZhY3RvciAqIEJpZ0ludChxdWFudGl0eSkgKiBCaWdJbnQocHJpY2VJbkJhc2VVbml0c0J5MTAwKSkgLyAoZGVjaW1hbFBsYWNlc0NvaW5CeTEwMCAqIHJvdW5kRmFjdG9yKTtcbn1cbiJdfQ==