@bitgo-beta/abstract-lightning 1.0.0-alpha.255 → 1.0.0-alpha.256

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.
Files changed (68) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/package.json +5 -5
  3. package/dist/src/abstractLightningCoin.d.ts +0 -17
  4. package/dist/src/abstractLightningCoin.d.ts.map +0 -1
  5. package/dist/src/abstractLightningCoin.js +0 -53
  6. package/dist/src/codecs/api/backup.d.ts +0 -15
  7. package/dist/src/codecs/api/backup.d.ts.map +0 -1
  8. package/dist/src/codecs/api/backup.js +0 -47
  9. package/dist/src/codecs/api/balance.d.ts +0 -132
  10. package/dist/src/codecs/api/balance.d.ts.map +0 -1
  11. package/dist/src/codecs/api/balance.js +0 -101
  12. package/dist/src/codecs/api/index.d.ts +0 -8
  13. package/dist/src/codecs/api/index.d.ts.map +0 -1
  14. package/dist/src/codecs/api/index.js +0 -24
  15. package/dist/src/codecs/api/invoice.d.ts +0 -66
  16. package/dist/src/codecs/api/invoice.d.ts.map +0 -1
  17. package/dist/src/codecs/api/invoice.js +0 -102
  18. package/dist/src/codecs/api/payment.d.ts +0 -107
  19. package/dist/src/codecs/api/payment.d.ts.map +0 -1
  20. package/dist/src/codecs/api/payment.js +0 -153
  21. package/dist/src/codecs/api/transaction.d.ts +0 -82
  22. package/dist/src/codecs/api/transaction.d.ts.map +0 -1
  23. package/dist/src/codecs/api/transaction.js +0 -104
  24. package/dist/src/codecs/api/wallet.d.ts +0 -99
  25. package/dist/src/codecs/api/wallet.d.ts.map +0 -1
  26. package/dist/src/codecs/api/wallet.js +0 -103
  27. package/dist/src/codecs/api/withdraw.d.ts +0 -97
  28. package/dist/src/codecs/api/withdraw.d.ts.map +0 -1
  29. package/dist/src/codecs/api/withdraw.js +0 -92
  30. package/dist/src/codecs/index.d.ts +0 -3
  31. package/dist/src/codecs/index.d.ts.map +0 -1
  32. package/dist/src/codecs/index.js +0 -19
  33. package/dist/src/codecs/shared.d.ts +0 -7
  34. package/dist/src/codecs/shared.d.ts.map +0 -1
  35. package/dist/src/codecs/shared.js +0 -42
  36. package/dist/src/index.d.ts +0 -5
  37. package/dist/src/index.d.ts.map +0 -1
  38. package/dist/src/index.js +0 -21
  39. package/dist/src/lightning/index.d.ts +0 -5
  40. package/dist/src/lightning/index.d.ts.map +0 -1
  41. package/dist/src/lightning/index.js +0 -21
  42. package/dist/src/lightning/lightningUtils.d.ts +0 -80
  43. package/dist/src/lightning/lightningUtils.d.ts.map +0 -1
  44. package/dist/src/lightning/lightningUtils.js +0 -258
  45. package/dist/src/lightning/parseWithdrawPsbt.d.ts +0 -8
  46. package/dist/src/lightning/parseWithdrawPsbt.d.ts.map +0 -1
  47. package/dist/src/lightning/parseWithdrawPsbt.js +0 -149
  48. package/dist/src/lightning/signableJson.d.ts +0 -17
  49. package/dist/src/lightning/signableJson.d.ts.map +0 -1
  50. package/dist/src/lightning/signableJson.js +0 -29
  51. package/dist/src/lightning/signature.d.ts +0 -22
  52. package/dist/src/lightning/signature.d.ts.map +0 -1
  53. package/dist/src/lightning/signature.js +0 -69
  54. package/dist/src/wallet/custodialLightning.d.ts +0 -7
  55. package/dist/src/wallet/custodialLightning.d.ts.map +0 -1
  56. package/dist/src/wallet/custodialLightning.js +0 -14
  57. package/dist/src/wallet/index.d.ts +0 -5
  58. package/dist/src/wallet/index.d.ts.map +0 -1
  59. package/dist/src/wallet/index.js +0 -21
  60. package/dist/src/wallet/lightning.d.ts +0 -146
  61. package/dist/src/wallet/lightning.d.ts.map +0 -1
  62. package/dist/src/wallet/lightning.js +0 -307
  63. package/dist/src/wallet/selfCustodialLightning.d.ts +0 -32
  64. package/dist/src/wallet/selfCustodialLightning.d.ts.map +0 -1
  65. package/dist/src/wallet/selfCustodialLightning.js +0 -131
  66. package/dist/src/wallet/wallet.d.ts +0 -7
  67. package/dist/src/wallet/wallet.d.ts.map +0 -1
  68. package/dist/src/wallet/wallet.js +0 -22
@@ -1,307 +0,0 @@
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
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.LightningWallet = void 0;
37
- exports.getLightningKeychain = getLightningKeychain;
38
- exports.getLightningAuthKeychains = getLightningAuthKeychains;
39
- const sdkcore = __importStar(require("@bitgo-beta/sdk-core"));
40
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
- const t = __importStar(require("io-ts"));
42
- const lightning_1 = require("../lightning");
43
- const codecs_1 = require("../codecs");
44
- const public_types_1 = require("@bitgo/public-types");
45
- /**
46
- * Get the lightning keychain for the given wallet.
47
- */
48
- async function getLightningKeychain(wallet) {
49
- const coin = wallet.baseCoin;
50
- if (coin.getFamily() !== 'lnbtc') {
51
- throw new Error(`Invalid coin to get lightning wallet key: ${coin.getFamily()}`);
52
- }
53
- const keyIds = wallet.keyIds();
54
- if (keyIds.length !== 1) {
55
- throw new Error(`Invalid number of key in lightning wallet: ${keyIds.length}`);
56
- }
57
- const keychain = await coin.keychains().get({ id: keyIds[0] });
58
- return sdkcore.decodeOrElse(codecs_1.LightningKeychain.name, codecs_1.LightningKeychain, keychain, (_) => {
59
- throw new Error(`Invalid user key`);
60
- });
61
- }
62
- /**
63
- * Get the lightning auth keychains for the given wallet.
64
- */
65
- async function getLightningAuthKeychains(wallet) {
66
- const coin = wallet.baseCoin;
67
- if (coin.getFamily() !== 'lnbtc') {
68
- throw new Error(`Invalid coin to get lightning wallet auth keys: ${coin.getFamily()}`);
69
- }
70
- const authKeyIds = wallet.coinSpecific()?.keys;
71
- if (authKeyIds?.length !== 2) {
72
- throw new Error(`Invalid number of auth keys in lightning wallet: ${authKeyIds?.length}`);
73
- }
74
- const keychains = await Promise.all(authKeyIds.map((id) => coin.keychains().get({ id })));
75
- const authKeychains = keychains.map((keychain) => {
76
- return sdkcore.decodeOrElse(codecs_1.LightningAuthKeychain.name, codecs_1.LightningAuthKeychain, keychain, (_) => {
77
- // DON'T throw errors from decodeOrElse. It could leak sensitive information.
78
- throw new Error(`Invalid lightning auth key: ${keychain?.id}`);
79
- });
80
- });
81
- const [userAuthKey, nodeAuthKey] = ['userAuth', 'nodeAuth'].map((purpose) => {
82
- const keychain = authKeychains.find((k) => (0, lightning_1.unwrapLightningCoinSpecific)(k.coinSpecific, coin.getChain()).purpose === purpose);
83
- if (!keychain) {
84
- throw new Error(`Missing ${purpose} key`);
85
- }
86
- return keychain;
87
- });
88
- return { userAuthKey, nodeAuthKey };
89
- }
90
- class LightningWallet {
91
- constructor(wallet) {
92
- const coin = wallet.baseCoin;
93
- if (coin.getFamily() !== 'lnbtc') {
94
- throw new Error(`Invalid coin for lightning wallet: ${coin.getFamily()}`);
95
- }
96
- this.wallet = wallet;
97
- }
98
- async createInvoice(params) {
99
- const createInvoiceResponse = await this.wallet.bitgo
100
- .post(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/invoice`, 2))
101
- .send(t.exact(codecs_1.CreateInvoiceBody).encode(params))
102
- .result();
103
- return sdkcore.decodeOrElse(codecs_1.Invoice.name, codecs_1.Invoice, createInvoiceResponse, (error) => {
104
- // DON'T throw errors from decodeOrElse. It could leak sensitive information.
105
- throw new Error(`Invalid create invoice response ${error}`);
106
- });
107
- }
108
- async getInvoice(paymentHash) {
109
- const response = await this.wallet.bitgo
110
- .get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/invoice/${paymentHash}`, 2))
111
- .result();
112
- return (0, sdk_core_1.decodeOrElse)(codecs_1.Invoice.name, codecs_1.Invoice, response, (error) => {
113
- throw new Error(`Invalid get invoice response ${error}`);
114
- });
115
- }
116
- async listInvoices(params) {
117
- const returnCodec = codecs_1.ListInvoicesResponse;
118
- const createInvoiceResponse = await this.wallet.bitgo
119
- .get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/invoice`, 2))
120
- .query(codecs_1.InvoiceQuery.encode(params))
121
- .result();
122
- return sdkcore.decodeOrElse(returnCodec.name, returnCodec, createInvoiceResponse, (error) => {
123
- throw new Error(`Invalid list invoices response ${error}`);
124
- });
125
- }
126
- async payInvoice(params) {
127
- const reqId = new sdk_core_1.RequestTracer();
128
- this.wallet.bitgo.setRequestTracer(reqId);
129
- const { userAuthKey } = await getLightningAuthKeychains(this.wallet);
130
- const userAuthKeyEncryptedPrv = userAuthKey.encryptedPrv;
131
- if (!userAuthKeyEncryptedPrv) {
132
- throw new Error(`user auth key is missing encrypted private key`);
133
- }
134
- const signature = (0, lightning_1.createMessageSignature)(t.exact(public_types_1.LightningPaymentRequest).encode(params), this.wallet.bitgo.decrypt({ password: params.passphrase, input: userAuthKeyEncryptedPrv }));
135
- const paymentIntent = {
136
- intent: {
137
- comment: params.comment,
138
- sequenceId: params.sequenceId,
139
- intentType: 'payment',
140
- signedRequest: {
141
- invoice: params.invoice,
142
- amountMsat: params.amountMsat,
143
- feeLimitMsat: params.feeLimitMsat,
144
- feeLimitRatio: params.feeLimitRatio,
145
- },
146
- signature,
147
- },
148
- };
149
- const transactionRequestCreate = (await this.wallet.bitgo
150
- .post(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests', 2))
151
- .send(t.type({ intent: public_types_1.LightningPaymentIntent }).encode(paymentIntent))
152
- .result());
153
- if (transactionRequestCreate.state === 'pendingApproval') {
154
- const pendingApprovals = new sdk_core_1.PendingApprovals(this.wallet.bitgo, this.wallet.baseCoin);
155
- const pendingApproval = await pendingApprovals.get({ id: transactionRequestCreate.pendingApprovalId });
156
- return {
157
- pendingApproval: pendingApproval.toJSON(),
158
- txRequestId: transactionRequestCreate.txRequestId,
159
- txRequestState: transactionRequestCreate.state,
160
- };
161
- }
162
- const transfer = await this.wallet.bitgo
163
- .post(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests/' + transactionRequestCreate.txRequestId + '/transfers', 2))
164
- .send()
165
- .result();
166
- const transactionRequestSend = await sdk_core_1.commonTssMethods.sendTxRequest(this.wallet.bitgo, this.wallet.id(), transactionRequestCreate.txRequestId, sdk_core_1.RequestType.tx, reqId);
167
- const coinSpecific = transactionRequestSend.transactions?.[0]?.unsignedTx?.coinSpecific;
168
- let updatedTransfer = undefined;
169
- try {
170
- updatedTransfer = await this.wallet.getTransfer({ id: transfer.id });
171
- }
172
- catch (e) {
173
- // If transfer is not found which is possible in cases where the payment has definitely failed
174
- // Or even if some unknown error occurs, we will not throw an error here
175
- // We still want to return the txRequestId, txRequestState and paymentStatus.
176
- }
177
- return {
178
- txRequestId: transactionRequestCreate.txRequestId,
179
- txRequestState: transactionRequestSend.state,
180
- paymentStatus: coinSpecific
181
- ? t.exact(codecs_1.LndCreatePaymentResponse).encode(coinSpecific)
182
- : undefined,
183
- transfer: updatedTransfer,
184
- };
185
- }
186
- async withdrawOnchain(params) {
187
- const reqId = new sdk_core_1.RequestTracer();
188
- this.wallet.bitgo.setRequestTracer(reqId);
189
- const paymentIntent = {
190
- intent: {
191
- comment: params.comment,
192
- sequenceId: params.sequenceId,
193
- onchainRequest: {
194
- recipients: params.recipients,
195
- satsPerVbyte: params.satsPerVbyte,
196
- },
197
- intentType: 'payment',
198
- },
199
- };
200
- const transactionRequestCreate = (await this.wallet.bitgo
201
- .post(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests', 2))
202
- .send(t.type({ intent: public_types_1.LightningPaymentIntent }).encode(paymentIntent))
203
- .result());
204
- if (!transactionRequestCreate.transactions ||
205
- transactionRequestCreate.transactions.length === 0 ||
206
- !transactionRequestCreate.transactions[0].unsignedTx.serializedTxHex) {
207
- throw new Error(`serialized txHex is missing`);
208
- }
209
- const walletData = this.wallet.toJSON();
210
- if (!walletData.coinSpecific.watchOnlyAccounts) {
211
- throw new Error(`wallet is missing watch only accounts`);
212
- }
213
- const watchOnlyAccountDetails = (0, sdk_core_1.decodeOrElse)(codecs_1.WatchOnly.name, codecs_1.WatchOnly, walletData.coinSpecific.watchOnlyAccounts, (errors) => {
214
- throw new Error(`invalid watch only accounts, error: ${errors}`);
215
- });
216
- const network = (0, lightning_1.getUtxolibNetwork)(this.wallet.coin());
217
- try {
218
- (0, lightning_1.validatePsbtForWithdraw)(transactionRequestCreate.transactions[0].unsignedTx.serializedTxHex, network, params.recipients, watchOnlyAccountDetails.accounts);
219
- }
220
- catch (err) {
221
- throw new Error(`error validating withdraw psbt: ${err}`);
222
- }
223
- const { userAuthKey } = await getLightningAuthKeychains(this.wallet);
224
- const userAuthKeyEncryptedPrv = userAuthKey.encryptedPrv;
225
- if (!userAuthKeyEncryptedPrv) {
226
- throw new Error(`user auth key is missing encrypted private key`);
227
- }
228
- const signature = (0, lightning_1.createMessageSignature)(transactionRequestCreate.transactions[0].unsignedTx.serializedTxHex, this.wallet.bitgo.decrypt({ password: params.passphrase, input: userAuthKeyEncryptedPrv }));
229
- const transactionRequestWithSignature = (await this.wallet.bitgo
230
- .put(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests/' + transactionRequestCreate.txRequestId + '/coinSpecific', 2))
231
- .send({
232
- unsignedCoinSpecific: {
233
- coin: this.wallet.baseCoin.getChain(),
234
- data: { signature },
235
- },
236
- })
237
- .result());
238
- if (transactionRequestWithSignature.state === 'pendingApproval') {
239
- const pendingApprovals = new sdk_core_1.PendingApprovals(this.wallet.bitgo, this.wallet.baseCoin);
240
- const pendingApproval = await pendingApprovals.get({ id: transactionRequestWithSignature.pendingApprovalId });
241
- return {
242
- pendingApproval: pendingApproval.toJSON(),
243
- txRequestId: transactionRequestWithSignature.txRequestId,
244
- txRequestState: transactionRequestWithSignature.state,
245
- };
246
- }
247
- const transfer = await this.wallet.bitgo
248
- .post(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests/' + transactionRequestWithSignature.txRequestId + '/transfers', 2))
249
- .send()
250
- .result();
251
- const transactionRequestSend = await sdk_core_1.commonTssMethods.sendTxRequest(this.wallet.bitgo, this.wallet.id(), transactionRequestWithSignature.txRequestId, sdk_core_1.RequestType.tx, reqId);
252
- const coinSpecific = transactionRequestSend.transactions?.[0]?.unsignedTx?.coinSpecific;
253
- let updatedTransfer = undefined;
254
- try {
255
- updatedTransfer = await this.wallet.getTransfer({ id: transfer.id });
256
- }
257
- catch (e) {
258
- // If transfer is not found which is possible in cases where the withdraw has definitely failed
259
- // Or even if some unknown error occurs, we will not throw an error here
260
- // We still want to return the txRequestId and txRequestState.
261
- }
262
- return {
263
- txRequestId: transactionRequestWithSignature.txRequestId,
264
- txRequestState: transactionRequestSend.state,
265
- transfer: updatedTransfer,
266
- withdrawStatus: coinSpecific && 'status' in coinSpecific
267
- ? t.exact(codecs_1.LndCreateWithdrawResponse).encode(coinSpecific)
268
- : undefined,
269
- };
270
- }
271
- async getPayment(paymentId) {
272
- const response = await this.wallet.bitgo
273
- .get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/payment/${paymentId}`, 2))
274
- .result();
275
- return (0, sdk_core_1.decodeOrElse)(codecs_1.PaymentInfo.name, codecs_1.PaymentInfo, response, (error) => {
276
- throw new Error(`Invalid payment response: ${error}`);
277
- });
278
- }
279
- async listPayments(params) {
280
- const response = await this.wallet.bitgo
281
- .get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/payment`, 2))
282
- .query(codecs_1.PaymentQuery.encode(params))
283
- .result();
284
- return (0, sdk_core_1.decodeOrElse)(codecs_1.ListPaymentsResponse.name, codecs_1.ListPaymentsResponse, response, (error) => {
285
- throw new Error(`Invalid payment list response: ${error}`);
286
- });
287
- }
288
- async getTransaction(txId) {
289
- const response = await this.wallet.bitgo
290
- .get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/transaction/${txId}`, 2))
291
- .result();
292
- return (0, sdk_core_1.decodeOrElse)(codecs_1.Transaction.name, codecs_1.Transaction, response, (error) => {
293
- throw new Error(`Invalid transaction response: ${error}`);
294
- });
295
- }
296
- async listTransactions(params) {
297
- const response = await this.wallet.bitgo
298
- .get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/transaction`, 2))
299
- .query(codecs_1.TransactionQuery.encode(params))
300
- .result();
301
- return (0, sdk_core_1.decodeOrElse)(t.array(codecs_1.Transaction).name, t.array(codecs_1.Transaction), response, (error) => {
302
- throw new Error(`Invalid transaction list response: ${error}`);
303
- });
304
- }
305
- }
306
- exports.LightningWallet = LightningWallet;
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC9saWdodG5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0VBLG9EQWFDO0FBS0QsOERBOEJDO0FBL0hELDhEQUFnRDtBQUNoRCxtREFTOEI7QUFDOUIseUNBQTJCO0FBQzNCLDRDQUtzQjtBQUN0QixzQ0FrQm1CO0FBQ25CLHNEQUFzRjtBQXVDdEY7O0dBRUc7QUFDSSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBdUI7SUFDaEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsMEJBQWlCLENBQUMsSUFBSSxFQUFFLDBCQUFpQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3JGLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0QyxDQUFD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Q0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2RixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbFNELDBDQWtTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNka2NvcmUgZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgUGVuZGluZ0FwcHJvdmFsRGF0YSxcbiAgUGVuZGluZ0FwcHJvdmFscyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgUmVxdWVzdFR5cGUsXG4gIFR4UmVxdWVzdCxcbiAgY29tbW9uVHNzTWV0aG9kcyxcbiAgVHhSZXF1ZXN0U3RhdGUsXG4gIGRlY29kZU9yRWxzZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQge1xuICBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlLFxuICBnZXRVdHhvbGliTmV0d29yayxcbiAgdW53cmFwTGlnaHRuaW5nQ29pblNwZWNpZmljLFxuICB2YWxpZGF0ZVBzYnRGb3JXaXRoZHJhdyxcbn0gZnJvbSAnLi4vbGlnaHRuaW5nJztcbmltcG9ydCB7XG4gIENyZWF0ZUludm9pY2VCb2R5LFxuICBJbnZvaWNlLFxuICBJbnZvaWNlUXVlcnksXG4gIExpZ2h0bmluZ0F1dGhLZXljaGFpbixcbiAgTGlnaHRuaW5nS2V5Y2hhaW4sXG4gIExuZENyZWF0ZVBheW1lbnRSZXNwb25zZSxcbiAgU3VibWl0UGF5bWVudFBhcmFtcyxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uUXVlcnksXG4gIFBheW1lbnRJbmZvLFxuICBQYXltZW50UXVlcnksXG4gIExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtcyxcbiAgTGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UmVzcG9uc2UsXG4gIExpc3RJbnZvaWNlc1Jlc3BvbnNlLFxuICBMaXN0UGF5bWVudHNSZXNwb25zZSxcbiAgTG5kQ3JlYXRlV2l0aGRyYXdSZXNwb25zZSxcbiAgV2F0Y2hPbmx5LFxufSBmcm9tICcuLi9jb2RlY3MnO1xuaW1wb3J0IHsgTGlnaHRuaW5nUGF5bWVudEludGVudCwgTGlnaHRuaW5nUGF5bWVudFJlcXVlc3QgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcblxuZXhwb3J0IHR5cGUgUGF5SW52b2ljZVJlc3BvbnNlID0ge1xuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwYXltZW50IHJlcXVlc3Qgc3VibWl0dGVkIHRvIEJpdEdvLlxuICAgKi9cbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3RhdHVzIG9mIHRoZSBwYXltZW50IHJlcXVlc3Qgc3VibWlzc2lvbiB0byBCaXRHby5cbiAgICogLSBgJ2RlbGl2ZXJlZCdgOiBTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYnkgQml0R28sIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gc2VudCB0byB0aGUgTGlnaHRuaW5nIE5ldHdvcmsgeWV0LlxuICAgKiAtIEZvciB0aGUgYWN0dWFsIHBheW1lbnQgc3RhdHVzLCByZWZlciB0byBgcGF5bWVudFN0YXR1c2AgYW5kIHRyYWNrIGB0cmFuc2ZlcmAuXG4gICAqL1xuICB0eFJlcXVlc3RTdGF0ZTogVHhSZXF1ZXN0U3RhdGU7XG5cbiAgLyoqXG4gICAqIFBlbmRpbmcgYXBwcm92YWwgZGV0YWlscywgaWYgYXBwbGljYWJsZS5cbiAgICogLSBJZiBwcmVzZW50LCB0aGUgcGF5bWVudCBoYXMgbm90IGJlZW4gaW5pdGlhdGVkIHlldC5cbiAgICovXG4gIHBlbmRpbmdBcHByb3ZhbD86IFBlbmRpbmdBcHByb3ZhbERhdGE7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc25hcHNob3Qgb2YgcGF5bWVudCBzdGF0dXMgKGlmIGF2YWlsYWJsZSkuXG4gICAqIC0gKipgJ2luX2ZsaWdodCdgKio6IFBheW1lbnQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAqIC0gKipgJ3NldHRsZWQnYCoqOiBQYXltZW50IHdhcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLlxuICAgKiAtICoqYCdmYWlsZWQnYCoqOiBQYXltZW50IGZhaWxlZC5cbiAgICogVGhpcyBmaWVsZCBpcyBhYnNlbnQgaWYgYXBwcm92YWwgaXMgcmVxdWlyZWQgYmVmb3JlIHByb2Nlc3NpbmcuXG4gICAqL1xuICBwYXltZW50U3RhdHVzPzogTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlO1xuXG4gIC8qKlxuICAgKiBMYXRlc3QgdHJhbnNmZXIgZGV0YWlscyBmb3IgdGhpcyBwYXltZW50IHJlcXVlc3QgKGlmIGF2YWlsYWJsZSkuXG4gICAqIC0gUHJvdmlkZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRyYW5zZmVyLlxuICAgKiAtIFRvIHRyYWNrIHRoZSBmaW5hbCBwYXltZW50IHN0YXR1cywgbW9uaXRvciBgdHJhbnNmZXJgIGFzeW5jaHJvbm91c2x5LlxuICAgKiBUaGlzIGZpZWxkIGlzIGFic2VudCBpZiBhcHByb3ZhbCBpcyByZXF1aXJlZCBiZWZvcmUgcHJvY2Vzc2luZy5cbiAgICovXG4gIHRyYW5zZmVyPzogYW55O1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxpZ2h0bmluZyBrZXljaGFpbiBmb3IgdGhlIGdpdmVuIHdhbGxldC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExpZ2h0bmluZ0tleWNoYWluKHdhbGxldDogc2RrY29yZS5JV2FsbGV0KTogUHJvbWlzZTxMaWdodG5pbmdLZXljaGFpbj4ge1xuICBjb25zdCBjb2luID0gd2FsbGV0LmJhc2VDb2luO1xuICBpZiAoY29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIHRvIGdldCBsaWdodG5pbmcgd2FsbGV0IGtleTogJHtjb2luLmdldEZhbWlseSgpfWApO1xuICB9XG4gIGNvbnN0IGtleUlkcyA9IHdhbGxldC5rZXlJZHMoKTtcbiAgaWYgKGtleUlkcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbnVtYmVyIG9mIGtleSBpbiBsaWdodG5pbmcgd2FsbGV0OiAke2tleUlkcy5sZW5ndGh9YCk7XG4gIH1cbiAgY29uc3Qga2V5Y2hhaW4gPSBhd2FpdCBjb2luLmtleWNoYWlucygpLmdldCh7IGlkOiBrZXlJZHNbMF0gfSk7XG4gIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShMaWdodG5pbmdLZXljaGFpbi5uYW1lLCBMaWdodG5pbmdLZXljaGFpbiwga2V5Y2hhaW4sIChfKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVzZXIga2V5YCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbGlnaHRuaW5nIGF1dGgga2V5Y2hhaW5zIGZvciB0aGUgZ2l2ZW4gd2FsbGV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucyh3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCk6IFByb21pc2U8e1xuICB1c2VyQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluO1xuICBub2RlQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluO1xufT4ge1xuICBjb25zdCBjb2luID0gd2FsbGV0LmJhc2VDb2luO1xuICBpZiAoY29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIHRvIGdldCBsaWdodG5pbmcgd2FsbGV0IGF1dGgga2V5czogJHtjb2luLmdldEZhbWlseSgpfWApO1xuICB9XG4gIGNvbnN0IGF1dGhLZXlJZHMgPSB3YWxsZXQuY29pblNwZWNpZmljKCk/LmtleXM7XG4gIGlmIChhdXRoS2V5SWRzPy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbnVtYmVyIG9mIGF1dGgga2V5cyBpbiBsaWdodG5pbmcgd2FsbGV0OiAke2F1dGhLZXlJZHM/Lmxlbmd0aH1gKTtcbiAgfVxuICBjb25zdCBrZXljaGFpbnMgPSBhd2FpdCBQcm9taXNlLmFsbChhdXRoS2V5SWRzLm1hcCgoaWQpID0+IGNvaW4ua2V5Y2hhaW5zKCkuZ2V0KHsgaWQgfSkpKTtcbiAgY29uc3QgYXV0aEtleWNoYWlucyA9IGtleWNoYWlucy5tYXAoKGtleWNoYWluKSA9PiB7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKExpZ2h0bmluZ0F1dGhLZXljaGFpbi5uYW1lLCBMaWdodG5pbmdBdXRoS2V5Y2hhaW4sIGtleWNoYWluLCAoXykgPT4ge1xuICAgICAgLy8gRE9OJ1QgdGhyb3cgZXJyb3JzIGZyb20gZGVjb2RlT3JFbHNlLiBJdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBsaWdodG5pbmcgYXV0aCBrZXk6ICR7a2V5Y2hhaW4/LmlkfWApO1xuICAgIH0pO1xuICB9KTtcbiAgY29uc3QgW3VzZXJBdXRoS2V5LCBub2RlQXV0aEtleV0gPSAoWyd1c2VyQXV0aCcsICdub2RlQXV0aCddIGFzIGNvbnN0KS5tYXAoKHB1cnBvc2UpID0+IHtcbiAgICBjb25zdCBrZXljaGFpbiA9IGF1dGhLZXljaGFpbnMuZmluZChcbiAgICAgIChrKSA9PiB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWMoay5jb2luU3BlY2lmaWMsIGNvaW4uZ2V0Q2hhaW4oKSkucHVycG9zZSA9PT0gcHVycG9zZVxuICAgICk7XG4gICAgaWYgKCFrZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICR7cHVycG9zZX0ga2V5YCk7XG4gICAgfVxuICAgIHJldHVybiBrZXljaGFpbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgdXNlckF1dGhLZXksIG5vZGVBdXRoS2V5IH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbGlnaHRuaW5nIGludm9pY2VcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyBJbnZvaWNlIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtiaWdpbnR9IHBhcmFtcy52YWx1ZU1zYXQgVGhlIHZhbHVlIG9mIHRoZSBpbnZvaWNlIGluIG1pbGxpc2F0b3NoaXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMubWVtb10gQSBtZW1vIG9yIGRlc2NyaXB0aW9uIGZvciB0aGUgaW52b2ljZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5leHBpcnldIFRoZSBleHBpcnkgdGltZSBvZiB0aGUgaW52b2ljZSBpbiBzZWNvbmRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEludm9pY2U+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBpbnZvaWNlXG4gICAqL1xuICBjcmVhdGVJbnZvaWNlKHBhcmFtczogQ3JlYXRlSW52b2ljZUJvZHkpOiBQcm9taXNlPEludm9pY2U+O1xuICAvKipcbiAgICogR2V0IGludm9pY2UgZGV0YWlscyBieSBwYXltZW50IGhhc2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBheW1lbnRIYXNoIC0gUGF5bWVudCBoYXNoIHRvIGxvb2t1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnZvaWNlPn0gSW52b2ljZSBkZXRhaWxzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRQYXltZW50SGFzaH0gV2hlbiBwYXltZW50IGhhc2ggaXMgbm90IHZhbGlkXG4gICAqL1xuICBnZXRJbnZvaWNlKHBheW1lbnRIYXNoOiBzdHJpbmcpOiBQcm9taXNlPEludm9pY2U+O1xuICAvKipcbiAgICogTGlzdHMgY3VycmVudCBsaWdodG5pbmcgaW52b2ljZXNcbiAgICogQHBhcmFtIHtJbnZvaWNlUXVlcnl9IHBhcmFtcyBRdWVyeSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgaW52b2ljZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuc3RhdHVzXSBUaGUgc3RhdHVzIG9mIHRoZSBpbnZvaWNlIChvcGVuLCBzZXR0bGVkLCBjYW5jZWxlZClcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnZvaWNlcyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJldklkXSBDb250aW51ZSBpdGVyYXRpbmcgKHByb3ZpZGVkIGJ5IG5leHRCYXRjaFByZXZJZCBpbiB0aGUgcHJldmlvdXMgbGlzdClcbiAgICogQHJldHVybnMge1Byb21pc2U8TGlzdEludm9pY2VzUmVzcG9uc2U+fSBMaXN0IG9mIGludm9pY2VzIGFuZCBuZXh0QmF0Y2hQcmV2SWRcbiAgICovXG4gIGxpc3RJbnZvaWNlcyhwYXJhbXM6IEludm9pY2VRdWVyeSk6IFByb21pc2U8TGlzdEludm9pY2VzUmVzcG9uc2U+O1xuXG4gIC8qKlxuICAgKiBQYXkgYSBsaWdodG5pbmcgaW52b2ljZVxuICAgKiBAcGFyYW0ge1N1Ym1pdFBheW1lbnRQYXJhbXN9IHBhcmFtcyAtIFBheW1lbnQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmludm9pY2UgLSBUaGUgaW52b2ljZSB0byBwYXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5hbW91bnRNc2F0IC0gVGhlIGFtb3VudCB0byBwYXkgaW4gbWlsbGlzYXRvc2hpc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBhc3NwaHJhc2UgLSBUaGUgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuc2VxdWVuY2VJZF0gLSBPcHRpb25hbCBzZXF1ZW5jZSBJRCBmb3IgdGhlIHJlc3BlY3RpdmUgcGF5bWVudCB0cmFuc2ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5jb21tZW50XSAtIE9wdGlvbmFsIGNvbW1lbnQgZm9yIHRoZSByZXNwZWN0aXZlIHBheW1lbnQgdHJhbnNmZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8UGF5SW52b2ljZVJlc3BvbnNlPn0gUGF5bWVudCByZXN1bHQgY29udGFpbmluZyB0cmFuc2FjdGlvbiByZXF1ZXN0IGRldGFpbHMgYW5kIHBheW1lbnQgc3RhdHVzXG4gICAqL1xuICBwYXlJbnZvaWNlKHBhcmFtczogU3VibWl0UGF5bWVudFBhcmFtcyk6IFByb21pc2U8UGF5SW52b2ljZVJlc3BvbnNlPjtcblxuICAvKipcbiAgICogT24gY2hhaW4gd2l0aGRyYXdhbFxuICAgKiBAcGFyYW0ge0xpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtc30gcGFyYW1zIC0gV2l0aGRyYXcgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge0xpZ2h0bmluZ09uY2hhaW5SZWNpcGllbnRbXX0gcGFyYW1zLnJlY2lwaWVudHMgLSBUaGUgcmVjaXBpZW50cyB0byBwYXlcbiAgICogQHBhcmFtIHtiaWdpbnR9IHBhcmFtcy5zYXRzUGVyVmJ5dGUgLSBWYWx1ZSBmb3Igc2F0cyBwZXIgdmlydHVhbCBieXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucGFzc3BocmFzZSAtIFRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zZXF1ZW5jZUlkXSAtIE9wdGlvbmFsIHNlcXVlbmNlIElEIGZvciB0aGUgcmVzcGVjdGl2ZSB3aXRoZHJhdyB0cmFuc2ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5jb21tZW50XSAtIE9wdGlvbmFsIGNvbW1lbnQgZm9yIHRoZSByZXNwZWN0aXZlIHdpdGhkcmF3IHRyYW5zZmVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1Jlc3BvbnNlPn0gV2l0aGRyYXcgcmVzdWx0IGNvbnRhaW5pbmcgdHJhbnNhY3Rpb24gcmVxdWVzdCBkZXRhaWxzIGFuZCBzdGF0dXNcbiAgICovXG4gIHdpdGhkcmF3T25jaGFpbihwYXJhbXM6IExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtcyk6IFByb21pc2U8TGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UmVzcG9uc2U+O1xuICAvKipcbiAgICogR2V0IHBheW1lbnQgZGV0YWlscyBieSBwYXltZW50IGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXltZW50SWQgLSBQYXltZW50IGlkIHRvIGxvb2t1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXltZW50SW5mbz59IFBheW1lbnQgZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkUGF5bWVudElkfSBXaGVuIHBheW1lbnQgaWQgaXMgbm90IHZhbGlkXG4gICAqL1xuICBnZXRQYXltZW50KHBheW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50SW5mbz47XG4gIC8qKlxuICAgKiBMaXN0IHBheW1lbnRzIGZvciBhIHdhbGxldCB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZ1xuICAgKiBAcGFyYW0ge1BheW1lbnRRdWVyeX0gcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBwYXltZW50c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zdGF0dXNdIFRoZSBzdGF0dXMgb2YgdGhlIHBheW1lbnRcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXltZW50cyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucGF5bWVudEhhc2hdIFRoZSBwYXltZW50IGhhc2ggb2YgdGhlIHBheW1lbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnByZXZJZF0gQ29udGludWUgaXRlcmF0aW5nIChwcm92aWRlZCBieSBuZXh0QmF0Y2hQcmV2SWQgaW4gdGhlIHByZXZpb3VzIGxpc3QpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExpc3RQYXltZW50c1Jlc3BvbnNlPn0gTGlzdCBvZiBwYXltZW50cyBhbmQgbmV4dEJhdGNoUHJldklkXG4gICAqL1xuICBsaXN0UGF5bWVudHMocGFyYW1zOiBQYXltZW50UXVlcnkpOiBQcm9taXNlPExpc3RQYXltZW50c1Jlc3BvbnNlPjtcbiAgLyoqXG4gICAqIEdldCB0cmFuc2FjdGlvbiBkZXRhaWxzIGJ5IElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eElkIC0gVHJhbnNhY3Rpb24gSUQgdG8gbG9va3VwXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRyYW5zYWN0aW9uPn0gVHJhbnNhY3Rpb24gZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkVHhJZH0gV2hlbiB0cmFuc2FjdGlvbiBJRCBpcyBub3QgdmFsaWRcbiAgICovXG4gIGdldFRyYW5zYWN0aW9uKHR4SWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb24+O1xuXG4gIC8qKlxuICAgKiBMaXN0IHRyYW5zYWN0aW9ucyBmb3IgYSB3YWxsZXQgd2l0aCBvcHRpb25hbCBmaWx0ZXJpbmdcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblF1ZXJ5fSBwYXJhbXMgUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIHRyYW5zYWN0aW9uc1xuICAgKiBAcGFyYW0ge2JpZ2ludH0gW3BhcmFtcy5saW1pdF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHJldHVybnMge1Byb21pc2U8VHJhbnNhY3Rpb25bXT59IExpc3Qgb2YgdHJhbnNhY3Rpb25zXG4gICAqL1xuICBsaXN0VHJhbnNhY3Rpb25zKHBhcmFtczogVHJhbnNhY3Rpb25RdWVyeSk6IFByb21pc2U8VHJhbnNhY3Rpb25bXT47XG59XG5cbmV4cG9ydCBjbGFzcyBMaWdodG5pbmdXYWxsZXQgaW1wbGVtZW50cyBJTGlnaHRuaW5nV2FsbGV0IHtcbiAgcHVibGljIHdhbGxldDogc2RrY29yZS5JV2FsbGV0O1xuXG4gIGNvbnN0cnVjdG9yKHdhbGxldDogc2RrY29yZS5JV2FsbGV0KSB7XG4gICAgY29uc3QgY29pbiA9IHdhbGxldC5iYXNlQ29pbjtcbiAgICBpZiAoY29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvaW4gZm9yIGxpZ2h0bmluZyB3YWxsZXQ6ICR7Y29pbi5nZXRGYW1pbHkoKX1gKTtcbiAgICB9XG4gICAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVJbnZvaWNlKHBhcmFtczogQ3JlYXRlSW52b2ljZUJvZHkpOiBQcm9taXNlPEludm9pY2U+IHtcbiAgICBjb25zdCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2VgLCAyKSlcbiAgICAgIC5zZW5kKHQuZXhhY3QoQ3JlYXRlSW52b2ljZUJvZHkpLmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShJbnZvaWNlLm5hbWUsIEludm9pY2UsIGNyZWF0ZUludm9pY2VSZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICAvLyBET04nVCB0aHJvdyBlcnJvcnMgZnJvbSBkZWNvZGVPckVsc2UuIEl0IGNvdWxkIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNyZWF0ZSBpbnZvaWNlIHJlc3BvbnNlICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRJbnZvaWNlKHBheW1lbnRIYXNoOiBzdHJpbmcpOiBQcm9taXNlPEludm9pY2U+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9pbnZvaWNlLyR7cGF5bWVudEhhc2h9YCwgMikpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShJbnZvaWNlLm5hbWUsIEludm9pY2UsIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnZXQgaW52b2ljZSByZXNwb25zZSAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdEludm9pY2VzKHBhcmFtczogSW52b2ljZVF1ZXJ5KTogUHJvbWlzZTxMaXN0SW52b2ljZXNSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJldHVybkNvZGVjID0gTGlzdEludm9pY2VzUmVzcG9uc2U7XG4gICAgY29uc3QgY3JlYXRlSW52b2ljZVJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2VgLCAyKSlcbiAgICAgIC5xdWVyeShJbnZvaWNlUXVlcnkuZW5jb2RlKHBhcmFtcykpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKHJldHVybkNvZGVjLm5hbWUsIHJldHVybkNvZGVjLCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpc3QgaW52b2ljZXMgcmVzcG9uc2UgJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHBheUludm9pY2UocGFyYW1zOiBTdWJtaXRQYXltZW50UGFyYW1zKTogUHJvbWlzZTxQYXlJbnZvaWNlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy53YWxsZXQuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG5cbiAgICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHRoaXMud2FsbGV0KTtcbiAgICBjb25zdCB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiA9IHVzZXJBdXRoS2V5LmVuY3J5cHRlZFBydjtcbiAgICBpZiAoIXVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVzZXIgYXV0aCBrZXkgaXMgbWlzc2luZyBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlgKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICAgIHQuZXhhY3QoTGlnaHRuaW5nUGF5bWVudFJlcXVlc3QpLmVuY29kZShwYXJhbXMpLFxuICAgICAgdGhpcy53YWxsZXQuYml0Z28uZGVjcnlwdCh7IHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSwgaW5wdXQ6IHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2IH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHBheW1lbnRJbnRlbnQ6IHsgaW50ZW50OiBMaWdodG5pbmdQYXltZW50SW50ZW50IH0gPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIHNpZ25lZFJlcXVlc3Q6IHtcbiAgICAgICAgICBpbnZvaWNlOiBwYXJhbXMuaW52b2ljZSxcbiAgICAgICAgICBhbW91bnRNc2F0OiBwYXJhbXMuYW1vdW50TXNhdCxcbiAgICAgICAgICBmZWVMaW1pdE1zYXQ6IHBhcmFtcy5mZWVMaW1pdE1zYXQsXG4gICAgICAgICAgZmVlTGltaXRSYXRpbzogcGFyYW1zLmZlZUxpbWl0UmF0aW8sXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZSA9IChhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKCcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzJywgMikpXG4gICAgICAuc2VuZCh0LnR5cGUoeyBpbnRlbnQ6IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQgfSkuZW5jb2RlKHBheW1lbnRJbnRlbnQpKVxuICAgICAgLnJlc3VsdCgpKSBhcyBUeFJlcXVlc3Q7XG5cbiAgICBpZiAodHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnN0YXRlID09PSAncGVuZGluZ0FwcHJvdmFsJykge1xuICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFscyA9IG5ldyBQZW5kaW5nQXBwcm92YWxzKHRoaXMud2FsbGV0LmJpdGdvLCB0aGlzLndhbGxldC5iYXNlQ29pbik7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSBhd2FpdCBwZW5kaW5nQXBwcm92YWxzLmdldCh7IGlkOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUucGVuZGluZ0FwcHJvdmFsSWQgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZW5kaW5nQXBwcm92YWw6IHBlbmRpbmdBcHByb3ZhbC50b0pTT04oKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCxcbiAgICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS5zdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmZXI6IHsgaWQ6IHN0cmluZyB9ID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wb3N0KFxuICAgICAgICB0aGlzLndhbGxldC5iaXRnby51cmwoXG4gICAgICAgICAgJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMvJyArIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCArICcvdHJhbnNmZXJzJyxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zZW5kKClcbiAgICAgIC5yZXN1bHQoKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQgPSBhd2FpdCBjb21tb25Uc3NNZXRob2RzLnNlbmRUeFJlcXVlc3QoXG4gICAgICB0aGlzLndhbGxldC5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQsXG4gICAgICBSZXF1ZXN0VHlwZS50eCxcbiAgICAgIHJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGNvaW5TcGVjaWZpYyA9IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQudHJhbnNhY3Rpb25zPy5bMF0/LnVuc2lnbmVkVHg/LmNvaW5TcGVjaWZpYztcbiAgICBsZXQgdXBkYXRlZFRyYW5zZmVyOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZWRUcmFuc2ZlciA9IGF3YWl0IHRoaXMud2FsbGV0LmdldFRyYW5zZmVyKHsgaWQ6IHRyYW5zZmVyLmlkIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIHRyYW5zZmVyIGlzIG5vdCBmb3VuZCB3aGljaCBpcyBwb3NzaWJsZSBpbiBjYXNlcyB3aGVyZSB0aGUgcGF5bWVudCBoYXMgZGVmaW5pdGVseSBmYWlsZWRcbiAgICAgIC8vIE9yIGV2ZW4gaWYgc29tZSB1bmtub3duIGVycm9yIG9jY3Vycywgd2Ugd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaGVyZVxuICAgICAgLy8gV2Ugc3RpbGwgd2FudCB0byByZXR1cm4gdGhlIHR4UmVxdWVzdElkLCB0eFJlcXVlc3RTdGF0ZSBhbmQgcGF5bWVudFN0YXR1cy5cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCxcbiAgICAgIHR4UmVxdWVzdFN0YXRlOiB0cmFuc2FjdGlvblJlcXVlc3RTZW5kLnN0YXRlLFxuICAgICAgcGF5bWVudFN0YXR1czogY29pblNwZWNpZmljXG4gICAgICAgID8gdC5leGFjdChMbmRDcmVhdGVQYXltZW50UmVzcG9uc2UpLmVuY29kZShjb2luU3BlY2lmaWMgYXMgTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHRyYW5zZmVyOiB1cGRhdGVkVHJhbnNmZXIsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHdpdGhkcmF3T25jaGFpbihwYXJhbXM6IExpZ2h0bmluZ09uY2hhaW5XaXRoZHJhd1BhcmFtcyk6IFByb21pc2U8TGlnaHRuaW5nT25jaGFpbldpdGhkcmF3UmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy53YWxsZXQuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG5cbiAgICBjb25zdCBwYXltZW50SW50ZW50OiB7IGludGVudDogTGlnaHRuaW5nUGF5bWVudEludGVudCB9ID0ge1xuICAgICAgaW50ZW50OiB7XG4gICAgICAgIGNvbW1lbnQ6IHBhcmFtcy5jb21tZW50LFxuICAgICAgICBzZXF1ZW5jZUlkOiBwYXJhbXMuc2VxdWVuY2VJZCxcbiAgICAgICAgb25jaGFpblJlcXVlc3Q6IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBwYXJhbXMucmVjaXBpZW50cyxcbiAgICAgICAgICBzYXRzUGVyVmJ5dGU6IHBhcmFtcy5zYXRzUGVyVmJ5dGUsXG4gICAgICAgIH0sXG4gICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZSA9IChhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKCcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzJywgMikpXG4gICAgICAuc2VuZCh0LnR5cGUoeyBpbnRlbnQ6IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQgfSkuZW5jb2RlKHBheW1lbnRJbnRlbnQpKVxuICAgICAgLnJlc3VsdCgpKSBhcyBUeFJlcXVlc3Q7XG5cbiAgICBpZiAoXG4gICAgICAhdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnRyYW5zYWN0aW9ucyB8fFxuICAgICAgdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICF0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4XG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNlcmlhbGl6ZWQgdHhIZXggaXMgbWlzc2luZ2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHdhbGxldERhdGEgPSB0aGlzLndhbGxldC50b0pTT04oKTtcbiAgICBpZiAoIXdhbGxldERhdGEuY29pblNwZWNpZmljLndhdGNoT25seUFjY291bnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHdhbGxldCBpcyBtaXNzaW5nIHdhdGNoIG9ubHkgYWNjb3VudHNgKTtcbiAgICB9XG5cbiAgICBjb25zdCB3YXRjaE9ubHlBY2NvdW50RGV0YWlscyA9IGRlY29kZU9yRWxzZShcbiAgICAgIFdhdGNoT25seS5uYW1lLFxuICAgICAgV2F0Y2hPbmx5LFxuICAgICAgd2FsbGV0RGF0YS5jb2luU3BlY2lmaWMud2F0Y2hPbmx5QWNjb3VudHMsXG4gICAgICAoZXJyb3JzKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB3YXRjaCBvbmx5IGFjY291bnRzLCBlcnJvcjogJHtlcnJvcnN9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgICBjb25zdCBuZXR3b3JrID0gZ2V0VXR4b2xpYk5ldHdvcmsodGhpcy53YWxsZXQuY29pbigpKTtcblxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZVBzYnRGb3JXaXRoZHJhdyhcbiAgICAgICAgdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4LnNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgbmV0d29yayxcbiAgICAgICAgcGFyYW1zLnJlY2lwaWVudHMsXG4gICAgICAgIHdhdGNoT25seUFjY291bnREZXRhaWxzLmFjY291bnRzXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGVycm9yIHZhbGlkYXRpbmcgd2l0aGRyYXcgcHNidDogJHtlcnJ9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyB1c2VyQXV0aEtleSB9ID0gYXdhaXQgZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucyh0aGlzLndhbGxldCk7XG4gICAgY29uc3QgdXNlckF1dGhLZXlFbmNyeXB0ZWRQcnYgPSB1c2VyQXV0aEtleS5lbmNyeXB0ZWRQcnY7XG4gICAgaWYgKCF1c2VyQXV0aEtleUVuY3J5cHRlZFBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyIGF1dGgga2V5IGlzIG1pc3NpbmcgZW5jcnlwdGVkIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUoXG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4LFxuICAgICAgdGhpcy53YWxsZXQuYml0Z28uZGVjcnlwdCh7IHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSwgaW5wdXQ6IHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2IH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUgPSAoYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wdXQoXG4gICAgICAgIHRoaXMud2FsbGV0LmJpdGdvLnVybChcbiAgICAgICAgICAnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHhyZXF1ZXN0cy8nICsgdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnR4UmVxdWVzdElkICsgJy9jb2luU3BlY2lmaWMnLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnNlbmQoe1xuICAgICAgICB1bnNpZ25lZENvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIGNvaW46IHRoaXMud2FsbGV0LmJhc2VDb2luLmdldENoYWluKCksXG4gICAgICAgICAgZGF0YTogeyBzaWduYXR1cmUgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KCkpIGFzIFR4UmVxdWVzdDtcblxuICAgIGlmICh0cmFuc2FjdGlvblJlcXVlc3RXaXRoU2lnbmF0dXJlLnN0YXRlID09PSAncGVuZGluZ0FwcHJvdmFsJykge1xuICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFscyA9IG5ldyBQZW5kaW5nQXBwcm92YWxzKHRoaXMud2FsbGV0LmJpdGdvLCB0aGlzLndhbGxldC5iYXNlQ29pbik7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSBhd2FpdCBwZW5kaW5nQXBwcm92YWxzLmdldCh7IGlkOiB0cmFuc2FjdGlvblJlcXVlc3RXaXRoU2lnbmF0dXJlLnBlbmRpbmdBcHByb3ZhbElkIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGVuZGluZ0FwcHJvdmFsOiBwZW5kaW5nQXBwcm92YWwudG9KU09OKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0cmFuc2FjdGlvblJlcXVlc3RXaXRoU2lnbmF0dXJlLnR4UmVxdWVzdElkLFxuICAgICAgICB0eFJlcXVlc3RTdGF0ZTogdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZS5zdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmZXI6IHsgaWQ6IHN0cmluZyB9ID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wb3N0KFxuICAgICAgICB0aGlzLndhbGxldC5iaXRnby51cmwoXG4gICAgICAgICAgJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMvJyArIHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUudHhSZXF1ZXN0SWQgKyAnL3RyYW5zZmVycycsXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc2VuZCgpXG4gICAgICAucmVzdWx0KCk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvblJlcXVlc3RTZW5kID0gYXdhaXQgY29tbW9uVHNzTWV0aG9kcy5zZW5kVHhSZXF1ZXN0KFxuICAgICAgdGhpcy53YWxsZXQuYml0Z28sXG4gICAgICB0aGlzLndhbGxldC5pZCgpLFxuICAgICAgdHJhbnNhY3Rpb25SZXF1ZXN0V2l0aFNpZ25hdHVyZS50eFJlcXVlc3RJZCxcbiAgICAgIFJlcXVlc3RUeXBlLnR4LFxuICAgICAgcmVxSWRcbiAgICApO1xuXG4gICAgY29uc3QgY29pblNwZWNpZmljID0gdHJhbnNhY3Rpb25SZXF1ZXN0U2VuZC50cmFuc2FjdGlvbnM/LlswXT8udW5zaWduZWRUeD8uY29pblNwZWNpZmljO1xuICAgIGxldCB1cGRhdGVkVHJhbnNmZXI6IGFueSA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdXBkYXRlZFRyYW5zZmVyID0gYXdhaXQgdGhpcy53YWxsZXQuZ2V0VHJhbnNmZXIoeyBpZDogdHJhbnNmZXIuaWQgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWYgdHJhbnNmZXIgaXMgbm90IGZvdW5kIHdoaWNoIGlzIHBvc3NpYmxlIGluIGNhc2VzIHdoZXJlIHRoZSB3aXRoZHJhdyBoYXMgZGVmaW5pdGVseSBmYWlsZWRcbiAgICAgIC8vIE9yIGV2ZW4gaWYgc29tZSB1bmtub3duIGVycm9yIG9jY3Vycywgd2Ugd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaGVyZVxuICAgICAgLy8gV2Ugc3RpbGwgd2FudCB0byByZXR1cm4gdGhlIHR4UmVxdWVzdElkIGFuZCB0eFJlcXVlc3RTdGF0ZS5cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdFdpdGhTaWduYXR1cmUudHhSZXF1ZXN0SWQsXG4gICAgICB0eFJlcXVlc3RTdGF0ZTogdHJhbnNhY3Rpb25SZXF1ZXN0U2VuZC5zdGF0ZSxcbiAgICAgIHRyYW5zZmVyOiB1cGRhdGVkVHJhbnNmZXIsXG4gICAgICB3aXRoZHJhd1N0YXR1czpcbiAgICAgICAgY29pblNwZWNpZmljICYmICdzdGF0dXMnIGluIGNvaW5TcGVjaWZpY1xuICAgICAgICAgID8gdC5leGFjdChMbmRDcmVhdGVXaXRoZHJhd1Jlc3BvbnNlKS5lbmNvZGUoY29pblNwZWNpZmljIGFzIExuZENyZWF0ZVdpdGhkcmF3UmVzcG9uc2UpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFBheW1lbnQocGF5bWVudElkOiBzdHJpbmcpOiBQcm9taXNlPFBheW1lbnRJbmZvPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvcGF5bWVudC8ke3BheW1lbnRJZH1gLCAyKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKFBheW1lbnRJbmZvLm5hbWUsIFBheW1lbnRJbmZvLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGF5bWVudCByZXNwb25zZTogJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RQYXltZW50cyhwYXJhbXM6IFBheW1lbnRRdWVyeSk6IFByb21pc2U8TGlzdFBheW1lbnRzUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9wYXltZW50YCwgMikpXG4gICAgICAucXVlcnkoUGF5bWVudFF1ZXJ5LmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UoTGlzdFBheW1lbnRzUmVzcG9uc2UubmFtZSwgTGlzdFBheW1lbnRzUmVzcG9uc2UsIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXltZW50IGxpc3QgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRUcmFuc2FjdGlvbih0eElkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvdHJhbnNhY3Rpb24vJHt0eElkfWAsIDIpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UoVHJhbnNhY3Rpb24ubmFtZSwgVHJhbnNhY3Rpb24sIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0cmFuc2FjdGlvbiByZXNwb25zZTogJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUcmFuc2FjdGlvbnMocGFyYW1zOiBUcmFuc2FjdGlvblF1ZXJ5KTogUHJvbWlzZTxUcmFuc2FjdGlvbltdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvdHJhbnNhY3Rpb25gLCAyKSlcbiAgICAgIC5xdWVyeShUcmFuc2FjdGlvblF1ZXJ5LmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UodC5hcnJheShUcmFuc2FjdGlvbikubmFtZSwgdC5hcnJheShUcmFuc2FjdGlvbiksIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0cmFuc2FjdGlvbiBsaXN0IHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,32 +0,0 @@
1
- import * as sdkcore from '@bitgo-beta/sdk-core';
2
- import { BackupResponse, UpdateLightningWalletClientRequest } from '../codecs';
3
- import { ILightningWallet, LightningWallet } from './lightning';
4
- /**
5
- * Updates the coin-specific configuration for a Lightning Wallet.
6
- *
7
- * @param {Wallet} wallet - Wallet.
8
- * @param {UpdateLightningWalletClientRequest} params - The parameters containing the updated wallet-specific details.
9
- * - `encryptedSignerMacaroon` (optional): This macaroon is used by the watch-only node to ask the signer node to sign transactions.
10
- * Encrypted with ECDH secret key from private key of wallet's user auth key and public key of lightning service.
11
- * - `encryptedSignerAdminMacaroon` (optional): Generated when initializing the wallet of the signer node.
12
- * Encrypted with client's wallet passphrase.
13
- * - `signerHost` (optional): The host address of the Lightning signer node.
14
- * - `encryptedSignerTlsKey` (optional): The wallet passphrase encrypted TLS key of the signer.
15
- * - `passphrase` (required): The wallet passphrase.
16
- * - `signerTlsCert` (optional): The TLS certificate of the signer.
17
- * - `watchOnlyAccounts` (optional): These are the accounts used to initialize the watch-only wallet.
18
- * @returns {Promise<unknown>} A promise resolving to the updated wallet response or throwing an error if the update fails.
19
- */
20
- export declare function updateWalletCoinSpecific(wallet: sdkcore.IWallet, params: UpdateLightningWalletClientRequest): Promise<unknown>;
21
- export interface ISelfCustodialLightningWallet extends ILightningWallet {
22
- /**
23
- * Get the channel backup for the given wallet.
24
- * @returns {Promise<BackupResponse>} A promise resolving to the channel backup
25
- */
26
- getChannelBackup(): Promise<BackupResponse>;
27
- }
28
- export declare class SelfCustodialLightningWallet extends LightningWallet implements ISelfCustodialLightningWallet {
29
- constructor(wallet: sdkcore.IWallet);
30
- getChannelBackup(): Promise<BackupResponse>;
31
- }
32
- //# sourceMappingURL=selfCustodialLightning.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selfCustodialLightning.d.ts","sourceRoot":"","sources":["../../../src/wallet/selfCustodialLightning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,kCAAkC,EAAyC,MAAM,WAAW,CAAC;AACtH,OAAO,EAA6B,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4C3F;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,MAAM,EAAE,kCAAkC,GACzC,OAAO,CAAC,OAAO,CAAC,CAmClB;AAED,MAAM,WAAW,6BAA8B,SAAQ,gBAAgB;IACrE;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7C;AAED,qBAAa,4BAA6B,SAAQ,eAAgB,YAAW,6BAA6B;gBAC5F,MAAM,EAAE,OAAO,CAAC,OAAO;IAO7B,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC;CAQlD"}
@@ -1,131 +0,0 @@
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
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SelfCustodialLightningWallet = void 0;
37
- exports.updateWalletCoinSpecific = updateWalletCoinSpecific;
38
- const sdkcore = __importStar(require("@bitgo-beta/sdk-core"));
39
- const codecs_1 = require("../codecs");
40
- const lightning_1 = require("./lightning");
41
- const lightning_2 = require("../lightning");
42
- const t = __importStar(require("io-ts"));
43
- function encryptWalletUpdateRequest(wallet, params, userAuthKeyEncryptedPrv) {
44
- const coinName = wallet.coin();
45
- const requestWithEncryption = {
46
- ...params,
47
- };
48
- const userAuthXprv = wallet.bitgo.decrypt({
49
- password: params.passphrase,
50
- input: userAuthKeyEncryptedPrv,
51
- });
52
- if (params.signerTlsKey) {
53
- requestWithEncryption.encryptedSignerTlsKey = wallet.bitgo.encrypt({
54
- password: params.passphrase,
55
- input: params.signerTlsKey,
56
- });
57
- }
58
- if (params.signerAdminMacaroon) {
59
- requestWithEncryption.encryptedSignerAdminMacaroon = wallet.bitgo.encrypt({
60
- password: params.passphrase,
61
- input: params.signerAdminMacaroon,
62
- });
63
- }
64
- if (params.signerMacaroon) {
65
- requestWithEncryption.encryptedSignerMacaroon = wallet.bitgo.encrypt({
66
- password: (0, lightning_2.deriveLightningServiceSharedSecret)(coinName, userAuthXprv).toString('hex'),
67
- input: params.signerMacaroon,
68
- });
69
- }
70
- return t.exact(codecs_1.UpdateLightningWalletEncryptedRequest).encode(requestWithEncryption);
71
- }
72
- /**
73
- * Updates the coin-specific configuration for a Lightning Wallet.
74
- *
75
- * @param {Wallet} wallet - Wallet.
76
- * @param {UpdateLightningWalletClientRequest} params - The parameters containing the updated wallet-specific details.
77
- * - `encryptedSignerMacaroon` (optional): This macaroon is used by the watch-only node to ask the signer node to sign transactions.
78
- * Encrypted with ECDH secret key from private key of wallet's user auth key and public key of lightning service.
79
- * - `encryptedSignerAdminMacaroon` (optional): Generated when initializing the wallet of the signer node.
80
- * Encrypted with client's wallet passphrase.
81
- * - `signerHost` (optional): The host address of the Lightning signer node.
82
- * - `encryptedSignerTlsKey` (optional): The wallet passphrase encrypted TLS key of the signer.
83
- * - `passphrase` (required): The wallet passphrase.
84
- * - `signerTlsCert` (optional): The TLS certificate of the signer.
85
- * - `watchOnlyAccounts` (optional): These are the accounts used to initialize the watch-only wallet.
86
- * @returns {Promise<unknown>} A promise resolving to the updated wallet response or throwing an error if the update fails.
87
- */
88
- async function updateWalletCoinSpecific(wallet, params) {
89
- if (!(0, lightning_2.isLightningCoinName)(wallet.coin())) {
90
- throw new Error(`cant update lightning wallet coin specific for coin ${wallet.subType()}`);
91
- }
92
- if (wallet.subType() !== 'lightningSelfCustody') {
93
- throw new Error(`cant update lightning wallet coin specific for wallet type ${wallet.subType()}`);
94
- }
95
- sdkcore.decodeOrElse(codecs_1.UpdateLightningWalletClientRequest.name, codecs_1.UpdateLightningWalletClientRequest, params, (errors) => {
96
- // DON'T throw errors from decodeOrElse. It could leak sensitive information.
97
- throw new Error(`Invalid params for lightning specific update wallet`);
98
- });
99
- const { userAuthKey } = await (0, lightning_1.getLightningAuthKeychains)(wallet);
100
- const userAuthKeyEncryptedPrv = userAuthKey.encryptedPrv;
101
- if (!userAuthKeyEncryptedPrv) {
102
- throw new Error(`user auth key is missing encrypted private key`);
103
- }
104
- const updateRequestWithEncryption = encryptWalletUpdateRequest(wallet, params, userAuthKeyEncryptedPrv);
105
- const signature = (0, lightning_2.createMessageSignature)(updateRequestWithEncryption, wallet.bitgo.decrypt({ password: params.passphrase, input: userAuthKeyEncryptedPrv }));
106
- const coinSpecific = {
107
- [wallet.coin()]: {
108
- signedRequest: updateRequestWithEncryption,
109
- signature,
110
- },
111
- };
112
- return await wallet.bitgo.put(wallet.url()).send({ coinSpecific }).result();
113
- }
114
- class SelfCustodialLightningWallet extends lightning_1.LightningWallet {
115
- constructor(wallet) {
116
- super(wallet);
117
- if (wallet.subType() !== 'lightningSelfCustody') {
118
- throw new Error(`Invalid lightning wallet type for self custodial lightning: ${wallet.subType()}`);
119
- }
120
- }
121
- async getChannelBackup() {
122
- const backupResponse = await this.wallet.bitgo
123
- .get(this.wallet.baseCoin.url(`/wallet/${this.wallet.id()}/lightning/backup`))
124
- .result();
125
- return sdkcore.decodeOrElse(codecs_1.BackupResponse.name, codecs_1.BackupResponse, backupResponse, (error) => {
126
- throw new Error(`Invalid backup response: ${error}`);
127
- });
128
- }
129
- }
130
- exports.SelfCustodialLightningWallet = SelfCustodialLightningWallet;
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZkN1c3RvZGlhbExpZ2h0bmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93YWxsZXQvc2VsZkN1c3RvZGlhbExpZ2h0bmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4REEsNERBc0NDO0FBcEdELDhEQUFnRDtBQUNoRCxzQ0FBc0g7QUFDdEgsMkNBQTJGO0FBQzNGLDRDQUErRztBQUMvRyx5Q0FBMkI7QUFFM0IsU0FBUywwQkFBMEIsQ0FDakMsTUFBdUIsRUFDdkIsTUFBMEMsRUFDMUMsdUJBQStCO0lBRS9CLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQXdCLENBQUM7SUFFckQsTUFBTSxxQkFBcUIsR0FBd0Y7UUFDakgsR0FBRyxNQUFNO0tBQ1YsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hDLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUMzQixLQUFLLEVBQUUsdUJBQXVCO0tBQy9CLENBQUMsQ0FBQztJQUVILElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLHFCQUFxQixDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2pFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUMzQixLQUFLLEVBQUUsTUFBTSxDQUFDLFlBQVk7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IscUJBQXFCLENBQUMsNEJBQTRCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDeEUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsbUJBQW1CO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENB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QUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2FBQzdFLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLHVCQUFjLENBQUMsSUFBSSxFQUFFLHVCQUFjLEVBQUUsY0FBYyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekYsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWhCRCxvRUFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZGtjb3JlIGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhY2t1cFJlc3BvbnNlLCBVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0LCBVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0IH0gZnJvbSAnLi4vY29kZWNzJztcbmltcG9ydCB7IGdldExpZ2h0bmluZ0F1dGhLZXljaGFpbnMsIElMaWdodG5pbmdXYWxsZXQsIExpZ2h0bmluZ1dhbGxldCB9IGZyb20gJy4vbGlnaHRuaW5nJztcbmltcG9ydCB7IGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUsIGRlcml2ZUxpZ2h0bmluZ1NlcnZpY2VTaGFyZWRTZWNyZXQsIGlzTGlnaHRuaW5nQ29pbk5hbWUgfSBmcm9tICcuLi9saWdodG5pbmcnO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5cbmZ1bmN0aW9uIGVuY3J5cHRXYWxsZXRVcGRhdGVSZXF1ZXN0KFxuICB3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCxcbiAgcGFyYW1zOiBVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0LFxuICB1c2VyQXV0aEtleUVuY3J5cHRlZFBydjogc3RyaW5nXG4pOiBVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0IHtcbiAgY29uc3QgY29pbk5hbWUgPSB3YWxsZXQuY29pbigpIGFzICd0bG5idGMnIHwgJ2xuYnRjJztcblxuICBjb25zdCByZXF1ZXN0V2l0aEVuY3J5cHRpb246IFBhcnRpYWw8VXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdCAmIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldEVuY3J5cHRlZFJlcXVlc3Q+ID0ge1xuICAgIC4uLnBhcmFtcyxcbiAgfTtcblxuICBjb25zdCB1c2VyQXV0aFhwcnYgPSB3YWxsZXQuYml0Z28uZGVjcnlwdCh7XG4gICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgIGlucHV0OiB1c2VyQXV0aEtleUVuY3J5cHRlZFBydixcbiAgfSk7XG5cbiAgaWYgKHBhcmFtcy5zaWduZXJUbHNLZXkpIHtcbiAgICByZXF1ZXN0V2l0aEVuY3J5cHRpb24uZW5jcnlwdGVkU2lnbmVyVGxzS2V5ID0gd2FsbGV0LmJpdGdvLmVuY3J5cHQoe1xuICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgaW5wdXQ6IHBhcmFtcy5zaWduZXJUbHNLZXksXG4gICAgfSk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNpZ25lckFkbWluTWFjYXJvb24pIHtcbiAgICByZXF1ZXN0V2l0aEVuY3J5cHRpb24uZW5jcnlwdGVkU2lnbmVyQWRtaW5NYWNhcm9vbiA9IHdhbGxldC5iaXRnby5lbmNyeXB0KHtcbiAgICAgIHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIGlucHV0OiBwYXJhbXMuc2lnbmVyQWRtaW5NYWNhcm9vbixcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2lnbmVyTWFjYXJvb24pIHtcbiAgICByZXF1ZXN0V2l0aEVuY3J5cHRpb24uZW5jcnlwdGVkU2lnbmVyTWFjYXJvb24gPSB3YWxsZXQuYml0Z28uZW5jcnlwdCh7XG4gICAgICBwYXNzd29yZDogZGVyaXZlTGlnaHRuaW5nU2VydmljZVNoYXJlZFNlY3JldChjb2luTmFtZSwgdXNlckF1dGhYcHJ2KS50b1N0cmluZygnaGV4JyksXG4gICAgICBpbnB1dDogcGFyYW1zLnNpZ25lck1hY2Fyb29uLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHQuZXhhY3QoVXBkYXRlTGlnaHRuaW5nV2FsbGV0RW5jcnlwdGVkUmVxdWVzdCkuZW5jb2RlKHJlcXVlc3RXaXRoRW5jcnlwdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgY29pbi1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIExpZ2h0bmluZyBXYWxsZXQuXG4gKlxuICogQHBhcmFtIHtXYWxsZXR9IHdhbGxldCAtIFdhbGxldC5cbiAqIEBwYXJhbSB7VXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdH0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgY29udGFpbmluZyB0aGUgdXBkYXRlZCB3YWxsZXQtc3BlY2lmaWMgZGV0YWlscy5cbiAqICAgLSBgZW5jcnlwdGVkU2lnbmVyTWFjYXJvb25gIChvcHRpb25hbCk6IFRoaXMgbWFjYXJvb24gaXMgdXNlZCBieSB0aGUgd2F0Y2gtb25seSBub2RlIHRvIGFzayB0aGUgc2lnbmVyIG5vZGUgdG8gc2lnbiB0cmFuc2FjdGlvbnMuXG4gKiAgICAgRW5jcnlwdGVkIHdpdGggRUNESCBzZWNyZXQga2V5IGZyb20gcHJpdmF0ZSBrZXkgb2Ygd2FsbGV0J3MgdXNlciBhdXRoIGtleSBhbmQgcHVibGljIGtleSBvZiBsaWdodG5pbmcgc2VydmljZS5cbiAqICAgLSBgZW5jcnlwdGVkU2lnbmVyQWRtaW5NYWNhcm9vbmAgKG9wdGlvbmFsKTogR2VuZXJhdGVkIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSB3YWxsZXQgb2YgdGhlIHNpZ25lciBub2RlLlxuICogICAgIEVuY3J5cHRlZCB3aXRoIGNsaWVudCdzIHdhbGxldCBwYXNzcGhyYXNlLlxuICogICAtIGBzaWduZXJIb3N0YCAob3B0aW9uYWwpOiBUaGUgaG9zdCBhZGRyZXNzIG9mIHRoZSBMaWdodG5pbmcgc2lnbmVyIG5vZGUuXG4gKiAgIC0gYGVuY3J5cHRlZFNpZ25lclRsc0tleWAgKG9wdGlvbmFsKTogVGhlIHdhbGxldCBwYXNzcGhyYXNlIGVuY3J5cHRlZCBUTFMga2V5IG9mIHRoZSBzaWduZXIuXG4gKiAgIC0gYHBhc3NwaHJhc2VgIChyZXF1aXJlZCk6IFRoZSB3YWxsZXQgcGFzc3BocmFzZS5cbiAqICAgLSBgc2lnbmVyVGxzQ2VydGAgKG9wdGlvbmFsKTogVGhlIFRMUyBjZXJ0aWZpY2F0ZSBvZiB0aGUgc2lnbmVyLlxuICogICAtIGB3YXRjaE9ubHlBY2NvdW50c2AgKG9wdGlvbmFsKTogVGhlc2UgYXJlIHRoZSBhY2NvdW50cyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHdhdGNoLW9ubHkgd2FsbGV0LlxuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHVwZGF0ZWQgd2FsbGV0IHJlc3BvbnNlIG9yIHRocm93aW5nIGFuIGVycm9yIGlmIHRoZSB1cGRhdGUgZmFpbHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVXYWxsZXRDb2luU3BlY2lmaWMoXG4gIHdhbGxldDogc2RrY29yZS5JV2FsbGV0LFxuICBwYXJhbXM6IFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3Rcbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBpZiAoIWlzTGlnaHRuaW5nQ29pbk5hbWUod2FsbGV0LmNvaW4oKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbnQgdXBkYXRlIGxpZ2h0bmluZyB3YWxsZXQgY29pbiBzcGVjaWZpYyBmb3IgY29pbiAke3dhbGxldC5zdWJUeXBlKCl9YCk7XG4gIH1cbiAgaWYgKHdhbGxldC5zdWJUeXBlKCkgIT09ICdsaWdodG5pbmdTZWxmQ3VzdG9keScpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbnQgdXBkYXRlIGxpZ2h0bmluZyB3YWxsZXQgY29pbiBzcGVjaWZpYyBmb3Igd2FsbGV0IHR5cGUgJHt3YWxsZXQuc3ViVHlwZSgpfWApO1xuICB9XG5cbiAgc2RrY29yZS5kZWNvZGVPckVsc2UoXG4gICAgVXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdC5uYW1lLFxuICAgIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QsXG4gICAgcGFyYW1zLFxuICAgIChlcnJvcnMpID0+IHtcbiAgICAgIC8vIERPTidUIHRocm93IGVycm9ycyBmcm9tIGRlY29kZU9yRWxzZS4gSXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1zIGZvciBsaWdodG5pbmcgc3BlY2lmaWMgdXBkYXRlIHdhbGxldGApO1xuICAgIH1cbiAgKTtcblxuICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHdhbGxldCk7XG4gIGNvbnN0IHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2ID0gdXNlckF1dGhLZXkuZW5jcnlwdGVkUHJ2O1xuICBpZiAoIXVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1c2VyIGF1dGgga2V5IGlzIG1pc3NpbmcgZW5jcnlwdGVkIHByaXZhdGUga2V5YCk7XG4gIH1cbiAgY29uc3QgdXBkYXRlUmVxdWVzdFdpdGhFbmNyeXB0aW9uID0gZW5jcnlwdFdhbGxldFVwZGF0ZVJlcXVlc3Qod2FsbGV0LCBwYXJhbXMsIHVzZXJBdXRoS2V5RW5jcnlwdGVkUHJ2KTtcbiAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICB1cGRhdGVSZXF1ZXN0V2l0aEVuY3J5cHRpb24sXG4gICAgd2FsbGV0LmJpdGdvLmRlY3J5cHQoeyBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsIGlucHV0OiB1c2VyQXV0aEtleUVuY3J5cHRlZFBydiB9KVxuICApO1xuICBjb25zdCBjb2luU3BlY2lmaWMgPSB7XG4gICAgW3dhbGxldC5jb2luKCldOiB7XG4gICAgICBzaWduZWRSZXF1ZXN0OiB1cGRhdGVSZXF1ZXN0V2l0aEVuY3J5cHRpb24sXG4gICAgICBzaWduYXR1cmUsXG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHdhbGxldC5iaXRnby5wdXQod2FsbGV0LnVybCgpKS5zZW5kKHsgY29pblNwZWNpZmljIH0pLnJlc3VsdCgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZWxmQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IGV4dGVuZHMgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoYW5uZWwgYmFja3VwIGZvciB0aGUgZ2l2ZW4gd2FsbGV0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCYWNrdXBSZXNwb25zZT59IEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNoYW5uZWwgYmFja3VwXG4gICAqL1xuICBnZXRDaGFubmVsQmFja3VwKCk6IFByb21pc2U8QmFja3VwUmVzcG9uc2U+O1xufVxuXG5leHBvcnQgY2xhc3MgU2VsZkN1c3RvZGlhbExpZ2h0bmluZ1dhbGxldCBleHRlbmRzIExpZ2h0bmluZ1dhbGxldCBpbXBsZW1lbnRzIElTZWxmQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IHtcbiAgY29uc3RydWN0b3Iod2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpIHtcbiAgICBzdXBlcih3YWxsZXQpO1xuICAgIGlmICh3YWxsZXQuc3ViVHlwZSgpICE9PSAnbGlnaHRuaW5nU2VsZkN1c3RvZHknKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGlnaHRuaW5nIHdhbGxldCB0eXBlIGZvciBzZWxmIGN1c3RvZGlhbCBsaWdodG5pbmc6ICR7d2FsbGV0LnN1YlR5cGUoKX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDaGFubmVsQmFja3VwKCk6IFByb21pc2U8QmFja3VwUmVzcG9uc2U+IHtcbiAgICBjb25zdCBiYWNrdXBSZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJhc2VDb2luLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9iYWNrdXBgKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoQmFja3VwUmVzcG9uc2UubmFtZSwgQmFja3VwUmVzcG9uc2UsIGJhY2t1cFJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiYWNrdXAgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +0,0 @@
1
- import * as sdkcore from '@bitgo-beta/sdk-core';
2
- import { ILightningWallet } from './lightning';
3
- /**
4
- * Returns custodial or self custodial lightning wallet depends on wallet type.
5
- */
6
- export declare function getLightningWallet(wallet: sdkcore.IWallet): ILightningWallet;
7
- //# sourceMappingURL=wallet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/wallet/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAa5E"}
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getLightningWallet = getLightningWallet;
4
- const selfCustodialLightning_1 = require("./selfCustodialLightning");
5
- const custodialLightning_1 = require("./custodialLightning");
6
- /**
7
- * Returns custodial or self custodial lightning wallet depends on wallet type.
8
- */
9
- function getLightningWallet(wallet) {
10
- if (wallet.baseCoin.getFamily() !== 'lnbtc') {
11
- throw new Error(`invalid coin for lightning wallet: ${wallet.baseCoin.getFamily()}`);
12
- }
13
- switch (wallet.subType()) {
14
- case 'lightningCustody':
15
- return new custodialLightning_1.CustodialLightningWallet(wallet);
16
- case 'lightningSelfCustody':
17
- return new selfCustodialLightning_1.SelfCustodialLightningWallet(wallet);
18
- default:
19
- throw new Error(`invalid wallet type ${wallet.subType()} for lightning coin`);
20
- }
21
- }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC93YWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxnREFhQztBQXBCRCxxRUFBd0U7QUFDeEUsNkRBQWdFO0FBR2hFOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsTUFBdUI7SUFDeEQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxRQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLEtBQUssa0JBQWtCO1lBQ3JCLE9BQU8sSUFBSSw2Q0FBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxLQUFLLHNCQUFzQjtZQUN6QixPQUFPLElBQUkscURBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQ7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixNQUFNLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDbEYsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZGtjb3JlIGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFNlbGZDdXN0b2RpYWxMaWdodG5pbmdXYWxsZXQgfSBmcm9tICcuL3NlbGZDdXN0b2RpYWxMaWdodG5pbmcnO1xuaW1wb3J0IHsgQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IH0gZnJvbSAnLi9jdXN0b2RpYWxMaWdodG5pbmcnO1xuaW1wb3J0IHsgSUxpZ2h0bmluZ1dhbGxldCB9IGZyb20gJy4vbGlnaHRuaW5nJztcblxuLyoqXG4gKiBSZXR1cm5zIGN1c3RvZGlhbCBvciBzZWxmIGN1c3RvZGlhbCBsaWdodG5pbmcgd2FsbGV0IGRlcGVuZHMgb24gd2FsbGV0IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWdodG5pbmdXYWxsZXQod2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpOiBJTGlnaHRuaW5nV2FsbGV0IHtcbiAgaWYgKHdhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjb2luIGZvciBsaWdodG5pbmcgd2FsbGV0OiAke3dhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKX1gKTtcbiAgfVxuXG4gIHN3aXRjaCAod2FsbGV0LnN1YlR5cGUoKSkge1xuICAgIGNhc2UgJ2xpZ2h0bmluZ0N1c3RvZHknOlxuICAgICAgcmV0dXJuIG5ldyBDdXN0b2RpYWxMaWdodG5pbmdXYWxsZXQod2FsbGV0KTtcbiAgICBjYXNlICdsaWdodG5pbmdTZWxmQ3VzdG9keSc6XG4gICAgICByZXR1cm4gbmV3IFNlbGZDdXN0b2RpYWxMaWdodG5pbmdXYWxsZXQod2FsbGV0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHdhbGxldCB0eXBlICR7d2FsbGV0LnN1YlR5cGUoKX0gZm9yIGxpZ2h0bmluZyBjb2luYCk7XG4gIH1cbn1cbiJdfQ==