@bitgo/sdk-coin-sui 1.7.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/src/lib/bcs.js +25 -1
- package/dist/src/lib/constants.d.ts +13 -5
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +16 -8
- package/dist/src/lib/iface.d.ts +153 -4
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +53 -1
- package/dist/src/lib/index.d.ts +3 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +8 -2
- package/dist/src/lib/stakingBuilder.d.ts +73 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingBuilder.js +223 -0
- package/dist/src/lib/stakingTransaction.d.ts +67 -0
- package/dist/src/lib/stakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/stakingTransaction.js +353 -0
- package/dist/src/lib/transaction.d.ts +17 -30
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +75 -218
- package/dist/src/lib/transactionBuilder.d.ts +12 -27
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +1 -160
- package/dist/src/lib/transactionBuilderFactory.d.ts +6 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +22 -6
- package/dist/src/lib/transferBuilder.d.ts +25 -1
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +165 -1
- package/dist/src/lib/transferTransaction.d.ts +53 -0
- package/dist/src/lib/transferTransaction.d.ts.map +1 -0
- package/dist/src/lib/transferTransaction.js +240 -0
- package/dist/src/lib/txnSchema.d.ts +7 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -0
- package/dist/src/lib/txnSchema.js +81 -0
- package/dist/src/lib/utils.d.ts +111 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +201 -2
- package/dist/src/sui.d.ts.map +1 -1
- package/dist/src/sui.js +3 -2
- package/package.json +7 -6
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Transaction = void 0;
|
|
7
7
|
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
8
|
+
const iface_1 = require("./iface");
|
|
8
9
|
const utils_1 = __importDefault(require("./utils"));
|
|
9
10
|
const bcs_1 = require("./bcs");
|
|
10
11
|
const constants_1 = require("./constants");
|
|
@@ -50,9 +51,6 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
50
51
|
serialized_sig.set(pubKey, 1 + signature.length);
|
|
51
52
|
this._serializedSig = serialized_sig;
|
|
52
53
|
}
|
|
53
|
-
getInputCoins() {
|
|
54
|
-
return this.suiTransaction.payTx.coins;
|
|
55
|
-
}
|
|
56
54
|
/** @inheritdoc */
|
|
57
55
|
canSign(key) {
|
|
58
56
|
return true;
|
|
@@ -77,74 +75,6 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
77
75
|
}
|
|
78
76
|
return this.serialize();
|
|
79
77
|
}
|
|
80
|
-
/** @inheritdoc */
|
|
81
|
-
toJson() {
|
|
82
|
-
if (!this._suiTransaction) {
|
|
83
|
-
throw new sdk_core_1.ParseTransactionError('Empty transaction');
|
|
84
|
-
}
|
|
85
|
-
const tx = this._suiTransaction;
|
|
86
|
-
let txDetails;
|
|
87
|
-
switch (tx.type) {
|
|
88
|
-
case constants_1.SuiTransactionType.Pay:
|
|
89
|
-
txDetails = {
|
|
90
|
-
Pay: {
|
|
91
|
-
coins: tx.payTx.coins,
|
|
92
|
-
recipients: tx.payTx.recipients,
|
|
93
|
-
amounts: tx.payTx.amounts,
|
|
94
|
-
},
|
|
95
|
-
};
|
|
96
|
-
break;
|
|
97
|
-
case constants_1.SuiTransactionType.PaySui:
|
|
98
|
-
txDetails = {
|
|
99
|
-
PaySui: {
|
|
100
|
-
coins: tx.payTx.coins,
|
|
101
|
-
recipients: tx.payTx.recipients,
|
|
102
|
-
amounts: tx.payTx.amounts,
|
|
103
|
-
},
|
|
104
|
-
};
|
|
105
|
-
break;
|
|
106
|
-
case constants_1.SuiTransactionType.PayAllSui:
|
|
107
|
-
txDetails = {
|
|
108
|
-
PayAllSui: {
|
|
109
|
-
coins: tx.payTx.coins,
|
|
110
|
-
recipient: tx.payTx.recipients[0],
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
break;
|
|
114
|
-
default:
|
|
115
|
-
throw new sdk_core_1.InvalidTransactionError('SuiTransactionType not supported');
|
|
116
|
-
}
|
|
117
|
-
return {
|
|
118
|
-
id: this._id,
|
|
119
|
-
kind: { Single: txDetails },
|
|
120
|
-
sender: tx.sender,
|
|
121
|
-
gasPayment: tx.gasPayment,
|
|
122
|
-
gasBudget: tx.gasBudget,
|
|
123
|
-
gasPrice: constants_1.SUI_GAS_PRICE,
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
/** @inheritDoc */
|
|
127
|
-
explainTransaction() {
|
|
128
|
-
const result = this.toJson();
|
|
129
|
-
const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'];
|
|
130
|
-
const outputs = [];
|
|
131
|
-
const explanationResult = {
|
|
132
|
-
displayOrder,
|
|
133
|
-
id: this.id,
|
|
134
|
-
outputs,
|
|
135
|
-
outputAmount: '0',
|
|
136
|
-
changeOutputs: [],
|
|
137
|
-
changeAmount: '0',
|
|
138
|
-
fee: { fee: this.suiTransaction.gasBudget.toString() },
|
|
139
|
-
type: this.type,
|
|
140
|
-
};
|
|
141
|
-
switch (this.type) {
|
|
142
|
-
case sdk_core_1.TransactionType.Send:
|
|
143
|
-
return this.explainTransferTransaction(result, explanationResult);
|
|
144
|
-
default:
|
|
145
|
-
throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
78
|
/**
|
|
149
79
|
* Set the transaction type.
|
|
150
80
|
*
|
|
@@ -153,98 +83,6 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
153
83
|
transactionType(transactionType) {
|
|
154
84
|
this._type = transactionType;
|
|
155
85
|
}
|
|
156
|
-
/**
|
|
157
|
-
* Load the input and output data on this transaction.
|
|
158
|
-
*/
|
|
159
|
-
loadInputsAndOutputs() {
|
|
160
|
-
if (!this.suiTransaction) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
const tx = this.suiTransaction;
|
|
164
|
-
const payTx = tx.payTx;
|
|
165
|
-
const recipients = payTx.recipients;
|
|
166
|
-
const amounts = payTx.amounts;
|
|
167
|
-
if (tx.type !== constants_1.SuiTransactionType.PayAllSui && recipients.length !== amounts.length) {
|
|
168
|
-
throw new Error(`The length of recipients ${recipients.length} does not equal to the length of amounts ${amounts.length}`);
|
|
169
|
-
}
|
|
170
|
-
const isEmptyAmount = amounts.length === 0;
|
|
171
|
-
this._outputs = recipients.map((recipient, index) => ({
|
|
172
|
-
address: recipient,
|
|
173
|
-
value: isEmptyAmount ? '' : amounts[index].toString(),
|
|
174
|
-
coin: this._coinConfig.name,
|
|
175
|
-
}));
|
|
176
|
-
const totalAmount = isEmptyAmount ? '' : amounts.reduce((accumulator, current) => accumulator + current, 0);
|
|
177
|
-
this._inputs = [
|
|
178
|
-
{
|
|
179
|
-
address: tx.sender,
|
|
180
|
-
value: totalAmount.toString(),
|
|
181
|
-
coin: this._coinConfig.name,
|
|
182
|
-
},
|
|
183
|
-
];
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Sets this transaction payload
|
|
187
|
-
*
|
|
188
|
-
* @param rawTransaction
|
|
189
|
-
*/
|
|
190
|
-
fromRawTransaction(rawTransaction) {
|
|
191
|
-
try {
|
|
192
|
-
utils_1.default.isValidRawTransaction(rawTransaction);
|
|
193
|
-
this._suiTransaction = Transaction.deserializeSuiTransaction(rawTransaction);
|
|
194
|
-
this._type = sdk_core_1.TransactionType.Send;
|
|
195
|
-
this.loadInputsAndOutputs();
|
|
196
|
-
}
|
|
197
|
-
catch (e) {
|
|
198
|
-
throw e;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Helper function for serialize() to get the correct txData with transaction type
|
|
203
|
-
*/
|
|
204
|
-
getTxData() {
|
|
205
|
-
if (!this._suiTransaction) {
|
|
206
|
-
throw new sdk_core_1.InvalidTransactionError('empty transaction');
|
|
207
|
-
}
|
|
208
|
-
const suiTx = this._suiTransaction;
|
|
209
|
-
let tx;
|
|
210
|
-
switch (suiTx.type) {
|
|
211
|
-
case constants_1.SuiTransactionType.Pay:
|
|
212
|
-
tx = {
|
|
213
|
-
Pay: {
|
|
214
|
-
coins: suiTx.payTx.coins,
|
|
215
|
-
recipients: suiTx.payTx.recipients,
|
|
216
|
-
amounts: suiTx.payTx.amounts,
|
|
217
|
-
},
|
|
218
|
-
};
|
|
219
|
-
break;
|
|
220
|
-
case constants_1.SuiTransactionType.PaySui:
|
|
221
|
-
tx = {
|
|
222
|
-
PaySui: {
|
|
223
|
-
coins: suiTx.payTx.coins,
|
|
224
|
-
recipients: suiTx.payTx.recipients,
|
|
225
|
-
amounts: suiTx.payTx.amounts,
|
|
226
|
-
},
|
|
227
|
-
};
|
|
228
|
-
break;
|
|
229
|
-
case constants_1.SuiTransactionType.PayAllSui:
|
|
230
|
-
tx = {
|
|
231
|
-
PayAllSui: {
|
|
232
|
-
coins: suiTx.payTx.coins,
|
|
233
|
-
recipient: suiTx.payTx.recipients[0],
|
|
234
|
-
},
|
|
235
|
-
};
|
|
236
|
-
break;
|
|
237
|
-
default:
|
|
238
|
-
throw new sdk_core_1.InvalidTransactionError('SuiTransactionType not supported');
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
kind: { Single: tx },
|
|
242
|
-
gasPayment: suiTx.gasPayment,
|
|
243
|
-
gasPrice: constants_1.SUI_GAS_PRICE,
|
|
244
|
-
gasBudget: suiTx.gasBudget,
|
|
245
|
-
sender: suiTx.sender,
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
86
|
getDataBytes() {
|
|
249
87
|
const txData = this.getTxData();
|
|
250
88
|
return bcs_1.bcs.ser('TransactionData', txData, constants_1.SER_BUFFER_SIZE).toBytes();
|
|
@@ -280,26 +118,26 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
280
118
|
let type;
|
|
281
119
|
const txDetails = k.kind.Single;
|
|
282
120
|
if (txDetails.hasOwnProperty('Pay')) {
|
|
283
|
-
type =
|
|
121
|
+
type = iface_1.SuiTransactionType.Pay;
|
|
284
122
|
}
|
|
285
123
|
else if (txDetails.hasOwnProperty('PaySui')) {
|
|
286
|
-
type =
|
|
124
|
+
type = iface_1.SuiTransactionType.PaySui;
|
|
287
125
|
}
|
|
288
126
|
else if (txDetails.hasOwnProperty('PayAllSui')) {
|
|
289
|
-
type =
|
|
127
|
+
type = iface_1.SuiTransactionType.PayAllSui;
|
|
128
|
+
}
|
|
129
|
+
else if (txDetails.hasOwnProperty('Call')) {
|
|
130
|
+
const moveCallTxDetail = txDetails;
|
|
131
|
+
type = utils_1.default.getSuiTransactionType(moveCallTxDetail.Call.function);
|
|
290
132
|
}
|
|
291
133
|
else {
|
|
292
134
|
throw new Error('Transaction type not supported: ' + txDetails);
|
|
293
135
|
}
|
|
294
|
-
const
|
|
136
|
+
const tx = this.getProperTxDetails(k, type);
|
|
295
137
|
return {
|
|
296
138
|
type,
|
|
297
139
|
sender: utils_1.default.normalizeHexId(k.sender),
|
|
298
|
-
|
|
299
|
-
coins,
|
|
300
|
-
recipients,
|
|
301
|
-
amounts,
|
|
302
|
-
},
|
|
140
|
+
tx: tx,
|
|
303
141
|
gasBudget: k.gasBudget.toNumber(),
|
|
304
142
|
gasPrice: k.gasPrice.toNumber(),
|
|
305
143
|
gasPayment: {
|
|
@@ -310,60 +148,79 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
310
148
|
};
|
|
311
149
|
}
|
|
312
150
|
static getProperTxDetails(k, type) {
|
|
313
|
-
// bcs deserialized number into Big Number and removed '0x' prefix from addresses, needs to convert them back
|
|
314
|
-
let coins;
|
|
315
|
-
let recipients;
|
|
316
|
-
let amounts;
|
|
317
151
|
switch (type) {
|
|
318
|
-
case
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
152
|
+
case iface_1.SuiTransactionType.Pay:
|
|
153
|
+
return {
|
|
154
|
+
coins: this.normalizeCoins(k.kind.Single.Pay.coins),
|
|
155
|
+
recipients: k.kind.Single.Pay.recipients.map((recipient) => utils_1.default.normalizeHexId(recipient)),
|
|
156
|
+
amounts: k.kind.Single.Pay.amounts.map((amount) => amount.toNumber()),
|
|
157
|
+
};
|
|
158
|
+
case iface_1.SuiTransactionType.PaySui:
|
|
159
|
+
return {
|
|
160
|
+
coins: this.normalizeCoins(k.kind.Single.PaySui.coins),
|
|
161
|
+
recipients: k.kind.Single.PaySui.recipients.map((recipient) => utils_1.default.normalizeHexId(recipient)),
|
|
162
|
+
amounts: k.kind.Single.PaySui.amounts.map((amount) => amount.toNumber()),
|
|
163
|
+
};
|
|
164
|
+
case iface_1.SuiTransactionType.PayAllSui:
|
|
165
|
+
return {
|
|
166
|
+
coins: this.normalizeCoins(k.kind.Single.PayAllSui.coins),
|
|
167
|
+
recipients: [k.kind.Single.PayAllSui.recipient].map((recipient) => utils_1.default.normalizeHexId(recipient)),
|
|
168
|
+
amounts: [], // PayAllSui deserialization doesn't return the amount
|
|
169
|
+
};
|
|
170
|
+
case iface_1.SuiTransactionType.AddDelegation:
|
|
171
|
+
return {
|
|
172
|
+
package: k.kind.Single.Call.package,
|
|
173
|
+
module: k.kind.Single.Call.module,
|
|
174
|
+
function: k.kind.Single.Call.function,
|
|
175
|
+
typeArguments: k.kind.Single.Call.typeArguments,
|
|
176
|
+
arguments: [
|
|
177
|
+
utils_1.default.mapCallArgToSharedObject(k.kind.Single.Call.arguments[0]),
|
|
178
|
+
this.normalizeCoins(utils_1.default.mapCallArgToCoins(k.kind.Single.Call.arguments[1])),
|
|
179
|
+
utils_1.default.mapCallArgToAmount(k.kind.Single.Call.arguments[2]),
|
|
180
|
+
utils_1.default.normalizeHexId(utils_1.default.mapCallArgToAddress(k.kind.Single.Call.arguments[3])),
|
|
181
|
+
],
|
|
182
|
+
};
|
|
183
|
+
case iface_1.SuiTransactionType.WithdrawDelegation:
|
|
184
|
+
return {
|
|
185
|
+
package: k.kind.Single.Call.package,
|
|
186
|
+
module: k.kind.Single.Call.module,
|
|
187
|
+
function: k.kind.Single.Call.function,
|
|
188
|
+
typeArguments: k.kind.Single.Call.typeArguments,
|
|
189
|
+
arguments: [
|
|
190
|
+
utils_1.default.mapCallArgToSharedObject(k.kind.Single.Call.arguments[0]),
|
|
191
|
+
this.normalizeSuiObjectRef(utils_1.default.mapCallArgToSuiObjectRef(k.kind.Single.Call.arguments[1])),
|
|
192
|
+
this.normalizeSuiObjectRef(utils_1.default.mapCallArgToSuiObjectRef(k.kind.Single.Call.arguments[2])), // stake sui
|
|
193
|
+
],
|
|
194
|
+
};
|
|
195
|
+
case iface_1.SuiTransactionType.SwitchDelegation:
|
|
196
|
+
return {
|
|
197
|
+
package: k.kind.Single.Call.package,
|
|
198
|
+
module: k.kind.Single.Call.module,
|
|
199
|
+
function: k.kind.Single.Call.function,
|
|
200
|
+
typeArguments: k.kind.Single.Call.typeArguments,
|
|
201
|
+
arguments: [
|
|
202
|
+
utils_1.default.mapCallArgToSharedObject(k.kind.Single.Call.arguments[0]),
|
|
203
|
+
this.normalizeSuiObjectRef(utils_1.default.mapCallArgToSuiObjectRef(k.kind.Single.Call.arguments[1])),
|
|
204
|
+
this.normalizeSuiObjectRef(utils_1.default.mapCallArgToSuiObjectRef(k.kind.Single.Call.arguments[2])),
|
|
205
|
+
utils_1.default.normalizeHexId(utils_1.default.mapCallArgToAddress(k.kind.Single.Call.arguments[3])), // new validator address
|
|
206
|
+
],
|
|
207
|
+
};
|
|
333
208
|
default:
|
|
334
209
|
throw new sdk_core_1.InvalidTransactionError('SuiTransactionType not supported');
|
|
335
210
|
}
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
digest: coin.digest,
|
|
341
|
-
};
|
|
211
|
+
}
|
|
212
|
+
static normalizeCoins(coins) {
|
|
213
|
+
return coins.map((coin) => {
|
|
214
|
+
return this.normalizeSuiObjectRef(coin);
|
|
342
215
|
});
|
|
343
|
-
recipients = recipients.map((recipient) => utils_1.default.normalizeHexId(recipient));
|
|
344
|
-
amounts = amounts.map((amount) => amount.toNumber());
|
|
345
|
-
return { coins, recipients, amounts };
|
|
346
216
|
}
|
|
347
|
-
|
|
348
|
-
* Returns a complete explanation for a transfer transaction
|
|
349
|
-
* @param {TxData} json The transaction data in json format
|
|
350
|
-
* @param {TransactionExplanation} explanationResult The transaction explanation to be completed
|
|
351
|
-
* @returns {TransactionExplanation}
|
|
352
|
-
*/
|
|
353
|
-
explainTransferTransaction(json, explanationResult) {
|
|
354
|
-
const recipients = this.suiTransaction.payTx.recipients;
|
|
355
|
-
const amounts = this.suiTransaction.payTx.amounts;
|
|
356
|
-
const outputs = recipients.map((recipient, index) => ({
|
|
357
|
-
address: recipient,
|
|
358
|
-
amount: amounts.length === 0 ? '' : amounts[index].toString(),
|
|
359
|
-
}));
|
|
360
|
-
const outputAmount = amounts.reduce((accumulator, current) => accumulator + current, 0);
|
|
217
|
+
static normalizeSuiObjectRef(obj) {
|
|
361
218
|
return {
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
219
|
+
objectId: utils_1.default.normalizeHexId(obj.objectId),
|
|
220
|
+
version: Number(obj.version),
|
|
221
|
+
digest: obj.digest,
|
|
365
222
|
};
|
|
366
223
|
}
|
|
367
224
|
}
|
|
368
225
|
exports.Transaction = Transaction;
|
|
369
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQVN5QjtBQUd6QixvREFBNEI7QUFDNUIsK0JBQTRCO0FBQzVCLDJDQU9xQjtBQUNyQixtQ0FBZ0M7QUFDaEMsc0RBQTJCO0FBQzNCLHFDQUErQztBQUMvQyxnREFBd0I7QUFHeEIsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFLOUMsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWtCO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsSUFBSSxFQUFFO1FBQ0osSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsR0FBRyxHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksNEJBQWdCLENBQUM7SUFDdEMsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMs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OlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXkgYXMgQmFzZVB1YmxpY0tleSxcbiAgU2lnbmF0dXJlLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgU3VpT2JqZWN0UmVmLCBTdWlUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHhEYXRhLCBUeERldGFpbHMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBiY3MgfSBmcm9tICcuL2Jjcyc7XG5pbXBvcnQge1xuICBTRVJfQlVGRkVSX1NJWkUsXG4gIFNJR05BVFVSRV9TQ0hFTUVfQllURVMsXG4gIFNVSV9HQVNfUFJJQ0UsXG4gIFNVSV9JTlRFTlRfQllURVMsXG4gIFN1aVRyYW5zYWN0aW9uVHlwZSxcbiAgVU5BVkFJTEFCTEVfVEVYVCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCBzaGEzIGZyb20gJ2pzLXNoYTMnO1xuaW1wb3J0IHsgZnJvbUI2NCwgZnJvbUhFWCB9IGZyb20gJ0BteXN0ZW4vYmNzJztcbmltcG9ydCBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgX3N1aVRyYW5zYWN0aW9uOiBTdWlUcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlOiBTaWduYXR1cmU7XG4gIHByaXZhdGUgX3NlcmlhbGl6ZWRTaWc6IFVpbnQ4QXJyYXk7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fc3VpVHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXRTdWlUcmFuc2FjdGlvbih0eDogU3VpVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fc2lnbmF0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRhdGFCeXRlcyA9IHRoaXMuZ2V0RGF0YUJ5dGVzKCk7XG4gICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRTaGEyNTZIYXNoKCdUcmFuc2FjdGlvbkRhdGEnLCBkYXRhQnl0ZXMpO1xuICAgICAgdGhpcy5faWQgPSBiczU4LmVuY29kZShoYXNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2lkIHx8IFVOQVZBSUxBQkxFX1RFWFQ7XG4gIH1cblxuICBhZGRTaWduYXR1cmUocHVibGljS2V5OiBCYXNlUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB0aGlzLl9zaWduYXR1cmUgPSB7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH07XG4gICAgdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBzdWlTaWduYXR1cmUoKTogU2lnbmF0dXJlIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0IHNlcmlhbGl6ZWRTaWcoKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcmlhbGl6ZWRTaWc7XG4gIH1cblxuICBzZXRTZXJpYWxpemVkU2lnKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwdWJLZXkgPSBCdWZmZXIuZnJvbShwdWJsaWNLZXkucHViLCAnaGV4Jyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZF9zaWcgPSBuZXcgVWludDhBcnJheSgxICsgc2lnbmF0dXJlLmxlbmd0aCArIHB1YktleS5sZW5ndGgpO1xuICAgIHNlcmlhbGl6ZWRfc2lnLnNldChTSUdOQVRVUkVfU0NIRU1FX0JZVEVTKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQoc2lnbmF0dXJlLCAxKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQocHViS2V5LCAxICsgc2lnbmF0dXJlLmxlbmd0aCk7XG4gICAgdGhpcy5fc2VyaWFsaXplZFNpZyA9IHNlcmlhbGl6ZWRfc2lnO1xuICB9XG5cbiAgZ2V0SW5wdXRDb2lucygpOiBTdWlPYmplY3RSZWZbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3VpVHJhbnNhY3Rpb24ucGF5VHguY29pbnM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBzaWduZXIga2V5XG4gICAqL1xuXG4gIHNpZ24oc2lnbmVyOiBLZXlQYWlyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSB0cmFuc2FjdGlvbiB0byBzaWduJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ25NZXNzYWdlaW5VaW50OEFycmF5KHRoaXMuc2lnbmFibGVQYXlsb2FkKTtcbiAgICB0aGlzLnNldFNlcmlhbGl6ZWRTaWcoeyBwdWI6IHNpZ25lci5nZXRLZXlzKCkucHViIH0sIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuICAgIHRoaXMuYWRkU2lnbmF0dXJlKHsgcHViOiBzaWduZXIuZ2V0S2V5cygpLnB1YiB9LCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICAgIGxldCB0eERldGFpbHM6IFR4RGV0YWlscztcblxuICAgIHN3aXRjaCAodHgudHlwZSkge1xuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuUGF5OlxuICAgICAgICB0eERldGFpbHMgPSB7XG4gICAgICAgICAgUGF5OiB7XG4gICAgICAgICAgICBjb2luczogdHgucGF5VHguY29pbnMsXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0eC5wYXlUeC5yZWNpcGllbnRzLFxuICAgICAgICAgICAgYW1vdW50czogdHgucGF5VHguYW1vdW50cyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLlBheVN1aTpcbiAgICAgICAgdHhEZXRhaWxzID0ge1xuICAgICAgICAgIFBheVN1aToge1xuICAgICAgICAgICAgY29pbnM6IHR4LnBheVR4LmNvaW5zLFxuICAgICAgICAgICAgcmVjaXBpZW50czogdHgucGF5VHgucmVjaXBpZW50cyxcbiAgICAgICAgICAgIGFtb3VudHM6IHR4LnBheVR4LmFtb3VudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlBbGxTdWk6XG4gICAgICAgIHR4RGV0YWlscyA9IHtcbiAgICAgICAgICBQYXlBbGxTdWk6IHtcbiAgICAgICAgICAgIGNvaW5zOiB0eC5wYXlUeC5jb2lucyxcbiAgICAgICAgICAgIHJlY2lwaWVudDogdHgucGF5VHgucmVjaXBpZW50c1swXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignU3VpVHJhbnNhY3Rpb25UeXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuX2lkLFxuICAgICAga2luZDogeyBTaW5nbGU6IHR4RGV0YWlscyB9LFxuICAgICAgc2VuZGVyOiB0eC5zZW5kZXIsXG4gICAgICBnYXNQYXltZW50OiB0eC5nYXNQYXltZW50LFxuICAgICAgZ2FzQnVkZ2V0OiB0eC5nYXNCdWRnZXQsXG4gICAgICBnYXNQcmljZTogU1VJX0dBU19QUklDRSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXTtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW107XG5cbiAgICBjb25zdCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogJzAnLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuc3VpVHJhbnNhY3Rpb24uZ2FzQnVkZ2V0LnRvU3RyaW5nKCkgfSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGxhaW5UcmFuc2ZlclRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuc3VpVHJhbnNhY3Rpb247XG4gICAgY29uc3QgcGF5VHggPSB0eC5wYXlUeDtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcGF5VHgucmVjaXBpZW50cztcbiAgICBjb25zdCBhbW91bnRzID0gcGF5VHguYW1vdW50cztcbiAgICBpZiAodHgudHlwZSAhPT0gU3VpVHJhbnNhY3Rpb25UeXBlLlBheUFsbFN1aSAmJiByZWNpcGllbnRzLmxlbmd0aCAhPT0gYW1vdW50cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBsZW5ndGggb2YgcmVjaXBpZW50cyAke3JlY2lwaWVudHMubGVuZ3RofSBkb2VzIG5vdCBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIGFtb3VudHMgJHthbW91bnRzLmxlbmd0aH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRW1wdHlBbW91bnQgPSBhbW91bnRzLmxlbmd0aCA9PT0gMDtcbiAgICB0aGlzLl9vdXRwdXRzID0gcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCwgaW5kZXgpID0+ICh7XG4gICAgICBhZGRyZXNzOiByZWNpcGllbnQsXG4gICAgICB2YWx1ZTogaXNFbXB0eUFtb3VudCA/ICcnIDogYW1vdW50c1tpbmRleF0udG9TdHJpbmcoKSxcbiAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB0b3RhbEFtb3VudCA9IGlzRW1wdHlBbW91bnQgPyAnJyA6IGFtb3VudHMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4gYWNjdW11bGF0b3IgKyBjdXJyZW50LCAwKTtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHR4LnNlbmRlcixcbiAgICAgICAgdmFsdWU6IHRvdGFsQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAgICovXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uLmRlc2VyaWFsaXplU3VpVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc2VyaWFsaXplKCkgdG8gZ2V0IHRoZSBjb3JyZWN0IHR4RGF0YSB3aXRoIHRyYW5zYWN0aW9uIHR5cGVcbiAgICovXG4gIHByaXZhdGUgZ2V0VHhEYXRhKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBzdWlUeCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICAgIGxldCB0eDogVHhEZXRhaWxzO1xuXG4gICAgc3dpdGNoIChzdWlUeC50eXBlKSB7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXk6XG4gICAgICAgIHR4ID0ge1xuICAgICAgICAgIFBheToge1xuICAgICAgICAgICAgY29pbnM6IHN1aVR4LnBheVR4LmNvaW5zLFxuICAgICAgICAgICAgcmVjaXBpZW50czogc3VpVHgucGF5VHgucmVjaXBpZW50cyxcbiAgICAgICAgICAgIGFtb3VudHM6IHN1aVR4LnBheVR4LmFtb3VudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlTdWk6XG4gICAgICAgIHR4ID0ge1xuICAgICAgICAgIFBheVN1aToge1xuICAgICAgICAgICAgY29pbnM6IHN1aVR4LnBheVR4LmNvaW5zLFxuICAgICAgICAgICAgcmVjaXBpZW50czogc3VpVHgucGF5VHgucmVjaXBpZW50cyxcbiAgICAgICAgICAgIGFtb3VudHM6IHN1aVR4LnBheVR4LmFtb3VudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlBbGxTdWk6XG4gICAgICAgIHR4ID0ge1xuICAgICAgICAgIFBheUFsbFN1aToge1xuICAgICAgICAgICAgY29pbnM6IHN1aVR4LnBheVR4LmNvaW5zLFxuICAgICAgICAgICAgcmVjaXBpZW50OiBzdWlUeC5wYXlUeC5yZWNpcGllbnRzWzBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdTdWlUcmFuc2FjdGlvblR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBraW5kOiB7IFNpbmdsZTogdHggfSxcbiAgICAgIGdhc1BheW1lbnQ6IHN1aVR4Lmdhc1BheW1lbnQsXG4gICAgICBnYXNQcmljZTogU1VJX0dBU19QUklDRSxcbiAgICAgIGdhc0J1ZGdldDogc3VpVHguZ2FzQnVkZ2V0LFxuICAgICAgc2VuZGVyOiBzdWlUeC5zZW5kZXIsXG4gICAgfTtcbiAgfVxuXG4gIGdldERhdGFCeXRlcygpOiBVaW50OEFycmF5IHtcbiAgICBjb25zdCB0eERhdGEgPSB0aGlzLmdldFR4RGF0YSgpO1xuICAgIHJldHVybiBiY3Muc2VyKCdUcmFuc2FjdGlvbkRhdGEnLCB0eERhdGEsIFNFUl9CVUZGRVJfU0laRSkudG9CeXRlcygpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBjb25zdCBkYXRhQnl0ZXMgPSB0aGlzLmdldERhdGFCeXRlcygpO1xuXG4gICAgY29uc3QgaW50ZW50TWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KFNVSV9JTlRFTlRfQllURVMubGVuZ3RoICsgZGF0YUJ5dGVzLmxlbmd0aCk7XG4gICAgaW50ZW50TWVzc2FnZS5zZXQoU1VJX0lOVEVOVF9CWVRFUyk7XG4gICAgaW50ZW50TWVzc2FnZS5zZXQoZGF0YUJ5dGVzLCBTVUlfSU5URU5UX0JZVEVTLmxlbmd0aCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGludGVudE1lc3NhZ2UpO1xuICB9XG5cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YUJ5dGVzID0gdGhpcy5nZXREYXRhQnl0ZXMoKTtcbiAgICBpZiAodGhpcy5fc2lnbmF0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldFNoYTI1Nkhhc2goJ1RyYW5zYWN0aW9uRGF0YScsIGRhdGFCeXRlcyk7XG4gICAgICB0aGlzLl9pZCA9IGJzNTguZW5jb2RlKGhhc2gpO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YUJ5dGVzKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1cblxuICBwcml2YXRlIGdldFNoYTI1Nkhhc2godHlwZVRhZzogc3RyaW5nLCBkYXRhOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgY29uc3QgaGFzaCA9IHNoYTMuc2hhM18yNTYuY3JlYXRlKCk7XG5cbiAgICBjb25zdCB0eXBlVGFnQnl0ZXMgPSBBcnJheS5mcm9tKGAke3R5cGVUYWd9OjpgKS5tYXAoKGUpID0+IGUuY2hhckNvZGVBdCgwKSk7XG5cbiAgICBjb25zdCBkYXRhV2l0aFRhZyA9IG5ldyBVaW50OEFycmF5KHR5cGVUYWdCeXRlcy5sZW5ndGggKyBkYXRhLmxlbmd0aCk7XG4gICAgZGF0YVdpdGhUYWcuc2V0KHR5cGVUYWdCeXRlcyk7XG4gICAgZGF0YVdpdGhUYWcuc2V0KGRhdGEsIHR5cGVUYWdCeXRlcy5sZW5ndGgpO1xuXG4gICAgaGFzaC51cGRhdGUoZGF0YVdpdGhUYWcpO1xuXG4gICAgcmV0dXJuIGZyb21IRVgoaGFzaC5oZXgoKSk7XG4gIH1cblxuICBzdGF0aWMgZGVzZXJpYWxpemVTdWlUcmFuc2FjdGlvbihzZXJpYWxpemVkVHg6IHN0cmluZyk6IFN1aVRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBkYXRhID0gZnJvbUI2NChzZXJpYWxpemVkVHgpO1xuICAgIGNvbnN0IGsgPSBiY3MuZGUoJ1RyYW5zYWN0aW9uRGF0YScsIGRhdGEpO1xuXG4gICAgbGV0IHR5cGU6IFN1aVRyYW5zYWN0aW9uVHlwZTtcbiAgICBjb25zdCB0eERldGFpbHM6IFR4RGV0YWlscyA9IGsua2luZC5TaW5nbGU7XG4gICAgaWYgKHR4RGV0YWlscy5oYXNPd25Qcm9wZXJ0eSgnUGF5JykpIHtcbiAgICAgIHR5cGUgPSBTdWlUcmFuc2FjdGlvblR5cGUuUGF5O1xuICAgIH0gZWxzZSBpZiAodHhEZXRhaWxzLmhhc093blByb3BlcnR5KCdQYXlTdWknKSkge1xuICAgICAgdHlwZSA9IFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlTdWk7XG4gICAgfSBlbHNlIGlmICh0eERldGFpbHMuaGFzT3duUHJvcGVydHkoJ1BheUFsbFN1aScpKSB7XG4gICAgICB0eXBlID0gU3VpVHJhbnNhY3Rpb25UeXBlLlBheUFsbFN1aTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQ6ICcgKyB0eERldGFpbHMpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY29pbnMsIHJlY2lwaWVudHMsIGFtb3VudHMgfSA9IHRoaXMuZ2V0UHJvcGVyVHhEZXRhaWxzKGssIHR5cGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGUsXG4gICAgICBzZW5kZXI6IHV0aWxzLm5vcm1hbGl6ZUhleElkKGsuc2VuZGVyKSxcbiAgICAgIHBheVR4OiB7XG4gICAgICAgIGNvaW5zLFxuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICBhbW91bnRzLFxuICAgICAgfSxcbiAgICAgIGdhc0J1ZGdldDogay5nYXNCdWRnZXQudG9OdW1iZXIoKSxcbiAgICAgIGdhc1ByaWNlOiBrLmdhc1ByaWNlLnRvTnVtYmVyKCksXG4gICAgICBnYXNQYXltZW50OiB7XG4gICAgICAgIG9iamVjdElkOiB1dGlscy5ub3JtYWxpemVIZXhJZChrLmdhc1BheW1lbnQub2JqZWN0SWQpLFxuICAgICAgICB2ZXJzaW9uOiBrLmdhc1BheW1lbnQudmVyc2lvbi50b051bWJlcigpLFxuICAgICAgICBkaWdlc3Q6IGsuZ2FzUGF5bWVudC5kaWdlc3QsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJvcGVyVHhEZXRhaWxzKFxuICAgIGs6IGFueSxcbiAgICB0eXBlOiBTdWlUcmFuc2FjdGlvblR5cGVcbiAgKTogeyBjb2luczogU3VpT2JqZWN0UmVmW107IHJlY2lwaWVudHM6IHN0cmluZ1tdOyBhbW91bnRzOiBudW1iZXJbXSB9IHtcbiAgICAvLyBiY3MgZGVzZXJpYWxpemVkIG51bWJlciBpbnRvIEJpZyBOdW1iZXIgYW5kIHJlbW92ZWQgJzB4JyBwcmVmaXggZnJvbSBhZGRyZXNzZXMsIG5lZWRzIHRvIGNvbnZlcnQgdGhlbSBiYWNrXG4gICAgbGV0IGNvaW5zO1xuICAgIGxldCByZWNpcGllbnRzO1xuICAgIGxldCBhbW91bnRzO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXk6XG4gICAgICAgIGNvaW5zID0gay5raW5kLlNpbmdsZS5QYXkuY29pbnM7XG4gICAgICAgIHJlY2lwaWVudHMgPSBrLmtpbmQuU2luZ2xlLlBheS5yZWNpcGllbnRzO1xuICAgICAgICBhbW91bnRzID0gay5raW5kLlNpbmdsZS5QYXkuYW1vdW50cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlTdWk6XG4gICAgICAgIGNvaW5zID0gay5raW5kLlNpbmdsZS5QYXlTdWkuY29pbnM7XG4gICAgICAgIHJlY2lwaWVudHMgPSBrLmtpbmQuU2luZ2xlLlBheVN1aS5yZWNpcGllbnRzO1xuICAgICAgICBhbW91bnRzID0gay5raW5kLlNpbmdsZS5QYXlTdWkuYW1vdW50cztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlBbGxTdWk6XG4gICAgICAgIGNvaW5zID0gay5raW5kLlNpbmdsZS5QYXlBbGxTdWkuY29pbnM7XG4gICAgICAgIHJlY2lwaWVudHMgPSBbay5raW5kLlNpbmdsZS5QYXlBbGxTdWkucmVjaXBpZW50XTtcbiAgICAgICAgYW1vdW50cyA9IFtdOyAvLyBQYXlBbGxTdWkgZGVzZXJpYWxpemF0aW9uIGRvZXNuJ3QgcmV0dXJuIHRoZSBhbW91bnRcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1N1aVRyYW5zYWN0aW9uVHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgY29pbnMgPSBjb2lucy5tYXAoKGNvaW4pOiBTdWlPYmplY3RSZWYgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2JqZWN0SWQ6IHV0aWxzLm5vcm1hbGl6ZUhleElkKGNvaW4ub2JqZWN0SWQpLFxuICAgICAgICB2ZXJzaW9uOiBjb2luLnZlcnNpb24udG9OdW1iZXIoKSxcbiAgICAgICAgZGlnZXN0OiBjb2luLmRpZ2VzdCxcbiAgICAgIH07XG4gICAgfSkgYXMgU3VpT2JqZWN0UmVmW107XG4gICAgcmVjaXBpZW50cyA9IHJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IHV0aWxzLm5vcm1hbGl6ZUhleElkKHJlY2lwaWVudCkpIGFzIHN0cmluZ1tdO1xuICAgIGFtb3VudHMgPSBhbW91bnRzLm1hcCgoYW1vdW50KSA9PiBhbW91bnQudG9OdW1iZXIoKSkgYXMgbnVtYmVyW107XG5cbiAgICByZXR1cm4geyBjb2lucywgcmVjaXBpZW50cywgYW1vdW50cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb21wbGV0ZSBleHBsYW5hdGlvbiBmb3IgYSB0cmFuc2ZlciB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1R4RGF0YX0ganNvbiBUaGUgdHJhbnNhY3Rpb24gZGF0YSBpbiBqc29uIGZvcm1hdFxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhbmF0aW9uUmVzdWx0IFRoZSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbiB0byBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259XG4gICAqL1xuICBleHBsYWluVHJhbnNmZXJUcmFuc2FjdGlvbihqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHRoaXMuc3VpVHJhbnNhY3Rpb24ucGF5VHgucmVjaXBpZW50cztcbiAgICBjb25zdCBhbW91bnRzID0gdGhpcy5zdWlUcmFuc2FjdGlvbi5wYXlUeC5hbW91bnRzO1xuXG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IHJlY2lwaWVudHMubWFwKChyZWNpcGllbnQsIGluZGV4KSA9PiAoe1xuICAgICAgYWRkcmVzczogcmVjaXBpZW50LFxuICAgICAgYW1vdW50OiBhbW91bnRzLmxlbmd0aCA9PT0gMCA/ICcnIDogYW1vdW50c1tpbmRleF0udG9TdHJpbmcoKSxcbiAgICB9KSk7XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gYW1vdW50cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiBhY2N1bXVsYXRvciArIGN1cnJlbnQsIDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3V0cHV0QW1vdW50LFxuICAgICAgb3V0cHV0cyxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQU95QjtBQUN6QixtQ0FTaUI7QUFFakIsb0RBQTRCO0FBQzVCLCtCQUE0QjtBQUM1QiwyQ0FBMEc7QUFDMUcsbUNBQWdDO0FBQ2hDLHNEQUEyQjtBQUMzQixxQ0FBK0M7QUFDL0MsZ0RBQXdCO0FBR3hCLE1BQXNCLFdBQWUsU0FBUSwwQkFBZTtJQUsxRCxZQUFzQixXQUFpQztRQUNyRCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQXFCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsSUFBSSxFQUFFO1FBQ0osSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsR0FBRyxHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksNEJBQWdCLENBQUM7SUFDdEMsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUs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Z0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLGtDQUFrQyxDQUFDLENBQUM7U0FDekU7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFZO1FBQ3hDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFpQjtRQUNwRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLGVBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM1QyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDNUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1NBQ25CLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuUUQsa0NBbVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgTW92ZUNhbGxUeCxcbiAgTW92ZUNhbGxUeERldGFpbHMsXG4gIFBheVR4LFxuICBTdWlPYmplY3RSZWYsXG4gIFN1aVRyYW5zYWN0aW9uLFxuICBTdWlUcmFuc2FjdGlvblR5cGUsXG4gIFR4RGF0YSxcbiAgVHhEZXRhaWxzLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBiY3MgfSBmcm9tICcuL2Jjcyc7XG5pbXBvcnQgeyBTRVJfQlVGRkVSX1NJWkUsIFNJR05BVFVSRV9TQ0hFTUVfQllURVMsIFNVSV9JTlRFTlRfQllURVMsIFVOQVZBSUxBQkxFX1RFWFQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHNoYTMgZnJvbSAnanMtc2hhMyc7XG5pbXBvcnQgeyBmcm9tQjY0LCBmcm9tSEVYIH0gZnJvbSAnQG15c3Rlbi9iY3MnO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uPFQ+IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJvdGVjdGVkIF9zdWlUcmFuc2FjdGlvbjogU3VpVHJhbnNhY3Rpb248VD47XG4gIHByb3RlY3RlZCBfc2lnbmF0dXJlOiBTaWduYXR1cmU7XG4gIHByaXZhdGUgX3NlcmlhbGl6ZWRTaWc6IFVpbnQ4QXJyYXk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldCBzdWlUcmFuc2FjdGlvbigpOiBTdWlUcmFuc2FjdGlvbjxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgc2V0U3VpVHJhbnNhY3Rpb24odHg6IFN1aVRyYW5zYWN0aW9uPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5fc3VpVHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX3NpZ25hdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBkYXRhQnl0ZXMgPSB0aGlzLmdldERhdGFCeXRlcygpO1xuICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0U2hhMjU2SGFzaCgnVHJhbnNhY3Rpb25EYXRhJywgZGF0YUJ5dGVzKTtcbiAgICAgIHRoaXMuX2lkID0gYnM1OC5lbmNvZGUoaGFzaCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pZCB8fCBVTkFWQUlMQUJMRV9URVhUO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0geyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9O1xuICAgIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICBnZXQgc3VpU2lnbmF0dXJlKCk6IFNpZ25hdHVyZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIGdldCBzZXJpYWxpemVkU2lnKCk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVkU2lnO1xuICB9XG5cbiAgc2V0U2VyaWFsaXplZFNpZyhwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20ocHVibGljS2V5LnB1YiwgJ2hleCcpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRfc2lnID0gbmV3IFVpbnQ4QXJyYXkoMSArIHNpZ25hdHVyZS5sZW5ndGggKyBwdWJLZXkubGVuZ3RoKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQoU0lHTkFUVVJFX1NDSEVNRV9CWVRFUyk7XG4gICAgc2VyaWFsaXplZF9zaWcuc2V0KHNpZ25hdHVyZSwgMSk7XG4gICAgc2VyaWFsaXplZF9zaWcuc2V0KHB1YktleSwgMSArIHNpZ25hdHVyZS5sZW5ndGgpO1xuICAgIHRoaXMuX3NlcmlhbGl6ZWRTaWcgPSBzZXJpYWxpemVkX3NpZztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gdGhpcyB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0tleVBhaXJ9IHNpZ25lciBrZXlcbiAgICovXG5cbiAgc2lnbihzaWduZXI6IEtleVBhaXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ2VtcHR5IHRyYW5zYWN0aW9uIHRvIHNpZ24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduZXIuc2lnbk1lc3NhZ2VpblVpbnQ4QXJyYXkodGhpcy5zaWduYWJsZVBheWxvYWQpO1xuICAgIHRoaXMuc2V0U2VyaWFsaXplZFNpZyh7IHB1Yjogc2lnbmVyLmdldEtleXMoKS5wdWIgfSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlKSk7XG4gICAgdGhpcy5hZGRTaWduYXR1cmUoeyBwdWI6IHNpZ25lci5nZXRLZXlzKCkucHViIH0sIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhYnN0cmFjdCB0b0pzb24oKTogVHhEYXRhO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0LlxuICAgKi9cbiAgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgZ2V0IHRoZSBjb3JyZWN0IHR4RGF0YSB3aXRoIHRyYW5zYWN0aW9uIHR5cGVcbiAgICovXG4gIGFic3RyYWN0IGdldFR4RGF0YSgpOiBUeERhdGE7XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgYWJzdHJhY3QgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZDtcblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uIHBheWxvYWRcbiAgICpcbiAgICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uXG4gICAqL1xuICBhYnN0cmFjdCBmcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQ7XG5cbiAgZ2V0RGF0YUJ5dGVzKCk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHR4RGF0YSA9IHRoaXMuZ2V0VHhEYXRhKCk7XG4gICAgcmV0dXJuIGJjcy5zZXIoJ1RyYW5zYWN0aW9uRGF0YScsIHR4RGF0YSwgU0VSX0JVRkZFUl9TSVpFKS50b0J5dGVzKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIGNvbnN0IGRhdGFCeXRlcyA9IHRoaXMuZ2V0RGF0YUJ5dGVzKCk7XG5cbiAgICBjb25zdCBpbnRlbnRNZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkoU1VJX0lOVEVOVF9CWVRFUy5sZW5ndGggKyBkYXRhQnl0ZXMubGVuZ3RoKTtcbiAgICBpbnRlbnRNZXNzYWdlLnNldChTVUlfSU5URU5UX0JZVEVTKTtcbiAgICBpbnRlbnRNZXNzYWdlLnNldChkYXRhQnl0ZXMsIFNVSV9JTlRFTlRfQllURVMubGVuZ3RoKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaW50ZW50TWVzc2FnZSk7XG4gIH1cblxuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhQnl0ZXMgPSB0aGlzLmdldERhdGFCeXRlcygpO1xuICAgIGlmICh0aGlzLl9zaWduYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0U2hhMjU2SGFzaCgnVHJhbnNhY3Rpb25EYXRhJywgZGF0YUJ5dGVzKTtcbiAgICAgIHRoaXMuX2lkID0gYnM1OC5lbmNvZGUoaGFzaCk7XG4gICAgfVxuICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhQnl0ZXMpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2hhMjU2SGFzaCh0eXBlVGFnOiBzdHJpbmcsIGRhdGE6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgICBjb25zdCBoYXNoID0gc2hhMy5zaGEzXzI1Ni5jcmVhdGUoKTtcblxuICAgIGNvbnN0IHR5cGVUYWdCeXRlcyA9IEFycmF5LmZyb20oYCR7dHlwZVRhZ306OmApLm1hcCgoZSkgPT4gZS5jaGFyQ29kZUF0KDApKTtcblxuICAgIGNvbnN0IGRhdGFXaXRoVGFnID0gbmV3IFVpbnQ4QXJyYXkodHlwZVRhZ0J5dGVzLmxlbmd0aCArIGRhdGEubGVuZ3RoKTtcbiAgICBkYXRhV2l0aFRhZy5zZXQodHlwZVRhZ0J5dGVzKTtcbiAgICBkYXRhV2l0aFRhZy5zZXQoZGF0YSwgdHlwZVRhZ0J5dGVzLmxlbmd0aCk7XG5cbiAgICBoYXNoLnVwZGF0ZShkYXRhV2l0aFRhZyk7XG5cbiAgICByZXR1cm4gZnJvbUhFWChoYXNoLmhleCgpKTtcbiAgfVxuXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZVN1aVRyYW5zYWN0aW9uKHNlcmlhbGl6ZWRUeDogc3RyaW5nKTogU3VpVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGRhdGEgPSBmcm9tQjY0KHNlcmlhbGl6ZWRUeCk7XG4gICAgY29uc3QgayA9IGJjcy5kZSgnVHJhbnNhY3Rpb25EYXRhJywgZGF0YSk7XG5cbiAgICBsZXQgdHlwZTogU3VpVHJhbnNhY3Rpb25UeXBlO1xuICAgIGNvbnN0IHR4RGV0YWlsczogVHhEZXRhaWxzID0gay5raW5kLlNpbmdsZTtcbiAgICBpZiAodHhEZXRhaWxzLmhhc093blByb3BlcnR5KCdQYXknKSkge1xuICAgICAgdHlwZSA9IFN1aVRyYW5zYWN0aW9uVHlwZS5QYXk7XG4gICAgfSBlbHNlIGlmICh0eERldGFpbHMuaGFzT3duUHJvcGVydHkoJ1BheVN1aScpKSB7XG4gICAgICB0eXBlID0gU3VpVHJhbnNhY3Rpb25UeXBlLlBheVN1aTtcbiAgICB9IGVsc2UgaWYgKHR4RGV0YWlscy5oYXNPd25Qcm9wZXJ0eSgnUGF5QWxsU3VpJykpIHtcbiAgICAgIHR5cGUgPSBTdWlUcmFuc2FjdGlvblR5cGUuUGF5QWxsU3VpO1xuICAgIH0gZWxzZSBpZiAodHhEZXRhaWxzLmhhc093blByb3BlcnR5KCdDYWxsJykpIHtcbiAgICAgIGNvbnN0IG1vdmVDYWxsVHhEZXRhaWwgPSB0eERldGFpbHMgYXMgTW92ZUNhbGxUeERldGFpbHM7XG4gICAgICB0eXBlID0gdXRpbHMuZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKG1vdmVDYWxsVHhEZXRhaWwuQ2FsbC5mdW5jdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgdHhEZXRhaWxzKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuZ2V0UHJvcGVyVHhEZXRhaWxzKGssIHR5cGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGUsXG4gICAgICBzZW5kZXI6IHV0aWxzLm5vcm1hbGl6ZUhleElkKGsuc2VuZGVyKSxcbiAgICAgIHR4OiB0eCxcbiAgICAgIGdhc0J1ZGdldDogay5nYXNCdWRnZXQudG9OdW1iZXIoKSxcbiAgICAgIGdhc1ByaWNlOiBrLmdhc1ByaWNlLnRvTnVtYmVyKCksXG4gICAgICBnYXNQYXltZW50OiB7XG4gICAgICAgIG9iamVjdElkOiB1dGlscy5ub3JtYWxpemVIZXhJZChrLmdhc1BheW1lbnQub2JqZWN0SWQpLFxuICAgICAgICB2ZXJzaW9uOiBrLmdhc1BheW1lbnQudmVyc2lvbi50b051bWJlcigpLFxuICAgICAgICBkaWdlc3Q6IGsuZ2FzUGF5bWVudC5kaWdlc3QsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJvcGVyVHhEZXRhaWxzKGs6IGFueSwgdHlwZTogU3VpVHJhbnNhY3Rpb25UeXBlKTogUGF5VHggfCBNb3ZlQ2FsbFR4IHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLlBheTpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2luczogdGhpcy5ub3JtYWxpemVDb2lucyhrLmtpbmQuU2luZ2xlLlBheS5jb2lucyksXG4gICAgICAgICAgcmVjaXBpZW50czogay5raW5kLlNpbmdsZS5QYXkucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gdXRpbHMubm9ybWFsaXplSGV4SWQocmVjaXBpZW50KSkgYXMgc3RyaW5nW10sXG4gICAgICAgICAgYW1vdW50czogay5raW5kLlNpbmdsZS5QYXkuYW1vdW50cy5tYXAoKGFtb3VudCkgPT4gYW1vdW50LnRvTnVtYmVyKCkpIGFzIG51bWJlcltdLFxuICAgICAgICB9O1xuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuUGF5U3VpOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvaW5zOiB0aGlzLm5vcm1hbGl6ZUNvaW5zKGsua2luZC5TaW5nbGUuUGF5U3VpLmNvaW5zKSxcbiAgICAgICAgICByZWNpcGllbnRzOiBrLmtpbmQuU2luZ2xlLlBheVN1aS5yZWNpcGllbnRzLm1hcCgocmVjaXBpZW50KSA9PiB1dGlscy5ub3JtYWxpemVIZXhJZChyZWNpcGllbnQpKSBhcyBzdHJpbmdbXSxcbiAgICAgICAgICBhbW91bnRzOiBrLmtpbmQuU2luZ2xlLlBheVN1aS5hbW91bnRzLm1hcCgoYW1vdW50KSA9PiBhbW91bnQudG9OdW1iZXIoKSkgYXMgbnVtYmVyW10sXG4gICAgICAgIH07XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5QYXlBbGxTdWk6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29pbnM6IHRoaXMubm9ybWFsaXplQ29pbnMoay5raW5kLlNpbmdsZS5QYXlBbGxTdWkuY29pbnMpLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtrLmtpbmQuU2luZ2xlLlBheUFsbFN1aS5yZWNpcGllbnRdLm1hcCgocmVjaXBpZW50KSA9PlxuICAgICAgICAgICAgdXRpbHMubm9ybWFsaXplSGV4SWQocmVjaXBpZW50KVxuICAgICAgICAgICkgYXMgc3RyaW5nW10sXG4gICAgICAgICAgYW1vdW50czogW10sIC8vIFBheUFsbFN1aSBkZXNlcmlhbGl6YXRpb24gZG9lc24ndCByZXR1cm4gdGhlIGFtb3VudFxuICAgICAgICB9O1xuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuQWRkRGVsZWdhdGlvbjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwYWNrYWdlOiBrLmtpbmQuU2luZ2xlLkNhbGwucGFja2FnZSxcbiAgICAgICAgICBtb2R1bGU6IGsua2luZC5TaW5nbGUuQ2FsbC5tb2R1bGUsXG4gICAgICAgICAgZnVuY3Rpb246IGsua2luZC5TaW5nbGUuQ2FsbC5mdW5jdGlvbixcbiAgICAgICAgICB0eXBlQXJndW1lbnRzOiBrLmtpbmQuU2luZ2xlLkNhbGwudHlwZUFyZ3VtZW50cyxcbiAgICAgICAgICBhcmd1bWVudHM6IFtcbiAgICAgICAgICAgIHV0aWxzLm1hcENhbGxBcmdUb1NoYXJlZE9iamVjdChrLmtpbmQuU2luZ2xlLkNhbGwuYXJndW1lbnRzWzBdKSxcbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplQ29pbnModXRpbHMubWFwQ2FsbEFyZ1RvQ29pbnMoay5raW5kLlNpbmdsZS5DYWxsLmFyZ3VtZW50c1sxXSkpLFxuICAgICAgICAgICAgdXRpbHMubWFwQ2FsbEFyZ1RvQW1vdW50KGsua2luZC5TaW5nbGUuQ2FsbC5hcmd1bWVudHNbMl0pLFxuICAgICAgICAgICAgdXRpbHMubm9ybWFsaXplSGV4SWQodXRpbHMubWFwQ2FsbEFyZ1RvQWRkcmVzcyhrLmtpbmQuU2luZ2xlLkNhbGwuYXJndW1lbnRzWzNdKSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLldpdGhkcmF3RGVsZWdhdGlvbjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwYWNrYWdlOiBrLmtpbmQuU2luZ2xlLkNhbGwucGFja2FnZSxcbiAgICAgICAgICBtb2R1bGU6IGsua2luZC5TaW5nbGUuQ2FsbC5tb2R1bGUsXG4gICAgICAgICAgZnVuY3Rpb246IGsua2luZC5TaW5nbGUuQ2FsbC5mdW5jdGlvbixcbiAgICAgICAgICB0eXBlQXJndW1lbnRzOiBrLmtpbmQuU2luZ2xlLkNhbGwudHlwZUFyZ3VtZW50cyxcbiAgICAgICAgICBhcmd1bWVudHM6IFtcbiAgICAgICAgICAgIHV0aWxzLm1hcENhbGxBcmdUb1NoYXJlZE9iamVjdChrLmtpbmQuU2luZ2xlLkNhbGwuYXJndW1lbnRzWzBdKSxcbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplU3VpT2JqZWN0UmVmKHV0aWxzLm1hcENhbGxBcmdUb1N1aU9iamVjdFJlZihrLmtpbmQuU2luZ2xlLkNhbGwuYXJndW1lbnRzWzFdKSksIC8vIGRlbGVnYXRpb25cbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplU3VpT2JqZWN0UmVmKHV0aWxzLm1hcENhbGxBcmdUb1N1aU9iamVjdFJlZihrLmtpbmQuU2luZ2xlLkNhbGwuYXJndW1lbnRzWzJdKSksIC8vIHN0YWtlIHN1aVxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5Td2l0Y2hEZWxlZ2F0aW9uOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhY2thZ2U6IGsua2luZC5TaW5nbGUuQ2FsbC5wYWNrYWdlLFxuICAgICAgICAgIG1vZHVsZTogay5raW5kLlNpbmdsZS5DYWxsLm1vZHVsZSxcbiAgICAgICAgICBmdW5jdGlvbjogay5raW5kLlNpbmdsZS5DYWxsLmZ1bmN0aW9uLFxuICAgICAgICAgIHR5cGVBcmd1bWVudHM6IGsua2luZC5TaW5nbGUuQ2FsbC50eXBlQXJndW1lbnRzLFxuICAgICAgICAgIGFyZ3VtZW50czogW1xuICAgICAgICAgICAgdXRpbHMubWFwQ2FsbEFyZ1RvU2hhcmVkT2JqZWN0KGsua2luZC5TaW5nbGUuQ2FsbC5hcmd1bWVudHNbMF0pLFxuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVTdWlPYmplY3RSZWYodXRpbHMubWFwQ2FsbEFyZ1RvU3VpT2JqZWN0UmVmKGsua2luZC5TaW5nbGUuQ2FsbC5hcmd1bWVudHNbMV0pKSwgLy8gZGVsZWdhdGlvblxuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVTdWlPYmplY3RSZWYodXRpbHMubWFwQ2FsbEFyZ1RvU3VpT2JqZWN0UmVmKGsua2luZC5TaW5nbGUuQ2FsbC5hcmd1bWVudHNbMl0pKSwgLy8gc3Rha2Ugc3VpXG4gICAgICAgICAgICB1dGlscy5ub3JtYWxpemVIZXhJZCh1dGlscy5tYXBDYWxsQXJnVG9BZGRyZXNzKGsua2luZC5TaW5nbGUuQ2FsbC5hcmd1bWVudHNbM10pKSwgLy8gbmV3IHZhbGlkYXRvciBhZGRyZXNzXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignU3VpVHJhbnNhY3Rpb25UeXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBub3JtYWxpemVDb2lucyhjb2luczogYW55W10pOiBTdWlPYmplY3RSZWZbXSB7XG4gICAgcmV0dXJuIGNvaW5zLm1hcCgoY29pbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplU3VpT2JqZWN0UmVmKGNvaW4pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbm9ybWFsaXplU3VpT2JqZWN0UmVmKG9iajogU3VpT2JqZWN0UmVmKTogU3VpT2JqZWN0UmVmIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JqZWN0SWQ6IHV0aWxzLm5vcm1hbGl6ZUhleElkKG9iai5vYmplY3RJZCksXG4gICAgICB2ZXJzaW9uOiBOdW1iZXIob2JqLnZlcnNpb24pLFxuICAgICAgZGlnZXN0OiBvYmouZGlnZXN0LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,31 +1,30 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { BaseAddress, BaseKey, BaseTransactionBuilder, PublicKey as BasePublicKey, TransactionType } from '@bitgo/sdk-core';
|
|
2
|
+
import { BaseAddress, BaseKey, BaseTransactionBuilder, PublicKey as BasePublicKey, Signature, TransactionType } from '@bitgo/sdk-core';
|
|
3
3
|
import { Transaction } from './transaction';
|
|
4
4
|
import BigNumber from 'bignumber.js';
|
|
5
5
|
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
|
|
9
|
-
protected _transaction: Transaction
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
import { SuiObjectRef, SuiTransactionType } from './iface';
|
|
7
|
+
import { KeyPair } from './keyPair';
|
|
8
|
+
export declare abstract class TransactionBuilder<T> extends BaseTransactionBuilder {
|
|
9
|
+
protected _transaction: Transaction<T>;
|
|
10
|
+
protected _signatures: Signature[];
|
|
11
|
+
protected _signer: KeyPair;
|
|
12
12
|
protected _type: SuiTransactionType;
|
|
13
13
|
protected _sender: string;
|
|
14
14
|
protected _gasBudget: number;
|
|
15
15
|
protected _gasPrice: number;
|
|
16
|
-
protected _payTx: PayTx;
|
|
17
16
|
protected _gasPayment: SuiObjectRef;
|
|
18
|
-
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
17
|
+
protected constructor(_coinConfig: Readonly<CoinConfig>);
|
|
19
18
|
/**
|
|
20
19
|
* The transaction type.
|
|
21
20
|
*/
|
|
22
21
|
protected abstract get transactionType(): TransactionType;
|
|
23
22
|
/** @inheritdoc */
|
|
24
|
-
protected get transaction(): Transaction
|
|
23
|
+
protected get transaction(): Transaction<T>;
|
|
25
24
|
/** @inheritdoc */
|
|
26
|
-
protected set transaction(transaction: Transaction);
|
|
25
|
+
protected set transaction(transaction: Transaction<T>);
|
|
27
26
|
/** @inheritdoc */
|
|
28
|
-
protected signImplementation(key: BaseKey): Transaction
|
|
27
|
+
protected signImplementation(key: BaseKey): Transaction<T>;
|
|
29
28
|
/** @inheritDoc */
|
|
30
29
|
addSignature(publicKey: BasePublicKey, signature: Buffer): void;
|
|
31
30
|
/**
|
|
@@ -38,25 +37,17 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
38
37
|
sender(senderAddress: string): this;
|
|
39
38
|
type(type: SuiTransactionType): this;
|
|
40
39
|
gasBudget(gasBudget: number): this;
|
|
41
|
-
payTx(payTx: PayTx): this;
|
|
42
40
|
gasPayment(gasPayment: SuiObjectRef): this;
|
|
43
41
|
/**
|
|
44
42
|
* Initialize the transaction builder fields using the decoded transaction data
|
|
45
43
|
*
|
|
46
44
|
* @param {Transaction} tx the transaction data
|
|
47
45
|
*/
|
|
48
|
-
initBuilder(tx: Transaction): void;
|
|
49
|
-
/** @inheritdoc */
|
|
50
|
-
protected fromImplementation(rawTransaction: string): Transaction;
|
|
51
|
-
/** @inheritdoc */
|
|
52
|
-
protected buildImplementation(): Promise<Transaction>;
|
|
53
|
-
protected buildSuiTransaction(): SuiTransaction;
|
|
54
|
-
reorderInputCoins(): SuiObjectRef[];
|
|
46
|
+
abstract initBuilder(tx: Transaction<T>): void;
|
|
55
47
|
/** @inheritdoc */
|
|
56
48
|
validateAddress(address: BaseAddress, addressFormat?: string): void;
|
|
57
49
|
validateGasBudget(gasBudget: number): void;
|
|
58
50
|
validateGasPrice(gasPrice: number): void;
|
|
59
|
-
validateTxPay(payTx: PayTx): void;
|
|
60
51
|
validateGasPayment(gasPayment: SuiObjectRef): void;
|
|
61
52
|
validateSuiObjectRef(suiObjectRef: SuiObjectRef, field: string): void;
|
|
62
53
|
/** @inheritdoc */
|
|
@@ -64,12 +55,6 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
64
55
|
/** @inheritdoc */
|
|
65
56
|
validateRawTransaction(rawTransaction: string): void;
|
|
66
57
|
/** @inheritdoc */
|
|
67
|
-
validateTransaction(transaction: Transaction): void;
|
|
68
|
-
/**
|
|
69
|
-
* Validates all fields are defined
|
|
70
|
-
*/
|
|
71
|
-
private validateTransactionFields;
|
|
72
|
-
/** @inheritdoc */
|
|
73
58
|
validateValue(value: BigNumber): void;
|
|
74
59
|
}
|
|
75
60
|
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAGtB,SAAS,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAGtB,SAAS,IAAI,aAAa,EAC1B,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,8BAAsB,kBAAkB,CAAC,CAAC,CAAE,SAAQ,sBAAsB;IACxE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAM;IACxC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAE3B,SAAS,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,SAAS,SAAiB;IACpC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC;IAEpC,SAAS,aAAa,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAKvD;;OAEG;IACH,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,CAE1C;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,EAEpD;IAED,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;IAO1D,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAMnC,IAAI,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAKpC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMlC,UAAU,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI;IAM1C;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAG9C,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,kBAAkB,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI;IAOlD,oBAAoB,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAYrE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAMtC"}
|