@bitgo/sdk-coin-cspr 2.4.2 → 2.4.4
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/test/fixtures/cspr.d.ts +4 -0
- package/dist/test/fixtures/cspr.d.ts.map +1 -0
- package/dist/test/fixtures/cspr.js +7 -0
- package/dist/test/fixtures/resources.d.ts +92 -0
- package/dist/test/fixtures/resources.d.ts.map +1 -0
- package/dist/test/fixtures/resources.js +96 -0
- package/dist/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/unit/cspr.d.ts +2 -0
- package/dist/test/unit/cspr.d.ts.map +1 -0
- package/dist/test/unit/cspr.js +680 -0
- package/dist/test/unit/lib/keyPair.d.ts +2 -0
- package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
- package/dist/test/unit/lib/keyPair.js +159 -0
- package/dist/test/unit/lib/signMessage.d.ts +2 -0
- package/dist/test/unit/lib/signMessage.d.ts.map +1 -0
- package/dist/test/unit/lib/signMessage.js +68 -0
- package/dist/test/unit/lib/transaction.d.ts +2 -0
- package/dist/test/unit/lib/transaction.d.ts.map +1 -0
- package/dist/test/unit/lib/transaction.js +271 -0
- package/dist/test/unit/lib/transactionBuilder/delegateBuilder.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/delegateBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/delegateBuilder.js +191 -0
- package/dist/test/unit/lib/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/transactionBuilder.js +315 -0
- package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/transferBuilder.js +519 -0
- package/dist/test/unit/lib/transactionBuilder/undelegateBuilder.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/undelegateBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/undelegateBuilder.js +192 -0
- package/dist/test/unit/lib/transactionBuilder/walletInitialization.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/walletInitialization.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/walletInitialization.js +338 -0
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilderFactory.js +328 -0
- package/dist/test/unit/lib/util.d.ts +2 -0
- package/dist/test/unit/lib/util.d.ts.map +1 -0
- package/dist/test/unit/lib/util.js +176 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -7
- package/.eslintignore +0 -4
- package/.mocharc.yml +0 -8
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1Qiw0Q0FBdUM7QUFDdkMsaURBQStFO0FBQy9FLDhEQUEyRDtBQUMzRCxtRUFBcUQ7QUFDckQsMENBQXNFO0FBQ3RFLDBEQUErRTtBQUMvRSxrREFNZ0M7QUFFaEMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RGLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0RixNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEYsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRXpGLE1BQU0sY0FBYyxHQUFHLEdBQWdCLEVBQUU7UUFDdkMsT0FBTyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0lBRUYsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLElBQTBCLEVBQUU7UUFDaEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDM0QsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE9BQU8sQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztJQUNsRCxDQUFDLENBQUM7SUFFRixNQUFNLHdDQUF3QyxHQUFHLEtBQUssSUFBMEIsRUFBRTtRQUNoRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUMzRCxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDN0MsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDM0QsT0FBTyxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFnQixDQUFDO0lBQ2xELENBQUMsQ0FBQztJQUVGLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxJQUEwQixFQUFFO1FBQzlELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwRixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDN0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QixTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsT0FBTyxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFnQixDQUFDO0lBQ2xELENBQUMsQ0FBQztJQUVGLHVEQUF1RDtJQUN2RCxNQUFNLGlCQUFpQixHQUFHLEdBQWtDLEVBQUU7UUFDNUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3pGLE1BQU0sZUFBZSxHQUFHLDJCQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sWUFBWSxHQUFHLElBQUksMEJBQVUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLCtCQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUV6RyxNQUFNLE9BQU8sR0FBRywwQkFBVSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVoRyxNQUFNLE9BQU8sR0FBRywwQkFBVSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoRixPQUFPLDBCQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDO0lBRUYsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtRQUN4QyxNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUM1QixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDakIsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDSCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDakIsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDN0MsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNyQixNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztZQUM1QixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNDLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLEVBQUUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQy9CLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDcEUsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RyxnQkFBTSxDQUFDLEtBQUssQ0FDVixJQUFBLG1DQUEyQixFQUN6QixFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ2xDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDaEUsRUFDRCxJQUFJLENBQ0wsQ0FBQztZQUNGLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUN2QixJQUFBLHVCQUFlLEVBQ2IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNsQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQ2hFLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3hDLE1BQU0sRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDM0MsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsRUFBRSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7WUFDL0IsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNyRSxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hHLGdCQUFNLENBQUMsS0FBSyxDQUNWLElBQUEsbUNBQTJCLEVBQ3pCLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDbEMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNoRSxFQUNELElBQUksQ0FDTCxDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3ZCLElBQUEsdUJBQWUsRUFDYixFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ2xDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDaEUsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDOUIsTUFBTSxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7WUFDNUIsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztZQUMvQixDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNyRSxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hHLGdCQUFNLENBQUMsS0FBSyxDQUNWLElBQUEsbUNBQTJCLEVBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQy9HLElBQUksQ0FDTCxDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3ZCLElBQUEsdUJBQWUsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FDcEcsQ0FBQztZQUVGLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM3QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hHLGdCQUFNLENBQUMsS0FBSyxDQUNWLElBQUEsbUNBQTJCLEVBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQy9HLElBQUksQ0FDTCxDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsSUFBQSxtQ0FBMkIsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDL0csSUFBSSxDQUNMLENBQUM7WUFDRixnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDdkIsSUFBQSx1QkFBZSxFQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUNwRyxDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3ZCLElBQUEsdUJBQWUsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FDcEcsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xELE1BQU0sRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDM0MsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsRUFBRSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7WUFDL0IsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdEUsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RyxnQkFBTSxDQUFDLEtBQUssQ0FDVixJQUFBLG1DQUEyQixFQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUMvRyxJQUFJLENBQ0wsQ0FBQztZQUNGLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUN2QixJQUFBLHVCQUFlLEVBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQ3BHLENBQUM7WUFFRixnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hHLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RyxnQkFBTSxDQUFDLEtBQUssQ0FDVixJQUFBLG1DQUEyQixFQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUMvRyxJQUFJLENBQ0wsQ0FBQztZQUNGLGdCQUFNLENBQUMsS0FBSyxDQUNWLElBQUEsbUNBQTJCLEVBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQy9HLElBQUksQ0FDTCxDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3ZCLElBQUEsdUJBQWUsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FDcEcsQ0FBQztZQUNGLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUN2QixJQUFBLHVCQUFlLEVBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQ3BHLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNyRCxNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztZQUM1QixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNDLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLEVBQUUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQy9CLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDckUsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEcsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsSUFBQSxtQ0FBMkIsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDL0csSUFBSSxDQUNMLENBQUM7WUFDRixnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDdkIsSUFBQSx1QkFBZSxFQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUNwRyxDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzdDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEcsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsSUFBQSxtQ0FBMkIsRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDL0csSUFBSSxDQUNMLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FDVixJQUFBLG1DQUEyQixFQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUMvRyxJQUFJLENBQ0wsQ0FBQztZQUNGLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUN2QixJQUFBLHVCQUFlLEVBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQ3BHLENBQUM7WUFDRixnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDdkIsSUFBQSx1QkFBZSxFQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUNwRyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7UUFDM0QsRUFBRSxDQUFDLHFCQUFxQixFQUFFO1lBQ3hCLE1BQU0sRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQzVCLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxZQUFZLEVBQUU7WUFDZixNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztZQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkUsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFDdEIsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLHlCQUF5QixDQUMvRCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUJBQXFCLEVBQUU7WUFDeEIsTUFBTSxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7WUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQ3RCLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyx5QkFBeUIsQ0FDL0QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMEJBQTBCLEVBQUU7UUFDbkMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEtBQUs7WUFDL0IsTUFBTSxZQUFZLEdBQUcsTUFBTSx3QkFBd0IsRUFBRSxDQUFDO1lBQ3RELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUvQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDbEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDakIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBRWpCLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFFL0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN6QyxZQUFZLENBQUMsR0FBRyxDQUNkLHdCQUFZLEdBQUcsS0FBSyxFQUNuQixZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsd0JBQVksR0FBRyxLQUFLLENBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FDdkYsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDaEcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDL0IsQ0FBQztZQUNGLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFckQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1QixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSztZQUNsRCxNQUFNLFlBQVksR0FBRyxNQUFNLHdDQUF3QyxFQUFFLENBQUM7WUFDdEUsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRS9DLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNsQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDbkIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFFakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUUvQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pDLFlBQVksQ0FBQyxHQUFHLENBQ2Qsd0JBQVksR0FBRyxLQUFLLEVBQ25CLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyx3QkFBWSxHQUFHLEtBQUssQ0FBYyxDQUFDLEtBQUssRUFBRSxDQUN2RixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNoRyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUMvQixDQUFDO1lBQ0YsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVyRCxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzVCLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxVQUFVLEVBQUUsS0FBSztZQUNsQixNQUFNLFVBQVUsR0FBRyxNQUFNLHNCQUFzQixFQUFFLENBQUM7WUFDbEQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU3QyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDbEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBRW5CLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFFakMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBQSx5QkFBaUIsRUFBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0UsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBQSxxQ0FBNkIsRUFBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0YsTUFBTSxVQUFVLEdBQUcsSUFBQSxxQkFBYSxFQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdCLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFFRCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDM0YsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDakMsQ0FBQztZQUNGLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdkQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1QixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxxREFBcUQ7UUFDckQsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFVLElBQUk7WUFDN0IsSUFBSSxFQUFFLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IENMU3RyaW5nLCBEZXBsb3lVdGlsLCBDTFB1YmxpY0tleSBhcyBQdWJsaWNLZXkgfSBmcm9tICdjYXNwZXItanMtc2RrJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbic7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9maXh0dXJlcy9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgS2V5UGFpciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgREVGQVVMVF9DSEFJTl9OQU1FUywgT1dORVJfUFJFRklYIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgZ2V0VHJhbnNmZXJBbW91bnQsXG4gIGdldFRyYW5zZmVyRGVzdGluYXRpb25BZGRyZXNzLFxuICBnZXRUcmFuc2ZlcklkLFxuICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUsXG4gIHZlcmlmeVNpZ25hdHVyZSxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi91dGlscyc7XG5cbmRlc2NyaWJlKCdDc3ByIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCd0Y3NwcicpO1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbik7XG4gIGNvbnN0IG93bmVyMUFkZHJlc3MgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSB9KS5nZXRBZGRyZXNzKCk7XG4gIGNvbnN0IG93bmVyMkFkZHJlc3MgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuQUNDT1VOVF8yLnB1YmxpY0tleSB9KS5nZXRBZGRyZXNzKCk7XG4gIGNvbnN0IG93bmVyM0FkZHJlc3MgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuQUNDT1VOVF8zLnB1YmxpY0tleSB9KS5nZXRBZGRyZXNzKCk7XG4gIGNvbnN0IHNvdXJjZUFkZHJlc3MgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuUk9PVF9BQ0NPVU5ULnB1YmxpY0tleSB9KS5nZXRBZGRyZXNzKCk7XG5cbiAgY29uc3QgZ2V0VHJhbnNhY3Rpb24gPSAoKTogVHJhbnNhY3Rpb24gPT4ge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbik7XG4gIH07XG5cbiAgY29uc3QgZ2V0V2FsbGV0SW5pdFRyYW5zYWN0aW9uID0gYXN5bmMgKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+ID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mZWUodGVzdERhdGEuRkVFKTtcbiAgICB0eEJ1aWxkZXIub3duZXIob3duZXIxQWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLm93bmVyKG93bmVyMkFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5vd25lcihvd25lcjNBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuc291cmNlKHsgYWRkcmVzczogc291cmNlQWRkcmVzcyB9KTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUk9PVF9BQ0NPVU5ULnByaXZhdGVLZXkgfSk7XG4gICAgcmV0dXJuIChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIH07XG5cbiAgY29uc3QgZ2V0V2FsbGV0SW5pdFRyYW5zYWN0aW9uVXNpZ25FeHRlbmRlZEtleSA9IGFzeW5jICgpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHRlc3REYXRhLkZFRSk7XG4gICAgdHhCdWlsZGVyLm93bmVyKG93bmVyMUFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5vd25lcihvd25lcjJBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIub3duZXIob3duZXIzQWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnNvdXJjZSh7IGFkZHJlc3M6IHNvdXJjZUFkZHJlc3MgfSk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlJPT1RfQUNDT1VOVC54UHJpdmF0ZUtleSB9KTtcbiAgICByZXR1cm4gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgfTtcblxuICBjb25zdCBnZXRUcmFuc2ZlclRyYW5zYWN0aW9uID0gYXN5bmMgKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+ID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mZWUoeyBnYXNMaW1pdDogdGVzdERhdGEuRkVFLmdhc0xpbWl0LCBnYXNQcmljZTogdGVzdERhdGEuRkVFLmdhc1ByaWNlIH0pO1xuICAgIHR4QnVpbGRlci5zb3VyY2UoeyBhZGRyZXNzOiBzb3VyY2VBZGRyZXNzIH0pO1xuICAgIHR4QnVpbGRlci50byhvd25lcjJBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KHRlc3REYXRhLk1JTl9NT1RFU19BTU9VTlQpO1xuICAgIHR4QnVpbGRlci50cmFuc2ZlcklkKDI1NSk7XG4gICAgcmV0dXJuIChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIH07XG5cbiAgLy8gQ3JlYXRlcyBhIGRlcGxveSBpbnN0YW5jZSwgcmVxdWlyZWQgdG8gdGVzdCBzaWduaW5nLlxuICBjb25zdCBnZXRUcmFuc2ZlckRlcGxveSA9ICgpOiBEZXBsb3lVdGlsLkRlcGxveSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgZ2FzUHJpY2UgPSB0ZXN0RGF0YS5GRUUuZ2FzUHJpY2UgPyBwYXJzZUludCh0ZXN0RGF0YS5GRUUuZ2FzUHJpY2UsIDEwKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzb3VyY2VQdWJsaWNLZXkgPSBQdWJsaWNLZXkuZnJvbUhleCh0ZXN0RGF0YS5TRUNQMjU2SzFfUFJFRklYICsgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSk7XG4gICAgY29uc3QgZGVwbG95UGFyYW1zID0gbmV3IERlcGxveVV0aWwuRGVwbG95UGFyYW1zKHNvdXJjZVB1YmxpY0tleSwgREVGQVVMVF9DSEFJTl9OQU1FUy50ZXN0bmV0LCBnYXNQcmljZSk7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gRGVwbG95VXRpbC5FeGVjdXRhYmxlRGVwbG95SXRlbS5uZXdUcmFuc2ZlcigxLCBzb3VyY2VQdWJsaWNLZXksIHVuZGVmaW5lZCwgMTIzKTtcblxuICAgIGNvbnN0IHBheW1lbnQgPSBEZXBsb3lVdGlsLnN0YW5kYXJkUGF5bWVudChwYXJzZUludCh0ZXN0RGF0YS5GRUUuZ2FzTGltaXQsIDEwKSk7XG5cbiAgICByZXR1cm4gRGVwbG95VXRpbC5tYWtlRGVwbG95KGRlcGxveVBhcmFtcywgc2Vzc2lvbiwgcGF5bWVudCk7XG4gIH07XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBlbXB0eSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICB0eC50b0pzb24oKTtcbiAgICB9KTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgc2lnbiBpZiB0cmFuc2FjdGlvbiBpcycsICgpID0+IHtcbiAgICBpdCgndmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlckRlcGxveSA9IGdldFRyYW5zZmVyRGVwbG95KCk7XG4gICAgICBpZiAodHJhbnNmZXJEZXBsb3kpIHtcbiAgICAgICAgdHguY2FzcGVyVHggPSB0cmFuc2ZlckRlcGxveTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnByaXZhdGVLZXkgfSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHR4LnNpZ24oa2V5cGFpcikpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduZXIsIHRlc3REYXRhLlNFQ1AyNTZLMV9QUkVGSVggKyB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgaXNWYWxpZFRyYW5zYWN0aW9uU2lnbmF0dXJlKFxuICAgICAgICAgIHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsXG4gICAgICAgICAgdHguY2FzcGVyVHguaGFzaCxcbiAgICAgICAgICBCdWZmZXIuZnJvbSh0eC5jYXNwZXJUeC5oZWFkZXIuYWNjb3VudC52YWx1ZSgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgKSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICAgIHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsXG4gICAgICAgICAgdHguY2FzcGVyVHguaGFzaCxcbiAgICAgICAgICBCdWZmZXIuZnJvbSh0eC5jYXNwZXJUeC5oZWFkZXIuYWNjb3VudC52YWx1ZSgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd2YWxpZCB1c2luZyBleHRlbmRlZCBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlckRlcGxveSA9IGdldFRyYW5zZmVyRGVwbG95KCk7XG4gICAgICBpZiAodHJhbnNmZXJEZXBsb3kpIHtcbiAgICAgICAgdHguY2FzcGVyVHggPSB0cmFuc2ZlckRlcGxveTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnhQcml2YXRlS2V5IH0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eC5zaWduKGtleXBhaXIpKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmVyLCB0ZXN0RGF0YS5TRUNQMjU2SzFfUFJFRklYICsgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIGlzVmFsaWRUcmFuc2FjdGlvblNpZ25hdHVyZShcbiAgICAgICAgICB0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLFxuICAgICAgICAgIHR4LmNhc3BlclR4Lmhhc2gsXG4gICAgICAgICAgQnVmZmVyLmZyb20odHguY2FzcGVyVHguaGVhZGVyLmFjY291bnQudmFsdWUoKSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgICB0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLFxuICAgICAgICAgIHR4LmNhc3BlclR4Lmhhc2gsXG4gICAgICAgICAgQnVmZmVyLmZyb20odHguY2FzcGVyVHguaGVhZGVyLmFjY291bnQudmFsdWUoKSkudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnbXVsdGlwbGUgdmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlckRlcGxveSA9IGdldFRyYW5zZmVyRGVwbG95KCk7XG4gICAgICBpZiAodHJhbnNmZXJEZXBsb3kpIHtcbiAgICAgICAgdHguY2FzcGVyVHggPSB0cmFuc2ZlckRlcGxveTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBrZXlwYWlyMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzIucHJpdmF0ZUtleSB9KTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdHguc2lnbihrZXlwYWlyKSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KVxuICAgICAgKTtcblxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eC5zaWduKGtleXBhaXIyKSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmNhc3BlclR4LmFwcHJvdmFsc1sxXS5zaWduZXIsIHRlc3REYXRhLlNFQ1AyNTZLMV9QUkVGSVggKyB0ZXN0RGF0YS5BQ0NPVU5UXzIucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgaXNWYWxpZFRyYW5zYWN0aW9uU2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzFdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8yLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1sxXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMi5wdWJsaWNLZXkpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ211bHRpcGxlIHZhbGlkIHVzaW5nIGV4dGVuZGVkIGtleXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlckRlcGxveSA9IGdldFRyYW5zZmVyRGVwbG95KCk7XG4gICAgICBpZiAodHJhbnNmZXJEZXBsb3kpIHtcbiAgICAgICAgdHguY2FzcGVyVHggPSB0cmFuc2ZlckRlcGxveTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8xLnhQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3Qga2V5cGFpcjIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuQUNDT1VOVF8yLnhQcml2YXRlS2V5IH0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eC5zaWduKGtleXBhaXIpKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmVyLCB0ZXN0RGF0YS5TRUNQMjU2SzFfUFJFRklYICsgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIGlzVmFsaWRUcmFuc2FjdGlvblNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpXG4gICAgICApO1xuXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHR4LnNpZ24oa2V5cGFpcjIpKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmVyLCB0ZXN0RGF0YS5TRUNQMjU2SzFfUFJFRklYICsgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzFdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMi5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIGlzVmFsaWRUcmFuc2FjdGlvblNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMV0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzIucHVibGljS2V5KSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpXG4gICAgICApO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PlxuICAgICAgICB2ZXJpZnlTaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzFdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8yLnB1YmxpY0tleSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnbXVsdGlwbGUgdmFsaWQgdXNpbmcgb25lIGV4dGVuZGVkIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gZ2V0VHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVyRGVwbG95ID0gZ2V0VHJhbnNmZXJEZXBsb3koKTtcbiAgICAgIGlmICh0cmFuc2ZlckRlcGxveSkge1xuICAgICAgICB0eC5jYXNwZXJUeCA9IHRyYW5zZmVyRGVwbG95O1xuICAgICAgfVxuICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzEueFByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBrZXlwYWlyMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5BQ0NPVU5UXzIucHJpdmF0ZUtleSB9KTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdHguc2lnbihrZXlwYWlyKSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KVxuICAgICAgKTtcblxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eC5zaWduKGtleXBhaXIyKSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2FzcGVyVHguYXBwcm92YWxzWzBdLnNpZ25lciwgdGVzdERhdGEuU0VDUDI1NksxX1BSRUZJWCArIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmNhc3BlclR4LmFwcHJvdmFsc1sxXS5zaWduZXIsIHRlc3REYXRhLlNFQ1AyNTZLMV9QUkVGSVggKyB0ZXN0RGF0YS5BQ0NPVU5UXzIucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgaXNWYWxpZFRyYW5zYWN0aW9uU2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1swXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMS5wdWJsaWNLZXkpLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBpc1ZhbGlkVHJhbnNhY3Rpb25TaWduYXR1cmUodHguY2FzcGVyVHguYXBwcm92YWxzWzFdLnNpZ25hdHVyZSwgdHguY2FzcGVyVHguaGFzaCwgdGVzdERhdGEuQUNDT1VOVF8yLnB1YmxpY0tleSksXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHZlcmlmeVNpZ25hdHVyZSh0eC5jYXNwZXJUeC5hcHByb3ZhbHNbMF0uc2lnbmF0dXJlLCB0eC5jYXNwZXJUeC5oYXNoLCB0ZXN0RGF0YS5BQ0NPVU5UXzEucHVibGljS2V5KVxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdmVyaWZ5U2lnbmF0dXJlKHR4LmNhc3BlclR4LmFwcHJvdmFsc1sxXS5zaWduYXR1cmUsIHR4LmNhc3BlclR4Lmhhc2gsIHRlc3REYXRhLkFDQ09VTlRfMi5wdWJsaWNLZXkpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIHJlamVjdCBzaWduIGlmIHRyYW5zYWN0aW9uIHNpZ25lciBpcycsICgpID0+IHtcbiAgICBpdCgnaW52YWxpZCBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gZ2V0VHJhbnNhY3Rpb24oKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHguc2lnbih0ZXN0RGF0YS5JTlZBTElEX0tFWVBBSVJfUFJWKSk7XG4gICAgfSk7XG5cbiAgICBpdCgncHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gZ2V0VHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHB1YjogdGVzdERhdGEuQUNDT1VOVF8xLnB1YmxpY0tleSB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHR4LnNpZ24oa2V5cGFpciksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSB0ZXN0RGF0YS5FUlJPUl9NSVNTSU5HX1BSSVZBVEVfS0VZXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3B1YmxpYyBleHRlbmRlZCBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHRlc3REYXRhLkFDQ09VTlRfMS54UHVibGljS2V5IH0pO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gdHguc2lnbihrZXlwYWlyKSxcbiAgICAgICAgKGU6IEVycm9yKSA9PiBlLm1lc3NhZ2UgPT09IHRlc3REYXRhLkVSUk9SX01JU1NJTkdfUFJJVkFURV9LRVlcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgcmV0dXJuIGVuY29kZWQgdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3dhbGxldCBpbml0aWFsaXphdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldEluaXRUeCA9IGF3YWl0IGdldFdhbGxldEluaXRUcmFuc2FjdGlvbigpO1xuICAgICAgY29uc3QgZW5jb2RlZFR4ID0gd2FsbGV0SW5pdFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCB3YWxsZXRJbml0SnNvblR4ID0gSlNPTi5wYXJzZShlbmNvZGVkVHgpO1xuXG4gICAgICBjb25zdCBhcmdOYW1lID0gMDtcbiAgICAgIGNvbnN0IGFyZ1ZhbHVlID0gMTtcbiAgICAgIGNvbnN0IG93bmVyMCA9IDA7XG4gICAgICBjb25zdCBvd25lcjEgPSAxO1xuICAgICAgY29uc3Qgb3duZXIyID0gMjtcblxuICAgICAgY29uc3Qgb3duZXJzVmFsdWVzID0gbmV3IE1hcCgpO1xuXG4gICAgICBbb3duZXIwLCBvd25lcjEsIG93bmVyMl0uZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgb3duZXJzVmFsdWVzLnNldChcbiAgICAgICAgICBPV05FUl9QUkVGSVggKyBpbmRleCxcbiAgICAgICAgICAod2FsbGV0SW5pdFR4LmNhc3BlclR4LnNlc3Npb24uZ2V0QXJnQnlOYW1lKE9XTkVSX1BSRUZJWCArIGluZGV4KSBhcyBDTFN0cmluZykudmFsdWUoKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGpzb25Pd25lckFyZ3MgPSB3YWxsZXRJbml0SnNvblR4WydkZXBsb3knXVsnc2Vzc2lvbiddWydNb2R1bGVCeXRlcyddWydhcmdzJ10uZmlsdGVyKChhcmcpID0+XG4gICAgICAgIG93bmVyc1ZhbHVlcy5oYXMoYXJnW2FyZ05hbWVdKVxuICAgICAgKTtcbiAgICAgIGpzb25Pd25lckFyZ3MubGVuZ3RoLnNob3VsZC5lcXVhbChvd25lcnNWYWx1ZXMuc2l6ZSk7XG5cbiAgICAgIGpzb25Pd25lckFyZ3MuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAgIGFyZ1thcmdWYWx1ZV1bJ3BhcnNlZCddLnNob3VsZC5iZS5lcXVhbChvd25lcnNWYWx1ZXMuZ2V0KGFyZ1thcmdOYW1lXSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnd2FsbGV0IGluaXRpYWxpemF0aW9uIHVzaW5nIGV4dGVuZGVkIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldEluaXRUeCA9IGF3YWl0IGdldFdhbGxldEluaXRUcmFuc2FjdGlvblVzaWduRXh0ZW5kZWRLZXkoKTtcbiAgICAgIGNvbnN0IGVuY29kZWRUeCA9IHdhbGxldEluaXRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3Qgd2FsbGV0SW5pdEpzb25UeCA9IEpTT04ucGFyc2UoZW5jb2RlZFR4KTtcblxuICAgICAgY29uc3QgYXJnTmFtZSA9IDA7XG4gICAgICBjb25zdCBhcmdWYWx1ZSA9IDE7XG4gICAgICBjb25zdCBvd25lcjAgPSAwO1xuICAgICAgY29uc3Qgb3duZXIxID0gMTtcbiAgICAgIGNvbnN0IG93bmVyMiA9IDI7XG5cbiAgICAgIGNvbnN0IG93bmVyc1ZhbHVlcyA9IG5ldyBNYXAoKTtcblxuICAgICAgW293bmVyMCwgb3duZXIxLCBvd25lcjJdLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgIG93bmVyc1ZhbHVlcy5zZXQoXG4gICAgICAgICAgT1dORVJfUFJFRklYICsgaW5kZXgsXG4gICAgICAgICAgKHdhbGxldEluaXRUeC5jYXNwZXJUeC5zZXNzaW9uLmdldEFyZ0J5TmFtZShPV05FUl9QUkVGSVggKyBpbmRleCkgYXMgQ0xTdHJpbmcpLnZhbHVlKClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBqc29uT3duZXJBcmdzID0gd2FsbGV0SW5pdEpzb25UeFsnZGVwbG95J11bJ3Nlc3Npb24nXVsnTW9kdWxlQnl0ZXMnXVsnYXJncyddLmZpbHRlcigoYXJnKSA9PlxuICAgICAgICBvd25lcnNWYWx1ZXMuaGFzKGFyZ1thcmdOYW1lXSlcbiAgICAgICk7XG4gICAgICBqc29uT3duZXJBcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwob3duZXJzVmFsdWVzLnNpemUpO1xuXG4gICAgICBqc29uT3duZXJBcmdzLmZvckVhY2goKGFyZykgPT4ge1xuICAgICAgICBhcmdbYXJnVmFsdWVdWydwYXJzZWQnXS5zaG91bGQuYmUuZXF1YWwob3duZXJzVmFsdWVzLmdldChhcmdbYXJnTmFtZV0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RyYW5zZmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHJhbnNmZXJUeCA9IGF3YWl0IGdldFRyYW5zZmVyVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IGVuY29kZWRUeCA9IHRyYW5zZmVyVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVySnNvblR4ID0gSlNPTi5wYXJzZShlbmNvZGVkVHgpO1xuXG4gICAgICBjb25zdCBhcmdOYW1lID0gMDtcbiAgICAgIGNvbnN0IGFyZ1ZhbHVlID0gMTtcblxuICAgICAgY29uc3QgdHJhbnNmZXJWYWx1ZXMgPSBuZXcgTWFwKCk7XG5cbiAgICAgIHRyYW5zZmVyVmFsdWVzLnNldCgnYW1vdW50JywgZ2V0VHJhbnNmZXJBbW91bnQodHJhbnNmZXJUeC5jYXNwZXJUeC5zZXNzaW9uKSk7XG4gICAgICB0cmFuc2ZlclZhbHVlcy5zZXQoJ3RvX2FkZHJlc3MnLCBnZXRUcmFuc2ZlckRlc3RpbmF0aW9uQWRkcmVzcyh0cmFuc2ZlclR4LmNhc3BlclR4LnNlc3Npb24pKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVySWQgPSBnZXRUcmFuc2ZlcklkKHRyYW5zZmVyVHguY2FzcGVyVHguc2Vzc2lvbik7XG4gICAgICBpZiAodHJhbnNmZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyYW5zZmVyVmFsdWVzLnNldCgnaWQnLCB0cmFuc2ZlcklkLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBqc29uT3duZXJBcmdzID0gdHJhbnNmZXJKc29uVHhbJ2RlcGxveSddWydzZXNzaW9uJ11bJ1RyYW5zZmVyJ11bJ2FyZ3MnXS5maWx0ZXIoKGFyZykgPT5cbiAgICAgICAgdHJhbnNmZXJWYWx1ZXMuaGFzKGFyZ1thcmdOYW1lXSlcbiAgICAgICk7XG4gICAgICBqc29uT3duZXJBcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwodHJhbnNmZXJWYWx1ZXMuc2l6ZSk7XG5cbiAgICAgIGpzb25Pd25lckFyZ3MuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAgIGFyZ1thcmdWYWx1ZV1bJ3BhcnNlZCddLnNob3VsZC5iZS5lcXVhbCh0cmFuc2ZlclZhbHVlcy5nZXQoYXJnW2FyZ05hbWVdKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRPRE8gU1RMWC0xMTc0OiBnZXQgYW5kIGRlY29kZSBlbmNvZGVkIHRyYW5zYWN0aW9uXG4gICAgaXQoJ3ZhbGlkIHNpZ24nLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/lib/transactionBuilder/transactionBuilder.ts"],"names":[],"mappings":""}
|