@bitgo-beta/abstract-utxo 1.6.1-alpha.456 → 1.6.1-alpha.457

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 (156) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +4 -1
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +14 -11
  4. package/dist/cjs/src/address/fixedScript.d.ts +4 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +13 -11
  7. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  8. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  9. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +4 -2
  10. package/dist/cjs/src/names.d.ts +2 -0
  11. package/dist/cjs/src/names.d.ts.map +1 -1
  12. package/dist/cjs/src/names.js +9 -1
  13. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
  14. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
  15. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +3 -5
  16. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts +2 -1
  17. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -1
  18. package/dist/cjs/src/offlineVault/TransactionExplanation.js +3 -4
  19. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
  20. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
  21. package/dist/cjs/src/offlineVault/descriptor/transaction.js +6 -3
  22. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  23. package/dist/cjs/src/recovery/backupKeyRecovery.js +8 -7
  24. package/dist/cjs/src/recovery/crossChainRecovery.d.ts +3 -2
  25. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  26. package/dist/cjs/src/recovery/crossChainRecovery.js +7 -6
  27. package/dist/cjs/src/recovery/psbt.d.ts +3 -2
  28. package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
  29. package/dist/cjs/src/recovery/psbt.js +5 -4
  30. package/dist/cjs/src/transaction/bip322.d.ts.map +1 -1
  31. package/dist/cjs/src/transaction/bip322.js +26 -11
  32. package/dist/cjs/src/transaction/decode.d.ts +4 -3
  33. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  34. package/dist/cjs/src/transaction/decode.js +8 -5
  35. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  36. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +7 -5
  37. package/dist/cjs/src/transaction/descriptor/parse.d.ts +2 -1
  38. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  39. package/dist/cjs/src/transaction/descriptor/parse.js +14 -14
  40. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +2 -1
  41. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  42. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +4 -4
  43. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  44. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  45. package/dist/cjs/src/transaction/explainTransaction.js +5 -5
  46. package/dist/cjs/src/transaction/fetchInputs.d.ts +2 -1
  47. package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -1
  48. package/dist/cjs/src/transaction/fetchInputs.js +4 -2
  49. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +4 -4
  50. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  51. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +24 -19
  52. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +3 -3
  53. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +6 -4
  54. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  55. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +17 -49
  56. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
  57. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  58. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +6 -5
  59. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -1
  60. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  61. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +4 -4
  62. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +2 -2
  63. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts +3 -3
  64. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
  65. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.js +6 -39
  66. package/dist/cjs/src/transaction/recipient.d.ts +4 -4
  67. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  68. package/dist/cjs/src/transaction/recipient.js +7 -4
  69. package/dist/cjs/src/transaction/signTransaction.js +2 -2
  70. package/dist/cjs/test/unit/address.js +9 -9
  71. package/dist/cjs/test/unit/bip322.js +319 -3
  72. package/dist/cjs/test/unit/customChangeWallet.js +2 -2
  73. package/dist/cjs/test/unit/prebuildAndSign.js +2 -2
  74. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +6 -7
  75. package/dist/cjs/test/unit/transaction/descriptor/parse.js +2 -2
  76. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +7 -10
  77. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +4 -5
  78. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +3 -2
  79. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +5 -6
  80. package/dist/cjs/test/unit/transaction.js +23 -24
  81. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  82. package/dist/cjs/test/unit/util/unspents.js +4 -2
  83. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  84. package/dist/esm/abstractUtxoCoin.d.ts +4 -1
  85. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  86. package/dist/esm/abstractUtxoCoin.js +16 -13
  87. package/dist/esm/address/fixedScript.d.ts +4 -4
  88. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  89. package/dist/esm/address/fixedScript.js +13 -11
  90. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  91. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  92. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +4 -2
  93. package/dist/esm/names.d.ts +2 -0
  94. package/dist/esm/names.d.ts.map +1 -1
  95. package/dist/esm/names.js +7 -1
  96. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
  97. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
  98. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +3 -5
  99. package/dist/esm/offlineVault/TransactionExplanation.d.ts +2 -1
  100. package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -1
  101. package/dist/esm/offlineVault/TransactionExplanation.js +3 -4
  102. package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
  103. package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
  104. package/dist/esm/offlineVault/descriptor/transaction.js +6 -3
  105. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  106. package/dist/esm/recovery/backupKeyRecovery.js +8 -7
  107. package/dist/esm/recovery/crossChainRecovery.d.ts +3 -2
  108. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  109. package/dist/esm/recovery/crossChainRecovery.js +8 -7
  110. package/dist/esm/recovery/psbt.d.ts +3 -2
  111. package/dist/esm/recovery/psbt.d.ts.map +1 -1
  112. package/dist/esm/recovery/psbt.js +5 -4
  113. package/dist/esm/transaction/bip322.d.ts.map +1 -1
  114. package/dist/esm/transaction/bip322.js +27 -12
  115. package/dist/esm/transaction/decode.d.ts +4 -3
  116. package/dist/esm/transaction/decode.d.ts.map +1 -1
  117. package/dist/esm/transaction/decode.js +8 -5
  118. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  119. package/dist/esm/transaction/descriptor/explainPsbt.js +7 -5
  120. package/dist/esm/transaction/descriptor/parse.d.ts +2 -1
  121. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  122. package/dist/esm/transaction/descriptor/parse.js +14 -14
  123. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +2 -1
  124. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  125. package/dist/esm/transaction/descriptor/verifyTransaction.js +4 -4
  126. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  127. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  128. package/dist/esm/transaction/explainTransaction.js +5 -5
  129. package/dist/esm/transaction/fetchInputs.d.ts +2 -1
  130. package/dist/esm/transaction/fetchInputs.d.ts.map +1 -1
  131. package/dist/esm/transaction/fetchInputs.js +4 -2
  132. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +4 -4
  133. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  134. package/dist/esm/transaction/fixedScript/explainTransaction.js +24 -19
  135. package/dist/esm/transaction/fixedScript/parseTransaction.js +3 -3
  136. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +6 -4
  137. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  138. package/dist/esm/transaction/fixedScript/replayProtection.js +17 -16
  139. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
  140. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  141. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +6 -5
  142. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -1
  143. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  144. package/dist/esm/transaction/fixedScript/signTransaction.js +4 -4
  145. package/dist/esm/transaction/fixedScript/verifyTransaction.js +2 -2
  146. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +3 -3
  147. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
  148. package/dist/esm/transaction/getPayGoVerificationPubkey.js +6 -6
  149. package/dist/esm/transaction/recipient.d.ts +4 -4
  150. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  151. package/dist/esm/transaction/recipient.js +7 -4
  152. package/dist/esm/transaction/signTransaction.js +2 -2
  153. package/package.json +12 -12
  154. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts +0 -3
  155. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +0 -1
  156. package/dist/cjs/test/unit/transaction/fixedScript/util.js +0 -41
@@ -1,10 +1,59 @@
1
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
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  const assert_1 = __importDefault(require("assert"));
40
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
41
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
7
42
  const bip322_1 = require("../../src/transaction/bip322");
43
+ function createTestWalletKeys(seed) {
44
+ const keys = utxolib.testutil.getKeyTriple(seed);
45
+ return {
46
+ xpubs: keys.map((k) => k.neutered().toBase58()),
47
+ xprivs: keys.map((k) => k.toBase58()),
48
+ };
49
+ }
50
+ function getDerivedPubkeys(seed, chain, index) {
51
+ const keys = utxolib.testutil.getKeyTriple(seed);
52
+ return keys.map((k) => k.derivePath(`m/0/0/${chain}/${index}`).publicKey.toString('hex'));
53
+ }
54
+ function getAddress(walletKeys, chain, index) {
55
+ return wasm_utxo_1.fixedScriptWallet.address(walletKeys, chain, index, utxolib.networks.bitcoin);
56
+ }
8
57
  describe('BIP322', function () {
9
58
  describe('BIP322MessageBroadcastable', () => {
10
59
  it('should serialize and deserialize correctly', () => {
@@ -14,7 +63,7 @@ describe('BIP322', function () {
14
63
  {
15
64
  address: 'someAddress',
16
65
  message: 'someMessage',
17
- pubkeys: ['pubkey1', 'pubkey2'],
66
+ pubkeys: ['pubkey1', 'pubkey2', 'pubkey3'],
18
67
  scriptType: 'p2sh',
19
68
  },
20
69
  ],
@@ -30,7 +79,7 @@ describe('BIP322', function () {
30
79
  {
31
80
  address: 'someAddress',
32
81
  message: 'someMessage',
33
- pubkeys: ['pubkey1', 'pubkey2'],
82
+ pubkeys: ['pubkey1', 'pubkey2', 'pubkey3'],
34
83
  scriptType: 'unsupported',
35
84
  },
36
85
  ],
@@ -41,5 +90,272 @@ describe('BIP322', function () {
41
90
  });
42
91
  });
43
92
  });
93
+ describe('verifyTransactionFromBroadcastableMessage', function () {
94
+ const seed = 'bip322_verify_test';
95
+ const { xpubs, xprivs } = createTestWalletKeys(seed);
96
+ const walletKeys = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(xpubs);
97
+ it('should verify a valid p2shP2wsh PSBT proof', function () {
98
+ const chain = 10;
99
+ const index = 0;
100
+ const messageText = 'Hello, BitGo!';
101
+ const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
102
+ wasm_utxo_1.bip322.addBip322Input(psbt, {
103
+ message: messageText,
104
+ scriptId: { chain, index },
105
+ rootWalletKeys: walletKeys,
106
+ });
107
+ // Sign with user and bitgo keys
108
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
109
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
110
+ const pubkeys = getDerivedPubkeys(seed, chain, index);
111
+ const address = getAddress(walletKeys, chain, index);
112
+ const broadcastable = {
113
+ txHex: Buffer.from(psbt.serialize()).toString('hex'),
114
+ messageInfo: [
115
+ {
116
+ address,
117
+ message: messageText,
118
+ pubkeys,
119
+ scriptType: 'p2shP2wsh',
120
+ },
121
+ ],
122
+ };
123
+ assert_1.default.strictEqual((0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'btc'), true);
124
+ });
125
+ it('should verify a valid p2wsh PSBT proof', function () {
126
+ const chain = 20;
127
+ const index = 5;
128
+ const messageText = 'P2WSH proof test';
129
+ const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
130
+ wasm_utxo_1.bip322.addBip322Input(psbt, {
131
+ message: messageText,
132
+ scriptId: { chain, index },
133
+ rootWalletKeys: walletKeys,
134
+ });
135
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
136
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
137
+ const pubkeys = getDerivedPubkeys(seed, chain, index);
138
+ const address = getAddress(walletKeys, chain, index);
139
+ const broadcastable = {
140
+ txHex: Buffer.from(psbt.serialize()).toString('hex'),
141
+ messageInfo: [
142
+ {
143
+ address,
144
+ message: messageText,
145
+ pubkeys,
146
+ scriptType: 'p2wsh',
147
+ },
148
+ ],
149
+ };
150
+ assert_1.default.strictEqual((0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'btc'), true);
151
+ });
152
+ it('should verify multiple inputs in a single PSBT', function () {
153
+ const messages = ['Message 1', 'Message 2'];
154
+ const scriptIds = [
155
+ { chain: 10, index: 0 },
156
+ { chain: 20, index: 1 },
157
+ ];
158
+ const scriptTypes = ['p2shP2wsh', 'p2wsh'];
159
+ const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
160
+ for (let i = 0; i < messages.length; i++) {
161
+ wasm_utxo_1.bip322.addBip322Input(psbt, {
162
+ message: messages[i],
163
+ scriptId: scriptIds[i],
164
+ rootWalletKeys: walletKeys,
165
+ });
166
+ }
167
+ // Sign all inputs
168
+ for (let i = 0; i < messages.length; i++) {
169
+ psbt.sign(i, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
170
+ psbt.sign(i, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
171
+ }
172
+ const messageInfo = messages.map((msg, i) => {
173
+ const pubkeys = getDerivedPubkeys(seed, scriptIds[i].chain, scriptIds[i].index);
174
+ return {
175
+ address: getAddress(walletKeys, scriptIds[i].chain, scriptIds[i].index),
176
+ message: msg,
177
+ pubkeys,
178
+ scriptType: scriptTypes[i],
179
+ };
180
+ });
181
+ const broadcastable = {
182
+ txHex: Buffer.from(psbt.serialize()).toString('hex'),
183
+ messageInfo,
184
+ };
185
+ assert_1.default.strictEqual((0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'btc'), true);
186
+ });
187
+ it('should return false for wrong message', function () {
188
+ const chain = 10;
189
+ const index = 0;
190
+ const messageText = 'Original message';
191
+ const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
192
+ wasm_utxo_1.bip322.addBip322Input(psbt, {
193
+ message: messageText,
194
+ scriptId: { chain, index },
195
+ rootWalletKeys: walletKeys,
196
+ });
197
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
198
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
199
+ const pubkeys = getDerivedPubkeys(seed, chain, index);
200
+ const address = getAddress(walletKeys, chain, index);
201
+ const broadcastable = {
202
+ txHex: Buffer.from(psbt.serialize()).toString('hex'),
203
+ messageInfo: [
204
+ {
205
+ address,
206
+ message: 'Different message', // Wrong message
207
+ pubkeys,
208
+ scriptType: 'p2shP2wsh',
209
+ },
210
+ ],
211
+ };
212
+ assert_1.default.strictEqual((0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'btc'), false);
213
+ });
214
+ it('should throw for unsupported coin', function () {
215
+ const broadcastable = {
216
+ txHex: '00',
217
+ messageInfo: [],
218
+ };
219
+ assert_1.default.throws(() => (0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'ltc'), /Only tbtc4 or btc coinNames are supported/);
220
+ });
221
+ });
222
+ describe('generateBIP322MessageListAndVerifyFromMessageBroadcastable', function () {
223
+ const seed = 'bip322_generate_test';
224
+ const { xpubs, xprivs } = createTestWalletKeys(seed);
225
+ const walletKeys = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(xpubs);
226
+ it('should generate message list from valid proofs', function () {
227
+ const chain = 10;
228
+ const index = 0;
229
+ const messageText = 'Proof message';
230
+ const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
231
+ wasm_utxo_1.bip322.addBip322Input(psbt, {
232
+ message: messageText,
233
+ scriptId: { chain, index },
234
+ rootWalletKeys: walletKeys,
235
+ });
236
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
237
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
238
+ const pubkeys = getDerivedPubkeys(seed, chain, index);
239
+ const address = getAddress(walletKeys, chain, index);
240
+ const broadcastables = [
241
+ {
242
+ txHex: Buffer.from(psbt.serialize()).toString('hex'),
243
+ messageInfo: [
244
+ {
245
+ address,
246
+ message: messageText,
247
+ pubkeys,
248
+ scriptType: 'p2shP2wsh',
249
+ },
250
+ ],
251
+ },
252
+ ];
253
+ const result = (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc');
254
+ assert_1.default.strictEqual(result.length, 1);
255
+ assert_1.default.strictEqual(result[0].address, address);
256
+ assert_1.default.strictEqual(result[0].message, messageText);
257
+ });
258
+ it('should deduplicate addresses with same message', function () {
259
+ const chain = 10;
260
+ const index = 0;
261
+ const messageText = 'Same message';
262
+ // Create two separate PSBTs for the same address/message
263
+ const psbt1 = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
264
+ wasm_utxo_1.bip322.addBip322Input(psbt1, {
265
+ message: messageText,
266
+ scriptId: { chain, index },
267
+ rootWalletKeys: walletKeys,
268
+ });
269
+ psbt1.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
270
+ psbt1.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
271
+ const psbt2 = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
272
+ wasm_utxo_1.bip322.addBip322Input(psbt2, {
273
+ message: messageText,
274
+ scriptId: { chain, index },
275
+ rootWalletKeys: walletKeys,
276
+ });
277
+ psbt2.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
278
+ psbt2.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
279
+ const pubkeys = getDerivedPubkeys(seed, chain, index);
280
+ const address = getAddress(walletKeys, chain, index);
281
+ const broadcastables = [
282
+ {
283
+ txHex: Buffer.from(psbt1.serialize()).toString('hex'),
284
+ messageInfo: [{ address, message: messageText, pubkeys, scriptType: 'p2shP2wsh' }],
285
+ },
286
+ {
287
+ txHex: Buffer.from(psbt2.serialize()).toString('hex'),
288
+ messageInfo: [{ address, message: messageText, pubkeys, scriptType: 'p2shP2wsh' }],
289
+ },
290
+ ];
291
+ const result = (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc');
292
+ // Should deduplicate to a single entry
293
+ assert_1.default.strictEqual(result.length, 1);
294
+ assert_1.default.strictEqual(result[0].address, address);
295
+ assert_1.default.strictEqual(result[0].message, messageText);
296
+ });
297
+ it('should throw for duplicate address with different message', function () {
298
+ const chain = 10;
299
+ const index = 0;
300
+ const psbt1 = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
301
+ wasm_utxo_1.bip322.addBip322Input(psbt1, {
302
+ message: 'Message 1',
303
+ scriptId: { chain, index },
304
+ rootWalletKeys: walletKeys,
305
+ });
306
+ psbt1.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
307
+ psbt1.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
308
+ const psbt2 = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
309
+ wasm_utxo_1.bip322.addBip322Input(psbt2, {
310
+ message: 'Message 2',
311
+ scriptId: { chain, index },
312
+ rootWalletKeys: walletKeys,
313
+ });
314
+ psbt2.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
315
+ psbt2.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
316
+ const pubkeys = getDerivedPubkeys(seed, chain, index);
317
+ const address = getAddress(walletKeys, chain, index);
318
+ const broadcastables = [
319
+ {
320
+ txHex: Buffer.from(psbt1.serialize()).toString('hex'),
321
+ messageInfo: [{ address, message: 'Message 1', pubkeys, scriptType: 'p2shP2wsh' }],
322
+ },
323
+ {
324
+ txHex: Buffer.from(psbt2.serialize()).toString('hex'),
325
+ messageInfo: [{ address, message: 'Message 2', pubkeys, scriptType: 'p2shP2wsh' }],
326
+ },
327
+ ];
328
+ assert_1.default.throws(() => (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc'), /Duplicate address.*has different messages/);
329
+ });
330
+ it('should throw for invalid proof', function () {
331
+ const chain = 10;
332
+ const index = 0;
333
+ const messageText = 'Valid message';
334
+ const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
335
+ wasm_utxo_1.bip322.addBip322Input(psbt, {
336
+ message: messageText,
337
+ scriptId: { chain, index },
338
+ rootWalletKeys: walletKeys,
339
+ });
340
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
341
+ psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
342
+ const pubkeys = getDerivedPubkeys(seed, chain, index);
343
+ const address = getAddress(walletKeys, chain, index);
344
+ const broadcastables = [
345
+ {
346
+ txHex: Buffer.from(psbt.serialize()).toString('hex'),
347
+ messageInfo: [
348
+ {
349
+ address,
350
+ message: 'Wrong message', // Doesn't match what was signed
351
+ pubkeys,
352
+ scriptType: 'p2shP2wsh',
353
+ },
354
+ ],
355
+ },
356
+ ];
357
+ assert_1.default.throws(() => (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc'), /did not have a successful validation/);
358
+ });
359
+ });
44
360
  });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1Qix5REFJc0M7QUFFdEMsUUFBUSxDQUFDLFFBQVEsRUFBRTtJQUNqQixRQUFRLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQzFDLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxPQUFPLEdBQStCO2dCQUMxQyxLQUFLLEVBQUUsUUFBUTtnQkFDZixXQUFXLEVBQUU7b0JBQ1g7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO3dCQUMvQixVQUFVLEVBQUUsTUFBTTtxQkFDbkI7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsTUFBTSxVQUFVLEdBQUcsSUFBQSw0Q0FBbUMsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUNoRSxNQUFNLFlBQVksR0FBRyxJQUFBLDhDQUFxQyxFQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZFLGdCQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxNQUFNLE9BQU8sR0FBRztnQkFDZCxLQUFLLEVBQUUsUUFBUTtnQkFDZixXQUFXLEVBQUU7b0JBQ1g7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO3dCQUMvQixVQUFVLEVBQUUsYUFBYTtxQkFDMUI7aUJBQ0Y7YUFDdUMsQ0FBQztZQUUzQyxNQUFNLFVBQVUsR0FBRyxJQUFBLDRDQUFtQyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hFLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDakIsSUFBQSw4Q0FBcUMsRUFBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUsXG4gIGRlc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZGVzY3JpYmUoJ0JJUDMyMicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ0JJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInXSxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkID0gZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShzZXJpYWxpemVkKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZGVzZXJpYWxpemVkLCBtZXNzYWdlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0aGVyZSBpcyBhbiB1bnN1cHBvcnRlZCBzY3JpcHQgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHR4SGV4OiAnMDEwMjAzJyxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnc29tZUFkZHJlc3MnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ3NvbWVNZXNzYWdlJyxcbiAgICAgICAgICAgIHB1YmtleXM6IFsncHVia2V5MScsICdwdWJrZXkyJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IGFzIHVua25vd24gYXMgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGU7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qiw4REFBZ0Q7QUFDaEQsZ0RBQStGO0FBRS9GLHlEQU9zQztBQUV0QyxTQUFTLG9CQUFvQixDQUFDLElBQVk7SUFJeEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsT0FBTztRQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQW1CO1FBQ2pFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQW1CO0tBQ3hELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLEtBQWE7SUFDbkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBbUIsQ0FBQztBQUM5RyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsVUFBNEMsRUFBRSxLQUFhLEVBQUUsS0FBYTtJQUM1RixPQUFPLDZCQUFpQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUss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QUNwRCxXQUFXLEVBQUU7d0JBQ1g7NEJBQ0UsT0FBTzs0QkFDUCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdDQUFnQzs0QkFDMUQsT0FBTzs0QkFDUCxVQUFVLEVBQUUsV0FBVzt5QkFDeEI7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsSUFBQSxtRUFBMEQsRUFBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ3ZGLHNDQUFzQyxDQUN2QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyMiBhcyB3YXNtQmlwMzIyLCBmaXhlZFNjcmlwdFdhbGxldCwgQklQMzIsIHR5cGUgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7XG4gIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBCSVAzMjJNZXNzYWdlSW5mbyxcbiAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZSxcbiAgc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZnVuY3Rpb24gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZDogc3RyaW5nKToge1xuICB4cHViczogVHJpcGxlPHN0cmluZz47XG4gIHhwcml2czogVHJpcGxlPHN0cmluZz47XG59IHtcbiAgY29uc3Qga2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpO1xuICByZXR1cm4ge1xuICAgIHhwdWJzOiBrZXlzLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgIHhwcml2czoga2V5cy5tYXAoKGspID0+IGsudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz4sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlcml2ZWRQdWJrZXlzKHNlZWQ6IHN0cmluZywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IFRyaXBsZTxzdHJpbmc+IHtcbiAgY29uc3Qga2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpO1xuICByZXR1cm4ga2V5cy5tYXAoKGspID0+IGsuZGVyaXZlUGF0aChgbS8wLzAvJHtjaGFpbn0vJHtpbmRleH1gKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbn1cblxuZGVzY3JpYmUoJ0JJUDMyMicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ0JJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInLCAncHVia2V5MyddLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQsIG1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZXJlIGlzIGFuIHVuc3VwcG9ydGVkIHNjcmlwdCB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInLCAncHVia2V5MyddLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Vuc3VwcG9ydGVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSBhcyB1bmtub3duIGFzIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlO1xuXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShzZXJpYWxpemVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfdmVyaWZ5X3Rlc3QnO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMnNoUDJ3c2ggUFNCVCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdIZWxsbywgQml0R28hJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2lnbiB3aXRoIHVzZXIgYW5kIGJpdGdvIGtleXNcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgcDJ3c2ggUFNCVCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMjA7XG4gICAgICBjb25zdCBpbmRleCA9IDU7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQMldTSCBwcm9vZiB0ZXN0JztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayd3NoJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdidGMnKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBtdWx0aXBsZSBpbnB1dHMgaW4gYSBzaW5nbGUgUFNCVCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gWydNZXNzYWdlIDEnLCAnTWVzc2FnZSAyJ107XG4gICAgICBjb25zdCBzY3JpcHRJZHMgPSBbXG4gICAgICAgIHsgY2hhaW46IDEwLCBpbmRleDogMCB9LFxuICAgICAgICB7IGNoYWluOiAyMCwgaW5kZXg6IDEgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBzY3JpcHRUeXBlczogQklQMzIyTWVzc2FnZUluZm9bJ3NjcmlwdFR5cGUnXVtdID0gWydwMnNoUDJ3c2gnLCAncDJ3c2gnXTtcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidCwge1xuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VzW2ldLFxuICAgICAgICAgIHNjcmlwdElkOiBzY3JpcHRJZHNbaV0sXG4gICAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTaWduIGFsbCBpbnB1dHNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICAgIHBzYnQuc2lnbihpLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSW5mbzogQklQMzIyTWVzc2FnZUluZm9bXSA9IG1lc3NhZ2VzLm1hcCgobXNnLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBzY3JpcHRJZHNbaV0uY2hhaW4sIHNjcmlwdElkc1tpXS5pbmRleCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBzY3JpcHRJZHNbaV0uY2hhaW4sIHNjcmlwdElkc1tpXS5pbmRleCksXG4gICAgICAgICAgbWVzc2FnZTogbXNnLFxuICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgc2NyaXB0VHlwZTogc2NyaXB0VHlwZXNbaV0sXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG1lc3NhZ2VJbmZvLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdidGMnKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igd3JvbmcgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdPcmlnaW5hbCBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0RpZmZlcmVudCBtZXNzYWdlJywgLy8gV3JvbmcgbWVzc2FnZVxuICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciB1bnN1cHBvcnRlZCBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW10sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnbHRjJyksXG4gICAgICAgIC9Pbmx5IHRidGM0IG9yIGJ0YyBjb2luTmFtZXMgYXJlIHN1cHBvcnRlZC9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlZWQgPSAnYmlwMzIyX2dlbmVyYXRlX3Rlc3QnO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBtZXNzYWdlIGxpc3QgZnJvbSB2YWxpZCBwcm9vZnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnUHJvb2YgbWVzc2FnZSc7XG5cbiAgICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidCwge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG5cbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZXM6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWR1cGxpY2F0ZSBhZGRyZXNzZXMgd2l0aCBzYW1lIG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnU2FtZSBtZXNzYWdlJztcblxuICAgICAgLy8gQ3JlYXRlIHR3byBzZXBhcmF0ZSBQU0JUcyBmb3IgdGhlIHNhbWUgYWRkcmVzcy9tZXNzYWdlXG4gICAgICBjb25zdCBwc2J0MSA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0MSwge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHBzYnQyID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQyLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0MS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidDIuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBtZXNzYWdlSW5mbzogW3sgYWRkcmVzcywgbWVzc2FnZTogbWVzc2FnZVRleHQsIHB1YmtleXMsIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnIH1dLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICAvLyBTaG91bGQgZGVkdXBsaWNhdGUgdG8gYSBzaW5nbGUgZW50cnlcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0uYWRkcmVzcywgYWRkcmVzcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLm1lc3NhZ2UsIG1lc3NhZ2VUZXh0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGR1cGxpY2F0ZSBhZGRyZXNzIHdpdGggZGlmZmVyZW50IG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBwc2J0MSA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0MSwge1xuICAgICAgICBtZXNzYWdlOiAnTWVzc2FnZSAxJyxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHBzYnQyID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQyLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDInLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0MS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAxJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidDIuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBtZXNzYWdlSW5mbzogW3sgYWRkcmVzcywgbWVzc2FnZTogJ01lc3NhZ2UgMicsIHB1YmtleXMsIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnIH1dLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpLFxuICAgICAgICAvRHVwbGljYXRlIGFkZHJlc3MuKmhhcyBkaWZmZXJlbnQgbWVzc2FnZXMvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdWYWxpZCBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZXM6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdXcm9uZyBtZXNzYWdlJywgLy8gRG9lc24ndCBtYXRjaCB3aGF0IHdhcyBzaWduZWRcbiAgICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9kaWQgbm90IGhhdmUgYSBzdWNjZXNzZnVsIHZhbGlkYXRpb24vXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -69,7 +69,7 @@ describe('Custom Change Wallets', () => {
69
69
  ],
70
70
  threshold: 2,
71
71
  };
72
- const changeAddress = (0, src_1.generateAddress)(coin.network, addressData);
72
+ const changeAddress = (0, src_1.generateAddress)(coin.name, addressData);
73
73
  const changeWalletId = 'changeWalletId';
74
74
  const stubData = {
75
75
  signedSendingWallet: {
@@ -151,4 +151,4 @@ describe('Custom Change Wallets', () => {
151
151
  coin.keychains.restore();
152
152
  });
153
153
  });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tQ2hhbmdlV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2N1c3RvbUNoYW5nZVdhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFrQztBQUNsQyw2Q0FBK0I7QUFDL0IsbURBQThDO0FBRTlDLG1DQUE0QztBQUU1QyxpQ0FBcUM7QUFFckMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFakMsTUFBTSxJQUFJLEdBQUc7UUFDWCxJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakQsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ25ELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtTQUNuRDtRQUNELE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRCxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkQsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFD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QUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUN6QixNQUFNLEVBQUUsbUJBQTBCO1lBQ2xDLFlBQVksRUFBRTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDZixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7d0JBQ3hCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztxQkFDekI7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDNUMsT0FBTyxFQUFFLGFBQWE7WUFDdEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsUUFBUSxFQUFFLEtBQUs7WUFDZix5Q0FBeUMsRUFBRSxJQUFJO1NBQ2hELENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBMEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdlbmVyYXRlQWRkcmVzcyB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuZGVzY3JpYmUoJ0N1c3RvbSBDaGFuZ2UgV2FsbGV0cycsICgpID0+IHtcbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG5cbiAgY29uc3Qga2V5cyA9IHtcbiAgICBzZW5kOiB7XG4gICAgICB1c2VyOiB7IGlkOiAnMCcsIGtleTogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSB9LFxuICAgICAgYmFja3VwOiB7IGlkOiAnMScsIGtleTogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSB9LFxuICAgICAgYml0Z286IHsgaWQ6ICcyJywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgfSxcbiAgICBjaGFuZ2U6IHtcbiAgICAgIHVzZXI6IHsgaWQ6ICczJywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgICBiYWNrdXA6IHsgaWQ6ICc0Jywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgICBiaXRnbzogeyBpZDogJzUnLCBrZXk6IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCkgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMgPSB7XG4gICAgdXNlcjogJycsXG4gICAgYmFja3VwOiAnJyxcbiAgICBiaXRnbzogJycsXG4gIH07XG5cbiAgY29uc3QgYWRkcmVzc0RhdGEgPSB7XG4gICAgY2hhaW46IDExLFxuICAgIGluZGV4OiAxLFxuICAgIGFkZHJlc3NUeXBlOiAncDJzaFAyd3NoJyBhcyBjb25zdCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGtleWNoYWluczogW1xuICAgICAgeyBwdWI6IGtleXMuY2hhbmdlLnVzZXIua2V5LnB1YiEgfSxcbiAgICAgIHsgcHViOiBrZXlzLmNoYW5nZS5iYWNrdXAua2V5LnB1YiEgfSxcbiAgICAgIHsgcHViOiBrZXlzLmNoYW5nZS5iaXRnby5rZXkucHViISB9LFxuICAgIF0sXG4gICAgdGhyZXNob2xkOiAyLFxuICB9O1xuXG4gIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3MoY29pbi5uZXR3b3JrLCBhZGRyZXNzRGF0YSk7XG5cbiAgY29uc3QgY2hhbmdlV2FsbGV0SWQgPSAnY2hhbmdlV2FsbGV0SWQnO1xuICBjb25zdCBzdHViRGF0YSA9IHtcbiAgICBzaWduZWRTZW5kaW5nV2FsbGV0OiB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtrZXlzLnNlbmQudXNlci5pZCwga2V5cy5zZW5kLmJhY2t1cC5pZCwga2V5cy5zZW5kLmJpdGdvLmlkXSksXG4gICAgICBjb2luU3BlY2lmaWM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgY3VzdG9tQ2hhbmdlV2FsbGV0SWQ6IGNoYW5nZVdhbGxldElkIH0pLFxuICAgIH0sXG4gICAgY2hhbmdlV2FsbGV0OiB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtrZXlzLmNoYW5nZS51c2VyLmlkLCBrZXlzLmNoYW5nZS5iYWNrdXAuaWQsIGtleXMuY2hhbmdlLmJpdGdvLmlkXSksXG4gICAgICBjcmVhdGVBZGRyZXNzOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoY2hhbmdlQWRkcmVzcyksXG4gICAgfSxcbiAgfTtcblxuICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3Qgc2lnbiA9IGFzeW5jICh7IGtleSB9KSA9PiAoYXdhaXQgY29pbi5zaWduTWVzc2FnZSh7IHBydjoga2V5cy5zZW5kLnVzZXIua2V5LnBydiB9LCBrZXkucHViISkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLnVzZXIgPSBhd2FpdCBzaWduKGtleXMuY2hhbmdlLnVzZXIpO1xuICAgIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYmFja3VwID0gYXdhaXQgc2lnbihrZXlzLmNoYW5nZS5iYWNrdXApO1xuICAgIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYml0Z28gPSBhd2FpdCBzaWduKGtleXMuY2hhbmdlLmJpdGdvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb25zaWRlciBhZGRyZXNzZXMgZGVyaXZlZCBmcm9tIHRoZSBjdXN0b20gY2hhbmdlIGtleXMgYXMgaW50ZXJuYWwgc3BlbmRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpZ25lZFNlbmRpbmdXYWxsZXQgPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoV2FsbGV0LCBzdHViRGF0YS5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSk7XG4gICAgY29uc3QgY2hhbmdlV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCwgc3R1YkRhdGEuY2hhbmdlV2FsbGV0IGFzIGFueSk7XG5cbiAgICBzaW5vbi5zdHViKGNvaW4sICdrZXljaGFpbnMnKS5yZXR1cm5zKHtcbiAgICAgIGdldDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgoeyBpZCB9KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICBjYXNlIGtleXMuc2VuZC51c2VyLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLnNlbmQudXNlci5rZXkgfSk7XG4gICAgICAgICAgY2FzZSBrZXlzLnNlbmQuYmFja3VwLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLnNlbmQuYmFja3VwLmtleSB9KTtcbiAgICAgICAgICBjYXNlIGtleXMuc2VuZC5iaXRnby5pZDpcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBpZCwgLi4ua2V5cy5zZW5kLmJpdGdvLmtleSB9KTtcbiAgICAgICAgICBjYXNlIGtleXMuY2hhbmdlLnVzZXIuaWQ6XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgaWQsIC4uLmtleXMuY2hhbmdlLnVzZXIua2V5IH0pO1xuICAgICAgICAgIGNhc2Uga2V5cy5jaGFuZ2UuYmFja3VwLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLmNoYW5nZS5iYWNrdXAua2V5IH0pO1xuICAgICAgICAgIGNhc2Uga2V5cy5jaGFuZ2UuYml0Z28uaWQ6XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgaWQsIC4uLmtleXMuY2hhbmdlLmJpdGdvLmtleSB9KTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgc2lub24uc3R1Yihjb2luLCAnd2FsbGV0cycpLnJldHVybnMoe1xuICAgICAgZ2V0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCgpID0+IFByb21pc2UucmVzb2x2ZShjaGFuZ2VXYWxsZXQpKSxcbiAgICB9IGFzIGFueSk7XG5cbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSAxMDAwMDtcbiAgICBjb25zdCByZWNpcGllbnRzID0gW107XG5cbiAgICBzaW5vbi5zdHViKGNvaW4sICdleHBsYWluVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGNoYW5nZUFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgYW55KTtcblxuICAgIHNpZ25lZFNlbmRpbmdXYWxsZXQuX3dhbGxldCA9IHNpZ25lZFNlbmRpbmdXYWxsZXQuX3dhbGxldCB8fCB7XG4gICAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLFxuICAgIH07XG5cbiAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyBjaGFuZ2VBZGRyZXNzLCByZWNpcGllbnRzIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiAnJyB9LFxuICAgICAgd2FsbGV0OiBzaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIHZlcmlmaWNhdGlvbjoge1xuICAgICAgICBhZGRyZXNzZXM6IHtcbiAgICAgICAgICBbY2hhbmdlQWRkcmVzc106IHtcbiAgICAgICAgICAgIGNoYWluOiBhZGRyZXNzRGF0YS5jaGFpbixcbiAgICAgICAgICAgIGluZGV4OiBhZGRyZXNzRGF0YS5pbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHNob3VsZC5leGlzdChwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdKTtcbiAgICBwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogY2hhbmdlQWRkcmVzcyxcbiAgICAgIGFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgfSk7XG5cbiAgICAoY29pbi5leHBsYWluVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gICAgKGNvaW4ud2FsbGV0cyBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgICAoY29pbi5rZXljaGFpbnMgYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xufSk7XG4iXX0=
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tQ2hhbmdlV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2N1c3RvbUNoYW5nZVdhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFrQztBQUNsQyw2Q0FBK0I7QUFDL0IsbURBQThDO0FBRTlDLG1DQUE0QztBQUU1QyxpQ0FBcUM7QUFFckMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFakMsTUFBTSxJQUFJLEdBQUc7UUFDWCxJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakQsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ25ELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtTQUNuRDtRQUNELE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRCxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkQsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFD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QUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUN6QixNQUFNLEVBQUUsbUJBQTBCO1lBQ2xDLFlBQVksRUFBRTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDZixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7d0JBQ3hCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztxQkFDekI7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDNUMsT0FBTyxFQUFFLGFBQWE7WUFDdEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsUUFBUSxFQUFFLEtBQUs7WUFDZix5Q0FBeUMsRUFBRSxJQUFJO1NBQ2hELENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBMEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdlbmVyYXRlQWRkcmVzcyB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuZGVzY3JpYmUoJ0N1c3RvbSBDaGFuZ2UgV2FsbGV0cycsICgpID0+IHtcbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG5cbiAgY29uc3Qga2V5cyA9IHtcbiAgICBzZW5kOiB7XG4gICAgICB1c2VyOiB7IGlkOiAnMCcsIGtleTogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSB9LFxuICAgICAgYmFja3VwOiB7IGlkOiAnMScsIGtleTogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSB9LFxuICAgICAgYml0Z286IHsgaWQ6ICcyJywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgfSxcbiAgICBjaGFuZ2U6IHtcbiAgICAgIHVzZXI6IHsgaWQ6ICczJywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgICBiYWNrdXA6IHsgaWQ6ICc0Jywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgICBiaXRnbzogeyBpZDogJzUnLCBrZXk6IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCkgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMgPSB7XG4gICAgdXNlcjogJycsXG4gICAgYmFja3VwOiAnJyxcbiAgICBiaXRnbzogJycsXG4gIH07XG5cbiAgY29uc3QgYWRkcmVzc0RhdGEgPSB7XG4gICAgY2hhaW46IDExLFxuICAgIGluZGV4OiAxLFxuICAgIGFkZHJlc3NUeXBlOiAncDJzaFAyd3NoJyBhcyBjb25zdCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGtleWNoYWluczogW1xuICAgICAgeyBwdWI6IGtleXMuY2hhbmdlLnVzZXIua2V5LnB1YiEgfSxcbiAgICAgIHsgcHViOiBrZXlzLmNoYW5nZS5iYWNrdXAua2V5LnB1YiEgfSxcbiAgICAgIHsgcHViOiBrZXlzLmNoYW5nZS5iaXRnby5rZXkucHViISB9LFxuICAgIF0sXG4gICAgdGhyZXNob2xkOiAyLFxuICB9O1xuXG4gIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3MoY29pbi5uYW1lLCBhZGRyZXNzRGF0YSk7XG5cbiAgY29uc3QgY2hhbmdlV2FsbGV0SWQgPSAnY2hhbmdlV2FsbGV0SWQnO1xuICBjb25zdCBzdHViRGF0YSA9IHtcbiAgICBzaWduZWRTZW5kaW5nV2FsbGV0OiB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtrZXlzLnNlbmQudXNlci5pZCwga2V5cy5zZW5kLmJhY2t1cC5pZCwga2V5cy5zZW5kLmJpdGdvLmlkXSksXG4gICAgICBjb2luU3BlY2lmaWM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgY3VzdG9tQ2hhbmdlV2FsbGV0SWQ6IGNoYW5nZVdhbGxldElkIH0pLFxuICAgIH0sXG4gICAgY2hhbmdlV2FsbGV0OiB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtrZXlzLmNoYW5nZS51c2VyLmlkLCBrZXlzLmNoYW5nZS5iYWNrdXAuaWQsIGtleXMuY2hhbmdlLmJpdGdvLmlkXSksXG4gICAgICBjcmVhdGVBZGRyZXNzOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoY2hhbmdlQWRkcmVzcyksXG4gICAgfSxcbiAgfTtcblxuICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3Qgc2lnbiA9IGFzeW5jICh7IGtleSB9KSA9PiAoYXdhaXQgY29pbi5zaWduTWVzc2FnZSh7IHBydjoga2V5cy5zZW5kLnVzZXIua2V5LnBydiB9LCBrZXkucHViISkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLnVzZXIgPSBhd2FpdCBzaWduKGtleXMuY2hhbmdlLnVzZXIpO1xuICAgIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYmFja3VwID0gYXdhaXQgc2lnbihrZXlzLmNoYW5nZS5iYWNrdXApO1xuICAgIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYml0Z28gPSBhd2FpdCBzaWduKGtleXMuY2hhbmdlLmJpdGdvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb25zaWRlciBhZGRyZXNzZXMgZGVyaXZlZCBmcm9tIHRoZSBjdXN0b20gY2hhbmdlIGtleXMgYXMgaW50ZXJuYWwgc3BlbmRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpZ25lZFNlbmRpbmdXYWxsZXQgPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoV2FsbGV0LCBzdHViRGF0YS5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSk7XG4gICAgY29uc3QgY2hhbmdlV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCwgc3R1YkRhdGEuY2hhbmdlV2FsbGV0IGFzIGFueSk7XG5cbiAgICBzaW5vbi5zdHViKGNvaW4sICdrZXljaGFpbnMnKS5yZXR1cm5zKHtcbiAgICAgIGdldDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgoeyBpZCB9KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICBjYXNlIGtleXMuc2VuZC51c2VyLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLnNlbmQudXNlci5rZXkgfSk7XG4gICAgICAgICAgY2FzZSBrZXlzLnNlbmQuYmFja3VwLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLnNlbmQuYmFja3VwLmtleSB9KTtcbiAgICAgICAgICBjYXNlIGtleXMuc2VuZC5iaXRnby5pZDpcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBpZCwgLi4ua2V5cy5zZW5kLmJpdGdvLmtleSB9KTtcbiAgICAgICAgICBjYXNlIGtleXMuY2hhbmdlLnVzZXIuaWQ6XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgaWQsIC4uLmtleXMuY2hhbmdlLnVzZXIua2V5IH0pO1xuICAgICAgICAgIGNhc2Uga2V5cy5jaGFuZ2UuYmFja3VwLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLmNoYW5nZS5iYWNrdXAua2V5IH0pO1xuICAgICAgICAgIGNhc2Uga2V5cy5jaGFuZ2UuYml0Z28uaWQ6XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgaWQsIC4uLmtleXMuY2hhbmdlLmJpdGdvLmtleSB9KTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgc2lub24uc3R1Yihjb2luLCAnd2FsbGV0cycpLnJldHVybnMoe1xuICAgICAgZ2V0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCgpID0+IFByb21pc2UucmVzb2x2ZShjaGFuZ2VXYWxsZXQpKSxcbiAgICB9IGFzIGFueSk7XG5cbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSAxMDAwMDtcbiAgICBjb25zdCByZWNpcGllbnRzID0gW107XG5cbiAgICBzaW5vbi5zdHViKGNvaW4sICdleHBsYWluVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGNoYW5nZUFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgYW55KTtcblxuICAgIHNpZ25lZFNlbmRpbmdXYWxsZXQuX3dhbGxldCA9IHNpZ25lZFNlbmRpbmdXYWxsZXQuX3dhbGxldCB8fCB7XG4gICAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLFxuICAgIH07XG5cbiAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyBjaGFuZ2VBZGRyZXNzLCByZWNpcGllbnRzIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiAnJyB9LFxuICAgICAgd2FsbGV0OiBzaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIHZlcmlmaWNhdGlvbjoge1xuICAgICAgICBhZGRyZXNzZXM6IHtcbiAgICAgICAgICBbY2hhbmdlQWRkcmVzc106IHtcbiAgICAgICAgICAgIGNoYWluOiBhZGRyZXNzRGF0YS5jaGFpbixcbiAgICAgICAgICAgIGluZGV4OiBhZGRyZXNzRGF0YS5pbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHNob3VsZC5leGlzdChwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdKTtcbiAgICBwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogY2hhbmdlQWRkcmVzcyxcbiAgICAgIGFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgfSk7XG5cbiAgICAoY29pbi5leHBsYWluVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gICAgKGNvaW4ud2FsbGV0cyBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgICAoY29pbi5rZXljaGFpbnMgYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xufSk7XG4iXX0=