@bitgo-beta/abstract-eth 1.2.3-alpha.507 → 1.2.3-alpha.509
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.
- package/dist/src/abstractEthLikeNewCoins.d.ts +26 -1
- package/dist/src/abstractEthLikeNewCoins.d.ts.map +1 -1
- package/dist/src/abstractEthLikeNewCoins.js +57 -11
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +2 -6
- package/dist/src/lib/iface.d.ts +6 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/transactionBuilder.d.ts +42 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +90 -1
- package/dist/src/lib/utils.d.ts +40 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +77 -1
- package/dist/src/lib/walletUtil.d.ts +1 -0
- package/dist/src/lib/walletUtil.d.ts.map +1 -1
- package/dist/src/lib/walletUtil.js +4 -2
- package/dist/src/lib/zamaUtils.d.ts +34 -0
- package/dist/src/lib/zamaUtils.d.ts.map +1 -1
- package/dist/src/lib/zamaUtils.js +62 -1
- package/dist/test/unit/transactionBuilder/flushERC7984.d.ts +3 -0
- package/dist/test/unit/transactionBuilder/flushERC7984.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/flushERC7984.js +292 -0
- package/dist/test/unit/transactionBuilder/index.d.ts +1 -0
- package/dist/test/unit/transactionBuilder/index.d.ts.map +1 -1
- package/dist/test/unit/transactionBuilder/index.js +2 -1
- package/dist/test/unit/zamaUtils.js +102 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.runFlushERC7984Tests = runFlushERC7984Tests;
|
|
7
|
+
/**
|
|
8
|
+
* TransactionBuilder tests for FlushERC7984ForwarderToken transaction type.
|
|
9
|
+
*
|
|
10
|
+
* Verifies:
|
|
11
|
+
* - Building a FlushERC7984ForwarderToken tx from scratch (legacy and EIP-1559 fees)
|
|
12
|
+
* - Signing and serialization round-trip for both signed and unsigned transactions
|
|
13
|
+
* - classifyTransaction correctly identifies the type
|
|
14
|
+
* - Error cases for missing fields
|
|
15
|
+
* - contractAddress !== forwarderAddress guard
|
|
16
|
+
*/
|
|
17
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
18
|
+
const should_1 = __importDefault(require("should"));
|
|
19
|
+
const src_1 = require("../../../src");
|
|
20
|
+
const zamaUtils_1 = require("../../../src/lib/zamaUtils");
|
|
21
|
+
const utils_1 = require("../../../src/lib/utils");
|
|
22
|
+
const FORWARDER_ADDRESS = '0xDeADbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF';
|
|
23
|
+
const TOKEN_CONTRACT_ADDRESS = '0x94167129172A35ab093B44b8b96213DDbc3cD387';
|
|
24
|
+
const PARENT_ADDRESS = '0x1111111111111111111111111111111111111111';
|
|
25
|
+
const ENCRYPTED_HANDLE = '0x' + 'ab'.repeat(32); // 32-byte mock handle
|
|
26
|
+
const OTHER_ADDRESS = '0x2222222222222222222222222222222222222222';
|
|
27
|
+
// Deterministic test-only private key — never used on mainnet
|
|
28
|
+
const TEST_PRV_KEY = 'FAC4D04AA0025ECF200D74BC9B5E4616E4B8338B69B61362AAAD49F76E68EF28';
|
|
29
|
+
function runFlushERC7984Tests(coinName, getBuilder) {
|
|
30
|
+
describe(`${coinName} transaction builder — FlushERC7984ForwarderToken`, () => {
|
|
31
|
+
let txBuilder;
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
txBuilder = getBuilder(coinName);
|
|
34
|
+
txBuilder.fee({ fee: '1000000000', gasLimit: '200000' });
|
|
35
|
+
txBuilder.counter(1);
|
|
36
|
+
});
|
|
37
|
+
// -------------------------------------------------------------------------
|
|
38
|
+
// classifyTransaction — verify selector → type mapping
|
|
39
|
+
// -------------------------------------------------------------------------
|
|
40
|
+
describe('classifyTransaction', () => {
|
|
41
|
+
it('should classify callFromParent+confidentialTransfer as FlushERC7984ForwarderToken', () => {
|
|
42
|
+
const calldata = (0, zamaUtils_1.buildFlushERC7984ForwarderTokenCalldata)(TOKEN_CONTRACT_ADDRESS, PARENT_ADDRESS, ENCRYPTED_HANDLE);
|
|
43
|
+
const result = (0, utils_1.classifyTransaction)(calldata);
|
|
44
|
+
should_1.default.equal(result, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
45
|
+
});
|
|
46
|
+
it('should NOT classify plain callFromParent (delegation) as FlushERC7984ForwarderToken', () => {
|
|
47
|
+
// A callFromParent wrapping a multicall delegation starts with 0xac9650d8 inside, not 0x5bebed7e
|
|
48
|
+
// Use callFromParent prefix + arbitrary non-confidentialTransfer inner data
|
|
49
|
+
const fakeInner = '0xac9650d8' + '00'.repeat(64); // multicall selector
|
|
50
|
+
const { wrapInCallFromParent } = require('../../../src/lib/zamaUtils');
|
|
51
|
+
const calldata = wrapInCallFromParent(TOKEN_CONTRACT_ADDRESS, fakeInner);
|
|
52
|
+
const result = (0, utils_1.classifyTransaction)(calldata);
|
|
53
|
+
// Should fall through to ContractCall, not FlushERC7984ForwarderToken
|
|
54
|
+
should_1.default.equal(result, sdk_core_1.TransactionType.ContractCall);
|
|
55
|
+
});
|
|
56
|
+
it('should NOT classify confidentialTransferWithProof inside sendMultiSig as FlushERC7984ForwarderToken', () => {
|
|
57
|
+
// SendERC7984 uses sendMultiSig wrapping confidentialTransferWithProof
|
|
58
|
+
// Should remain SendERC7984, not FlushERC7984ForwarderToken
|
|
59
|
+
const result = (0, utils_1.classifyTransaction)('0x39125215' + '00'.repeat(28));
|
|
60
|
+
should_1.default.equal(result, sdk_core_1.TransactionType.Send);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
// -------------------------------------------------------------------------
|
|
64
|
+
// Build from scratch
|
|
65
|
+
// -------------------------------------------------------------------------
|
|
66
|
+
describe('build from scratch', () => {
|
|
67
|
+
it('should build a FlushERC7984ForwarderToken transaction', async () => {
|
|
68
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
69
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
70
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
71
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
72
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
73
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
74
|
+
const tx = await txBuilder.build();
|
|
75
|
+
const json = tx.toJson();
|
|
76
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
77
|
+
json.to.toLowerCase().should.equal(FORWARDER_ADDRESS.toLowerCase());
|
|
78
|
+
json.data.should.startWith(zamaUtils_1.callFromParentMethodId);
|
|
79
|
+
json.value.should.equal('0');
|
|
80
|
+
});
|
|
81
|
+
it('tx.data should contain the inner confidentialTransfer selector', async () => {
|
|
82
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
83
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
84
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
85
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
86
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
87
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
88
|
+
const tx = await txBuilder.build();
|
|
89
|
+
const json = tx.toJson();
|
|
90
|
+
const { tokenContractAddress, parentAddress, encryptedHandle } = (0, zamaUtils_1.decodeFlushERC7984ForwarderTokenCalldata)(json.data);
|
|
91
|
+
tokenContractAddress.toLowerCase().should.equal(TOKEN_CONTRACT_ADDRESS.toLowerCase());
|
|
92
|
+
parentAddress.toLowerCase().should.equal(PARENT_ADDRESS.toLowerCase());
|
|
93
|
+
encryptedHandle.should.equal(ENCRYPTED_HANDLE);
|
|
94
|
+
});
|
|
95
|
+
it('tx.to should equal the forwarder address', async () => {
|
|
96
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
97
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
98
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
99
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
100
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
101
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
102
|
+
const tx = await txBuilder.build();
|
|
103
|
+
tx.toJson().to.toLowerCase().should.equal(FORWARDER_ADDRESS.toLowerCase());
|
|
104
|
+
});
|
|
105
|
+
it('should build with EIP-1559 fee model', async () => {
|
|
106
|
+
const builder = getBuilder(coinName);
|
|
107
|
+
builder.fee({
|
|
108
|
+
fee: '30000000000',
|
|
109
|
+
eip1559: {
|
|
110
|
+
maxFeePerGas: '30000000000',
|
|
111
|
+
maxPriorityFeePerGas: '1000000000',
|
|
112
|
+
},
|
|
113
|
+
gasLimit: '200000',
|
|
114
|
+
});
|
|
115
|
+
builder.counter(1);
|
|
116
|
+
builder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
117
|
+
builder.contract(FORWARDER_ADDRESS);
|
|
118
|
+
builder.forwarderAddress(FORWARDER_ADDRESS);
|
|
119
|
+
builder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
120
|
+
builder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
121
|
+
builder.parentAddress(PARENT_ADDRESS);
|
|
122
|
+
const tx = await builder.build();
|
|
123
|
+
const json = tx.toJson();
|
|
124
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
125
|
+
json._type.should.equal(src_1.ETHTransactionType.EIP1559);
|
|
126
|
+
json.maxFeePerGas.should.equal('30000000000');
|
|
127
|
+
json.maxPriorityFeePerGas.should.equal('1000000000');
|
|
128
|
+
should_1.default.not.exist(json.gasPrice);
|
|
129
|
+
json.data.should.startWith(zamaUtils_1.callFromParentMethodId);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
// -------------------------------------------------------------------------
|
|
133
|
+
// Signing
|
|
134
|
+
// -------------------------------------------------------------------------
|
|
135
|
+
describe('signing', () => {
|
|
136
|
+
it('should produce a signed transaction with v, r, s and from fields', async () => {
|
|
137
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
138
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
139
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
140
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
141
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
142
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
143
|
+
txBuilder.sign({ key: TEST_PRV_KEY });
|
|
144
|
+
const tx = await txBuilder.build();
|
|
145
|
+
const json = tx.toJson();
|
|
146
|
+
should_1.default.exist(json.v);
|
|
147
|
+
should_1.default.exist(json.r);
|
|
148
|
+
should_1.default.exist(json.s);
|
|
149
|
+
should_1.default.exist(json.from);
|
|
150
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
151
|
+
});
|
|
152
|
+
it('should round-trip a signed transaction from serialized hex', async () => {
|
|
153
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
154
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
155
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
156
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
157
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
158
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
159
|
+
txBuilder.sign({ key: TEST_PRV_KEY });
|
|
160
|
+
const originalTx = await txBuilder.build();
|
|
161
|
+
const rawHex = originalTx.toBroadcastFormat();
|
|
162
|
+
const rebuiltBuilder = getBuilder(coinName);
|
|
163
|
+
rebuiltBuilder.from(rawHex);
|
|
164
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
165
|
+
rebuiltTx.toBroadcastFormat().should.equal(rawHex);
|
|
166
|
+
should_1.default.equal(rebuiltTx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
167
|
+
should_1.default.exist(rebuiltTx.toJson().v);
|
|
168
|
+
});
|
|
169
|
+
it('should produce a signed EIP-1559 transaction with v, r, s fields', async () => {
|
|
170
|
+
const builder = getBuilder(coinName);
|
|
171
|
+
builder.fee({
|
|
172
|
+
fee: '30000000000',
|
|
173
|
+
eip1559: {
|
|
174
|
+
maxFeePerGas: '30000000000',
|
|
175
|
+
maxPriorityFeePerGas: '1000000000',
|
|
176
|
+
},
|
|
177
|
+
gasLimit: '200000',
|
|
178
|
+
});
|
|
179
|
+
builder.counter(1);
|
|
180
|
+
builder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
181
|
+
builder.contract(FORWARDER_ADDRESS);
|
|
182
|
+
builder.forwarderAddress(FORWARDER_ADDRESS);
|
|
183
|
+
builder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
184
|
+
builder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
185
|
+
builder.parentAddress(PARENT_ADDRESS);
|
|
186
|
+
builder.sign({ key: TEST_PRV_KEY });
|
|
187
|
+
const tx = await builder.build();
|
|
188
|
+
const json = tx.toJson();
|
|
189
|
+
json._type.should.equal(src_1.ETHTransactionType.EIP1559);
|
|
190
|
+
should_1.default.exist(json.v);
|
|
191
|
+
should_1.default.exist(json.r);
|
|
192
|
+
should_1.default.exist(json.s);
|
|
193
|
+
should_1.default.exist(json.from);
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
// -------------------------------------------------------------------------
|
|
197
|
+
// Serialization round-trip
|
|
198
|
+
// -------------------------------------------------------------------------
|
|
199
|
+
describe('serialization round-trip', () => {
|
|
200
|
+
it('should serialize and deserialize to the same transaction', async () => {
|
|
201
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
202
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
203
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
204
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
205
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
206
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
207
|
+
const originalTx = await txBuilder.build();
|
|
208
|
+
const rawHex = originalTx.toBroadcastFormat();
|
|
209
|
+
const rebuiltBuilder = getBuilder(coinName);
|
|
210
|
+
rebuiltBuilder.from(rawHex);
|
|
211
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
212
|
+
rebuiltTx.toBroadcastFormat().should.equal(rawHex);
|
|
213
|
+
});
|
|
214
|
+
it('deserialized tx should classify as FlushERC7984ForwarderToken', async () => {
|
|
215
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
216
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
217
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
218
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
219
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
220
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
221
|
+
const originalTx = await txBuilder.build();
|
|
222
|
+
const rawHex = originalTx.toBroadcastFormat();
|
|
223
|
+
const rebuiltBuilder = getBuilder(coinName);
|
|
224
|
+
rebuiltBuilder.from(rawHex);
|
|
225
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
226
|
+
should_1.default.equal(rebuiltTx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
// -------------------------------------------------------------------------
|
|
230
|
+
// Error cases — missing required fields
|
|
231
|
+
// -------------------------------------------------------------------------
|
|
232
|
+
describe('missing field errors', () => {
|
|
233
|
+
it('should throw when forwarderAddress is not set', async () => {
|
|
234
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
235
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
236
|
+
// no forwarderAddress
|
|
237
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
238
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
239
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
240
|
+
await txBuilder.build().should.be.rejectedWith(/missing forwarder address/i);
|
|
241
|
+
});
|
|
242
|
+
it('should throw when tokenContractAddress is not set', async () => {
|
|
243
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
244
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
245
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
246
|
+
// no tokenContractAddress
|
|
247
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
248
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
249
|
+
await txBuilder.build().should.be.rejectedWith(/missing tokenContractAddress/i);
|
|
250
|
+
});
|
|
251
|
+
it('should throw when encryptedHandle is not set', async () => {
|
|
252
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
253
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
254
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
255
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
256
|
+
// no encryptedHandle
|
|
257
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
258
|
+
await txBuilder.build().should.be.rejectedWith(/missing encryptedHandle/i);
|
|
259
|
+
});
|
|
260
|
+
it('should throw when parentAddress is not set', async () => {
|
|
261
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
262
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
263
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
264
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
265
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
266
|
+
// no parentAddress
|
|
267
|
+
await txBuilder.build().should.be.rejectedWith(/missing parentAddress/i);
|
|
268
|
+
});
|
|
269
|
+
it('should throw when contractAddress !== forwarderAddress', async () => {
|
|
270
|
+
txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
|
|
271
|
+
txBuilder.contract(OTHER_ADDRESS); // different from forwarder
|
|
272
|
+
txBuilder.forwarderAddress(FORWARDER_ADDRESS);
|
|
273
|
+
txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
|
|
274
|
+
txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
|
|
275
|
+
txBuilder.parentAddress(PARENT_ADDRESS);
|
|
276
|
+
await txBuilder.build().should.be.rejectedWith(/contractAddress must equal forwarderAddress/);
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
// -------------------------------------------------------------------------
|
|
280
|
+
// Setter validation
|
|
281
|
+
// -------------------------------------------------------------------------
|
|
282
|
+
describe('setter validation', () => {
|
|
283
|
+
it('tokenContractAddress should reject invalid address', () => {
|
|
284
|
+
should_1.default.throws(() => txBuilder.tokenContractAddress('not-an-address'), /Invalid address/);
|
|
285
|
+
});
|
|
286
|
+
it('parentAddress should reject invalid address', () => {
|
|
287
|
+
should_1.default.throws(() => txBuilder.parentAddress('not-an-address'), /Invalid address/);
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hFUkM3OTg0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9mbHVzaEVSQzc5ODQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE0QkEsb0RBeVRDO0FBclZEOzs7Ozs7Ozs7R0FTRztBQUNILG1EQUF1RDtBQUN2RCxvREFBNEI7QUFDNUIsc0NBQXNFO0FBQ3RFLDBEQUlvQztBQUNwQyxrREFBNkQ7QUFFN0QsTUFBTSxpQkFBaUIsR0FBRyw0Q0FBNEMsQ0FBQztBQUN2RSxNQUFNLHNCQUFzQixHQUFHLDRDQUE0QyxDQUFDO0FBQzVFLE1BQU0sY0FBYyxHQUFHLDRDQUE0QyxDQUFDO0FBQ3BFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7QUFDdkUsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7QUFDbkUsOERBQThEO0FBQzlELE1BQU0sWUFBWSxHQUFHLGtFQUFrRSxDQUFDO0FBRXhGLFNBQWdCLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsVUFBZ0Q7SUFDckcsUUFBUSxDQUFDLEdBQUcsUUFBUSxtREFBbUQsRUFBRSxHQUFHLEVBQUU7UUFDNUUsSUFBSSxTQUE2QixDQUFDO1FBRWxDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCw0RUFBNEU7UUFDNUUsdURBQXVEO1FBQ3ZELDRFQUE0RTtRQUM1RSxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FB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QyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUcmFuc2FjdGlvbkJ1aWxkZXIgdGVzdHMgZm9yIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuIHRyYW5zYWN0aW9uIHR5cGUuXG4gKlxuICogVmVyaWZpZXM6XG4gKiAgIC0gQnVpbGRpbmcgYSBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbiB0eCBmcm9tIHNjcmF0Y2ggKGxlZ2FjeSBhbmQgRUlQLTE1NTkgZmVlcylcbiAqICAgLSBTaWduaW5nIGFuZCBzZXJpYWxpemF0aW9uIHJvdW5kLXRyaXAgZm9yIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZCB0cmFuc2FjdGlvbnNcbiAqICAgLSBjbGFzc2lmeVRyYW5zYWN0aW9uIGNvcnJlY3RseSBpZGVudGlmaWVzIHRoZSB0eXBlXG4gKiAgIC0gRXJyb3IgY2FzZXMgZm9yIG1pc3NpbmcgZmllbGRzXG4gKiAgIC0gY29udHJhY3RBZGRyZXNzICE9PSBmb3J3YXJkZXJBZGRyZXNzIGd1YXJkXG4gKi9cbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEVUSFRyYW5zYWN0aW9uVHlwZSwgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7XG4gIGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YSxcbiAgY2FsbEZyb21QYXJlbnRNZXRob2RJZCxcbiAgZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YSxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi96YW1hVXRpbHMnO1xuaW1wb3J0IHsgY2xhc3NpZnlUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuXG5jb25zdCBGT1JXQVJERVJfQUREUkVTUyA9ICcweERlQURiZWVmZEVBZGJlZWZkRWFkYkVFRmRlYWRiZUVGZEVhRGJlZUYnO1xuY29uc3QgVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyA9ICcweDk0MTY3MTI5MTcyQTM1YWIwOTNCNDRiOGI5NjIxM0REYmMzY0QzODcnO1xuY29uc3QgUEFSRU5UX0FERFJFU1MgPSAnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJztcbmNvbnN0IEVOQ1JZUFRFRF9IQU5ETEUgPSAnMHgnICsgJ2FiJy5yZXBlYXQoMzIpOyAvLyAzMi1ieXRlIG1vY2sgaGFuZGxlXG5jb25zdCBPVEhFUl9BRERSRVNTID0gJzB4MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMic7XG4vLyBEZXRlcm1pbmlzdGljIHRlc3Qtb25seSBwcml2YXRlIGtleSDigJQgbmV2ZXIgdXNlZCBvbiBtYWlubmV0XG5jb25zdCBURVNUX1BSVl9LRVkgPSAnRkFDNEQwNEFBMDAyNUVDRjIwMEQ3NEJDOUI1RTQ2MTZFNEI4MzM4QjY5QjYxMzYyQUFBRDQ5Rjc2RTY4RUYyOCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5GbHVzaEVSQzc5ODRUZXN0cyhjb2luTmFtZTogc3RyaW5nLCBnZXRCdWlsZGVyOiAoY29pbjogc3RyaW5nKSA9PiBUcmFuc2FjdGlvbkJ1aWxkZXIpOiB2b2lkIHtcbiAgZGVzY3JpYmUoYCR7Y29pbk5hbWV9IHRyYW5zYWN0aW9uIGJ1aWxkZXIg4oCUIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuYCwgKCkgPT4ge1xuICAgIGxldCB0eEJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcjtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTAwMDAwMDAwMCcsIGdhc0xpbWl0OiAnMjAwMDAwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICAgIH0pO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGNsYXNzaWZ5VHJhbnNhY3Rpb24g4oCUIHZlcmlmeSBzZWxlY3RvciDihpIgdHlwZSBtYXBwaW5nXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGRlc2NyaWJlKCdjbGFzc2lmeVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBjbGFzc2lmeSBjYWxsRnJvbVBhcmVudCtjb25maWRlbnRpYWxUcmFuc2ZlciBhcyBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoXG4gICAgICAgICAgVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyxcbiAgICAgICAgICBQQVJFTlRfQUREUkVTUyxcbiAgICAgICAgICBFTkNSWVBURURfSEFORExFXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNsYXNzaWZ5VHJhbnNhY3Rpb24oY2FsbGRhdGEpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgTk9UIGNsYXNzaWZ5IHBsYWluIGNhbGxGcm9tUGFyZW50IChkZWxlZ2F0aW9uKSBhcyBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbicsICgpID0+IHtcbiAgICAgICAgLy8gQSBjYWxsRnJvbVBhcmVudCB3cmFwcGluZyBhIG11bHRpY2FsbCBkZWxlZ2F0aW9uIHN0YXJ0cyB3aXRoIDB4YWM5NjUwZDggaW5zaWRlLCBub3QgMHg1YmViZWQ3ZVxuICAgICAgICAvLyBVc2UgY2FsbEZyb21QYXJlbnQgcHJlZml4ICsgYXJiaXRyYXJ5IG5vbi1jb25maWRlbnRpYWxUcmFuc2ZlciBpbm5lciBkYXRhXG4gICAgICAgIGNvbnN0IGZha2VJbm5lciA9ICcweGFjOTY1MGQ4JyArICcwMCcucmVwZWF0KDY0KTsgLy8gbXVsdGljYWxsIHNlbGVjdG9yXG4gICAgICAgIGNvbnN0IHsgd3JhcEluQ2FsbEZyb21QYXJlbnQgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9saWIvemFtYVV0aWxzJyk7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUywgZmFrZUlubmVyKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2xhc3NpZnlUcmFuc2FjdGlvbihjYWxsZGF0YSk7XG4gICAgICAgIC8vIFNob3VsZCBmYWxsIHRocm91Z2ggdG8gQ29udHJhY3RDYWxsLCBub3QgRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdCwgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBOT1QgY2xhc3NpZnkgY29uZmlkZW50aWFsVHJhbnNmZXJXaXRoUHJvb2YgaW5zaWRlIHNlbmRNdWx0aVNpZyBhcyBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbicsICgpID0+IHtcbiAgICAgICAgLy8gU2VuZEVSQzc5ODQgdXNlcyBzZW5kTXVsdGlTaWcgd3JhcHBpbmcgY29uZmlkZW50aWFsVHJhbnNmZXJXaXRoUHJvb2ZcbiAgICAgICAgLy8gU2hvdWxkIHJlbWFpbiBTZW5kRVJDNzk4NCwgbm90IEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNsYXNzaWZ5VHJhbnNhY3Rpb24oJzB4MzkxMjUyMTUnICsgJzAwJy5yZXBlYXQoMjgpKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdCwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQnVpbGQgZnJvbSBzY3JhdGNoXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGRlc2NyaWJlKCdidWlsZCBmcm9tIHNjcmF0Y2gnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJBZGRyZXNzKEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZW5jcnlwdGVkSGFuZGxlKEVOQ1JZUFRFRF9IQU5ETEUpO1xuICAgICAgICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhQQVJFTlRfQUREUkVTUyk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICBqc29uLnRvLnRvTG93ZXJDYXNlKCkuc2hvdWxkLmVxdWFsKEZPUldBUkRFUl9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBqc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChjYWxsRnJvbVBhcmVudE1ldGhvZElkKTtcbiAgICAgICAganNvbi52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndHguZGF0YSBzaG91bGQgY29udGFpbiB0aGUgaW5uZXIgY29uZmlkZW50aWFsVHJhbnNmZXIgc2VsZWN0b3InLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJBZGRyZXNzKEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZW5jcnlwdGVkSGFuZGxlKEVOQ1JZUFRFRF9IQU5ETEUpO1xuICAgICAgICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhQQVJFTlRfQUREUkVTUyk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIGNvbnN0IHsgdG9rZW5Db250cmFjdEFkZHJlc3MsIHBhcmVudEFkZHJlc3MsIGVuY3J5cHRlZEhhbmRsZSB9ID0gZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShcbiAgICAgICAgICBqc29uLmRhdGFcbiAgICAgICAgKTtcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3MudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgcGFyZW50QWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChQQVJFTlRfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgZW5jcnlwdGVkSGFuZGxlLnNob3VsZC5lcXVhbChFTkNSWVBURURfSEFORExFKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndHgudG8gc2hvdWxkIGVxdWFsIHRoZSBmb3J3YXJkZXIgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICB0eC50b0pzb24oKS50by50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChGT1JXQVJERVJfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIHdpdGggRUlQLTE1NTkgZmVlIG1vZGVsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIGJ1aWxkZXIuZmVlKHtcbiAgICAgICAgICBmZWU6ICczMDAwMDAwMDAwMCcsXG4gICAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiAnMzAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdhc0xpbWl0OiAnMjAwMDAwJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgICAgYnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIGJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLmVuY3J5cHRlZEhhbmRsZShFTkNSWVBURURfSEFORExFKTtcbiAgICAgICAgYnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICBqc29uLl90eXBlLnNob3VsZC5lcXVhbChFVEhUcmFuc2FjdGlvblR5cGUuRUlQMTU1OSk7XG4gICAgICAgIGpzb24ubWF4RmVlUGVyR2FzIS5zaG91bGQuZXF1YWwoJzMwMDAwMDAwMDAwJyk7XG4gICAgICAgIGpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMhLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMCcpO1xuICAgICAgICBzaG91bGQubm90LmV4aXN0KChqc29uIGFzIGFueSkuZ2FzUHJpY2UpO1xuICAgICAgICBqc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChjYWxsRnJvbVBhcmVudE1ldGhvZElkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNpZ25pbmdcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZGVzY3JpYmUoJ3NpZ25pbmcnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSBzaWduZWQgdHJhbnNhY3Rpb24gd2l0aCB2LCByLCBzIGFuZCBmcm9tIGZpZWxkcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IFRFU1RfUFJWX0tFWSB9KTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgICAgc2hvdWxkLmV4aXN0KGpzb24udik7XG4gICAgICAgIHNob3VsZC5leGlzdChqc29uLnIpO1xuICAgICAgICBzaG91bGQuZXhpc3QoanNvbi5zKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGpzb24uZnJvbSk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcm91bmQtdHJpcCBhIHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQgaGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkNvbnRyYWN0QWRkcmVzcyhUT0tFTl9DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmVuY3J5cHRlZEhhbmRsZShFTkNSWVBURURfSEFORExFKTtcbiAgICAgICAgdHhCdWlsZGVyLnBhcmVudEFkZHJlc3MoUEFSRU5UX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogVEVTVF9QUlZfS0VZIH0pO1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIHJlYnVpbHRCdWlsZGVyLmZyb20ocmF3SGV4KTtcbiAgICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICByZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3SGV4KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICBzaG91bGQuZXhpc3QocmVidWlsdFR4LnRvSnNvbigpLnYpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIHNpZ25lZCBFSVAtMTU1OSB0cmFuc2FjdGlvbiB3aXRoIHYsIHIsIHMgZmllbGRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIGJ1aWxkZXIuZmVlKHtcbiAgICAgICAgICBmZWU6ICczMDAwMDAwMDAwMCcsXG4gICAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiAnMzAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdhc0xpbWl0OiAnMjAwMDAwJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgICAgYnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIGJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLmVuY3J5cHRlZEhhbmRsZShFTkNSWVBURURfSEFORExFKTtcbiAgICAgICAgYnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiBURVNUX1BSVl9LRVkgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICBqc29uLl90eXBlLnNob3VsZC5lcXVhbChFVEhUcmFuc2FjdGlvblR5cGUuRUlQMTU1OSk7XG4gICAgICAgIHNob3VsZC5leGlzdChqc29uLnYpO1xuICAgICAgICBzaG91bGQuZXhpc3QoanNvbi5yKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGpzb24ucyk7XG4gICAgICAgIHNob3VsZC5leGlzdChqc29uLmZyb20pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2VyaWFsaXphdGlvbiByb3VuZC10cmlwXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGRlc2NyaWJlKCdzZXJpYWxpemF0aW9uIHJvdW5kLXRyaXAnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdG8gdGhlIHNhbWUgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJBZGRyZXNzKEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZW5jcnlwdGVkSGFuZGxlKEVOQ1JZUFRFRF9IQU5ETEUpO1xuICAgICAgICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhQQVJFTlRfQUREUkVTUyk7XG5cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdIZXggPSBvcmlnaW5hbFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBnZXRCdWlsZGVyKGNvaW5OYW1lKTtcbiAgICAgICAgcmVidWlsdEJ1aWxkZXIuZnJvbShyYXdIZXgpO1xuICAgICAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCByZWJ1aWx0QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIHJlYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChyYXdIZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkZXNlcmlhbGl6ZWQgdHggc2hvdWxkIGNsYXNzaWZ5IGFzIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkNvbnRyYWN0QWRkcmVzcyhUT0tFTl9DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmVuY3J5cHRlZEhhbmRsZShFTkNSWVBURURfSEFORExFKTtcbiAgICAgICAgdHhCdWlsZGVyLnBhcmVudEFkZHJlc3MoUEFSRU5UX0FERFJFU1MpO1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIHJlYnVpbHRCdWlsZGVyLmZyb20ocmF3SGV4KTtcbiAgICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmVidWlsdFR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBFcnJvciBjYXNlcyDigJQgbWlzc2luZyByZXF1aXJlZCBmaWVsZHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZGVzY3JpYmUoJ21pc3NpbmcgZmllbGQgZXJyb3JzJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGZvcndhcmRlckFkZHJlc3MgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgLy8gbm8gZm9yd2FyZGVyQWRkcmVzc1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIGZvcndhcmRlciBhZGRyZXNzL2kpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0b2tlbkNvbnRyYWN0QWRkcmVzcyBpcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIC8vIG5vIHRva2VuQ29udHJhY3RBZGRyZXNzXG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIHRva2VuQ29udHJhY3RBZGRyZXNzL2kpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBlbmNyeXB0ZWRIYW5kbGUgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIC8vIG5vIGVuY3J5cHRlZEhhbmRsZVxuICAgICAgICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhQQVJFTlRfQUREUkVTUyk7XG5cbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyBlbmNyeXB0ZWRIYW5kbGUvaSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHBhcmVudEFkZHJlc3MgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIC8vIG5vIHBhcmVudEFkZHJlc3NcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIHBhcmVudEFkZHJlc3MvaSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGNvbnRyYWN0QWRkcmVzcyAhPT0gZm9yd2FyZGVyQWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KE9USEVSX0FERFJFU1MpOyAvLyBkaWZmZXJlbnQgZnJvbSBmb3J3YXJkZXJcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9jb250cmFjdEFkZHJlc3MgbXVzdCBlcXVhbCBmb3J3YXJkZXJBZGRyZXNzLyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTZXR0ZXIgdmFsaWRhdGlvblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgICBpdCgndG9rZW5Db250cmFjdEFkZHJlc3Mgc2hvdWxkIHJlamVjdCBpbnZhbGlkIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKCdub3QtYW4tYWRkcmVzcycpLCAvSW52YWxpZCBhZGRyZXNzLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BhcmVudEFkZHJlc3Mgc2hvdWxkIHJlamVjdCBpbnZhbGlkIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnBhcmVudEFkZHJlc3MoJ25vdC1hbi1hZGRyZXNzJyksIC9JbnZhbGlkIGFkZHJlc3MvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC"}
|
|
@@ -19,4 +19,5 @@ __exportStar(require("./send"), exports);
|
|
|
19
19
|
__exportStar(require("./walletInitialization"), exports);
|
|
20
20
|
__exportStar(require("./flushNft"), exports);
|
|
21
21
|
__exportStar(require("./decryptionDelegation"), exports);
|
|
22
|
-
|
|
22
|
+
__exportStar(require("./flushERC7984"), exports);
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwREFBd0M7QUFDeEMseUNBQXVCO0FBQ3ZCLHlEQUF1QztBQUN2Qyw2Q0FBMkI7QUFDM0IseURBQXVDO0FBQ3ZDLGlEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWRkcmVzc0luaXRpYWxpemF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vc2VuZCc7XG5leHBvcnQgKiBmcm9tICcuL3dhbGxldEluaXRpYWxpemF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vZmx1c2hOZnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNyeXB0aW9uRGVsZWdhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2ZsdXNoRVJDNzk4NCc7XG4iXX0=
|