@bitgo/sdk-coin-flrp 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/flrp.d.ts +68 -6
- package/dist/src/flrp.d.ts.map +1 -1
- package/dist/src/flrp.js +272 -13
- package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ExportInCTxBuilder.js +4 -2
- package/dist/src/lib/atomicTransactionBuilder.d.ts +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +1 -1
- package/dist/src/lib/iface.d.ts +27 -49
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +2 -15
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +0 -3
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +1 -3
- package/dist/src/lib/transaction.d.ts +10 -0
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +113 -4
- package/dist/src/lib/transactionBuilderFactory.d.ts +16 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +60 -62
- package/dist/src/lib/utils.d.ts +11 -11
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +43 -35
- package/dist/test/resources/account.d.ts +2 -0
- package/dist/test/resources/account.d.ts.map +1 -1
- package/dist/test/resources/account.js +3 -1
- package/dist/test/unit/flrp.d.ts +2 -0
- package/dist/test/unit/flrp.d.ts.map +1 -0
- package/dist/test/unit/flrp.js +499 -0
- package/dist/test/unit/lib/utils.js +514 -20
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -4
package/dist/src/lib/utils.js
CHANGED
|
@@ -29,7 +29,6 @@ class Utils {
|
|
|
29
29
|
* @param address - The address to parse
|
|
30
30
|
* @returns Buffer containing the parsed address
|
|
31
31
|
*/
|
|
32
|
-
//TODO: need check and validate this method
|
|
33
32
|
this.parseAddress = (address) => {
|
|
34
33
|
return this.stringToAddress(address);
|
|
35
34
|
};
|
|
@@ -58,6 +57,12 @@ class Utils {
|
|
|
58
57
|
return buffer_1.Buffer.from(bech32_1.bech32.fromWords(bech32_1.bech32.decode(parts[1]).words));
|
|
59
58
|
};
|
|
60
59
|
}
|
|
60
|
+
isValidTransactionId(txId) {
|
|
61
|
+
throw new Error('Method not implemented.');
|
|
62
|
+
}
|
|
63
|
+
isValidSignature(signature) {
|
|
64
|
+
throw new Error('Method not implemented.');
|
|
65
|
+
}
|
|
61
66
|
/**
|
|
62
67
|
* Check if addresses in wallet match UTXO output addresses
|
|
63
68
|
*/
|
|
@@ -78,9 +83,6 @@ class Utils {
|
|
|
78
83
|
}
|
|
79
84
|
return true;
|
|
80
85
|
}
|
|
81
|
-
// Regex patterns
|
|
82
|
-
// export const ADDRESS_REGEX = /^(^P||NodeID)-[a-zA-Z0-9]+$/;
|
|
83
|
-
// export const HEX_REGEX = /^(0x){0,1}([0-9a-f])+$/i;
|
|
84
86
|
isValidAddressRegex(address) {
|
|
85
87
|
return /^(^P||NodeID)-[a-zA-Z0-9]+$/.test(address);
|
|
86
88
|
}
|
|
@@ -188,7 +190,7 @@ class Utils {
|
|
|
188
190
|
verifySignature(network, message, signature, publicKey) {
|
|
189
191
|
try {
|
|
190
192
|
const messageHash = this.sha256(message);
|
|
191
|
-
return secp256k1_1.ecc.verify(
|
|
193
|
+
return secp256k1_1.ecc.verify(messageHash, publicKey, signature);
|
|
192
194
|
}
|
|
193
195
|
catch (e) {
|
|
194
196
|
return false;
|
|
@@ -289,13 +291,6 @@ class Utils {
|
|
|
289
291
|
outputidxBufferToNumber(outputidx) {
|
|
290
292
|
return parseInt(outputidx.toString('hex'), 16).toString();
|
|
291
293
|
}
|
|
292
|
-
// Required by BaseUtils interface but not implemented
|
|
293
|
-
isValidSignature(signature) {
|
|
294
|
-
throw new sdk_core_1.NotImplementedError('isValidSignature not implemented');
|
|
295
|
-
}
|
|
296
|
-
isValidTransactionId(txId) {
|
|
297
|
-
throw new sdk_core_1.NotImplementedError('isValidTransactionId not implemented');
|
|
298
|
-
}
|
|
299
294
|
/**
|
|
300
295
|
* Decodes a base58 string with checksum to a Buffer
|
|
301
296
|
*/
|
|
@@ -331,27 +326,6 @@ class Utils {
|
|
|
331
326
|
const hashSlice = (0, crypto_1.createHash)('sha256').update(buff).digest().slice(28);
|
|
332
327
|
return buffer_1.Buffer.concat([buff, hashSlice]);
|
|
333
328
|
}
|
|
334
|
-
/**
|
|
335
|
-
* Check if tx is for the blockchainId
|
|
336
|
-
*
|
|
337
|
-
* @param {DeprecatedTx} tx
|
|
338
|
-
* @param {string} blockchainId
|
|
339
|
-
* @returns true if tx is for blockchainId
|
|
340
|
-
*/
|
|
341
|
-
// TODO: remove DeprecatedTx usage
|
|
342
|
-
isTransactionOf(tx, blockchainId) {
|
|
343
|
-
// FlareJS equivalent - this would need proper CB58 encoding implementation
|
|
344
|
-
try {
|
|
345
|
-
const txRecord = tx;
|
|
346
|
-
const unsignedTx = txRecord.getUnsignedTx();
|
|
347
|
-
const transaction = unsignedTx.getTransaction();
|
|
348
|
-
const txBlockchainId = transaction.getBlockchainID();
|
|
349
|
-
return buffer_1.Buffer.from(txBlockchainId).toString('hex') === blockchainId;
|
|
350
|
-
}
|
|
351
|
-
catch (error) {
|
|
352
|
-
return false;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
329
|
flareIdString(value) {
|
|
356
330
|
return new flarejs_1.Id(buffer_1.Buffer.from(value, 'hex'));
|
|
357
331
|
}
|
|
@@ -380,11 +354,45 @@ class Utils {
|
|
|
380
354
|
return buffer_1.Buffer.from(recovered);
|
|
381
355
|
}
|
|
382
356
|
catch (error) {
|
|
383
|
-
throw new Error(`Failed to recover signature: ${error}`);
|
|
357
|
+
throw new Error(`Failed to recover signature: ${error.message}`);
|
|
384
358
|
}
|
|
385
359
|
}
|
|
360
|
+
/**
|
|
361
|
+
* Check if tx is for the blockchainId
|
|
362
|
+
*
|
|
363
|
+
* @param {Tx} tx
|
|
364
|
+
* @param {string} blockchainId - blockchain ID in hex format
|
|
365
|
+
* @returns true if tx is for blockchainId
|
|
366
|
+
*/
|
|
367
|
+
isTransactionOf(tx, blockchainId) {
|
|
368
|
+
// Note: getBlockchainId() and BlockchainId.value() return CB58-encoded strings,
|
|
369
|
+
// but we need hex format, so we use toBytes() and convert to hex
|
|
370
|
+
const extractBlockchainId = (txObj) => {
|
|
371
|
+
if (typeof txObj.getTx === 'function') {
|
|
372
|
+
const innerTx = txObj.getTx();
|
|
373
|
+
if (innerTx.baseTx?.BlockchainId?.toBytes) {
|
|
374
|
+
return buffer_1.Buffer.from(innerTx.baseTx.BlockchainId.toBytes()).toString('hex');
|
|
375
|
+
}
|
|
376
|
+
if (innerTx.blockchainId?.toBytes) {
|
|
377
|
+
return buffer_1.Buffer.from(innerTx.blockchainId.toBytes()).toString('hex');
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
if (txObj.tx?.baseTx?.BlockchainId?.toBytes) {
|
|
381
|
+
return buffer_1.Buffer.from(txObj.tx.baseTx.BlockchainId.toBytes()).toString('hex');
|
|
382
|
+
}
|
|
383
|
+
if (txObj.baseTx?.BlockchainId?.toBytes) {
|
|
384
|
+
return buffer_1.Buffer.from(txObj.baseTx.BlockchainId.toBytes()).toString('hex');
|
|
385
|
+
}
|
|
386
|
+
if (txObj.blockchainId?.toBytes) {
|
|
387
|
+
return buffer_1.Buffer.from(txObj.blockchainId.toBytes()).toString('hex');
|
|
388
|
+
}
|
|
389
|
+
return null;
|
|
390
|
+
};
|
|
391
|
+
const txBlockchainId = extractBlockchainId(tx);
|
|
392
|
+
return txBlockchainId === blockchainId;
|
|
393
|
+
}
|
|
386
394
|
}
|
|
387
395
|
exports.Utils = Utils;
|
|
388
396
|
const utils = new Utils();
|
|
389
397
|
exports.default = utils;
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUF1RztBQUN2Ryw4Q0FReUI7QUFFekIsbUNBQWdDO0FBQ2hDLG1DQUFvQztBQUNwQyxnREFBdUM7QUFDdkMsbUNBQWtFO0FBQ2xFLGdEQUF3QjtBQUN4QixtQ0FBZ0M7QUFFaEMsTUFBYSxLQUFLO0lBQWxCO1FBaVFFOztXQUVHO1FBQ0ksb0JBQWUsR0FBRyxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsT0FBZSxFQUFVLEVBQUU7WUFDaEYsK0RBQStEO1lBQy9ELE1BQU0sS0FBSyxHQUFHLGVBQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsK0VBQStFO1lBQy9FLE9BQU8sR0FBRyxNQUFNLElBQUksZUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUF5Q0YsbURBQW1EO1FBRW5EOzs7O1dBSUc7UUFDSCwyQ0FBMkM7UUFDcEMsaUJBQVksR0FBRyxDQUFDLE9BQWUsRUFBVSxFQUFFO1lBQ2hELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUM7UUFFSyxvQkFBZSxHQUFHLENBQUMsT0FBZSxFQUFFLEdBQVksRUFBVSxFQUFFO1lBQ2pFLHVCQUF1QjtZQUN2QixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxlQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUMsQ0FBQztZQUVELG1DQUFtQztZQUNuQyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxPQUFP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Q0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBcFpELHNCQW9aQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmF0dXJlLCBUcmFuc2ZlcmFibGVPdXRwdXQsIFRyYW5zZmVyT3V0cHV0LCBUeXBlU3ltYm9scywgSWQgfSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHtcbiAgQmFzZVV0aWxzLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRYcHJ2LFxuICBpc1ZhbGlkWHB1YixcbiAgTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgRmxhcmVOZXR3b3JrIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBBRERSRVNTX1NFUEFSQVRPUiwgT3V0cHV0LCBEZXByZWNhdGVkVHggfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgYmVjaDMyIH0gZnJvbSAnYmVjaDMyJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3NlcyBpbiB3YWxsZXQgbWF0Y2ggVVRYTyBvdXRwdXQgYWRkcmVzc2VzXG4gICAqL1xuICBwdWJsaWMgaW5jbHVkZUluKHdhbGxldEFkZHJlc3Nlczogc3RyaW5nW10sIG90eG9PdXRwdXRBZGRyZXNzZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHdhbGxldEFkZHJlc3Nlcy5tYXAoKGEpID0+IG90eG9PdXRwdXRBZGRyZXNzZXMuaW5jbHVkZXMoYSkpLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBGbGFyZSBhZGRyZXNzIG9yIGFycmF5IG9mIGFkZHJlc3Nlc1xuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBhZGRyZXNzIC0gYWRkcmVzcyhlcykgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYWRkcmVzc0Fycjogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGFkZHJlc3MpID8gYWRkcmVzcyA6IGFkZHJlc3Muc3BsaXQoJ34nKTtcblxuICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBhZGRyZXNzQXJyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3NSZWdleChhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBSZWdleCBwYXR0ZXJuc1xuICAvLyBleHBvcnQgY29uc3QgQUREUkVTU19SRUdFWCA9IC9eKF5QfHxOb2RlSUQpLVthLXpBLVowLTldKyQvO1xuICAvLyBleHBvcnQgY29uc3QgSEVYX1JFR0VYID0gL14oMHgpezAsMX0oWzAtOWEtZl0pKyQvaTtcblxuICBwcml2YXRlIGlzVmFsaWRBZGRyZXNzUmVnZXgoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKF5QfHxOb2RlSUQpLVthLXpBLVowLTldKyQvLnRlc3QoYWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgYmxvY2sgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhhc2ggLSBibG9jayBJRCB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZEJsb2NrSWQoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbShoYXNoLCAnaGV4Jyk7XG4gICAgICByZXR1cm4gZGVjb2RlZC5sZW5ndGggPT09IDMyO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBwdWJsaWMga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgLSBwdWJsaWMga2V5IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBpc1ZhbGlkUHVibGljS2V5KHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzVmFsaWRYcHViKHB1YikpIHJldHVybiB0cnVlO1xuXG4gICAgbGV0IHB1YkJ1ZjogQnVmZmVyO1xuICAgIGlmIChwdWIubGVuZ3RoID09PSA1MCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHViQnVmID0gQnVmZmVyLmZyb20ocHViLCAnaGV4Jyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHViLmxlbmd0aCAhPT0gNjYgJiYgcHViLmxlbmd0aCAhPT0gMTMwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGZpcnN0Qnl0ZSA9IHB1Yi5zbGljZSgwLCAyKTtcbiAgICAgIGlmIChwdWIubGVuZ3RoID09PSAxMzAgJiYgZmlyc3RCeXRlICE9PSAnMDQnKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAocHViLmxlbmd0aCA9PT0gNjYgJiYgZmlyc3RCeXRlICE9PSAnMDInICYmIGZpcnN0Qnl0ZSAhPT0gJzAzJykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCF0aGlzLmFsbEhleENoYXJzKHB1YikpIHJldHVybiBmYWxzZTtcblxuICAgICAgcHViQnVmID0gQnVmZmVyLmZyb20ocHViLCAnaGV4Jyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGVjYy5pc1BvaW50KHB1YkJ1Zik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIHByaXZhdGUga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgLSBwcml2YXRlIGtleSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZFByaXZhdGVLZXkocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoaXNWYWxpZFhwcnYocHJ2KSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHBydi5sZW5ndGggIT09IDY0ICYmIHBydi5sZW5ndGggIT09IDY2KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHBydi5sZW5ndGggPT09IDY2ICYmIHBydi5zbGljZSg2NCkgIT09ICcwMScpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5hbGxIZXhDaGFycyhwcnYpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHN0cmluZyBjb250YWlucyBvbmx5IGhleCBjaGFyYWN0ZXJzXG4gICAqL1xuICBhbGxIZXhDaGFycyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXigweCl7MCwxfShbMC05YS1mXSkrJC9pLnRlc3Qoc3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2lnbmF0dXJlIHVzaW5nIHRoZSBGbGFyZSBuZXR3b3JrIHBhcmFtZXRlcnNcbiAgICogUmV0dXJucyBhIDY1LWJ5dGUgc2lnbmF0dXJlICg2NCBieXRlcyBzaWduYXR1cmUgKyAxIGJ5dGUgcmVjb3ZlcnkgcGFyYW1ldGVyKVxuICAgKi9cbiAgY3JlYXRlU2lnbmF0dXJlKG5ldHdvcms6IEZsYXJlTmV0d29yaywgbWVzc2FnZTogQnVmZmVyLCBwcnY6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgY29uc3QgbWVzc2FnZUhhc2ggPSB0aGlzLnNoYTI1NihtZXNzYWdlKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBlY2Muc2lnbihtZXNzYWdlSGFzaCwgcHJ2KTtcblxuICAgIC8vIEdldCB0aGUgcHVibGljIGtleSBmcm9tIHRoZSBwcml2YXRlIGtleSBmb3IgcmVjb3ZlcnkgcGFyYW1ldGVyIGRldGVybWluYXRpb25cbiAgICBjb25zdCBwdWJsaWNLZXkgPSBlY2MucG9pbnRGcm9tU2NhbGFyKHBydiwgdHJ1ZSk7XG4gICAgaWYgKCFwdWJsaWNLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGRlcml2ZSBwdWJsaWMga2V5IGZyb20gcHJpdmF0ZSBrZXknKTtcbiAgICB9XG5cbiAgICAvLyBUcnkgcmVjb3Zlcnkgd2l0aCBwYXJhbSAwIGFuZCAxIHRvIGZpbmQgdGhlIGNvcnJlY3Qgb25lXG4gICAgbGV0IHJlY292ZXJ5UGFyYW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDE7IGkrKykge1xuICAgICAgY29uc3QgcmVjb3ZlcmVkID0gZWNjLnJlY292ZXJQdWJsaWNLZXkobWVzc2FnZUhhc2gsIHNpZ25hdHVyZSwgaSwgdHJ1ZSk7XG4gICAgICBpZiAocmVjb3ZlcmVkICYmIEJ1ZmZlci5mcm9tKHJlY292ZXJlZCkuZXF1YWxzKEJ1ZmZlci5mcm9tKHB1YmxpY0tleSkpKSB7XG4gICAgICAgIHJlY292ZXJ5UGFyYW0gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBlbmQgcmVjb3ZlcnkgcGFyYW1ldGVyIHRvIGNyZWF0ZSA2NS1ieXRlIHNpZ25hdHVyZVxuICAgIGNvbnN0IHNpZ1dpdGhSZWNvdmVyeSA9IEJ1ZmZlci5hbGxvYyg2NSk7XG4gICAgQnVmZmVyLmZyb20oc2lnbmF0dXJlKS5jb3B5KHNpZ1dpdGhSZWNvdmVyeSwgMCk7XG4gICAgc2lnV2l0aFJlY292ZXJ5WzY0XSA9IHJlY292ZXJ5UGFyYW07XG5cbiAgICByZXR1cm4gc2lnV2l0aFJlY292ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGEgc2lnbmF0dXJlXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUobmV0d29yazogRmxhcmVOZXR3b3JrLCBtZXNzYWdlOiBCdWZmZXIsIHNpZ25hdHVyZTogQnVmZmVyLCBwdWJsaWNLZXk6IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXNzYWdlSGFzaCA9IHRoaXMuc2hhMjU2KG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGVjYy52ZXJpZnkoc2lnbmF0dXJlLCBtZXNzYWdlSGFzaCwgcHVibGljS2V5KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgc2lnbmF0dXJlIG9iamVjdFxuICAgKi9cbiAgY3JlYXRlTmV3U2lnKHNpZ0hleDogc3RyaW5nKTogU2lnbmF0dXJlIHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShzaWdIZXgucGFkU3RhcnQoMTMwLCAnMCcpLCAnaGV4Jyk7XG4gICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoYnVmZmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtcHR5IHNpZ25hdHVyZSB3aXRoIGVtYmVkZGVkIGFkZHJlc3MgZm9yIHNpZ25hdHVyZSBzbG90IGlkZW50aWZpY2F0aW9uLlxuICAgKiBUaGUgYWRkcmVzcyBpcyBlbWJlZGRlZCBhdCBwb3NpdGlvbiA5MCAoYWZ0ZXIgdGhlIGZpcnN0IDQ1IHplcm8gYnl0ZXMpLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgc2lnbmluZyBsb2dpYyB0byBkZXRlcm1pbmUgd2hpY2ggc2xvdCBiZWxvbmdzIHRvIHdoaWNoIGFkZHJlc3MuXG4gICAqIEBwYXJhbSBhZGRyZXNzSGV4IFRoZSAyMC1ieXRlIGFkZHJlc3MgaW4gaGV4IGZvcm1hdCAoNDAgY2hhcnMsIHdpdGhvdXQgMHggcHJlZml4KVxuICAgKi9cbiAgY3JlYXRlRW1wdHlTaWdXaXRoQWRkcmVzcyhhZGRyZXNzSGV4OiBzdHJpbmcpOiBTaWduYXR1cmUge1xuICAgIC8vIEZpcnN0IDQ1IGJ5dGVzICg5MCBoZXggY2hhcnMpIGFyZSB6ZXJvcywgZm9sbG93ZWQgYnkgMjAtYnl0ZSBhZGRyZXNzICg0MCBoZXggY2hhcnMpXG4gICAgY29uc3QgY2xlYW5BZGRyID0gdGhpcy5yZW1vdmVIZXhQcmVmaXgoYWRkcmVzc0hleCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBzaWdIZXggPSAnMCcucmVwZWF0KDkwKSArIGNsZWFuQWRkci5wYWRTdGFydCg0MCwgJzAnKTtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShzaWdIZXgsICdoZXgnKTtcbiAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShidWZmZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBlbWJlZGRlZCBhZGRyZXNzIGZyb20gYW4gZW1wdHkgc2lnbmF0dXJlLlxuICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIGhleCBzdHJpbmcgKDQwIGNoYXJzKSBvciBlbXB0eSBzdHJpbmcgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgZ2V0QWRkcmVzc0Zyb21FbXB0eVNpZyhzaWc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xlYW5TaWcgPSB0aGlzLnJlbW92ZUhleFByZWZpeChzaWcpO1xuICAgIGlmIChjbGVhblNpZy5sZW5ndGggPj0gMTMwKSB7XG4gICAgICAvLyBBZGRyZXNzIGlzIGF0IHBvc2l0aW9uIDkwLTEzMCAobGFzdCA0MCBoZXggY2hhcnMgPSAyMCBieXRlcylcbiAgICAgIHJldHVybiBjbGVhblNpZy5zdWJzdHJpbmcoOTAsIDEzMCkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIFNIQTI1NiBoYXNoXG4gICAqL1xuICBzaGEyNTYoYnVmOiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGJ1ZikuZGlnZXN0KCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHJhdyB0cmFuc2FjdGlvbiBmb3JtYXRcbiAgICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5hbGxIZXhDaGFycyhyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBub3QgaGV4IHN0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgb3V0cHV0IGlzIFRyYW5zZmVyYWJsZU91dHB1dCB0eXBlXG4gICAqL1xuICBpc1RyYW5zZmVyYWJsZU91dHB1dChvdXRwdXQ6IE91dHB1dCk6IG91dHB1dCBpcyBUcmFuc2ZlcmFibGVPdXRwdXQge1xuICAgIHJldHVybiBvdXRwdXQ/Ll90eXBlID09PSBUeXBlU3ltYm9scy5UcmFuc2ZlcmFibGVPdXRwdXQ7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBvdXRwdXRzIHRvIGVudHJ5IGZvcm1hdFxuICAgKi9cbiAgbWFwT3V0cHV0VG9FbnRyeShuZXR3b3JrOiBGbGFyZU5ldHdvcmspOiAoT3V0cHV0KSA9PiBFbnRyeSB7XG4gICAgcmV0dXJuIChvdXRwdXQ6IE91dHB1dCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNUcmFuc2ZlcmFibGVPdXRwdXQob3V0cHV0KSkge1xuICAgICAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBvdXRwdXQuYW1vdW50KCk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSAob3V0cHV0Lm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dClcbiAgICAgICAgICAuZ2V0T3duZXJzKClcbiAgICAgICAgICAubWFwKChhKSA9PiB0aGlzLmFkZHJlc3NUb1N0cmluZyhuZXR3b3JrLmhycCwgbmV0d29yay5hbGlhcywgQnVmZmVyLmZyb20oYSkpKVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAuam9pbihBRERSRVNTX1NFUEFSQVRPUik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IG91dHB1dEFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3V0cHV0IHR5cGUnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgMHggcHJlZml4IGZyb20gaGV4IHN0cmluZ1xuICAgKi9cbiAgcmVtb3ZlSGV4UHJlZml4KGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaGV4LnN0YXJ0c1dpdGgoJzB4JykgPyBoZXguc3Vic3RyaW5nKDIpIDogaGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIG91dHB1dCBpbmRleCB0byBidWZmZXJcbiAgICovXG4gIG91dHB1dGlkeE51bWJlclRvQnVmZmVyKG91dHB1dGlkeDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oTnVtYmVyKG91dHB1dGlkeCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICcwJyksICdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBvdXRwdXQgaW5kZXggYnVmZmVyIHRvIG51bWJlciBzdHJpbmdcbiAgICovXG4gIG91dHB1dGlkeEJ1ZmZlclRvTnVtYmVyKG91dHB1dGlkeDogQnVmZmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGFyc2VJbnQob3V0cHV0aWR4LnRvU3RyaW5nKCdoZXgnKSwgMTYpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvLyBSZXF1aXJlZCBieSBCYXNlVXRpbHMgaW50ZXJmYWNlIGJ1dCBub3QgaW1wbGVtZW50ZWRcbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCdpc1ZhbGlkU2lnbmF0dXJlIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ2lzVmFsaWRUcmFuc2FjdGlvbklkIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY29udmVydCBhZGRyZXNzIGNvbXBvbmVudHMgdG8gc3RyaW5nXG4gICAqL1xuICBwdWJsaWMgYWRkcmVzc1RvU3RyaW5nID0gKGhycDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZywgYWRkcmVzczogQnVmZmVyKTogc3RyaW5nID0+IHtcbiAgICAvLyBDb252ZXJ0IHRoZSBhZGRyZXNzIGJ5dGVzIHRvIDUtYml0IHdvcmRzIGZvciBiZWNoMzIgZW5jb2RpbmdcbiAgICBjb25zdCB3b3JkcyA9IGJlY2gzMi50b1dvcmRzKGFkZHJlc3MpO1xuICAgIC8vIENyZWF0ZSB0aGUgZnVsbCBiZWNoMzIgYWRkcmVzcyB3aXRoIGZvcm1hdDogUC17aHJwfTF7YmVjaDMyX2VuY29kZWRfYWRkcmVzc31cbiAgICByZXR1cm4gYCR7cHJlZml4fS0ke2JlY2gzMi5lbmNvZGUoaHJwLCB3b3Jkcyl9YDtcbiAgfTtcblxuICAvKipcbiAgICogRGVjb2RlcyBhIGJhc2U1OCBzdHJpbmcgd2l0aCBjaGVja3N1bSB0byBhIEJ1ZmZlclxuICAgKi9cbiAgcHVibGljIGNiNThEZWNvZGUoc3RyOiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIGNvbnN0IGRlY29kZWQgPSBiczU4LmRlY29kZShzdHIpO1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUNoZWNrc3VtKEJ1ZmZlci5mcm9tKGRlY29kZWQpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoZWNrc3VtJyk7XG4gICAgfVxuICAgIHJldHVybiBCdWZmZXIuZnJvbShkZWNvZGVkLnNsaWNlKDAsIGRlY29kZWQubGVuZ3RoIC0gNCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIGNoZWNrc3VtIG9uIGEgQnVmZmVyIGFuZCByZXR1cm5zIHRydWUgaWYgdmFsaWQsIGZhbHNlIGlmIG5vdFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNoZWNrc3VtKGJ1ZmY6IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc2hTbGljZSA9IGJ1ZmYuc2xpY2UoYnVmZi5sZW5ndGggLSA0KTtcbiAgICBjb25zdCBjYWxjdWxhdGVkSGFzaFNsaWNlID0gY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAgIC51cGRhdGUoYnVmZi5zbGljZSgwLCBidWZmLmxlbmd0aCAtIDQpKVxuICAgICAgLmRpZ2VzdCgpXG4gICAgICAuc2xpY2UoMjgpO1xuICAgIHJldHVybiBoYXNoU2xpY2UudG9TdHJpbmcoJ2hleCcpID09PSBjYWxjdWxhdGVkSGFzaFNsaWNlLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGVzIGEgQnVmZmVyIGFzIGEgYmFzZTU4IHN0cmluZyB3aXRoIGNoZWNrc3VtXG4gICAqL1xuICBwdWJsaWMgY2I1OEVuY29kZShieXRlczogQnVmZmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB3aXRoQ2hlY2tzdW0gPSB0aGlzLmFkZENoZWNrc3VtKGJ5dGVzKTtcbiAgICByZXR1cm4gYnM1OC5lbmNvZGUod2l0aENoZWNrc3VtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hlY2tzdW0gdG8gYSBCdWZmZXIgYW5kIHJldHVybnMgdGhlIGNvbmNhdGVuYXRlZCByZXN1bHRcbiAgICovXG4gIHByaXZhdGUgYWRkQ2hlY2tzdW0oYnVmZjogQnVmZmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBoYXNoU2xpY2UgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYnVmZikuZGlnZXN0KCkuc2xpY2UoMjgpO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWZmLCBoYXNoU2xpY2VdKTtcbiAgfVxuXG4gIC8vIEluIHV0aWxzLnRzLCBhZGQgdGhpcyBtZXRob2QgdG8gdGhlIFV0aWxzIGNsYXNzOlxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBhZGRyZXNzIHN0cmluZyBpbnRvIGEgQnVmZmVyXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIGFkZHJlc3MgdG8gcGFyc2VcbiAgICogQHJldHVybnMgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBhZGRyZXNzXG4gICAqL1xuICAvL1RPRE86IG5lZWQgY2hlY2sgYW5kIHZhbGlkYXRlIHRoaXMgbWV0aG9kXG4gIHB1YmxpYyBwYXJzZUFkZHJlc3MgPSAoYWRkcmVzczogc3RyaW5nKTogQnVmZmVyID0+IHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmdUb0FkZHJlc3MoYWRkcmVzcyk7XG4gIH07XG5cbiAgcHVibGljIHN0cmluZ1RvQWRkcmVzcyA9IChhZGRyZXNzOiBzdHJpbmcsIGhycD86IHN0cmluZyk6IEJ1ZmZlciA9PiB7XG4gICAgLy8gSGFuZGxlIGhleCBhZGRyZXNzZXNcbiAgICBpZiAoYWRkcmVzcy5zdGFydHNXaXRoKCcweCcpKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oYWRkcmVzcy5zbGljZSgyKSwgJ2hleCcpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSByYXcgaGV4IHdpdGhvdXQgMHggcHJlZml4XG4gICAgaWYgKC9eWzAtOWEtZkEtRl17NDB9JC8udGVzdChhZGRyZXNzKSkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFkZHJlc3MsICdoZXgnKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgQmVjaDMyIGFkZHJlc3Nlc1xuICAgIGNvbnN0IHBhcnRzID0gYWRkcmVzcy50cmltKCkuc3BsaXQoJy0nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciAtIFZhbGlkIGFkZHJlc3Mgc2hvdWxkIGluY2x1ZGUgLScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNwbGl0ID0gcGFydHNbMV0ubGFzdEluZGV4T2YoJzEnKTtcbiAgICBpZiAoc3BsaXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIC0gVmFsaWQgYmVjaDMyIGFkZHJlc3MgbXVzdCBpbmNsdWRlIHNlcGFyYXRvciAoMSknKTtcbiAgICB9XG5cbiAgICBjb25zdCBodW1hblJlYWRhYmxlUGFydCA9IHBhcnRzWzFdLnNsaWNlKDAsIHNwbGl0KTtcbiAgICBpZiAoaHVtYW5SZWFkYWJsZVBhcnQgIT09ICdmbGFyZScgJiYgaHVtYW5SZWFkYWJsZVBhcnQgIT09ICdjb3N0d28nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIC0gSW52YWxpZCBIUlAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYmVjaDMyLmZyb21Xb3JkcyhiZWNoMzIuZGVjb2RlKHBhcnRzWzFdKS53b3JkcykpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0eCBpcyBmb3IgdGhlIGJsb2NrY2hhaW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge0RlcHJlY2F0ZWRUeH0gdHhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsb2NrY2hhaW5JZFxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHR4IGlzIGZvciBibG9ja2NoYWluSWRcbiAgICovXG4gIC8vIFRPRE86IHJlbW92ZSBEZXByZWNhdGVkVHggdXNhZ2VcbiAgaXNUcmFuc2FjdGlvbk9mKHR4OiBEZXByZWNhdGVkVHgsIGJsb2NrY2hhaW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gRmxhcmVKUyBlcXVpdmFsZW50IC0gdGhpcyB3b3VsZCBuZWVkIHByb3BlciBDQjU4IGVuY29kaW5nIGltcGxlbWVudGF0aW9uXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4UmVjb3JkID0gdHggYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPSAodHhSZWNvcmQuZ2V0VW5zaWduZWRUeCBhcyAoKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikoKTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gKHVuc2lnbmVkVHguZ2V0VHJhbnNhY3Rpb24gYXMgKCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKCk7XG4gICAgICBjb25zdCB0eEJsb2NrY2hhaW5JZCA9ICh0cmFuc2FjdGlvbi5nZXRCbG9ja2NoYWluSUQgYXMgKCkgPT4gdW5rbm93bikoKTtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0eEJsb2NrY2hhaW5JZCBhcyBzdHJpbmcpLnRvU3RyaW5nKCdoZXgnKSA9PT0gYmxvY2tjaGFpbklkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZmxhcmVJZFN0cmluZyh2YWx1ZTogc3RyaW5nKTogSWQge1xuICAgIHJldHVybiBuZXcgSWQoQnVmZmVyLmZyb20odmFsdWUsICdoZXgnKSk7XG4gIH1cblxuICAvKipcbiAgICogRmxhcmVKUyB3cmFwcGVyIHRvIHJlY292ZXIgc2lnbmF0dXJlXG4gICAqIEBwYXJhbSBuZXR3b3JrXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqIEBwYXJhbSBzaWduYXR1cmVcbiAgICogQHJldHVybiByZWNvdmVyZWQgcHVibGljIGtleVxuICAgKi9cbiAgcmVjb3ZlcnlTaWduYXR1cmUobmV0d29yazogRmxhcmVOZXR3b3JrLCBtZXNzYWdlOiBCdWZmZXIsIHNpZ25hdHVyZTogQnVmZmVyKTogQnVmZmVyIHtcbiAgICB0cnkge1xuICAgICAgLy8gSGFzaCB0aGUgbWVzc2FnZSBmaXJzdCAtIG11c3QgbWF0Y2ggdGhlIGhhc2ggdXNlZCBpbiBzaWduaW5nXG4gICAgICBjb25zdCBtZXNzYWdlSGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKTtcblxuICAgICAgLy8gRXh0cmFjdCByZWNvdmVyeSBwYXJhbWV0ZXIgYW5kIHNpZ25hdHVyZVxuICAgICAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDY1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgbGVuZ3RoIC0gZXhwZWN0ZWQgNjUgYnl0ZXMgKDY0IGJ5dGVzIHNpZ25hdHVyZSArIDEgYnl0ZSByZWNvdmVyeSknKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjb3ZlcnlQYXJhbSA9IHNpZ25hdHVyZVs2NF07XG4gICAgICBjb25zdCBzaWdPbmx5ID0gc2lnbmF0dXJlLnNsaWNlKDAsIDY0KTtcblxuICAgICAgLy8gUmVjb3ZlciBwdWJsaWMga2V5IHVzaW5nIHRoZSBwcm92aWRlZCByZWNvdmVyeSBwYXJhbWV0ZXJcbiAgICAgIGNvbnN0IHJlY292ZXJlZCA9IGVjYy5yZWNvdmVyUHVibGljS2V5KG1lc3NhZ2VIYXNoLCBzaWdPbmx5LCByZWNvdmVyeVBhcmFtLCB0cnVlKTtcbiAgICAgIGlmICghcmVjb3ZlcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlY292ZXIgcHVibGljIGtleScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVjb3ZlcmVkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmVjb3ZlciBzaWduYXR1cmU6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUF1RztBQUN2Ryw4Q0FPeUI7QUFFekIsbUNBQWdDO0FBQ2hDLG1DQUFvQztBQUNwQyxnREFBdUM7QUFDdkMsbUNBQXdEO0FBQ3hELGdEQUF3QjtBQUN4QixtQ0FBZ0M7QUFFaEMsTUFBYSxLQUFLO0lBQWxCO1FBMFBFOztXQUVHO1FBQ0ksb0JBQWUsR0FBRyxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsT0FBZSxFQUFVLEVBQUU7WUFDaEYsK0RBQStEO1lBQy9ELE1BQU0sS0FBSyxHQUFHLGVBQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsK0VBQStFO1lBQy9FLE9BQU8sR0FBRyxNQUFNLElBQUksZUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUF5Q0YsbURBQW1EO1FBRW5EOzs7O1dBSUc7UUFDSSxpQkFBWSxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUU7WUFDaEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztRQUVLLG9CQUFlLEdBQUcsQ0FBQyxPQUFlLEVBQUUsR0FBWSxFQUFVLEVBQUU7WUFDakUsdUJBQXVCO1lBQ3ZCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLGVBQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sZUFBTSxDQUFDLElB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LENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JFLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQzVDLE9BQU8sZUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sZUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNoQyxPQUFPLGVBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxPQUFPLGNBQWMsS0FBSyxZQUFZLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBOVpELHNCQThaQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmF0dXJlLCBUcmFuc2ZlcmFibGVPdXRwdXQsIFRyYW5zZmVyT3V0cHV0LCBUeXBlU3ltYm9scywgSWQgfSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHtcbiAgQmFzZVV0aWxzLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRYcHJ2LFxuICBpc1ZhbGlkWHB1YixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgRmxhcmVOZXR3b3JrIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBBRERSRVNTX1NFUEFSQVRPUiwgT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBiZWNoMzIgfSBmcm9tICdiZWNoMzInO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgYWRkcmVzc2VzIGluIHdhbGxldCBtYXRjaCBVVFhPIG91dHB1dCBhZGRyZXNzZXNcbiAgICovXG4gIHB1YmxpYyBpbmNsdWRlSW4od2FsbGV0QWRkcmVzc2VzOiBzdHJpbmdbXSwgb3R4b091dHB1dEFkZHJlc3Nlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2FsbGV0QWRkcmVzc2VzLm1hcCgoYSkgPT4gb3R4b091dHB1dEFkZHJlc3Nlcy5pbmNsdWRlcyhhKSkucmVkdWNlKChhLCBiKSA9PiBhICYmIGIsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIEZsYXJlIGFkZHJlc3Mgb3IgYXJyYXkgb2YgYWRkcmVzc2VzXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IGFkZHJlc3MgLSBhZGRyZXNzKGVzKSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBhZGRyZXNzQXJyOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoYWRkcmVzcykgPyBhZGRyZXNzIDogYWRkcmVzcy5zcGxpdCgnficpO1xuXG4gICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGFkZHJlc3NBcnIpIHtcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzc1JlZ2V4KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZEFkZHJlc3NSZWdleChhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14oXlB8fE5vZGVJRCktW2EtekEtWjAtOV0rJC8udGVzdChhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBibG9jayBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGFzaCAtIGJsb2NrIElEIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IEJ1ZmZlci5mcm9tKGhhc2gsICdoZXgnKTtcbiAgICAgIHJldHVybiBkZWNvZGVkLmxlbmd0aCA9PT0gMzI7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIHB1YmxpYyBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1YiAtIHB1YmxpYyBrZXkgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGlzVmFsaWRQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoaXNWYWxpZFhwdWIocHViKSkgcmV0dXJuIHRydWU7XG5cbiAgICBsZXQgcHViQnVmOiBCdWZmZXI7XG4gICAgaWYgKHB1Yi5sZW5ndGggPT09IDUwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwdWJCdWYgPSBCdWZmZXIuZnJvbShwdWIsICdoZXgnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwdWIubGVuZ3RoICE9PSA2NiAmJiBwdWIubGVuZ3RoICE9PSAxMzApIHJldHVybiBmYWxzZTtcblxuICAgICAgY29uc3QgZmlyc3RCeXRlID0gcHViLnNsaWNlKDAsIDIpO1xuICAgICAgaWYgKHB1Yi5sZW5ndGggPT09IDEzMCAmJiBmaXJzdEJ5dGUgIT09ICcwNCcpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChwdWIubGVuZ3RoID09PSA2NiAmJiBmaXJzdEJ5dGUgIT09ICcwMicgJiYgZmlyc3RCeXRlICE9PSAnMDMnKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIXRoaXMuYWxsSGV4Q2hhcnMocHViKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBwdWJCdWYgPSBCdWZmZXIuZnJvbShwdWIsICdoZXgnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgZWNjLmlzUG9pbnQocHViQnVmKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBydiAtIHByaXZhdGUga2V5IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBpc1ZhbGlkUHJpdmF0ZUtleShwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChpc1ZhbGlkWHBydihwcnYpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAocHJ2Lmxlbmd0aCAhPT0gNjQgJiYgcHJ2Lmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJ2Lmxlbmd0aCA9PT0gNjYgJiYgcHJ2LnNsaWNlKDY0KSAhPT0gJzAxJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmFsbEhleENoYXJzKHBydik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgc3RyaW5nIGNvbnRhaW5zIG9ubHkgaGV4IGNoYXJhY3RlcnNcbiAgICovXG4gIGFsbEhleENoYXJzKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKDB4KXswLDF9KFswLTlhLWZdKSskL2kudGVzdChzdHIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzaWduYXR1cmUgdXNpbmcgdGhlIEZsYXJlIG5ldHdvcmsgcGFyYW1ldGVyc1xuICAgKiBSZXR1cm5zIGEgNjUtYnl0ZSBzaWduYXR1cmUgKDY0IGJ5dGVzIHNpZ25hdHVyZSArIDEgYnl0ZSByZWNvdmVyeSBwYXJhbWV0ZXIpXG4gICAqL1xuICBjcmVhdGVTaWduYXR1cmUobmV0d29yazogRmxhcmVOZXR3b3JrLCBtZXNzYWdlOiBCdWZmZXIsIHBydjogQnVmZmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBtZXNzYWdlSGFzaCA9IHRoaXMuc2hhMjU2KG1lc3NhZ2UpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGVjYy5zaWduKG1lc3NhZ2VIYXNoLCBwcnYpO1xuXG4gICAgLy8gR2V0IHRoZSBwdWJsaWMga2V5IGZyb20gdGhlIHByaXZhdGUga2V5IGZvciByZWNvdmVyeSBwYXJhbWV0ZXIgZGV0ZXJtaW5hdGlvblxuICAgIGNvbnN0IHB1YmxpY0tleSA9IGVjYy5wb2ludEZyb21TY2FsYXIocHJ2LCB0cnVlKTtcbiAgICBpZiAoIXB1YmxpY0tleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGVyaXZlIHB1YmxpYyBrZXkgZnJvbSBwcml2YXRlIGtleScpO1xuICAgIH1cblxuICAgIC8vIFRyeSByZWNvdmVyeSB3aXRoIHBhcmFtIDAgYW5kIDEgdG8gZmluZCB0aGUgY29ycmVjdCBvbmVcbiAgICBsZXQgcmVjb3ZlcnlQYXJhbSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTsgaSsrKSB7XG4gICAgICBjb25zdCByZWNvdmVyZWQgPSBlY2MucmVjb3ZlclB1YmxpY0tleShtZXNzYWdlSGFzaCwgc2lnbmF0dXJlLCBpLCB0cnVlKTtcbiAgICAgIGlmIChyZWNvdmVyZWQgJiYgQnVmZmVyLmZyb20ocmVjb3ZlcmVkKS5lcXVhbHMoQnVmZmVyLmZyb20ocHVibGljS2V5KSkpIHtcbiAgICAgICAgcmVjb3ZlcnlQYXJhbSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGVuZCByZWNvdmVyeSBwYXJhbWV0ZXIgdG8gY3JlYXRlIDY1LWJ5dGUgc2lnbmF0dXJlXG4gICAgY29uc3Qgc2lnV2l0aFJlY292ZXJ5ID0gQnVmZmVyLmFsbG9jKDY1KTtcbiAgICBCdWZmZXIuZnJvbShzaWduYXR1cmUpLmNvcHkoc2lnV2l0aFJlY292ZXJ5LCAwKTtcbiAgICBzaWdXaXRoUmVjb3ZlcnlbNjRdID0gcmVjb3ZlcnlQYXJhbTtcblxuICAgIHJldHVybiBzaWdXaXRoUmVjb3Zlcnk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgYSBzaWduYXR1cmVcbiAgICovXG4gIHZlcmlmeVNpZ25hdHVyZShuZXR3b3JrOiBGbGFyZU5ldHdvcmssIG1lc3NhZ2U6IEJ1ZmZlciwgc2lnbmF0dXJlOiBCdWZmZXIsIHB1YmxpY0tleTogQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gdGhpcy5zaGEyNTYobWVzc2FnZSk7XG4gICAgICByZXR1cm4gZWNjLnZlcmlmeShtZXNzYWdlSGFzaCwgcHVibGljS2V5LCBzaWduYXR1cmUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBzaWduYXR1cmUgb2JqZWN0XG4gICAqL1xuICBjcmVhdGVOZXdTaWcoc2lnSGV4OiBzdHJpbmcpOiBTaWduYXR1cmUge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNpZ0hleC5wYWRTdGFydCgxMzAsICcwJyksICdoZXgnKTtcbiAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShidWZmZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1wdHkgc2lnbmF0dXJlIHdpdGggZW1iZWRkZWQgYWRkcmVzcyBmb3Igc2lnbmF0dXJlIHNsb3QgaWRlbnRpZmljYXRpb24uXG4gICAqIFRoZSBhZGRyZXNzIGlzIGVtYmVkZGVkIGF0IHBvc2l0aW9uIDkwIChhZnRlciB0aGUgZmlyc3QgNDUgemVybyBieXRlcykuXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBzaWduaW5nIGxvZ2ljIHRvIGRldGVybWluZSB3aGljaCBzbG90IGJlbG9uZ3MgdG8gd2hpY2ggYWRkcmVzcy5cbiAgICogQHBhcmFtIGFkZHJlc3NIZXggVGhlIDIwLWJ5dGUgYWRkcmVzcyBpbiBoZXggZm9ybWF0ICg0MCBjaGFycywgd2l0aG91dCAweCBwcmVmaXgpXG4gICAqL1xuICBjcmVhdGVFbXB0eVNpZ1dpdGhBZGRyZXNzKGFkZHJlc3NIZXg6IHN0cmluZyk6IFNpZ25hdHVyZSB7XG4gICAgLy8gRmlyc3QgNDUgYnl0ZXMgKDkwIGhleCBjaGFycykgYXJlIHplcm9zLCBmb2xsb3dlZCBieSAyMC1ieXRlIGFkZHJlc3MgKDQwIGhleCBjaGFycylcbiAgICBjb25zdCBjbGVhbkFkZHIgPSB0aGlzLnJlbW92ZUhleFByZWZpeChhZGRyZXNzSGV4KS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHNpZ0hleCA9ICcwJy5yZXBlYXQoOTApICsgY2xlYW5BZGRyLnBhZFN0YXJ0KDQwLCAnMCcpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNpZ0hleCwgJ2hleCcpO1xuICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKGJ1ZmZlcik7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGVtYmVkZGVkIGFkZHJlc3MgZnJvbSBhbiBlbXB0eSBzaWduYXR1cmUuXG4gICAqIFJldHVybnMgdGhlIGFkZHJlc3MgaGV4IHN0cmluZyAoNDAgY2hhcnMpIG9yIGVtcHR5IHN0cmluZyBpZiBub3QgZm91bmQuXG4gICAqL1xuICBnZXRBZGRyZXNzRnJvbUVtcHR5U2lnKHNpZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGVhblNpZyA9IHRoaXMucmVtb3ZlSGV4UHJlZml4KHNpZyk7XG4gICAgaWYgKGNsZWFuU2lnLmxlbmd0aCA+PSAxMzApIHtcbiAgICAgIC8vIEFkZHJlc3MgaXMgYXQgcG9zaXRpb24gOTAtMTMwIChsYXN0IDQwIGhleCBjaGFycyA9IDIwIGJ5dGVzKVxuICAgICAgcmV0dXJuIGNsZWFuU2lnLnN1YnN0cmluZyg5MCwgMTMwKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgU0hBMjU2IGhhc2hcbiAgICovXG4gIHNoYTI1NihidWY6IFVpbnQ4QXJyYXkpOiBCdWZmZXIge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYnVmKS5kaWdlc3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgcmF3IHRyYW5zYWN0aW9uIGZvcm1hdFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdSYXcgdHJhbnNhY3Rpb24gaXMgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFsbEhleENoYXJzKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIG5vdCBoZXggc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBvdXRwdXQgaXMgVHJhbnNmZXJhYmxlT3V0cHV0IHR5cGVcbiAgICovXG4gIGlzVHJhbnNmZXJhYmxlT3V0cHV0KG91dHB1dDogT3V0cHV0KTogb3V0cHV0IGlzIFRyYW5zZmVyYWJsZU91dHB1dCB7XG4gICAgcmV0dXJuIG91dHB1dD8uX3R5cGUgPT09IFR5cGVTeW1ib2xzLlRyYW5zZmVyYWJsZU91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIG91dHB1dHMgdG8gZW50cnkgZm9ybWF0XG4gICAqL1xuICBtYXBPdXRwdXRUb0VudHJ5KG5ldHdvcms6IEZsYXJlTmV0d29yayk6IChPdXRwdXQpID0+IEVudHJ5IHtcbiAgICByZXR1cm4gKG91dHB1dDogT3V0cHV0KSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1RyYW5zZmVyYWJsZU91dHB1dChvdXRwdXQpKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IG91dHB1dC5hbW91bnQoKTtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IChvdXRwdXQub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0KVxuICAgICAgICAgIC5nZXRPd25lcnMoKVxuICAgICAgICAgIC5tYXAoKGEpID0+IHRoaXMuYWRkcmVzc1RvU3RyaW5nKG5ldHdvcmsuaHJwLCBuZXR3b3JrLmFsaWFzLCBCdWZmZXIuZnJvbShhKSkpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5qb2luKEFERFJFU1NfU0VQQVJBVE9SKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogb3V0cHV0QW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvdXRwdXQgdHlwZScpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyAweCBwcmVmaXggZnJvbSBoZXggc3RyaW5nXG4gICAqL1xuICByZW1vdmVIZXhQcmVmaXgoaGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBoZXguc3RhcnRzV2l0aCgnMHgnKSA/IGhleC5zdWJzdHJpbmcoMikgOiBoZXg7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgb3V0cHV0IGluZGV4IHRvIGJ1ZmZlclxuICAgKi9cbiAgb3V0cHV0aWR4TnVtYmVyVG9CdWZmZXIob3V0cHV0aWR4OiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShOdW1iZXIob3V0cHV0aWR4KS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgJzAnKSwgJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIG91dHB1dCBpbmRleCBidWZmZXIgdG8gbnVtYmVyIHN0cmluZ1xuICAgKi9cbiAgb3V0cHV0aWR4QnVmZmVyVG9OdW1iZXIob3V0cHV0aWR4OiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXJzZUludChvdXRwdXRpZHgudG9TdHJpbmcoJ2hleCcpLCAxNikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGNvbnZlcnQgYWRkcmVzcyBjb21wb25lbnRzIHRvIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIGFkZHJlc3NUb1N0cmluZyA9IChocnA6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIGFkZHJlc3M6IEJ1ZmZlcik6IHN0cmluZyA9PiB7XG4gICAgLy8gQ29udmVydCB0aGUgYWRkcmVzcyBieXRlcyB0byA1LWJpdCB3b3JkcyBmb3IgYmVjaDMyIGVuY29kaW5nXG4gICAgY29uc3Qgd29yZHMgPSBiZWNoMzIudG9Xb3JkcyhhZGRyZXNzKTtcbiAgICAvLyBDcmVhdGUgdGhlIGZ1bGwgYmVjaDMyIGFkZHJlc3Mgd2l0aCBmb3JtYXQ6IFAte2hycH0xe2JlY2gzMl9lbmNvZGVkX2FkZHJlc3N9XG4gICAgcmV0dXJuIGAke3ByZWZpeH0tJHtiZWNoMzIuZW5jb2RlKGhycCwgd29yZHMpfWA7XG4gIH07XG5cbiAgLyoqXG4gICAqIERlY29kZXMgYSBiYXNlNTggc3RyaW5nIHdpdGggY2hlY2tzdW0gdG8gYSBCdWZmZXJcbiAgICovXG4gIHB1YmxpYyBjYjU4RGVjb2RlKHN0cjogc3RyaW5nKTogQnVmZmVyIHtcbiAgICBjb25zdCBkZWNvZGVkID0gYnM1OC5kZWNvZGUoc3RyKTtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVDaGVja3N1bShCdWZmZXIuZnJvbShkZWNvZGVkKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGVja3N1bScpO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGVjb2RlZC5zbGljZSgwLCBkZWNvZGVkLmxlbmd0aCAtIDQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBjaGVja3N1bSBvbiBhIEJ1ZmZlciBhbmQgcmV0dXJucyB0cnVlIGlmIHZhbGlkLCBmYWxzZSBpZiBub3RcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVDaGVja3N1bShidWZmOiBCdWZmZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNoU2xpY2UgPSBidWZmLnNsaWNlKGJ1ZmYubGVuZ3RoIC0gNCk7XG4gICAgY29uc3QgY2FsY3VsYXRlZEhhc2hTbGljZSA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgICAudXBkYXRlKGJ1ZmYuc2xpY2UoMCwgYnVmZi5sZW5ndGggLSA0KSlcbiAgICAgIC5kaWdlc3QoKVxuICAgICAgLnNsaWNlKDI4KTtcbiAgICByZXR1cm4gaGFzaFNsaWNlLnRvU3RyaW5nKCdoZXgnKSA9PT0gY2FsY3VsYXRlZEhhc2hTbGljZS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlcyBhIEJ1ZmZlciBhcyBhIGJhc2U1OCBzdHJpbmcgd2l0aCBjaGVja3N1bVxuICAgKi9cbiAgcHVibGljIGNiNThFbmNvZGUoYnl0ZXM6IEJ1ZmZlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgd2l0aENoZWNrc3VtID0gdGhpcy5hZGRDaGVja3N1bShieXRlcyk7XG4gICAgcmV0dXJuIGJzNTguZW5jb2RlKHdpdGhDaGVja3N1bSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNoZWNrc3VtIHRvIGEgQnVmZmVyIGFuZCByZXR1cm5zIHRoZSBjb25jYXRlbmF0ZWQgcmVzdWx0XG4gICAqL1xuICBwcml2YXRlIGFkZENoZWNrc3VtKGJ1ZmY6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgY29uc3QgaGFzaFNsaWNlID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGJ1ZmYpLmRpZ2VzdCgpLnNsaWNlKDI4KTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYnVmZiwgaGFzaFNsaWNlXSk7XG4gIH1cblxuICAvLyBJbiB1dGlscy50cywgYWRkIHRoaXMgbWV0aG9kIHRvIHRoZSBVdGlscyBjbGFzczpcblxuICAvKipcbiAgICogUGFyc2UgYW4gYWRkcmVzcyBzdHJpbmcgaW50byBhIEJ1ZmZlclxuICAgKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIHBhcnNlXG4gICAqIEByZXR1cm5zIEJ1ZmZlciBjb250YWluaW5nIHRoZSBwYXJzZWQgYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIHBhcnNlQWRkcmVzcyA9IChhZGRyZXNzOiBzdHJpbmcpOiBCdWZmZXIgPT4ge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ1RvQWRkcmVzcyhhZGRyZXNzKTtcbiAgfTtcblxuICBwdWJsaWMgc3RyaW5nVG9BZGRyZXNzID0gKGFkZHJlc3M6IHN0cmluZywgaHJwPzogc3RyaW5nKTogQnVmZmVyID0+IHtcbiAgICAvLyBIYW5kbGUgaGV4IGFkZHJlc3Nlc1xuICAgIGlmIChhZGRyZXNzLnN0YXJ0c1dpdGgoJzB4JykpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhZGRyZXNzLnNsaWNlKDIpLCAnaGV4Jyk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHJhdyBoZXggd2l0aG91dCAweCBwcmVmaXhcbiAgICBpZiAoL15bMC05YS1mQS1GXXs0MH0kLy50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oYWRkcmVzcywgJ2hleCcpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBCZWNoMzIgYWRkcmVzc2VzXG4gICAgY29uc3QgcGFydHMgPSBhZGRyZXNzLnRyaW0oKS5zcGxpdCgnLScpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIC0gVmFsaWQgYWRkcmVzcyBzaG91bGQgaW5jbHVkZSAtJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BsaXQgPSBwYXJ0c1sxXS5sYXN0SW5kZXhPZignMScpO1xuICAgIGlmIChzcGxpdCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgLSBWYWxpZCBiZWNoMzIgYWRkcmVzcyBtdXN0IGluY2x1ZGUgc2VwYXJhdG9yICgxKScpO1xuICAgIH1cblxuICAgIGNvbnN0IGh1bWFuUmVhZGFibGVQYXJ0ID0gcGFydHNbMV0uc2xpY2UoMCwgc3BsaXQpO1xuICAgIGlmIChodW1hblJlYWRhYmxlUGFydCAhPT0gJ2ZsYXJlJyAmJiBodW1hblJlYWRhYmxlUGFydCAhPT0gJ2Nvc3R3bycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgLSBJbnZhbGlkIEhSUCcpO1xuICAgIH1cblxuICAgIHJldHVybiBCdWZmZXIuZnJvbShiZWNoMzIuZnJvbVdvcmRzKGJlY2gzMi5kZWNvZGUocGFydHNbMV0pLndvcmRzKSk7XG4gIH07XG5cbiAgZmxhcmVJZFN0cmluZyh2YWx1ZTogc3RyaW5nKTogSWQge1xuICAgIHJldHVybiBuZXcgSWQoQnVmZmVyLmZyb20odmFsdWUsICdoZXgnKSk7XG4gIH1cblxuICAvKipcbiAgICogRmxhcmVKUyB3cmFwcGVyIHRvIHJlY292ZXIgc2lnbmF0dXJlXG4gICAqIEBwYXJhbSBuZXR3b3JrXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqIEBwYXJhbSBzaWduYXR1cmVcbiAgICogQHJldHVybiByZWNvdmVyZWQgcHVibGljIGtleVxuICAgKi9cbiAgcmVjb3ZlcnlTaWduYXR1cmUobmV0d29yazogRmxhcmVOZXR3b3JrLCBtZXNzYWdlOiBCdWZmZXIsIHNpZ25hdHVyZTogQnVmZmVyKTogQnVmZmVyIHtcbiAgICB0cnkge1xuICAgICAgLy8gSGFzaCB0aGUgbWVzc2FnZSBmaXJzdCAtIG11c3QgbWF0Y2ggdGhlIGhhc2ggdXNlZCBpbiBzaWduaW5nXG4gICAgICBjb25zdCBtZXNzYWdlSGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShtZXNzYWdlKS5kaWdlc3QoKTtcblxuICAgICAgLy8gRXh0cmFjdCByZWNvdmVyeSBwYXJhbWV0ZXIgYW5kIHNpZ25hdHVyZVxuICAgICAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDY1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgbGVuZ3RoIC0gZXhwZWN0ZWQgNjUgYnl0ZXMgKDY0IGJ5dGVzIHNpZ25hdHVyZSArIDEgYnl0ZSByZWNvdmVyeSknKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjb3ZlcnlQYXJhbSA9IHNpZ25hdHVyZVs2NF07XG4gICAgICBjb25zdCBzaWdPbmx5ID0gc2lnbmF0dXJlLnNsaWNlKDAsIDY0KTtcblxuICAgICAgLy8gUmVjb3ZlciBwdWJsaWMga2V5IHVzaW5nIHRoZSBwcm92aWRlZCByZWNvdmVyeSBwYXJhbWV0ZXJcbiAgICAgIGNvbnN0IHJlY292ZXJlZCA9IGVjYy5yZWNvdmVyUHVibGljS2V5KG1lc3NhZ2VIYXNoLCBzaWdPbmx5LCByZWNvdmVyeVBhcmFtLCB0cnVlKTtcbiAgICAgIGlmICghcmVjb3ZlcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlY292ZXIgcHVibGljIGtleScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVjb3ZlcmVkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmVjb3ZlciBzaWduYXR1cmU6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdHggaXMgZm9yIHRoZSBibG9ja2NoYWluSWRcbiAgICpcbiAgICogQHBhcmFtIHtUeH0gdHhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsb2NrY2hhaW5JZCAtIGJsb2NrY2hhaW4gSUQgaW4gaGV4IGZvcm1hdFxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHR4IGlzIGZvciBibG9ja2NoYWluSWRcbiAgICovXG4gIGlzVHJhbnNhY3Rpb25PZih0eDogVHgsIGJsb2NrY2hhaW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gTm90ZTogZ2V0QmxvY2tjaGFpbklkKCkgYW5kIEJsb2NrY2hhaW5JZC52YWx1ZSgpIHJldHVybiBDQjU4LWVuY29kZWQgc3RyaW5ncyxcbiAgICAvLyBidXQgd2UgbmVlZCBoZXggZm9ybWF0LCBzbyB3ZSB1c2UgdG9CeXRlcygpIGFuZCBjb252ZXJ0IHRvIGhleFxuICAgIGNvbnN0IGV4dHJhY3RCbG9ja2NoYWluSWQgPSAodHhPYmo6IGFueSk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0eE9iai5nZXRUeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBpbm5lclR4ID0gdHhPYmouZ2V0VHgoKTtcbiAgICAgICAgaWYgKGlubmVyVHguYmFzZVR4Py5CbG9ja2NoYWluSWQ/LnRvQnl0ZXMpIHtcbiAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5uZXJUeC5iYXNlVHguQmxvY2tjaGFpbklkLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbm5lclR4LmJsb2NrY2hhaW5JZD8udG9CeXRlcykge1xuICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbm5lclR4LmJsb2NrY2hhaW5JZC50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHhPYmoudHg/LmJhc2VUeD8uQmxvY2tjaGFpbklkPy50b0J5dGVzKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0eE9iai50eC5iYXNlVHguQmxvY2tjaGFpbklkLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHhPYmouYmFzZVR4Py5CbG9ja2NoYWluSWQ/LnRvQnl0ZXMpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHR4T2JqLmJhc2VUeC5CbG9ja2NoYWluSWQudG9CeXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG4gICAgICBpZiAodHhPYmouYmxvY2tjaGFpbklkPy50b0J5dGVzKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0eE9iai5ibG9ja2NoYWluSWQudG9CeXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCB0eEJsb2NrY2hhaW5JZCA9IGV4dHJhY3RCbG9ja2NoYWluSWQodHgpO1xuICAgIHJldHVybiB0eEJsb2NrY2hhaW5JZCA9PT0gYmxvY2tjaGFpbklkO1xuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../test/resources/account.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;CAcxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;CAUrB,CAAC;AAEF,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../test/resources/account.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;CAcxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;CAUrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;CAUrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;CASrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;CASrB,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAElD,eAAO,MAAM,iCAAiC,4BAA4B,CAAC;AAE3E,eAAO,MAAM,gCAAgC,2BAA2B,CAAC;AAEzE,eAAO,MAAM,wBAAwB,QAAiC,CAAC"}
|
|
@@ -28,6 +28,8 @@ exports.ACCOUNT_2 = {
|
|
|
28
28
|
publicKey: '03cd4660ac1570473e7107ed1f31425d81a624992bbc5983fd61787c560d8fd420',
|
|
29
29
|
xPrivateKey: 'xprv9s21ZrQH143K2KjD8ytSfLWDfe2585pBJNdadLgwsEKoGLbGdHCKSK5yDnfcmToazd3oPLDXprtXnCvsn9T6MDJz1qwMPaq22oTrzqvyeDQ',
|
|
30
30
|
xPublicKey: 'xprv9s21ZrQH143K2KjD8ytSfLWDfe2585pBJNdadLgwsEKoGLbGdHCKSK5yDnfcmToazd3oPLDXprtXnCvsn9T6MDJz1qwMPaq22oTrzqvyeDQ',
|
|
31
|
+
addressMainnet: 'P-flare1xvngrrmqzldj50kpvqx7mhkx3htvh5x87nkl9j',
|
|
32
|
+
addressTestnet: 'P-costwo1xvngrrmqzldj50kpvqx7mhkx3htvh5x8mhgsqy',
|
|
31
33
|
};
|
|
32
34
|
exports.ACCOUNT_3 = {
|
|
33
35
|
seed: '4c3b89f6ca897cb729d2146913877f71',
|
|
@@ -49,4 +51,4 @@ exports.INVALID_SHORT_KEYPAIR_KEY = '82A34E';
|
|
|
49
51
|
exports.INVALID_PRIVATE_KEY_ERROR_MESSAGE = 'Unsupported private key';
|
|
50
52
|
exports.INVALID_PUBLIC_KEY_ERROR_MESSAGE = 'Unsupported public key';
|
|
51
53
|
exports.INVALID_LONG_KEYPAIR_PRV = exports.SEED_ACCOUNT.privateKey + 'F1';
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvcmVzb3VyY2VzL2FjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxZQUFZLEdBQUc7SUFDMUIsSUFBSSxFQUFFLGtDQUFrQztJQUN4QyxVQUFVLEVBQUUsa0VBQWtFO0lBQzlFLFNBQVMsRUFBRSxvRUFBb0U7SUFDL0UsV0FBVyxFQUNULGlIQUFpSDtJQUNuSCxVQUFVLEVBQ1IsaUhBQWlIO0lBQ25ILGNBQWMsRUFBRSwrREFBK0Q7SUFDL0UsY0FBYyxFQUFFLGdEQUFnRDtJQUNoRSxjQUFjLEVBQUUsaURBQWlEO0lBQ2pFLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLFNBQVMsRUFDUCxvSUFBb0k7Q0FDdkksQ0FBQztBQUVXLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RSxTQUFTLEVBQUUsb0VBQW9FO0lBQy9FLFdBQVcsRUFDVCxpSEFBaUg7SUFDbkgsVUFBVSxFQUNSLGlIQUFpSDtJQUNuSCxjQUFjLEVBQUUsZ0RBQWdEO0lBQ2hFLGNBQWMsRUFBRSxpREFBaUQ7Q0FDbEUsQ0FBQztBQUVXLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RSxTQUFTLEVBQUUsb0VBQW9FO0lBQy9FLFdBQVcsRUFDVCxpSEFBaUg7SUFDbkgsVUFBVSxFQUNSLGlIQUFpSDtJQUNuSCxjQUFjLEVBQUUsZ0RBQWdEO0lBQ2hFLGNBQWMsRUFBRSxpREFBaUQ7Q0FDbEUsQ0FBQztBQUVXLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RSxTQUFTLEVBQUUsb0VBQW9FO0lBQy9FLFdBQVcsRUFDVCxpSEFBaUg7SUFDbkgsVUFBVSxFQUNSLGlIQUFpSDtJQUNuSCxPQUFPLEVBQUUsaURBQWlEO0NBQzNELENBQUM7QUFFVyxRQUFBLFNBQVMsR0FBRztJQUN2QixJQUFJLEVBQUUsa0NBQWtDO0lBQ3hDLFVBQVUsRUFBRSxrRUFBa0U7SUFDOUUsU0FBUyxFQUFFLG9FQUFvRTtJQUMvRSxXQUFXLEVBQ1QsaUhBQWlIO0lBQ25ILFVBQVUsRUFDUixpSEFBaUg7SUFDbkgsT0FBTyxFQUFFLGlEQUFpRDtDQUMzRCxDQUFDO0FBRVcsUUFBQSx5QkFBeUIsR0FBRyxRQUFRLENBQUM7QUFFckMsUUFBQSxpQ0FBaUMsR0FBRyx5QkFBeUIsQ0FBQztBQUU5RCxRQUFBLGdDQUFnQyxHQUFHLHdCQUF3QixDQUFDO0FBRTVELFFBQUEsd0JBQXdCLEdBQUcsb0JBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNFRURfQUNDT1VOVCA9IHtcbiAgc2VlZDogJzRjM2I4OWY2Y2E4OTdjYjcyOWQyMTQ2OTEzODc3ZjcxJyxcbiAgcHJpdmF0ZUtleTogJ2Q4ZjA3ZGU1OTc3ODQzOTQ5YmY0YjgxYjA5NzgxMTdjODVmMjU4MmM1N2Q3ZGRhOWEwNDUwZmYzZmJlZjE5ZmUnLFxuICBwdWJsaWNLZXk6ICcwM2NkOTE5NzY1OGZiNTYzNTkzNTYwYjkzZjhlYmEyYWViMmU0ZjM3ODEyNjI1NjliMzI3N2I4ZGE3ZjRmNzI3YjInLFxuICB4UHJpdmF0ZUtleTpcbiAgICAneHBydjlzMjFaclFIMTQzSzN1UFQzYVNqUU5hVVlKUVg0TXlHWG1hdmJETjVXQk1BYWZTM1BROVhWMkU1aU1YTGNOVXBwTlBCaDc3VXlubmpNVEwzNXQ1QkQ4dnVIcUFZcThHM01ORWJuRUVSM0JZJyxcbiAgeFB1YmxpY0tleTpcbiAgICAneHB1YjY2MU15TXdBcVJiY0dQVHY5YnlqbVdYRDZMRjFUcGg3dHpXWFBibWg0V3Q5VFRtQnZ3VG4ycFlaWmVRcW5CRUg2Y1RZQ1FFZVlMTGt2czdyd0ROOWNBS3JLOTFyYkJzOGl4czUzMlpEWmdFJyxcbiAgZmxycFByaXZhdGVLZXk6ICdQcml2YXRlS2V5LTJlWVJqRU5yUWtqV2RpenQ2UHh4UDFEUEYzRTJ3NlNZV2FpU0FNV0p3RGJxVld4TUxXJyxcbiAgYWRkcmVzc01haW5uZXQ6ICdQLWZsYXJlMXV5cDVuNzZnanFsdHJkZHVyN3FscnNtdDNreWg4Zm5ycnF3dGFsJyxcbiAgYWRkcmVzc1Rlc3RuZXQ6ICdQLWNvc3R3bzF1eXA1bjc2Z2pxbHRyZGR1cjdxbHJzbXQza3loOGZucm13aHFrNycsXG4gIG1lc3NhZ2U6ICd0ZXN0IG1lc3NhZ2UnLFxuICBzaWduYXR1cmU6XG4gICAgJzE2OTJjMGEyNWM4NGQzODllNjM2OTJjYTNiN2ViYzg5ODM1YzNiMTFmNmU2NGE1MDVkZGQ3MTY2NGQyYTNhZTkxNGUwZDFiZTEzYTgyNGFlOTczMzE4MDU2NTBhMDYzMWRmOWFlOTJiYTEzM2Y5YWE4MTkxMWYzYTU2ODA3YmEzMDEnLFxufTtcblxuZXhwb3J0IGNvbnN0IEFDQ09VTlRfMSA9IHtcbiAgc2VlZDogJzRjM2I4OWY2Y2E4OTdjYjcyOWQyMTQ2OTEzODc3ZjcxJyxcbiAgcHJpdmF0ZUtleTogJ2E1MzNkODQxOWQ0NTE4ZTExY2Q4ZDlmMDQ5YzczYThiZGFmMDAzZDY2MDIzMTlmOTY3Y2UzYzI0M2U2NDZiYTUnLFxuICBwdWJsaWNLZXk6ICcwMmEyMjBlNWZkMTA4OTk2ZDBlNmM4NWRiNDMzODRkY2VmODg4NGJjYWVlMTIwM2U5ODBmOWY5OWY2NWFiM2QzZjMnLFxuICB4UHJpdmF0ZUtleTpcbiAgICAneHBydjlzMjFaclFIMTQzSzRTS3hmYWRNN1czWXExaGh3SmdHQUZRaW84c0JxYVhBRFZvOHhtUWlVZTJjeTZHd0Nrd3NmRFpNU2U0VzZHdjV2SFRzYVVGOHlvWXV6cThLRkpQVXUycDk4UkFYS3NKJyxcbiAgeFB1YmxpY0tleTpcbiAgICAneHB1YjY2MU15TXdBcVJiY0d2UVJtY0FNVWR6SFAzWUNMbVE3WFVMS2JYR29QdjQ5Nko4SFdKaXkyU002cE1ITTg5c1FueUdpTEY0NmRmekZCNVpSVHdSbXBpVXEyaFVrcDVZY2NyY1dHNVhrUzNEJyxcbiAgYWRkcmVzc01haW5uZXQ6ICdQLWZsYXJlMWV2dW01bjBhZ2ZmcmRoZzJkbTJ2ZzdzdmZncnJhNXJ1eG5tZndrJyxcbiAgYWRkcmVzc1Rlc3RuZXQ6ICdQLWNvc3R3bzFldnVtNW4wYWdmZnJkaGcyZG0ydmc3c3ZmZ3JyYTVydTdheno5aCcsXG59O1xuXG5leHBvcnQgY29uc3QgQUNDT1VOVF8yID0ge1xuICBzZWVkOiAnNGMzYjg5ZjZjYTg5N2NiNzI5ZDIxNDY5MTM4NzdmNzEnLFxuICBwcml2YXRlS2V5OiAnODM2ZDI0Mzk2ZmY2ZTk1MmU2MzJiMzU1MmZjNjU5MTU2NmU4YmU3YzkzMWE2YzY0ZmE3ZjY4NWJlOTY0Nzg0MScsXG4gIHB1YmxpY0tleTogJzAzY2Q0NjYwYWMxNTcwNDczZTcxMDdlZDFmMzE0MjVkODFhNjI0OTkyYmJjNTk4M2ZkNjE3ODdjNTYwZDhmZDQyMCcsXG4gIHhQcml2YXRlS2V5OlxuICAgICd4cHJ2OXMyMVpyUUgxNDNLMktqRDh5dFNmTFdEZmUyNTg1cEJKTmRhZExnd3NFS29HTGJHZEhDS1NLNXlEbmZjbVRvYXpkM29QTERYcHJ0WG5DdnNuOVQ2TURKejFxd01QYXEyMm9UcnpxdnllRFEnLFxuICB4UHVibGljS2V5OlxuICAgICd4cHJ2OXMyMVpyUUgxNDNLMktqRDh5dFNmTFdEZmUyNTg1cEJKTmRhZExnd3NFS29HTGJHZEhDS1NLNXlEbmZjbVRvYXpkM29QTERYcHJ0WG5DdnNuOVQ2TURKejFxd01QYXEyMm9UcnpxdnllRFEnLFxuICBhZGRyZXNzTWFpbm5ldDogJ1AtZmxhcmUxeHZuZ3JybXF6bGRqNTBrcHZxeDdtaGt4M2h0dmg1eDg3bmtsOWonLFxuICBhZGRyZXNzVGVzdG5ldDogJ1AtY29zdHdvMXh2bmdycm1xemxkajUwa3B2cXg3bWhreDNodHZoNXg4bWhnc3F5Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBBQ0NPVU5UXzMgPSB7XG4gIHNlZWQ6ICc0YzNiODlmNmNhODk3Y2I3MjlkMjE0NjkxMzg3N2Y3MScsXG4gIHByaXZhdGVLZXk6ICcwOTA2ODQwOTI2ZmNkMDM4ZjQyOTIxNzA5NjU1ZThiOGIwNjYxMzI3MmEzYWM5MDQwNTEwYjdkNGIyNmYwOWI2JyxcbiAgcHVibGljS2V5OiAnMDI5YWE0ZDlmMThkMjk5NGYyZDgzM2MzYjlkZDE3YTVhZDliMWMzZTc0NGYwZmUwYjRjYjE1OTVmOGY2N2ZkMTJjJyxcbiAgeFByaXZhdGVLZXk6XG4gICAgJ3hwcnY5czIxWnJRSDE0M0s0VHRvOWgxRFczZ21NRnB4R2pTeVVTM1YxckNValZFRERtOHh6czM4R0Nyc0NyeWpFYnJFb3ZIaGcxMmQ1NW1CeDRqSEsxSDE5Unl1aHpKdTRHUUQ5SEJxTFpDcEE2YicsXG4gIHhQdWJsaWNLZXk6XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNHd3lHRmlZRHNCZFZ1SGZTZ0NBcHFleTVwRWM2SHBtQzZaVTdZUU1OcDFCTTQ5N2RKakJuUVptTkZQVlFGUlZMbkczeUp2enlBOHpHanNlaWZtVHEzSGtReXExekhxcScsXG4gIGFkZHJlc3M6ICdQLWNvc3R3bzF4cXI4cHM4czZxdjVqa2U5d2x0YzhkYzl3bTVxN2NrMmZydDVoZCcsXG59O1xuXG5leHBvcnQgY29uc3QgQUNDT1VOVF80ID0ge1xuICBzZWVkOiAnNGMzYjg5ZjZjYTg5N2NiNzI5ZDIxNDY5MTM4NzdmNzEnLFxuICBwcml2YXRlS2V5OiAnNmQxOWVmMTI2MjJhZDJlMzY4ODA2NDgzZjkxNDQ1YmE4MzJhMGNhZGQ3M2Q4NTg1YmZkOWRlNTkwMzdlNzliNCcsXG4gIHB1YmxpY0tleTogJzAyNmJiNTAzN2RjZTU3MTRkYzk0MjdlNDVlYWJlYmQ2ODlmYzY3MWI5YzdiYTdiMGZmYzc0Yzk0NDc4OWVjZTlkMScsXG4gIHhQcml2YXRlS2V5OlxuICAgICd4cHJ2OXMyMVpyUUgxNDNLMnJOTUpBb21Ta0w3aTdyU3VkbkVrcm00WVdTNG5BQVBKQVFLR3FpdG1lenFwNUUzOHVWZUxXa3pMTjdWWG5rS3kzdXFuYzNERFhxb2pRMnJYR0xZQnd0VlJWY1JlN2QnLFxuICB4UHVibGljS2V5OlxuICAgICd4cHViNjYxTXlNd0FxUmJjRkxTcFFDTG1vdEdyRzlnd0s2VzY4NWdmTHRxZ0xWaE5BeGpUcFAzOUtUS0tmTEZCeHhwdGZlNGs4S2J5eldDUENGYm05eHVTVVhRTlJRVE5Rb2ViWWl1cFY4ZlNQSEonLFxuICBhZGRyZXNzOiAnUC1jb3N0d28xanZqZHZnNmpkcWV6MjRjNWtqeGdzdTQ3bXF3dnB5ZXJrMjJ5bDgnLFxufTtcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfU0hPUlRfS0VZUEFJUl9LRVkgPSAnODJBMzRFJztcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfUFJJVkFURV9LRVlfRVJST1JfTUVTU0FHRSA9ICdVbnN1cHBvcnRlZCBwcml2YXRlIGtleSc7XG5cbmV4cG9ydCBjb25zdCBJTlZBTElEX1BVQkxJQ19LRVlfRVJST1JfTUVTU0FHRSA9ICdVbnN1cHBvcnRlZCBwdWJsaWMga2V5JztcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfTE9OR19LRVlQQUlSX1BSViA9IFNFRURfQUNDT1VOVC5wcml2YXRlS2V5ICsgJ0YxJztcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flrp.d.ts","sourceRoot":"","sources":["../../../test/unit/flrp.ts"],"names":[],"mappings":""}
|