@bitgo/sdk-coin-ada 4.15.2 → 4.16.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 (67) hide show
  1. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  2. package/dist/src/lib/transactionBuilder.js +12 -2
  3. package/dist/test/resources/cip8Resources.d.ts +25 -0
  4. package/dist/test/resources/cip8Resources.d.ts.map +1 -0
  5. package/dist/test/resources/cip8Resources.js +76 -0
  6. package/dist/test/resources/index.d.ts +435 -0
  7. package/dist/test/resources/index.d.ts.map +1 -0
  8. package/dist/test/resources/index.js +635 -0
  9. package/dist/test/unit/StakingActivateBuilder.d.ts +2 -0
  10. package/dist/test/unit/StakingActivateBuilder.d.ts.map +1 -0
  11. package/dist/test/unit/StakingActivateBuilder.js +213 -0
  12. package/dist/test/unit/StakingDeactivateBuilder.d.ts +2 -0
  13. package/dist/test/unit/StakingDeactivateBuilder.d.ts.map +1 -0
  14. package/dist/test/unit/StakingDeactivateBuilder.js +158 -0
  15. package/dist/test/unit/ada.d.ts +5 -0
  16. package/dist/test/unit/ada.d.ts.map +1 -0
  17. package/dist/test/unit/ada.js +825 -0
  18. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  19. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  20. package/dist/test/unit/getBuilderFactory.js +10 -0
  21. package/dist/test/unit/index.d.ts +2 -0
  22. package/dist/test/unit/index.d.ts.map +1 -0
  23. package/dist/test/unit/index.js +32 -0
  24. package/dist/test/unit/keyPair.d.ts +2 -0
  25. package/dist/test/unit/keyPair.d.ts.map +1 -0
  26. package/dist/test/unit/keyPair.js +88 -0
  27. package/dist/test/unit/messages/cip8/cip8Message.d.ts +2 -0
  28. package/dist/test/unit/messages/cip8/cip8Message.d.ts.map +1 -0
  29. package/dist/test/unit/messages/cip8/cip8Message.js +131 -0
  30. package/dist/test/unit/messages/cip8/cip8MessageBuilder.d.ts +2 -0
  31. package/dist/test/unit/messages/cip8/cip8MessageBuilder.d.ts.map +1 -0
  32. package/dist/test/unit/messages/cip8/cip8MessageBuilder.js +132 -0
  33. package/dist/test/unit/messages/cip8/utils.d.ts +2 -0
  34. package/dist/test/unit/messages/cip8/utils.d.ts.map +1 -0
  35. package/dist/test/unit/messages/cip8/utils.js +127 -0
  36. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  37. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  38. package/dist/test/unit/messages/messageBuilderFactory.js +35 -0
  39. package/dist/test/unit/stakingClaimRewardsBuilder.d.ts +2 -0
  40. package/dist/test/unit/stakingClaimRewardsBuilder.d.ts.map +1 -0
  41. package/dist/test/unit/stakingClaimRewardsBuilder.js +70 -0
  42. package/dist/test/unit/stakingPledgeBuilder.d.ts +2 -0
  43. package/dist/test/unit/stakingPledgeBuilder.d.ts.map +1 -0
  44. package/dist/test/unit/stakingPledgeBuilder.js +141 -0
  45. package/dist/test/unit/stakingWithdrawBuilder.d.ts +2 -0
  46. package/dist/test/unit/stakingWithdrawBuilder.d.ts.map +1 -0
  47. package/dist/test/unit/stakingWithdrawBuilder.js +167 -0
  48. package/dist/test/unit/tokenWithdrawal.d.ts +2 -0
  49. package/dist/test/unit/tokenWithdrawal.d.ts.map +1 -0
  50. package/dist/test/unit/tokenWithdrawal.js +286 -0
  51. package/dist/test/unit/transaction.d.ts +2 -0
  52. package/dist/test/unit/transaction.d.ts.map +1 -0
  53. package/dist/test/unit/transaction.js +100 -0
  54. package/dist/test/unit/transactionBuilder.d.ts +2 -0
  55. package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
  56. package/dist/test/unit/transactionBuilder.js +454 -0
  57. package/dist/test/unit/utils.d.ts +2 -0
  58. package/dist/test/unit/utils.d.ts.map +1 -0
  59. package/dist/test/unit/utils.js +138 -0
  60. package/dist/test/unit/voteDelegationBuilder.d.ts +2 -0
  61. package/dist/test/unit/voteDelegationBuilder.d.ts.map +1 -0
  62. package/dist/test/unit/voteDelegationBuilder.js +96 -0
  63. package/dist/tsconfig.tsbuildinfo +1 -0
  64. package/package.json +10 -7
  65. package/.eslintignore +0 -5
  66. package/.mocharc.yml +0 -8
  67. package/CHANGELOG.md +0 -1227
@@ -0,0 +1,138 @@
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
+ const should_1 = __importDefault(require("should"));
7
+ const src_1 = require("../../src");
8
+ const sdk_core_1 = require("@bitgo/sdk-core");
9
+ const cardano_serialization_lib_nodejs_1 = require("@emurgo/cardano-serialization-lib-nodejs");
10
+ const resources_1 = require("../resources");
11
+ describe('utils', () => {
12
+ it('should validate addresses correctly', () => {
13
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address1), true);
14
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address2), true);
15
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address3), true);
16
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address4), true);
17
+ should_1.default.equal(src_1.Utils.default.isValidAddress('dfjk35y'), false);
18
+ should_1.default.equal(src_1.Utils.default.isValidAddress(undefined), false);
19
+ should_1.default.equal(src_1.Utils.default.isValidAddress(''), false);
20
+ // validator addresses
21
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address7), true);
22
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address8), true);
23
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address9), false);
24
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address10), false);
25
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address11), false);
26
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address12), false);
27
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address13), false);
28
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address14), false);
29
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address15), false);
30
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address16), false);
31
+ // Byron addresses
32
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron1), true);
33
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron2), true);
34
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron3), true);
35
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron4), false);
36
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron5), false);
37
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron6), false);
38
+ });
39
+ it('should create stake and payment keys correctly', () => {
40
+ const keyPair1 = new src_1.KeyPair({ pub: resources_1.enterpriseAccounts.account1.publicKey });
41
+ const keyPair2 = new src_1.KeyPair({ pub: resources_1.enterpriseAccounts.account3.publicKey });
42
+ should_1.default.equal(src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPair1, keyPair2, sdk_core_1.AddressFormat.testnet), 'addr_test1qq9arfq9pugs57apr3535z470ma2tvg8pnjy54q6s60muz5kelhytwhzrw9snh7759n9m8fr2xurpk4zyw8hmvk2avdsf62mmj');
43
+ });
44
+ it('should create stake and payment keys correctly from private keys', () => {
45
+ const keyPair1 = new src_1.KeyPair({ prv: resources_1.privateKeys.prvKey4 });
46
+ const keyPair2 = new src_1.KeyPair({ prv: resources_1.privateKeys.prvKey2 });
47
+ should_1.default.equal(src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPair1, keyPair2, sdk_core_1.AddressFormat.testnet), 'addr_test1qqvglhn9k8um66dsahxyukn9l2f6zdmnpy8puth00gjulk7g0xp5f99mdzwswz4rmfwu00x724w2jahygheyk2zqg9lsvz2muj');
48
+ });
49
+ it('should create stake and payment keys correctly with keypairs initialized from nothing', () => {
50
+ const keyPair1 = new src_1.KeyPair();
51
+ const keyPair2 = new src_1.KeyPair();
52
+ should_1.default.equal(src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPair1, keyPair2, sdk_core_1.AddressFormat.testnet), src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPair1, keyPair2, sdk_core_1.AddressFormat.testnet));
53
+ });
54
+ it('should validate block hash correctly', () => {
55
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(resources_1.blockHash.hash1), true);
56
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(resources_1.blockHash.hash2), true);
57
+ // param is coming as undefined so it was causing an issue
58
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(undefined), false);
59
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(''), false);
60
+ });
61
+ it('should validate invalid block hash correctly', () => {
62
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(''), false);
63
+ should_1.default.equal(src_1.Utils.default.isValidBlockId('0xade35465gfvdcsxsz24300'), false);
64
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(resources_1.blockHash.hash2 + 'ff'), false);
65
+ });
66
+ it('should validate public key correctly', () => {
67
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey('da025aa02990ef466069fadce5e3dcfad663914d6bf42fea3be50a8c3094d8e8'), true);
68
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey(resources_1.publicKeys.pubKey1), true);
69
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey(resources_1.publicKeys.pubKey2), true);
70
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey(resources_1.publicKeys.pubKey3), true);
71
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey(resources_1.publicKeys.pubKey4), false);
72
+ });
73
+ it('should validate private key correctly', () => {
74
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKeyExtended), true);
75
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKey2), true);
76
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKey3WrongFormat), false);
77
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKey4), true);
78
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKey5WrongFormat), false);
79
+ });
80
+ it('should validate signature correctly', () => {
81
+ should_1.default.equal(src_1.Utils.default.isValidSignature((0, sdk_core_1.toHex)(cardano_serialization_lib_nodejs_1.Ed25519Signature.from_bech32(resources_1.signatures.signature1).to_bytes())), true);
82
+ should_1.default.equal(src_1.Utils.default.isValidSignature((0, sdk_core_1.toHex)(cardano_serialization_lib_nodejs_1.Ed25519Signature.from_bech32(resources_1.signatures.signature2).to_bytes())), true);
83
+ });
84
+ it('should validate invalid signature correctly', () => {
85
+ should_1.default.equal(src_1.Utils.default.isValidSignature(''), false);
86
+ should_1.default.equal(src_1.Utils.default.isValidSignature('0x00'), false);
87
+ should_1.default.equal(src_1.Utils.default.isValidSignature(resources_1.privateKeys.prvKeyExtended), false);
88
+ should_1.default.equal(src_1.Utils.default.isValidSignature(resources_1.signatures.signature1.slice(2)), false);
89
+ should_1.default.equal(src_1.Utils.default.isValidSignature(resources_1.signatures.signature2 + 'ff'), false);
90
+ });
91
+ it('should validate transaction id correctly', () => {
92
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash1), true);
93
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash2), true);
94
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash3), true);
95
+ });
96
+ it('should validate invalid transaction id correctly', () => {
97
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(''), false);
98
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash1.slice(3)), false);
99
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash3 + '00'), false);
100
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId('dalij43ta0ga2dadda02'), false);
101
+ });
102
+ it('should validate DRepId correctly', () => {
103
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('always-abstain'), true);
104
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('not-a-correct-choice'), false);
105
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('always-no-confidence'), true);
106
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0incorrect'), false);
107
+ // CIP-105 standard DRepId
108
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd'), true);
109
+ // CIP-129 standard DRepId
110
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('drep1y29h2q6cst2pvkl2sqqvf5ljcy36uv7pmy482xnczddzgqshus24w'), true);
111
+ });
112
+ it('should get DRep entity from DRepId correctly', () => {
113
+ should_1.default.equal(src_1.Utils.default.getDRepFromDRepId('always-abstain').to_json(), cardano_serialization_lib_nodejs_1.DRep.new_always_abstain().to_json());
114
+ should_1.default.equal(src_1.Utils.default.getDRepFromDRepId('always-no-confidence').to_json(), cardano_serialization_lib_nodejs_1.DRep.new_always_no_confidence().to_json());
115
+ should_1.default.equal(src_1.Utils.default.getDRepFromDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd').to_json(), cardano_serialization_lib_nodejs_1.DRep.from_bech32('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd').to_json());
116
+ // DRep should be the same from both CIP-105 and CIP-129 IDs
117
+ should_1.default.equal(src_1.Utils.default.getDRepFromDRepId('drep1y29h2q6cst2pvkl2sqqvf5ljcy36uv7pmy482xnczddzgqshus24w').to_json(), src_1.Utils.default.getDRepFromDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd').to_json());
118
+ });
119
+ it('should get DRepId from DRep entity correctly', () => {
120
+ should_1.default.equal(src_1.Utils.default.getDRepIdFromDRep(cardano_serialization_lib_nodejs_1.DRep.new_always_abstain()), 'always-abstain');
121
+ should_1.default.equal(src_1.Utils.default.getDRepIdFromDRep(cardano_serialization_lib_nodejs_1.DRep.new_always_no_confidence()), 'always-no-confidence');
122
+ // Regardless of whether DRep was created from CIP-105 or CIP-129 ID, the DRepId from getDRepIdFromDRep will be the ID format from `to_bech32`
123
+ should_1.default.equal(src_1.Utils.default.getDRepIdFromDRep(src_1.Utils.default.getDRepFromDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd')), 'drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd');
124
+ should_1.default.equal(src_1.Utils.default.getDRepIdFromDRep(src_1.Utils.default.getDRepFromDRepId('drep1y29h2q6cst2pvkl2sqqvf5ljcy36uv7pmy482xnczddzgqshus24w')), 'drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd');
125
+ });
126
+ it('should get transaction body correctly', () => {
127
+ const { unsignedTx, unsignedTxBody, unsignedVoteDelegationTx, unsignedVoteDelegationTxBody, unsignedStakingActiveTx, unsignedStakingActiveTxBody, unsignedStakingDeactiveTx, unsignedStakingDeactiveTxBody, unsignedStakingWithdrawTx, unsignedStakingWithdrawTxBody, unsignedUpdatePledgeTx, unsignedUpdatePledgeTxBody, unsignedNewPledgeTx, unsignedNewPledgeTxBody, partiallySignedPledgeTx, } = resources_1.rawTx;
128
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedTx), unsignedTxBody);
129
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedVoteDelegationTx), unsignedVoteDelegationTxBody);
130
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedStakingActiveTx), unsignedStakingActiveTxBody);
131
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedStakingDeactiveTx), unsignedStakingDeactiveTxBody);
132
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedStakingWithdrawTx), unsignedStakingWithdrawTxBody);
133
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedUpdatePledgeTx), unsignedUpdatePledgeTxBody);
134
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedNewPledgeTx), unsignedNewPledgeTxBody);
135
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(partiallySignedPledgeTx), unsignedNewPledgeTxBody);
136
+ });
137
+ });
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbUNBQTJDO0FBQzNDLDhDQUF1RDtBQUN2RCwrRkFBa0Y7QUFDbEYsNENBU3NCO0FBRXRCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ3JCLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7UUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsbUJBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxXQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxtQkFBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25FLGdCQUFNLENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLG1CQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsbUJBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxXQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxXQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUE4QixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxD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LENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQzdGLGdCQUFNLENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25HLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBLZXlQYWlyLCBVdGlscyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBBZGRyZXNzRm9ybWF0LCB0b0hleCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBFZDI1NTE5U2lnbmF0dXJlLCBEUmVwIH0gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQge1xuICBhZGRyZXNzLFxuICBibG9ja0hhc2gsXG4gIGVudGVycHJpc2VBY2NvdW50cyxcbiAgcHJpdmF0ZUtleXMsXG4gIHB1YmxpY0tleXMsXG4gIHNpZ25hdHVyZXMsXG4gIHR4SWRzLFxuICByYXdUeCxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ3V0aWxzJywgKCkgPT4ge1xuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFkZHJlc3NlcyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMSksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczIpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MzKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzNCksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKCdkZmprMzV5JyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoJycpLCBmYWxzZSk7XG5cbiAgICAvLyB2YWxpZGF0b3IgYWRkcmVzc2VzXG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzNyksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczgpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3M5KSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczEwKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczExKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczEyKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczEzKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczE0KSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczE1KSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczE2KSwgZmFsc2UpO1xuXG4gICAgLy8gQnlyb24gYWRkcmVzc2VzXG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5ieXJvbjEpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmJ5cm9uMiksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYnlyb24zKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5ieXJvbjQpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5ieXJvbjUpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5ieXJvbjYpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY3JlYXRlIHN0YWtlIGFuZCBwYXltZW50IGtleXMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIGNvbnN0IGtleVBhaXIxID0gbmV3IEtleVBhaXIoeyBwdWI6IGVudGVycHJpc2VBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkgfSk7XG4gICAgY29uc3Qga2V5UGFpcjIgPSBuZXcgS2V5UGFpcih7IHB1YjogZW50ZXJwcmlzZUFjY291bnRzLmFjY291bnQzLnB1YmxpY0tleSB9KTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBVdGlscy5kZWZhdWx0LmNyZWF0ZUJhc2VBZGRyZXNzV2l0aFN0YWtlQW5kUGF5bWVudEtleShrZXlQYWlyMSwga2V5UGFpcjIsIEFkZHJlc3NGb3JtYXQudGVzdG5ldCksXG4gICAgICAnYWRkcl90ZXN0MXFxOWFyZnE5cHVnczU3YXByMzUzNXo0NzBtYTJ0dmc4cG5qeTU0cTZzNjBtdXo1a2VsaHl0d2h6cnc5c25oNzc1OW45bThmcjJ4dXJwazR6eXc4aG12azJhdmRzZjYybW1qJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY3JlYXRlIHN0YWtlIGFuZCBwYXltZW50IGtleXMgY29ycmVjdGx5IGZyb20gcHJpdmF0ZSBrZXlzJywgKCkgPT4ge1xuICAgIGNvbnN0IGtleVBhaXIxID0gbmV3IEtleVBhaXIoeyBwcnY6IHByaXZhdGVLZXlzLnBydktleTQgfSk7XG4gICAgY29uc3Qga2V5UGFpcjIgPSBuZXcgS2V5UGFpcih7IHBydjogcHJpdmF0ZUtleXMucHJ2S2V5MiB9KTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBVdGlscy5kZWZhdWx0LmNyZWF0ZUJhc2VBZGRyZXNzV2l0aFN0YWtlQW5kUGF5bWVudEtleShrZXlQYWlyMSwga2V5UGFpcjIsIEFkZHJlc3NGb3JtYXQudGVzdG5ldCksXG4gICAgICAnYWRkcl90ZXN0MXFxdmdsaG45azh1bTY2ZHNhaHh5dWtuOWwyZjZ6ZG1ucHk4cHV0aDAwZ2p1bGs3ZzB4cDVmOTltZHp3c3d6NHJtZnd1MDB4NzI0dzJqYWh5Z2hleWsyenFnOWxzdnoybXVqJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY3JlYXRlIHN0YWtlIGFuZCBwYXltZW50IGtleXMgY29ycmVjdGx5IHdpdGgga2V5cGFpcnMgaW5pdGlhbGl6ZWQgZnJvbSBub3RoaW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IGtleVBhaXIxID0gbmV3IEtleVBhaXIoKTtcbiAgICBjb25zdCBrZXlQYWlyMiA9IG5ldyBLZXlQYWlyKCk7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgVXRpbHMuZGVmYXVsdC5jcmVhdGVCYXNlQWRkcmVzc1dpdGhTdGFrZUFuZFBheW1lbnRLZXkoa2V5UGFpcjEsIGtleVBhaXIyLCBBZGRyZXNzRm9ybWF0LnRlc3RuZXQpLFxuICAgICAgVXRpbHMuZGVmYXVsdC5jcmVhdGVCYXNlQWRkcmVzc1dpdGhTdGFrZUFuZFBheW1lbnRLZXkoa2V5UGFpcjEsIGtleVBhaXIyLCBBZGRyZXNzRm9ybWF0LnRlc3RuZXQpXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBibG9jayBoYXNoIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQmxvY2tJZChibG9ja0hhc2guaGFzaDEpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQmxvY2tJZChibG9ja0hhc2guaGFzaDIpLCB0cnVlKTtcbiAgICAvLyBwYXJhbSBpcyBjb21pbmcgYXMgdW5kZWZpbmVkIHNvIGl0IHdhcyBjYXVzaW5nIGFuIGlzc3VlXG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEJsb2NrSWQodW5kZWZpbmVkIGFzIHVua25vd24gYXMgc3RyaW5nKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRCbG9ja0lkKCcnKSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGludmFsaWQgYmxvY2sgaGFzaCBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEJsb2NrSWQoJycpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEJsb2NrSWQoJzB4YWRlMzU0NjVnZnZkY3N4c3oyNDMwMCcpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEJsb2NrSWQoYmxvY2tIYXNoLmhhc2gyICsgJ2ZmJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBwdWJsaWMga2V5IGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBVdGlscy5kZWZhdWx0LmlzVmFsaWRQdWJsaWNLZXkoJ2RhMDI1YWEwMjk5MGVmNDY2MDY5ZmFkY2U1ZTNkY2ZhZDY2MzkxNGQ2YmY0MmZlYTNiZTUwYThjMzA5NGQ4ZTgnKSxcbiAgICAgIHRydWVcbiAgICApO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRQdWJsaWNLZXkocHVibGljS2V5cy5wdWJLZXkxKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXlzLnB1YktleTIpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleXMucHViS2V5MyksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRQdWJsaWNLZXkocHVibGljS2V5cy5wdWJLZXk0KSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIHByaXZhdGUga2V5IGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkUHJpdmF0ZUtleShwcml2YXRlS2V5cy5wcnZLZXlFeHRlbmRlZCksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXlzLnBydktleTIpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkUHJpdmF0ZUtleShwcml2YXRlS2V5cy5wcnZLZXkzV3JvbmdGb3JtYXQpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleXMucHJ2S2V5NCksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXlzLnBydktleTVXcm9uZ0Zvcm1hdCksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBzaWduYXR1cmUgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFV0aWxzLmRlZmF1bHQuaXNWYWxpZFNpZ25hdHVyZSh0b0hleChFZDI1NTE5U2lnbmF0dXJlLmZyb21fYmVjaDMyKHNpZ25hdHVyZXMuc2lnbmF0dXJlMSkudG9fYnl0ZXMoKSkpLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgVXRpbHMuZGVmYXVsdC5pc1ZhbGlkU2lnbmF0dXJlKHRvSGV4KEVkMjU1MTlTaWduYXR1cmUuZnJvbV9iZWNoMzIoc2lnbmF0dXJlcy5zaWduYXR1cmUyKS50b19ieXRlcygpKSksXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBpbnZhbGlkIHNpZ25hdHVyZSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFNpZ25hdHVyZSgnJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkU2lnbmF0dXJlKCcweDAwJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkU2lnbmF0dXJlKHByaXZhdGVLZXlzLnBydktleUV4dGVuZGVkKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlcy5zaWduYXR1cmUxLnNsaWNlKDIpKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlcy5zaWduYXR1cmUyICsgJ2ZmJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB0cmFuc2FjdGlvbiBpZCBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZHMuaGFzaDEpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkcy5oYXNoMiksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWRzLmhhc2gzKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgaW52YWxpZCB0cmFuc2FjdGlvbiBpZCBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJycpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZHMuaGFzaDEuc2xpY2UoMykpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZHMuaGFzaDMgKyAnMDAnKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRUcmFuc2FjdGlvbklkKCdkYWxpajQzdGEwZ2EyZGFkZGEwMicpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgRFJlcElkIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkRFJlcElkKCdhbHdheXMtYWJzdGFpbicpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkRFJlcElkKCdub3QtYS1jb3JyZWN0LWNob2ljZScpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZERSZXBJZCgnYWx3YXlzLW5vLWNvbmZpZGVuY2UnKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZERSZXBJZCgnZHJlcDEzZDZzeGt5ejZzdDloNjVxcXJ6ZDh1a3B5d2hyOHN3ZTlmNjM1N3FudGdqcXllMGluY29ycmVjdCcpLCBmYWxzZSk7XG4gICAgLy8gQ0lQLTEwNSBzdGFuZGFyZCBEUmVwSWRcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkRFJlcElkKCdkcmVwMTNkNnN4a3l6NnN0OWg2NXFxcnpkOHVrcHl3aHI4c3dlOWY2MzU3cW50Z2pxeWUwZ3R0ZCcpLCB0cnVlKTtcbiAgICAvLyBDSVAtMTI5IHN0YW5kYXJkIERSZXBJZFxuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWREUmVwSWQoJ2RyZXAxeTI5aDJxNmNzdDJwdmtsMnNxcXZmNWxqY3kzNnV2N3BteTQ4MnhuY3pkZHpncXNodXMyNHcnKSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2V0IERSZXAgZW50aXR5IGZyb20gRFJlcElkIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5nZXREUmVwRnJvbURSZXBJZCgnYWx3YXlzLWFic3RhaW4nKS50b19qc29uKCksIERSZXAubmV3X2Fsd2F5c19hYnN0YWluKCkudG9fanNvbigpKTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBVdGlscy5kZWZhdWx0LmdldERSZXBGcm9tRFJlcElkKCdhbHdheXMtbm8tY29uZmlkZW5jZScpLnRvX2pzb24oKSxcbiAgICAgIERSZXAubmV3X2Fsd2F5c19ub19jb25maWRlbmNlKCkudG9fanNvbigpXG4gICAgKTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBVdGlscy5kZWZhdWx0LmdldERSZXBGcm9tRFJlcElkKCdkcmVwMTNkNnN4a3l6NnN0OWg2NXFxcnpkOHVrcHl3aHI4c3dlOWY2MzU3cW50Z2pxeWUwZ3R0ZCcpLnRvX2pzb24oKSxcbiAgICAgIERSZXAuZnJvbV9iZWNoMzIoJ2RyZXAxM2Q2c3hreXo2c3Q5aDY1cXFyemQ4dWtweXdocjhzd2U5ZjYzNTdxbnRnanF5ZTBndHRkJykudG9fanNvbigpXG4gICAgKTtcbiAgICAvLyBEUmVwIHNob3VsZCBiZSB0aGUgc2FtZSBmcm9tIGJvdGggQ0lQLTEwNSBhbmQgQ0lQLTEyOSBJRHNcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBVdGlscy5kZWZhdWx0LmdldERSZXBGcm9tRFJlcElkKCdkcmVwMXkyOWgycTZjc3QycHZrbDJzcXF2ZjVsamN5MzZ1djdwbXk0ODJ4bmN6ZGR6Z3FzaHVzMjR3JykudG9fanNvbigpLFxuICAgICAgVXRpbHMuZGVmYXVsdC5nZXREUmVwRnJvbURSZXBJZCgnZHJlcDEzZDZzeGt5ejZzdDloNjVxcXJ6ZDh1a3B5d2hyOHN3ZTlmNjM1N3FudGdqcXllMGd0dGQnKS50b19qc29uKClcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdldCBEUmVwSWQgZnJvbSBEUmVwIGVudGl0eSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0RFJlcElkRnJvbURSZXAoRFJlcC5uZXdfYWx3YXlzX2Fic3RhaW4oKSksICdhbHdheXMtYWJzdGFpbicpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmdldERSZXBJZEZyb21EUmVwKERSZXAubmV3X2Fsd2F5c19ub19jb25maWRlbmNlKCkpLCAnYWx3YXlzLW5vLWNvbmZpZGVuY2UnKTtcbiAgICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgRFJlcCB3YXMgY3JlYXRlZCBmcm9tIENJUC0xMDUgb3IgQ0lQLTEyOSBJRCwgdGhlIERSZXBJZCBmcm9tIGdldERSZXBJZEZyb21EUmVwIHdpbGwgYmUgdGhlIElEIGZvcm1hdCBmcm9tIGB0b19iZWNoMzJgXG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgVXRpbHMuZGVmYXVsdC5nZXREUmVwSWRGcm9tRFJlcChcbiAgICAgICAgVXRpbHMuZGVmYXVsdC5nZXREUmVwRnJvbURSZXBJZCgnZHJlcDEzZDZzeGt5ejZzdDloNjVxcXJ6ZDh1a3B5d2hyOHN3ZTlmNjM1N3FudGdqcXllMGd0dGQnKVxuICAgICAgKSxcbiAgICAgICdkcmVwMTNkNnN4a3l6NnN0OWg2NXFxcnpkOHVrcHl3aHI4c3dlOWY2MzU3cW50Z2pxeWUwZ3R0ZCdcbiAgICApO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFV0aWxzLmRlZmF1bHQuZ2V0RFJlcElkRnJvbURSZXAoXG4gICAgICAgIFV0aWxzLmRlZmF1bHQuZ2V0RFJlcEZyb21EUmVwSWQoJ2RyZXAxeTI5aDJxNmNzdDJwdmtsMnNxcXZmNWxqY3kzNnV2N3BteTQ4MnhuY3pkZHpncXNodXMyNHcnKVxuICAgICAgKSxcbiAgICAgICdkcmVwMTNkNnN4a3l6NnN0OWg2NXFxcnpkOHVrcHl3aHI4c3dlOWY2MzU3cW50Z2pxeWUwZ3R0ZCdcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdldCB0cmFuc2FjdGlvbiBib2R5IGNvcnJlY3RseScsICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1bnNpZ25lZFR4LFxuICAgICAgdW5zaWduZWRUeEJvZHksXG4gICAgICB1bnNpZ25lZFZvdGVEZWxlZ2F0aW9uVHgsXG4gICAgICB1bnNpZ25lZFZvdGVEZWxlZ2F0aW9uVHhCb2R5LFxuICAgICAgdW5zaWduZWRTdGFraW5nQWN0aXZlVHgsXG4gICAgICB1bnNpZ25lZFN0YWtpbmdBY3RpdmVUeEJvZHksXG4gICAgICB1bnNpZ25lZFN0YWtpbmdEZWFjdGl2ZVR4LFxuICAgICAgdW5zaWduZWRTdGFraW5nRGVhY3RpdmVUeEJvZHksXG4gICAgICB1bnNpZ25lZFN0YWtpbmdXaXRoZHJhd1R4LFxuICAgICAgdW5zaWduZWRTdGFraW5nV2l0aGRyYXdUeEJvZHksXG4gICAgICB1bnNpZ25lZFVwZGF0ZVBsZWRnZVR4LFxuICAgICAgdW5zaWduZWRVcGRhdGVQbGVkZ2VUeEJvZHksXG4gICAgICB1bnNpZ25lZE5ld1BsZWRnZVR4LFxuICAgICAgdW5zaWduZWROZXdQbGVkZ2VUeEJvZHksXG4gICAgICBwYXJ0aWFsbHlTaWduZWRQbGVkZ2VUeCxcbiAgICB9ID0gcmF3VHg7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0VHJhbnNhY3Rpb25Cb2R5KHVuc2lnbmVkVHgpLCB1bnNpZ25lZFR4Qm9keSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0VHJhbnNhY3Rpb25Cb2R5KHVuc2lnbmVkVm90ZURlbGVnYXRpb25UeCksIHVuc2lnbmVkVm90ZURlbGVnYXRpb25UeEJvZHkpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmdldFRyYW5zYWN0aW9uQm9keSh1bnNpZ25lZFN0YWtpbmdBY3RpdmVUeCksIHVuc2lnbmVkU3Rha2luZ0FjdGl2ZVR4Qm9keSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0VHJhbnNhY3Rpb25Cb2R5KHVuc2lnbmVkU3Rha2luZ0RlYWN0aXZlVHgpLCB1bnNpZ25lZFN0YWtpbmdEZWFjdGl2ZVR4Qm9keSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0VHJhbnNhY3Rpb25Cb2R5KHVuc2lnbmVkU3Rha2luZ1dpdGhkcmF3VHgpLCB1bnNpZ25lZFN0YWtpbmdXaXRoZHJhd1R4Qm9keSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0VHJhbnNhY3Rpb25Cb2R5KHVuc2lnbmVkVXBkYXRlUGxlZGdlVHgpLCB1bnNpZ25lZFVwZGF0ZVBsZWRnZVR4Qm9keSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0VHJhbnNhY3Rpb25Cb2R5KHVuc2lnbmVkTmV3UGxlZGdlVHgpLCB1bnNpZ25lZE5ld1BsZWRnZVR4Qm9keSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0VHJhbnNhY3Rpb25Cb2R5KHBhcnRpYWxseVNpZ25lZFBsZWRnZVR4KSwgdW5zaWduZWROZXdQbGVkZ2VUeEJvZHkpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=voteDelegationBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voteDelegationBuilder.d.ts","sourceRoot":"","sources":["../../../test/unit/voteDelegationBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = 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);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
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
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const sdk_core_1 = require("@bitgo/sdk-core");
41
+ const testData = __importStar(require("../resources"));
42
+ const src_1 = require("../../src");
43
+ const statics_1 = require("@bitgo/statics");
44
+ const transaction_1 = require("../../src/lib/transaction");
45
+ describe('ADA Vote Delegation Transaction Builder', async () => {
46
+ const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tada'));
47
+ it('start and build an unsigned staking vote delegation tx', async () => {
48
+ const keyPairStake = new src_1.KeyPair({ prv: testData.privateKeys.prvKey2 });
49
+ const txBuilder = factory.getVoteDelegationBuilder();
50
+ txBuilder.input({
51
+ transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba21',
52
+ transaction_index: 1,
53
+ });
54
+ const totalInput = '4000000';
55
+ txBuilder.changeAddress('addr1q8rm9z7w4yx5gz652kn2q238efvms6t0qelur9nlglun8eu4tr5knj4fu4adelzqhxg8adu5xca4jra0gtllfrpcawyq9psz23', totalInput);
56
+ txBuilder.addVoteDelegationCertificate(keyPairStake.getKeys().pub, 'drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd');
57
+ txBuilder.ttl(800000000);
58
+ const tx = (await txBuilder.build());
59
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.VoteDelegation);
60
+ const explainedTx = tx.explainTransaction();
61
+ should_1.default.equal(explainedTx.type, 'VoteDelegation');
62
+ const txData = tx.toJson();
63
+ const fee = tx.getFee;
64
+ fee.should.equal('168537');
65
+ txData.certs.length.should.equal(1);
66
+ txData.certs[0].type.should.equal(transaction_1.CertType.VoteDelegation);
67
+ txData.outputs.length.should.equal(1);
68
+ txData.outputs[0].amount.should.equal((Number(totalInput) - Number(fee)).toString());
69
+ tx.toBroadcastFormat().should.equal(testData.rawTx.unsignedVoteDelegationTx);
70
+ should_1.default.equal(tx.id, testData.rawTx.unsignedVoteDelegationTxHash);
71
+ });
72
+ it('should build a vote delegation transaction', async () => {
73
+ const prebuiltTx = new transaction_1.Transaction(statics_1.coins.get('tada'));
74
+ prebuiltTx.fromRawTransaction(testData.rawTx.unsignedVoteDelegationTx);
75
+ const txBuilder = factory.getVoteDelegationBuilder();
76
+ txBuilder.initBuilder(prebuiltTx);
77
+ const tx = (await txBuilder.build());
78
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.VoteDelegation);
79
+ const txData = tx.toJson();
80
+ txData.inputs.length.should.equal(1);
81
+ txData.outputs.length.should.equal(1);
82
+ txData.certs.length.should.equal(1);
83
+ txData.certs[0].type.should.equal(transaction_1.CertType.VoteDelegation);
84
+ should_1.default.exist(txData.certs[0].dRepId);
85
+ txData.certs[0].dRepId.should.equal('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd');
86
+ txData.withdrawals.length.should.equal(0);
87
+ txData.witnesses.length.should.equal(0);
88
+ const fee = tx.getFee;
89
+ fee.should.equal('168537');
90
+ tx.toBroadcastFormat().should.equal(testData.rawTx.unsignedVoteDelegationTx);
91
+ should_1.default.equal(tx.id, testData.rawTx.unsignedVoteDelegationTxHash);
92
+ const explainedTx = tx.explainTransaction();
93
+ should_1.default.equal(explainedTx.type, 'VoteDelegation');
94
+ });
95
+ });
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm90ZURlbGVnYXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3ZvdGVEZWxlZ2F0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBa0Q7QUFDbEQsdURBQXlDO0FBQ3pDLG1DQUErRDtBQUMvRCw0Q0FBdUM7QUFDdkMsMkRBQWtFO0FBRWxFLFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3JELFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDZCxjQUFjLEVBQUUsa0VBQWtFO1lBQ2xGLGlCQUFpQixFQUFFLENBQUM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzdCLFNBQVMsQ0FBQyxhQUFhLENBQ3JCLHlHQUF5RyxFQUN6RyxVQUFVLENBQ1gsQ0FBQztRQUNGLFNBQVMsQ0FBQyw0QkFBNEIsQ0FDcEMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFDMUIsMERBQTBELENBQzNELENBQUM7UUFDRixTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxTQUFTLENBQUMsS0FB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QUMsQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4QyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzdFLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBLZXlQYWlyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQ2VydFR5cGUsIFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbic7XG5cbmRlc2NyaWJlKCdBREEgVm90ZSBEZWxlZ2F0aW9uIFRyYW5zYWN0aW9uIEJ1aWxkZXInLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhZGEnKSk7XG4gIGl0KCdzdGFydCBhbmQgYnVpbGQgYW4gdW5zaWduZWQgc3Rha2luZyB2b3RlIGRlbGVnYXRpb24gdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qga2V5UGFpclN0YWtlID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnByaXZhdGVLZXlzLnBydktleTIgfSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRWb3RlRGVsZWdhdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAnNDAwMDAwMCc7XG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3MoXG4gICAgICAnYWRkcjFxOHJtOXo3dzR5eDVnejY1MmtuMnEyMzhlZnZtczZ0MHFlbHVyOW5sZ2x1bjhldTR0cjVrbmo0ZnU0YWRlbHpxaHhnOGFkdTV4Y2E0anJhMGd0bGxmcnBjYXd5cTlwc3oyMycsXG4gICAgICB0b3RhbElucHV0XG4gICAgKTtcbiAgICB0eEJ1aWxkZXIuYWRkVm90ZURlbGVnYXRpb25DZXJ0aWZpY2F0ZShcbiAgICAgIGtleVBhaXJTdGFrZS5nZXRLZXlzKCkucHViLFxuICAgICAgJ2RyZXAxM2Q2c3hreXo2c3Q5aDY1cXFyemQ4dWtweXdocjhzd2U5ZjYzNTdxbnRnanF5ZTBndHRkJ1xuICAgICk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlZvdGVEZWxlZ2F0aW9uKTtcblxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgc2hvdWxkLmVxdWFsKGV4cGxhaW5lZFR4LnR5cGUsICdWb3RlRGVsZWdhdGlvbicpO1xuXG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgY29uc3QgZmVlID0gdHguZ2V0RmVlO1xuICAgIGZlZS5zaG91bGQuZXF1YWwoJzE2ODUzNycpO1xuXG4gICAgdHhEYXRhLmNlcnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHhEYXRhLmNlcnRzWzBdLnR5cGUuc2hvdWxkLmVxdWFsKENlcnRUeXBlLlZvdGVEZWxlZ2F0aW9uKTtcblxuICAgIHR4RGF0YS5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHhEYXRhLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgoTnVtYmVyKHRvdGFsSW5wdXQpIC0gTnVtYmVyKGZlZSkpLnRvU3RyaW5nKCkpO1xuICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnJhd1R4LnVuc2lnbmVkVm90ZURlbGVnYXRpb25UeCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LmlkLCB0ZXN0RGF0YS5yYXdUeC51bnNpZ25lZFZvdGVEZWxlZ2F0aW9uVHhIYXNoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHZvdGUgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcmVidWlsdFR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGFkYScpKTtcbiAgICBwcmVidWlsdFR4LmZyb21SYXdUcmFuc2FjdGlvbih0ZXN0RGF0YS5yYXdUeC51bnNpZ25lZFZvdGVEZWxlZ2F0aW9uVHgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Vm90ZURlbGVnYXRpb25CdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKHByZWJ1aWx0VHgpO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlZvdGVEZWxlZ2F0aW9uKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0eERhdGEuaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eERhdGEuY2VydHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eERhdGEuY2VydHNbMF0udHlwZS5zaG91bGQuZXF1YWwoQ2VydFR5cGUuVm90ZURlbGVnYXRpb24pO1xuICAgIHNob3VsZC5leGlzdCh0eERhdGEuY2VydHNbMF0uZFJlcElkKTtcbiAgICB0eERhdGEuY2VydHNbMF0uZFJlcElkIS5zaG91bGQuZXF1YWwoJ2RyZXAxM2Q2c3hreXo2c3Q5aDY1cXFyemQ4dWtweXdocjhzd2U5ZjYzNTdxbnRnanF5ZTBndHRkJyk7XG4gICAgdHhEYXRhLndpdGhkcmF3YWxzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgdHhEYXRhLndpdG5lc3Nlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuXG4gICAgY29uc3QgZmVlID0gdHguZ2V0RmVlO1xuICAgIGZlZS5zaG91bGQuZXF1YWwoJzE2ODUzNycpO1xuICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnJhd1R4LnVuc2lnbmVkVm90ZURlbGVnYXRpb25UeCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LmlkLCB0ZXN0RGF0YS5yYXdUeC51bnNpZ25lZFZvdGVEZWxlZ2F0aW9uVHhIYXNoKTtcblxuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgc2hvdWxkLmVxdWFsKGV4cGxhaW5lZFR4LnR5cGUsICdWb3RlRGVsZWdhdGlvbicpO1xuICB9KTtcbn0pO1xuIl19