@bitgo/utxo-ord 1.24.1 → 1.26.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/cjs/src/SatPoint.d.ts +7 -0
- package/dist/cjs/src/SatPoint.d.ts.map +1 -1
- package/dist/cjs/src/SatPoint.js +26 -7
- package/dist/cjs/src/index.d.ts +2 -0
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +1 -1
- package/dist/cjs/src/inscriptions.d.ts +49 -22
- package/dist/cjs/src/inscriptions.d.ts.map +1 -1
- package/dist/cjs/src/inscriptions.js +65 -173
- package/dist/cjs/src/psbt.d.ts +28 -11
- package/dist/cjs/src/psbt.d.ts.map +1 -1
- package/dist/cjs/src/psbt.js +65 -26
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/SatPoint.d.ts +7 -0
- package/dist/esm/SatPoint.d.ts.map +1 -1
- package/dist/esm/SatPoint.js +21 -3
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/inscriptions.d.ts +49 -22
- package/dist/esm/inscriptions.d.ts.map +1 -1
- package/dist/esm/inscriptions.js +64 -139
- package/dist/esm/psbt.d.ts +28 -11
- package/dist/esm/psbt.d.ts.map +1 -1
- package/dist/esm/psbt.js +66 -27
- package/package.json +6 -5
package/dist/cjs/src/psbt.js
CHANGED
|
@@ -4,24 +4,58 @@ exports.ErrorNoLayout = exports.MAX_UNSPENTS_FOR_OUTPUT_LAYOUT = exports.Default
|
|
|
4
4
|
exports.createPsbtFromOutputLayout = createPsbtFromOutputLayout;
|
|
5
5
|
exports.findOutputLayoutForWalletUnspents = findOutputLayoutForWalletUnspents;
|
|
6
6
|
exports.createPsbtForSingleInscriptionPassingTransaction = createPsbtForSingleInscriptionPassingTransaction;
|
|
7
|
-
const
|
|
8
|
-
const unspents_1 = require("@bitgo/unspents");
|
|
7
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
9
8
|
const OrdOutput_1 = require("./OrdOutput");
|
|
10
9
|
const SatPoint_1 = require("./SatPoint");
|
|
11
10
|
const SatRange_1 = require("./SatRange");
|
|
12
11
|
const OutputLayout_1 = require("./OutputLayout");
|
|
13
12
|
const combinations_1 = require("./combinations");
|
|
13
|
+
const { BitGoPsbt, ChainCode } = wasm_utxo_1.fixedScriptWallet;
|
|
14
|
+
/**
|
|
15
|
+
* Map utxo-lib network objects to CoinName strings.
|
|
16
|
+
*/
|
|
17
|
+
function networkToCoinName(network) {
|
|
18
|
+
// Bitcoin mainnet
|
|
19
|
+
if (network.bech32 === 'bc' && network.pubKeyHash === 0) {
|
|
20
|
+
return 'btc';
|
|
21
|
+
}
|
|
22
|
+
// Bitcoin testnet
|
|
23
|
+
if (network.bech32 === 'tb' && network.pubKeyHash === 111) {
|
|
24
|
+
return 'tbtc';
|
|
25
|
+
}
|
|
26
|
+
throw new Error(`Unknown network: ${JSON.stringify(network)}`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Normalize network parameter - accepts either CoinName string or utxo-lib Network object.
|
|
30
|
+
*/
|
|
31
|
+
function normalizeCoinName(networkOrCoinName) {
|
|
32
|
+
if (typeof networkOrCoinName === 'string') {
|
|
33
|
+
return networkOrCoinName;
|
|
34
|
+
}
|
|
35
|
+
return networkToCoinName(networkOrCoinName);
|
|
36
|
+
}
|
|
37
|
+
/** Segwit transaction overhead in virtual bytes */
|
|
38
|
+
const TX_SEGWIT_OVERHEAD_VSIZE = 10;
|
|
14
39
|
exports.DefaultInscriptionConstraints = {
|
|
15
40
|
minChangeOutput: BigInt(10000),
|
|
16
41
|
minInscriptionOutput: BigInt(10000),
|
|
17
42
|
maxInscriptionOutput: BigInt(20000),
|
|
18
43
|
};
|
|
19
|
-
function createPsbtFromOutputLayout(
|
|
20
|
-
const psbt = utxo_lib_1.bitgo.createPsbtForNetwork({ network: network });
|
|
44
|
+
function createPsbtFromOutputLayout(networkOrCoinName, inputBuilder, unspents, outputs, outputLayout) {
|
|
21
45
|
if (unspents.length === 0) {
|
|
22
46
|
throw new Error(`must provide at least one unspent`);
|
|
23
47
|
}
|
|
24
|
-
|
|
48
|
+
const coinName = normalizeCoinName(networkOrCoinName);
|
|
49
|
+
const psbt = BitGoPsbt.createEmpty(coinName, inputBuilder.walletKeys);
|
|
50
|
+
// Add inputs
|
|
51
|
+
unspents.forEach((u) => {
|
|
52
|
+
const { txid, vout } = (0, SatPoint_1.parseOutputId)(u.id);
|
|
53
|
+
psbt.addWalletInput({ txid, vout, value: u.value }, inputBuilder.walletKeys, {
|
|
54
|
+
scriptId: { chain: u.chain, index: u.index },
|
|
55
|
+
signPath: { signer: inputBuilder.signer, cosigner: inputBuilder.cosigner },
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
// Build ord outputs from layout
|
|
25
59
|
const ordInput = OrdOutput_1.OrdOutput.joinAll(unspents.map((u) => new OrdOutput_1.OrdOutput(u.value)));
|
|
26
60
|
const ordOutputs = (0, OutputLayout_1.getOrdOutputsForLayout)(ordInput, outputLayout);
|
|
27
61
|
(0, OutputLayout_1.toArray)(ordOutputs).forEach((ordOutput) => {
|
|
@@ -29,26 +63,27 @@ function createPsbtFromOutputLayout(network, inputBuilder, unspents, outputs, ou
|
|
|
29
63
|
return;
|
|
30
64
|
}
|
|
31
65
|
switch (ordOutput) {
|
|
32
|
-
// skip
|
|
33
|
-
case null:
|
|
66
|
+
// skip fee output (virtual)
|
|
34
67
|
case ordOutputs.feeOutput:
|
|
35
68
|
return;
|
|
36
|
-
// add padding outputs
|
|
69
|
+
// add padding/change outputs
|
|
37
70
|
case ordOutputs.firstChangeOutput:
|
|
38
71
|
case ordOutputs.secondChangeOutput:
|
|
39
72
|
const { chain, index } = ordOutput === ordOutputs.firstChangeOutput ? outputs.changeOutputs[0] : outputs.changeOutputs[1];
|
|
40
|
-
|
|
73
|
+
psbt.addWalletOutput(inputBuilder.walletKeys, { chain, index, value: ordOutput.value });
|
|
41
74
|
break;
|
|
42
75
|
// add actual inscription output
|
|
43
76
|
case ordOutputs.inscriptionOutput:
|
|
44
|
-
|
|
45
|
-
if (typeof
|
|
46
|
-
|
|
77
|
+
const recipient = outputs.inscriptionRecipient;
|
|
78
|
+
if (typeof recipient === 'string') {
|
|
79
|
+
psbt.addOutput(recipient, ordOutput.value);
|
|
80
|
+
}
|
|
81
|
+
else if (recipient instanceof Uint8Array) {
|
|
82
|
+
psbt.addOutput(recipient, ordOutput.value);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
throw new Error('inscriptionRecipient must be a string or Uint8Array');
|
|
47
86
|
}
|
|
48
|
-
psbt.addOutput({
|
|
49
|
-
script: inscriptionRecipient,
|
|
50
|
-
value: ordOutput.value,
|
|
51
|
-
});
|
|
52
87
|
break;
|
|
53
88
|
}
|
|
54
89
|
});
|
|
@@ -80,6 +115,14 @@ function findOutputLayoutForWalletUnspents(inputs, satPoint, outputs, constraint
|
|
|
80
115
|
throw new Error(`wallet outputs must be on same chain`);
|
|
81
116
|
}
|
|
82
117
|
const { minChangeOutput = exports.DefaultInscriptionConstraints.minChangeOutput, minInscriptionOutput = exports.DefaultInscriptionConstraints.minInscriptionOutput, maxInscriptionOutput = exports.DefaultInscriptionConstraints.maxInscriptionOutput, } = constraints;
|
|
118
|
+
// Calculate input vsize using wasm-utxo Dimensions
|
|
119
|
+
const inputDimensions = inputs.reduce((dims, input) => dims.plus(wasm_utxo_1.Dimensions.fromInput({ chain: input.chain })), wasm_utxo_1.Dimensions.empty());
|
|
120
|
+
const inputsVSize = inputDimensions.getInputVSize();
|
|
121
|
+
// Calculate output vsize using wasm-utxo Dimensions
|
|
122
|
+
const outputDimensions = wasm_utxo_1.Dimensions.fromOutput({
|
|
123
|
+
scriptType: ChainCode.scriptType(outputs.changeOutputs[0].chain),
|
|
124
|
+
});
|
|
125
|
+
const outputVSize = outputDimensions.getOutputVSize();
|
|
83
126
|
// Join all the inputs into a single inscriptionOutput.
|
|
84
127
|
// For the purposes of finding a layout there is no difference.
|
|
85
128
|
const inscriptionOutput = OrdOutput_1.OrdOutput.joinAll(inputs.map((i) => new OrdOutput_1.OrdOutput(i.value, i === inputs[0] ? [toSatRange(satPoint)] : [])));
|
|
@@ -87,12 +130,8 @@ function findOutputLayoutForWalletUnspents(inputs, satPoint, outputs, constraint
|
|
|
87
130
|
minChangeOutput,
|
|
88
131
|
minInscriptionOutput,
|
|
89
132
|
maxInscriptionOutput,
|
|
90
|
-
feeFixed: getFee(
|
|
91
|
-
|
|
92
|
-
p2tr: { scriptPathLevel: 1 },
|
|
93
|
-
p2trMusig2: { scriptPathLevel: undefined },
|
|
94
|
-
}).getInputsVSize(), constraints.feeRateSatKB),
|
|
95
|
-
feePerOutput: getFee(unspents_1.Dimensions.fromOutputOnChain(outputs.changeOutputs[0].chain).getOutputsVSize(), constraints.feeRateSatKB),
|
|
133
|
+
feeFixed: getFee(TX_SEGWIT_OVERHEAD_VSIZE + inputsVSize, constraints.feeRateSatKB),
|
|
134
|
+
feePerOutput: getFee(outputVSize, constraints.feeRateSatKB),
|
|
96
135
|
});
|
|
97
136
|
return layout ? { inputs, layout } : undefined;
|
|
98
137
|
}
|
|
@@ -128,7 +167,7 @@ class ErrorNoLayout extends Error {
|
|
|
128
167
|
}
|
|
129
168
|
exports.ErrorNoLayout = ErrorNoLayout;
|
|
130
169
|
/**
|
|
131
|
-
* @param
|
|
170
|
+
* @param networkOrCoinName - Coin name (e.g., "btc", "tbtc") or utxo-lib Network object
|
|
132
171
|
* @param inputBuilder
|
|
133
172
|
* @param unspent
|
|
134
173
|
* @param satPoint
|
|
@@ -137,7 +176,7 @@ exports.ErrorNoLayout = ErrorNoLayout;
|
|
|
137
176
|
* @param supplementaryUnspents - additional inputs to cover fee.
|
|
138
177
|
* @param [minimizeInputs=true] - try to find input combination with minimal fees. Limits supplementaryUnspents to 4.
|
|
139
178
|
*/
|
|
140
|
-
function createPsbtForSingleInscriptionPassingTransaction(
|
|
179
|
+
function createPsbtForSingleInscriptionPassingTransaction(networkOrCoinName, inputBuilder, unspent, satPoint, outputs, constraints, { supplementaryUnspents = [], minimizeInputs = true, } = {}) {
|
|
141
180
|
// support for legacy call style
|
|
142
181
|
if (Array.isArray(unspent)) {
|
|
143
182
|
if (unspent.length !== 1) {
|
|
@@ -149,6 +188,6 @@ function createPsbtForSingleInscriptionPassingTransaction(network, inputBuilder,
|
|
|
149
188
|
if (!result) {
|
|
150
189
|
throw new ErrorNoLayout();
|
|
151
190
|
}
|
|
152
|
-
return createPsbtFromOutputLayout(
|
|
191
|
+
return createPsbtFromOutputLayout(networkOrCoinName, inputBuilder, result.inputs, outputs, result.layout);
|
|
153
192
|
}
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThDQSxnRUE4Q0M7QUFrQkQsOEVBa0RDO0FBa0RELDRHQW9DQztBQXRQRCw4Q0FBMEQ7QUFDMUQsOENBQTJEO0FBRTNELDJDQUF3QztBQUN4Qyx5Q0FBcUQ7QUFDckQseUNBQXNDO0FBQ3RDLGlEQUFpRztBQUNqRyxpREFBMEM7QUFpQzdCLFFBQUEsNkJBQTZCLEdBQUc7SUFDM0MsZUFBZSxFQUFFLE1BQU0sQ0FBQyxLQUFNLENBQUM7SUFDL0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLEtBQU0sQ0FBQztJQUNwQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsS0FBTSxDQUFDO0NBQ3JDLENBQUM7QUFFRixTQUFnQiwwQkFBMEIsQ0FDeEMsT0FBZ0IsRUFDaEIsWUFBZ0MsRUFDaEMsUUFBeUIsRUFDekIsT0FBc0MsRUFDdEMsWUFBMEI7SUFFMUIsTUFBTSxJQUFJLEdBQUcsZ0JBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNyQixnQkFBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FDM0csQ0FBQztJQUNGLE1BQU0sUUFBUSxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUkscUJB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QUMsSUFBSSxDQUFDO0lBQ3JFLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQWEsYUFBYyxTQUFRLEtBQUs7SUFDdEM7UUFDRSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0NBQ0Y7QUFKRCxzQ0FJQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGdEQUFnRCxDQUM5RCxPQUFnQixFQUNoQixZQUFnQyxFQUNoQyxPQUF3QyxFQUN4QyxRQUFrQixFQUNsQixPQUFzQyxFQUN0QyxXQUE4QyxFQUM5QyxFQUNFLHFCQUFxQixHQUFHLEVBQUUsRUFDMUIsY0FBYyxHQUFHLElBQUksTUFJbkIsRUFBRTtJQUVOLGdDQUFnQztJQUNoQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxpQ0FBaUMsQ0FDOUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxFQUNuQyxRQUFRLEVBQ1IsT0FBTyxFQUNQLFdBQVcsRUFDWCxFQUFFLGNBQWMsRUFBRSxDQUNuQixDQUFDO0lBRUYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxPQUFPLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZXR3b3JrLCBiaXRnbywgYWRkcmVzcyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBEaW1lbnNpb25zLCBWaXJ0dWFsU2l6ZXMgfSBmcm9tICdAYml0Z28vdW5zcGVudHMnO1xuXG5pbXBvcnQgeyBPcmRPdXRwdXQgfSBmcm9tICcuL09yZE91dHB1dCc7XG5pbXBvcnQgeyBwYXJzZVNhdFBvaW50LCBTYXRQb2ludCB9IGZyb20gJy4vU2F0UG9pbnQnO1xuaW1wb3J0IHsgU2F0UmFuZ2UgfSBmcm9tICcuL1NhdFJhbmdlJztcbmltcG9ydCB7IGdldE9yZE91dHB1dHNGb3JMYXlvdXQsIE91dHB1dExheW91dCwgdG9BcnJheSwgZmluZE91dHB1dExheW91dCB9IGZyb20gJy4vT3V0cHV0TGF5b3V0JztcbmltcG9ydCB7IHBvd2Vyc2V0IH0gZnJvbSAnLi9jb21iaW5hdGlvbnMnO1xuXG50eXBlIFdhbGxldFVuc3BlbnQgPSBiaXRnby5XYWxsZXRVbnNwZW50PGJpZ2ludD47XG5cbmV4cG9ydCB0eXBlIFdhbGxldE91dHB1dFBhdGggPSB7XG4gIGNoYWluOiBiaXRnby5DaGFpbkNvZGU7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBXYWxsZXRJbnB1dEJ1aWxkZXIgPSB7XG4gIHdhbGxldEtleXM6IGJpdGdvLlJvb3RXYWxsZXRLZXlzO1xuICBzaWduZXI6IGJpdGdvLktleU5hbWU7XG4gIGNvc2lnbmVyOiBiaXRnby5LZXlOYW1lO1xufTtcblxuLyoqXG4gKiBEZXNjcmliZXMgYWxsIG91dHB1dHMgb2YgYW4gaW5zY3JpcHRpb24gdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgSW5zY3JpcHRpb25UcmFuc2FjdGlvbk91dHB1dHMgPSB7XG4gIGluc2NyaXB0aW9uUmVjaXBpZW50OiBzdHJpbmcgfCBCdWZmZXI7XG4gIGNoYW5nZU91dHB1dHM6IFtXYWxsZXRPdXRwdXRQYXRoLCBXYWxsZXRPdXRwdXRQYXRoXTtcbn07XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IHR5cGUgSW5zY3JpcHRpb25PdXRwdXRzID0gSW5zY3JpcHRpb25UcmFuc2FjdGlvbk91dHB1dHM7XG5cbmV4cG9ydCB0eXBlIEluc2NyaXB0aW9uVHJhbnNhY3Rpb25Db25zdHJhaW50cyA9IHtcbiAgZmVlUmF0ZVNhdEtCOiBudW1iZXI7XG4gIG1pbkNoYW5nZU91dHB1dD86IGJpZ2ludDtcbiAgbWluSW5zY3JpcHRpb25PdXRwdXQ/OiBiaWdpbnQ7XG4gIG1heEluc2NyaXB0aW9uT3V0cHV0PzogYmlnaW50O1xufTtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRJbnNjcmlwdGlvbkNvbnN0cmFpbnRzID0ge1xuICBtaW5DaGFuZ2VPdXRwdXQ6IEJpZ0ludCgxMF8wMDApLFxuICBtaW5JbnNjcmlwdGlvbk91dHB1dDogQmlnSW50KDEwXzAwMCksXG4gIG1heEluc2NyaXB0aW9uT3V0cHV0OiBCaWdJbnQoMjBfMDAwKSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQc2J0RnJvbU91dHB1dExheW91dChcbiAgbmV0d29yazogTmV0d29yayxcbiAgaW5wdXRCdWlsZGVyOiBXYWxsZXRJbnB1dEJ1aWxkZXIsXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50W10sXG4gIG91dHB1dHM6IEluc2NyaXB0aW9uVHJhbnNhY3Rpb25PdXRwdXRzLFxuICBvdXRwdXRMYXlvdXQ6IE91dHB1dExheW91dFxuKTogYml0Z28uVXR4b1BzYnQge1xuICBjb25zdCBwc2J0ID0gYml0Z28uY3JlYXRlUHNidEZvck5ldHdvcmsoeyBuZXR3b3JrOiBuZXR3b3JrIH0pO1xuICBpZiAodW5zcGVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHByb3ZpZGUgYXQgbGVhc3Qgb25lIHVuc3BlbnRgKTtcbiAgfVxuICB1bnNwZW50cy5mb3JFYWNoKCh1KSA9PlxuICAgIGJpdGdvLmFkZFdhbGxldFVuc3BlbnRUb1BzYnQocHNidCwgdSwgaW5wdXRCdWlsZGVyLndhbGxldEtleXMsIGlucHV0QnVpbGRlci5zaWduZXIsIGlucHV0QnVpbGRlci5jb3NpZ25lcilcbiAgKTtcbiAgY29uc3Qgb3JkSW5wdXQgPSBPcmRPdXRwdXQuam9pbkFsbCh1bnNwZW50cy5tYXAoKHUpID0+IG5ldyBPcmRPdXRwdXQodS52YWx1ZSkpKTtcbiAgY29uc3Qgb3JkT3V0cHV0cyA9IGdldE9yZE91dHB1dHNGb3JMYXlvdXQob3JkSW5wdXQsIG91dHB1dExheW91dCk7XG4gIHRvQXJyYXkob3JkT3V0cHV0cykuZm9yRWFjaCgob3JkT3V0cHV0KSA9PiB7XG4gICAgaWYgKG9yZE91dHB1dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKG9yZE91dHB1dCkge1xuICAgICAgLy8gc2tpcCBwYWRkaW5nIG91dHB1dHMgYW5kIGZlZSBvdXRwdXQgKHZpcnR1YWwpXG4gICAgICBjYXNlIG51bGw6XG4gICAgICBjYXNlIG9yZE91dHB1dHMuZmVlT3V0cHV0OlxuICAgICAgICByZXR1cm47XG4gICAgICAvLyBhZGQgcGFkZGluZyBvdXRwdXRzXG4gICAgICBjYXNlIG9yZE91dHB1dHMuZmlyc3RDaGFuZ2VPdXRwdXQ6XG4gICAgICBjYXNlIG9yZE91dHB1dHMuc2Vjb25kQ2hhbmdlT3V0cHV0OlxuICAgICAgICBjb25zdCB7IGNoYWluLCBpbmRleCB9ID1cbiAgICAgICAgICBvcmRPdXRwdXQgPT09IG9yZE91dHB1dHMuZmlyc3RDaGFuZ2VPdXRwdXQgPyBvdXRwdXRzLmNoYW5nZU91dHB1dHNbMF0gOiBvdXRwdXRzLmNoYW5nZU91dHB1dHNbMV07XG4gICAgICAgIGJpdGdvLmFkZFdhbGxldE91dHB1dFRvUHNidChwc2J0LCBpbnB1dEJ1aWxkZXIud2FsbGV0S2V5cywgY2hhaW4sIGluZGV4LCBvcmRPdXRwdXQudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGFkZCBhY3R1YWwgaW5zY3JpcHRpb24gb3V0cHV0XG4gICAgICBjYXNlIG9yZE91dHB1dHMuaW5zY3JpcHRpb25PdXRwdXQ6XG4gICAgICAgIGxldCB7IGluc2NyaXB0aW9uUmVjaXBpZW50IH0gPSBvdXRwdXRzO1xuICAgICAgICBpZiAodHlwZW9mIGluc2NyaXB0aW9uUmVjaXBpZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGluc2NyaXB0aW9uUmVjaXBpZW50ID0gYWRkcmVzcy50b091dHB1dFNjcmlwdChpbnNjcmlwdGlvblJlY2lwaWVudCwgbmV0d29yayk7XG4gICAgICAgIH1cbiAgICAgICAgcHNidC5hZGRPdXRwdXQoe1xuICAgICAgICAgIHNjcmlwdDogaW5zY3JpcHRpb25SZWNpcGllbnQsXG4gICAgICAgICAgdmFsdWU6IG9yZE91dHB1dC52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwc2J0O1xufVxuXG5mdW5jdGlvbiB0b1NhdFJhbmdlKHA6IFNhdFBvaW50KSB7XG4gIGNvbnN0IHsgb2Zmc2V0IH0gPSBwYXJzZVNhdFBvaW50KHApO1xuICByZXR1cm4gbmV3IFNhdFJhbmdlKG9mZnNldCwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gZ2V0RmVlKHZzaXplOiBudW1iZXIsIHJhdGVTYXRQZXJLQjogbnVtYmVyKTogYmlnaW50IHtcbiAgcmV0dXJuIEJpZ0ludChNYXRoLmNlaWwoKHZzaXplICogcmF0ZVNhdFBlcktCKSAvIDEwMDApKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gaW5wdXRzIC0gaW5zY3JpcHRpb24gaW5wdXQgbXVzdCBjb21lIGZpcnN0XG4gKiBAcGFyYW0gc2F0UG9pbnQgLSBsb2NhdGlvbiBvZiB0aGUgaW5zY3JpcHRpb25cbiAqIEBwYXJhbSBvdXRwdXRzXG4gKiBAcGFyYW0gY29uc3RyYWludHNcbiAqIEBwYXJhbSBtaW5pbWl6ZUlucHV0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE91dHB1dExheW91dEZvcldhbGxldFVuc3BlbnRzKFxuICBpbnB1dHM6IFdhbGxldFVuc3BlbnRbXSxcbiAgc2F0UG9pbnQ6IFNhdFBvaW50LFxuICBvdXRwdXRzOiBJbnNjcmlwdGlvblRyYW5zYWN0aW9uT3V0cHV0cyxcbiAgY29uc3RyYWludHM6IEluc2NyaXB0aW9uVHJhbnNhY3Rpb25Db25zdHJhaW50cyxcbiAgeyBtaW5pbWl6ZUlucHV0cyA9IGZhbHNlIH0gPSB7fVxuKTogeyBpbnB1dHM6IFdhbGxldFVuc3BlbnRbXTsgbGF5b3V0OiBPdXRwdXRMYXlvdXQgfSB8IHVuZGVmaW5lZCB7XG4gIGlmIChtaW5pbWl6ZUlucHV0cykge1xuICAgIHJldHVybiBmaW5kU21hbGxlc3RPdXRwdXRMYXlvdXRGb3JXYWxsZXRVbnNwZW50cyhpbnB1dHMsIHNhdFBvaW50LCBvdXRwdXRzLCBjb25zdHJhaW50cyk7XG4gIH1cblxuICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBpbnB1dGApO1xuICB9XG5cbiAgaWYgKG91dHB1dHMuY2hhbmdlT3V0cHV0c1swXS5jaGFpbiAhPT0gb3V0cHV0cy5jaGFuZ2VPdXRwdXRzWzFdLmNoYWluKSB7XG4gICAgLy8gb3RoZXJ3aXNlIG91ciBmZWUgY2FsYyBpcyB0b28gY29tcGxpY2F0ZWRcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHdhbGxldCBvdXRwdXRzIG11c3QgYmUgb24gc2FtZSBjaGFpbmApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIG1pbkNoYW5nZU91dHB1dCA9IERlZmF1bHRJbnNjcmlwdGlvbkNvbnN0cmFpbnRzLm1pbkNoYW5nZU91dHB1dCxcbiAgICBtaW5JbnNjcmlwdGlvbk91dHB1dCA9IERlZmF1bHRJbnNjcmlwdGlvbkNvbnN0cmFpbnRzLm1pbkluc2NyaXB0aW9uT3V0cHV0LFxuICAgIG1heEluc2NyaXB0aW9uT3V0cHV0ID0gRGVmYXVsdEluc2NyaXB0aW9uQ29uc3RyYWludHMubWF4SW5zY3JpcHRpb25PdXRwdXQsXG4gIH0gPSBjb25zdHJhaW50cztcblxuICAvLyBKb2luIGFsbCB0aGUgaW5wdXRzIGludG8gYSBzaW5nbGUgaW5zY3JpcHRpb25PdXRwdXQuXG4gIC8vIEZvciB0aGUgcHVycG9zZXMgb2YgZmluZGluZyBhIGxheW91dCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlLlxuICBjb25zdCBpbnNjcmlwdGlvbk91dHB1dCA9IE9yZE91dHB1dC5qb2luQWxsKFxuICAgIGlucHV0cy5tYXAoKGkpID0+IG5ldyBPcmRPdXRwdXQoaS52YWx1ZSwgaSA9PT0gaW5wdXRzWzBdID8gW3RvU2F0UmFuZ2Uoc2F0UG9pbnQpXSA6IFtdKSlcbiAgKTtcbiAgY29uc3QgbGF5b3V0ID0gZmluZE91dHB1dExheW91dChpbnNjcmlwdGlvbk91dHB1dCwge1xuICAgIG1pbkNoYW5nZU91dHB1dCxcbiAgICBtaW5JbnNjcmlwdGlvbk91dHB1dCxcbiAgICBtYXhJbnNjcmlwdGlvbk91dHB1dCxcbiAgICBmZWVGaXhlZDogZ2V0RmVlKFxuICAgICAgVmlydHVhbFNpemVzLnR4U2VnT3ZlcmhlYWRWU2l6ZSArXG4gICAgICAgIERpbWVuc2lvbnMuZnJvbVVuc3BlbnRzKGlucHV0cywge1xuICAgICAgICAgIHAydHI6IHsgc2NyaXB0UGF0aExldmVsOiAxIH0sXG4gICAgICAgICAgcDJ0ck11c2lnMjogeyBzY3JpcHRQYXRoTGV2ZWw6IHVuZGVmaW5lZCB9LFxuICAgICAgICB9KS5nZXRJbnB1dHNWU2l6ZSgpLFxuICAgICAgY29uc3RyYWludHMuZmVlUmF0ZVNhdEtCXG4gICAgKSxcbiAgICBmZWVQZXJPdXRwdXQ6IGdldEZlZShcbiAgICAgIERpbWVuc2lvbnMuZnJvbU91dHB1dE9uQ2hhaW4ob3V0cHV0cy5jaGFuZ2VPdXRwdXRzWzBdLmNoYWluKS5nZXRPdXRwdXRzVlNpemUoKSxcbiAgICAgIGNvbnN0cmFpbnRzLmZlZVJhdGVTYXRLQlxuICAgICksXG4gIH0pO1xuXG4gIHJldHVybiBsYXlvdXQgPyB7IGlucHV0cywgbGF5b3V0IH0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBNQVhfVU5TUEVOVFNfRk9SX09VVFBVVF9MQVlPVVQgPSA1O1xuXG4vKipcbiAqIEBwYXJhbSBpbnB1dHMgLSBpbnNjcmlwdGlvbiBpbnB1dCBtdXN0IGNvbWUgZmlyc3RcbiAqIEBwYXJhbSBzYXRQb2ludCAtIGxvY2F0aW9uIG9mIHRoZSBpbnNjcmlwdGlvblxuICogQHBhcmFtIG91dHB1dHNcbiAqIEBwYXJhbSBjb25zdHJhaW50c1xuICovXG5mdW5jdGlvbiBmaW5kU21hbGxlc3RPdXRwdXRMYXlvdXRGb3JXYWxsZXRVbnNwZW50cyhcbiAgaW5wdXRzOiBXYWxsZXRVbnNwZW50W10sXG4gIHNhdFBvaW50OiBTYXRQb2ludCxcbiAgb3V0cHV0czogSW5zY3JpcHRpb25UcmFuc2FjdGlvbk91dHB1dHMsXG4gIGNvbnN0cmFpbnRzOiBJbnNjcmlwdGlvblRyYW5zYWN0aW9uQ29uc3RyYWludHNcbik6IHsgaW5wdXRzOiBXYWxsZXRVbnNwZW50W107IGxheW91dDogT3V0cHV0TGF5b3V0IH0gfCB1bmRlZmluZWQge1xuICBpZiAoTUFYX1VOU1BFTlRTX0ZPUl9PVVRQVVRfTEFZT1VUIDwgaW5wdXRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW5wdXQgYXJyYXkgaXMgdG9vIGxhcmdlYCk7XG4gIH1cbiAgLy8gY3JlYXRlIHBvd2Vyc2V0IG9mIGFsbCBzdXBwbGVtZW50YXJ5IGlucHV0cyBhbmQgZmluZCB0aGUgY2hlYXBlc3QgcmVzdWx0XG4gIGNvbnN0IGlucHV0c0FyciA9IFtpbnB1dHMsIC4uLnBvd2Vyc2V0KGlucHV0cy5zbGljZSgxKSkubWFwKChzKSA9PiBbaW5wdXRzWzBdLCAuLi5zXSldO1xuICByZXR1cm4gaW5wdXRzQXJyXG4gICAgLm1hcCgoaW5wdXRzKSA9PiBmaW5kT3V0cHV0TGF5b3V0Rm9yV2FsbGV0VW5zcGVudHMoaW5wdXRzLCBzYXRQb2ludCwgb3V0cHV0cywgY29uc3RyYWludHMpKVxuICAgIC5yZWR1Y2UoKGJlc3QsIG5leHQpID0+IHtcbiAgICAgIGlmIChiZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICB9XG4gICAgICBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBiZXN0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJlc3QubGF5b3V0LmZlZU91dHB1dCA8IG5leHQubGF5b3V0LmZlZU91dHB1dCA/IGJlc3QgOiBuZXh0O1xuICAgIH0pO1xufVxuXG5leHBvcnQgY2xhc3MgRXJyb3JOb0xheW91dCBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0NvdWxkIG5vdCBmaW5kIG91dHB1dCBsYXlvdXQgZm9yIGluc2NyaXB0aW9uIHBhc3NpbmcgdHJhbnNhY3Rpb24nKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBuZXR3b3JrXG4gKiBAcGFyYW0gaW5wdXRCdWlsZGVyXG4gKiBAcGFyYW0gdW5zcGVudFxuICogQHBhcmFtIHNhdFBvaW50XG4gKiBAcGFyYW0gb3V0cHV0c1xuICogQHBhcmFtIGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0gc3VwcGxlbWVudGFyeVVuc3BlbnRzIC0gYWRkaXRpb25hbCBpbnB1dHMgdG8gY292ZXIgZmVlLlxuICogQHBhcmFtIFttaW5pbWl6ZUlucHV0cz10cnVlXSAtIHRyeSB0byBmaW5kIGlucHV0IGNvbWJpbmF0aW9uIHdpdGggbWluaW1hbCBmZWVzLiBMaW1pdHMgc3VwcGxlbWVudGFyeVVuc3BlbnRzIHRvIDQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQc2J0Rm9yU2luZ2xlSW5zY3JpcHRpb25QYXNzaW5nVHJhbnNhY3Rpb24oXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIGlucHV0QnVpbGRlcjogV2FsbGV0SW5wdXRCdWlsZGVyLFxuICB1bnNwZW50OiBXYWxsZXRVbnNwZW50IHwgV2FsbGV0VW5zcGVudFtdLFxuICBzYXRQb2ludDogU2F0UG9pbnQsXG4gIG91dHB1dHM6IEluc2NyaXB0aW9uVHJhbnNhY3Rpb25PdXRwdXRzLFxuICBjb25zdHJhaW50czogSW5zY3JpcHRpb25UcmFuc2FjdGlvbkNvbnN0cmFpbnRzLFxuICB7XG4gICAgc3VwcGxlbWVudGFyeVVuc3BlbnRzID0gW10sXG4gICAgbWluaW1pemVJbnB1dHMgPSB0cnVlLFxuICB9OiB7XG4gICAgc3VwcGxlbWVudGFyeVVuc3BlbnRzPzogV2FsbGV0VW5zcGVudFtdO1xuICAgIG1pbmltaXplSW5wdXRzPzogYm9vbGVhbjtcbiAgfSA9IHt9XG4pOiBiaXRnby5VdHhvUHNidCB7XG4gIC8vIHN1cHBvcnQgZm9yIGxlZ2FjeSBjYWxsIHN0eWxlXG4gIGlmIChBcnJheS5pc0FycmF5KHVuc3BlbnQpKSB7XG4gICAgaWYgKHVuc3BlbnQubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbiBvbmx5IHBhc3Mgc2luZ2xlIHVuc3BlbnRgKTtcbiAgICB9XG4gICAgdW5zcGVudCA9IHVuc3BlbnRbMF07XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBmaW5kT3V0cHV0TGF5b3V0Rm9yV2FsbGV0VW5zcGVudHMoXG4gICAgW3Vuc3BlbnQsIC4uLnN1cHBsZW1lbnRhcnlVbnNwZW50c10sXG4gICAgc2F0UG9pbnQsXG4gICAgb3V0cHV0cyxcbiAgICBjb25zdHJhaW50cyxcbiAgICB7IG1pbmltaXplSW5wdXRzIH1cbiAgKTtcblxuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvck5vTGF5b3V0KCk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUHNidEZyb21PdXRwdXRMYXlvdXQobmV0d29yaywgaW5wdXRCdWlsZGVyLCByZXN1bHQuaW5wdXRzLCBvdXRwdXRzLCByZXN1bHQubGF5b3V0KTtcbn1cbiJdfQ==
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZGQSxnRUF5REM7QUFrQkQsOEVBcURDO0FBa0RELDRHQW9DQztBQW5URCxnREFBZ0Y7QUFFaEYsMkNBQXdDO0FBQ3hDLHlDQUFvRTtBQUNwRSx5Q0FBc0M7QUFDdEMsaURBQWlHO0FBQ2pHLGlEQUEwQztBQUkxQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLDZCQUFpQixDQUFDO0FBYW5EOztHQUVHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxPQUF1QjtJQUNoRCxrQkFBa0I7SUFDbEIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELGtCQUFrQjtJQUNsQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDMUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsaUJBQWlCLENBQUMsaUJBQTRDO0lBQ3JFLElBQUksT0FBTyxpQkFBaUIsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7SUFDRCxPQUFPLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELG1EQUFtRDtBQUNuRCxNQUFNLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQXNDdkIsUUFBQSw2QkFBNkIsR0FBRztJQUMzQyxlQUFlLEVBQUUsTUFB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LE9BQU8sRUFBRSxHQUFHLHFCQUFxQixDQUFDLEVBQ25DLFFBQVEsRUFDUixPQUFPLEVBQ1AsV0FBVyxFQUNYLEVBQUUsY0FBYyxFQUFFLENBQ25CLENBQUM7SUFFRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksYUFBYSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELE9BQU8sMEJBQTBCLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQsIERpbWVuc2lvbnMsIHR5cGUgQ29pbk5hbWUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgT3JkT3V0cHV0IH0gZnJvbSAnLi9PcmRPdXRwdXQnO1xuaW1wb3J0IHsgcGFyc2VTYXRQb2ludCwgcGFyc2VPdXRwdXRJZCwgU2F0UG9pbnQgfSBmcm9tICcuL1NhdFBvaW50JztcbmltcG9ydCB7IFNhdFJhbmdlIH0gZnJvbSAnLi9TYXRSYW5nZSc7XG5pbXBvcnQgeyBnZXRPcmRPdXRwdXRzRm9yTGF5b3V0LCBPdXRwdXRMYXlvdXQsIHRvQXJyYXksIGZpbmRPdXRwdXRMYXlvdXQgfSBmcm9tICcuL091dHB1dExheW91dCc7XG5pbXBvcnQgeyBwb3dlcnNldCB9IGZyb20gJy4vY29tYmluYXRpb25zJztcblxudHlwZSBXYWxsZXRLZXlzQXJnID0gZml4ZWRTY3JpcHRXYWxsZXQuV2FsbGV0S2V5c0FyZztcbnR5cGUgU2lnblBhdGggPSBmaXhlZFNjcmlwdFdhbGxldC5TaWduUGF0aDtcbmNvbnN0IHsgQml0R29Qc2J0LCBDaGFpbkNvZGUgfSA9IGZpeGVkU2NyaXB0V2FsbGV0O1xuXG4vKipcbiAqIE5ldHdvcmsgdHlwZSBmcm9tIHV0eG8tbGliIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG50eXBlIFV0eG9saWJOZXR3b3JrID0ge1xuICBtZXNzYWdlUHJlZml4Pzogc3RyaW5nO1xuICBiZWNoMzI/OiBzdHJpbmc7XG4gIHB1YktleUhhc2g6IG51bWJlcjtcbiAgc2NyaXB0SGFzaDogbnVtYmVyO1xuICB3aWY6IG51bWJlcjtcbn07XG5cbi8qKlxuICogTWFwIHV0eG8tbGliIG5ldHdvcmsgb2JqZWN0cyB0byBDb2luTmFtZSBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBuZXR3b3JrVG9Db2luTmFtZShuZXR3b3JrOiBVdHhvbGliTmV0d29yayk6IENvaW5OYW1lIHtcbiAgLy8gQml0Y29pbiBtYWlubmV0XG4gIGlmIChuZXR3b3JrLmJlY2gzMiA9PT0gJ2JjJyAmJiBuZXR3b3JrLnB1YktleUhhc2ggPT09IDApIHtcbiAgICByZXR1cm4gJ2J0Yyc7XG4gIH1cbiAgLy8gQml0Y29pbiB0ZXN0bmV0XG4gIGlmIChuZXR3b3JrLmJlY2gzMiA9PT0gJ3RiJyAmJiBuZXR3b3JrLnB1YktleUhhc2ggPT09IDExMSkge1xuICAgIHJldHVybiAndGJ0Yyc7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG5ldHdvcms6ICR7SlNPTi5zdHJpbmdpZnkobmV0d29yayl9YCk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIG5ldHdvcmsgcGFyYW1ldGVyIC0gYWNjZXB0cyBlaXRoZXIgQ29pbk5hbWUgc3RyaW5nIG9yIHV0eG8tbGliIE5ldHdvcmsgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb2luTmFtZShuZXR3b3JrT3JDb2luTmFtZTogQ29pbk5hbWUgfCBVdHhvbGliTmV0d29yayk6IENvaW5OYW1lIHtcbiAgaWYgKHR5cGVvZiBuZXR3b3JrT3JDb2luTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbmV0d29ya09yQ29pbk5hbWU7XG4gIH1cbiAgcmV0dXJuIG5ldHdvcmtUb0NvaW5OYW1lKG5ldHdvcmtPckNvaW5OYW1lKTtcbn1cblxuLyoqIFNlZ3dpdCB0cmFuc2FjdGlvbiBvdmVyaGVhZCBpbiB2aXJ0dWFsIGJ5dGVzICovXG5jb25zdCBUWF9TRUdXSVRfT1ZFUkhFQURfVlNJWkUgPSAxMDtcblxuZXhwb3J0IHR5cGUgV2FsbGV0VW5zcGVudCA9IHtcbiAgaWQ6IHN0cmluZzsgLy8gXCJ0eGlkOnZvdXRcIlxuICB2YWx1ZTogYmlnaW50O1xuICBjaGFpbjogbnVtYmVyO1xuICBpbmRleDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgV2FsbGV0T3V0cHV0UGF0aCA9IHtcbiAgY2hhaW46IGZpeGVkU2NyaXB0V2FsbGV0LkNoYWluQ29kZTtcbiAgaW5kZXg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFdhbGxldElucHV0QnVpbGRlciA9IHtcbiAgd2FsbGV0S2V5czogV2FsbGV0S2V5c0FyZztcbiAgc2lnbmVyOiBTaWduUGF0aFsnc2lnbmVyJ107XG4gIGNvc2lnbmVyOiBTaWduUGF0aFsnY29zaWduZXInXTtcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIGFsbCBvdXRwdXRzIG9mIGFuIGluc2NyaXB0aW9uIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIEluc2NyaXB0aW9uVHJhbnNhY3Rpb25PdXRwdXRzID0ge1xuICBpbnNjcmlwdGlvblJlY2lwaWVudDogc3RyaW5nIHwgVWludDhBcnJheTtcbiAgY2hhbmdlT3V0cHV0czogW1dhbGxldE91dHB1dFBhdGgsIFdhbGxldE91dHB1dFBhdGhdO1xufTtcblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgdHlwZSBJbnNjcmlwdGlvbk91dHB1dHMgPSBJbnNjcmlwdGlvblRyYW5zYWN0aW9uT3V0cHV0cztcblxuZXhwb3J0IHR5cGUgSW5zY3JpcHRpb25UcmFuc2FjdGlvbkNvbnN0cmFpbnRzID0ge1xuICBmZWVSYXRlU2F0S0I6IG51bWJlcjtcbiAgbWluQ2hhbmdlT3V0cHV0PzogYmlnaW50O1xuICBtaW5JbnNjcmlwdGlvbk91dHB1dD86IGJpZ2ludDtcbiAgbWF4SW5zY3JpcHRpb25PdXRwdXQ/OiBiaWdpbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdEluc2NyaXB0aW9uQ29uc3RyYWludHMgPSB7XG4gIG1pbkNoYW5nZU91dHB1dDogQmlnSW50KDEwXzAwMCksXG4gIG1pbkluc2NyaXB0aW9uT3V0cHV0OiBCaWdJbnQoMTBfMDAwKSxcbiAgbWF4SW5zY3JpcHRpb25PdXRwdXQ6IEJpZ0ludCgyMF8wMDApLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBzYnRGcm9tT3V0cHV0TGF5b3V0KFxuICBuZXR3b3JrT3JDb2luTmFtZTogQ29pbk5hbWUgfCBVdHhvbGliTmV0d29yayxcbiAgaW5wdXRCdWlsZGVyOiBXYWxsZXRJbnB1dEJ1aWxkZXIsXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50W10sXG4gIG91dHB1dHM6IEluc2NyaXB0aW9uVHJhbnNhY3Rpb25PdXRwdXRzLFxuICBvdXRwdXRMYXlvdXQ6IE91dHB1dExheW91dFxuKTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgaWYgKHVuc3BlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSB1bnNwZW50YCk7XG4gIH1cblxuICBjb25zdCBjb2luTmFtZSA9IG5vcm1hbGl6ZUNvaW5OYW1lKG5ldHdvcmtPckNvaW5OYW1lKTtcbiAgY29uc3QgcHNidCA9IEJpdEdvUHNidC5jcmVhdGVFbXB0eShjb2luTmFtZSwgaW5wdXRCdWlsZGVyLndhbGxldEtleXMpO1xuXG4gIC8vIEFkZCBpbnB1dHNcbiAgdW5zcGVudHMuZm9yRWFjaCgodSkgPT4ge1xuICAgIGNvbnN0IHsgdHhpZCwgdm91dCB9ID0gcGFyc2VPdXRwdXRJZCh1LmlkKTtcbiAgICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZCwgdm91dCwgdmFsdWU6IHUudmFsdWUgfSwgaW5wdXRCdWlsZGVyLndhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiB1LmNoYWluLCBpbmRleDogdS5pbmRleCB9LFxuICAgICAgc2lnblBhdGg6IHsgc2lnbmVyOiBpbnB1dEJ1aWxkZXIuc2lnbmVyLCBjb3NpZ25lcjogaW5wdXRCdWlsZGVyLmNvc2lnbmVyIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEJ1aWxkIG9yZCBvdXRwdXRzIGZyb20gbGF5b3V0XG4gIGNvbnN0IG9yZElucHV0ID0gT3JkT3V0cHV0LmpvaW5BbGwodW5zcGVudHMubWFwKCh1KSA9PiBuZXcgT3JkT3V0cHV0KHUudmFsdWUpKSk7XG4gIGNvbnN0IG9yZE91dHB1dHMgPSBnZXRPcmRPdXRwdXRzRm9yTGF5b3V0KG9yZElucHV0LCBvdXRwdXRMYXlvdXQpO1xuXG4gIHRvQXJyYXkob3JkT3V0cHV0cykuZm9yRWFjaCgob3JkT3V0cHV0KSA9PiB7XG4gICAgaWYgKG9yZE91dHB1dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKG9yZE91dHB1dCkge1xuICAgICAgLy8gc2tpcCBmZWUgb3V0cHV0ICh2aXJ0dWFsKVxuICAgICAgY2FzZSBvcmRPdXRwdXRzLmZlZU91dHB1dDpcbiAgICAgICAgcmV0dXJuO1xuICAgICAgLy8gYWRkIHBhZGRpbmcvY2hhbmdlIG91dHB1dHNcbiAgICAgIGNhc2Ugb3JkT3V0cHV0cy5maXJzdENoYW5nZU91dHB1dDpcbiAgICAgIGNhc2Ugb3JkT3V0cHV0cy5zZWNvbmRDaGFuZ2VPdXRwdXQ6XG4gICAgICAgIGNvbnN0IHsgY2hhaW4sIGluZGV4IH0gPVxuICAgICAgICAgIG9yZE91dHB1dCA9PT0gb3JkT3V0cHV0cy5maXJzdENoYW5nZU91dHB1dCA/IG91dHB1dHMuY2hhbmdlT3V0cHV0c1swXSA6IG91dHB1dHMuY2hhbmdlT3V0cHV0c1sxXTtcbiAgICAgICAgcHNidC5hZGRXYWxsZXRPdXRwdXQoaW5wdXRCdWlsZGVyLndhbGxldEtleXMsIHsgY2hhaW4sIGluZGV4LCB2YWx1ZTogb3JkT3V0cHV0LnZhbHVlIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGFkZCBhY3R1YWwgaW5zY3JpcHRpb24gb3V0cHV0XG4gICAgICBjYXNlIG9yZE91dHB1dHMuaW5zY3JpcHRpb25PdXRwdXQ6XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudCA9IG91dHB1dHMuaW5zY3JpcHRpb25SZWNpcGllbnQ7XG4gICAgICAgIGlmICh0eXBlb2YgcmVjaXBpZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHBzYnQuYWRkT3V0cHV0KHJlY2lwaWVudCwgb3JkT3V0cHV0LnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZWNpcGllbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgICAgcHNidC5hZGRPdXRwdXQocmVjaXBpZW50LCBvcmRPdXRwdXQudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW5zY3JpcHRpb25SZWNpcGllbnQgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcHNidDtcbn1cblxuZnVuY3Rpb24gdG9TYXRSYW5nZShwOiBTYXRQb2ludCkge1xuICBjb25zdCB7IG9mZnNldCB9ID0gcGFyc2VTYXRQb2ludChwKTtcbiAgcmV0dXJuIG5ldyBTYXRSYW5nZShvZmZzZXQsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIGdldEZlZSh2c2l6ZTogbnVtYmVyLCByYXRlU2F0UGVyS0I6IG51bWJlcik6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoTWF0aC5jZWlsKCh2c2l6ZSAqIHJhdGVTYXRQZXJLQikgLyAxMDAwKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGlucHV0cyAtIGluc2NyaXB0aW9uIGlucHV0IG11c3QgY29tZSBmaXJzdFxuICogQHBhcmFtIHNhdFBvaW50IC0gbG9jYXRpb24gb2YgdGhlIGluc2NyaXB0aW9uXG4gKiBAcGFyYW0gb3V0cHV0c1xuICogQHBhcmFtIGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0gbWluaW1pemVJbnB1dHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRPdXRwdXRMYXlvdXRGb3JXYWxsZXRVbnNwZW50cyhcbiAgaW5wdXRzOiBXYWxsZXRVbnNwZW50W10sXG4gIHNhdFBvaW50OiBTYXRQb2ludCxcbiAgb3V0cHV0czogSW5zY3JpcHRpb25UcmFuc2FjdGlvbk91dHB1dHMsXG4gIGNvbnN0cmFpbnRzOiBJbnNjcmlwdGlvblRyYW5zYWN0aW9uQ29uc3RyYWludHMsXG4gIHsgbWluaW1pemVJbnB1dHMgPSBmYWxzZSB9ID0ge31cbik6IHsgaW5wdXRzOiBXYWxsZXRVbnNwZW50W107IGxheW91dDogT3V0cHV0TGF5b3V0IH0gfCB1bmRlZmluZWQge1xuICBpZiAobWluaW1pemVJbnB1dHMpIHtcbiAgICByZXR1cm4gZmluZFNtYWxsZXN0T3V0cHV0TGF5b3V0Rm9yV2FsbGV0VW5zcGVudHMoaW5wdXRzLCBzYXRQb2ludCwgb3V0cHV0cywgY29uc3RyYWludHMpO1xuICB9XG5cbiAgaWYgKGlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBhdCBsZWFzdCBvbmUgaW5wdXRgKTtcbiAgfVxuXG4gIGlmIChvdXRwdXRzLmNoYW5nZU91dHB1dHNbMF0uY2hhaW4gIT09IG91dHB1dHMuY2hhbmdlT3V0cHV0c1sxXS5jaGFpbikge1xuICAgIC8vIG90aGVyd2lzZSBvdXIgZmVlIGNhbGMgaXMgdG9vIGNvbXBsaWNhdGVkXG4gICAgdGhyb3cgbmV3IEVycm9yKGB3YWxsZXQgb3V0cHV0cyBtdXN0IGJlIG9uIHNhbWUgY2hhaW5gKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBtaW5DaGFuZ2VPdXRwdXQgPSBEZWZhdWx0SW5zY3JpcHRpb25Db25zdHJhaW50cy5taW5DaGFuZ2VPdXRwdXQsXG4gICAgbWluSW5zY3JpcHRpb25PdXRwdXQgPSBEZWZhdWx0SW5zY3JpcHRpb25Db25zdHJhaW50cy5taW5JbnNjcmlwdGlvbk91dHB1dCxcbiAgICBtYXhJbnNjcmlwdGlvbk91dHB1dCA9IERlZmF1bHRJbnNjcmlwdGlvbkNvbnN0cmFpbnRzLm1heEluc2NyaXB0aW9uT3V0cHV0LFxuICB9ID0gY29uc3RyYWludHM7XG5cbiAgLy8gQ2FsY3VsYXRlIGlucHV0IHZzaXplIHVzaW5nIHdhc20tdXR4byBEaW1lbnNpb25zXG4gIGNvbnN0IGlucHV0RGltZW5zaW9ucyA9IGlucHV0cy5yZWR1Y2UoXG4gICAgKGRpbXMsIGlucHV0KSA9PiBkaW1zLnBsdXMoRGltZW5zaW9ucy5mcm9tSW5wdXQoeyBjaGFpbjogaW5wdXQuY2hhaW4gfSkpLFxuICAgIERpbWVuc2lvbnMuZW1wdHkoKVxuICApO1xuICBjb25zdCBpbnB1dHNWU2l6ZSA9IGlucHV0RGltZW5zaW9ucy5nZXRJbnB1dFZTaXplKCk7XG5cbiAgLy8gQ2FsY3VsYXRlIG91dHB1dCB2c2l6ZSB1c2luZyB3YXNtLXV0eG8gRGltZW5zaW9uc1xuICBjb25zdCBvdXRwdXREaW1lbnNpb25zID0gRGltZW5zaW9ucy5mcm9tT3V0cHV0KHtcbiAgICBzY3JpcHRUeXBlOiBDaGFpbkNvZGUuc2NyaXB0VHlwZShvdXRwdXRzLmNoYW5nZU91dHB1dHNbMF0uY2hhaW4pLFxuICB9KTtcbiAgY29uc3Qgb3V0cHV0VlNpemUgPSBvdXRwdXREaW1lbnNpb25zLmdldE91dHB1dFZTaXplKCk7XG5cbiAgLy8gSm9pbiBhbGwgdGhlIGlucHV0cyBpbnRvIGEgc2luZ2xlIGluc2NyaXB0aW9uT3V0cHV0LlxuICAvLyBGb3IgdGhlIHB1cnBvc2VzIG9mIGZpbmRpbmcgYSBsYXlvdXQgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZS5cbiAgY29uc3QgaW5zY3JpcHRpb25PdXRwdXQgPSBPcmRPdXRwdXQuam9pbkFsbChcbiAgICBpbnB1dHMubWFwKChpKSA9PiBuZXcgT3JkT3V0cHV0KGkudmFsdWUsIGkgPT09IGlucHV0c1swXSA/IFt0b1NhdFJhbmdlKHNhdFBvaW50KV0gOiBbXSkpXG4gICk7XG4gIGNvbnN0IGxheW91dCA9IGZpbmRPdXRwdXRMYXlvdXQoaW5zY3JpcHRpb25PdXRwdXQsIHtcbiAgICBtaW5DaGFuZ2VPdXRwdXQsXG4gICAgbWluSW5zY3JpcHRpb25PdXRwdXQsXG4gICAgbWF4SW5zY3JpcHRpb25PdXRwdXQsXG4gICAgZmVlRml4ZWQ6IGdldEZlZShUWF9TRUdXSVRfT1ZFUkhFQURfVlNJWkUgKyBpbnB1dHNWU2l6ZSwgY29uc3RyYWludHMuZmVlUmF0ZVNhdEtCKSxcbiAgICBmZWVQZXJPdXRwdXQ6IGdldEZlZShvdXRwdXRWU2l6ZSwgY29uc3RyYWludHMuZmVlUmF0ZVNhdEtCKSxcbiAgfSk7XG5cbiAgcmV0dXJuIGxheW91dCA/IHsgaW5wdXRzLCBsYXlvdXQgfSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IE1BWF9VTlNQRU5UU19GT1JfT1VUUFVUX0xBWU9VVCA9IDU7XG5cbi8qKlxuICogQHBhcmFtIGlucHV0cyAtIGluc2NyaXB0aW9uIGlucHV0IG11c3QgY29tZSBmaXJzdFxuICogQHBhcmFtIHNhdFBvaW50IC0gbG9jYXRpb24gb2YgdGhlIGluc2NyaXB0aW9uXG4gKiBAcGFyYW0gb3V0cHV0c1xuICogQHBhcmFtIGNvbnN0cmFpbnRzXG4gKi9cbmZ1bmN0aW9uIGZpbmRTbWFsbGVzdE91dHB1dExheW91dEZvcldhbGxldFVuc3BlbnRzKFxuICBpbnB1dHM6IFdhbGxldFVuc3BlbnRbXSxcbiAgc2F0UG9pbnQ6IFNhdFBvaW50LFxuICBvdXRwdXRzOiBJbnNjcmlwdGlvblRyYW5zYWN0aW9uT3V0cHV0cyxcbiAgY29uc3RyYWludHM6IEluc2NyaXB0aW9uVHJhbnNhY3Rpb25Db25zdHJhaW50c1xuKTogeyBpbnB1dHM6IFdhbGxldFVuc3BlbnRbXTsgbGF5b3V0OiBPdXRwdXRMYXlvdXQgfSB8IHVuZGVmaW5lZCB7XG4gIGlmIChNQVhfVU5TUEVOVFNfRk9SX09VVFBVVF9MQVlPVVQgPCBpbnB1dHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnB1dCBhcnJheSBpcyB0b28gbGFyZ2VgKTtcbiAgfVxuICAvLyBjcmVhdGUgcG93ZXJzZXQgb2YgYWxsIHN1cHBsZW1lbnRhcnkgaW5wdXRzIGFuZCBmaW5kIHRoZSBjaGVhcGVzdCByZXN1bHRcbiAgY29uc3QgaW5wdXRzQXJyID0gW2lucHV0cywgLi4ucG93ZXJzZXQoaW5wdXRzLnNsaWNlKDEpKS5tYXAoKHMpID0+IFtpbnB1dHNbMF0sIC4uLnNdKV07XG4gIHJldHVybiBpbnB1dHNBcnJcbiAgICAubWFwKChpbnB1dHMpID0+IGZpbmRPdXRwdXRMYXlvdXRGb3JXYWxsZXRVbnNwZW50cyhpbnB1dHMsIHNhdFBvaW50LCBvdXRwdXRzLCBjb25zdHJhaW50cykpXG4gICAgLnJlZHVjZSgoYmVzdCwgbmV4dCkgPT4ge1xuICAgICAgaWYgKGJlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgIH1cbiAgICAgIGlmIChuZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGJlc3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmVzdC5sYXlvdXQuZmVlT3V0cHV0IDwgbmV4dC5sYXlvdXQuZmVlT3V0cHV0ID8gYmVzdCA6IG5leHQ7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvck5vTGF5b3V0IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignQ291bGQgbm90IGZpbmQgb3V0cHV0IGxheW91dCBmb3IgaW5zY3JpcHRpb24gcGFzc2luZyB0cmFuc2FjdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIG5ldHdvcmtPckNvaW5OYW1lIC0gQ29pbiBuYW1lIChlLmcuLCBcImJ0Y1wiLCBcInRidGNcIikgb3IgdXR4by1saWIgTmV0d29yayBvYmplY3RcbiAqIEBwYXJhbSBpbnB1dEJ1aWxkZXJcbiAqIEBwYXJhbSB1bnNwZW50XG4gKiBAcGFyYW0gc2F0UG9pbnRcbiAqIEBwYXJhbSBvdXRwdXRzXG4gKiBAcGFyYW0gY29uc3RyYWludHNcbiAqIEBwYXJhbSBzdXBwbGVtZW50YXJ5VW5zcGVudHMgLSBhZGRpdGlvbmFsIGlucHV0cyB0byBjb3ZlciBmZWUuXG4gKiBAcGFyYW0gW21pbmltaXplSW5wdXRzPXRydWVdIC0gdHJ5IHRvIGZpbmQgaW5wdXQgY29tYmluYXRpb24gd2l0aCBtaW5pbWFsIGZlZXMuIExpbWl0cyBzdXBwbGVtZW50YXJ5VW5zcGVudHMgdG8gNC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBzYnRGb3JTaW5nbGVJbnNjcmlwdGlvblBhc3NpbmdUcmFuc2FjdGlvbihcbiAgbmV0d29ya09yQ29pbk5hbWU6IENvaW5OYW1lIHwgVXR4b2xpYk5ldHdvcmssXG4gIGlucHV0QnVpbGRlcjogV2FsbGV0SW5wdXRCdWlsZGVyLFxuICB1bnNwZW50OiBXYWxsZXRVbnNwZW50IHwgV2FsbGV0VW5zcGVudFtdLFxuICBzYXRQb2ludDogU2F0UG9pbnQsXG4gIG91dHB1dHM6IEluc2NyaXB0aW9uVHJhbnNhY3Rpb25PdXRwdXRzLFxuICBjb25zdHJhaW50czogSW5zY3JpcHRpb25UcmFuc2FjdGlvbkNvbnN0cmFpbnRzLFxuICB7XG4gICAgc3VwcGxlbWVudGFyeVVuc3BlbnRzID0gW10sXG4gICAgbWluaW1pemVJbnB1dHMgPSB0cnVlLFxuICB9OiB7XG4gICAgc3VwcGxlbWVudGFyeVVuc3BlbnRzPzogV2FsbGV0VW5zcGVudFtdO1xuICAgIG1pbmltaXplSW5wdXRzPzogYm9vbGVhbjtcbiAgfSA9IHt9XG4pOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAvLyBzdXBwb3J0IGZvciBsZWdhY3kgY2FsbCBzdHlsZVxuICBpZiAoQXJyYXkuaXNBcnJheSh1bnNwZW50KSkge1xuICAgIGlmICh1bnNwZW50Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4gb25seSBwYXNzIHNpbmdsZSB1bnNwZW50YCk7XG4gICAgfVxuICAgIHVuc3BlbnQgPSB1bnNwZW50WzBdO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gZmluZE91dHB1dExheW91dEZvcldhbGxldFVuc3BlbnRzKFxuICAgIFt1bnNwZW50LCAuLi5zdXBwbGVtZW50YXJ5VW5zcGVudHNdLFxuICAgIHNhdFBvaW50LFxuICAgIG91dHB1dHMsXG4gICAgY29uc3RyYWludHMsXG4gICAgeyBtaW5pbWl6ZUlucHV0cyB9XG4gICk7XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3JOb0xheW91dCgpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVBzYnRGcm9tT3V0cHV0TGF5b3V0KG5ldHdvcmtPckNvaW5OYW1lLCBpbnB1dEJ1aWxkZXIsIHJlc3VsdC5pbnB1dHMsIG91dHB1dHMsIHJlc3VsdC5sYXlvdXQpO1xufVxuIl19
|