@bitgo-beta/abstract-cosmos 1.0.1-beta.6 → 1.0.1-beta.600

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 (49) hide show
  1. package/.eslintignore +1 -1
  2. package/CHANGELOG.md +786 -0
  3. package/dist/resources/MsgCompiled.d.ts +1212 -0
  4. package/dist/resources/MsgCompiled.js +2761 -0
  5. package/dist/src/cosmosCoin.d.ts +93 -6
  6. package/dist/src/cosmosCoin.d.ts.map +1 -1
  7. package/dist/src/cosmosCoin.js +380 -119
  8. package/dist/src/index.js +6 -2
  9. package/dist/src/lib/ContractCallBuilder.d.ts +13 -0
  10. package/dist/src/lib/ContractCallBuilder.d.ts.map +1 -0
  11. package/dist/src/lib/ContractCallBuilder.js +61 -0
  12. package/dist/src/lib/StakingActivateBuilder.d.ts +13 -0
  13. package/dist/src/lib/StakingActivateBuilder.d.ts.map +1 -0
  14. package/dist/src/lib/StakingActivateBuilder.js +61 -0
  15. package/dist/src/lib/StakingDeactivateBuilder.d.ts +13 -0
  16. package/dist/src/lib/StakingDeactivateBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/StakingDeactivateBuilder.js +61 -0
  18. package/dist/src/lib/StakingRedelegateBuilder.d.ts +13 -0
  19. package/dist/src/lib/StakingRedelegateBuilder.d.ts.map +1 -0
  20. package/dist/src/lib/StakingRedelegateBuilder.js +61 -0
  21. package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts +13 -0
  22. package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts.map +1 -0
  23. package/dist/src/lib/StakingWithdrawRewardsBuilder.js +61 -0
  24. package/dist/src/lib/constants.d.ts +4 -0
  25. package/dist/src/lib/constants.d.ts.map +1 -1
  26. package/dist/src/lib/constants.js +6 -2
  27. package/dist/src/lib/iface.d.ts +45 -4
  28. package/dist/src/lib/iface.d.ts.map +1 -1
  29. package/dist/src/lib/iface.js +18 -1
  30. package/dist/src/lib/index.d.ts +7 -1
  31. package/dist/src/lib/index.d.ts.map +1 -1
  32. package/dist/src/lib/index.js +43 -5
  33. package/dist/src/lib/keyPair.js +6 -7
  34. package/dist/src/lib/transaction.d.ts +13 -2
  35. package/dist/src/lib/transaction.d.ts.map +1 -1
  36. package/dist/src/lib/transaction.js +159 -73
  37. package/dist/src/lib/transactionBuilder.d.ts +31 -6
  38. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  39. package/dist/src/lib/transactionBuilder.js +99 -4
  40. package/dist/src/lib/transferBuilder.d.ts +13 -0
  41. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  42. package/dist/src/lib/transferBuilder.js +61 -0
  43. package/dist/src/lib/utils.d.ts +199 -12
  44. package/dist/src/lib/utils.d.ts.map +1 -1
  45. package/dist/src/lib/utils.js +498 -33
  46. package/dist/tsconfig.tsbuildinfo +1 -10814
  47. package/package.json +13 -10
  48. package/resources/MsgCompiled.d.ts +1212 -0
  49. package/resources/MsgCompiled.js +2761 -0
@@ -1,25 +1,63 @@
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];
8
12
  }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
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
+ })();
9
35
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
37
  };
12
38
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.CosmosConstants = exports.CosmosLikeUtils = exports.CosmosTransactionBuilder = exports.CosmosTransaction = exports.CosmosKeyPair = void 0;
14
- const CosmosConstants = require("./constants");
39
+ exports.CosmosConstants = exports.CosmosUtils = exports.StakingRedelegateBuilder = exports.CosmosTransferBuilder = exports.CosmosTransactionBuilder = exports.CosmosTransaction = exports.CosmosKeyPair = exports.ContractCallBuilder = exports.StakingWithdrawRewardsBuilder = exports.StakingDeactivateBuilder = exports.StakingActivateBuilder = void 0;
40
+ const CosmosConstants = __importStar(require("./constants"));
15
41
  exports.CosmosConstants = CosmosConstants;
16
42
  __exportStar(require("./iface"), exports);
43
+ var StakingActivateBuilder_1 = require("./StakingActivateBuilder");
44
+ Object.defineProperty(exports, "StakingActivateBuilder", { enumerable: true, get: function () { return StakingActivateBuilder_1.StakingActivateBuilder; } });
45
+ var StakingDeactivateBuilder_1 = require("./StakingDeactivateBuilder");
46
+ Object.defineProperty(exports, "StakingDeactivateBuilder", { enumerable: true, get: function () { return StakingDeactivateBuilder_1.StakingDeactivateBuilder; } });
47
+ var StakingWithdrawRewardsBuilder_1 = require("./StakingWithdrawRewardsBuilder");
48
+ Object.defineProperty(exports, "StakingWithdrawRewardsBuilder", { enumerable: true, get: function () { return StakingWithdrawRewardsBuilder_1.StakingWithdrawRewardsBuilder; } });
49
+ var ContractCallBuilder_1 = require("./ContractCallBuilder");
50
+ Object.defineProperty(exports, "ContractCallBuilder", { enumerable: true, get: function () { return ContractCallBuilder_1.ContractCallBuilder; } });
17
51
  var keyPair_1 = require("./keyPair");
18
52
  Object.defineProperty(exports, "CosmosKeyPair", { enumerable: true, get: function () { return keyPair_1.CosmosKeyPair; } });
19
53
  var transaction_1 = require("./transaction");
20
54
  Object.defineProperty(exports, "CosmosTransaction", { enumerable: true, get: function () { return transaction_1.CosmosTransaction; } });
21
55
  var transactionBuilder_1 = require("./transactionBuilder");
22
56
  Object.defineProperty(exports, "CosmosTransactionBuilder", { enumerable: true, get: function () { return transactionBuilder_1.CosmosTransactionBuilder; } });
57
+ var transferBuilder_1 = require("./transferBuilder");
58
+ Object.defineProperty(exports, "CosmosTransferBuilder", { enumerable: true, get: function () { return transferBuilder_1.CosmosTransferBuilder; } });
59
+ var StakingRedelegateBuilder_1 = require("./StakingRedelegateBuilder");
60
+ Object.defineProperty(exports, "StakingRedelegateBuilder", { enumerable: true, get: function () { return StakingRedelegateBuilder_1.StakingRedelegateBuilder; } });
23
61
  var utils_1 = require("./utils");
24
- Object.defineProperty(exports, "CosmosLikeUtils", { enumerable: true, get: function () { return utils_1.CosmosLikeUtils; } });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBK0M7QUFRdEMsMENBQWU7QUFQeEIsMENBQXdCO0FBRXhCLHFDQUEwQztBQUFqQyx3R0FBQSxhQUFhLE9BQUE7QUFDdEIsNkNBQWtEO0FBQXpDLGdIQUFBLGlCQUFpQixPQUFBO0FBQzFCLDJEQUFnRTtBQUF2RCw4SEFBQSx3QkFBd0IsT0FBQTtBQUNqQyxpQ0FBMEM7QUFBakMsd0dBQUEsZUFBZSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQ29zbW9zQ29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgeyBDb3Ntb3NLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmV4cG9ydCB7IENvc21vc1RyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgeyBDb3Ntb3NUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBDb3Ntb3NMaWtlVXRpbHMgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IHsgQ29zbW9zQ29uc3RhbnRzIH07XG4iXX0=
62
+ Object.defineProperty(exports, "CosmosUtils", { enumerable: true, get: function () { return utils_1.CosmosUtils; } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZEQUErQztBQWF0QywwQ0FBZTtBQVp4QiwwQ0FBd0I7QUFFeEIsbUVBQWtFO0FBQXpELGdJQUFBLHNCQUFzQixPQUFBO0FBQy9CLHVFQUFzRTtBQUE3RCxvSUFBQSx3QkFBd0IsT0FBQTtBQUNqQyxpRkFBZ0Y7QUFBdkUsOElBQUEsNkJBQTZCLE9BQUE7QUFDdEMsNkRBQTREO0FBQW5ELDBIQUFBLG1CQUFtQixPQUFBO0FBQzVCLHFDQUEwQztBQUFqQyx3R0FBQSxhQUFhLE9BQUE7QUFDdEIsNkNBQWtEO0FBQXpDLGdIQUFBLGlCQUFpQixPQUFBO0FBQzFCLDJEQUFnRTtBQUF2RCw4SEFBQSx3QkFBd0IsT0FBQTtBQUNqQyxxREFBMEQ7QUFBakQsd0hBQUEscUJBQXFCLE9BQUE7QUFDOUIsdUVBQXNFO0FBQTdELG9JQUFBLHdCQUF3QixPQUFBO0FBQ2pDLGlDQUFzQztBQUE3QixvR0FBQSxXQUFXLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBDb3Ntb3NDb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCB7IFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIgfSBmcm9tICcuL1N0YWtpbmdBY3RpdmF0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyIH0gZnJvbSAnLi9TdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ1dpdGhkcmF3UmV3YXJkc0J1aWxkZXIgfSBmcm9tICcuL1N0YWtpbmdXaXRoZHJhd1Jld2FyZHNCdWlsZGVyJztcbmV4cG9ydCB7IENvbnRyYWN0Q2FsbEJ1aWxkZXIgfSBmcm9tICcuL0NvbnRyYWN0Q2FsbEJ1aWxkZXInO1xuZXhwb3J0IHsgQ29zbW9zS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5leHBvcnQgeyBDb3Ntb3NUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgQ29zbW9zVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgQ29zbW9zVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuZXhwb3J0IHsgU3Rha2luZ1JlZGVsZWdhdGVCdWlsZGVyIH0gZnJvbSAnLi9TdGFraW5nUmVkZWxlZ2F0ZUJ1aWxkZXInO1xuZXhwb3J0IHsgQ29zbW9zVXRpbHMgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IENvc21vc0NvbnN0YW50cyB9O1xuIl19
@@ -17,16 +17,16 @@ class CosmosKeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
17
17
  constructor(source) {
18
18
  super(source);
19
19
  if (!source) {
20
- const seed = crypto_1.randomBytes(constants_1.DEFAULT_SEED_SIZE_BYTES);
20
+ const seed = (0, crypto_1.randomBytes)(constants_1.DEFAULT_SEED_SIZE_BYTES);
21
21
  this.hdNode = utxo_lib_1.bip32.fromSeed(seed);
22
22
  }
23
- else if (sdk_core_1.isSeed(source)) {
23
+ else if ((0, sdk_core_1.isSeed)(source)) {
24
24
  this.hdNode = utxo_lib_1.bip32.fromSeed(source.seed);
25
25
  }
26
- else if (sdk_core_1.isPrivateKey(source)) {
26
+ else if ((0, sdk_core_1.isPrivateKey)(source)) {
27
27
  this.recordKeysFromPrivateKey(source.prv);
28
28
  }
29
- else if (sdk_core_1.isPublicKey(source)) {
29
+ else if ((0, sdk_core_1.isPublicKey)(source)) {
30
30
  this.recordKeysFromPublicKey(source.pub);
31
31
  }
32
32
  else {
@@ -41,12 +41,11 @@ class CosmosKeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
41
41
  * @returns { DefaultKeys } The keys in the protocol default key format
42
42
  */
43
43
  getKeys() {
44
- var _a;
45
44
  return {
46
45
  pub: this.getPublicKey({ compressed: true }).toString('hex'),
47
- prv: (_a = this.getPrivateKey()) === null || _a === void 0 ? void 0 : _a.toString('hex'),
46
+ prv: this.getPrivateKey()?.toString('hex'),
48
47
  };
49
48
  }
50
49
  }
51
50
  exports.CosmosKeyPair = CosmosKeyPair;
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFPOEI7QUFDOUIsbURBQTZDO0FBQzdDLG1DQUFxQztBQUVyQywyQ0FBc0Q7QUFFdEQ7O0dBRUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxtQ0FBd0I7SUFDekQ7Ozs7T0FJRztJQUNILFlBQVksTUFBdUI7UUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE1BQU0sSUFBSSxHQUFHLG9CQUFXLENBQUMsbUNBQXVCLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxpQkFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSx1QkFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLHNCQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxtQ0FBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87O1FBQ0wsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUM1RCxHQUFHLEVBQUUsTUFBQSxJQUFJLENBQUMsYUFBYSxFQUFFLDBDQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUM7U0FDM0MsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXBDRCxzQ0FvQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZWZhdWx0S2V5cyxcbiAgaXNQcml2YXRlS2V5LFxuICBpc1B1YmxpY0tleSxcbiAgaXNTZWVkLFxuICBLZXlQYWlyT3B0aW9ucyxcbiAgU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHsgREVGQVVMVF9TRUVEX1NJWkVfQllURVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQ29zbW9zIGtleXMgYW5kIGFkZHJlc3MgbWFuYWdlbWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvc21vc0tleVBhaXIgZXh0ZW5kcyBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIge1xuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLiBCeSBkZWZhdWx0LCBjcmVhdGVzIGEga2V5IHBhaXIgd2l0aCBhIHJhbmRvbSBtYXN0ZXIgc2VlZC5cbiAgICogQHBhcmFtIHsgS2V5UGFpck9wdGlvbnMgfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXkgKGV4dGVuZGVkIG9yIHJhdyksIG9yIGEgcHVibGljIGtleVxuICAgKiAgICAgKGV4dGVuZGVkLCBjb21wcmVzc2VkLCBvciB1bmNvbXByZXNzZWQpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihzb3VyY2U/OiBLZXlQYWlyT3B0aW9ucykge1xuICAgIHN1cGVyKHNvdXJjZSk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSByYW5kb21CeXRlcyhERUZBVUxUX1NFRURfU0laRV9CWVRFUyk7XG4gICAgICB0aGlzLmhkTm9kZSA9IGJpcDMyLmZyb21TZWVkKHNlZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNTZWVkKHNvdXJjZSkpIHtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc291cmNlLnNlZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNQcml2YXRlS2V5KHNvdXJjZSkpIHtcbiAgICAgIHRoaXMucmVjb3JkS2V5c0Zyb21Qcml2YXRlS2V5KHNvdXJjZS5wcnYpO1xuICAgIH0gZWxzZSBpZiAoaXNQdWJsaWNLZXkoc291cmNlKSkge1xuICAgICAgdGhpcy5yZWNvcmRLZXlzRnJvbVB1YmxpY0tleShzb3VyY2UucHViKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oZE5vZGUpIHtcbiAgICAgIHRoaXMua2V5UGFpciA9IFNlY3AyNTZrMUV4dGVuZGVkS2V5UGFpci50b0tleVBhaXIodGhpcy5oZE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb3Ntb3MgZGVmYXVsdCBrZXlzIGZvcm1hdDogcmF3IHByaXZhdGUgYW5kIGNvbXByZXNzZWQgcHVibGljIGtleVxuICAgKiBAcmV0dXJucyB7IERlZmF1bHRLZXlzIH0gVGhlIGtleXMgaW4gdGhlIHByb3RvY29sIGRlZmF1bHQga2V5IGZvcm1hdFxuICAgKi9cbiAgZ2V0S2V5cygpOiBEZWZhdWx0S2V5cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogdGhpcy5nZXRQdWJsaWNLZXkoeyBjb21wcmVzc2VkOiB0cnVlIH0pLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHBydjogdGhpcy5nZXRQcml2YXRlS2V5KCk/LnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFPOEI7QUFDOUIsbURBQTZDO0FBQzdDLG1DQUFxQztBQUVyQywyQ0FBc0Q7QUFFdEQ7O0dBRUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxtQ0FBd0I7SUFDekQ7Ozs7T0FJRztJQUNILFlBQVksTUFBdUI7UUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEdBQUcsSUFBQSxvQkFBVyxFQUFDLG1DQUF1QixDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxnQkFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxJQUFBLGlCQUFNLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQU0sSUFBSSxJQUFBLHVCQUFZLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxJQUFJLElBQUEsc0JBQVcsRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsbUNBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDTCxPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzVELEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBcENELHNDQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlZmF1bHRLZXlzLFxuICBpc1ByaXZhdGVLZXksXG4gIGlzUHVibGljS2V5LFxuICBpc1NlZWQsXG4gIEtleVBhaXJPcHRpb25zLFxuICBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBERUZBVUxUX1NFRURfU0laRV9CWVRFUyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBDb3Ntb3Mga2V5cyBhbmQgYWRkcmVzcyBtYW5hZ2VtZW50LlxuICovXG5leHBvcnQgY2xhc3MgQ29zbW9zS2V5UGFpciBleHRlbmRzIFNlY3AyNTZrMUV4dGVuZGVkS2V5UGFpciB7XG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuIEJ5IGRlZmF1bHQsIGNyZWF0ZXMgYSBrZXkgcGFpciB3aXRoIGEgcmFuZG9tIG1hc3RlciBzZWVkLlxuICAgKiBAcGFyYW0geyBLZXlQYWlyT3B0aW9ucyB9IHNvdXJjZSBFaXRoZXIgYSBtYXN0ZXIgc2VlZCwgYSBwcml2YXRlIGtleSAoZXh0ZW5kZWQgb3IgcmF3KSwgb3IgYSBwdWJsaWMga2V5XG4gICAqICAgICAoZXh0ZW5kZWQsIGNvbXByZXNzZWQsIG9yIHVuY29tcHJlc3NlZClcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNvdXJjZT86IEtleVBhaXJPcHRpb25zKSB7XG4gICAgc3VwZXIoc291cmNlKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgY29uc3Qgc2VlZCA9IHJhbmRvbUJ5dGVzKERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTKTtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1NlZWQoc291cmNlKSkge1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tU2VlZChzb3VyY2Uuc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1ByaXZhdGVLZXkoc291cmNlKSkge1xuICAgICAgdGhpcy5yZWNvcmRLZXlzRnJvbVByaXZhdGVLZXkoc291cmNlLnBydik7XG4gICAgfSBlbHNlIGlmIChpc1B1YmxpY0tleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHVibGljS2V5KHNvdXJjZS5wdWIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhkTm9kZSkge1xuICAgICAgdGhpcy5rZXlQYWlyID0gU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLnRvS2V5UGFpcih0aGlzLmhkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvc21vcyBkZWZhdWx0IGtleXMgZm9ybWF0OiByYXcgcHJpdmF0ZSBhbmQgY29tcHJlc3NlZCBwdWJsaWMga2V5XG4gICAqIEByZXR1cm5zIHsgRGVmYXVsdEtleXMgfSBUaGUga2V5cyBpbiB0aGUgcHJvdG9jb2wgZGVmYXVsdCBrZXkgZm9ybWF0XG4gICAqL1xuICBnZXRLZXlzKCk6IERlZmF1bHRLZXlzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiB0aGlzLmdldFB1YmxpY0tleSh7IGNvbXByZXNzZWQ6IHRydWUgfSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHJ2OiB0aGlzLmdldFByaXZhdGVLZXkoKT8udG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,12 +1,13 @@
1
- /// <reference types="node" />
2
1
  import { BaseKey, BaseTransaction, TransactionType } from '@bitgo-beta/sdk-core';
3
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
4
3
  import { CosmosLikeTransaction, TransactionExplanation, TxData } from './iface';
4
+ import { CosmosUtils } from './utils';
5
5
  export declare class CosmosTransaction extends BaseTransaction {
6
6
  protected _cosmosLikeTransaction: CosmosLikeTransaction;
7
7
  protected _accountNumber: number;
8
8
  protected _chainId: string;
9
- constructor(_coinConfig: Readonly<CoinConfig>);
9
+ protected _utils: CosmosUtils;
10
+ constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils);
10
11
  get cosmosLikeTransaction(): CosmosLikeTransaction;
11
12
  set cosmosLikeTransaction(cosmosLikeTransaction: Readonly<CosmosLikeTransaction>);
12
13
  get chainId(): string;
@@ -48,6 +49,16 @@ export declare class CosmosTransaction extends BaseTransaction {
48
49
  * @returns {TransactionExplanation}
49
50
  */
50
51
  explainTransactionInternal(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
52
+ /**
53
+ * Load the input and output data on this transaction using the transaction json
54
+ * if there are outputs. For transactions without outputs (e.g. wallet initializations),
55
+ * this function will not do anything
56
+ */
51
57
  loadInputsAndOutputs(): void;
58
+ /**
59
+ * Sets this transaction payload
60
+ * @param rawTransaction raw transaction in base64 encoded string
61
+ */
62
+ enrichTransactionDetailsFromRawTransaction(rawTransaction: string): void;
52
63
  }
53
64
  //# sourceMappingURL=transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAKf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAO7D,OAAO,EACL,qBAAqB,EAGrB,sBAAsB,EACtB,MAAM,EAEP,MAAM,SAAS,CAAC;AAGjB,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,SAAS,CAAC,sBAAsB,EAAE,qBAAqB,CAAC;IACxD,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEf,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,qBAAqB,IAAI,qBAAqB,CAEjD;IAED,IAAI,qBAAqB,CAAC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EAE/E;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAE1B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,MAAM,EAEtC;IAED,mBAAmB;IACnB,IAAI,EAAE,IAAI,MAAM,CAOf;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAoBhB;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM;IAK9B,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAkB5C;;;OAGG;IACH,IAAI,eAAe,CAAC,eAAe,EAAE,eAAe,EAEnD;IAED;;;OAGG;IACH,SAAS,IAAI,MAAM;IASnB,mBAAmB;IACnB,IAAI,eAAe,IAAI,MAAM,CAI5B;IAED;;;;;;OAMG;IACH,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;IA+D3G,oBAAoB,IAAI,IAAI;CAsD7B"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAKf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAK7D,OAAO,EACL,qBAAqB,EAKrB,sBAAsB,EACtB,MAAM,EAEP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,SAAS,CAAC,sBAAsB,EAAE,qBAAqB,CAAC;IACxD,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE3B,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;gBAElB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW;IAKjE,IAAI,qBAAqB,IAAI,qBAAqB,CAEjD;IAED,IAAI,qBAAqB,CAAC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EAE/E;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAE1B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,aAAa,CAAC,aAAa,EAAE,MAAM,EAEtC;IAED,mBAAmB;IACnB,IAAI,EAAE,IAAI,MAAM,CAOf;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAoBhB;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM;IAK9B,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAkB5C;;;OAGG;IACH,IAAI,eAAe,CAAC,eAAe,EAAE,eAAe,EAEnD;IAED;;;OAGG;IACH,SAAS,IAAI,MAAM;IAanB,mBAAmB;IACnB,IAAI,eAAe,IAAI,MAAM,CAI5B;IAED;;;;;;OAMG;IACH,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;IAyF3G;;;;OAIG;IACH,oBAAoB,IAAI,IAAI;IA2F5B;;;OAGG;IACH,0CAA0C,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;CAiBzE"}
@@ -6,10 +6,10 @@ const encoding_1 = require("@cosmjs/encoding");
6
6
  const proto_signing_1 = require("@cosmjs/proto-signing");
7
7
  const tx_1 = require("cosmjs-types/cosmos/tx/v1beta1/tx");
8
8
  const constants_1 = require("./constants");
9
- const utils_1 = require("./utils");
10
9
  class CosmosTransaction extends sdk_core_1.BaseTransaction {
11
- constructor(_coinConfig) {
10
+ constructor(_coinConfig, utils) {
12
11
  super(_coinConfig);
12
+ this._utils = utils;
13
13
  }
14
14
  get cosmosLikeTransaction() {
15
15
  return this._cosmosLikeTransaction;
@@ -31,11 +31,10 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
31
31
  }
32
32
  /** @inheritDoc **/
33
33
  get id() {
34
- var _a;
35
34
  if (this._id) {
36
35
  return this._id;
37
36
  }
38
- else if (((_a = this._cosmosLikeTransaction) === null || _a === void 0 ? void 0 : _a.hash) !== undefined) {
37
+ else if (this._cosmosLikeTransaction?.hash !== undefined) {
39
38
  return this._cosmosLikeTransaction.hash;
40
39
  }
41
40
  return constants_1.UNAVAILABLE_TEXT;
@@ -108,17 +107,16 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
108
107
  * @returns {string} serialized base64 encoded transaction
109
108
  */
110
109
  serialize() {
111
- var _a;
112
- const txRaw = utils_1.default.createTxRawFromCosmosLikeTransaction(this.cosmosLikeTransaction);
113
- if (((_a = this.cosmosLikeTransaction) === null || _a === void 0 ? void 0 : _a.publicKey) !== undefined && this._signatures.length > 0) {
114
- const signedRawTx = utils_1.default.createSignedTxRaw(this.cosmosLikeTransaction.publicKey, this._signatures[0], txRaw);
115
- return encoding_1.toBase64(tx_1.TxRaw.encode(signedRawTx).finish());
110
+ const txRaw = this._utils.createTxRawFromCosmosLikeTransaction(this.cosmosLikeTransaction);
111
+ if (this.cosmosLikeTransaction?.publicKey !== undefined && this._signatures.length > 0) {
112
+ const signedRawTx = this._utils.createSignedTxRaw(this.cosmosLikeTransaction.publicKey, this._signatures[0], txRaw);
113
+ return (0, encoding_1.toBase64)(tx_1.TxRaw.encode(signedRawTx).finish());
116
114
  }
117
- return encoding_1.toBase64(tx_1.TxRaw.encode(txRaw).finish());
115
+ return (0, encoding_1.toBase64)(tx_1.TxRaw.encode(txRaw).finish());
118
116
  }
119
117
  /** @inheritdoc **/
120
118
  get signablePayload() {
121
- return Buffer.from(proto_signing_1.makeSignBytes(utils_1.default.createSignDoc(this.cosmosLikeTransaction, this._accountNumber, this._chainId)));
119
+ return Buffer.from((0, proto_signing_1.makeSignBytes)(this._utils.createSignDoc(this.cosmosLikeTransaction, this._accountNumber, this._chainId)));
122
120
  }
123
121
  /**
124
122
  * Returns a complete explanation for a transfer transaction
@@ -129,51 +127,77 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
129
127
  */
130
128
  explainTransactionInternal(json, explanationResult) {
131
129
  let outputs;
132
- let message;
133
130
  let outputAmount;
134
131
  switch (json.type) {
135
132
  case sdk_core_1.TransactionType.Send:
136
133
  explanationResult.type = sdk_core_1.TransactionType.Send;
137
- message = json.sendMessages[0].value;
138
- outputAmount = message.amount[0].amount;
139
- outputs = [
140
- {
141
- address: message.toAddress,
142
- amount: outputAmount,
143
- },
144
- ];
134
+ outputAmount = BigInt(0);
135
+ outputs = json.sendMessages.map((message) => {
136
+ const sendMessage = message.value;
137
+ outputAmount = outputAmount + BigInt(sendMessage.amount[0].amount);
138
+ return {
139
+ address: sendMessage.toAddress,
140
+ amount: sendMessage.amount[0].amount,
141
+ };
142
+ });
145
143
  break;
146
144
  case sdk_core_1.TransactionType.StakingActivate:
147
145
  explanationResult.type = sdk_core_1.TransactionType.StakingActivate;
148
- message = json.sendMessages[0].value;
149
- outputAmount = message.amount.amount;
150
- outputs = [
151
- {
152
- address: message.validatorAddress,
153
- amount: outputAmount,
154
- },
155
- ];
146
+ outputAmount = BigInt(0);
147
+ outputs = json.sendMessages.map((message) => {
148
+ const delegateMessage = message.value;
149
+ outputAmount = outputAmount + BigInt(delegateMessage.amount.amount);
150
+ return {
151
+ address: delegateMessage.validatorAddress,
152
+ amount: delegateMessage.amount.amount,
153
+ };
154
+ });
156
155
  break;
157
156
  case sdk_core_1.TransactionType.StakingDeactivate:
158
157
  explanationResult.type = sdk_core_1.TransactionType.StakingDeactivate;
159
- message = json.sendMessages[0].value;
160
- outputAmount = message.amount.amount;
161
- outputs = [
162
- {
163
- address: message.validatorAddress,
164
- amount: outputAmount,
165
- },
166
- ];
158
+ outputAmount = BigInt(0);
159
+ outputs = json.sendMessages.map((message) => {
160
+ const delegateMessage = message.value;
161
+ outputAmount = outputAmount + BigInt(delegateMessage.amount.amount);
162
+ return {
163
+ address: delegateMessage.validatorAddress,
164
+ amount: delegateMessage.amount.amount,
165
+ };
166
+ });
167
167
  break;
168
168
  case sdk_core_1.TransactionType.StakingWithdraw:
169
169
  explanationResult.type = sdk_core_1.TransactionType.StakingWithdraw;
170
- message = json.sendMessages[0].value;
171
- outputs = [
172
- {
173
- address: message.validatorAddress,
170
+ outputs = json.sendMessages.map((message) => {
171
+ const withdrawMessage = message.value;
172
+ return {
173
+ address: withdrawMessage.validatorAddress,
174
174
  amount: constants_1.UNAVAILABLE_TEXT,
175
- },
176
- ];
175
+ };
176
+ });
177
+ break;
178
+ case sdk_core_1.TransactionType.ContractCall:
179
+ explanationResult.type = sdk_core_1.TransactionType.ContractCall;
180
+ outputAmount = BigInt(0);
181
+ outputs = json.sendMessages.map((message) => {
182
+ const executeContractMessage = message.value;
183
+ outputAmount = outputAmount + BigInt(executeContractMessage.funds?.[0]?.amount ?? '0');
184
+ return {
185
+ address: executeContractMessage.contract,
186
+ amount: executeContractMessage.funds?.[0]?.amount ?? '0',
187
+ };
188
+ });
189
+ break;
190
+ case sdk_core_1.TransactionType.StakingRedelegate:
191
+ explanationResult.type = sdk_core_1.TransactionType.StakingRedelegate;
192
+ outputAmount = BigInt(0);
193
+ outputs = json.sendMessages.map((message) => {
194
+ const redelegateMessage = message.value;
195
+ outputAmount = outputAmount + BigInt(redelegateMessage.amount.amount);
196
+ return {
197
+ address: redelegateMessage.validatorDstAddress,
198
+ amount: redelegateMessage.amount.amount,
199
+ };
200
+ });
177
201
  break;
178
202
  default:
179
203
  throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
@@ -185,10 +209,15 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
185
209
  }
186
210
  return {
187
211
  ...explanationResult,
188
- outputAmount,
212
+ outputAmount: outputAmount?.toString(),
189
213
  outputs,
190
214
  };
191
215
  }
216
+ /**
217
+ * Load the input and output data on this transaction using the transaction json
218
+ * if there are outputs. For transactions without outputs (e.g. wallet initializations),
219
+ * this function will not do anything
220
+ */
192
221
  loadInputsAndOutputs() {
193
222
  if (this.type === undefined || !this.cosmosLikeTransaction) {
194
223
  throw new sdk_core_1.InvalidTransactionError('Transaction type or cosmosLikeTransaction is not set');
@@ -197,43 +226,79 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
197
226
  const inputs = [];
198
227
  switch (this.type) {
199
228
  case sdk_core_1.TransactionType.Send:
200
- const message = this.cosmosLikeTransaction.sendMessages[0].value;
201
- inputs.push({
202
- address: message.fromAddress,
203
- value: message.amount[0].amount,
204
- coin: this._coinConfig.name,
205
- });
206
- outputs.push({
207
- address: message.toAddress,
208
- value: message.amount[0].amount,
209
- coin: this._coinConfig.name,
229
+ this.cosmosLikeTransaction.sendMessages.forEach((message) => {
230
+ const sendMessage = message.value;
231
+ inputs.push({
232
+ address: sendMessage.fromAddress,
233
+ value: sendMessage.amount[0].amount,
234
+ coin: this._coinConfig.name,
235
+ });
236
+ outputs.push({
237
+ address: sendMessage.toAddress,
238
+ value: sendMessage.amount[0].amount,
239
+ coin: this._coinConfig.name,
240
+ });
210
241
  });
211
242
  break;
212
243
  case sdk_core_1.TransactionType.StakingActivate:
213
244
  case sdk_core_1.TransactionType.StakingDeactivate:
214
- const delegateMessage = this.cosmosLikeTransaction.sendMessages[0].value;
215
- inputs.push({
216
- address: delegateMessage.delegatorAddress,
217
- value: delegateMessage.amount.amount,
218
- coin: this._coinConfig.name,
219
- });
220
- outputs.push({
221
- address: delegateMessage.validatorAddress,
222
- value: delegateMessage.amount.amount,
223
- coin: this._coinConfig.name,
245
+ this.cosmosLikeTransaction.sendMessages.forEach((message) => {
246
+ const delegateMessage = message.value;
247
+ inputs.push({
248
+ address: delegateMessage.delegatorAddress,
249
+ value: delegateMessage.amount.amount,
250
+ coin: this._coinConfig.name,
251
+ });
252
+ outputs.push({
253
+ address: delegateMessage.validatorAddress,
254
+ value: delegateMessage.amount.amount,
255
+ coin: this._coinConfig.name,
256
+ });
224
257
  });
225
258
  break;
226
259
  case sdk_core_1.TransactionType.StakingWithdraw:
227
- const withdrawMessage = this.cosmosLikeTransaction.sendMessages[0].value;
228
- inputs.push({
229
- address: withdrawMessage.delegatorAddress,
230
- value: constants_1.UNAVAILABLE_TEXT,
231
- coin: this._coinConfig.name,
260
+ this.cosmosLikeTransaction.sendMessages.forEach((message) => {
261
+ const withdrawMessage = message.value;
262
+ inputs.push({
263
+ address: withdrawMessage.delegatorAddress,
264
+ value: constants_1.UNAVAILABLE_TEXT,
265
+ coin: this._coinConfig.name,
266
+ });
267
+ outputs.push({
268
+ address: withdrawMessage.validatorAddress,
269
+ value: constants_1.UNAVAILABLE_TEXT,
270
+ coin: this._coinConfig.name,
271
+ });
272
+ });
273
+ break;
274
+ case sdk_core_1.TransactionType.ContractCall:
275
+ this.cosmosLikeTransaction.sendMessages.forEach((message) => {
276
+ const executeContractMessage = message.value;
277
+ inputs.push({
278
+ address: executeContractMessage.sender,
279
+ value: executeContractMessage.funds?.[0]?.amount ?? '0',
280
+ coin: this._coinConfig.name,
281
+ });
282
+ outputs.push({
283
+ address: executeContractMessage.contract,
284
+ value: executeContractMessage.funds?.[0]?.amount ?? '0',
285
+ coin: this._coinConfig.name,
286
+ });
232
287
  });
233
- outputs.push({
234
- address: withdrawMessage.validatorAddress,
235
- value: constants_1.UNAVAILABLE_TEXT,
236
- coin: this._coinConfig.name,
288
+ break;
289
+ case sdk_core_1.TransactionType.StakingRedelegate:
290
+ this.cosmosLikeTransaction.sendMessages.forEach((message) => {
291
+ const redelegateMessage = message.value;
292
+ inputs.push({
293
+ address: redelegateMessage.delegatorAddress,
294
+ value: redelegateMessage.amount.amount,
295
+ coin: this._coinConfig.name,
296
+ });
297
+ outputs.push({
298
+ address: redelegateMessage.validatorDstAddress,
299
+ value: redelegateMessage.amount.amount,
300
+ coin: this._coinConfig.name,
301
+ });
237
302
  });
238
303
  break;
239
304
  default:
@@ -242,6 +307,27 @@ class CosmosTransaction extends sdk_core_1.BaseTransaction {
242
307
  this._inputs = inputs;
243
308
  this._outputs = outputs;
244
309
  }
310
+ /**
311
+ * Sets this transaction payload
312
+ * @param rawTransaction raw transaction in base64 encoded string
313
+ */
314
+ enrichTransactionDetailsFromRawTransaction(rawTransaction) {
315
+ if (this._utils.isValidHexString(rawTransaction)) {
316
+ this.cosmosLikeTransaction = this._utils.deserializeTransaction((0, encoding_1.toBase64)((0, encoding_1.fromHex)(rawTransaction)));
317
+ }
318
+ else {
319
+ this.cosmosLikeTransaction = this._utils.deserializeTransaction(rawTransaction);
320
+ }
321
+ if (this.cosmosLikeTransaction.signature) {
322
+ this.addSignature(Buffer.from(this.cosmosLikeTransaction.signature).toString('hex'));
323
+ }
324
+ const typeUrl = this.cosmosLikeTransaction.sendMessages[0].typeUrl;
325
+ const transactionType = this._utils.getTransactionTypeFromTypeUrl(typeUrl);
326
+ if (transactionType === undefined) {
327
+ throw new Error('Transaction type is not supported ' + typeUrl);
328
+ }
329
+ this.transactionType = transactionType;
330
+ }
245
331
  }
246
332
  exports.CosmosTransaction = CosmosTransaction;
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQVE4QjtBQUU5QiwrQ0FBNEM7QUFDNUMseURBQXNEO0FBQ3RELDBEQUEwRDtBQUUxRCwyQ0FBK0M7QUFVL0MsbUNBQTRCO0FBRTVCLE1BQWEsaUJBQWtCLFNBQVEsMEJBQWU7SUFLcEQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLHFCQUFxQixDQUFDLHFCQUFzRDtRQUM5RSxJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsT0FBZTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxhQUFxQjtRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztJQUN0QyxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLElBQUksRUFBRTs7UUFDSixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDakI7YUFBTSxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsc0JBQXNCLDBDQUFFLElBQUksTUFBSyxTQUFTLEVBQUU7WUFDMUQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO1NBQ3pDO1FBQ0Qs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QUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFqUUQsOENBaVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgdG9CYXNlNjQgfSBmcm9tICdAY29zbWpzL2VuY29kaW5nJztcbmltcG9ydCB7IG1ha2VTaWduQnl0ZXMgfSBmcm9tICdAY29zbWpzL3Byb3RvLXNpZ25pbmcnO1xuaW1wb3J0IHsgVHhSYXcgfSBmcm9tICdjb3NtanMtdHlwZXMvY29zbW9zL3R4L3YxYmV0YTEvdHgnO1xuXG5pbXBvcnQgeyBVTkFWQUlMQUJMRV9URVhUIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5pbXBvcnQge1xuICBDb3Ntb3NMaWtlVHJhbnNhY3Rpb24sXG4gIERlbGVnYXRlT3JVbmRlbGVnZXRlTWVzc2FnZSxcbiAgU2VuZE1lc3NhZ2UsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFR4RGF0YSxcbiAgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZSxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDb3Ntb3NUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfY29zbW9zTGlrZVRyYW5zYWN0aW9uOiBDb3Ntb3NMaWtlVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfYWNjb3VudE51bWJlcjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2NoYWluSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgY29zbW9zTGlrZVRyYW5zYWN0aW9uKCk6IENvc21vc0xpa2VUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldCBjb3Ntb3NMaWtlVHJhbnNhY3Rpb24oY29zbW9zTGlrZVRyYW5zYWN0aW9uOiBSZWFkb25seTxDb3Ntb3NMaWtlVHJhbnNhY3Rpb24+KSB7XG4gICAgdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uID0gY29zbW9zTGlrZVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgZ2V0IGNoYWluSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhaW5JZDtcbiAgfVxuXG4gIHNldCBjaGFpbklkKGNoYWluSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX2NoYWluSWQgPSBjaGFpbklkO1xuICB9XG5cbiAgZ2V0IGFjY291bnROdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWNjb3VudE51bWJlcjtcbiAgfVxuXG4gIHNldCBhY2NvdW50TnVtYmVyKGFjY291bnROdW1iZXI6IG51bWJlcikge1xuICAgIHRoaXMuX2FjY291bnROdW1iZXIgPSBhY2NvdW50TnVtYmVyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5faWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbj8uaGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uLmhhc2g7XG4gICAgfVxuICAgIHJldHVybiBVTkFWQUlMQUJMRV9URVhUO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgdHggPSB0aGlzLl9jb3Ntb3NMaWtlVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIHNlcXVlbmNlOiB0eC5zZXF1ZW5jZSxcbiAgICAgIHNlbmRNZXNzYWdlczogdHguc2VuZE1lc3NhZ2VzLFxuICAgICAgZ2FzQnVkZ2V0OiB0eC5nYXNCdWRnZXQsXG4gICAgICBwdWJsaWNLZXk6IHR4LnB1YmxpY0tleSxcbiAgICAgIHNpZ25hdHVyZTogdHguc2lnbmF0dXJlLFxuICAgICAgYWNjb3VudE51bWJlcjogdGhpcy5fYWNjb3VudE51bWJlcixcbiAgICAgIGNoYWluSWQ6IHRoaXMuX2NoYWluSWQsXG4gICAgICBoYXNoOiB0eC5oYXNoLFxuICAgICAgbWVtbzogdHgubWVtbyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpZ25hdHVyZSB0byB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSBpbiBoZXggZm9ybWF0XG4gICAqL1xuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW107XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcblxuICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQgfSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbkludGVybmFsKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICBzZXQgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdGhlIHRyYW5zYWN0aW9uIHRvIGEgSlNPTiBzdHJpbmdcbiAgICogQHJldHVybnMge3N0cmluZ30gc2VyaWFsaXplZCBiYXNlNjQgZW5jb2RlZCB0cmFuc2FjdGlvblxuICAgKi9cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdHhSYXcgPSB1dGlscy5jcmVhdGVUeFJhd0Zyb21Db3Ntb3NMaWtlVHJhbnNhY3Rpb24odGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbj8ucHVibGljS2V5ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzaWduZWRSYXdUeCA9IHV0aWxzLmNyZWF0ZVNpZ25lZFR4UmF3KHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnB1YmxpY0tleSwgdGhpcy5fc2lnbmF0dXJlc1swXSwgdHhSYXcpO1xuICAgICAgcmV0dXJuIHRvQmFzZTY0KFR4UmF3LmVuY29kZShzaWduZWRSYXdUeCkuZmluaXNoKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdG9CYXNlNjQoVHhSYXcuZW5jb2RlKHR4UmF3KS5maW5pc2goKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKiovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICBtYWtlU2lnbkJ5dGVzKHV0aWxzLmNyZWF0ZVNpZ25Eb2ModGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24sIHRoaXMuX2FjY291bnROdW1iZXIsIHRoaXMuX2NoYWluSWQpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsZXRlIGV4cGxhbmF0aW9uIGZvciBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG9uZSBtZXNzYWdlIHBlciB0cmFuc2Zlci5cbiAgICogQHBhcmFtIHtUeERhdGF9IGpzb24gVGhlIHRyYW5zYWN0aW9uIGRhdGEgaW4ganNvbiBmb3JtYXRcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufSBleHBsYW5hdGlvblJlc3VsdCBUaGUgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24gdG8gYmUgY29tcGxldGVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufVxuICAgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uSW50ZXJuYWwoanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGxldCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgIGxldCBtZXNzYWdlO1xuICAgIGxldCBvdXRwdXRBbW91bnQ7XG4gICAgc3dpdGNoIChqc29uLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIGV4cGxhbmF0aW9uUmVzdWx0LnR5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICAgICAgbWVzc2FnZSA9IGpzb24uc2VuZE1lc3NhZ2VzWzBdLnZhbHVlIGFzIFNlbmRNZXNzYWdlO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBtZXNzYWdlLmFtb3VudFswXS5hbW91bnQ7XG4gICAgICAgIG91dHB1dHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogbWVzc2FnZS50b0FkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU7XG4gICAgICAgIG1lc3NhZ2UgPSBqc29uLnNlbmRNZXNzYWdlc1swXS52YWx1ZSBhcyBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2U7XG4gICAgICAgIG91dHB1dEFtb3VudCA9IG1lc3NhZ2UuYW1vdW50LmFtb3VudDtcbiAgICAgICAgb3V0cHV0cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBtZXNzYWdlLnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IG91dHB1dEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICAgICAgICBtZXNzYWdlID0ganNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUgYXMgRGVsZWdhdGVPclVuZGVsZWdldGVNZXNzYWdlO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBtZXNzYWdlLmFtb3VudC5hbW91bnQ7XG4gICAgICAgIG91dHB1dHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogbWVzc2FnZS52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIGV4cGxhbmF0aW9uUmVzdWx0LnR5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICAgICAgICBtZXNzYWdlID0ganNvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUgYXMgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZTtcbiAgICAgICAgb3V0cHV0cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBtZXNzYWdlLnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICBpZiAoanNvbi5tZW1vKSB7XG4gICAgICBvdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgICBvdXRwdXQubWVtbyA9IGpzb24ubWVtbztcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBvdXRwdXRzLFxuICAgIH07XG4gIH1cblxuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50eXBlID09PSB1bmRlZmluZWQgfHwgIXRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHR5cGUgb3IgY29zbW9zTGlrZVRyYW5zYWN0aW9uIGlzIG5vdCBzZXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzOiBFbnRyeVtdID0gW107XG4gICAgY29uc3QgaW5wdXRzOiBFbnRyeVtdID0gW107XG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXNbMF0udmFsdWUgYXMgU2VuZE1lc3NhZ2U7XG4gICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBtZXNzYWdlLmZyb21BZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBtZXNzYWdlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBtZXNzYWdlLnRvQWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogbWVzc2FnZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlTWVzc2FnZSA9IHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlc1swXS52YWx1ZSBhcyBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2U7XG4gICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZU1lc3NhZ2UuZGVsZWdhdG9yQWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZU1lc3NhZ2UudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3TWVzc2FnZSA9IHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlc1swXS52YWx1ZSBhcyBXaXRoZHJhd0RlbGVnYXRvclJld2FyZHNNZXNzYWdlO1xuICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgYWRkcmVzczogd2l0aGRyYXdNZXNzYWdlLmRlbGVnYXRvckFkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiB3aXRoZHJhd01lc3NhZ2UudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogVU5BVkFJTEFCTEVfVEVYVCxcbiAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgICB0aGlzLl9vdXRwdXRzID0gb3V0cHV0cztcbiAgfVxufVxuIl19
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQVE4QjtBQUU5QiwrQ0FBcUQ7QUFDckQseURBQXNEO0FBQ3RELDBEQUEwRDtBQUMxRCwyQ0FBK0M7QUFhL0MsTUFBYSxpQkFBa0IsU0FBUSwwQkFBZTtJQU9wRCxZQUFZLFdBQWlDLEVBQUUsS0FBa0I7UUFDL0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxxQkFBc0Q7UUFDOUUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQWU7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsYUFBcUI7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFDdEMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFJLEVBQUU7UUFDSixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNsQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNELE9BQU8sSUFBSSxD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O1FBQ2xFLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUFqV0QsOENBaVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgZnJvbUhleCwgdG9CYXNlNjQgfSBmcm9tICdAY29zbWpzL2VuY29kaW5nJztcbmltcG9ydCB7IG1ha2VTaWduQnl0ZXMgfSBmcm9tICdAY29zbWpzL3Byb3RvLXNpZ25pbmcnO1xuaW1wb3J0IHsgVHhSYXcgfSBmcm9tICdjb3NtanMtdHlwZXMvY29zbW9zL3R4L3YxYmV0YTEvdHgnO1xuaW1wb3J0IHsgVU5BVkFJTEFCTEVfVEVYVCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIENvc21vc0xpa2VUcmFuc2FjdGlvbixcbiAgRGVsZWdhdGVPclVuZGVsZWdldGVNZXNzYWdlLFxuICBFeGVjdXRlQ29udHJhY3RNZXNzYWdlLFxuICBSZWRlbGVnYXRlTWVzc2FnZSxcbiAgU2VuZE1lc3NhZ2UsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFR4RGF0YSxcbiAgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZSxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBDb3Ntb3NVdGlscyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQ29zbW9zVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX2Nvc21vc0xpa2VUcmFuc2FjdGlvbjogQ29zbW9zTGlrZVRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX2FjY291bnROdW1iZXI6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9jaGFpbklkOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF91dGlsczogQ29zbW9zVXRpbHM7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+LCB1dGlsczogQ29zbW9zVXRpbHMpIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdXRpbHMgPSB1dGlscztcbiAgfVxuXG4gIGdldCBjb3Ntb3NMaWtlVHJhbnNhY3Rpb24oKTogQ29zbW9zTGlrZVRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgc2V0IGNvc21vc0xpa2VUcmFuc2FjdGlvbihjb3Ntb3NMaWtlVHJhbnNhY3Rpb246IFJlYWRvbmx5PENvc21vc0xpa2VUcmFuc2FjdGlvbj4pIHtcbiAgICB0aGlzLl9jb3Ntb3NMaWtlVHJhbnNhY3Rpb24gPSBjb3Ntb3NMaWtlVHJhbnNhY3Rpb247XG4gIH1cblxuICBnZXQgY2hhaW5JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFpbklkO1xuICB9XG5cbiAgc2V0IGNoYWluSWQoY2hhaW5JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fY2hhaW5JZCA9IGNoYWluSWQ7XG4gIH1cblxuICBnZXQgYWNjb3VudE51bWJlcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY2NvdW50TnVtYmVyO1xuICB9XG5cbiAgc2V0IGFjY291bnROdW1iZXIoYWNjb3VudE51bWJlcjogbnVtYmVyKSB7XG4gICAgdGhpcy5fYWNjb3VudE51bWJlciA9IGFjY291bnROdW1iZXI7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9pZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uPy5oYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uaGFzaDtcbiAgICB9XG4gICAgcmV0dXJuIFVOQVZBSUxBQkxFX1RFWFQ7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fY29zbW9zTGlrZVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCB0eCA9IHRoaXMuX2Nvc21vc0xpa2VUcmFuc2FjdGlvbjtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAgc2VxdWVuY2U6IHR4LnNlcXVlbmNlLFxuICAgICAgc2VuZE1lc3NhZ2VzOiB0eC5zZW5kTWVzc2FnZXMsXG4gICAgICBnYXNCdWRnZXQ6IHR4Lmdhc0J1ZGdldCxcbiAgICAgIHB1YmxpY0tleTogdHgucHVibGljS2V5LFxuICAgICAgc2lnbmF0dXJlOiB0eC5zaWduYXR1cmUsXG4gICAgICBhY2NvdW50TnVtYmVyOiB0aGlzLl9hY2NvdW50TnVtYmVyLFxuICAgICAgY2hhaW5JZDogdGhpcy5fY2hhaW5JZCxcbiAgICAgIGhhc2g6IHR4Lmhhc2gsXG4gICAgICBtZW1vOiB0eC5tZW1vLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2lnbmF0dXJlIHRvIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIGluIGhleCBmb3JtYXRcbiAgICovXG4gIGFkZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZykge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbXTtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtdO1xuXG4gICAgY29uc3QgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gPSB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQ6ICcwJyxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBmZWU6IHsgZmVlOiB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uSW50ZXJuYWwocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldCB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gdG8gYSBKU09OIHN0cmluZ1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzZXJpYWxpemVkIGJhc2U2NCBlbmNvZGVkIHRyYW5zYWN0aW9uXG4gICAqL1xuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eFJhdyA9IHRoaXMuX3V0aWxzLmNyZWF0ZVR4UmF3RnJvbUNvc21vc0xpa2VUcmFuc2FjdGlvbih0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbik7XG4gICAgaWYgKHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uPy5wdWJsaWNLZXkgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9zaWduYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNpZ25lZFJhd1R4ID0gdGhpcy5fdXRpbHMuY3JlYXRlU2lnbmVkVHhSYXcoXG4gICAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlc1swXSxcbiAgICAgICAgdHhSYXdcbiAgICAgICk7XG4gICAgICByZXR1cm4gdG9CYXNlNjQoVHhSYXcuZW5jb2RlKHNpZ25lZFJhd1R4KS5maW5pc2goKSk7XG4gICAgfVxuICAgIHJldHVybiB0b0Jhc2U2NChUeFJhdy5lbmNvZGUodHhSYXcpLmZpbmlzaCgpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqKi9cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICAgIG1ha2VTaWduQnl0ZXModGhpcy5fdXRpbHMuY3JlYXRlU2lnbkRvYyh0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbiwgdGhpcy5fYWNjb3VudE51bWJlciwgdGhpcy5fY2hhaW5JZCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tcGxldGUgZXhwbGFuYXRpb24gZm9yIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb25cbiAgICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgb25lIG1lc3NhZ2UgcGVyIHRyYW5zZmVyLlxuICAgKiBAcGFyYW0ge1R4RGF0YX0ganNvbiBUaGUgdHJhbnNhY3Rpb24gZGF0YSBpbiBqc29uIGZvcm1hdFxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhbmF0aW9uUmVzdWx0IFRoZSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbiB0byBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259XG4gICAqL1xuICBleHBsYWluVHJhbnNhY3Rpb25JbnRlcm5hbChqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgbGV0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgbGV0IG91dHB1dEFtb3VudDtcbiAgICBzd2l0Y2ggKGpzb24udHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgZXhwbGFuYXRpb25SZXN1bHQudHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBCaWdJbnQoMCk7XG4gICAgICAgIG91dHB1dHMgPSBqc29uLnNlbmRNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBzZW5kTWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgU2VuZE1lc3NhZ2U7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50ICsgQmlnSW50KHNlbmRNZXNzYWdlLmFtb3VudFswXS5hbW91bnQpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRyZXNzOiBzZW5kTWVzc2FnZS50b0FkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHNlbmRNZXNzYWdlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTtcbiAgICAgICAgb3V0cHV0QW1vdW50ID0gQmlnSW50KDApO1xuICAgICAgICBvdXRwdXRzID0ganNvbi5zZW5kTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVsZWdhdGVNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2U7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50ICsgQmlnSW50KGRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogZGVsZWdhdGVNZXNzYWdlLnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IGRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBCaWdJbnQoMCk7XG4gICAgICAgIG91dHB1dHMgPSBqc29uLnNlbmRNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBkZWxlZ2F0ZU1lc3NhZ2UgPSBtZXNzYWdlLnZhbHVlIGFzIERlbGVnYXRlT3JVbmRlbGVnZXRlTWVzc2FnZTtcbiAgICAgICAgICBvdXRwdXRBbW91bnQgPSBvdXRwdXRBbW91bnQgKyBCaWdJbnQoZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRyZXNzOiBkZWxlZ2F0ZU1lc3NhZ2UudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3OlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdztcbiAgICAgICAgb3V0cHV0cyA9IGpzb24uc2VuZE1lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdpdGhkcmF3TWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogd2l0aGRyYXdNZXNzYWdlLnZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDtcbiAgICAgICAgb3V0cHV0QW1vdW50ID0gQmlnSW50KDApO1xuICAgICAgICBvdXRwdXRzID0ganNvbi5zZW5kTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgRXhlY3V0ZUNvbnRyYWN0TWVzc2FnZTtcbiAgICAgICAgICBvdXRwdXRBbW91bnQgPSBvdXRwdXRBbW91bnQgKyBCaWdJbnQoZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZS5mdW5kcz8uWzBdPy5hbW91bnQgPz8gJzAnKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkcmVzczogZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZS5jb250cmFjdCxcbiAgICAgICAgICAgIGFtb3VudDogZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZS5mdW5kcz8uWzBdPy5hbW91bnQgPz8gJzAnLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdSZWRlbGVnYXRlOlxuICAgICAgICBleHBsYW5hdGlvblJlc3VsdC50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdSZWRlbGVnYXRlO1xuICAgICAgICBvdXRwdXRBbW91bnQgPSBCaWdJbnQoMCk7XG4gICAgICAgIG91dHB1dHMgPSBqc29uLnNlbmRNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCByZWRlbGVnYXRlTWVzc2FnZSA9IG1lc3NhZ2UudmFsdWUgYXMgUmVkZWxlZ2F0ZU1lc3NhZ2U7XG4gICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50ICsgQmlnSW50KHJlZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWRlbGVnYXRlTWVzc2FnZS52YWxpZGF0b3JEc3RBZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiByZWRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIGlmIChqc29uLm1lbW8pIHtcbiAgICAgIG91dHB1dHMuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgICAgIG91dHB1dC5tZW1vID0ganNvbi5tZW1vO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0QW1vdW50Py50b1N0cmluZygpLFxuICAgICAgb3V0cHV0cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uIHVzaW5nIHRoZSB0cmFuc2FjdGlvbiBqc29uXG4gICAqIGlmIHRoZXJlIGFyZSBvdXRwdXRzLiBGb3IgdHJhbnNhY3Rpb25zIHdpdGhvdXQgb3V0cHV0cyAoZS5nLiB3YWxsZXQgaW5pdGlhbGl6YXRpb25zKSxcbiAgICogdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBkbyBhbnl0aGluZ1xuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG9yIGNvc21vc0xpa2VUcmFuc2FjdGlvbiBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0czogRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGlucHV0czogRW50cnlbXSA9IFtdO1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNlbmRNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBTZW5kTWVzc2FnZTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBzZW5kTWVzc2FnZS5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBzZW5kTWVzc2FnZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBzZW5kTWVzc2FnZS50b0FkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogc2VuZE1lc3NhZ2UuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVsZWdhdGVNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2U7XG4gICAgICAgICAgaW5wdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogZGVsZWdhdGVNZXNzYWdlLmRlbGVnYXRvckFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGRlbGVnYXRlTWVzc2FnZS52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IGRlbGVnYXRlTWVzc2FnZS5hbW91bnQuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2l0aGRyYXdNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBXaXRoZHJhd0RlbGVnYXRvclJld2FyZHNNZXNzYWdlO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHdpdGhkcmF3TWVzc2FnZS5kZWxlZ2F0b3JBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHdpdGhkcmF3TWVzc2FnZS52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDpcbiAgICAgICAgdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24uc2VuZE1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBleGVjdXRlQ29udHJhY3RNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBFeGVjdXRlQ29udHJhY3RNZXNzYWdlO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGV4ZWN1dGVDb250cmFjdE1lc3NhZ2Uuc2VuZGVyLFxuICAgICAgICAgICAgdmFsdWU6IGV4ZWN1dGVDb250cmFjdE1lc3NhZ2UuZnVuZHM/LlswXT8uYW1vdW50ID8/ICcwJyxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogZXhlY3V0ZUNvbnRyYWN0TWVzc2FnZS5jb250cmFjdCxcbiAgICAgICAgICAgIHZhbHVlOiBleGVjdXRlQ29udHJhY3RNZXNzYWdlLmZ1bmRzPy5bMF0/LmFtb3VudCA/PyAnMCcsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdSZWRlbGVnYXRlOlxuICAgICAgICB0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZGVsZWdhdGVNZXNzYWdlID0gbWVzc2FnZS52YWx1ZSBhcyBSZWRlbGVnYXRlTWVzc2FnZTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWRlbGVnYXRlTWVzc2FnZS5kZWxlZ2F0b3JBZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHJlZGVsZWdhdGVNZXNzYWdlLmFtb3VudC5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlZGVsZWdhdGVNZXNzYWdlLnZhbGlkYXRvckRzdEFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogcmVkZWxlZ2F0ZU1lc3NhZ2UuYW1vdW50LmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvbiByYXcgdHJhbnNhY3Rpb24gaW4gYmFzZTY0IGVuY29kZWQgc3RyaW5nXG4gICAqL1xuICBlbnJpY2hUcmFuc2FjdGlvbkRldGFpbHNGcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl91dGlscy5pc1ZhbGlkSGV4U3RyaW5nKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhpcy5jb3Ntb3NMaWtlVHJhbnNhY3Rpb24gPSB0aGlzLl91dGlscy5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRvQmFzZTY0KGZyb21IZXgocmF3VHJhbnNhY3Rpb24pKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uID0gdGhpcy5fdXRpbHMuZGVzZXJpYWxpemVUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvc21vc0xpa2VUcmFuc2FjdGlvbi5zaWduYXR1cmUpIHtcbiAgICAgIHRoaXMuYWRkU2lnbmF0dXJlKEJ1ZmZlci5mcm9tKHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNpZ25hdHVyZSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB9XG4gICAgY29uc3QgdHlwZVVybCA9IHRoaXMuY29zbW9zTGlrZVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlc1swXS50eXBlVXJsO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uVHlwZSA9IHRoaXMuX3V0aWxzLmdldFRyYW5zYWN0aW9uVHlwZUZyb21UeXBlVXJsKHR5cGVVcmwpO1xuXG4gICAgaWYgKHRyYW5zYWN0aW9uVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIHR5cGUgaXMgbm90IHN1cHBvcnRlZCAnICsgdHlwZVVybCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25UeXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG59XG4iXX0=