@bitgo-beta/utxo-staking 1.1.1-beta.8 → 1.1.1-beta.800
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/babylon/delegationMessage.d.ts +38 -0
- package/dist/src/babylon/delegationMessage.d.ts.map +1 -0
- package/dist/src/babylon/delegationMessage.js +285 -0
- package/dist/src/babylon/descriptor.d.ts +48 -0
- package/dist/src/babylon/descriptor.d.ts.map +1 -0
- package/dist/src/babylon/descriptor.js +97 -0
- package/dist/src/babylon/index.d.ts +6 -0
- package/dist/src/babylon/index.d.ts.map +1 -0
- package/dist/src/babylon/index.js +49 -0
- package/dist/src/babylon/network.d.ts +7 -0
- package/dist/src/babylon/network.d.ts.map +1 -0
- package/dist/src/babylon/network.js +66 -0
- package/dist/src/babylon/params.mainnet.json +152 -0
- package/dist/src/babylon/params.testnet.json +212 -0
- package/dist/src/babylon/parseDescriptor.d.ts +26 -0
- package/dist/src/babylon/parseDescriptor.d.ts.map +1 -0
- package/dist/src/babylon/parseDescriptor.js +159 -0
- package/dist/src/babylon/stakingManager.d.ts +6 -0
- package/dist/src/babylon/stakingManager.d.ts.map +1 -0
- package/dist/src/babylon/stakingManager.js +120 -0
- package/dist/src/babylon/stakingParams.d.ts +40 -0
- package/dist/src/babylon/stakingParams.d.ts.map +1 -0
- package/dist/src/babylon/stakingParams.js +132 -0
- package/dist/src/babylon/undelegation/UndelegationResponse.d.ts +24 -0
- package/dist/src/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
- package/dist/src/babylon/undelegation/UndelegationResponse.js +55 -0
- package/dist/src/babylon/undelegation/index.d.ts +3 -0
- package/dist/src/babylon/undelegation/index.d.ts.map +1 -0
- package/dist/src/babylon/undelegation/index.js +19 -0
- package/dist/src/babylon/undelegation/unbonding.d.ts +16 -0
- package/dist/src/babylon/undelegation/unbonding.d.ts.map +1 -0
- package/dist/src/babylon/undelegation/unbonding.js +111 -0
- package/dist/src/coreDao/descriptor.d.ts +4 -4
- package/dist/src/coreDao/descriptor.d.ts.map +1 -1
- package/dist/src/coreDao/descriptor.js +12 -5
- package/dist/src/coreDao/opReturn.d.ts +5 -5
- package/dist/src/coreDao/opReturn.d.ts.map +1 -1
- package/dist/src/coreDao/opReturn.js +19 -11
- package/dist/src/coreDao/transaction.d.ts +15 -8
- package/dist/src/coreDao/transaction.d.ts.map +1 -1
- package/dist/src/coreDao/transaction.js +13 -6
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +26 -7
- package/package.json +23 -9
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -24
- package/dist/src/transaction.d.ts +0 -34
- package/dist/src/transaction.d.ts.map +0 -1
- package/dist/src/transaction.js +0 -55
package/package.json
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/utxo-staking",
|
|
3
|
-
"version": "1.1.1-beta.
|
|
3
|
+
"version": "1.1.1-beta.800",
|
|
4
4
|
"description": "BitGo SDK for build UTXO staking transactions",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/src"
|
|
9
|
+
],
|
|
7
10
|
"scripts": {
|
|
8
11
|
"build": "yarn tsc --build --incremental --verbose .",
|
|
9
12
|
"fmt": "prettier --write .",
|
|
10
|
-
"check-fmt": "prettier --check
|
|
13
|
+
"check-fmt": "prettier --check '**/*.{ts,js,json}'",
|
|
11
14
|
"clean": "rm -r ./dist",
|
|
12
15
|
"lint": "eslint --quiet .",
|
|
13
16
|
"prepare": "npm run build",
|
|
14
|
-
"test": "npm run coverage",
|
|
15
17
|
"coverage": "nyc -- npm run unit-test",
|
|
16
|
-
"unit-test": "mocha"
|
|
18
|
+
"unit-test": "mocha --recursive \"test/**/*.ts\""
|
|
17
19
|
},
|
|
18
20
|
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
19
21
|
"license": "MIT",
|
|
20
22
|
"engines": {
|
|
21
|
-
"node": ">=
|
|
23
|
+
"node": ">=20 <23"
|
|
22
24
|
},
|
|
23
25
|
"repository": {
|
|
24
26
|
"type": "git",
|
|
@@ -39,10 +41,22 @@
|
|
|
39
41
|
".ts"
|
|
40
42
|
]
|
|
41
43
|
},
|
|
44
|
+
"type": "commonjs",
|
|
42
45
|
"dependencies": {
|
|
43
|
-
"@
|
|
44
|
-
"@bitgo-beta/
|
|
45
|
-
"@bitgo/
|
|
46
|
+
"@babylonlabs-io/babylon-proto-ts": "1.7.2",
|
|
47
|
+
"@bitgo-beta/babylonlabs-io-btc-staking-ts": "0.4.0-beta.605",
|
|
48
|
+
"@bitgo-beta/utxo-core": "1.8.1-beta.476",
|
|
49
|
+
"@bitgo-beta/utxo-lib": "8.0.3-beta.1360",
|
|
50
|
+
"@bitgo/wasm-miniscript": "2.0.0-beta.7",
|
|
51
|
+
"bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4",
|
|
52
|
+
"bip322-js": "^2.0.0",
|
|
53
|
+
"bitcoinjs-lib": "^6.1.7",
|
|
54
|
+
"fp-ts": "^2.16.2",
|
|
55
|
+
"io-ts": "npm:@bitgo-forks/io-ts@2.1.4",
|
|
56
|
+
"io-ts-types": "^0.5.19"
|
|
46
57
|
},
|
|
47
|
-
"
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"yargs": "^17.7.2"
|
|
60
|
+
},
|
|
61
|
+
"gitHead": "04137d02b7d9d6356e42c1c4c3e82695cee7f818"
|
|
48
62
|
}
|
package/.mocharc.yml
DELETED
package/CHANGELOG.md
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Change Log
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
-
|
|
6
|
-
# 1.2.0 (2024-11-14)
|
|
7
|
-
|
|
8
|
-
### Features
|
|
9
|
-
|
|
10
|
-
- **utxo-staking:** build staking transaction ([73b33bc](https://github.com/BitGo/BitGoJS/commit/73b33bc93e46934fe5e6002c52c0b1443a3d0d8d))
|
|
11
|
-
- **utxo-staking:** create coredao staking outputs ([6b5ca4b](https://github.com/BitGo/BitGoJS/commit/6b5ca4b7c726fb6a4380526391416f6db356e0b7))
|
|
12
|
-
|
|
13
|
-
# 1.1.0 (2024-11-01)
|
|
14
|
-
|
|
15
|
-
### Bug Fixes
|
|
16
|
-
|
|
17
|
-
- **utxo-coredao:** clarifications from the coredao team ([56157b3](https://github.com/BitGo/BitGoJS/commit/56157b34e6802895489928d8e7a87f8f5c8129ed))
|
|
18
|
-
- **utxo-coredao:** fix json encoding to add newline ([bb5be2f](https://github.com/BitGo/BitGoJS/commit/bb5be2f91e0e7f1d59d94a1786fdd2cccc4ebad6))
|
|
19
|
-
|
|
20
|
-
### Features
|
|
21
|
-
|
|
22
|
-
- **utxo-coredao:** descriptor for CoreDao ([791f9e4](https://github.com/BitGo/BitGoJS/commit/791f9e47033a8224759d98f0483f5b0bb9bbc524))
|
|
23
|
-
- **utxo-coredao:** init repo and op-return ([60fa058](https://github.com/BitGo/BitGoJS/commit/60fa058f693cf722db8d5e7507539a5ec1c8b1a5))
|
|
24
|
-
- **utxo-coredao:** parse and verify op-return ([32dc7c4](https://github.com/BitGo/BitGoJS/commit/32dc7c49f0ff5baeb0db4a20853f70745f71c02b))
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
4
|
-
/**
|
|
5
|
-
* Build a staking transaction for a wallet that assumes 2-of-3 multisig for the inputs
|
|
6
|
-
*
|
|
7
|
-
* Given the inputs and the staking outputs, we will create the PSBT with the desired fee rate.
|
|
8
|
-
* We always add the change address as the last output.
|
|
9
|
-
*
|
|
10
|
-
* @param rootWalletKeys
|
|
11
|
-
* @param unspents
|
|
12
|
-
* @param createStakingOutputs
|
|
13
|
-
* @param changeAddressInfo
|
|
14
|
-
* @param feeRateSatKB
|
|
15
|
-
* @param network
|
|
16
|
-
*/
|
|
17
|
-
export declare function buildFixedWalletStakingPsbt({ rootWalletKeys, unspents, outputs, changeAddressInfo, feeRateSatKB, network, skipNonWitnessUtxo, dustAmount, }: {
|
|
18
|
-
rootWalletKeys: utxolib.bitgo.RootWalletKeys;
|
|
19
|
-
unspents: utxolib.bitgo.WalletUnspent<bigint>[];
|
|
20
|
-
outputs: {
|
|
21
|
-
script: Buffer;
|
|
22
|
-
value: bigint;
|
|
23
|
-
}[];
|
|
24
|
-
changeAddressInfo: {
|
|
25
|
-
chain: utxolib.bitgo.ChainCode;
|
|
26
|
-
index: number;
|
|
27
|
-
address: string;
|
|
28
|
-
};
|
|
29
|
-
feeRateSatKB: number;
|
|
30
|
-
network: utxolib.Network;
|
|
31
|
-
skipNonWitnessUtxo?: boolean;
|
|
32
|
-
dustAmount?: bigint;
|
|
33
|
-
}): utxolib.bitgo.UtxoPsbt;
|
|
34
|
-
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/transaction.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,cAAc,EACd,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,kBAAkB,EAClB,UAAsB,GACvB,EAAE;IACD,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;IAC7C,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;IAChD,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,iBAAiB,EAAE;QACjB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CA0DzB"}
|
package/dist/src/transaction.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildFixedWalletStakingPsbt = void 0;
|
|
4
|
-
const utxolib = require("@bitgo-beta/utxo-lib");
|
|
5
|
-
const unspents_1 = require("@bitgo-beta/unspents");
|
|
6
|
-
/**
|
|
7
|
-
* Build a staking transaction for a wallet that assumes 2-of-3 multisig for the inputs
|
|
8
|
-
*
|
|
9
|
-
* Given the inputs and the staking outputs, we will create the PSBT with the desired fee rate.
|
|
10
|
-
* We always add the change address as the last output.
|
|
11
|
-
*
|
|
12
|
-
* @param rootWalletKeys
|
|
13
|
-
* @param unspents
|
|
14
|
-
* @param createStakingOutputs
|
|
15
|
-
* @param changeAddressInfo
|
|
16
|
-
* @param feeRateSatKB
|
|
17
|
-
* @param network
|
|
18
|
-
*/
|
|
19
|
-
function buildFixedWalletStakingPsbt({ rootWalletKeys, unspents, outputs, changeAddressInfo, feeRateSatKB, network, skipNonWitnessUtxo, dustAmount = BigInt(0), }) {
|
|
20
|
-
if (feeRateSatKB < 1000) {
|
|
21
|
-
throw new Error('Fee rate must be at least 1 sat/vbyte');
|
|
22
|
-
}
|
|
23
|
-
if (unspents.length === 0 || outputs.length === 0) {
|
|
24
|
-
throw new Error('Must have at least one input and one output');
|
|
25
|
-
}
|
|
26
|
-
// Check the change address info
|
|
27
|
-
const changeScript = utxolib.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(changeAddressInfo.chain, changeAddressInfo.index).publicKeys, utxolib.bitgo.scriptTypeForChain(changeAddressInfo.chain), network).scriptPubKey;
|
|
28
|
-
if (!changeScript.equals(utxolib.addressFormat.toOutputScriptTryFormats(changeAddressInfo.address, network))) {
|
|
29
|
-
throw new Error('Change address info does not match the derived change script');
|
|
30
|
-
}
|
|
31
|
-
const psbt = utxolib.bitgo.createPsbtForNetwork({ network });
|
|
32
|
-
utxolib.bitgo.addXpubsToPsbt(psbt, rootWalletKeys);
|
|
33
|
-
const inputAmount = unspents.reduce((sum, unspent) => sum + unspent.value, BigInt(0));
|
|
34
|
-
const outputAmount = outputs.reduce((sum, output) => sum + output.value, BigInt(0));
|
|
35
|
-
unspents.forEach((unspent) => utxolib.bitgo.addWalletUnspentToPsbt(psbt, unspent, rootWalletKeys, 'user', 'bitgo', {
|
|
36
|
-
isReplaceableByFee: true,
|
|
37
|
-
skipNonWitnessUtxo,
|
|
38
|
-
}));
|
|
39
|
-
outputs.forEach((output) => psbt.addOutput(output));
|
|
40
|
-
const fee = Math.ceil((unspents_1.Dimensions.fromPsbt(psbt)
|
|
41
|
-
.plus(unspents_1.Dimensions.fromOutput({ script: changeScript }))
|
|
42
|
-
.getVSize() *
|
|
43
|
-
feeRateSatKB) /
|
|
44
|
-
1000);
|
|
45
|
-
const changeAmount = inputAmount - (outputAmount + BigInt(fee));
|
|
46
|
-
if (changeAmount < BigInt(0)) {
|
|
47
|
-
throw new Error(`Input amount ${inputAmount.toString()} cannot cover the staking amount ${outputAmount} and the fee: ${fee}`);
|
|
48
|
-
}
|
|
49
|
-
if (changeAmount > dustAmount) {
|
|
50
|
-
utxolib.bitgo.addWalletOutputToPsbt(psbt, rootWalletKeys, changeAddressInfo.chain, changeAddressInfo.index, changeAmount);
|
|
51
|
-
}
|
|
52
|
-
return psbt;
|
|
53
|
-
}
|
|
54
|
-
exports.buildFixedWalletStakingPsbt = buildFixedWalletStakingPsbt;
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQWdEO0FBQ2hELG1EQUFrRDtBQUVsRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQiwyQkFBMkIsQ0FBQyxFQUMxQyxjQUFjLEVBQ2QsUUFBUSxFQUNSLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLE9BQU8sRUFDUCxrQkFBa0IsRUFDbEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FpQnZCO0lBQ0MsSUFBSSxZQUFZLEdBQUcsSUFBSSxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztLQUMxRDtJQUNELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0tBQ2hFO0lBRUQsZ0NBQWdDO0lBQ2hDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUNyRSxjQUFjLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFDbEcsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFDekQsT0FBTyxDQUNSLENBQUMsWUFBWSxDQUFDO0lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtRQUM1RyxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7S0FDakY7SUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3RCxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFbkQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVwRixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO1FBQ25GLGtCQUFrQixFQUFFLElBQUk7UUFDeEIsa0JBQWtCO0tBQ25CLENBQUMsQ0FDSCxDQUFDO0lBQ0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXBELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ25CLENBQUMscUJBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3ZCLElBQUksQ0FBQyxxQkFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQ3JELFFBQVEsRUFBRTtRQUNYLFlBQVksQ0FBQztRQUNiLElBQUksQ0FDUCxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsV0FBVyxHQUFHLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUNiLGdCQUFnQixXQUFXLENBQUMsUUFBUSxFQUFFLG9DQUFvQyxZQUFZLGtCQUFrQixHQUFHLEVBQUUsQ0FDOUcsQ0FBQztLQUNIO0lBRUQsSUFBSSxZQUFZLEdBQUcsVUFBVSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQ2pDLElBQUksRUFDSixjQUFjLEVBQ2QsaUJBQWlCLENBQUMsS0FBSyxFQUN2QixpQkFBaUIsQ0FBQyxLQUFLLEVBQ3ZCLFlBQVksQ0FDYixDQUFDO0tBQ0g7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFuRkQsa0VBbUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnQGJpdGdvLWJldGEvdW5zcGVudHMnO1xuXG4vKipcbiAqIEJ1aWxkIGEgc3Rha2luZyB0cmFuc2FjdGlvbiBmb3IgYSB3YWxsZXQgdGhhdCBhc3N1bWVzIDItb2YtMyBtdWx0aXNpZyBmb3IgdGhlIGlucHV0c1xuICpcbiAqIEdpdmVuIHRoZSBpbnB1dHMgYW5kIHRoZSBzdGFraW5nIG91dHB1dHMsIHdlIHdpbGwgY3JlYXRlIHRoZSBQU0JUIHdpdGggdGhlIGRlc2lyZWQgZmVlIHJhdGUuXG4gKiBXZSBhbHdheXMgYWRkIHRoZSBjaGFuZ2UgYWRkcmVzcyBhcyB0aGUgbGFzdCBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHJvb3RXYWxsZXRLZXlzXG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSBjcmVhdGVTdGFraW5nT3V0cHV0c1xuICogQHBhcmFtIGNoYW5nZUFkZHJlc3NJbmZvXG4gKiBAcGFyYW0gZmVlUmF0ZVNhdEtCXG4gKiBAcGFyYW0gbmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGaXhlZFdhbGxldFN0YWtpbmdQc2J0KHtcbiAgcm9vdFdhbGxldEtleXMsXG4gIHVuc3BlbnRzLFxuICBvdXRwdXRzLFxuICBjaGFuZ2VBZGRyZXNzSW5mbyxcbiAgZmVlUmF0ZVNhdEtCLFxuICBuZXR3b3JrLFxuICBza2lwTm9uV2l0bmVzc1V0eG8sXG4gIGR1c3RBbW91bnQgPSBCaWdJbnQoMCksXG59OiB7XG4gIHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuICB1bnNwZW50czogdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcbiAgb3V0cHV0czoge1xuICAgIHNjcmlwdDogQnVmZmVyO1xuICAgIHZhbHVlOiBiaWdpbnQ7XG4gIH1bXTtcbiAgY2hhbmdlQWRkcmVzc0luZm86IHtcbiAgICBjaGFpbjogdXR4b2xpYi5iaXRnby5DaGFpbkNvZGU7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gIH07XG4gIGZlZVJhdGVTYXRLQjogbnVtYmVyO1xuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gIHNraXBOb25XaXRuZXNzVXR4bz86IGJvb2xlYW47XG4gIGR1c3RBbW91bnQ/OiBiaWdpbnQ7XG59KTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGlmIChmZWVSYXRlU2F0S0IgPCAxMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGZWUgcmF0ZSBtdXN0IGJlIGF0IGxlYXN0IDEgc2F0L3ZieXRlJyk7XG4gIH1cbiAgaWYgKHVuc3BlbnRzLmxlbmd0aCA9PT0gMCB8fCBvdXRwdXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBpbnB1dCBhbmQgb25lIG91dHB1dCcpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhlIGNoYW5nZSBhZGRyZXNzIGluZm9cbiAgY29uc3QgY2hhbmdlU2NyaXB0ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFuZ2VBZGRyZXNzSW5mby5jaGFpbiwgY2hhbmdlQWRkcmVzc0luZm8uaW5kZXgpLnB1YmxpY0tleXMsXG4gICAgdXR4b2xpYi5iaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oY2hhbmdlQWRkcmVzc0luZm8uY2hhaW4pLFxuICAgIG5ldHdvcmtcbiAgKS5zY3JpcHRQdWJLZXk7XG4gIGlmICghY2hhbmdlU2NyaXB0LmVxdWFscyh1dHhvbGliLmFkZHJlc3NGb3JtYXQudG9PdXRwdXRTY3JpcHRUcnlGb3JtYXRzKGNoYW5nZUFkZHJlc3NJbmZvLmFkZHJlc3MsIG5ldHdvcmspKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbmdlIGFkZHJlc3MgaW5mbyBkb2VzIG5vdCBtYXRjaCB0aGUgZGVyaXZlZCBjaGFuZ2Ugc2NyaXB0Jyk7XG4gIH1cblxuICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcmsgfSk7XG4gIHV0eG9saWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgcm9vdFdhbGxldEtleXMpO1xuXG4gIGNvbnN0IGlucHV0QW1vdW50ID0gdW5zcGVudHMucmVkdWNlKChzdW0sIHVuc3BlbnQpID0+IHN1bSArIHVuc3BlbnQudmFsdWUsIEJpZ0ludCgwKSk7XG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IG91dHB1dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4gc3VtICsgb3V0cHV0LnZhbHVlLCBCaWdJbnQoMCkpO1xuXG4gIHVuc3BlbnRzLmZvckVhY2goKHVuc3BlbnQpID0+XG4gICAgdXR4b2xpYi5iaXRnby5hZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHVuc3BlbnQsIHJvb3RXYWxsZXRLZXlzLCAndXNlcicsICdiaXRnbycsIHtcbiAgICAgIGlzUmVwbGFjZWFibGVCeUZlZTogdHJ1ZSxcbiAgICAgIHNraXBOb25XaXRuZXNzVXR4byxcbiAgICB9KVxuICApO1xuICBvdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4gcHNidC5hZGRPdXRwdXQob3V0cHV0KSk7XG5cbiAgY29uc3QgZmVlID0gTWF0aC5jZWlsKFxuICAgIChEaW1lbnNpb25zLmZyb21Qc2J0KHBzYnQpXG4gICAgICAucGx1cyhEaW1lbnNpb25zLmZyb21PdXRwdXQoeyBzY3JpcHQ6IGNoYW5nZVNjcmlwdCB9KSlcbiAgICAgIC5nZXRWU2l6ZSgpICpcbiAgICAgIGZlZVJhdGVTYXRLQikgL1xuICAgICAgMTAwMFxuICApO1xuXG4gIGNvbnN0IGNoYW5nZUFtb3VudCA9IGlucHV0QW1vdW50IC0gKG91dHB1dEFtb3VudCArIEJpZ0ludChmZWUpKTtcbiAgaWYgKGNoYW5nZUFtb3VudCA8IEJpZ0ludCgwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnB1dCBhbW91bnQgJHtpbnB1dEFtb3VudC50b1N0cmluZygpfSBjYW5ub3QgY292ZXIgdGhlIHN0YWtpbmcgYW1vdW50ICR7b3V0cHV0QW1vdW50fSBhbmQgIHRoZSBmZWU6ICR7ZmVlfWBcbiAgICApO1xuICB9XG5cbiAgaWYgKGNoYW5nZUFtb3VudCA+IGR1c3RBbW91bnQpIHtcbiAgICB1dHhvbGliLmJpdGdvLmFkZFdhbGxldE91dHB1dFRvUHNidChcbiAgICAgIHBzYnQsXG4gICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgIGNoYW5nZUFkZHJlc3NJbmZvLmNoYWluLFxuICAgICAgY2hhbmdlQWRkcmVzc0luZm8uaW5kZXgsXG4gICAgICBjaGFuZ2VBbW91bnRcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHBzYnQ7XG59XG4iXX0=
|