@bitgo/sdk-coin-cspr 2.4.2 → 2.4.3

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 (47) hide show
  1. package/dist/test/fixtures/cspr.d.ts +4 -0
  2. package/dist/test/fixtures/cspr.d.ts.map +1 -0
  3. package/dist/test/fixtures/cspr.js +7 -0
  4. package/dist/test/fixtures/resources.d.ts +92 -0
  5. package/dist/test/fixtures/resources.d.ts.map +1 -0
  6. package/dist/test/fixtures/resources.js +96 -0
  7. package/dist/test/integration/index.d.ts +1 -0
  8. package/dist/test/integration/index.d.ts.map +1 -0
  9. package/dist/test/integration/index.js +1 -0
  10. package/dist/test/unit/cspr.d.ts +2 -0
  11. package/dist/test/unit/cspr.d.ts.map +1 -0
  12. package/dist/test/unit/cspr.js +680 -0
  13. package/dist/test/unit/lib/keyPair.d.ts +2 -0
  14. package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
  15. package/dist/test/unit/lib/keyPair.js +159 -0
  16. package/dist/test/unit/lib/signMessage.d.ts +2 -0
  17. package/dist/test/unit/lib/signMessage.d.ts.map +1 -0
  18. package/dist/test/unit/lib/signMessage.js +68 -0
  19. package/dist/test/unit/lib/transaction.d.ts +2 -0
  20. package/dist/test/unit/lib/transaction.d.ts.map +1 -0
  21. package/dist/test/unit/lib/transaction.js +271 -0
  22. package/dist/test/unit/lib/transactionBuilder/delegateBuilder.d.ts +2 -0
  23. package/dist/test/unit/lib/transactionBuilder/delegateBuilder.d.ts.map +1 -0
  24. package/dist/test/unit/lib/transactionBuilder/delegateBuilder.js +191 -0
  25. package/dist/test/unit/lib/transactionBuilder/transactionBuilder.d.ts +2 -0
  26. package/dist/test/unit/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  27. package/dist/test/unit/lib/transactionBuilder/transactionBuilder.js +315 -0
  28. package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts +2 -0
  29. package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts.map +1 -0
  30. package/dist/test/unit/lib/transactionBuilder/transferBuilder.js +519 -0
  31. package/dist/test/unit/lib/transactionBuilder/undelegateBuilder.d.ts +2 -0
  32. package/dist/test/unit/lib/transactionBuilder/undelegateBuilder.d.ts.map +1 -0
  33. package/dist/test/unit/lib/transactionBuilder/undelegateBuilder.js +192 -0
  34. package/dist/test/unit/lib/transactionBuilder/walletInitialization.d.ts +2 -0
  35. package/dist/test/unit/lib/transactionBuilder/walletInitialization.d.ts.map +1 -0
  36. package/dist/test/unit/lib/transactionBuilder/walletInitialization.js +338 -0
  37. package/dist/test/unit/lib/transactionBuilderFactory.d.ts +2 -0
  38. package/dist/test/unit/lib/transactionBuilderFactory.d.ts.map +1 -0
  39. package/dist/test/unit/lib/transactionBuilderFactory.js +328 -0
  40. package/dist/test/unit/lib/util.d.ts +2 -0
  41. package/dist/test/unit/lib/util.d.ts.map +1 -0
  42. package/dist/test/unit/lib/util.js +176 -0
  43. package/dist/tsconfig.tsbuildinfo +1 -0
  44. package/package.json +9 -6
  45. package/.eslintignore +0 -4
  46. package/.mocharc.yml +0 -8
  47. package/CHANGELOG.md +0 -851
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const should_1 = __importDefault(require("should"));
41
+ const statics_1 = require("@bitgo/statics");
42
+ const casper_js_sdk_1 = require("casper-js-sdk");
43
+ const transaction_1 = require("../../../src/lib/transaction");
44
+ const testData = __importStar(require("../../fixtures/resources"));
45
+ const lib_1 = require("../../../src/lib");
46
+ const constants_1 = require("../../../src/lib/constants");
47
+ const utils_1 = require("../../../src/lib/utils");
48
+ describe('Cspr Transaction', () => {
49
+ const coin = statics_1.coins.get('tcspr');
50
+ const factory = new lib_1.TransactionBuilderFactory(coin);
51
+ const owner1Address = new lib_1.KeyPair({ pub: testData.ACCOUNT_1.publicKey }).getAddress();
52
+ const owner2Address = new lib_1.KeyPair({ pub: testData.ACCOUNT_2.publicKey }).getAddress();
53
+ const owner3Address = new lib_1.KeyPair({ pub: testData.ACCOUNT_3.publicKey }).getAddress();
54
+ const sourceAddress = new lib_1.KeyPair({ pub: testData.ROOT_ACCOUNT.publicKey }).getAddress();
55
+ const getTransaction = () => {
56
+ return new transaction_1.Transaction(coin);
57
+ };
58
+ const getWalletInitTransaction = async () => {
59
+ const txBuilder = factory.getWalletInitializationBuilder();
60
+ txBuilder.fee(testData.FEE);
61
+ txBuilder.owner(owner1Address);
62
+ txBuilder.owner(owner2Address);
63
+ txBuilder.owner(owner3Address);
64
+ txBuilder.source({ address: sourceAddress });
65
+ txBuilder.sign({ key: testData.ROOT_ACCOUNT.privateKey });
66
+ return (await txBuilder.build());
67
+ };
68
+ const getWalletInitTransactionUsignExtendedKey = async () => {
69
+ const txBuilder = factory.getWalletInitializationBuilder();
70
+ txBuilder.fee(testData.FEE);
71
+ txBuilder.owner(owner1Address);
72
+ txBuilder.owner(owner2Address);
73
+ txBuilder.owner(owner3Address);
74
+ txBuilder.source({ address: sourceAddress });
75
+ txBuilder.sign({ key: testData.ROOT_ACCOUNT.xPrivateKey });
76
+ return (await txBuilder.build());
77
+ };
78
+ const getTransferTransaction = async () => {
79
+ const txBuilder = factory.getTransferBuilder();
80
+ txBuilder.fee({ gasLimit: testData.FEE.gasLimit, gasPrice: testData.FEE.gasPrice });
81
+ txBuilder.source({ address: sourceAddress });
82
+ txBuilder.to(owner2Address);
83
+ txBuilder.amount(testData.MIN_MOTES_AMOUNT);
84
+ txBuilder.transferId(255);
85
+ return (await txBuilder.build());
86
+ };
87
+ // Creates a deploy instance, required to test signing.
88
+ const getTransferDeploy = () => {
89
+ const gasPrice = testData.FEE.gasPrice ? parseInt(testData.FEE.gasPrice, 10) : undefined;
90
+ const sourcePublicKey = casper_js_sdk_1.CLPublicKey.fromHex(testData.SECP256K1_PREFIX + testData.ACCOUNT_1.publicKey);
91
+ const deployParams = new casper_js_sdk_1.DeployUtil.DeployParams(sourcePublicKey, constants_1.DEFAULT_CHAIN_NAMES.testnet, gasPrice);
92
+ const session = casper_js_sdk_1.DeployUtil.ExecutableDeployItem.newTransfer(1, sourcePublicKey, undefined, 123);
93
+ const payment = casper_js_sdk_1.DeployUtil.standardPayment(parseInt(testData.FEE.gasLimit, 10));
94
+ return casper_js_sdk_1.DeployUtil.makeDeploy(deployParams, session, payment);
95
+ };
96
+ it('should throw empty transaction', () => {
97
+ const tx = getTransaction();
98
+ assert_1.default.throws(() => {
99
+ tx.toJson();
100
+ });
101
+ assert_1.default.throws(() => {
102
+ tx.toBroadcastFormat();
103
+ });
104
+ });
105
+ describe('should sign if transaction is', () => {
106
+ it('valid', async () => {
107
+ const tx = getTransaction();
108
+ const transferDeploy = getTransferDeploy();
109
+ if (transferDeploy) {
110
+ tx.casperTx = transferDeploy;
111
+ }
112
+ const keypair = new lib_1.KeyPair({ prv: testData.ACCOUNT_1.privateKey });
113
+ should_1.default.doesNotThrow(() => tx.sign(keypair));
114
+ should_1.default.equal(tx.casperTx.approvals[0].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_1.publicKey);
115
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, Buffer.from(tx.casperTx.header.account.value()).toString('hex')), true);
116
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, Buffer.from(tx.casperTx.header.account.value()).toString('hex')));
117
+ });
118
+ it('valid using extended key', async () => {
119
+ const tx = getTransaction();
120
+ const transferDeploy = getTransferDeploy();
121
+ if (transferDeploy) {
122
+ tx.casperTx = transferDeploy;
123
+ }
124
+ const keypair = new lib_1.KeyPair({ prv: testData.ACCOUNT_1.xPrivateKey });
125
+ should_1.default.doesNotThrow(() => tx.sign(keypair));
126
+ should_1.default.equal(tx.casperTx.approvals[0].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_1.publicKey);
127
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, Buffer.from(tx.casperTx.header.account.value()).toString('hex')), true);
128
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, Buffer.from(tx.casperTx.header.account.value()).toString('hex')));
129
+ });
130
+ it('multiple valid', async () => {
131
+ const tx = getTransaction();
132
+ const transferDeploy = getTransferDeploy();
133
+ if (transferDeploy) {
134
+ tx.casperTx = transferDeploy;
135
+ }
136
+ const keypair = new lib_1.KeyPair({ prv: testData.ACCOUNT_1.privateKey });
137
+ const keypair2 = new lib_1.KeyPair({ prv: testData.ACCOUNT_2.privateKey });
138
+ should_1.default.doesNotThrow(() => tx.sign(keypair));
139
+ should_1.default.equal(tx.casperTx.approvals[0].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_1.publicKey);
140
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey), true);
141
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey));
142
+ should_1.default.doesNotThrow(() => tx.sign(keypair2));
143
+ should_1.default.equal(tx.casperTx.approvals[0].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_1.publicKey);
144
+ should_1.default.equal(tx.casperTx.approvals[1].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_2.publicKey);
145
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey), true);
146
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[1].signature, tx.casperTx.hash, testData.ACCOUNT_2.publicKey), true);
147
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey));
148
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[1].signature, tx.casperTx.hash, testData.ACCOUNT_2.publicKey));
149
+ });
150
+ it('multiple valid using extended keys', async () => {
151
+ const tx = getTransaction();
152
+ const transferDeploy = getTransferDeploy();
153
+ if (transferDeploy) {
154
+ tx.casperTx = transferDeploy;
155
+ }
156
+ const keypair = new lib_1.KeyPair({ prv: testData.ACCOUNT_1.xPrivateKey });
157
+ const keypair2 = new lib_1.KeyPair({ prv: testData.ACCOUNT_2.xPrivateKey });
158
+ should_1.default.doesNotThrow(() => tx.sign(keypair));
159
+ should_1.default.equal(tx.casperTx.approvals[0].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_1.publicKey);
160
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey), true);
161
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey));
162
+ should_1.default.doesNotThrow(() => tx.sign(keypair2));
163
+ should_1.default.equal(tx.casperTx.approvals[0].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_1.publicKey);
164
+ should_1.default.equal(tx.casperTx.approvals[1].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_2.publicKey);
165
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey), true);
166
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[1].signature, tx.casperTx.hash, testData.ACCOUNT_2.publicKey), true);
167
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey));
168
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[1].signature, tx.casperTx.hash, testData.ACCOUNT_2.publicKey));
169
+ });
170
+ it('multiple valid using one extended key', async () => {
171
+ const tx = getTransaction();
172
+ const transferDeploy = getTransferDeploy();
173
+ if (transferDeploy) {
174
+ tx.casperTx = transferDeploy;
175
+ }
176
+ const keypair = new lib_1.KeyPair({ prv: testData.ACCOUNT_1.xPrivateKey });
177
+ const keypair2 = new lib_1.KeyPair({ prv: testData.ACCOUNT_2.privateKey });
178
+ should_1.default.doesNotThrow(() => tx.sign(keypair));
179
+ should_1.default.equal(tx.casperTx.approvals[0].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_1.publicKey);
180
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey), true);
181
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey));
182
+ should_1.default.doesNotThrow(() => tx.sign(keypair2));
183
+ should_1.default.equal(tx.casperTx.approvals[0].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_1.publicKey);
184
+ should_1.default.equal(tx.casperTx.approvals[1].signer, testData.SECP256K1_PREFIX + testData.ACCOUNT_2.publicKey);
185
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey), true);
186
+ should_1.default.equal((0, utils_1.isValidTransactionSignature)(tx.casperTx.approvals[1].signature, tx.casperTx.hash, testData.ACCOUNT_2.publicKey), true);
187
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[0].signature, tx.casperTx.hash, testData.ACCOUNT_1.publicKey));
188
+ should_1.default.doesNotThrow(() => (0, utils_1.verifySignature)(tx.casperTx.approvals[1].signature, tx.casperTx.hash, testData.ACCOUNT_2.publicKey));
189
+ });
190
+ });
191
+ describe('should reject sign if transaction signer is', () => {
192
+ it('invalid private key', function () {
193
+ const tx = getTransaction();
194
+ assert_1.default.throws(() => tx.sign(testData.INVALID_KEYPAIR_PRV));
195
+ });
196
+ it('public key', function () {
197
+ const tx = getTransaction();
198
+ const keypair = new lib_1.KeyPair({ pub: testData.ACCOUNT_1.publicKey });
199
+ assert_1.default.throws(() => tx.sign(keypair), (e) => e.message === testData.ERROR_MISSING_PRIVATE_KEY);
200
+ });
201
+ it('public extended key', function () {
202
+ const tx = getTransaction();
203
+ const keypair = new lib_1.KeyPair({ pub: testData.ACCOUNT_1.xPublicKey });
204
+ assert_1.default.throws(() => tx.sign(keypair), (e) => e.message === testData.ERROR_MISSING_PRIVATE_KEY);
205
+ });
206
+ });
207
+ describe('should return encoded tx', function () {
208
+ it('wallet initialization', async function () {
209
+ const walletInitTx = await getWalletInitTransaction();
210
+ const encodedTx = walletInitTx.toBroadcastFormat();
211
+ const walletInitJsonTx = JSON.parse(encodedTx);
212
+ const argName = 0;
213
+ const argValue = 1;
214
+ const owner0 = 0;
215
+ const owner1 = 1;
216
+ const owner2 = 2;
217
+ const ownersValues = new Map();
218
+ [owner0, owner1, owner2].forEach((index) => {
219
+ ownersValues.set(constants_1.OWNER_PREFIX + index, walletInitTx.casperTx.session.getArgByName(constants_1.OWNER_PREFIX + index).value());
220
+ });
221
+ const jsonOwnerArgs = walletInitJsonTx['deploy']['session']['ModuleBytes']['args'].filter((arg) => ownersValues.has(arg[argName]));
222
+ jsonOwnerArgs.length.should.equal(ownersValues.size);
223
+ jsonOwnerArgs.forEach((arg) => {
224
+ arg[argValue]['parsed'].should.be.equal(ownersValues.get(arg[argName]));
225
+ });
226
+ });
227
+ it('wallet initialization using extended key', async function () {
228
+ const walletInitTx = await getWalletInitTransactionUsignExtendedKey();
229
+ const encodedTx = walletInitTx.toBroadcastFormat();
230
+ const walletInitJsonTx = JSON.parse(encodedTx);
231
+ const argName = 0;
232
+ const argValue = 1;
233
+ const owner0 = 0;
234
+ const owner1 = 1;
235
+ const owner2 = 2;
236
+ const ownersValues = new Map();
237
+ [owner0, owner1, owner2].forEach((index) => {
238
+ ownersValues.set(constants_1.OWNER_PREFIX + index, walletInitTx.casperTx.session.getArgByName(constants_1.OWNER_PREFIX + index).value());
239
+ });
240
+ const jsonOwnerArgs = walletInitJsonTx['deploy']['session']['ModuleBytes']['args'].filter((arg) => ownersValues.has(arg[argName]));
241
+ jsonOwnerArgs.length.should.equal(ownersValues.size);
242
+ jsonOwnerArgs.forEach((arg) => {
243
+ arg[argValue]['parsed'].should.be.equal(ownersValues.get(arg[argName]));
244
+ });
245
+ });
246
+ it('transfer', async function () {
247
+ const transferTx = await getTransferTransaction();
248
+ const encodedTx = transferTx.toBroadcastFormat();
249
+ const transferJsonTx = JSON.parse(encodedTx);
250
+ const argName = 0;
251
+ const argValue = 1;
252
+ const transferValues = new Map();
253
+ transferValues.set('amount', (0, utils_1.getTransferAmount)(transferTx.casperTx.session));
254
+ transferValues.set('to_address', (0, utils_1.getTransferDestinationAddress)(transferTx.casperTx.session));
255
+ const transferId = (0, utils_1.getTransferId)(transferTx.casperTx.session);
256
+ if (transferId !== undefined) {
257
+ transferValues.set('id', transferId.toString());
258
+ }
259
+ const jsonOwnerArgs = transferJsonTx['deploy']['session']['Transfer']['args'].filter((arg) => transferValues.has(arg[argName]));
260
+ jsonOwnerArgs.length.should.equal(transferValues.size);
261
+ jsonOwnerArgs.forEach((arg) => {
262
+ arg[argValue]['parsed'].should.be.equal(transferValues.get(arg[argName]));
263
+ });
264
+ });
265
+ // TODO STLX-1174: get and decode encoded transaction
266
+ it('valid sign', function (done) {
267
+ done();
268
+ });
269
+ });
270
+ });
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qiw0Q0FBdUM7QUFDdkMsaURBQStFO0FBQy9FLDhEQUEyRDtBQUMzRCxtRUFBcUQ7QUFDckQsMENBQXNFO0FBQ3RFLDBEQUErRTtBQUMvRSxrREFNZ0M7QUFFaEMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RGLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0RixNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEYsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRXpGLE1BQU0sY0FBYyxHQUFHLEdBQWdCLEVBQUU7UUFDdkMsT0FBTyxJ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Q0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFFRCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDM0YsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDakMsQ0FBQztZQUNGLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdkQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1QixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxxREFBcUQ7UUFDckQsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFVLElBQUk7WUFDN0IsSUFBSSxFQUFFLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IENMU3RyaW5nLCBEZXBsb3lVdGlsLCBDTFB1YmxpY0tleSBhcyBQdWJsaWNLZXkgfSBmcm9tICdjYXNwZXItanMtc2RrJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbic7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9maXh0dXJlcy9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgS2V5UGFpciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgREVGQVVMVF9DSEFJTl9OQU1FUywgT1dORVJfUFJFRklYIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgZ2V0VHJhbnNmZXJBbW91bnQsXG4gIGdldFRyYW5zZmVyRGVzdGluYXRpb25BZGRyZXNzLFxuICBnZXRUcmFuc2ZlcklkLFxuICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUsXG4gIHZlcmlmeVNpZ25hdHVyZSxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi91dGlscyc7XG5cbmRlc2NyaWJlKCdDc3ByIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCd0Y3NwcicpO1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbik7XG4gIGNvbnN0IG93bmVyMUFkZHJlc3MgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSB9KS5nZXRBZGRyZXNzKCk7XG4gIGNvbnN0IG93bmVyMkFkZHJlc3MgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuQUNDT1VOVF8yLnB1YmxpY0tleSB9KS5nZXRBZGRyZXNzKCk7XG4gIGNvbnN0IG93bmVyM0FkZHJlc3MgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuQUNDT1VOVF8zLnB1YmxpY0tleSB9KS5nZXRBZGRyZXNzKCk7XG4gIGNvbnN0IHNvdXJjZUFkZHJlc3MgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuUk9PVF9BQ0NPVU5ULnB1YmxpY0tleSB9KS5nZXRBZGRyZXNzKCk7XG5cbiAgY29uc3QgZ2V0VHJhbnNhY3Rpb24gPSAoKTogVHJhbnNhY3Rpb24gPT4ge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gIH07XG5cbiAgY29uc3QgZ2V0V2FsbGV0SW5pdFRyYW5zYWN0aW9uID0gYXN5bmMgKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+ID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mZWUodGVzdERhdGEuRkVFKTtcbiAgICB0eEJ1aWxkZXIub3duZXIob3duZXIxQWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLm93bmVyKG93bmVyMkFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5vd25lcihvd25lcjNBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuc291cmNlKHsgYWRkcmVzczogc291cmNlQWRkcmVzcyB9KTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUk9PVF9BQ0NPVU5ULnByaXZhdGVLZXkgfSk7XG4gICAgcmV0dXJuIChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIH07XG5cbiAgY29uc3QgZ2V0V2FsbGV0SW5pdFRyYW5zYWN0aW9uVXNpZ25FeHRlbmRlZEtleSA9IGFzeW5jICgpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHRlc3REYXRhLkZFRSk7XG4gICAgdHhCdWlsZGVyLm93bmVyKG93bmVyMUFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5vd25lcihvd25lcjJBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIub3duZXIob3duZXIzQWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnNvdXJjZSh7IGFkZHJlc3M6IHNvdXJjZUFkZHJlc3MgfSk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlJPT1RfQUNDT1VOVC54UHJpdmF0ZUtleSB9KTtcbiAgICByZXR1cm4gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgfTtcblxuICBjb25zdCBnZXRUcmFuc2ZlclRyYW5zYWN0aW9uID0gYXN5bmMgKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+ID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mZWUoeyBnYXNMaW1pdDogdGVzdERhdGEuRkVFLmdhc0xpbWl0LCBnYXNQcmljZTogdGVzdERhdGEuRkVFLmdhc1ByaWNlIH0pO1xuICAgIHR4QnVpbGRlci5zb3VyY2UoeyBhZGRyZXNzOiBzb3VyY2VBZGRyZXNzIH0pO1xuICAgIHR4QnVpbGRlci50byhvd25lcjJBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KHRlc3REYXRhLk1JTl9NT1RFU19BTU9VTlQpO1xuICAgIHR4QnVpbGRlci50cmFuc2ZlcklkKDI1NSk7XG4gICAgcmV0dXJuIChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIH07XG5cbiAgLy8gQ3JlYXRlcyBhIGRlcGxveSBpbnN0YW5jZSwgcmVxdWlyZWQgdG8gdGVzdCBzaWduaW5nLlxuICBjb25zdCBnZXRUcmFuc2ZlckRlcGxveSA9ICgpOiBEZXBsb3lVdGlsLkRlcGxveSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgZ2FzUHJpY2UgPSB0ZXN0RGF0YS5GRUUuZ2FzUHJpY2UgPyBwYXJzZUludCh0ZXN0RGF0YS5GRUUuZ2FzUHJpY2UsIDEwKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzb3VyY2VQdWJsaWNLZXkgPSBQdWJsaWNLZXkuZnJvbUhleCh0ZXN0RGF0YS5TRUNQMjU2SzFfUFJFRklYICsgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSk7XG4gICAgY29uc3QgZGVwbG95UGFyYW1zID0gbmV3IERlcGxveVV0aWwuRGVwbG95UGFyYW1zKHNvdXJjZVB1YmxpY0tleSwgREVGQVVMVF9DSEFJTl9OQU1FUy50ZXN0bmV0LCBnYXNQcmljZSk7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gRGVwbG95VXRpbC5FeGVjdXRhYmxlRGVwbG95SXRlbS5uZXdUcmFuc2ZlcigxLCBzb3VyY2VQdWJsaWNLZXksIHVuZGVmaW5lZCwgMTIzKTtcblxuICAgIGNvbnN0IHBheW1lbnQgPSBEZXBsb3lVdGlsLnN0YW5kYXJkUGF5bWVudChwYXJzZUludCh0ZXN0RGF0YS5GRUUuZ2FzTGltaXQsIDEwKSk7XG5cbiAgICByZXR1cm4gRGVwbG95VXRpbC5tYWtlRGVwbG95KGRlcGxveVBhcmFtcywgc2Vzc2lvbiwgcGF5bWVudCk7XG4gIH07XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBlbXB0eSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICB0eC50b0pzb24oKTtcbiAgICB9KTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgc2lnbiBpZiB0cmFuc2FjdGlvbiBpcycsICgpID0+IHtcbiAgICBpdCgndmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlckRlcGxveSA9IGdldFRyYW5zZmVyRGVwbG95KCk7XG4gICAgICBpZiAodHJhbnNmZXJEZXBsb3kpIHtcbiAgICAgICAgdHguY2FzcGVyVHggPSB0cmFuc2ZlckRlcGxveTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnByaXZhdGVLZXkgfSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHR4LnNpZ24oa2V5cGFpcikpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduZXIsIHRlc3REYXRhLlNFQ1AyNTZLMV9QUkVGSVggKyB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgaXNWYWxpZFRyYW5zYWN0aW9uU2lnbmF0dXJlKFxuICAgICAgICAgIHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsXG4gICAgICAgICAgdHguY2FzcGVyVHguaGFzaCxcbiAgICAgICAgICBCdWZmZXIuZnJvbSh0eC5jYXNwZXJUeC5oZWFkZXIuYWNjb3VudC52YWx1ZSgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgKSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICAgIHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsXG4gICAgICAgICAgdHguY2FzcGVyVHguaGFzaCxcbiAgICAgICAgICBCdWZmZXIuZnJvbSh0eC5jYXNwZXJUeC5oZWFkZXIuYWNjb3VudC52YWx1ZSgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd2YWxpZCB1c2luZyBleHRlbmRlZCBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlckRlcGxveSA9IGdldFRyYW5zZmVyRGVwbG95KCk7XG4gICAgICBpZiAodHJhbnNmZXJEZXBsb3kpIHtcbiAgICAgICAgdHguY2FzcGVyVHggPSB0cmFuc2ZlckRlcGxveTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnhQcml2YXRlS2V5IH0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eC5zaWduKGtleXBhaXIpKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmVyLCB0ZXN0RGF0YS5TRUNQMjU2SzFfUFJFRklYICsgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIGlzVmFsaWRUcmFuc2FjdGlvblNpZ25hdHVyZShcbiAgICAgICAgICB0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLFxuICAgICAgICAgIHR4LmNhc3BlclR4Lmhhc2gsXG4gICAgICAgICAgQnVmZmVyLmZyb20odHguY2FzcGVyVHguaGVhZGVyLmFjY291bnQudmFsdWUoKSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgICB0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLFxuICAgICAgICAgIHR4LmNhc3BlclR4Lmhhc2gsXG4gICAgICAgICAgQnVmZmVyLmZyb20odHguY2FzcGVyVHguaGVhZGVyLmFjY291bnQudmFsdWUoKSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnbXVsdGlwbGUgdmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlckRlcGxveSA9IGdldFRyYW5zZmVyRGVwbG95KCk7XG4gICAgICBpZiAodHJhbnNmZXJEZXBsb3kpIHtcbiAgICAgICAgdHguY2FzcGVyVHggPSB0cmFuc2ZlckRlcGxveTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBrZXlwYWlyMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzIucHJpdmF0ZUtleSB9KTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdHguc2lnbihrZXlwYWlyKSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KVxuICAgICAgKTtcblxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eC5zaWduKGtleXBhaXIyKSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmNhc3BlclR4LmFwcHJvdmFsc1sxXS5zaWduZXIsIHRlc3REYXRhLlNFQ1AyNTZLMV9QUkVGSVggKyB0ZXN0RGF0YS5BQ0NPVU5UXzIucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgaXNWYWxpZFRyYW5zYWN0aW9uU2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzFdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8yLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1sxXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMi5wdWJsaWNLZXkpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ211bHRpcGxlIHZhbGlkIHVzaW5nIGV4dGVuZGVkIGtleXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlckRlcGxveSA9IGdldFRyYW5zZmVyRGVwbG95KCk7XG4gICAgICBpZiAodHJhbnNmZXJEZXBsb3kpIHtcbiAgICAgICAgdHguY2FzcGVyVHggPSB0cmFuc2ZlckRlcGxveTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnhQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3Qga2V5cGFpcjIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8yLnhQcml2YXRlS2V5IH0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eC5zaWduKGtleXBhaXIpKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmVyLCB0ZXN0RGF0YS5TRUNQMjU2SzFfUFJFRklYICsgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIGlzVmFsaWRUcmFuc2FjdGlvblNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpXG4gICAgICApO1xuXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHR4LnNpZ24oa2V5cGFpcjIpKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmVyLCB0ZXN0RGF0YS5TRUNQMjU2SzFfUFJFRklYICsgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzFdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMi5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIGlzVmFsaWRUcmFuc2FjdGlvblNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMV0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzIucHVibGljS2V5KSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpXG4gICAgICApO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PlxuICAgICAgICB2ZXJpZnlTaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzFdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8yLnB1YmxpY0tleSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnbXVsdGlwbGUgdmFsaWQgdXNpbmcgb25lIGV4dGVuZGVkIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gZ2V0VHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVyRGVwbG95ID0gZ2V0VHJhbnNmZXJEZXBsb3koKTtcbiAgICAgIGlmICh0cmFuc2ZlckRlcGxveSkge1xuICAgICAgICB0eC5jYXNwZXJUeCA9IHRyYW5zZmVyRGVwbG95O1xuICAgICAgfVxuICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzEueFByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBrZXlwYWlyMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzIucHJpdmF0ZUtleSB9KTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdHguc2lnbihrZXlwYWlyKSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KVxuICAgICAgKTtcblxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eC5zaWduKGtleXBhaXIyKSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmNhc3BlclR4LmFwcHJvdmFsc1sxXS5zaWduZXIsIHRlc3REYXRhLlNFQ1AyNTZLMV9QUkVGSVggKyB0ZXN0RGF0YS5BQ0NPVU5UXzIucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgaXNWYWxpZFRyYW5zYWN0aW9uU2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzFdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8yLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1sxXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMi5wdWJsaWNLZXkpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIHJlamVjdCBzaWduIGlmIHRyYW5zYWN0aW9uIHNpZ25lciBpcycsICgpID0+IHtcbiAgICBpdCgnaW52YWxpZCBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gZ2V0VHJhbnNhY3Rpb24oKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHguc2lnbih0ZXN0RGF0YS5JTlZBTElEX0tFWVBBSVJfUFJWKSk7XG4gICAgfSk7XG5cbiAgICBpdCgncHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gZ2V0VHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHR4LnNpZ24oa2V5cGFpciksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSB0ZXN0RGF0YS5FUlJPUl9NSVNTSU5HX1BSSVZBVEVfS0VZXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3B1YmxpYyBleHRlbmRlZCBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHRlc3REYXRhLkFDQ09VTlRfMS54UHVibGljS2V5IH0pO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gdHguc2lnbihrZXlwYWlyKSxcbiAgICAgICAgKGU6IEVycm9yKSA9PiBlLm1lc3NhZ2UgPT09IHRlc3REYXRhLkVSUk9SX01JU1NJTkdfUFJJVkFURV9LRVlcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgcmV0dXJuIGVuY29kZWQgdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3dhbGxldCBpbml0aWFsaXphdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldEluaXRUeCA9IGF3YWl0IGdldFdhbGxldEluaXRUcmFuc2FjdGlvbigpO1xuICAgICAgY29uc3QgZW5jb2RlZFR4ID0gd2FsbGV0SW5pdFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCB3YWxsZXRJbml0SnNvblR4ID0gSlNPTi5wYXJzZShlbmNvZGVkVHgpO1xuXG4gICAgICBjb25zdCBhcmdOYW1lID0gMDtcbiAgICAgIGNvbnN0IGFyZ1ZhbHVlID0gMTtcbiAgICAgIGNvbnN0IG93bmVyMCA9IDA7XG4gICAgICBjb25zdCBvd25lcjEgPSAxO1xuICAgICAgY29uc3Qgb3duZXIyID0gMjtcblxuICAgICAgY29uc3Qgb3duZXJzVmFsdWVzID0gbmV3IE1hcCgpO1xuXG4gICAgICBbb3duZXIwLCBvd25lcjEsIG93bmVyMl0uZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgb3duZXJzVmFsdWVzLnNldChcbiAgICAgICAgICBPV05FUl9QUkVGSVggKyBpbmRleCxcbiAgICAgICAgICAod2FsbGV0SW5pdFR4LmNhc3BlclR4LnNlc3Npb24uZ2V0QXJnQnlOYW1lKE9XTkVSX1BSRUZJWCArIGluZGV4KSBhcyBDTFN0cmluZykudmFsdWUoKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGpzb25Pd25lckFyZ3MgPSB3YWxsZXRJbml0SnNvblR4WydkZXBsb3knXVsnc2Vzc2lvbiddWydNb2R1bGVCeXRlcyddWydhcmdzJ10uZmlsdGVyKChhcmcpID0+XG4gICAgICAgIG93bmVyc1ZhbHVlcy5oYXMoYXJnW2FyZ05hbWVdKVxuICAgICAgKTtcbiAgICAgIGpzb25Pd25lckFyZ3MubGVuZ3RoLnNob3VsZC5lcXVhbChvd25lcnNWYWx1ZXMuc2l6ZSk7XG5cbiAgICAgIGpzb25Pd25lckFyZ3MuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAgIGFyZ1thcmdWYWx1ZV1bJ3BhcnNlZCddLnNob3VsZC5iZS5lcXVhbChvd25lcnNWYWx1ZXMuZ2V0KGFyZ1thcmdOYW1lXSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnd2FsbGV0IGluaXRpYWxpemF0aW9uIHVzaW5nIGV4dGVuZGVkIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldEluaXRUeCA9IGF3YWl0IGdldFdhbGxldEluaXRUcmFuc2FjdGlvblVzaWduRXh0ZW5kZWRLZXkoKTtcbiAgICAgIGNvbnN0IGVuY29kZWRUeCA9IHdhbGxldEluaXRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3Qgd2FsbGV0SW5pdEpzb25UeCA9IEpTT04ucGFyc2UoZW5jb2RlZFR4KTtcblxuICAgICAgY29uc3QgYXJnTmFtZSA9IDA7XG4gICAgICBjb25zdCBhcmdWYWx1ZSA9IDE7XG4gICAgICBjb25zdCBvd25lcjAgPSAwO1xuICAgICAgY29uc3Qgb3duZXIxID0gMTtcbiAgICAgIGNvbnN0IG93bmVyMiA9IDI7XG5cbiAgICAgIGNvbnN0IG93bmVyc1ZhbHVlcyA9IG5ldyBNYXAoKTtcblxuICAgICAgW293bmVyMCwgb3duZXIxLCBvd25lcjJdLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgIG93bmVyc1ZhbHVlcy5zZXQoXG4gICAgICAgICAgT1dORVJfUFJFRklYICsgaW5kZXgsXG4gICAgICAgICAgKHdhbGxldEluaXRUeC5jYXNwZXJUeC5zZXNzaW9uLmdldEFyZ0J5TmFtZShPV05FUl9QUkVGSVggKyBpbmRleCkgYXMgQ0xTdHJpbmcpLnZhbHVlKClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBqc29uT3duZXJBcmdzID0gd2FsbGV0SW5pdEpzb25UeFsnZGVwbG95J11bJ3Nlc3Npb24nXVsnTW9kdWxlQnl0ZXMnXVsnYXJncyddLmZpbHRlcigoYXJnKSA9PlxuICAgICAgICBvd25lcnNWYWx1ZXMuaGFzKGFyZ1thcmdOYW1lXSlcbiAgICAgICk7XG4gICAgICBqc29uT3duZXJBcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwob3duZXJzVmFsdWVzLnNpemUpO1xuXG4gICAgICBqc29uT3duZXJBcmdzLmZvckVhY2goKGFyZykgPT4ge1xuICAgICAgICBhcmdbYXJnVmFsdWVdWydwYXJzZWQnXS5zaG91bGQuYmUuZXF1YWwob3duZXJzVmFsdWVzLmdldChhcmdbYXJnTmFtZV0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RyYW5zZmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHJhbnNmZXJUeCA9IGF3YWl0IGdldFRyYW5zZmVyVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IGVuY29kZWRUeCA9IHRyYW5zZmVyVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVySnNvblR4ID0gSlNPTi5wYXJzZShlbmNvZGVkVHgpO1xuXG4gICAgICBjb25zdCBhcmdOYW1lID0gMDtcbiAgICAgIGNvbnN0IGFyZ1ZhbHVlID0gMTtcblxuICAgICAgY29uc3QgdHJhbnNmZXJWYWx1ZXMgPSBuZXcgTWFwKCk7XG5cbiAgICAgIHRyYW5zZmVyVmFsdWVzLnNldCgnYW1vdW50JywgZ2V0VHJhbnNmZXJBbW91bnQodHJhbnNmZXJUeC5jYXNwZXJUeC5zZXNzaW9uKSk7XG4gICAgICB0cmFuc2ZlclZhbHVlcy5zZXQoJ3RvX2FkZHJlc3MnLCBnZXRUcmFuc2ZlckRlc3RpbmF0aW9uQWRkcmVzcyh0cmFuc2ZlclR4LmNhc3BlclR4LnNlc3Npb24pKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVySWQgPSBnZXRUcmFuc2ZlcklkKHRyYW5zZmVyVHguY2FzcGVyVHguc2Vzc2lvbik7XG4gICAgICBpZiAodHJhbnNmZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyYW5zZmVyVmFsdWVzLnNldCgnaWQnLCB0cmFuc2ZlcklkLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBqc29uT3duZXJBcmdzID0gdHJhbnNmZXJKc29uVHhbJ2RlcGxveSddWydzZXNzaW9uJ11bJ1RyYW5zZmVyJ11bJ2FyZ3MnXS5maWx0ZXIoKGFyZykgPT5cbiAgICAgICAgdHJhbnNmZXJWYWx1ZXMuaGFzKGFyZ1thcmdOYW1lXSlcbiAgICAgICk7XG4gICAgICBqc29uT3duZXJBcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwodHJhbnNmZXJWYWx1ZXMuc2l6ZSk7XG5cbiAgICAgIGpzb25Pd25lckFyZ3MuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAgIGFyZ1thcmdWYWx1ZV1bJ3BhcnNlZCddLnNob3VsZC5iZS5lcXVhbCh0cmFuc2ZlclZhbHVlcy5nZXQoYXJnW2FyZ05hbWVdKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRPRE8gU1RMWC0xMTc0OiBnZXQgYW5kIGRlY29kZSBlbmNvZGVkIHRyYW5zYWN0aW9uXG4gICAgaXQoJ3ZhbGlkIHNpZ24nLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=delegateBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegateBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/lib/transactionBuilder/delegateBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const should = __importStar(require("should"));
41
+ const lib_1 = require("../../../../src/lib");
42
+ const constants_1 = require("../../../../src/lib/constants");
43
+ const testData = __importStar(require("../../../fixtures/resources"));
44
+ const sdk_core_1 = require("@bitgo/sdk-core");
45
+ const statics_1 = require("@bitgo/statics");
46
+ describe('CSPR Delegate Builder', () => {
47
+ const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tcspr'));
48
+ const sender = testData.ACCOUNT_1;
49
+ const owner1Address = new lib_1.KeyPair({ pub: testData.ACCOUNT_1.publicKey }).getAddress();
50
+ const validator = constants_1.DELEGATE_VALIDATOR_ACCOUNT;
51
+ const initDelegateTxBuilder = () => {
52
+ return factory.getDelegateBuilder();
53
+ };
54
+ const addFeeToBuilder = (builder, gasLimit, gasPrice) => {
55
+ builder.fee({ gasLimit: gasLimit, gasPrice: gasPrice });
56
+ return builder;
57
+ };
58
+ const addSourceToBuilder = (builder, source) => {
59
+ builder.source({ address: new lib_1.KeyPair({ pub: source.publicKey }).getAddress() });
60
+ return builder;
61
+ };
62
+ const addValidatorToBuilder = (builder, validator) => {
63
+ builder.validator(validator);
64
+ return builder;
65
+ };
66
+ const addAmountToBuilder = (builder, amount) => {
67
+ builder.amount(amount);
68
+ return builder;
69
+ };
70
+ const initUnsignedDelegateTxBuilder = () => {
71
+ let builder = initDelegateTxBuilder();
72
+ builder = addFeeToBuilder(builder, testData.FEE.gasLimit, testData.FEE.gasPrice);
73
+ builder = addSourceToBuilder(builder, sender);
74
+ builder = addValidatorToBuilder(builder, validator);
75
+ builder = addAmountToBuilder(builder, '10');
76
+ return builder;
77
+ };
78
+ describe('should build ', () => {
79
+ it('an init valid delegate transaction', async () => {
80
+ const txBuilder = initUnsignedDelegateTxBuilder();
81
+ txBuilder.sign({ key: testData.ACCOUNT_1.privateKey });
82
+ txBuilder.sign({ key: testData.ACCOUNT_2.privateKey });
83
+ const tx = await txBuilder.build();
84
+ const txJson = tx.toJson();
85
+ should.deepEqual(txJson.fee, testData.FEE);
86
+ should.deepEqual(tx.signature.length, 2);
87
+ should.equal(txJson.from, owner1Address);
88
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingLock);
89
+ });
90
+ it('an init valid delegate transaction with an external signature', async () => {
91
+ const txBuilder = initUnsignedDelegateTxBuilder();
92
+ txBuilder.sign({ key: testData.ACCOUNT_2.privateKey });
93
+ txBuilder.signature(testData.EXTERNAL_SIGNATURE.signature, new lib_1.KeyPair({ pub: testData.EXTERNAL_SIGNATURE.publicKey }));
94
+ const tx = await txBuilder.build();
95
+ const txJson = tx.toJson();
96
+ should.equal(txJson.from, owner1Address);
97
+ should.deepEqual(tx.signature.length, 2);
98
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingLock);
99
+ });
100
+ it('an init delegate transaction with external signature included twice', async () => {
101
+ const txBuilder = initUnsignedDelegateTxBuilder();
102
+ txBuilder.signature(testData.EXTERNAL_SIGNATURE.signature, new lib_1.KeyPair({ pub: testData.EXTERNAL_SIGNATURE.publicKey }));
103
+ txBuilder.signature(testData.EXTERNAL_SIGNATURE.signature, new lib_1.KeyPair({ pub: testData.EXTERNAL_SIGNATURE.publicKey }));
104
+ const tx = await txBuilder.build();
105
+ const txJson = tx.toJson();
106
+ should.equal(txJson.from, owner1Address);
107
+ should.deepEqual(tx.signature.length, 1);
108
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingLock);
109
+ });
110
+ it('a delegate transaction with large amount', async function () {
111
+ const amount = '10000000000000000';
112
+ let txBuilder = initUnsignedDelegateTxBuilder();
113
+ txBuilder = addAmountToBuilder(txBuilder, amount);
114
+ const tx = await txBuilder.build();
115
+ const txJson = tx.toJson();
116
+ txJson.amount.should.equal(amount);
117
+ });
118
+ });
119
+ describe('should fail to build', () => {
120
+ it('a delegate transaction without fee', async () => {
121
+ let txBuilder = initDelegateTxBuilder();
122
+ txBuilder = addSourceToBuilder(txBuilder, sender);
123
+ txBuilder = addValidatorToBuilder(txBuilder, validator);
124
+ txBuilder = addAmountToBuilder(txBuilder, '10');
125
+ await txBuilder.build().should.be.rejectedWith(testData.INVALID_TRANSACTION_MISSING_FEE);
126
+ });
127
+ it('a undelegate transaction without amount', async () => {
128
+ let txBuilder = initDelegateTxBuilder();
129
+ txBuilder = addFeeToBuilder(txBuilder, testData.FEE.gasLimit, testData.FEE.gasPrice);
130
+ txBuilder = addSourceToBuilder(txBuilder, sender);
131
+ txBuilder = addValidatorToBuilder(txBuilder, validator);
132
+ await txBuilder.build().should.be.rejectedWith(testData.INVALID_TRANSACTION_MISSING_AMOUNT);
133
+ });
134
+ it('a transaction with invalid source', async () => {
135
+ let txBuilder = initDelegateTxBuilder();
136
+ txBuilder = addFeeToBuilder(txBuilder, testData.FEE.gasLimit, testData.FEE.gasPrice);
137
+ txBuilder = addValidatorToBuilder(txBuilder, validator);
138
+ txBuilder = addAmountToBuilder(txBuilder, '10');
139
+ await txBuilder.build().should.be.rejectedWith(testData.INVALID_TRANSACTION_MISSING_SOURCE);
140
+ });
141
+ it('a transaction without validator', async () => {
142
+ let txBuilder = initDelegateTxBuilder();
143
+ txBuilder = addFeeToBuilder(txBuilder, testData.FEE.gasLimit, testData.FEE.gasPrice);
144
+ txBuilder = addSourceToBuilder(txBuilder, sender);
145
+ txBuilder = addAmountToBuilder(txBuilder, '10');
146
+ const tx = await txBuilder.build();
147
+ const txJson = tx.toJson();
148
+ should.equal(txJson.from, owner1Address);
149
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingLock);
150
+ should.equal(txJson.validator, constants_1.DELEGATE_VALIDATOR_ACCOUNT);
151
+ });
152
+ });
153
+ describe('should validate', () => {
154
+ const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tcspr'));
155
+ it('an address', async () => {
156
+ const txBuilder = factory.getDelegateBuilder();
157
+ txBuilder.validateAddress({ address: testData.VALID_ADDRESS });
158
+ assert_1.default.throws(() => txBuilder.validateAddress({ address: testData.INVALID_ADDRESS }), new RegExp('Invalid address ' + testData.INVALID_ADDRESS));
159
+ });
160
+ it('a validator address', async () => {
161
+ let txBuilder = initDelegateTxBuilder();
162
+ txBuilder = addFeeToBuilder(txBuilder, testData.FEE.gasLimit, testData.FEE.gasPrice);
163
+ txBuilder = addSourceToBuilder(txBuilder, sender);
164
+ txBuilder = addAmountToBuilder(txBuilder, '10');
165
+ assert_1.default.throws(() => txBuilder.validator('abc'), /Invalid address/);
166
+ });
167
+ it('fee value should not be negative', () => {
168
+ const txBuilder = factory.getDelegateBuilder();
169
+ assert_1.default.throws(() => txBuilder.fee({ gasLimit: '-1' }));
170
+ should.doesNotThrow(() => txBuilder.fee(testData.FEE));
171
+ });
172
+ it('amount value should not be negative', () => {
173
+ const txBuilder = factory.getDelegateBuilder();
174
+ assert_1.default.throws(() => txBuilder.amount('-1'));
175
+ should.doesNotThrow(() => txBuilder.amount('1'));
176
+ });
177
+ it('a private key', () => {
178
+ const txBuilder = factory.getDelegateBuilder();
179
+ assert_1.default.throws(() => txBuilder.validateKey({ key: 'abc' }), /Unsupported private key/);
180
+ should.doesNotThrow(() => txBuilder.validateKey({ key: testData.ACCOUNT_1.privateKey }));
181
+ });
182
+ it('a length of signers', () => {
183
+ const txBuilder = initUnsignedDelegateTxBuilder();
184
+ should.doesNotThrow(() => txBuilder.sign({ key: testData.ACCOUNT_1.privateKey }));
185
+ should.doesNotThrow(() => txBuilder.sign({ key: testData.ACCOUNT_2.privateKey }));
186
+ should.doesNotThrow(() => txBuilder.sign({ key: testData.ACCOUNT_3.privateKey }));
187
+ assert_1.default.throws(() => txBuilder.sign({ key: testData.ACCOUNT_4.privateKey }), new RegExp('A maximum of 3 can sign the transaction.'));
188
+ });
189
+ });
190
+ });
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIvZGVsZWdhdGVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLCtDQUFpQztBQUNqQyw2Q0FBeUU7QUFDekUsNkRBQTJFO0FBQzNFLHNFQUF3RDtBQUN4RCw4Q0FBa0Q7QUFFbEQsNENBQXVDO0FBRXZDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNsQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEYsTUFBTSxTQUFTLEdBQUcsc0NBQTBCLENBQUM7SUFFN0MsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7UUFDakMsT0FBTyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUN0QyxDQUFDLENBQUM7SUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQXdCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLEVBQUU7UUFDdkYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE9BQXdCLEVBQUUsTUFBTSxFQUFF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Q0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQzVELElBQUksTUFBTSxDQUFDLDBDQUEwQyxDQUFDLENBQ3ZELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEtleVBhaXIsIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IERFTEVHQVRFX1ZBTElEQVRPUl9BQ0NPVU5UIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vLi4vZml4dHVyZXMvcmVzb3VyY2VzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBEZWxlZ2F0ZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbGliL2RlbGVnYXRlQnVpbGRlcic7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcblxuZGVzY3JpYmUoJ0NTUFIgRGVsZWdhdGUgQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGNzcHInKSk7XG4gIGNvbnN0IHNlbmRlciA9IHRlc3REYXRhLkFDQ09VTlRfMTtcbiAgY29uc3Qgb3duZXIxQWRkcmVzcyA9IG5ldyBLZXlQYWlyKHsgcHViOiB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5IH0pLmdldEFkZHJlc3MoKTtcbiAgY29uc3QgdmFsaWRhdG9yID0gREVMRUdBVEVfVkFMSURBVE9SX0FDQ09VTlQ7XG5cbiAgY29uc3QgaW5pdERlbGVnYXRlVHhCdWlsZGVyID0gKCkgPT4ge1xuICAgIHJldHVybiBmYWN0b3J5LmdldERlbGVnYXRlQnVpbGRlcigpO1xuICB9O1xuXG4gIGNvbnN0IGFkZEZlZVRvQnVpbGRlciA9IChidWlsZGVyOiBEZWxlZ2F0ZUJ1aWxkZXIsIGdhc0xpbWl0OiBzdHJpbmcsIGdhc1ByaWNlOiBzdHJpbmcpID0+IHtcbiAgICBidWlsZGVyLmZlZSh7IGdhc0xpbWl0OiBnYXNMaW1pdCwgZ2FzUHJpY2U6IGdhc1ByaWNlIH0pO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9O1xuXG4gIGNvbnN0IGFkZFNvdXJjZVRvQnVpbGRlciA9IChidWlsZGVyOiBEZWxlZ2F0ZUJ1aWxkZXIsIHNvdXJjZSkgPT4ge1xuICAgIGJ1aWxkZXIuc291cmNlKHsgYWRkcmVzczogbmV3IEtleVBhaXIoeyBwdWI6IHNvdXJjZS5wdWJsaWNLZXkgfSkuZ2V0QWRkcmVzcygpIH0pO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9O1xuXG4gIGNvbnN0IGFkZFZhbGlkYXRvclRvQnVpbGRlciA9IChidWlsZGVyOiBEZWxlZ2F0ZUJ1aWxkZXIsIHZhbGlkYXRvcjogc3RyaW5nKSA9PiB7XG4gICAgYnVpbGRlci52YWxpZGF0b3IodmFsaWRhdG9yKTtcbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfTtcblxuICBjb25zdCBhZGRBbW91bnRUb0J1aWxkZXIgPSAoYnVpbGRlcjogRGVsZWdhdGVCdWlsZGVyLCBhbW91bnQ6IHN0cmluZykgPT4ge1xuICAgIGJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH07XG5cbiAgY29uc3QgaW5pdFVuc2lnbmVkRGVsZWdhdGVUeEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgbGV0IGJ1aWxkZXIgPSBpbml0RGVsZWdhdGVUeEJ1aWxkZXIoKTtcbiAgICBidWlsZGVyID0gYWRkRmVlVG9CdWlsZGVyKGJ1aWxkZXIsIHRlc3REYXRhLkZFRS5nYXNMaW1pdCwgdGVzdERhdGEuRkVFLmdhc1ByaWNlKTtcbiAgICBidWlsZGVyID0gYWRkU291cmNlVG9CdWlsZGVyKGJ1aWxkZXIsIHNlbmRlcik7XG4gICAgYnVpbGRlciA9IGFkZFZhbGlkYXRvclRvQnVpbGRlcihidWlsZGVyLCB2YWxpZGF0b3IpO1xuICAgIGJ1aWxkZXIgPSBhZGRBbW91bnRUb0J1aWxkZXIoYnVpbGRlciwgJzEwJyk7XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCAnLCAoKSA9PiB7XG4gICAgaXQoJ2FuIGluaXQgdmFsaWQgZGVsZWdhdGUgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBpbml0VW5zaWduZWREZWxlZ2F0ZVR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkFDQ09VTlRfMS5wcml2YXRlS2V5IH0pO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkFDQ09VTlRfMi5wcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLCB0ZXN0RGF0YS5GRUUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5zaWduYXR1cmUubGVuZ3RoLCAyKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZnJvbSwgb3duZXIxQWRkcmVzcyk7XG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0xvY2spO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIGluaXQgdmFsaWQgZGVsZWdhdGUgdHJhbnNhY3Rpb24gd2l0aCBhbiBleHRlcm5hbCBzaWduYXR1cmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBpbml0VW5zaWduZWREZWxlZ2F0ZVR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkFDQ09VTlRfMi5wcml2YXRlS2V5IH0pO1xuICAgICAgdHhCdWlsZGVyLnNpZ25hdHVyZShcbiAgICAgICAgdGVzdERhdGEuRVhURVJOQUxfU0lHTkFUVVJFLnNpZ25hdHVyZSxcbiAgICAgICAgbmV3IEtleVBhaXIoeyBwdWI6IHRlc3REYXRhLkVYVEVSTkFMX1NJR05BVFVSRS5wdWJsaWNLZXkgfSlcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmZyb20sIG93bmVyMUFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5zaWduYXR1cmUubGVuZ3RoLCAyKTtcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jayk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gaW5pdCBkZWxlZ2F0ZSB0cmFuc2FjdGlvbiB3aXRoIGV4dGVybmFsIHNpZ25hdHVyZSBpbmNsdWRlZCB0d2ljZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGluaXRVbnNpZ25lZERlbGVnYXRlVHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbmF0dXJlKFxuICAgICAgICB0ZXN0RGF0YS5FWFRFUk5BTF9TSUdOQVRVUkUuc2lnbmF0dXJlLFxuICAgICAgICBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuRVhURVJOQUxfU0lHTkFUVVJFLnB1YmxpY0tleSB9KVxuICAgICAgKTtcbiAgICAgIHR4QnVpbGRlci5zaWduYXR1cmUoXG4gICAgICAgIHRlc3REYXRhLkVYVEVSTkFMX1NJR05BVFVSRS5zaWduYXR1cmUsXG4gICAgICAgIG5ldyBLZXlQYWlyKHsgcHViOiB0ZXN0RGF0YS5FWFRFUk5BTF9TSUdOQVRVUkUucHVibGljS2V5IH0pXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmZyb20sIG93bmVyMUFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5zaWduYXR1cmUubGVuZ3RoLCAxKTtcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jayk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBkZWxlZ2F0ZSB0cmFuc2FjdGlvbiB3aXRoIGxhcmdlIGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAwMDAwMDAwMDAwMCc7XG4gICAgICBsZXQgdHhCdWlsZGVyID0gaW5pdFVuc2lnbmVkRGVsZWdhdGVUeEJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlciA9IGFkZEFtb3VudFRvQnVpbGRlcih0eEJ1aWxkZXIsIGFtb3VudCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uYW1vdW50LnNob3VsZC5lcXVhbChhbW91bnQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGZhaWwgdG8gYnVpbGQnLCAoKSA9PiB7XG4gICAgaXQoJ2EgZGVsZWdhdGUgdHJhbnNhY3Rpb24gd2l0aG91dCBmZWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgdHhCdWlsZGVyID0gaW5pdERlbGVnYXRlVHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIgPSBhZGRTb3VyY2VUb0J1aWxkZXIodHhCdWlsZGVyLCBzZW5kZXIpO1xuICAgICAgdHhCdWlsZGVyID0gYWRkVmFsaWRhdG9yVG9CdWlsZGVyKHR4QnVpbGRlciwgdmFsaWRhdG9yKTtcbiAgICAgIHR4QnVpbGRlciA9IGFkZEFtb3VudFRvQnVpbGRlcih0eEJ1aWxkZXIsICcxMCcpO1xuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh0ZXN0RGF0YS5JTlZBTElEX1RSQU5TQUNUSU9OX01JU1NJTkdfRkVFKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHVuZGVsZWdhdGUgdHJhbnNhY3Rpb24gd2l0aG91dCBhbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgdHhCdWlsZGVyID0gaW5pdERlbGVnYXRlVHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIgPSBhZGRGZWVUb0J1aWxkZXIodHhCdWlsZGVyLCB0ZXN0RGF0YS5GRUUuZ2FzTGltaXQsIHRlc3REYXRhLkZFRS5nYXNQcmljZSk7XG4gICAgICB0eEJ1aWxkZXIgPSBhZGRTb3VyY2VUb0J1aWxkZXIodHhCdWlsZGVyLCBzZW5kZXIpO1xuICAgICAgdHhCdWlsZGVyID0gYWRkVmFsaWRhdG9yVG9CdWlsZGVyKHR4QnVpbGRlciwgdmFsaWRhdG9yKTtcbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgodGVzdERhdGEuSU5WQUxJRF9UUkFOU0FDVElPTl9NSVNTSU5HX0FNT1VOVCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgc291cmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHR4QnVpbGRlciA9IGluaXREZWxlZ2F0ZVR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyID0gYWRkRmVlVG9CdWlsZGVyKHR4QnVpbGRlciwgdGVzdERhdGEuRkVFLmdhc0xpbWl0LCB0ZXN0RGF0YS5GRUUuZ2FzUHJpY2UpO1xuICAgICAgdHhCdWlsZGVyID0gYWRkVmFsaWRhdG9yVG9CdWlsZGVyKHR4QnVpbGRlciwgdmFsaWRhdG9yKTtcbiAgICAgIHR4QnVpbGRlciA9IGFkZEFtb3VudFRvQnVpbGRlcih0eEJ1aWxkZXIsICcxMCcpO1xuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCh0ZXN0RGF0YS5JTlZBTElEX1RSQU5TQUNUSU9OX01JU1NJTkdfU09VUkNFKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHRyYW5zYWN0aW9uIHdpdGhvdXQgdmFsaWRhdG9yJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHR4QnVpbGRlciA9IGluaXREZWxlZ2F0ZVR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyID0gYWRkRmVlVG9CdWlsZGVyKHR4QnVpbGRlciwgdGVzdERhdGEuRkVFLmdhc0xpbWl0LCB0ZXN0RGF0YS5GRUUuZ2FzUHJpY2UpO1xuICAgICAgdHhCdWlsZGVyID0gYWRkU291cmNlVG9CdWlsZGVyKHR4QnVpbGRlciwgc2VuZGVyKTtcbiAgICAgIHR4QnVpbGRlciA9IGFkZEFtb3VudFRvQnVpbGRlcih0eEJ1aWxkZXIsICcxMCcpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmZyb20sIG93bmVyMUFkZHJlc3MpO1xuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udmFsaWRhdG9yLCBERUxFR0FURV9WQUxJREFUT1JfQUNDT1VOVCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgdmFsaWRhdGUnLCAoKSA9PiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGNzcHInKSk7XG5cbiAgICBpdCgnYW4gYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RGVsZWdhdGVCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogdGVzdERhdGEuVkFMSURfQUREUkVTUyB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHR4QnVpbGRlci52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0ZXN0RGF0YS5JTlZBTElEX0FERFJFU1MgfSksXG4gICAgICAgIG5ldyBSZWdFeHAoJ0ludmFsaWQgYWRkcmVzcyAnICsgdGVzdERhdGEuSU5WQUxJRF9BRERSRVNTKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHZhbGlkYXRvciBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHR4QnVpbGRlciA9IGluaXREZWxlZ2F0ZVR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyID0gYWRkRmVlVG9CdWlsZGVyKHR4QnVpbGRlciwgdGVzdERhdGEuRkVFLmdhc0xpbWl0LCB0ZXN0RGF0YS5GRUUuZ2FzUHJpY2UpO1xuICAgICAgdHhCdWlsZGVyID0gYWRkU291cmNlVG9CdWlsZGVyKHR4QnVpbGRlciwgc2VuZGVyKTtcbiAgICAgIHR4QnVpbGRlciA9IGFkZEFtb3VudFRvQnVpbGRlcih0eEJ1aWxkZXIsICcxMCcpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudmFsaWRhdG9yKCdhYmMnKSwgL0ludmFsaWQgYWRkcmVzcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZlZSB2YWx1ZSBzaG91bGQgbm90IGJlIG5lZ2F0aXZlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXREZWxlZ2F0ZUJ1aWxkZXIoKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLmZlZSh7IGdhc0xpbWl0OiAnLTEnIH0pKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdHhCdWlsZGVyLmZlZSh0ZXN0RGF0YS5GRUUpKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbW91bnQgdmFsdWUgc2hvdWxkIG5vdCBiZSBuZWdhdGl2ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RGVsZWdhdGVCdWlsZGVyKCk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci5hbW91bnQoJy0xJykpO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eEJ1aWxkZXIuYW1vdW50KCcxJykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldERlbGVnYXRlQnVpbGRlcigpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudmFsaWRhdGVLZXkoeyBrZXk6ICdhYmMnIH0pLCAvVW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXkvKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdHhCdWlsZGVyLnZhbGlkYXRlS2V5KHsga2V5OiB0ZXN0RGF0YS5BQ0NPVU5UXzEucHJpdmF0ZUtleSB9KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBsZW5ndGggb2Ygc2lnbmVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGluaXRVbnNpZ25lZERlbGVnYXRlVHhCdWlsZGVyKCk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5BQ0NPVU5UXzEucHJpdmF0ZUtleSB9KSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5BQ0NPVU5UXzIucHJpdmF0ZUtleSB9KSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5BQ0NPVU5UXzMucHJpdmF0ZUtleSB9KSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQUNDT1VOVF80LnByaXZhdGVLZXkgfSksXG4gICAgICAgIG5ldyBSZWdFeHAoJ0EgbWF4aW11bSBvZiAzIGNhbiBzaWduIHRoZSB0cmFuc2FjdGlvbi4nKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/lib/transactionBuilder/transactionBuilder.ts"],"names":[],"mappings":""}