@bitgo-beta/abstract-utxo 1.6.1-alpha.456 → 1.6.1-alpha.457
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/abstractUtxoCoin.d.ts +4 -1
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +14 -11
- package/dist/cjs/src/address/fixedScript.d.ts +4 -4
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
- package/dist/cjs/src/address/fixedScript.js +13 -11
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +4 -2
- package/dist/cjs/src/names.d.ts +2 -0
- package/dist/cjs/src/names.d.ts.map +1 -1
- package/dist/cjs/src/names.js +9 -1
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +3 -5
- package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts +2 -1
- package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/TransactionExplanation.js +3 -4
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/descriptor/transaction.js +6 -3
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +8 -7
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts +3 -2
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/crossChainRecovery.js +7 -6
- package/dist/cjs/src/recovery/psbt.d.ts +3 -2
- package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
- package/dist/cjs/src/recovery/psbt.js +5 -4
- package/dist/cjs/src/transaction/bip322.d.ts.map +1 -1
- package/dist/cjs/src/transaction/bip322.js +26 -11
- package/dist/cjs/src/transaction/decode.d.ts +4 -3
- package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
- package/dist/cjs/src/transaction/decode.js +8 -5
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/explainPsbt.js +7 -5
- package/dist/cjs/src/transaction/descriptor/parse.d.ts +2 -1
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.js +14 -14
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +4 -4
- package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/explainTransaction.js +5 -5
- package/dist/cjs/src/transaction/fetchInputs.d.ts +2 -1
- package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fetchInputs.js +4 -2
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +4 -4
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +24 -19
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +3 -3
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +6 -4
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/replayProtection.js +17 -49
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +6 -5
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +4 -4
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +2 -2
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts +3 -3
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.js +6 -39
- package/dist/cjs/src/transaction/recipient.d.ts +4 -4
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
- package/dist/cjs/src/transaction/recipient.js +7 -4
- package/dist/cjs/src/transaction/signTransaction.js +2 -2
- package/dist/cjs/test/unit/address.js +9 -9
- package/dist/cjs/test/unit/bip322.js +319 -3
- package/dist/cjs/test/unit/customChangeWallet.js +2 -2
- package/dist/cjs/test/unit/prebuildAndSign.js +2 -2
- package/dist/cjs/test/unit/recovery/crossChainRecovery.js +6 -7
- package/dist/cjs/test/unit/transaction/descriptor/parse.js +2 -2
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +7 -10
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +4 -5
- package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +3 -2
- package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +5 -6
- package/dist/cjs/test/unit/transaction.js +23 -24
- package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/unspents.js +4 -2
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +4 -1
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +16 -13
- package/dist/esm/address/fixedScript.d.ts +4 -4
- package/dist/esm/address/fixedScript.d.ts.map +1 -1
- package/dist/esm/address/fixedScript.js +13 -11
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/esm/descriptor/assertDescriptorWalletAddress.js +4 -2
- package/dist/esm/names.d.ts +2 -0
- package/dist/esm/names.d.ts.map +1 -1
- package/dist/esm/names.js +7 -1
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +3 -5
- package/dist/esm/offlineVault/TransactionExplanation.d.ts +2 -1
- package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -1
- package/dist/esm/offlineVault/TransactionExplanation.js +3 -4
- package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/esm/offlineVault/descriptor/transaction.js +6 -3
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +8 -7
- package/dist/esm/recovery/crossChainRecovery.d.ts +3 -2
- package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/crossChainRecovery.js +8 -7
- package/dist/esm/recovery/psbt.d.ts +3 -2
- package/dist/esm/recovery/psbt.d.ts.map +1 -1
- package/dist/esm/recovery/psbt.js +5 -4
- package/dist/esm/transaction/bip322.d.ts.map +1 -1
- package/dist/esm/transaction/bip322.js +27 -12
- package/dist/esm/transaction/decode.d.ts +4 -3
- package/dist/esm/transaction/decode.d.ts.map +1 -1
- package/dist/esm/transaction/decode.js +8 -5
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/explainPsbt.js +7 -5
- package/dist/esm/transaction/descriptor/parse.d.ts +2 -1
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parse.js +14 -14
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +2 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.js +4 -4
- package/dist/esm/transaction/explainTransaction.d.ts +2 -1
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/explainTransaction.js +5 -5
- package/dist/esm/transaction/fetchInputs.d.ts +2 -1
- package/dist/esm/transaction/fetchInputs.d.ts.map +1 -1
- package/dist/esm/transaction/fetchInputs.js +4 -2
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +4 -4
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.js +24 -19
- package/dist/esm/transaction/fixedScript/parseTransaction.js +3 -3
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts +6 -4
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/replayProtection.js +17 -16
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +6 -5
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -1
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.js +4 -4
- package/dist/esm/transaction/fixedScript/verifyTransaction.js +2 -2
- package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +3 -3
- package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
- package/dist/esm/transaction/getPayGoVerificationPubkey.js +6 -6
- package/dist/esm/transaction/recipient.d.ts +4 -4
- package/dist/esm/transaction/recipient.d.ts.map +1 -1
- package/dist/esm/transaction/recipient.js +7 -4
- package/dist/esm/transaction/signTransaction.js +2 -2
- package/package.json +12 -12
- package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts +0 -3
- package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +0 -1
- package/dist/cjs/test/unit/transaction/fixedScript/util.js +0 -41
|
@@ -1,10 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
const assert_1 = __importDefault(require("assert"));
|
|
40
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
41
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
7
42
|
const bip322_1 = require("../../src/transaction/bip322");
|
|
43
|
+
function createTestWalletKeys(seed) {
|
|
44
|
+
const keys = utxolib.testutil.getKeyTriple(seed);
|
|
45
|
+
return {
|
|
46
|
+
xpubs: keys.map((k) => k.neutered().toBase58()),
|
|
47
|
+
xprivs: keys.map((k) => k.toBase58()),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function getDerivedPubkeys(seed, chain, index) {
|
|
51
|
+
const keys = utxolib.testutil.getKeyTriple(seed);
|
|
52
|
+
return keys.map((k) => k.derivePath(`m/0/0/${chain}/${index}`).publicKey.toString('hex'));
|
|
53
|
+
}
|
|
54
|
+
function getAddress(walletKeys, chain, index) {
|
|
55
|
+
return wasm_utxo_1.fixedScriptWallet.address(walletKeys, chain, index, utxolib.networks.bitcoin);
|
|
56
|
+
}
|
|
8
57
|
describe('BIP322', function () {
|
|
9
58
|
describe('BIP322MessageBroadcastable', () => {
|
|
10
59
|
it('should serialize and deserialize correctly', () => {
|
|
@@ -14,7 +63,7 @@ describe('BIP322', function () {
|
|
|
14
63
|
{
|
|
15
64
|
address: 'someAddress',
|
|
16
65
|
message: 'someMessage',
|
|
17
|
-
pubkeys: ['pubkey1', 'pubkey2'],
|
|
66
|
+
pubkeys: ['pubkey1', 'pubkey2', 'pubkey3'],
|
|
18
67
|
scriptType: 'p2sh',
|
|
19
68
|
},
|
|
20
69
|
],
|
|
@@ -30,7 +79,7 @@ describe('BIP322', function () {
|
|
|
30
79
|
{
|
|
31
80
|
address: 'someAddress',
|
|
32
81
|
message: 'someMessage',
|
|
33
|
-
pubkeys: ['pubkey1', 'pubkey2'],
|
|
82
|
+
pubkeys: ['pubkey1', 'pubkey2', 'pubkey3'],
|
|
34
83
|
scriptType: 'unsupported',
|
|
35
84
|
},
|
|
36
85
|
],
|
|
@@ -41,5 +90,272 @@ describe('BIP322', function () {
|
|
|
41
90
|
});
|
|
42
91
|
});
|
|
43
92
|
});
|
|
93
|
+
describe('verifyTransactionFromBroadcastableMessage', function () {
|
|
94
|
+
const seed = 'bip322_verify_test';
|
|
95
|
+
const { xpubs, xprivs } = createTestWalletKeys(seed);
|
|
96
|
+
const walletKeys = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(xpubs);
|
|
97
|
+
it('should verify a valid p2shP2wsh PSBT proof', function () {
|
|
98
|
+
const chain = 10;
|
|
99
|
+
const index = 0;
|
|
100
|
+
const messageText = 'Hello, BitGo!';
|
|
101
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
102
|
+
wasm_utxo_1.bip322.addBip322Input(psbt, {
|
|
103
|
+
message: messageText,
|
|
104
|
+
scriptId: { chain, index },
|
|
105
|
+
rootWalletKeys: walletKeys,
|
|
106
|
+
});
|
|
107
|
+
// Sign with user and bitgo keys
|
|
108
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
109
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
110
|
+
const pubkeys = getDerivedPubkeys(seed, chain, index);
|
|
111
|
+
const address = getAddress(walletKeys, chain, index);
|
|
112
|
+
const broadcastable = {
|
|
113
|
+
txHex: Buffer.from(psbt.serialize()).toString('hex'),
|
|
114
|
+
messageInfo: [
|
|
115
|
+
{
|
|
116
|
+
address,
|
|
117
|
+
message: messageText,
|
|
118
|
+
pubkeys,
|
|
119
|
+
scriptType: 'p2shP2wsh',
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
};
|
|
123
|
+
assert_1.default.strictEqual((0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'btc'), true);
|
|
124
|
+
});
|
|
125
|
+
it('should verify a valid p2wsh PSBT proof', function () {
|
|
126
|
+
const chain = 20;
|
|
127
|
+
const index = 5;
|
|
128
|
+
const messageText = 'P2WSH proof test';
|
|
129
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
130
|
+
wasm_utxo_1.bip322.addBip322Input(psbt, {
|
|
131
|
+
message: messageText,
|
|
132
|
+
scriptId: { chain, index },
|
|
133
|
+
rootWalletKeys: walletKeys,
|
|
134
|
+
});
|
|
135
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
136
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
137
|
+
const pubkeys = getDerivedPubkeys(seed, chain, index);
|
|
138
|
+
const address = getAddress(walletKeys, chain, index);
|
|
139
|
+
const broadcastable = {
|
|
140
|
+
txHex: Buffer.from(psbt.serialize()).toString('hex'),
|
|
141
|
+
messageInfo: [
|
|
142
|
+
{
|
|
143
|
+
address,
|
|
144
|
+
message: messageText,
|
|
145
|
+
pubkeys,
|
|
146
|
+
scriptType: 'p2wsh',
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
};
|
|
150
|
+
assert_1.default.strictEqual((0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'btc'), true);
|
|
151
|
+
});
|
|
152
|
+
it('should verify multiple inputs in a single PSBT', function () {
|
|
153
|
+
const messages = ['Message 1', 'Message 2'];
|
|
154
|
+
const scriptIds = [
|
|
155
|
+
{ chain: 10, index: 0 },
|
|
156
|
+
{ chain: 20, index: 1 },
|
|
157
|
+
];
|
|
158
|
+
const scriptTypes = ['p2shP2wsh', 'p2wsh'];
|
|
159
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
160
|
+
for (let i = 0; i < messages.length; i++) {
|
|
161
|
+
wasm_utxo_1.bip322.addBip322Input(psbt, {
|
|
162
|
+
message: messages[i],
|
|
163
|
+
scriptId: scriptIds[i],
|
|
164
|
+
rootWalletKeys: walletKeys,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
// Sign all inputs
|
|
168
|
+
for (let i = 0; i < messages.length; i++) {
|
|
169
|
+
psbt.sign(i, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
170
|
+
psbt.sign(i, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
171
|
+
}
|
|
172
|
+
const messageInfo = messages.map((msg, i) => {
|
|
173
|
+
const pubkeys = getDerivedPubkeys(seed, scriptIds[i].chain, scriptIds[i].index);
|
|
174
|
+
return {
|
|
175
|
+
address: getAddress(walletKeys, scriptIds[i].chain, scriptIds[i].index),
|
|
176
|
+
message: msg,
|
|
177
|
+
pubkeys,
|
|
178
|
+
scriptType: scriptTypes[i],
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
const broadcastable = {
|
|
182
|
+
txHex: Buffer.from(psbt.serialize()).toString('hex'),
|
|
183
|
+
messageInfo,
|
|
184
|
+
};
|
|
185
|
+
assert_1.default.strictEqual((0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'btc'), true);
|
|
186
|
+
});
|
|
187
|
+
it('should return false for wrong message', function () {
|
|
188
|
+
const chain = 10;
|
|
189
|
+
const index = 0;
|
|
190
|
+
const messageText = 'Original message';
|
|
191
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
192
|
+
wasm_utxo_1.bip322.addBip322Input(psbt, {
|
|
193
|
+
message: messageText,
|
|
194
|
+
scriptId: { chain, index },
|
|
195
|
+
rootWalletKeys: walletKeys,
|
|
196
|
+
});
|
|
197
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
198
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
199
|
+
const pubkeys = getDerivedPubkeys(seed, chain, index);
|
|
200
|
+
const address = getAddress(walletKeys, chain, index);
|
|
201
|
+
const broadcastable = {
|
|
202
|
+
txHex: Buffer.from(psbt.serialize()).toString('hex'),
|
|
203
|
+
messageInfo: [
|
|
204
|
+
{
|
|
205
|
+
address,
|
|
206
|
+
message: 'Different message', // Wrong message
|
|
207
|
+
pubkeys,
|
|
208
|
+
scriptType: 'p2shP2wsh',
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
};
|
|
212
|
+
assert_1.default.strictEqual((0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'btc'), false);
|
|
213
|
+
});
|
|
214
|
+
it('should throw for unsupported coin', function () {
|
|
215
|
+
const broadcastable = {
|
|
216
|
+
txHex: '00',
|
|
217
|
+
messageInfo: [],
|
|
218
|
+
};
|
|
219
|
+
assert_1.default.throws(() => (0, bip322_1.verifyTransactionFromBroadcastableMessage)(broadcastable, 'ltc'), /Only tbtc4 or btc coinNames are supported/);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
describe('generateBIP322MessageListAndVerifyFromMessageBroadcastable', function () {
|
|
223
|
+
const seed = 'bip322_generate_test';
|
|
224
|
+
const { xpubs, xprivs } = createTestWalletKeys(seed);
|
|
225
|
+
const walletKeys = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(xpubs);
|
|
226
|
+
it('should generate message list from valid proofs', function () {
|
|
227
|
+
const chain = 10;
|
|
228
|
+
const index = 0;
|
|
229
|
+
const messageText = 'Proof message';
|
|
230
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
231
|
+
wasm_utxo_1.bip322.addBip322Input(psbt, {
|
|
232
|
+
message: messageText,
|
|
233
|
+
scriptId: { chain, index },
|
|
234
|
+
rootWalletKeys: walletKeys,
|
|
235
|
+
});
|
|
236
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
237
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
238
|
+
const pubkeys = getDerivedPubkeys(seed, chain, index);
|
|
239
|
+
const address = getAddress(walletKeys, chain, index);
|
|
240
|
+
const broadcastables = [
|
|
241
|
+
{
|
|
242
|
+
txHex: Buffer.from(psbt.serialize()).toString('hex'),
|
|
243
|
+
messageInfo: [
|
|
244
|
+
{
|
|
245
|
+
address,
|
|
246
|
+
message: messageText,
|
|
247
|
+
pubkeys,
|
|
248
|
+
scriptType: 'p2shP2wsh',
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
},
|
|
252
|
+
];
|
|
253
|
+
const result = (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc');
|
|
254
|
+
assert_1.default.strictEqual(result.length, 1);
|
|
255
|
+
assert_1.default.strictEqual(result[0].address, address);
|
|
256
|
+
assert_1.default.strictEqual(result[0].message, messageText);
|
|
257
|
+
});
|
|
258
|
+
it('should deduplicate addresses with same message', function () {
|
|
259
|
+
const chain = 10;
|
|
260
|
+
const index = 0;
|
|
261
|
+
const messageText = 'Same message';
|
|
262
|
+
// Create two separate PSBTs for the same address/message
|
|
263
|
+
const psbt1 = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
264
|
+
wasm_utxo_1.bip322.addBip322Input(psbt1, {
|
|
265
|
+
message: messageText,
|
|
266
|
+
scriptId: { chain, index },
|
|
267
|
+
rootWalletKeys: walletKeys,
|
|
268
|
+
});
|
|
269
|
+
psbt1.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
270
|
+
psbt1.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
271
|
+
const psbt2 = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
272
|
+
wasm_utxo_1.bip322.addBip322Input(psbt2, {
|
|
273
|
+
message: messageText,
|
|
274
|
+
scriptId: { chain, index },
|
|
275
|
+
rootWalletKeys: walletKeys,
|
|
276
|
+
});
|
|
277
|
+
psbt2.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
278
|
+
psbt2.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
279
|
+
const pubkeys = getDerivedPubkeys(seed, chain, index);
|
|
280
|
+
const address = getAddress(walletKeys, chain, index);
|
|
281
|
+
const broadcastables = [
|
|
282
|
+
{
|
|
283
|
+
txHex: Buffer.from(psbt1.serialize()).toString('hex'),
|
|
284
|
+
messageInfo: [{ address, message: messageText, pubkeys, scriptType: 'p2shP2wsh' }],
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
txHex: Buffer.from(psbt2.serialize()).toString('hex'),
|
|
288
|
+
messageInfo: [{ address, message: messageText, pubkeys, scriptType: 'p2shP2wsh' }],
|
|
289
|
+
},
|
|
290
|
+
];
|
|
291
|
+
const result = (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc');
|
|
292
|
+
// Should deduplicate to a single entry
|
|
293
|
+
assert_1.default.strictEqual(result.length, 1);
|
|
294
|
+
assert_1.default.strictEqual(result[0].address, address);
|
|
295
|
+
assert_1.default.strictEqual(result[0].message, messageText);
|
|
296
|
+
});
|
|
297
|
+
it('should throw for duplicate address with different message', function () {
|
|
298
|
+
const chain = 10;
|
|
299
|
+
const index = 0;
|
|
300
|
+
const psbt1 = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
301
|
+
wasm_utxo_1.bip322.addBip322Input(psbt1, {
|
|
302
|
+
message: 'Message 1',
|
|
303
|
+
scriptId: { chain, index },
|
|
304
|
+
rootWalletKeys: walletKeys,
|
|
305
|
+
});
|
|
306
|
+
psbt1.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
307
|
+
psbt1.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
308
|
+
const psbt2 = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
309
|
+
wasm_utxo_1.bip322.addBip322Input(psbt2, {
|
|
310
|
+
message: 'Message 2',
|
|
311
|
+
scriptId: { chain, index },
|
|
312
|
+
rootWalletKeys: walletKeys,
|
|
313
|
+
});
|
|
314
|
+
psbt2.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
315
|
+
psbt2.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
316
|
+
const pubkeys = getDerivedPubkeys(seed, chain, index);
|
|
317
|
+
const address = getAddress(walletKeys, chain, index);
|
|
318
|
+
const broadcastables = [
|
|
319
|
+
{
|
|
320
|
+
txHex: Buffer.from(psbt1.serialize()).toString('hex'),
|
|
321
|
+
messageInfo: [{ address, message: 'Message 1', pubkeys, scriptType: 'p2shP2wsh' }],
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
txHex: Buffer.from(psbt2.serialize()).toString('hex'),
|
|
325
|
+
messageInfo: [{ address, message: 'Message 2', pubkeys, scriptType: 'p2shP2wsh' }],
|
|
326
|
+
},
|
|
327
|
+
];
|
|
328
|
+
assert_1.default.throws(() => (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc'), /Duplicate address.*has different messages/);
|
|
329
|
+
});
|
|
330
|
+
it('should throw for invalid proof', function () {
|
|
331
|
+
const chain = 10;
|
|
332
|
+
const index = 0;
|
|
333
|
+
const messageText = 'Valid message';
|
|
334
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.createEmpty('btc', walletKeys, { version: 0 });
|
|
335
|
+
wasm_utxo_1.bip322.addBip322Input(psbt, {
|
|
336
|
+
message: messageText,
|
|
337
|
+
scriptId: { chain, index },
|
|
338
|
+
rootWalletKeys: walletKeys,
|
|
339
|
+
});
|
|
340
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[0]));
|
|
341
|
+
psbt.sign(0, wasm_utxo_1.BIP32.fromBase58(xprivs[2]));
|
|
342
|
+
const pubkeys = getDerivedPubkeys(seed, chain, index);
|
|
343
|
+
const address = getAddress(walletKeys, chain, index);
|
|
344
|
+
const broadcastables = [
|
|
345
|
+
{
|
|
346
|
+
txHex: Buffer.from(psbt.serialize()).toString('hex'),
|
|
347
|
+
messageInfo: [
|
|
348
|
+
{
|
|
349
|
+
address,
|
|
350
|
+
message: 'Wrong message', // Doesn't match what was signed
|
|
351
|
+
pubkeys,
|
|
352
|
+
scriptType: 'p2shP2wsh',
|
|
353
|
+
},
|
|
354
|
+
],
|
|
355
|
+
},
|
|
356
|
+
];
|
|
357
|
+
assert_1.default.throws(() => (0, bip322_1.generateBIP322MessageListAndVerifyFromMessageBroadcastable)(broadcastables, 'btc'), /did not have a successful validation/);
|
|
358
|
+
});
|
|
359
|
+
});
|
|
44
360
|
});
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1Qix5REFJc0M7QUFFdEMsUUFBUSxDQUFDLFFBQVEsRUFBRTtJQUNqQixRQUFRLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQzFDLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxPQUFPLEdBQStCO2dCQUMxQyxLQUFLLEVBQUUsUUFBUTtnQkFDZixXQUFXLEVBQUU7b0JBQ1g7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO3dCQUMvQixVQUFVLEVBQUUsTUFBTTtxQkFDbkI7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsTUFBTSxVQUFVLEdBQUcsSUFBQSw0Q0FBbUMsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUNoRSxNQUFNLFlBQVksR0FBRyxJQUFBLDhDQUFxQyxFQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZFLGdCQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxNQUFNLE9BQU8sR0FBRztnQkFDZCxLQUFLLEVBQUUsUUFBUTtnQkFDZixXQUFXLEVBQUU7b0JBQ1g7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO3dCQUMvQixVQUFVLEVBQUUsYUFBYTtxQkFDMUI7aUJBQ0Y7YUFDdUMsQ0FBQztZQUUzQyxNQUFNLFVBQVUsR0FBRyxJQUFBLDRDQUFtQyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hFLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDakIsSUFBQSw4Q0FBcUMsRUFBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUsXG4gIGRlc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZGVzY3JpYmUoJ0JJUDMyMicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ0JJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInXSxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkID0gZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShzZXJpYWxpemVkKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZGVzZXJpYWxpemVkLCBtZXNzYWdlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0aGVyZSBpcyBhbiB1bnN1cHBvcnRlZCBzY3JpcHQgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHR4SGV4OiAnMDEwMjAzJyxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnc29tZUFkZHJlc3MnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ3NvbWVNZXNzYWdlJyxcbiAgICAgICAgICAgIHB1YmtleXM6IFsncHVia2V5MScsICdwdWJrZXkyJ10sXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IGFzIHVua25vd24gYXMgQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGU7XG5cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
361
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpcDMyMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qiw4REFBZ0Q7QUFDaEQsZ0RBQStGO0FBRS9GLHlEQU9zQztBQUV0QyxTQUFTLG9CQUFvQixDQUFDLElBQVk7SUFJeEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsT0FBTztRQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQW1CO1FBQ2pFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQW1CO0tBQ3hELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLEtBQWE7SUFDbkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBbUIsQ0FBQztBQUM5RyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsVUFBNEMsRUFBRSxLQUFhLEVBQUUsS0FBYTtJQUM1RixPQUFPLDZCQUFpQixDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUss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QUNwRCxXQUFXLEVBQUU7d0JBQ1g7NEJBQ0UsT0FBTzs0QkFDUCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdDQUFnQzs0QkFDMUQsT0FBTzs0QkFDUCxVQUFVLEVBQUUsV0FBVzt5QkFDeEI7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsSUFBQSxtRUFBMEQsRUFBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQ3ZGLHNDQUFzQyxDQUN2QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyMiBhcyB3YXNtQmlwMzIyLCBmaXhlZFNjcmlwdFdhbGxldCwgQklQMzIsIHR5cGUgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7XG4gIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlLFxuICBCSVAzMjJNZXNzYWdlSW5mbyxcbiAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZSxcbiAgc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UsXG4gIHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlLFxufSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vYmlwMzIyJztcblxuZnVuY3Rpb24gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZDogc3RyaW5nKToge1xuICB4cHViczogVHJpcGxlPHN0cmluZz47XG4gIHhwcml2czogVHJpcGxlPHN0cmluZz47XG59IHtcbiAgY29uc3Qga2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpO1xuICByZXR1cm4ge1xuICAgIHhwdWJzOiBrZXlzLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgIHhwcml2czoga2V5cy5tYXAoKGspID0+IGsudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz4sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlcml2ZWRQdWJrZXlzKHNlZWQ6IHN0cmluZywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IFRyaXBsZTxzdHJpbmc+IHtcbiAgY29uc3Qga2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0S2V5VHJpcGxlKHNlZWQpO1xuICByZXR1cm4ga2V5cy5tYXAoKGspID0+IGsuZGVyaXZlUGF0aChgbS8wLzAvJHtjaGFpbn0vJHtpbmRleH1gKS5wdWJsaWNLZXkudG9TdHJpbmcoJ2hleCcpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cywgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKTtcbn1cblxuZGVzY3JpYmUoJ0JJUDMyMicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ0JJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInLCAncHVia2V5MyddLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBkZXNlcmlhbGl6ZUJJUDMyMkJyb2FkY2FzdGFibGVNZXNzYWdlKHNlcmlhbGl6ZWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQsIG1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZXJlIGlzIGFuIHVuc3VwcG9ydGVkIHNjcmlwdCB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgdHhIZXg6ICcwMTAyMDMnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdzb21lQWRkcmVzcycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnc29tZU1lc3NhZ2UnLFxuICAgICAgICAgICAgcHVia2V5czogWydwdWJrZXkxJywgJ3B1YmtleTInLCAncHVia2V5MyddLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Vuc3VwcG9ydGVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSBhcyB1bmtub3duIGFzIEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlO1xuXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplQklQMzIyQnJvYWRjYXN0YWJsZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgZGVzZXJpYWxpemVCSVAzMjJCcm9hZGNhc3RhYmxlTWVzc2FnZShzZXJpYWxpemVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VlZCA9ICdiaXAzMjJfdmVyaWZ5X3Rlc3QnO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCBwMnNoUDJ3c2ggUFNCVCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdIZWxsbywgQml0R28hJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2lnbiB3aXRoIHVzZXIgYW5kIGJpdGdvIGtleXNcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgcDJ3c2ggUFNCVCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMjA7XG4gICAgICBjb25zdCBpbmRleCA9IDU7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdQMldTSCBwcm9vZiB0ZXN0JztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayd3NoJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdidGMnKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBtdWx0aXBsZSBpbnB1dHMgaW4gYSBzaW5nbGUgUFNCVCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gWydNZXNzYWdlIDEnLCAnTWVzc2FnZSAyJ107XG4gICAgICBjb25zdCBzY3JpcHRJZHMgPSBbXG4gICAgICAgIHsgY2hhaW46IDEwLCBpbmRleDogMCB9LFxuICAgICAgICB7IGNoYWluOiAyMCwgaW5kZXg6IDEgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBzY3JpcHRUeXBlczogQklQMzIyTWVzc2FnZUluZm9bJ3NjcmlwdFR5cGUnXVtdID0gWydwMnNoUDJ3c2gnLCAncDJ3c2gnXTtcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidCwge1xuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VzW2ldLFxuICAgICAgICAgIHNjcmlwdElkOiBzY3JpcHRJZHNbaV0sXG4gICAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTaWduIGFsbCBpbnB1dHNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHNidC5zaWduKGksIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICAgIHBzYnQuc2lnbihpLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1syXSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSW5mbzogQklQMzIyTWVzc2FnZUluZm9bXSA9IG1lc3NhZ2VzLm1hcCgobXNnLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBzY3JpcHRJZHNbaV0uY2hhaW4sIHNjcmlwdElkc1tpXS5pbmRleCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBzY3JpcHRJZHNbaV0uY2hhaW4sIHNjcmlwdElkc1tpXS5pbmRleCksXG4gICAgICAgICAgbWVzc2FnZTogbXNnLFxuICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgc2NyaXB0VHlwZTogc2NyaXB0VHlwZXNbaV0sXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIG1lc3NhZ2VJbmZvLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeVRyYW5zYWN0aW9uRnJvbUJyb2FkY2FzdGFibGVNZXNzYWdlKGJyb2FkY2FzdGFibGUsICdidGMnKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igd3JvbmcgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdPcmlnaW5hbCBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcblxuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0LnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlOiBCSVAzMjJNZXNzYWdlQnJvYWRjYXN0YWJsZSA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgbWVzc2FnZUluZm86IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0RpZmZlcmVudCBtZXNzYWdlJywgLy8gV3JvbmcgbWVzc2FnZVxuICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5VHJhbnNhY3Rpb25Gcm9tQnJvYWRjYXN0YWJsZU1lc3NhZ2UoYnJvYWRjYXN0YWJsZSwgJ2J0YycpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciB1bnN1cHBvcnRlZCBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZTogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGUgPSB7XG4gICAgICAgIHR4SGV4OiAnMDAnLFxuICAgICAgICBtZXNzYWdlSW5mbzogW10sXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB2ZXJpZnlUcmFuc2FjdGlvbkZyb21Ccm9hZGNhc3RhYmxlTWVzc2FnZShicm9hZGNhc3RhYmxlLCAnbHRjJyksXG4gICAgICAgIC9Pbmx5IHRidGM0IG9yIGJ0YyBjb2luTmFtZXMgYXJlIHN1cHBvcnRlZC9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlZWQgPSAnYmlwMzIyX2dlbmVyYXRlX3Rlc3QnO1xuICAgIGNvbnN0IHsgeHB1YnMsIHhwcml2cyB9ID0gY3JlYXRlVGVzdFdhbGxldEtleXMoc2VlZCk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oeHB1YnMpO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBtZXNzYWdlIGxpc3QgZnJvbSB2YWxpZCBwcm9vZnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnUHJvb2YgbWVzc2FnZSc7XG5cbiAgICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ2J0YycsIHdhbGxldEtleXMsIHsgdmVyc2lvbjogMCB9KTtcbiAgICAgIHdhc21CaXAzMjIuYWRkQmlwMzIySW5wdXQocHNidCwge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG5cbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZXM6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICAgICAgICBwdWJrZXlzLFxuICAgICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJzaFAyd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlQklQMzIyTWVzc2FnZUxpc3RBbmRWZXJpZnlGcm9tTWVzc2FnZUJyb2FkY2FzdGFibGUoYnJvYWRjYXN0YWJsZXMsICdidGMnKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXS5hZGRyZXNzLCBhZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0ubWVzc2FnZSwgbWVzc2FnZVRleHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWR1cGxpY2F0ZSBhZGRyZXNzZXMgd2l0aCBzYW1lIG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuICAgICAgY29uc3QgbWVzc2FnZVRleHQgPSAnU2FtZSBtZXNzYWdlJztcblxuICAgICAgLy8gQ3JlYXRlIHR3byBzZXBhcmF0ZSBQU0JUcyBmb3IgdGhlIHNhbWUgYWRkcmVzcy9tZXNzYWdlXG4gICAgICBjb25zdCBwc2J0MSA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0MSwge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlVGV4dCxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHBzYnQyID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQyLCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0MS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiBtZXNzYWdlVGV4dCwgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidDIuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBtZXNzYWdlSW5mbzogW3sgYWRkcmVzcywgbWVzc2FnZTogbWVzc2FnZVRleHQsIHB1YmtleXMsIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnIH1dLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpO1xuXG4gICAgICAvLyBTaG91bGQgZGVkdXBsaWNhdGUgdG8gYSBzaW5nbGUgZW50cnlcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0uYWRkcmVzcywgYWRkcmVzcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLm1lc3NhZ2UsIG1lc3NhZ2VUZXh0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGR1cGxpY2F0ZSBhZGRyZXNzIHdpdGggZGlmZmVyZW50IG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IDEwO1xuICAgICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBwc2J0MSA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0MSwge1xuICAgICAgICBtZXNzYWdlOiAnTWVzc2FnZSAxJyxcbiAgICAgICAgc2NyaXB0SWQ6IHsgY2hhaW4sIGluZGV4IH0sXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzOiB3YWxsZXRLZXlzLFxuICAgICAgfSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzBdKSk7XG4gICAgICBwc2J0MS5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHBzYnQyID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCdidGMnLCB3YWxsZXRLZXlzLCB7IHZlcnNpb246IDAgfSk7XG4gICAgICB3YXNtQmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQyLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIDInLFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMF0pKTtcbiAgICAgIHBzYnQyLnNpZ24oMCwgQklQMzIuZnJvbUJhc2U1OCh4cHJpdnNbMl0pKTtcblxuICAgICAgY29uc3QgcHVia2V5cyA9IGdldERlcml2ZWRQdWJrZXlzKHNlZWQsIGNoYWluLCBpbmRleCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gICAgICBjb25zdCBicm9hZGNhc3RhYmxlczogQklQMzIyTWVzc2FnZUJyb2FkY2FzdGFibGVbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbShwc2J0MS5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbeyBhZGRyZXNzLCBtZXNzYWdlOiAnTWVzc2FnZSAxJywgcHVia2V5cywgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidDIuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBtZXNzYWdlSW5mbzogW3sgYWRkcmVzcywgbWVzc2FnZTogJ01lc3NhZ2UgMicsIHB1YmtleXMsIHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnIH1dLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gZ2VuZXJhdGVCSVAzMjJNZXNzYWdlTGlzdEFuZFZlcmlmeUZyb21NZXNzYWdlQnJvYWRjYXN0YWJsZShicm9hZGNhc3RhYmxlcywgJ2J0YycpLFxuICAgICAgICAvRHVwbGljYXRlIGFkZHJlc3MuKmhhcyBkaWZmZXJlbnQgbWVzc2FnZXMvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCBwcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gMTA7XG4gICAgICBjb25zdCBpbmRleCA9IDA7XG4gICAgICBjb25zdCBtZXNzYWdlVGV4dCA9ICdWYWxpZCBtZXNzYWdlJztcblxuICAgICAgY29uc3QgcHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5jcmVhdGVFbXB0eSgnYnRjJywgd2FsbGV0S2V5cywgeyB2ZXJzaW9uOiAwIH0pO1xuICAgICAgd2FzbUJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VUZXh0LFxuICAgICAgICBzY3JpcHRJZDogeyBjaGFpbiwgaW5kZXggfSxcbiAgICAgICAgcm9vdFdhbGxldEtleXM6IHdhbGxldEtleXMsXG4gICAgICB9KTtcbiAgICAgIHBzYnQuc2lnbigwLCBCSVAzMi5mcm9tQmFzZTU4KHhwcml2c1swXSkpO1xuICAgICAgcHNidC5zaWduKDAsIEJJUDMyLmZyb21CYXNlNTgoeHByaXZzWzJdKSk7XG5cbiAgICAgIGNvbnN0IHB1YmtleXMgPSBnZXREZXJpdmVkUHVia2V5cyhzZWVkLCBjaGFpbiwgaW5kZXgpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGdldEFkZHJlc3Mod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcblxuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZXM6IEJJUDMyMk1lc3NhZ2VCcm9hZGNhc3RhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eEhleDogQnVmZmVyLmZyb20ocHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIG1lc3NhZ2VJbmZvOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdXcm9uZyBtZXNzYWdlJywgLy8gRG9lc24ndCBtYXRjaCB3aGF0IHdhcyBzaWduZWRcbiAgICAgICAgICAgICAgcHVia2V5cyxcbiAgICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBnZW5lcmF0ZUJJUDMyMk1lc3NhZ2VMaXN0QW5kVmVyaWZ5RnJvbU1lc3NhZ2VCcm9hZGNhc3RhYmxlKGJyb2FkY2FzdGFibGVzLCAnYnRjJyksXG4gICAgICAgIC9kaWQgbm90IGhhdmUgYSBzdWNjZXNzZnVsIHZhbGlkYXRpb24vXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -69,7 +69,7 @@ describe('Custom Change Wallets', () => {
|
|
|
69
69
|
],
|
|
70
70
|
threshold: 2,
|
|
71
71
|
};
|
|
72
|
-
const changeAddress = (0, src_1.generateAddress)(coin.
|
|
72
|
+
const changeAddress = (0, src_1.generateAddress)(coin.name, addressData);
|
|
73
73
|
const changeWalletId = 'changeWalletId';
|
|
74
74
|
const stubData = {
|
|
75
75
|
signedSendingWallet: {
|
|
@@ -151,4 +151,4 @@ describe('Custom Change Wallets', () => {
|
|
|
151
151
|
coin.keychains.restore();
|
|
152
152
|
});
|
|
153
153
|
});
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tQ2hhbmdlV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2N1c3RvbUNoYW5nZVdhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFrQztBQUNsQyw2Q0FBK0I7QUFDL0IsbURBQThDO0FBRTlDLG1DQUE0QztBQUU1QyxpQ0FBcUM7QUFFckMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFakMsTUFBTSxJQUFJLEdBQUc7UUFDWCxJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakQsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ25ELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtTQUNuRDtRQUNELE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRCxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkQsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1NBQ25EO0tBQ0YsQ0FBQztJQUVGLE1BQU0seUJBQXlCLEdBQUc7UUFDaEMsSUFBSSxFQUFFLEVBQUU7UUFDUixNQUFNLEVBQUUsRUFBRTtRQUNWLEtBQUssRUFBRSxFQUFFO0tBQ1YsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHO1FBQ2xCLEtBQUssRUFBRSxFQUFFO1FBQ1QsS0FBSyxFQUFFLENBQUM7UUFDUixXQUFXLEVBQUUsV0FBb0I7UUFDakMsb0VBQW9FO1FBQ3BFLFNBQVMsRUFBRTtZQUNULEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFJLEVBQUU7WUFDbEMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUksRUFBRTtZQUNwQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBSSxFQUFFO1NBQ3BDO1FBQ0QsU0FBUyxFQUFFLENBQUM7S0FDYixDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsSUFBQSxxQkFBZSxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFakUsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUc7UUFDZixtQkFBbUIsRUFBRTtZQUNuQixNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsQ0FBQztTQUM3RTtRQUNELFlBQVksRUFBRTtZQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRyxhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7U0FDcEQ7S0FDRixDQUFDO0lBRUYsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2hCLG9FQUFvRTtRQUNwRSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwSCx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSx5QkFBeUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrRkFBa0YsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBTSxFQUFFLFFBQVEsQ0FBQyxtQkFBMEIsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBTSxFQUFFLFFBQVEsQ0FBQyxZQUFtQixDQUFDLENBQUM7UUFFcEYsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3BDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUNyQyxRQUFRLEVBQUUsRUFBRSxDQUFDO29CQUNYLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDcEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDeEQsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN0QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUMxRCxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ3JCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3pELEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDdEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDMUQsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN4QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUM1RCxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ3ZCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzdELENBQUM7WUFDSCxDQUFDLENBQUM7U0FDSSxDQUFDLENBQUM7UUFFVixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMxRCxDQUFDLENBQUM7UUFFVixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXRCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzlDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsYUFBYSxFQUFFO2dCQUNiO29CQUNFLE9BQU8sRUFBRSxhQUFhO29CQUN0QixNQUFNLEVBQUUsWUFBWTtpQkFDckI7YUFDRjtTQUNLLENBQUMsQ0FBQztRQUVWLG1CQUFtQixDQUFDLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLElBQUk7WUFDM0QseUJBQXlCO1NBQzFCLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3BELFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUU7WUFDdkMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUN6QixNQUFNLEVBQUUsbUJBQTBCO1lBQ2xDLFlBQVksRUFBRTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDZixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7d0JBQ3hCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztxQkFDekI7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDNUMsT0FBTyxFQUFFLGFBQWE7WUFDdEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsUUFBUSxFQUFFLEtBQUs7WUFDZix5Q0FBeUMsRUFBRSxJQUFJO1NBQ2hELENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBMEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdlbmVyYXRlQWRkcmVzcyB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuZGVzY3JpYmUoJ0N1c3RvbSBDaGFuZ2UgV2FsbGV0cycsICgpID0+IHtcbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG5cbiAgY29uc3Qga2V5cyA9IHtcbiAgICBzZW5kOiB7XG4gICAgICB1c2VyOiB7IGlkOiAnMCcsIGtleTogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSB9LFxuICAgICAgYmFja3VwOiB7IGlkOiAnMScsIGtleTogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSB9LFxuICAgICAgYml0Z286IHsgaWQ6ICcyJywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgfSxcbiAgICBjaGFuZ2U6IHtcbiAgICAgIHVzZXI6IHsgaWQ6ICczJywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgICBiYWNrdXA6IHsgaWQ6ICc0Jywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgICBiaXRnbzogeyBpZDogJzUnLCBrZXk6IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCkgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMgPSB7XG4gICAgdXNlcjogJycsXG4gICAgYmFja3VwOiAnJyxcbiAgICBiaXRnbzogJycsXG4gIH07XG5cbiAgY29uc3QgYWRkcmVzc0RhdGEgPSB7XG4gICAgY2hhaW46IDExLFxuICAgIGluZGV4OiAxLFxuICAgIGFkZHJlc3NUeXBlOiAncDJzaFAyd3NoJyBhcyBjb25zdCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGtleWNoYWluczogW1xuICAgICAgeyBwdWI6IGtleXMuY2hhbmdlLnVzZXIua2V5LnB1YiEgfSxcbiAgICAgIHsgcHViOiBrZXlzLmNoYW5nZS5iYWNrdXAua2V5LnB1YiEgfSxcbiAgICAgIHsgcHViOiBrZXlzLmNoYW5nZS5iaXRnby5rZXkucHViISB9LFxuICAgIF0sXG4gICAgdGhyZXNob2xkOiAyLFxuICB9O1xuXG4gIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3MoY29pbi5uZXR3b3JrLCBhZGRyZXNzRGF0YSk7XG5cbiAgY29uc3QgY2hhbmdlV2FsbGV0SWQgPSAnY2hhbmdlV2FsbGV0SWQnO1xuICBjb25zdCBzdHViRGF0YSA9IHtcbiAgICBzaWduZWRTZW5kaW5nV2FsbGV0OiB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtrZXlzLnNlbmQudXNlci5pZCwga2V5cy5zZW5kLmJhY2t1cC5pZCwga2V5cy5zZW5kLmJpdGdvLmlkXSksXG4gICAgICBjb2luU3BlY2lmaWM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgY3VzdG9tQ2hhbmdlV2FsbGV0SWQ6IGNoYW5nZVdhbGxldElkIH0pLFxuICAgIH0sXG4gICAgY2hhbmdlV2FsbGV0OiB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtrZXlzLmNoYW5nZS51c2VyLmlkLCBrZXlzLmNoYW5nZS5iYWNrdXAuaWQsIGtleXMuY2hhbmdlLmJpdGdvLmlkXSksXG4gICAgICBjcmVhdGVBZGRyZXNzOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoY2hhbmdlQWRkcmVzcyksXG4gICAgfSxcbiAgfTtcblxuICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3Qgc2lnbiA9IGFzeW5jICh7IGtleSB9KSA9PiAoYXdhaXQgY29pbi5zaWduTWVzc2FnZSh7IHBydjoga2V5cy5zZW5kLnVzZXIua2V5LnBydiB9LCBrZXkucHViISkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLnVzZXIgPSBhd2FpdCBzaWduKGtleXMuY2hhbmdlLnVzZXIpO1xuICAgIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYmFja3VwID0gYXdhaXQgc2lnbihrZXlzLmNoYW5nZS5iYWNrdXApO1xuICAgIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYml0Z28gPSBhd2FpdCBzaWduKGtleXMuY2hhbmdlLmJpdGdvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb25zaWRlciBhZGRyZXNzZXMgZGVyaXZlZCBmcm9tIHRoZSBjdXN0b20gY2hhbmdlIGtleXMgYXMgaW50ZXJuYWwgc3BlbmRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpZ25lZFNlbmRpbmdXYWxsZXQgPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoV2FsbGV0LCBzdHViRGF0YS5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSk7XG4gICAgY29uc3QgY2hhbmdlV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCwgc3R1YkRhdGEuY2hhbmdlV2FsbGV0IGFzIGFueSk7XG5cbiAgICBzaW5vbi5zdHViKGNvaW4sICdrZXljaGFpbnMnKS5yZXR1cm5zKHtcbiAgICAgIGdldDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgoeyBpZCB9KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICBjYXNlIGtleXMuc2VuZC51c2VyLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLnNlbmQudXNlci5rZXkgfSk7XG4gICAgICAgICAgY2FzZSBrZXlzLnNlbmQuYmFja3VwLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLnNlbmQuYmFja3VwLmtleSB9KTtcbiAgICAgICAgICBjYXNlIGtleXMuc2VuZC5iaXRnby5pZDpcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBpZCwgLi4ua2V5cy5zZW5kLmJpdGdvLmtleSB9KTtcbiAgICAgICAgICBjYXNlIGtleXMuY2hhbmdlLnVzZXIuaWQ6XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgaWQsIC4uLmtleXMuY2hhbmdlLnVzZXIua2V5IH0pO1xuICAgICAgICAgIGNhc2Uga2V5cy5jaGFuZ2UuYmFja3VwLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLmNoYW5nZS5iYWNrdXAua2V5IH0pO1xuICAgICAgICAgIGNhc2Uga2V5cy5jaGFuZ2UuYml0Z28uaWQ6XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgaWQsIC4uLmtleXMuY2hhbmdlLmJpdGdvLmtleSB9KTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgc2lub24uc3R1Yihjb2luLCAnd2FsbGV0cycpLnJldHVybnMoe1xuICAgICAgZ2V0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCgpID0+IFByb21pc2UucmVzb2x2ZShjaGFuZ2VXYWxsZXQpKSxcbiAgICB9IGFzIGFueSk7XG5cbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSAxMDAwMDtcbiAgICBjb25zdCByZWNpcGllbnRzID0gW107XG5cbiAgICBzaW5vbi5zdHViKGNvaW4sICdleHBsYWluVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGNoYW5nZUFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgYW55KTtcblxuICAgIHNpZ25lZFNlbmRpbmdXYWxsZXQuX3dhbGxldCA9IHNpZ25lZFNlbmRpbmdXYWxsZXQuX3dhbGxldCB8fCB7XG4gICAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLFxuICAgIH07XG5cbiAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyBjaGFuZ2VBZGRyZXNzLCByZWNpcGllbnRzIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiAnJyB9LFxuICAgICAgd2FsbGV0OiBzaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIHZlcmlmaWNhdGlvbjoge1xuICAgICAgICBhZGRyZXNzZXM6IHtcbiAgICAgICAgICBbY2hhbmdlQWRkcmVzc106IHtcbiAgICAgICAgICAgIGNoYWluOiBhZGRyZXNzRGF0YS5jaGFpbixcbiAgICAgICAgICAgIGluZGV4OiBhZGRyZXNzRGF0YS5pbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHNob3VsZC5leGlzdChwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdKTtcbiAgICBwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogY2hhbmdlQWRkcmVzcyxcbiAgICAgIGFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgfSk7XG5cbiAgICAoY29pbi5leHBsYWluVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gICAgKGNvaW4ud2FsbGV0cyBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgICAoY29pbi5rZXljaGFpbnMgYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tQ2hhbmdlV2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2N1c3RvbUNoYW5nZVdhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFrQztBQUNsQyw2Q0FBK0I7QUFDL0IsbURBQThDO0FBRTlDLG1DQUE0QztBQUU1QyxpQ0FBcUM7QUFFckMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFakMsTUFBTSxJQUFJLEdBQUc7UUFDWCxJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakQsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ25ELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtTQUNuRDtRQUNELE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRCxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkQsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFD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QUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUN6QixNQUFNLEVBQUUsbUJBQTBCO1lBQ2xDLFlBQVksRUFBRTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDZixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7d0JBQ3hCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztxQkFDekI7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDNUMsT0FBTyxFQUFFLGFBQWE7WUFDdEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsUUFBUSxFQUFFLEtBQUs7WUFDZix5Q0FBeUMsRUFBRSxJQUFJO1NBQ2hELENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBMEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdlbmVyYXRlQWRkcmVzcyB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuZGVzY3JpYmUoJ0N1c3RvbSBDaGFuZ2UgV2FsbGV0cycsICgpID0+IHtcbiAgY29uc3QgY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG5cbiAgY29uc3Qga2V5cyA9IHtcbiAgICBzZW5kOiB7XG4gICAgICB1c2VyOiB7IGlkOiAnMCcsIGtleTogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSB9LFxuICAgICAgYmFja3VwOiB7IGlkOiAnMScsIGtleTogY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKSB9LFxuICAgICAgYml0Z286IHsgaWQ6ICcyJywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgfSxcbiAgICBjaGFuZ2U6IHtcbiAgICAgIHVzZXI6IHsgaWQ6ICczJywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgICBiYWNrdXA6IHsgaWQ6ICc0Jywga2V5OiBjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpIH0sXG4gICAgICBiaXRnbzogeyBpZDogJzUnLCBrZXk6IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlKCkgfSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMgPSB7XG4gICAgdXNlcjogJycsXG4gICAgYmFja3VwOiAnJyxcbiAgICBiaXRnbzogJycsXG4gIH07XG5cbiAgY29uc3QgYWRkcmVzc0RhdGEgPSB7XG4gICAgY2hhaW46IDExLFxuICAgIGluZGV4OiAxLFxuICAgIGFkZHJlc3NUeXBlOiAncDJzaFAyd3NoJyBhcyBjb25zdCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGtleWNoYWluczogW1xuICAgICAgeyBwdWI6IGtleXMuY2hhbmdlLnVzZXIua2V5LnB1YiEgfSxcbiAgICAgIHsgcHViOiBrZXlzLmNoYW5nZS5iYWNrdXAua2V5LnB1YiEgfSxcbiAgICAgIHsgcHViOiBrZXlzLmNoYW5nZS5iaXRnby5rZXkucHViISB9LFxuICAgIF0sXG4gICAgdGhyZXNob2xkOiAyLFxuICB9O1xuXG4gIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3MoY29pbi5uYW1lLCBhZGRyZXNzRGF0YSk7XG5cbiAgY29uc3QgY2hhbmdlV2FsbGV0SWQgPSAnY2hhbmdlV2FsbGV0SWQnO1xuICBjb25zdCBzdHViRGF0YSA9IHtcbiAgICBzaWduZWRTZW5kaW5nV2FsbGV0OiB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtrZXlzLnNlbmQudXNlci5pZCwga2V5cy5zZW5kLmJhY2t1cC5pZCwga2V5cy5zZW5kLmJpdGdvLmlkXSksXG4gICAgICBjb2luU3BlY2lmaWM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgY3VzdG9tQ2hhbmdlV2FsbGV0SWQ6IGNoYW5nZVdhbGxldElkIH0pLFxuICAgIH0sXG4gICAgY2hhbmdlV2FsbGV0OiB7XG4gICAgICBrZXlJZHM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKFtrZXlzLmNoYW5nZS51c2VyLmlkLCBrZXlzLmNoYW5nZS5iYWNrdXAuaWQsIGtleXMuY2hhbmdlLmJpdGdvLmlkXSksXG4gICAgICBjcmVhdGVBZGRyZXNzOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoY2hhbmdlQWRkcmVzcyksXG4gICAgfSxcbiAgfTtcblxuICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3Qgc2lnbiA9IGFzeW5jICh7IGtleSB9KSA9PiAoYXdhaXQgY29pbi5zaWduTWVzc2FnZSh7IHBydjoga2V5cy5zZW5kLnVzZXIua2V5LnBydiB9LCBrZXkucHViISkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLnVzZXIgPSBhd2FpdCBzaWduKGtleXMuY2hhbmdlLnVzZXIpO1xuICAgIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYmFja3VwID0gYXdhaXQgc2lnbihrZXlzLmNoYW5nZS5iYWNrdXApO1xuICAgIGN1c3RvbUNoYW5nZUtleVNpZ25hdHVyZXMuYml0Z28gPSBhd2FpdCBzaWduKGtleXMuY2hhbmdlLmJpdGdvKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjb25zaWRlciBhZGRyZXNzZXMgZGVyaXZlZCBmcm9tIHRoZSBjdXN0b20gY2hhbmdlIGtleXMgYXMgaW50ZXJuYWwgc3BlbmRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpZ25lZFNlbmRpbmdXYWxsZXQgPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoV2FsbGV0LCBzdHViRGF0YS5zaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSk7XG4gICAgY29uc3QgY2hhbmdlV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCwgc3R1YkRhdGEuY2hhbmdlV2FsbGV0IGFzIGFueSk7XG5cbiAgICBzaW5vbi5zdHViKGNvaW4sICdrZXljaGFpbnMnKS5yZXR1cm5zKHtcbiAgICAgIGdldDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgoeyBpZCB9KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICBjYXNlIGtleXMuc2VuZC51c2VyLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLnNlbmQudXNlci5rZXkgfSk7XG4gICAgICAgICAgY2FzZSBrZXlzLnNlbmQuYmFja3VwLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLnNlbmQuYmFja3VwLmtleSB9KTtcbiAgICAgICAgICBjYXNlIGtleXMuc2VuZC5iaXRnby5pZDpcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBpZCwgLi4ua2V5cy5zZW5kLmJpdGdvLmtleSB9KTtcbiAgICAgICAgICBjYXNlIGtleXMuY2hhbmdlLnVzZXIuaWQ6XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgaWQsIC4uLmtleXMuY2hhbmdlLnVzZXIua2V5IH0pO1xuICAgICAgICAgIGNhc2Uga2V5cy5jaGFuZ2UuYmFja3VwLmlkOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGlkLCAuLi5rZXlzLmNoYW5nZS5iYWNrdXAua2V5IH0pO1xuICAgICAgICAgIGNhc2Uga2V5cy5jaGFuZ2UuYml0Z28uaWQ6XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgaWQsIC4uLmtleXMuY2hhbmdlLmJpdGdvLmtleSB9KTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgc2lub24uc3R1Yihjb2luLCAnd2FsbGV0cycpLnJldHVybnMoe1xuICAgICAgZ2V0OiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCgpID0+IFByb21pc2UucmVzb2x2ZShjaGFuZ2VXYWxsZXQpKSxcbiAgICB9IGFzIGFueSk7XG5cbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSAxMDAwMDtcbiAgICBjb25zdCByZWNpcGllbnRzID0gW107XG5cbiAgICBzaW5vbi5zdHViKGNvaW4sICdleHBsYWluVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyh7XG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGNoYW5nZUFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXRBbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgYW55KTtcblxuICAgIHNpZ25lZFNlbmRpbmdXYWxsZXQuX3dhbGxldCA9IHNpZ25lZFNlbmRpbmdXYWxsZXQuX3dhbGxldCB8fCB7XG4gICAgICBjdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVzLFxuICAgIH07XG5cbiAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGNvaW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICB0eFBhcmFtczogeyBjaGFuZ2VBZGRyZXNzLCByZWNpcGllbnRzIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiAnJyB9LFxuICAgICAgd2FsbGV0OiBzaWduZWRTZW5kaW5nV2FsbGV0IGFzIGFueSxcbiAgICAgIHZlcmlmaWNhdGlvbjoge1xuICAgICAgICBhZGRyZXNzZXM6IHtcbiAgICAgICAgICBbY2hhbmdlQWRkcmVzc106IHtcbiAgICAgICAgICAgIGNoYWluOiBhZGRyZXNzRGF0YS5jaGFpbixcbiAgICAgICAgICAgIGluZGV4OiBhZGRyZXNzRGF0YS5pbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHNob3VsZC5leGlzdChwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdKTtcbiAgICBwYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgYWRkcmVzczogY2hhbmdlQWRkcmVzcyxcbiAgICAgIGFtb3VudDogb3V0cHV0QW1vdW50LFxuICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgbmVlZHNDdXN0b21DaGFuZ2VLZXlTaWduYXR1cmVWZXJpZmljYXRpb246IHRydWUsXG4gICAgfSk7XG5cbiAgICAoY29pbi5leHBsYWluVHJhbnNhY3Rpb24gYXMgYW55KS5yZXN0b3JlKCk7XG4gICAgKGNvaW4ud2FsbGV0cyBhcyBhbnkpLnJlc3RvcmUoKTtcbiAgICAoY29pbi5rZXljaGFpbnMgYXMgYW55KS5yZXN0b3JlKCk7XG4gIH0pO1xufSk7XG4iXX0=
|