@bitgo-beta/sdk-coin-ada 2.3.14-beta.31 → 2.3.14-beta.310
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/CHANGELOG.md +591 -0
- package/dist/src/ada.d.ts +38 -17
- package/dist/src/ada.d.ts.map +1 -1
- package/dist/src/ada.js +281 -88
- package/dist/src/index.js +6 -2
- package/dist/src/lib/index.d.ts +3 -1
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +13 -5
- package/dist/src/lib/keyPair.js +9 -5
- package/dist/src/lib/stakingActivateBuilder.js +6 -2
- package/dist/src/lib/{stakingWithdrawRewardsBuilder.d.ts → stakingBaseClaimBuilder.d.ts} +6 -7
- package/dist/src/lib/stakingBaseClaimBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingBaseClaimBuilder.js +35 -0
- package/dist/src/lib/stakingClaimRewardsBuilder.d.ts +10 -0
- package/dist/src/lib/stakingClaimRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingClaimRewardsBuilder.js +22 -0
- package/dist/src/lib/stakingDeactivateBuilder.js +6 -2
- package/dist/src/lib/stakingPledgeBuilder.d.ts +23 -0
- package/dist/src/lib/stakingPledgeBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingPledgeBuilder.js +43 -0
- package/dist/src/lib/stakingWithdrawBuilder.d.ts +12 -0
- package/dist/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingWithdrawBuilder.js +22 -0
- package/dist/src/lib/transaction.d.ts +32 -2
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +105 -10
- package/dist/src/lib/transactionBuilder.d.ts +5 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +153 -14
- package/dist/src/lib/transactionBuilderFactory.d.ts +6 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +15 -3
- package/dist/src/lib/utils.d.ts +7 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +18 -7
- package/package.json +10 -9
- package/dist/src/lib/stakingWithdrawRewardsBuilder.d.ts.map +0 -1
- package/dist/src/lib/stakingWithdrawRewardsBuilder.js +0 -43
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -18,15 +22,12 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
18
22
|
__setModuleDefault(result, mod);
|
|
19
23
|
return result;
|
|
20
24
|
};
|
|
21
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
-
};
|
|
24
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
26
|
exports.TransactionBuilder = void 0;
|
|
26
27
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
27
28
|
const transaction_1 = require("./transaction");
|
|
28
29
|
const keyPair_1 = require("./keyPair");
|
|
29
|
-
const utils_1 =
|
|
30
|
+
const utils_1 = __importStar(require("./utils"));
|
|
30
31
|
const CardanoWasm = __importStar(require("@emurgo/cardano-serialization-lib-nodejs"));
|
|
31
32
|
const cardano_serialization_lib_nodejs_1 = require("@emurgo/cardano-serialization-lib-nodejs");
|
|
32
33
|
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
@@ -35,10 +36,12 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
35
36
|
this._signers = [];
|
|
36
37
|
this._transactionInputs = [];
|
|
37
38
|
this._transactionOutputs = [];
|
|
39
|
+
this._initSignatures = [];
|
|
38
40
|
this._signatures = [];
|
|
39
41
|
this._ttl = 0;
|
|
40
42
|
this._certs = [];
|
|
41
43
|
this._withdrawals = [];
|
|
44
|
+
this._multiAssets = [];
|
|
42
45
|
this.transaction = new transaction_1.Transaction(_coinConfig);
|
|
43
46
|
this._fee = cardano_serialization_lib_nodejs_1.BigNum.zero();
|
|
44
47
|
}
|
|
@@ -50,6 +53,10 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
50
53
|
this._transactionOutputs.push(o);
|
|
51
54
|
return this;
|
|
52
55
|
}
|
|
56
|
+
assets(a) {
|
|
57
|
+
this._multiAssets.push(a);
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
53
60
|
ttl(t) {
|
|
54
61
|
this._ttl = t;
|
|
55
62
|
return this;
|
|
@@ -83,6 +90,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
83
90
|
this.output({
|
|
84
91
|
address: output.address().to_bech32(),
|
|
85
92
|
amount: output.amount().coin().to_str(),
|
|
93
|
+
multiAssets: output.amount().multiasset() || undefined,
|
|
86
94
|
});
|
|
87
95
|
}
|
|
88
96
|
if (txnBody.certs() !== undefined) {
|
|
@@ -102,6 +110,16 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
102
110
|
}
|
|
103
111
|
this._ttl = tx.transaction.body().ttl();
|
|
104
112
|
this._fee = tx.transaction.body().fee();
|
|
113
|
+
if (tx.transaction.witness_set().vkeys()) {
|
|
114
|
+
const vkeys = tx.transaction.witness_set().vkeys();
|
|
115
|
+
for (let i = 0; i < vkeys.len(); i++) {
|
|
116
|
+
const vkey = vkeys.get(i);
|
|
117
|
+
this._initSignatures.push({
|
|
118
|
+
publicKey: { pub: vkey.vkey().public_key().to_hex() },
|
|
119
|
+
signature: Buffer.from(vkey.signature().to_hex(), 'hex'),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
105
123
|
}
|
|
106
124
|
/** @inheritdoc */
|
|
107
125
|
fromImplementation(rawTransaction) {
|
|
@@ -127,8 +145,61 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
127
145
|
// add extra output for the change
|
|
128
146
|
if (this._changeAddress && this._senderBalance) {
|
|
129
147
|
const changeAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
|
|
130
|
-
const
|
|
131
|
-
|
|
148
|
+
const utxoBalance = CardanoWasm.BigNum.from_str(this._senderBalance);
|
|
149
|
+
const adjustment = cardano_serialization_lib_nodejs_1.BigNum.from_str('2000000');
|
|
150
|
+
let change = utxoBalance.checked_sub(this._fee).checked_sub(totalAmountToSend);
|
|
151
|
+
if (this._type === sdk_core_1.TransactionType.StakingActivate) {
|
|
152
|
+
change = change.checked_sub(adjustment);
|
|
153
|
+
}
|
|
154
|
+
else if (this._type === sdk_core_1.TransactionType.StakingDeactivate) {
|
|
155
|
+
change = change.checked_add(adjustment);
|
|
156
|
+
}
|
|
157
|
+
else if (this._type === sdk_core_1.TransactionType.StakingWithdraw || this._type === sdk_core_1.TransactionType.StakingClaim) {
|
|
158
|
+
this._withdrawals.forEach((withdrawal) => {
|
|
159
|
+
change = change.checked_add(CardanoWasm.BigNum.from_str(withdrawal.value));
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// If totalAmountToSend is 0, its consolidation
|
|
163
|
+
if (totalAmountToSend.to_str() == '0') {
|
|
164
|
+
// support for multi-asset consolidation
|
|
165
|
+
if (this._multiAssets !== undefined) {
|
|
166
|
+
const totalNumberOfAssets = CardanoWasm.BigNum.from_str(this._multiAssets.length.toString());
|
|
167
|
+
const minAmountNeededForOneAssetOutput = CardanoWasm.BigNum.from_str(utils_1.MIN_ADA_FOR_ONE_ASSET);
|
|
168
|
+
const minAmountNeededForTotalAssetOutputs = minAmountNeededForOneAssetOutput.checked_mul(totalNumberOfAssets);
|
|
169
|
+
if (!change.less_than(minAmountNeededForTotalAssetOutputs)) {
|
|
170
|
+
this._multiAssets.forEach((asset) => {
|
|
171
|
+
let txOutputBuilder = CardanoWasm.TransactionOutputBuilder.new();
|
|
172
|
+
// changeAddress is the root address, which is where we want the tokens assets to be sent to
|
|
173
|
+
const toAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
|
|
174
|
+
txOutputBuilder = txOutputBuilder.with_address(toAddress);
|
|
175
|
+
let txOutputAmountBuilder = txOutputBuilder.next();
|
|
176
|
+
const assetName = CardanoWasm.AssetName.new(Buffer.from(asset.asset_name, 'hex'));
|
|
177
|
+
const policyId = CardanoWasm.ScriptHash.from_bytes(Buffer.from(asset.policy_id, 'hex'));
|
|
178
|
+
const multiAsset = CardanoWasm.MultiAsset.new();
|
|
179
|
+
const assets = CardanoWasm.Assets.new();
|
|
180
|
+
assets.insert(assetName, CardanoWasm.BigNum.from_str(asset.quantity));
|
|
181
|
+
multiAsset.insert(policyId, assets);
|
|
182
|
+
txOutputAmountBuilder = txOutputAmountBuilder.with_coin_and_asset(minAmountNeededForOneAssetOutput, multiAsset);
|
|
183
|
+
const txOutput = txOutputAmountBuilder.build();
|
|
184
|
+
outputs.add(txOutput);
|
|
185
|
+
});
|
|
186
|
+
// finally send the remaining ADA in its own output
|
|
187
|
+
const remainingOutputAmount = change.checked_sub(minAmountNeededForTotalAssetOutputs);
|
|
188
|
+
const changeOutput = CardanoWasm.TransactionOutput.new(changeAddress, CardanoWasm.Value.new(remainingOutputAmount));
|
|
189
|
+
outputs.add(changeOutput);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// If there are no tokens to consolidate, you only have 1 output which is ADA alone
|
|
194
|
+
const changeOutput = CardanoWasm.TransactionOutput.new(changeAddress, CardanoWasm.Value.new(change));
|
|
195
|
+
outputs.add(changeOutput);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// If this isn't a consolidate request, whatever change that needs to be sent back to the rootaddress is added as a separate output here
|
|
200
|
+
const changeOutput = CardanoWasm.TransactionOutput.new(changeAddress, CardanoWasm.Value.new(change));
|
|
201
|
+
outputs.add(changeOutput);
|
|
202
|
+
}
|
|
132
203
|
}
|
|
133
204
|
const txBody = CardanoWasm.TransactionBody.new_tx_body(inputs, outputs, this._fee);
|
|
134
205
|
txBody.set_ttl(CardanoWasm.BigNum.from_str(this._ttl.toString()));
|
|
@@ -141,7 +212,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
141
212
|
const vkeyWitness = CardanoWasm.make_vkey_witness(txHash, CardanoWasm.PrivateKey.from_normal_bytes(Buffer.from(prv, 'hex')));
|
|
142
213
|
vkeyWitnesses.add(vkeyWitness);
|
|
143
214
|
});
|
|
144
|
-
this.
|
|
215
|
+
this.getAllSignatures().forEach((signature) => {
|
|
145
216
|
const vkey = CardanoWasm.Vkey.new(CardanoWasm.PublicKey.from_bytes(Buffer.from(signature.publicKey.pub, 'hex')));
|
|
146
217
|
const ed255Sig = CardanoWasm.Ed25519Signature.from_bytes(signature.signature);
|
|
147
218
|
vkeyWitnesses.add(CardanoWasm.Vkeywitness.new(vkey, ed255Sig));
|
|
@@ -181,7 +252,27 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
181
252
|
// reset the outputs collection because now our last output has changed
|
|
182
253
|
outputs = CardanoWasm.TransactionOutputs.new();
|
|
183
254
|
this._transactionOutputs.forEach((output) => {
|
|
184
|
-
|
|
255
|
+
if (output.multiAssets) {
|
|
256
|
+
const policyId = output.multiAssets.keys().get(0);
|
|
257
|
+
const assets = output.multiAssets.get(policyId);
|
|
258
|
+
const assetName = assets.keys().get(0);
|
|
259
|
+
const quantity = assets.get(assetName);
|
|
260
|
+
let txOutputBuilder = CardanoWasm.TransactionOutputBuilder.new();
|
|
261
|
+
const outputAmount = CardanoWasm.BigNum.from_str(output.amount);
|
|
262
|
+
const toAddress = CardanoWasm.Address.from_bech32(output.address);
|
|
263
|
+
txOutputBuilder = txOutputBuilder.with_address(toAddress);
|
|
264
|
+
let txOutputAmountBuilder = txOutputBuilder.next();
|
|
265
|
+
const multiAsset = CardanoWasm.MultiAsset.new();
|
|
266
|
+
const asset = CardanoWasm.Assets.new();
|
|
267
|
+
asset.insert(assetName, quantity);
|
|
268
|
+
multiAsset.insert(policyId, asset);
|
|
269
|
+
txOutputAmountBuilder = txOutputAmountBuilder.with_coin_and_asset(outputAmount, multiAsset);
|
|
270
|
+
const txOutput = txOutputAmountBuilder.build();
|
|
271
|
+
outputs.add(txOutput);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
outputs.add(CardanoWasm.TransactionOutput.new(CardanoWasm.Address.from_bech32(output.address), CardanoWasm.Value.new(CardanoWasm.BigNum.from_str(output.amount))));
|
|
275
|
+
}
|
|
185
276
|
});
|
|
186
277
|
if (this._changeAddress && this._senderBalance) {
|
|
187
278
|
const changeAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
|
|
@@ -194,13 +285,55 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
194
285
|
else if (this._type === sdk_core_1.TransactionType.StakingDeactivate) {
|
|
195
286
|
change = change.checked_add(adjustment);
|
|
196
287
|
}
|
|
197
|
-
else if (this._type
|
|
288
|
+
else if (this._type === sdk_core_1.TransactionType.StakingWithdraw || this._type === sdk_core_1.TransactionType.StakingClaim) {
|
|
198
289
|
this._withdrawals.forEach((withdrawal) => {
|
|
199
290
|
change = change.checked_add(CardanoWasm.BigNum.from_str(withdrawal.value));
|
|
200
291
|
});
|
|
201
292
|
}
|
|
202
|
-
|
|
203
|
-
|
|
293
|
+
// If totalAmountToSend is 0, its consolidation
|
|
294
|
+
if (totalAmountToSend.to_str() == '0') {
|
|
295
|
+
// support for multi-asset consolidation
|
|
296
|
+
if (this._multiAssets !== undefined) {
|
|
297
|
+
const totalNumberOfAssets = CardanoWasm.BigNum.from_str(this._multiAssets.length.toString());
|
|
298
|
+
const minAmountNeededForOneAssetOutput = CardanoWasm.BigNum.from_str('1500000');
|
|
299
|
+
const minAmountNeededForTotalAssetOutputs = minAmountNeededForOneAssetOutput.checked_mul(totalNumberOfAssets);
|
|
300
|
+
if (!change.less_than(minAmountNeededForTotalAssetOutputs)) {
|
|
301
|
+
this._multiAssets.forEach((asset) => {
|
|
302
|
+
let txOutputBuilder = CardanoWasm.TransactionOutputBuilder.new();
|
|
303
|
+
// changeAddress is the root address, which is where we want the tokens assets to be sent to
|
|
304
|
+
const toAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
|
|
305
|
+
txOutputBuilder = txOutputBuilder.with_address(toAddress);
|
|
306
|
+
let txOutputAmountBuilder = txOutputBuilder.next();
|
|
307
|
+
const assetName = CardanoWasm.AssetName.new(Buffer.from(asset.asset_name, 'hex'));
|
|
308
|
+
const policyId = CardanoWasm.ScriptHash.from_bytes(Buffer.from(asset.policy_id, 'hex'));
|
|
309
|
+
const multiAsset = CardanoWasm.MultiAsset.new();
|
|
310
|
+
const assets = CardanoWasm.Assets.new();
|
|
311
|
+
assets.insert(assetName, CardanoWasm.BigNum.from_str(asset.quantity));
|
|
312
|
+
multiAsset.insert(policyId, assets);
|
|
313
|
+
txOutputAmountBuilder = txOutputAmountBuilder.with_coin_and_asset(minAmountNeededForOneAssetOutput, multiAsset);
|
|
314
|
+
const txOutput = txOutputAmountBuilder.build();
|
|
315
|
+
outputs.add(txOutput);
|
|
316
|
+
});
|
|
317
|
+
// finally send the remaining ADA in its own output
|
|
318
|
+
const remainingOutputAmount = change.checked_sub(minAmountNeededForTotalAssetOutputs);
|
|
319
|
+
const changeOutput = CardanoWasm.TransactionOutput.new(changeAddress, CardanoWasm.Value.new(remainingOutputAmount));
|
|
320
|
+
outputs.add(changeOutput);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
throw new sdk_core_1.BuildTransactionError('Insufficient funds: need a minimum of 1.5 ADA per output to construct token consolidation');
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
// If there are no tokens to consolidate, you only have 1 output which is ADA alone
|
|
328
|
+
const changeOutput = CardanoWasm.TransactionOutput.new(changeAddress, CardanoWasm.Value.new(change));
|
|
329
|
+
outputs.add(changeOutput);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
// If this isn't a consolidate request, whatever change that needs to be sent back to the rootaddress is added as a separate output here
|
|
334
|
+
const changeOutput = CardanoWasm.TransactionOutput.new(changeAddress, CardanoWasm.Value.new(change));
|
|
335
|
+
outputs.add(changeOutput);
|
|
336
|
+
}
|
|
204
337
|
}
|
|
205
338
|
const txRaw = CardanoWasm.TransactionBody.new_tx_body(inputs, outputs, this._fee);
|
|
206
339
|
const certs = CardanoWasm.Certificates.new();
|
|
@@ -228,10 +361,13 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
228
361
|
const vkeyWitness = CardanoWasm.make_vkey_witness(txRawHash, CardanoWasm.PrivateKey.from_normal_bytes(Buffer.from(prv, 'hex')));
|
|
229
362
|
vkeyWitnesses.add(vkeyWitness);
|
|
230
363
|
});
|
|
231
|
-
|
|
364
|
+
// Clear the cosmetic signature array in native txn wrapper to prevent duplicate when builder is inited from a partially witnessed txn
|
|
365
|
+
this._transaction.signature.length = 0;
|
|
366
|
+
this.getAllSignatures().forEach((signature) => {
|
|
232
367
|
const vkey = CardanoWasm.Vkey.new(CardanoWasm.PublicKey.from_bytes(Buffer.from(signature.publicKey.pub, 'hex')));
|
|
233
368
|
const ed255Sig = CardanoWasm.Ed25519Signature.from_bytes(signature.signature);
|
|
234
369
|
vkeyWitnesses.add(CardanoWasm.Vkeywitness.new(vkey, ed255Sig));
|
|
370
|
+
this._transaction.signature.push(signature.signature.toString('hex'));
|
|
235
371
|
});
|
|
236
372
|
witnessSet.set_vkeys(vkeyWitnesses);
|
|
237
373
|
this._transaction.transaction = CardanoWasm.Transaction.new(txRaw, witnessSet);
|
|
@@ -291,6 +427,9 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
291
427
|
addSignature(publicKey, signature) {
|
|
292
428
|
this._signatures.push({ publicKey, signature });
|
|
293
429
|
}
|
|
430
|
+
getAllSignatures() {
|
|
431
|
+
return structuredClone(this._initSignatures.concat(this._signatures));
|
|
432
|
+
}
|
|
294
433
|
}
|
|
295
434
|
exports.TransactionBuilder = TransactionBuilder;
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLG1EQVM4QjtBQUM5QiwrQ0FBNkY7QUFDN0YsdUNBQW9DO0FBQ3BDLG9EQUEyQjtBQUMzQixzRkFBd0U7QUFDeEUsK0ZBQWtFO0FBRWxFLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQWNyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQWJYLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDekIsdUJBQWtCLEdBQXVCLEVBQUUsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBQzlDLGdCQUFXLEdBQWdCLEVBQUUsQ0FBQztRQUc5QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsV0FBTSxHQUE4QixFQUFFLENBQUM7UUFDdkMsaUJBQVksR0FBaUIsRUFBRSxDQUFDO1FBTXhDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcseUNBQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLENBQW1CO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLENBQW9CO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsR0FBRyxDQUFDLENBQVM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLE9B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O1FBQUMsTUFBTTtZQUNOLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzFEO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixzQkFBc0IsQ0FBQyxjQUFtQjtRQUN4QyxJQUFJO1lBQ0YsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEQ7UUFBQyxNQUFNO1lBQ04sTUFBTSxJQUFJLGdDQUFxQixDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUQ7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLFdBQXdCO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzVCLE9BQU87U0FDUjtJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsYUFBYSxDQUFDLEtBQWdCO1FBQzVCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFDRCxZQUFZO0lBRVosa0JBQWtCO0lBQ2xCLFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBOVVELGdEQThVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVXRpbHNFcnJvcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uSW5wdXQsIFRyYW5zYWN0aW9uT3V0cHV0LCBXaXRoZHJhd2FsIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgQ2FyZGFub1dhc20gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgeyBCaWdOdW0gfSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uITogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfc2lnbmVyczogS2V5UGFpcltdID0gW107XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb25JbnB1dHM6IFRyYW5zYWN0aW9uSW5wdXRbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uT3V0cHV0czogVHJhbnNhY3Rpb25PdXRwdXRbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG4gIHByb3RlY3RlZCBfY2hhbmdlQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3NlbmRlckJhbGFuY2U6IHN0cmluZztcbiAgcHJvdGVjdGVkIF90dGwgPSAwO1xuICBwcm90ZWN0ZWQgX2NlcnRzOiBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZVtdID0gW107XG4gIHByb3RlY3RlZCBfd2l0aGRyYXdhbHM6IFdpdGhkcmF3YWxbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3R5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfZmVlOiBCaWdOdW07XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX2ZlZSA9IEJpZ051bS56ZXJvKCk7XG4gIH1cblxuICBpbnB1dChpOiBUcmFuc2FjdGlvbklucHV0KTogdGhpcyB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25JbnB1dHMucHVzaChpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG91dHB1dChvOiBUcmFuc2FjdGlvbk91dHB1dCk6IHRoaXMge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uT3V0cHV0cy5wdXNoKG8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdHRsKHQ6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX3R0bCA9IHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjaGFuZ2VBZGRyZXNzKGFkZHI6IHN0cmluZywgdG90YWxJbnB1dEJhbGFuY2U6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2NoYW5nZUFkZHJlc3MgPSBhZGRyO1xuICAgIHRoaXMuX3NlbmRlckJhbGFuY2UgPSB0b3RhbElucHV0QmFsYW5jZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZlZShmZWU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2ZlZSA9IEJpZ051bS5mcm9tX3N0cihmZWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgY29uc3QgdHhuQm9keSA9IHR4LnRyYW5zYWN0aW9uLmJvZHkoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR4bkJvZHkuaW5wdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3QgaW5wdXQgPSB0eG5Cb2R5LmlucHV0cygpLmdldChpKTtcbiAgICAgIHRoaXMuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogQnVmZmVyLmZyb20oaW5wdXQudHJhbnNhY3Rpb25faWQoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiBpbnB1dC5pbmRleCgpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhuQm9keS5vdXRwdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHhuQm9keS5vdXRwdXRzKCkuZ2V0KGkpO1xuICAgICAgdGhpcy5vdXRwdXQoe1xuICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcygpLnRvX2JlY2gzMigpLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQoKS5jb2luKCkudG9fc3RyKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHhuQm9keS5jZXJ0cygpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNlcnRzID0gdHhuQm9keS5jZXJ0cygpIGFzIENhcmRhbm9XYXNtLkNlcnRpZmljYXRlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VydHMubGVuKCk7IGkrKykge1xuICAgICAgICB0aGlzLl9jZXJ0cy5wdXNoKGNlcnRzLmdldChpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR4bkJvZHkud2l0aGRyYXdhbHMoKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IHR4bkJvZHkud2l0aGRyYXdhbHMoKSBhcyBDYXJkYW5vV2FzbS5XaXRoZHJhd2FscztcbiAgICAgIGNvbnN0IGtleXMgPSB3aXRoZHJhd2Fscy5rZXlzKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuKCk7IGkrKykge1xuICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0ga2V5cy5nZXQoaSkgYXMgQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcztcbiAgICAgICAgY29uc3QgcmV3YXJkID0gd2l0aGRyYXdhbHMuZ2V0KHJld2FyZEFkZHJlc3MpIGFzIENhcmRhbm9XYXNtLkJpZ051bTtcbiAgICAgICAgdGhpcy5fd2l0aGRyYXdhbHMucHVzaCh7IHN0YWtlQWRkcmVzczogcmV3YXJkQWRkcmVzcy50b19hZGRyZXNzKCkudG9fYmVjaDMyKCksIHZhbHVlOiByZXdhcmQudG9fc3RyKCkgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fdHRsID0gdHgudHJhbnNhY3Rpb24uYm9keSgpLnR0bCgpIGFzIG51bWJlcjtcbiAgICB0aGlzLl9mZWUgPSB0eC50cmFuc2FjdGlvbi5ib2R5KCkuZmVlKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGlucHV0cyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uSW5wdXRzLm5ldygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uSW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICBpbnB1dHMuYWRkKFxuICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbklucHV0Lm5ldyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkhhc2guZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShpbnB1dC50cmFuc2FjdGlvbl9pZCwgJ2hleCcpKSxcbiAgICAgICAgICBpbnB1dC50cmFuc2FjdGlvbl9pbmRleFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICAgIGxldCBvdXRwdXRzID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRzLm5ldygpO1xuICAgIGxldCB0b3RhbEFtb3VudFRvU2VuZCA9IENhcmRhbm9XYXNtLkJpZ051bS56ZXJvKCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgY29uc3QgYW1vdW50ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpO1xuICAgICAgb3V0cHV0cy5hZGQoXG4gICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKG91dHB1dC5hZGRyZXNzKSxcbiAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoYW1vdW50KVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdG90YWxBbW91bnRUb1NlbmQgPSB0b3RhbEFtb3VudFRvU2VuZC5jaGVja2VkX2FkZChhbW91bnQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX2ZlZS5pc196ZXJvKCkpIHtcbiAgICAgIC8vIGVzdGltYXRlIGZlZVxuICAgICAgLy8gYWRkIGV4dHJhIG91dHB1dCBmb3IgdGhlIGNoYW5nZVxuICAgICAgaWYgKHRoaXMuX2NoYW5nZUFkZHJlc3MgJiYgdGhpcy5fc2VuZGVyQmFsYW5jZSkge1xuICAgICAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMih0aGlzLl9jaGFuZ2VBZGRyZXNzKTtcbiAgICAgICAgY29uc3QgbW9ja0NoYW5nZSA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICBjaGFuZ2VBZGRyZXNzLFxuICAgICAgICAgIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fc2VuZGVyQmFsYW5jZSkpXG4gICAgICAgICk7XG4gICAgICAgIG91dHB1dHMuYWRkKG1vY2tDaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eEJvZHkgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkJvZHkubmV3X3R4X2JvZHkoaW5wdXRzLCBvdXRwdXRzLCB0aGlzLl9mZWUpO1xuICAgICAgdHhCb2R5LnNldF90dGwoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3R0bC50b1N0cmluZygpKSk7XG4gICAgICBjb25zdCB0eEhhc2ggPSBDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4Qm9keSk7XG5cbiAgICAgIC8vIHdlIGFkZCB3aXRuZXNzZXMgb25jZSBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGFwcHJvcHJpYXRlIGFtb3VudCBvZiBzaWduZXJzIGZvciBjYWxjdWxhdGluZyB0aGUgZmVlXG4gICAgICBjb25zdCB3aXRuZXNzU2V0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25XaXRuZXNzU2V0Lm5ldygpO1xuICAgICAgY29uc3QgdmtleVdpdG5lc3NlcyA9IENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXMubmV3KCk7XG4gICAgICB0aGlzLl9zaWduZXJzLmZvckVhY2goKGtleVBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2IGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyhcbiAgICAgICAgICB0eEhhc2gsXG4gICAgICAgICAgQ2FyZGFub1dhc20uUHJpdmF0ZUtleS5mcm9tX25vcm1hbF9ieXRlcyhCdWZmZXIuZnJvbShwcnYsICdoZXgnKSlcbiAgICAgICAgKTtcbiAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCB2a2V5ID0gQ2FyZGFub1dhc20uVmtleS5uZXcoXG4gICAgICAgICAgQ2FyZGFub1dhc20uUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIsICdoZXgnKSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZWQyNTVTaWcgPSBDYXJkYW5vV2FzbS5FZDI1NTE5U2lnbmF0dXJlLmZyb21fYnl0ZXMoc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzLm5ldyh2a2V5LCBlZDI1NVNpZykpO1xuICAgICAgfSk7XG4gICAgICBpZiAodmtleVdpdG5lc3Nlcy5sZW4oKSA9PT0gMCkge1xuICAgICAgICBjb25zdCBwcnYgPSBDYXJkYW5vV2FzbS5Qcml2YXRlS2V5LmdlbmVyYXRlX2VkMjU1MTkoKTtcbiAgICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyh0eEhhc2gsIHBydik7XG4gICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aXRuZXNzU2V0LnNldF92a2V5cyh2a2V5V2l0bmVzc2VzKTtcblxuICAgICAgLy8gYWRkIGluIHdpdGhkcmF3YWwgaWYgdGhpcyBpcyBhIHdpdGhkcmF3YWwgdHhcbiAgICAgIGlmICh0aGlzLl93aXRoZHJhd2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3YWxzID0gQ2FyZGFub1dhc20uV2l0aGRyYXdhbHMubmV3KCk7XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0gQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5mcm9tX2FkZHJlc3MoXG4gICAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHdpdGhkcmF3YWwuc3Rha2VBZGRyZXNzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgd2l0aGRyYXdhbHMuaW5zZXJ0KHJld2FyZEFkZHJlc3MhLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0eEJvZHkuc2V0X3dpdGhkcmF3YWxzKHdpdGhkcmF3YWxzKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIGluIGNlcnRpZmljYXRlcyB0byBnZXQgbW9jayBzaXplXG4gICAgICBjb25zdCBkcmFmdENlcnRzID0gQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVzLm5ldygpO1xuICAgICAgZm9yIChjb25zdCBjZXJ0IG9mIHRoaXMuX2NlcnRzKSB7XG4gICAgICAgIGRyYWZ0Q2VydHMuYWRkKGNlcnQpO1xuICAgICAgfVxuICAgICAgdHhCb2R5LnNldF9jZXJ0cyhkcmFmdENlcnRzKTtcblxuICAgICAgY29uc3QgdHhEcmFmdCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLm5ldyh0eEJvZHksIHdpdG5lc3NTZXQpO1xuICAgICAgY29uc3QgbGluZWFyRmVlID0gQ2FyZGFub1dhc20uTGluZWFyRmVlLm5ldyhcbiAgICAgICAgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKCc0NCcpLFxuICAgICAgICBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoJzE1NTM4MScpXG4gICAgICApO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgdGhlIGZlZSBiYXNlZCBvZmYgb3VyIGR1bW15IHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBmZWUgPSBDYXJkYW5vV2FzbS5taW5fZmVlKHR4RHJhZnQsIGxpbmVhckZlZSkuY2hlY2tlZF9hZGQoQmlnTnVtLmZyb21fc3RyKCc0NDAnKSk7XG4gICAgICB0aGlzLl9mZWUgPSBmZWU7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLmZlZSh0aGlzLl9mZWUudG9fc3RyKCkpO1xuICAgIC8vIG5vdyBjYWxjdWxhdGUgdGhlIGNoYW5nZSBiYXNlZCBvZmYgb2YgPHV0eG9CYWxhbmNlPiAtIDxmZWU+IC0gPGFtb3VudFRvU2VuZD5cbiAgICAvLyByZXNldCB0aGUgb3V0cHV0cyBjb2xsZWN0aW9uIGJlY2F1c2Ugbm93IG91ciBsYXN0IG91dHB1dCBoYXMgY2hhbmdlZFxuICAgIG91dHB1dHMgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dHMubmV3KCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgb3V0cHV0cy5hZGQoXG4gICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKG91dHB1dC5hZGRyZXNzKSxcbiAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLl9jaGFuZ2VBZGRyZXNzICYmIHRoaXMuX3NlbmRlckJhbGFuY2UpIHtcbiAgICAgIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHRoaXMuX2NoYW5nZUFkZHJlc3MpO1xuICAgICAgY29uc3QgdXR4b0JhbGFuY2UgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fc2VuZGVyQmFsYW5jZSk7XG5cbiAgICAgIGNvbnN0IGFkanVzdG1lbnQgPSBCaWdOdW0uZnJvbV9zdHIoJzIwMDAwMDAnKTtcbiAgICAgIGxldCBjaGFuZ2UgPSB1dHhvQmFsYW5jZS5jaGVja2VkX3N1Yih0aGlzLl9mZWUpLmNoZWNrZWRfc3ViKHRvdGFsQW1vdW50VG9TZW5kKTtcbiAgICAgIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKSB7XG4gICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX3N1YihhZGp1c3RtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlKSB7XG4gICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX2FkZChhZGp1c3RtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3KSB7XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9hZGQoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHdpdGhkcmF3YWwudmFsdWUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhjaGFuZ2VBZGRyZXNzLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoY2hhbmdlKSk7XG4gICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4UmF3ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25Cb2R5Lm5ld190eF9ib2R5KGlucHV0cywgb3V0cHV0cywgdGhpcy5fZmVlKTtcblxuICAgIGNvbnN0IGNlcnRzID0gQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVzLm5ldygpO1xuICAgIGZvciAoY29uc3QgY2VydCBvZiB0aGlzLl9jZXJ0cykge1xuICAgICAgY2VydHMuYWRkKGNlcnQpO1xuICAgIH1cbiAgICB0eFJhdy5zZXRfY2VydHMoY2VydHMpO1xuXG4gICAgLy8gYWRkIGluIHdpdGhkcmF3YWwgaWYgdGhpcyBpcyBhIHdpdGhkcmF3YWwgdHhcbiAgICBpZiAodGhpcy5fd2l0aGRyYXdhbHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgd2l0aGRyYXdhbHMgPSBDYXJkYW5vV2FzbS5XaXRoZHJhd2Fscy5uZXcoKTtcbiAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgY29uc3QgcmV3YXJkQWRkcmVzcyA9IENhcmRhbm9XYXNtLlJld2FyZEFkZHJlc3MuZnJvbV9hZGRyZXNzKFxuICAgICAgICAgIENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIod2l0aGRyYXdhbC5zdGFrZUFkZHJlc3MpXG4gICAgICAgICk7XG4gICAgICAgIHdpdGhkcmF3YWxzLmluc2VydChyZXdhcmRBZGRyZXNzISwgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHdpdGhkcmF3YWwudmFsdWUpKTtcbiAgICAgIH0pO1xuXG4gICAgICB0eFJhdy5zZXRfd2l0aGRyYXdhbHMod2l0aGRyYXdhbHMpO1xuICAgIH1cblxuICAgIHR4UmF3LnNldF90dGwoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3R0bC50b1N0cmluZygpKSk7XG4gICAgY29uc3QgdHhSYXdIYXNoID0gQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0eFJhdyk7XG5cbiAgICAvLyBub3cgYWRkIHRoZSB3aXRuZXNzZXMgYWdhaW4gdGhpcyB0aW1lIGZvciByZWFsLiBXZSBuZWVkIHRvIGRvIHRoaXMgYWdhaW5cbiAgICAvLyBiZWNhdXNlIG5vdyB0aGF0IHdlJ3ZlIGFkZGVkIG91ciByZWFsIGZlZSBhbmQgY2hhbmdlIG91dHB1dCwgd2UgaGF2ZSBhIGRpZmZlcmVuY2UgdHJhbnNhY3Rpb24gaGFzaFxuICAgIGNvbnN0IHdpdG5lc3NTZXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbldpdG5lc3NTZXQubmV3KCk7XG4gICAgY29uc3QgdmtleVdpdG5lc3NlcyA9IENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXMubmV3KCk7XG4gICAgdGhpcy5fc2lnbmVycy5mb3JFYWNoKChrZXlQYWlyKSA9PiB7XG4gICAgICBjb25zdCBwcnYgPSBrZXlQYWlyLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyhcbiAgICAgICAgdHhSYXdIYXNoLFxuICAgICAgICBDYXJkYW5vV2FzbS5Qcml2YXRlS2V5LmZyb21fbm9ybWFsX2J5dGVzKEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpKVxuICAgICAgKTtcbiAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICB9KTtcbiAgICB0aGlzLl9zaWduYXR1cmVzLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgY29uc3QgdmtleSA9IENhcmRhbm9XYXNtLlZrZXkubmV3KENhcmRhbm9XYXNtLlB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5wdWJsaWNLZXkucHViLCAnaGV4JykpKTtcbiAgICAgIGNvbnN0IGVkMjU1U2lnID0gQ2FyZGFub1dhc20uRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2J5dGVzKHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgdmtleVdpdG5lc3Nlcy5hZGQoQ2FyZGFub1dhc20uVmtleXdpdG5lc3MubmV3KHZrZXksIGVkMjU1U2lnKSk7XG4gICAgfSk7XG4gICAgd2l0bmVzc1NldC5zZXRfdmtleXModmtleVdpdG5lc3Nlcyk7XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi50cmFuc2FjdGlvbiA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLm5ldyh0eFJhdywgd2l0bmVzc1NldCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhpcy5fc2lnbmVycy5wdXNoKG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pKTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXV0aWwuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ2ludmFsaWQgYWRkcmVzcyAnICsgYWRkcmVzcy5hZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgS2V5IHZhbGlkYXRpb24gZmFpbGVkYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbi5mcm9tX2J5dGVzKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbi50cmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhZGRTaWduYXR1cmUocHVibGljS2V5OiBCYXNlUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaCh7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH0pO1xuICB9XG59XG4iXX0=
|
|
435
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxtREFTOEI7QUFDOUIsK0NBQW9HO0FBQ3BHLHVDQUFvQztBQUNwQyxpREFBc0Q7QUFDdEQsc0ZBQXdFO0FBQ3hFLCtGQUFrRTtBQUVsRSxNQUFzQixrQkFBbUIsU0FBUSxpQ0FBc0I7SUFnQnJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBZlgsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBdUIsRUFBRSxDQUFDO1FBQzVDLHdCQUFtQixHQUF3QixFQUFFLENBQUM7UUFDOUMsb0JBQWUsR0FBZ0IsRUFBRSxDQUFDO1FBQ2xDLGdCQUFXLEdBQWdCLEVBQUUsQ0FBQztRQUc5QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsV0FBTSxHQUE4QixFQUFFLENBQUM7UUFDdkMsaUJBQVksR0FBaUIsRUFBRSxDQUFDO1FBRWhDLGlCQUFZLEdBQVksRUFBRSxDQUFDO1FBS25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcseUNBQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLENBQW1CO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLENBQW9CO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQs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ci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXkgYXMgQmFzZVB1YmxpY0tleSxcbiAgU2lnbmF0dXJlLFxuICBUcmFuc2FjdGlvblR5cGUsXG4gIFV0aWxzRXJyb3IsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEFzc2V0LCBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25JbnB1dCwgVHJhbnNhY3Rpb25PdXRwdXQsIFdpdGhkcmF3YWwgfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHV0aWwsIHsgTUlOX0FEQV9GT1JfT05FX0FTU0VUIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgKiBhcyBDYXJkYW5vV2FzbSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEJpZ051bSB9IGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb24hOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9zaWduZXJzOiBLZXlQYWlyW10gPSBbXTtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbklucHV0czogVHJhbnNhY3Rpb25JbnB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb25PdXRwdXRzOiBUcmFuc2FjdGlvbk91dHB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfaW5pdFNpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG4gIHByb3RlY3RlZCBfc2lnbmF0dXJlczogU2lnbmF0dXJlW10gPSBbXTtcbiAgcHJvdGVjdGVkIF9jaGFuZ2VBZGRyZXNzOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc2VuZGVyQmFsYW5jZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3R0bCA9IDA7XG4gIHByb3RlY3RlZCBfY2VydHM6IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlW10gPSBbXTtcbiAgcHJvdGVjdGVkIF93aXRoZHJhd2FsczogV2l0aGRyYXdhbFtdID0gW107XG4gIHByb3RlY3RlZCBfdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuICBwcm90ZWN0ZWQgX211bHRpQXNzZXRzOiBBc3NldFtdID0gW107XG4gIHByaXZhdGUgX2ZlZTogQmlnTnVtO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9mZWUgPSBCaWdOdW0uemVybygpO1xuICB9XG5cbiAgaW5wdXQoaTogVHJhbnNhY3Rpb25JbnB1dCk6IHRoaXMge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uSW5wdXRzLnB1c2goaSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvdXRwdXQobzogVHJhbnNhY3Rpb25PdXRwdXQpOiB0aGlzIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbk91dHB1dHMucHVzaChvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzc2V0cyhhOiBBc3NldCk6IHRoaXMge1xuICAgIHRoaXMuX211bHRpQXNzZXRzLnB1c2goYSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0dGwodDogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy5fdHRsID0gdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNoYW5nZUFkZHJlc3MoYWRkcjogc3RyaW5nLCB0b3RhbElucHV0QmFsYW5jZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fY2hhbmdlQWRkcmVzcyA9IGFkZHI7XG4gICAgdGhpcy5fc2VuZGVyQmFsYW5jZSA9IHRvdGFsSW5wdXRCYWxhbmNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmVlKGZlZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fZmVlID0gQmlnTnVtLmZyb21fc3RyKGZlZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgICBjb25zdCB0eG5Cb2R5ID0gdHgudHJhbnNhY3Rpb24uYm9keSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhuQm9keS5pbnB1dHMoKS5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHR4bkJvZHkuaW5wdXRzKCkuZ2V0KGkpO1xuICAgICAgdGhpcy5pbnB1dCh7XG4gICAgICAgIHRyYW5zYWN0aW9uX2lkOiBCdWZmZXIuZnJvbShpbnB1dC50cmFuc2FjdGlvbl9pZCgpLnRvX2J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdHJhbnNhY3Rpb25faW5kZXg6IGlucHV0LmluZGV4KCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eG5Cb2R5Lm91dHB1dHMoKS5sZW4oKTsgaSsrKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0eG5Cb2R5Lm91dHB1dHMoKS5nZXQoaSk7XG4gICAgICB0aGlzLm91dHB1dCh7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzKCkudG9fYmVjaDMyKCksXG4gICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudCgpLmNvaW4oKS50b19zdHIoKSxcbiAgICAgICAgbXVsdGlBc3NldHM6IG91dHB1dC5hbW91bnQoKS5tdWx0aWFzc2V0KCkgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR4bkJvZHkuY2VydHMoKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjZXJ0cyA9IHR4bkJvZHkuY2VydHMoKSBhcyBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZXM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlcnRzLmxlbigpOyBpKyspIHtcbiAgICAgICAgdGhpcy5fY2VydHMucHVzaChjZXJ0cy5nZXQoaSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eG5Cb2R5LndpdGhkcmF3YWxzKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgd2l0aGRyYXdhbHMgPSB0eG5Cb2R5LndpdGhkcmF3YWxzKCkgYXMgQ2FyZGFub1dhc20uV2l0aGRyYXdhbHM7XG4gICAgICBjb25zdCBrZXlzID0gd2l0aGRyYXdhbHMua2V5cygpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbigpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmV3YXJkQWRkcmVzcyA9IGtleXMuZ2V0KGkpIGFzIENhcmRhbm9XYXNtLlJld2FyZEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IHJld2FyZCA9IHdpdGhkcmF3YWxzLmdldChyZXdhcmRBZGRyZXNzKSBhcyBDYXJkYW5vV2FzbS5CaWdOdW07XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLnB1c2goeyBzdGFrZUFkZHJlc3M6IHJld2FyZEFkZHJlc3MudG9fYWRkcmVzcygpLnRvX2JlY2gzMigpLCB2YWx1ZTogcmV3YXJkLnRvX3N0cigpIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3R0bCA9IHR4LnRyYW5zYWN0aW9uLmJvZHkoKS50dGwoKSBhcyBudW1iZXI7XG4gICAgdGhpcy5fZmVlID0gdHgudHJhbnNhY3Rpb24uYm9keSgpLmZlZSgpO1xuXG4gICAgaWYgKHR4LnRyYW5zYWN0aW9uLndpdG5lc3Nfc2V0KCkudmtleXMoKSkge1xuICAgICAgY29uc3QgdmtleXMgPSB0eC50cmFuc2FjdGlvbi53aXRuZXNzX3NldCgpLnZrZXlzKCkhIGFzIENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZrZXlzLmxlbigpOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmtleSA9IHZrZXlzLmdldChpKTtcbiAgICAgICAgdGhpcy5faW5pdFNpZ25hdHVyZXMucHVzaCh7XG4gICAgICAgICAgcHVibGljS2V5OiB7IHB1YjogdmtleS52a2V5KCkucHVibGljX2tleSgpLnRvX2hleCgpIH0sXG4gICAgICAgICAgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbSh2a2V5LnNpZ25hdHVyZSgpLnRvX2hleCgpLCAnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhpcy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgaW5wdXRzID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25JbnB1dHMubmV3KCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25JbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgIGlucHV0cy5hZGQoXG4gICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uSW5wdXQubmV3KFxuICAgICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uSGFzaC5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKGlucHV0LnRyYW5zYWN0aW9uX2lkLCAnaGV4JykpLFxuICAgICAgICAgIGlucHV0LnRyYW5zYWN0aW9uX2luZGV4XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgbGV0IG91dHB1dHMgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dHMubmV3KCk7XG4gICAgbGV0IHRvdGFsQW1vdW50VG9TZW5kID0gQ2FyZGFub1dhc20uQmlnTnVtLnplcm8oKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbk91dHB1dHMuZm9yRWFjaCgob3V0cHV0KSA9PiB7XG4gICAgICBjb25zdCBhbW91bnQgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIob3V0cHV0LmFtb3VudCk7XG4gICAgICBvdXRwdXRzLmFkZChcbiAgICAgICAgQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KFxuICAgICAgICAgIENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIob3V0cHV0LmFkZHJlc3MpLFxuICAgICAgICAgIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhhbW91bnQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0b3RhbEFtb3VudFRvU2VuZCA9IHRvdGFsQW1vdW50VG9TZW5kLmNoZWNrZWRfYWRkKGFtb3VudCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fZmVlLmlzX3plcm8oKSkge1xuICAgICAgLy8gZXN0aW1hdGUgZmVlXG4gICAgICAvLyBhZGQgZXh0cmEgb3V0cHV0IGZvciB0aGUgY2hhbmdlXG4gICAgICBpZiAodGhpcy5fY2hhbmdlQWRkcmVzcyAmJiB0aGlzLl9zZW5kZXJCYWxhbmNlKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHRoaXMuX2NoYW5nZUFkZHJlc3MpO1xuICAgICAgICBjb25zdCB1dHhvQmFsYW5jZSA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl9zZW5kZXJCYWxhbmNlKTtcblxuICAgICAgICBjb25zdCBhZGp1c3RtZW50ID0gQmlnTnVtLmZyb21fc3RyKCcyMDAwMDAwJyk7XG4gICAgICAgIGxldCBjaGFuZ2UgPSB1dHhvQmFsYW5jZS5jaGVja2VkX3N1Yih0aGlzLl9mZWUpLmNoZWNrZWRfc3ViKHRvdGFsQW1vdW50VG9TZW5kKTtcbiAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpIHtcbiAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9zdWIoYWRqdXN0bWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlKSB7XG4gICAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfYWRkKGFkanVzdG1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcgfHwgdGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbSkge1xuICAgICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX2FkZChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdG90YWxBbW91bnRUb1NlbmQgaXMgMCwgaXRzIGNvbnNvbGlkYXRpb25cbiAgICAgICAgaWYgKHRvdGFsQW1vdW50VG9TZW5kLnRvX3N0cigpID09ICcwJykge1xuICAgICAgICAgIC8vIHN1cHBvcnQgZm9yIG11bHRpLWFzc2V0IGNvbnNvbGlkYXRpb25cbiAgICAgICAgICBpZiAodGhpcy5fbXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdG90YWxOdW1iZXJPZkFzc2V0cyA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl9tdWx0aUFzc2V0cy5sZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjb25zdCBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dCA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihNSU5fQURBX0ZPUl9PTkVfQVNTRVQpO1xuICAgICAgICAgICAgY29uc3QgbWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMgPVxuICAgICAgICAgICAgICBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dC5jaGVja2VkX211bCh0b3RhbE51bWJlck9mQXNzZXRzKTtcblxuICAgICAgICAgICAgaWYgKCFjaGFuZ2UubGVzc190aGFuKG1pbkFtb3VudE5lZWRlZEZvclRvdGFsQXNzZXRPdXRwdXRzKSkge1xuICAgICAgICAgICAgICB0aGlzLl9tdWx0aUFzc2V0cy5mb3JFYWNoKChhc3NldCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB0eE91dHB1dEJ1aWxkZXIgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dEJ1aWxkZXIubmV3KCk7XG4gICAgICAgICAgICAgICAgLy8gY2hhbmdlQWRkcmVzcyBpcyB0aGUgcm9vdCBhZGRyZXNzLCB3aGljaCBpcyB3aGVyZSB3ZSB3YW50IHRoZSB0b2tlbnMgYXNzZXRzIHRvIGJlIHNlbnQgdG9cbiAgICAgICAgICAgICAgICBjb25zdCB0b0FkZHJlc3MgPSBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHRoaXMuX2NoYW5nZUFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIHR4T3V0cHV0QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci53aXRoX2FkZHJlc3ModG9BZGRyZXNzKTtcbiAgICAgICAgICAgICAgICBsZXQgdHhPdXRwdXRBbW91bnRCdWlsZGVyID0gdHhPdXRwdXRCdWlsZGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NldE5hbWUgPSBDYXJkYW5vV2FzbS5Bc3NldE5hbWUubmV3KEJ1ZmZlci5mcm9tKGFzc2V0LmFzc2V0X25hbWUsICdoZXgnKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9saWN5SWQgPSBDYXJkYW5vV2FzbS5TY3JpcHRIYXNoLmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oYXNzZXQucG9saWN5X2lkLCAnaGV4JykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpQXNzZXQgPSBDYXJkYW5vV2FzbS5NdWx0aUFzc2V0Lm5ldygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzc2V0cyA9IENhcmRhbm9XYXNtLkFzc2V0cy5uZXcoKTtcbiAgICAgICAgICAgICAgICBhc3NldHMuaW5zZXJ0KGFzc2V0TmFtZSwgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKGFzc2V0LnF1YW50aXR5KSk7XG4gICAgICAgICAgICAgICAgbXVsdGlBc3NldC5pbnNlcnQocG9saWN5SWQsIGFzc2V0cyk7XG5cbiAgICAgICAgICAgICAgICB0eE91dHB1dEFtb3VudEJ1aWxkZXIgPSB0eE91dHB1dEFtb3VudEJ1aWxkZXIud2l0aF9jb2luX2FuZF9hc3NldChcbiAgICAgICAgICAgICAgICAgIG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LFxuICAgICAgICAgICAgICAgICAgbXVsdGlBc3NldFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0eE91dHB1dCA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgICAgICAgIG91dHB1dHMuYWRkKHR4T3V0cHV0KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgLy8gZmluYWxseSBzZW5kIHRoZSByZW1haW5pbmcgQURBIGluIGl0cyBvd24gb3V0cHV0XG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ091dHB1dEFtb3VudCA9IGNoYW5nZS5jaGVja2VkX3N1YihtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cyk7XG4gICAgICAgICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICAgICAgICBjaGFuZ2VBZGRyZXNzLFxuICAgICAgICAgICAgICAgIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhyZW1haW5pbmdPdXRwdXRBbW91bnQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyB0b2tlbnMgdG8gY29uc29saWRhdGUsIHlvdSBvbmx5IGhhdmUgMSBvdXRwdXQgd2hpY2ggaXMgQURBIGFsb25lXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VPdXRwdXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dC5uZXcoY2hhbmdlQWRkcmVzcywgQ2FyZGFub1dhc20uVmFsdWUubmV3KGNoYW5nZSkpO1xuICAgICAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpc24ndCBhIGNvbnNvbGlkYXRlIHJlcXVlc3QsIHdoYXRldmVyIGNoYW5nZSB0aGF0IG5lZWRzIHRvIGJlIHNlbnQgYmFjayB0byB0aGUgcm9vdGFkZHJlc3MgaXMgYWRkZWQgYXMgYSBzZXBhcmF0ZSBvdXRwdXQgaGVyZVxuICAgICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhjaGFuZ2VBZGRyZXNzLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoY2hhbmdlKSk7XG4gICAgICAgICAgb3V0cHV0cy5hZGQoY2hhbmdlT3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0eEJvZHkgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkJvZHkubmV3X3R4X2JvZHkoaW5wdXRzLCBvdXRwdXRzLCB0aGlzLl9mZWUpO1xuICAgICAgdHhCb2R5LnNldF90dGwoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3R0bC50b1N0cmluZygpKSk7XG4gICAgICBjb25zdCB0eEhhc2ggPSBDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4Qm9keSk7XG5cbiAgICAgIC8vIHdlIGFkZCB3aXRuZXNzZXMgb25jZSBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGFwcHJvcHJpYXRlIGFtb3VudCBvZiBzaWduZXJzIGZvciBjYWxjdWxhdGluZyB0aGUgZmVlXG4gICAgICBjb25zdCB3aXRuZXNzU2V0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25XaXRuZXNzU2V0Lm5ldygpO1xuICAgICAgY29uc3QgdmtleVdpdG5lc3NlcyA9IENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXMubmV3KCk7XG4gICAgICB0aGlzLl9zaWduZXJzLmZvckVhY2goKGtleVBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2IGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyhcbiAgICAgICAgICB0eEhhc2gsXG4gICAgICAgICAgQ2FyZGFub1dhc20uUHJpdmF0ZUtleS5mcm9tX25vcm1hbF9ieXRlcyhCdWZmZXIuZnJvbShwcnYsICdoZXgnKSlcbiAgICAgICAgKTtcbiAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmdldEFsbFNpZ25hdHVyZXMoKS5mb3JFYWNoKChzaWduYXR1cmUpID0+IHtcbiAgICAgICAgY29uc3QgdmtleSA9IENhcmRhbm9XYXNtLlZrZXkubmV3KFxuICAgICAgICAgIENhcmRhbm9XYXNtLlB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5wdWJsaWNLZXkucHViLCAnaGV4JykpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVkMjU1U2lnID0gQ2FyZGFub1dhc20uRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2J5dGVzKHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgICB2a2V5V2l0bmVzc2VzLmFkZChDYXJkYW5vV2FzbS5Wa2V5d2l0bmVzcy5uZXcodmtleSwgZWQyNTVTaWcpKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHZrZXlXaXRuZXNzZXMubGVuKCkgPT09IDApIHtcbiAgICAgICAgY29uc3QgcHJ2ID0gQ2FyZGFub1dhc20uUHJpdmF0ZUtleS5nZW5lcmF0ZV9lZDI1NTE5KCk7XG4gICAgICAgIGNvbnN0IHZrZXlXaXRuZXNzID0gQ2FyZGFub1dhc20ubWFrZV92a2V5X3dpdG5lc3ModHhIYXNoLCBwcnYpO1xuICAgICAgICB2a2V5V2l0bmVzc2VzLmFkZCh2a2V5V2l0bmVzcyk7XG4gICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2l0bmVzc1NldC5zZXRfdmtleXModmtleVdpdG5lc3Nlcyk7XG5cbiAgICAgIC8vIGFkZCBpbiB3aXRoZHJhd2FsIGlmIHRoaXMgaXMgYSB3aXRoZHJhd2FsIHR4XG4gICAgICBpZiAodGhpcy5fd2l0aGRyYXdhbHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB3aXRoZHJhd2FscyA9IENhcmRhbm9XYXNtLldpdGhkcmF3YWxzLm5ldygpO1xuICAgICAgICB0aGlzLl93aXRoZHJhd2Fscy5mb3JFYWNoKCh3aXRoZHJhd2FsOiBXaXRoZHJhd2FsKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmV3YXJkQWRkcmVzcyA9IENhcmRhbm9XYXNtLlJld2FyZEFkZHJlc3MuZnJvbV9hZGRyZXNzKFxuICAgICAgICAgICAgQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMih3aXRoZHJhd2FsLnN0YWtlQWRkcmVzcylcbiAgICAgICAgICApO1xuICAgICAgICAgIHdpdGhkcmF3YWxzLmluc2VydChyZXdhcmRBZGRyZXNzISwgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHdpdGhkcmF3YWwudmFsdWUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHhCb2R5LnNldF93aXRoZHJhd2Fscyh3aXRoZHJhd2Fscyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBpbiBjZXJ0aWZpY2F0ZXMgdG8gZ2V0IG1vY2sgc2l6ZVxuICAgICAgY29uc3QgZHJhZnRDZXJ0cyA9IENhcmRhbm9XYXNtLkNlcnRpZmljYXRlcy5uZXcoKTtcbiAgICAgIGZvciAoY29uc3QgY2VydCBvZiB0aGlzLl9jZXJ0cykge1xuICAgICAgICBkcmFmdENlcnRzLmFkZChjZXJ0KTtcbiAgICAgIH1cbiAgICAgIHR4Qm9keS5zZXRfY2VydHMoZHJhZnRDZXJ0cyk7XG5cbiAgICAgIGNvbnN0IHR4RHJhZnQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbi5uZXcodHhCb2R5LCB3aXRuZXNzU2V0KTtcbiAgICAgIGNvbnN0IGxpbmVhckZlZSA9IENhcmRhbm9XYXNtLkxpbmVhckZlZS5uZXcoXG4gICAgICAgIENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cignNDQnKSxcbiAgICAgICAgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKCcxNTUzODEnKVxuICAgICAgKTtcblxuICAgICAgLy8gY2FsY3VsYXRlIHRoZSBmZWUgYmFzZWQgb2ZmIG91ciBkdW1teSB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgZmVlID0gQ2FyZGFub1dhc20ubWluX2ZlZSh0eERyYWZ0LCBsaW5lYXJGZWUpLmNoZWNrZWRfYWRkKEJpZ051bS5mcm9tX3N0cignNDQwJykpO1xuICAgICAgdGhpcy5fZmVlID0gZmVlO1xuICAgIH1cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5mZWUodGhpcy5fZmVlLnRvX3N0cigpKTtcbiAgICAvLyBub3cgY2FsY3VsYXRlIHRoZSBjaGFuZ2UgYmFzZWQgb2ZmIG9mIDx1dHhvQmFsYW5jZT4gLSA8ZmVlPiAtIDxhbW91bnRUb1NlbmQ+XG4gICAgLy8gcmVzZXQgdGhlIG91dHB1dHMgY29sbGVjdGlvbiBiZWNhdXNlIG5vdyBvdXIgbGFzdCBvdXRwdXQgaGFzIGNoYW5nZWRcbiAgICBvdXRwdXRzID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRzLm5ldygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uT3V0cHV0cy5mb3JFYWNoKChvdXRwdXQpID0+IHtcbiAgICAgIGlmIChvdXRwdXQubXVsdGlBc3NldHMpIHtcbiAgICAgICAgY29uc3QgcG9saWN5SWQgPSBvdXRwdXQubXVsdGlBc3NldHMua2V5cygpLmdldCgwKTtcbiAgICAgICAgY29uc3QgYXNzZXRzID0gb3V0cHV0Lm11bHRpQXNzZXRzLmdldChwb2xpY3lJZCk7XG4gICAgICAgIGNvbnN0IGFzc2V0TmFtZSA9IGFzc2V0cyEua2V5cygpLmdldCgwKTtcbiAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBhc3NldHMhLmdldChhc3NldE5hbWUpO1xuICAgICAgICBsZXQgdHhPdXRwdXRCdWlsZGVyID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRCdWlsZGVyLm5ldygpO1xuICAgICAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIob3V0cHV0LmFtb3VudCk7XG4gICAgICAgIGNvbnN0IHRvQWRkcmVzcyA9IENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIob3V0cHV0LmFkZHJlc3MpO1xuICAgICAgICB0eE91dHB1dEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIud2l0aF9hZGRyZXNzKHRvQWRkcmVzcyk7XG4gICAgICAgIGxldCB0eE91dHB1dEFtb3VudEJ1aWxkZXIgPSB0eE91dHB1dEJ1aWxkZXIubmV4dCgpO1xuICAgICAgICBjb25zdCBtdWx0aUFzc2V0ID0gQ2FyZGFub1dhc20uTXVsdGlBc3NldC5uZXcoKTtcbiAgICAgICAgY29uc3QgYXNzZXQgPSBDYXJkYW5vV2FzbS5Bc3NldHMubmV3KCk7XG4gICAgICAgIGFzc2V0Lmluc2VydChhc3NldE5hbWUsIHF1YW50aXR5ISk7XG4gICAgICAgIG11bHRpQXNzZXQuaW5zZXJ0KHBvbGljeUlkLCBhc3NldCk7XG4gICAgICAgIHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci53aXRoX2NvaW5fYW5kX2Fzc2V0KG91dHB1dEFtb3VudCwgbXVsdGlBc3NldCk7XG4gICAgICAgIGNvbnN0IHR4T3V0cHV0ID0gdHhPdXRwdXRBbW91bnRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIG91dHB1dHMuYWRkKHR4T3V0cHV0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dHMuYWRkKFxuICAgICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICAgIENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIob3V0cHV0LmFkZHJlc3MpLFxuICAgICAgICAgICAgQ2FyZGFub1dhc20uVmFsdWUubmV3KENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cihvdXRwdXQuYW1vdW50KSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuX2NoYW5nZUFkZHJlc3MgJiYgdGhpcy5fc2VuZGVyQmFsYW5jZSkge1xuICAgICAgY29uc3QgY2hhbmdlQWRkcmVzcyA9IENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIodGhpcy5fY2hhbmdlQWRkcmVzcyk7XG4gICAgICBjb25zdCB1dHhvQmFsYW5jZSA9IENhcmRhbm9XYXNtLkJpZ051bS5mcm9tX3N0cih0aGlzLl9zZW5kZXJCYWxhbmNlKTtcblxuICAgICAgY29uc3QgYWRqdXN0bWVudCA9IEJpZ051bS5mcm9tX3N0cignMjAwMDAwMCcpO1xuICAgICAgbGV0IGNoYW5nZSA9IHV0eG9CYWxhbmNlLmNoZWNrZWRfc3ViKHRoaXMuX2ZlZSkuY2hlY2tlZF9zdWIodG90YWxBbW91bnRUb1NlbmQpO1xuICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpIHtcbiAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfc3ViKGFkanVzdG1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGUpIHtcbiAgICAgICAgY2hhbmdlID0gY2hhbmdlLmNoZWNrZWRfYWRkKGFkanVzdG1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3IHx8IHRoaXMuX3R5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW0pIHtcbiAgICAgICAgdGhpcy5fd2l0aGRyYXdhbHMuZm9yRWFjaCgod2l0aGRyYXdhbDogV2l0aGRyYXdhbCkgPT4ge1xuICAgICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX2FkZChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdG90YWxBbW91bnRUb1NlbmQgaXMgMCwgaXRzIGNvbnNvbGlkYXRpb25cbiAgICAgIGlmICh0b3RhbEFtb3VudFRvU2VuZC50b19zdHIoKSA9PSAnMCcpIHtcbiAgICAgICAgLy8gc3VwcG9ydCBmb3IgbXVsdGktYXNzZXQgY29uc29saWRhdGlvblxuICAgICAgICBpZiAodGhpcy5fbXVsdGlBc3NldHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IHRvdGFsTnVtYmVyT2ZBc3NldHMgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fbXVsdGlBc3NldHMubGVuZ3RoLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIGNvbnN0IG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKCcxNTAwMDAwJyk7XG4gICAgICAgICAgY29uc3QgbWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMgPSBtaW5BbW91bnROZWVkZWRGb3JPbmVBc3NldE91dHB1dC5jaGVja2VkX211bCh0b3RhbE51bWJlck9mQXNzZXRzKTtcblxuICAgICAgICAgIGlmICghY2hhbmdlLmxlc3NfdGhhbihtaW5BbW91bnROZWVkZWRGb3JUb3RhbEFzc2V0T3V0cHV0cykpIHtcbiAgICAgICAgICAgIHRoaXMuX211bHRpQXNzZXRzLmZvckVhY2goKGFzc2V0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCB0eE91dHB1dEJ1aWxkZXIgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dEJ1aWxkZXIubmV3KCk7XG4gICAgICAgICAgICAgIC8vIGNoYW5nZUFkZHJlc3MgaXMgdGhlIHJvb3QgYWRkcmVzcywgd2hpY2ggaXMgd2hlcmUgd2Ugd2FudCB0aGUgdG9rZW5zIGFzc2V0cyB0byBiZSBzZW50IHRvXG4gICAgICAgICAgICAgIGNvbnN0IHRvQWRkcmVzcyA9IENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIodGhpcy5fY2hhbmdlQWRkcmVzcyk7XG4gICAgICAgICAgICAgIHR4T3V0cHV0QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci53aXRoX2FkZHJlc3ModG9BZGRyZXNzKTtcbiAgICAgICAgICAgICAgbGV0IHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QnVpbGRlci5uZXh0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IGFzc2V0TmFtZSA9IENhcmRhbm9XYXNtLkFzc2V0TmFtZS5uZXcoQnVmZmVyLmZyb20oYXNzZXQuYXNzZXRfbmFtZSwgJ2hleCcpKTtcbiAgICAgICAgICAgICAgY29uc3QgcG9saWN5SWQgPSBDYXJkYW5vV2FzbS5TY3JpcHRIYXNoLmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oYXNzZXQucG9saWN5X2lkLCAnaGV4JykpO1xuICAgICAgICAgICAgICBjb25zdCBtdWx0aUFzc2V0ID0gQ2FyZGFub1dhc20uTXVsdGlBc3NldC5uZXcoKTtcbiAgICAgICAgICAgICAgY29uc3QgYXNzZXRzID0gQ2FyZGFub1dhc20uQXNzZXRzLm5ldygpO1xuICAgICAgICAgICAgICBhc3NldHMuaW5zZXJ0KGFzc2V0TmFtZSwgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKGFzc2V0LnF1YW50aXR5KSk7XG4gICAgICAgICAgICAgIG11bHRpQXNzZXQuaW5zZXJ0KHBvbGljeUlkLCBhc3NldHMpO1xuXG4gICAgICAgICAgICAgIHR4T3V0cHV0QW1vdW50QnVpbGRlciA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci53aXRoX2NvaW5fYW5kX2Fzc2V0KFxuICAgICAgICAgICAgICAgIG1pbkFtb3VudE5lZWRlZEZvck9uZUFzc2V0T3V0cHV0LFxuICAgICAgICAgICAgICAgIG11bHRpQXNzZXRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCB0eE91dHB1dCA9IHR4T3V0cHV0QW1vdW50QnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgICAgICBvdXRwdXRzLmFkZCh0eE91dHB1dCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gZmluYWxseSBzZW5kIHRoZSByZW1haW5pbmcgQURBIGluIGl0cyBvd24gb3V0cHV0XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdPdXRwdXRBbW91bnQgPSBjaGFuZ2UuY2hlY2tlZF9zdWIobWluQW1vdW50TmVlZGVkRm9yVG90YWxBc3NldE91dHB1dHMpO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KFxuICAgICAgICAgICAgICBjaGFuZ2VBZGRyZXNzLFxuICAgICAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcocmVtYWluaW5nT3V0cHV0QW1vdW50KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgICAgICdJbnN1ZmZpY2llbnQgZnVuZHM6IG5lZWQgYSBtaW5pbXVtIG9mIDEuNSBBREEgcGVyIG91dHB1dCB0byBjb25zdHJ1Y3QgdG9rZW4gY29uc29saWRhdGlvbidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyB0b2tlbnMgdG8gY29uc29saWRhdGUsIHlvdSBvbmx5IGhhdmUgMSBvdXRwdXQgd2hpY2ggaXMgQURBIGFsb25lXG4gICAgICAgICAgY29uc3QgY2hhbmdlT3V0cHV0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXQubmV3KGNoYW5nZUFkZHJlc3MsIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhjaGFuZ2UpKTtcbiAgICAgICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB0aGlzIGlzbid0IGEgY29uc29saWRhdGUgcmVxdWVzdCwgd2hhdGV2ZXIgY2hhbmdlIHRoYXQgbmVlZHMgdG8gYmUgc2VudCBiYWNrIHRvIHRoZSByb290YWRkcmVzcyBpcyBhZGRlZCBhcyBhIHNlcGFyYXRlIG91dHB1dCBoZXJlXG4gICAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhjaGFuZ2VBZGRyZXNzLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoY2hhbmdlKSk7XG4gICAgICAgIG91dHB1dHMuYWRkKGNoYW5nZU91dHB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHhSYXcgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkJvZHkubmV3X3R4X2JvZHkoaW5wdXRzLCBvdXRwdXRzLCB0aGlzLl9mZWUpO1xuXG4gICAgY29uc3QgY2VydHMgPSBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZXMubmV3KCk7XG4gICAgZm9yIChjb25zdCBjZXJ0IG9mIHRoaXMuX2NlcnRzKSB7XG4gICAgICBjZXJ0cy5hZGQoY2VydCk7XG4gICAgfVxuICAgIHR4UmF3LnNldF9jZXJ0cyhjZXJ0cyk7XG5cbiAgICAvLyBhZGQgaW4gd2l0aGRyYXdhbCBpZiB0aGlzIGlzIGEgd2l0aGRyYXdhbCB0eFxuICAgIGlmICh0aGlzLl93aXRoZHJhd2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IENhcmRhbm9XYXNtLldpdGhkcmF3YWxzLm5ldygpO1xuICAgICAgdGhpcy5fd2l0aGRyYXdhbHMuZm9yRWFjaCgod2l0aGRyYXdhbDogV2l0aGRyYXdhbCkgPT4ge1xuICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0gQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5mcm9tX2FkZHJlc3MoXG4gICAgICAgICAgQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMih3aXRoZHJhd2FsLnN0YWtlQWRkcmVzcylcbiAgICAgICAgKTtcbiAgICAgICAgd2l0aGRyYXdhbHMuaW5zZXJ0KHJld2FyZEFkZHJlc3MhLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgfSk7XG5cbiAgICAgIHR4UmF3LnNldF93aXRoZHJhd2Fscyh3aXRoZHJhd2Fscyk7XG4gICAgfVxuXG4gICAgdHhSYXcuc2V0X3R0bChDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fdHRsLnRvU3RyaW5nKCkpKTtcbiAgICBjb25zdCB0eFJhd0hhc2ggPSBDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4UmF3KTtcblxuICAgIC8vIG5vdyBhZGQgdGhlIHdpdG5lc3NlcyBhZ2FpbiB0aGlzIHRpbWUgZm9yIHJlYWwuIFdlIG5lZWQgdG8gZG8gdGhpcyBhZ2FpblxuICAgIC8vIGJlY2F1c2Ugbm93IHRoYXQgd2UndmUgYWRkZWQgb3VyIHJlYWwgZmVlIGFuZCBjaGFuZ2Ugb3V0cHV0LCB3ZSBoYXZlIGEgZGlmZmVyZW5jZSB0cmFuc2FjdGlvbiBoYXNoXG4gICAgY29uc3Qgd2l0bmVzc1NldCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uV2l0bmVzc1NldC5uZXcoKTtcbiAgICBjb25zdCB2a2V5V2l0bmVzc2VzID0gQ2FyZGFub1dhc20uVmtleXdpdG5lc3Nlcy5uZXcoKTtcbiAgICB0aGlzLl9zaWduZXJzLmZvckVhY2goKGtleVBhaXIpID0+IHtcbiAgICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gICAgICBjb25zdCB2a2V5V2l0bmVzcyA9IENhcmRhbm9XYXNtLm1ha2VfdmtleV93aXRuZXNzKFxuICAgICAgICB0eFJhd0hhc2gsXG4gICAgICAgIENhcmRhbm9XYXNtLlByaXZhdGVLZXkuZnJvbV9ub3JtYWxfYnl0ZXMoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpXG4gICAgICApO1xuICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIGNvc21ldGljIHNpZ25hdHVyZSBhcnJheSBpbiBuYXRpdmUgdHhuIHdyYXBwZXIgdG8gcHJldmVudCBkdXBsaWNhdGUgd2hlbiBidWlsZGVyIGlzIGluaXRlZCBmcm9tIGEgcGFydGlhbGx5IHdpdG5lc3NlZCB0eG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID0gMDtcbiAgICB0aGlzLmdldEFsbFNpZ25hdHVyZXMoKS5mb3JFYWNoKChzaWduYXR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHZrZXkgPSBDYXJkYW5vV2FzbS5Wa2V5Lm5ldyhDYXJkYW5vV2FzbS5QdWJsaWNLZXkuZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShzaWduYXR1cmUucHVibGljS2V5LnB1YiwgJ2hleCcpKSk7XG4gICAgICBjb25zdCBlZDI1NVNpZyA9IENhcmRhbm9XYXNtLkVkMjU1MTlTaWduYXR1cmUuZnJvbV9ieXRlcyhzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzLm5ldyh2a2V5LCBlZDI1NVNpZykpO1xuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmF0dXJlLnB1c2goc2lnbmF0dXJlLnNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICAgIH0pO1xuICAgIHdpdG5lc3NTZXQuc2V0X3ZrZXlzKHZrZXlXaXRuZXNzZXMpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnRyYW5zYWN0aW9uID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb24ubmV3KHR4UmF3LCB3aXRuZXNzU2V0KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl9zaWduZXJzLnB1c2gobmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSkpO1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignaW52YWxpZCBhZGRyZXNzICcgKyBhZGRyZXNzLmFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBLZXkgdmFsaWRhdGlvbiBmYWlsZWRgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogYW55KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLmZyb21fYnl0ZXMocmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHsgcHVibGljS2V5LCBzaWduYXR1cmUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFsbFNpZ25hdHVyZXMoKTogU2lnbmF0dXJlW10ge1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5faW5pdFNpZ25hdHVyZXMuY29uY2F0KHRoaXMuX3NpZ25hdHVyZXMpKTtcbiAgfVxufVxuIl19
|
|
@@ -6,7 +6,9 @@ import { TransactionBuilder } from './transactionBuilder';
|
|
|
6
6
|
import { Transaction } from './transaction';
|
|
7
7
|
import { StakingActivateBuilder } from './stakingActivateBuilder';
|
|
8
8
|
import { StakingDeactivateBuilder } from './stakingDeactivateBuilder';
|
|
9
|
-
import {
|
|
9
|
+
import { StakingWithdrawBuilder } from './stakingWithdrawBuilder';
|
|
10
|
+
import { StakingPledgeBuilder } from './stakingPledgeBuilder';
|
|
11
|
+
import { StakingClaimRewardsBuilder } from './stakingClaimRewardsBuilder';
|
|
10
12
|
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
11
13
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
12
14
|
/** @inheritdoc */
|
|
@@ -16,8 +18,10 @@ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFac
|
|
|
16
18
|
/** @inheritdoc */
|
|
17
19
|
getTransferBuilder(tx?: Transaction): TransferBuilder;
|
|
18
20
|
getStakingActivateBuilder(tx?: Transaction): StakingActivateBuilder;
|
|
21
|
+
getStakingClaimRewardsBuilder(tx?: Transaction): StakingClaimRewardsBuilder;
|
|
19
22
|
getStakingDeactivateBuilder(tx?: Transaction): StakingDeactivateBuilder;
|
|
20
|
-
getStakingWithdrawBuilder(tx?: Transaction):
|
|
23
|
+
getStakingWithdrawBuilder(tx?: Transaction): StakingWithdrawBuilder;
|
|
24
|
+
getStakingPledgeBuilder(tx?: Transaction): StakingPledgeBuilder;
|
|
21
25
|
/**
|
|
22
26
|
* Initialize the builder with the given transaction
|
|
23
27
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAA4C,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAA4C,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,kBAAkB;IA8BlD,kBAAkB;IAClB,8BAA8B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,2BAA2B;IAI7E,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,yBAAyB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,sBAAsB;IAInE,6BAA6B,CAAC,EAAE,CAAC,EAAE,WAAW;IAI9C,2BAA2B,CAAC,EAAE,CAAC,EAAE,WAAW;IAI5C,yBAAyB,CAAC,EAAE,CAAC,EAAE,WAAW;IAI1C,uBAAuB,CAAC,EAAE,CAAC,EAAE,WAAW;IAIxC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAMjC"}
|
|
@@ -7,7 +7,9 @@ const walletInitializationBuilder_1 = require("./walletInitializationBuilder");
|
|
|
7
7
|
const transaction_1 = require("./transaction");
|
|
8
8
|
const stakingActivateBuilder_1 = require("./stakingActivateBuilder");
|
|
9
9
|
const stakingDeactivateBuilder_1 = require("./stakingDeactivateBuilder");
|
|
10
|
-
const
|
|
10
|
+
const stakingWithdrawBuilder_1 = require("./stakingWithdrawBuilder");
|
|
11
|
+
const stakingPledgeBuilder_1 = require("./stakingPledgeBuilder");
|
|
12
|
+
const stakingClaimRewardsBuilder_1 = require("./stakingClaimRewardsBuilder");
|
|
11
13
|
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
12
14
|
constructor(_coinConfig) {
|
|
13
15
|
super(_coinConfig);
|
|
@@ -25,12 +27,16 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
25
27
|
return this.getTransferBuilder(tx);
|
|
26
28
|
case sdk_core_1.TransactionType.StakingActivate:
|
|
27
29
|
return this.getStakingActivateBuilder(tx);
|
|
30
|
+
case sdk_core_1.TransactionType.StakingClaim:
|
|
31
|
+
return this.getStakingClaimRewardsBuilder(tx);
|
|
28
32
|
case sdk_core_1.TransactionType.StakingDeactivate:
|
|
29
33
|
return this.getStakingDeactivateBuilder(tx);
|
|
30
34
|
case sdk_core_1.TransactionType.StakingWithdraw:
|
|
31
35
|
return this.getStakingWithdrawBuilder(tx);
|
|
32
36
|
case sdk_core_1.TransactionType.WalletInitialization:
|
|
33
37
|
return this.getWalletInitializationBuilder(tx);
|
|
38
|
+
case sdk_core_1.TransactionType.StakingPledge:
|
|
39
|
+
return this.getStakingPledgeBuilder(tx);
|
|
34
40
|
default:
|
|
35
41
|
throw new sdk_core_1.InvalidTransactionError('unsupported transaction');
|
|
36
42
|
}
|
|
@@ -50,11 +56,17 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
50
56
|
getStakingActivateBuilder(tx) {
|
|
51
57
|
return TransactionBuilderFactory.initializeBuilder(tx, new stakingActivateBuilder_1.StakingActivateBuilder(this._coinConfig));
|
|
52
58
|
}
|
|
59
|
+
getStakingClaimRewardsBuilder(tx) {
|
|
60
|
+
return TransactionBuilderFactory.initializeBuilder(tx, new stakingClaimRewardsBuilder_1.StakingClaimRewardsBuilder(this._coinConfig));
|
|
61
|
+
}
|
|
53
62
|
getStakingDeactivateBuilder(tx) {
|
|
54
63
|
return TransactionBuilderFactory.initializeBuilder(tx, new stakingDeactivateBuilder_1.StakingDeactivateBuilder(this._coinConfig));
|
|
55
64
|
}
|
|
56
65
|
getStakingWithdrawBuilder(tx) {
|
|
57
|
-
return TransactionBuilderFactory.initializeBuilder(tx, new
|
|
66
|
+
return TransactionBuilderFactory.initializeBuilder(tx, new stakingWithdrawBuilder_1.StakingWithdrawBuilder(this._coinConfig));
|
|
67
|
+
}
|
|
68
|
+
getStakingPledgeBuilder(tx) {
|
|
69
|
+
return TransactionBuilderFactory.initializeBuilder(tx, new stakingPledgeBuilder_1.StakingPledgeBuilder(this._coinConfig));
|
|
58
70
|
}
|
|
59
71
|
/**
|
|
60
72
|
* Initialize the builder with the given transaction
|
|
@@ -71,4 +83,4 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
71
83
|
}
|
|
72
84
|
}
|
|
73
85
|
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtREFBK0c7QUFDL0csdURBQW9EO0FBQ3BELCtFQUE0RTtBQUU1RSwrQ0FBNEM7QUFDNUMscUVBQWtFO0FBQ2xFLHlFQUFzRTtBQUN0RSxxRUFBa0U7QUFDbEUsaUVBQThEO0FBQzlELDZFQUEwRTtBQUUxRSxNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUMxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxHQUF3QjtRQUMzQixJQUFJLEdBQUcsWUFBWSxVQUFVLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxJQUFJO1lBQ0YsTUFBTSxFQUFFLEdBQUcsSUFBSSx5QkFBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO2dCQUNmLEtBQUssMEJBQWUsQ0FBQyxJQUFJO29CQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsS0FBSywwQkFBZSxDQUFDLGVBQWU7b0JBQ2xDLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLDBCQUFlLENBQUMsWUFBWTtvQkFDL0IsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELEtBQUssMEJBQWUsQ0FBQyxpQkFBaUI7b0JBQ3BDLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxLQUFLLDBCQUFlLENBQUMsZUFBZTtvQkFDbEMsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzVDLEtBQUssMEJBQWUsQ0FBQyxvQkFBb0I7b0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxLQUFLLDBCQUFlLENBQUMsYUFBYTtvQkFDaEMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFDO29CQUNFLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2FBQ2hFO1NBQ0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDhCQUE4QixDQUFDLEVBQWdCO1FBQzdDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseURBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0IsQ0FBQyxFQUFnQjtRQUNqQyxPQUFPLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELHlCQUF5QixDQUFDLEVBQWdCO1FBQ3hDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksK0NBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELDZCQUE2QixDQUFDLEVBQWdCO1FBQzVDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksdURBQTBCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0csQ0FBQztJQUVELDJCQUEyQixDQUFDLEVBQWdCO1FBQzFDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksbURBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVELHlCQUF5QixDQUFDLEVBQWdCO1FBQ3hDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksK0NBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELHVCQUF1QixDQUFDLEVBQWdCO1FBQ3RDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksMkNBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBK0IsRUFBMkIsRUFBRSxPQUFVO1FBQ3BHLElBQUksRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQS9FRCw4REErRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlciB9IGZyb20gJy4vd2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTdGFraW5nQWN0aXZhdGVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nQWN0aXZhdGVCdWlsZGVyJztcbmltcG9ydCB7IFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlciB9IGZyb20gJy4vc3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyJztcbmltcG9ydCB7IFN0YWtpbmdXaXRoZHJhd0J1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdXaXRoZHJhd0J1aWxkZXInO1xuaW1wb3J0IHsgU3Rha2luZ1BsZWRnZUJ1aWxkZXIgfSBmcm9tICcuL3N0YWtpbmdQbGVkZ2VCdWlsZGVyJztcbmltcG9ydCB7IFN0YWtpbmdDbGFpbVJld2FyZHNCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nQ2xhaW1SZXdhcmRzQnVpbGRlcic7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbShyYXc6IFVpbnQ4QXJyYXkgfCBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGlmIChyYXcgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tKEJ1ZmZlci5mcm9tKHJhdykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhdyk7XG4gICAgICBzd2l0Y2ggKHR4LnR5cGUpIHtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcih0eCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nQ2xhaW1SZXdhcmRzQnVpbGRlcih0eCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcih0eCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nV2l0aGRyYXdCdWlsZGVyKHR4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb246XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1BsZWRnZTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nUGxlZGdlQnVpbGRlcih0eCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCd1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIGdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIge1xuICAgIHJldHVybiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgU3Rha2luZ0FjdGl2YXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRTdGFraW5nQ2xhaW1SZXdhcmRzQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBTdGFraW5nQ2xhaW1SZXdhcmRzQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbikge1xuICAgIHJldHVybiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIGdldFN0YWtpbmdXaXRoZHJhd0J1aWxkZXIodHg/OiBUcmFuc2FjdGlvbikge1xuICAgIHJldHVybiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgU3Rha2luZ1dpdGhkcmF3QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICBnZXRTdGFraW5nUGxlZGdlQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBTdGFraW5nUGxlZGdlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYnVpbGRlciB3aXRoIHRoZSBnaXZlbiB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uIHwgdW5kZWZpbmVkfSB0eCAtIHRoZSB0cmFuc2FjdGlvbiB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IGJ1aWxkZXIgLSB0aGUgYnVpbGRlciB0byBiZSBpbml0aWFsaXplZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBUKTogVCB7XG4gICAgaWYgKHR4KSB7XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AddressFormat, BaseUtils } from '@bitgo-beta/sdk-core';
|
|
2
2
|
import { KeyPair } from './keyPair';
|
|
3
|
+
export declare const MIN_ADA_FOR_ONE_ASSET = "1500000";
|
|
3
4
|
export declare class Utils implements BaseUtils {
|
|
4
5
|
createBaseAddressWithStakeAndPaymentKey(stakeKeyPair: KeyPair, paymentKeyPair: KeyPair, network: AddressFormat): string;
|
|
5
6
|
validateBlake2b(hash: string): boolean;
|
|
@@ -17,6 +18,12 @@ export declare class Utils implements BaseUtils {
|
|
|
17
18
|
isValidSignature(signature: string): boolean;
|
|
18
19
|
/** @inheritdoc */
|
|
19
20
|
isValidTransactionId(txId: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Get the transaction body from a serialized transaction
|
|
23
|
+
* @param {string} serializedTx - serialized transaction in hex or base64 format
|
|
24
|
+
* @returns {string} transaction body in hex format
|
|
25
|
+
*/
|
|
26
|
+
getTransactionBody(serializedTx: string): string;
|
|
20
27
|
}
|
|
21
28
|
declare const utils: Utils;
|
|
22
29
|
export default utils;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAUhE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,qBAAa,KAAM,YAAW,SAAS;IACrC,uCAAuC,CACrC,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,aAAa,GACrB,MAAM;IAiCT,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAUtC,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiBjE,kBAAkB;IAElB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IA6BxC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKvC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC,kBAAkB;IAClB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASzC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAS5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;OAIG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;CAOjD;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
|