@bitgo/sdk-core 36.13.0 → 36.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/account-lib/baseCoin/enum.d.ts +11 -9
- package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/enum.js +14 -10
- package/dist/src/bitgo/errors.d.ts +142 -0
- package/dist/src/bitgo/errors.d.ts.map +1 -1
- package/dist/src/bitgo/errors.js +109 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +5 -4
- package/dist/test/unit/bitgo/errors.d.ts +2 -0
- package/dist/test/unit/bitgo/errors.d.ts.map +1 -0
- package/dist/test/unit/bitgo/errors.js +136 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -226,9 +226,11 @@ class StakingWallet {
|
|
|
226
226
|
// default to verifying a transaction unless explicitly skipped
|
|
227
227
|
// skipping the verification for btc undelegate because it is just single sig
|
|
228
228
|
// TODO: SC-3183 (add trx staking verification)
|
|
229
|
+
// TODO: SC-3508 (add STX staking verification)
|
|
229
230
|
const skipVerification = (signOptions.transactionVerificationOptions?.skipTransactionVerification ||
|
|
230
231
|
this.isBtcUndelegate(transaction) ||
|
|
231
|
-
this.isTrxStaking(transaction)
|
|
232
|
+
this.isTrxStaking(transaction) ||
|
|
233
|
+
this.isStx()) ??
|
|
232
234
|
false;
|
|
233
235
|
if (!isStakingTxRequestPrebuildResult(builtTx.result) && !skipVerification) {
|
|
234
236
|
await this.validateBuiltStakingTransaction(builtTx.transaction, builtTx);
|
|
@@ -341,8 +343,7 @@ class StakingWallet {
|
|
|
341
343
|
}
|
|
342
344
|
if (buildParams?.type &&
|
|
343
345
|
explainedTransaction.type !== undefined &&
|
|
344
|
-
|
|
345
|
-
(!this.isStx() && account_lib_1.TransactionType[buildParams.type] !== explainedTransaction.type))) {
|
|
346
|
+
account_lib_1.TransactionType[buildParams.type] !== explainedTransaction.type) {
|
|
346
347
|
mismatchErrors.push(`Transaction type mismatch. Expected: '${buildParams.type}', Got: '${explainedTransaction.type}'`);
|
|
347
348
|
}
|
|
348
349
|
if (buildParams?.solInstructions) {
|
|
@@ -364,4 +365,4 @@ exports.StakingWallet = StakingWallet;
|
|
|
364
365
|
function isStakingTxRequestPrebuildResult(tx) {
|
|
365
366
|
return tx.txRequestId !== undefined;
|
|
366
367
|
}
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1dhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9zdGFraW5nL3N0YWtpbmdXYWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0dBRUc7QUFDSCw0Q0FBNEM7QUFDNUMsNkRBQXFDO0FBdUJyQyxvQ0FBOEQ7QUFDOUQsb0RBQTRCO0FBQzVCLGdFQUF1RTtBQUN2RSxrREFBMEI7QUFDMUIsbURBQW9EO0FBRXBELE1BQWEsYUFBYTtJQVF4QixZQUFZLE1BQWUsRUFBRSxRQUFpQjtRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkcsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQTBEO1FBQ3BFLE9BQU8sTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNE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QUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDekYsY0FBYyxDQUFDLElBQUksQ0FDakIsMkNBQTJDLElBQUksQ0FBQyxTQUFTLENBQ3ZELFdBQVcsQ0FBQyxlQUFlLENBQzVCLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBRSxvQkFBNEIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUMzRSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxZQUFZLEdBQUcseURBQXlELGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMxRyxJQUFBLGVBQUssRUFBQyxZQUFZLENBQUMsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsSUFBQSxlQUFLLEVBQ0gsMERBQTBELFdBQVcsQ0FBQyxnQkFBZ0IsaUNBQWlDLENBQ3hILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbmNELHNDQW1jQztBQUVELFNBQVMsZ0NBQWdDLENBQ3ZDLEVBQThDO0lBRTlDLE9BQVEsRUFBZ0QsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQ3JGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBDb2luRmFtaWx5IH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuXG5pbXBvcnQge1xuICBEZWxlZ2F0aW9uT3B0aW9ucyxcbiAgRGVsZWdhdGlvblJlc3VsdHMsXG4gIElTdGFraW5nV2FsbGV0LFxuICBTdGFrZU9wdGlvbnMsXG4gIFN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0LFxuICBTdGFraW5nUmVxdWVzdCxcbiAgU3Rha2luZ1NpZ25lZFRyYW5zYWN0aW9uLFxuICBTdGFraW5nU2lnbk9wdGlvbnMsXG4gIFN0YWtpbmdUcmFuc2FjdGlvbixcbiAgU3dpdGNoVmFsaWRhdG9yT3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25zUmVhZHlUb1NpZ24sXG4gIFVuc3Rha2VPcHRpb25zLFxuICBFdGhVbnN0YWtlT3B0aW9ucyxcbiAgQ2xhaW1SZXdhcmRzT3B0aW9ucyxcbiAgU3Rha2luZ1R4UmVxdWVzdFByZWJ1aWxkVHJhbnNhY3Rpb25SZXN1bHQsXG4gIFRyb25TdGFrZU9wdGlvbnMsXG4gIFRhb1N0YWtlT3B0aW9ucyxcbn0gZnJvbSAnLi9pU3Rha2luZ1dhbGxldCc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgSVdhbGxldCwgUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdCB9IGZyb20gJy4uL3dhbGxldCc7XG5pbXBvcnQgeyBJVHNzVXRpbHMsIFJlcXVlc3RUcmFjZXIsIFRzc1V0aWxzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgdHJhbnNhY3Rpb25SZWNpcGllbnRzTWF0Y2ggfSBmcm9tICcuLi91dGlscy90cmFuc2FjdGlvblV0aWxzJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9hY2NvdW50LWxpYic7XG5cbmV4cG9ydCBjbGFzcyBTdGFraW5nV2FsbGV0IGltcGxlbWVudHMgSVN0YWtpbmdXYWxsZXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByaXZhdGUgdG9rZW5QYXJlbnRXYWxsZXQ/OiBJV2FsbGV0O1xuICBwcml2YXRlIHJlYWRvbmx5IGlzRXRoVHNzOiBib29sZWFuO1xuXG4gIHB1YmxpYyB3YWxsZXQ6IElXYWxsZXQ7XG4gIHB1YmxpYyB0c3NVdGlsOiBJVHNzVXRpbHM7XG5cbiAgY29uc3RydWN0b3Iod2FsbGV0OiBJV2FsbGV0LCBpc0V0aFRzczogYm9vbGVhbikge1xuICAgIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xuICAgIHRoaXMuYml0Z28gPSB3YWxsZXQuYml0Z287XG4gICAgdGhpcy50c3NVdGlsID0gbmV3IFRzc1V0aWxzKHRoaXMuYml0Z28sIHRoaXMud2FsbGV0LmJhc2VDb2luLCB0aGlzLndhbGxldCk7XG4gICAgdGhpcy5pc0V0aFRzcyA9IGlzRXRoVHNzO1xuICB9XG5cbiAgZ2V0IHdhbGxldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMud2FsbGV0LmlkKCk7XG4gIH1cblxuICBnZXQgY29pbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndhbGxldC5iYXNlQ29pbi50b2tlbkNvbmZpZyA/IHRoaXMud2FsbGV0LmJhc2VDb2luLnRva2VuQ29uZmlnLnR5cGUgOiB0aGlzLndhbGxldC5jb2luKCk7XG4gIH1cblxuICAvKipcbiAgICogU3Rha2UgY29pbnNcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBzdGFrZSBvcHRpb25zXG4gICAqIEByZXR1cm4gU3Rha2luZ1JlcXVlc3RcbiAgICovXG4gIGFzeW5jIHN0YWtlKG9wdGlvbnM6IFN0YWtlT3B0aW9ucyB8IFRyb25TdGFrZU9wdGlvbnMgfCBUYW9TdGFrZU9wdGlvbnMpOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlU3Rha2luZ1JlcXVlc3Qob3B0aW9ucywgJ1NUQUtFJyk7XG4gIH1cblxuICAvKipcbiAgICogVW5zdGFrZSBjb2luc1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHVuc3Rha2Ugb3B0aW9uc1xuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyB1bnN0YWtlKG9wdGlvbnM6IFVuc3Rha2VPcHRpb25zIHwgRXRoVW5zdGFrZU9wdGlvbnMpOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlU3Rha2luZ1JlcXVlc3Qob3B0aW9ucywgJ1VOU1RBS0UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXQgYSByZXF1ZXN0IHRvIHN3aXRjaCB0aGUgdmFsaWRhdG9yIHVzZWQgZm9yIGEgc3BlY2lmaWMgZGVsZWdhdGlvblxuICAgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGRlbGVnYXRpb24gd2l0aCB0aGUgbmV3IHZhbGlkYXRvciBhZGRyZXNzIGFuZCBtYXJrIHRoZSBvbGQgZGVsZWdhdGlvbiBhcyBpbmFjdGl2ZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHN3aXRjaCB2YWxpZGF0b3Igb3B0aW9uc1xuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBzd2l0Y2hWYWxpZGF0b3Iob3B0aW9uczogU3dpdGNoVmFsaWRhdG9yT3B0aW9ucyk6IFByb21pc2U8U3Rha2luZ1JlcXVlc3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVTdGFraW5nUmVxdWVzdChvcHRpb25zLCAnU1dJVENIX1ZBTElEQVRPUicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCBhIHJlcXVlc3QgdG8gY2xhaW0gcmV3YXJkcyBmb3IgYSBzcGVjaWZpYyBkZWxlZ2F0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gY2xhaW0gcmV3YXJkcyBvcHRpb25zXG4gICAqIEByZXR1cm4gU3Rha2luZ1JlcXVlc3RcbiAgICovXG4gIGFzeW5jIGNsYWltUmV3YXJkcyhvcHRpb25zOiBDbGFpbVJld2FyZHNPcHRpb25zKTogUHJvbWlzZTxTdGFraW5nUmVxdWVzdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZVN0YWtpbmdSZXF1ZXN0KG9wdGlvbnMsICdDTEFJTV9SRVdBUkRTJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIHN0YWtpbmcgcmVxdWVzdFxuICAgKiBAcGFyYW0gc3Rha2luZ1JlcXVlc3RJZCAtIGlkIG9mIHRoZSBzdGFraW5nIHJlcXVlc3QgdG8gY2FuY2VsXG4gICAqIEByZXR1cm4gU3Rha2luZ1JlcXVlc3RcbiAgICovXG4gIGFzeW5jIGNhbmNlbFN0YWtpbmdSZXF1ZXN0KHN0YWtpbmdSZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8U3Rha2luZ1JlcXVlc3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5kZWwodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMuc3Rha2luZ1JlcXVlc3RVcmwoc3Rha2luZ1JlcXVlc3RJZCkpKS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBkZWxlZ2F0aW9ucyBmb3IgYSBzcGVjaWZpYyB3YWxsZXRcbiAgICogQHBhcmFtIG9wdGlvbnMgLSB1bnN0YWtlIG9wdGlvbnNcbiAgICogQHJldHVybiBTdGFraW5nUmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgZGVsZWdhdGlvbnMob3B0aW9uczogRGVsZWdhdGlvbk9wdGlvbnMpOiBQcm9taXNlPERlbGVnYXRpb25SZXN1bHRzPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGVsZWdhdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3Rha2luZyByZXF1ZXN0IGJ5IElEXG4gICAqIEBwYXJhbSBzdGFraW5nUmVxdWVzdElkIC0gaWQgb2YgdGhlIHN0YWtpbmcgcmVxdWVzdCB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBnZXRTdGFraW5nUmVxdWVzdChzdGFraW5nUmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdSZXF1ZXN0VXJsKHN0YWtpbmdSZXF1ZXN0SWQpKSkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9ucyByZWFkeSB0byBzaWduXG4gICAqIEBwYXJhbSBzdGFraW5nUmVxdWVzdElkXG4gICAqIEByZXR1cm4gVHJhbnNhY3Rpb25zUmVhZHlUb1NpZ25cbiAgICovXG4gIGFzeW5jIGdldFRyYW5zYWN0aW9uc1JlYWR5VG9TaWduKHN0YWtpbmdSZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25zUmVhZHlUb1NpZ24+IHtcbiAgICBjb25zdCBzdGFraW5nUmVxdWVzdDogU3Rha2luZ1JlcXVlc3QgPSBhd2FpdCB0aGlzLmdldFN0YWtpbmdSZXF1ZXN0KHN0YWtpbmdSZXF1ZXN0SWQpO1xuICAgIGNvbnN0IHJlYWR5VG9TaWduOiBTdGFraW5nVHJhbnNhY3Rpb25bXSA9IHN0YWtpbmdSZXF1ZXN0LnRyYW5zYWN0aW9ucy5maWx0ZXIoXG4gICAgICAodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbikgPT4gdHJhbnNhY3Rpb24uc3RhdHVzID09PSBgUkVBRFlgXG4gICAgKTtcbiAgICBjb25zdCBuZXdUcmFuc2FjdGlvbnM6IFN0YWtpbmdUcmFuc2FjdGlvbltdID0gc3Rha2luZ1JlcXVlc3QudHJhbnNhY3Rpb25zLmZpbHRlcihcbiAgICAgICh0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uKSA9PiB0cmFuc2FjdGlvbi5zdGF0dXMgPT09IGBORVdgXG4gICAgKTtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgYWxsU2lnbmluZ0NvbXBsZXRlOlxuICAgICAgICBzdGFraW5nUmVxdWVzdC50cmFuc2FjdGlvbnMubGVuZ3RoID4gMCAmJiBuZXdUcmFuc2FjdGlvbnMubGVuZ3RoID09PSAwICYmIHJlYWR5VG9TaWduLmxlbmd0aCA9PT0gMCxcbiAgICAgIHRyYW5zYWN0aW9uczogcmVhZHlUb1NpZ24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHN0YWtpbmcgdHJhbnNhY3Rpb25cbiAgICogSWYgVFNTIGRlbGV0ZSBzaWduYXR1cmUgc2hhcmVzLCBlbHNlIGV4cGFuZCBidWlsZCBwYXJhbXMgYW5kIHRoZW4gYnVpbGRcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIC0gc3Rha2luZyB0cmFuc2FjdGlvbiB0byBidWlsZFxuICAgKi9cbiAgYXN5bmMgYnVpbGQodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IFByb21pc2U8U3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICBpZiAoKHRoaXMud2FsbGV0Lm11bHRpc2lnVHlwZSgpID09PSAndHNzJyAmJiB0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSAhPT0gJ2V0aCcpIHx8IHRoaXMuaXNFdGhUc3MpIHtcbiAgICAgIGlmICghdHJhbnNhY3Rpb24udHhSZXF1ZXN0SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eFJlcXVlc3RJZCBpcyByZXF1aXJlZCB0byBzaWduIGFuZCBzZW5kJyk7XG4gICAgICB9XG4gICAgICAvLyBkZWxldGUgc2lnbmF0dXJlIHNoYXJlcyBiZWZvcmUgc2lnbmluZyBmb3IgdHJhbnNhY3Rpb24gcmVxdWVzdCBBUElcbiAgICAgIGF3YWl0IHRoaXMudHNzVXRpbC5kZWxldGVTaWduYXR1cmVTaGFyZXModHJhbnNhY3Rpb24udHhSZXF1ZXN0SWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICB3YWxsZXRJZDogdGhpcy53YWxsZXRJZCxcbiAgICAgICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb24udHhSZXF1ZXN0SWQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMuZXhwYW5kQnVpbGRQYXJhbXModHJhbnNhY3Rpb24pO1xuICAgICAgaWYgKCF0cmFuc2FjdGlvbi5idWlsZFBhcmFtcykge1xuICAgICAgICB0aHJvdyBFcnJvcihgU3Rha2luZyB0cmFuc2FjdGlvbiAke3RyYW5zYWN0aW9uLmlkfSBidWlsZCBwYXJhbXMgbm90IGV4cGFuZGVkYCk7XG4gICAgICB9XG4gICAgICBjb25zdCB3YWxsZXQgPSBhd2FpdCB0aGlzLmV4dHJhY3RXYWxsZXQodHJhbnNhY3Rpb24pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0cmFuc2FjdGlvbjogdHJhbnNhY3Rpb24sXG4gICAgICAgIHJlc3VsdDogYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24uYnVpbGRQYXJhbXMpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4dHJhY3RXYWxsZXQodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbikge1xuICAgIHJldHVybiB0aGlzLmlzQnRjVW5kZWxlZ2F0ZSh0cmFuc2FjdGlvbilcbiAgICAgID8gYXdhaXQgdGhpcy5nZXREZXNjcmlwdG9yV2FsbGV0KHRyYW5zYWN0aW9uKVxuICAgICAgOiBhd2FpdCB0aGlzLmdldFdhbGxldEZvckJ1aWxkaW5nQW5kU2lnbmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0J0Y1VuZGVsZWdhdGUodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ2J0YycgJiYgdHJhbnNhY3Rpb24udHJhbnNhY3Rpb25UeXBlLnRvTG93ZXJDYXNlKCkgPT09ICd1bmRlbGVnYXRlX3dpdGhkcmF3J1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzU3R4KCkge1xuICAgIHJldHVybiB0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ3N0eCc7XG4gIH1cblxuICBwcml2YXRlIGlzVHJ4U3Rha2luZyh0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMud2FsbGV0LmJhc2VDb2luLmdldEZhbWlseSgpID09PSAndHJ4JztcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIHRoZSBzdGFraW5nIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBzaWduT3B0aW9uc1xuICAgKiBAcGFyYW0gc3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIHNpZ24oXG4gICAgc2lnbk9wdGlvbnM6IFN0YWtpbmdTaWduT3B0aW9ucyxcbiAgICBzdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvbjogU3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb25SZXN1bHRcbiAgKTogUHJvbWlzZTxTdGFraW5nU2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgY29uc3QgaXNCdGNVbmRlbGVnYXRlID1cbiAgICAgIHRoaXMud2FsbGV0LmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnYnRjJyAmJlxuICAgICAgc3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb24udHJhbnNhY3Rpb24udHJhbnNhY3Rpb25UeXBlLnRvTG93ZXJDYXNlKCkgPT09ICd1bmRlbGVnYXRlX3dpdGhkcmF3JztcbiAgICBjb25zdCB3YWxsZXQgPSBpc0J0Y1VuZGVsZWdhdGVcbiAgICAgID8gYXdhaXQgdGhpcy5nZXREZXNjcmlwdG9yV2FsbGV0KHN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uKVxuICAgICAgOiBhd2FpdCB0aGlzLmdldFdhbGxldEZvckJ1aWxkaW5nQW5kU2lnbmluZygpO1xuXG4gICAgY29uc3Qga2V5Y2hhaW4gPSBhd2FpdCB3YWxsZXQuYmFzZUNvaW4ua2V5Y2hhaW5zKCkuZ2V0S2V5c0ZvclNpZ25pbmcoe1xuICAgICAgd2FsbGV0OiB0aGlzLndhbGxldCxcbiAgICAgIHJlcUlkOiByZXFJZCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNhY3Rpb246IHN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uLFxuICAgICAgc2lnbmVkOiBhd2FpdCB3YWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogc3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb24ucmVzdWx0LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBzaWduT3B0aW9ucy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBrZXljaGFpbjoga2V5Y2hhaW5bMF0sXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgdGhlIHNpZ25lZCBzdGFraW5nIHRyYW5zYWN0aW9uIGlmIHJlcXVpcmVkLiBTZW5kIGNhbGwgaXMgbm90IHJlcXVpcmVkIGlmIGFwaSB2ZXJzaW9uIGlzIGZ1bGxcbiAgICogYW5kIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBzdGFraW5nIHRyYW5zYWN0aW9uIGZyb20gdGhlIGluY29taW5nIG9iamVjdC5cbiAgICogQHBhcmFtIHNpZ25lZFRyYW5zYWN0aW9uXG4gICAqL1xuICBhc3luYyBzZW5kKHNpZ25lZFRyYW5zYWN0aW9uOiBTdGFraW5nU2lnbmVkVHJhbnNhY3Rpb24pOiBQcm9taXNlPFN0YWtpbmdUcmFuc2FjdGlvbj4ge1xuICAgIGlmICh0aGlzLmlzU2VuZENhbGxSZXF1aXJlZCgpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgICAucG9zdCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwodGhpcy5zdGFraW5nVHJhbnNhY3Rpb25VUkwoc2lnbmVkVHJhbnNhY3Rpb24udHJhbnNhY3Rpb24pKSlcbiAgICAgICAgLnNlbmQoc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmVkKVxuICAgICAgICAucmVzdWx0KCk7XG4gICAgfVxuICAgIHJldHVybiBzaWduZWRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBARGVwcmVjYXRlZCB1c2UgYnVpbGRBbmRTaWduXG4gICAqIEJ1aWxkLCBzaWduIGFuZCBzZW5kIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogQHBhcmFtIHNpZ25PcHRpb25zXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgYnVpbGRTaWduQW5kU2VuZChcbiAgICBzaWduT3B0aW9uczogU3Rha2luZ1NpZ25PcHRpb25zLFxuICAgIHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb25cbiAgKTogUHJvbWlzZTxTdGFraW5nVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZEFuZFNpZ24oc2lnbk9wdGlvbnMsIHRyYW5zYWN0aW9uKS50aGVuKChyZXN1bHQ6IFN0YWtpbmdTaWduZWRUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZChyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBwcmVidWlsdCBzdGFraW5nIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBmb3IgdHJhbnNhY3Rpb25zIHdpdGggdHggcmVxdWVzdCBpZCAoVFNTIHRyYW5zYWN0aW9ucyksIHdlIG5lZWQgdG8gZGVsZXRlIHNpZ25hdHVyZSBzaGFyZXMgYmVmb3JlIGNyZWF0aW5nIHByZWJ1aWxkIHRyYW5zYWN0aW9uXG4gICAqIHdlIG9ubHkgbmVlZCB0byBnZXQgdHJhbnNhY3Rpb24gYnVpbGQgcGFyYW1zIGlmIHRoZXkgZXhpc3QgdG8gcHJlIGJ1aWxkXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgcHJlYnVpbGRTZWxmTWFuYWdlZFN0YWtpbmdUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uKTogUHJvbWlzZTxQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgaWYgKHRyYW5zYWN0aW9uLnR4UmVxdWVzdElkKSB7XG4gICAgICBhd2FpdCB0aGlzLnRzc1V0aWwuZGVsZXRlU2lnbmF0dXJlU2hhcmVzKHRyYW5zYWN0aW9uLnR4UmVxdWVzdElkKTtcbiAgICB9XG4gICAgY29uc3QgYnVpbGRQYXJhbXMgPSAoYXdhaXQgdGhpcy5leHBhbmRCdWlsZFBhcmFtcyh0cmFuc2FjdGlvbikpLmJ1aWxkUGFyYW1zO1xuICAgIGNvbnN0IGZvcm1hdHRlZFBhcmFtcyA9IHtcbiAgICAgIC4uLmJ1aWxkUGFyYW1zLFxuICAgICAgY29pbjogdGhpcy5jb2luLFxuICAgICAgd2FsbGV0SWQ6IHRoaXMud2FsbGV0SWQsXG4gICAgICB3YWxsZXRUeXBlOiB0aGlzLndhbGxldC50eXBlKCksXG4gICAgICBwcmV2aWV3OiB0cnVlLFxuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IChhd2FpdCB0aGlzLmdldFdhbGxldEZvckJ1aWxkaW5nQW5kU2lnbmluZygpKS5wcmVidWlsZFRyYW5zYWN0aW9uKGZvcm1hdHRlZFBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHNpZ24gdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBAcGFyYW0gc2lnbk9wdGlvbnNcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gICAqL1xuICBhc3luYyBidWlsZEFuZFNpZ24oXG4gICAgc2lnbk9wdGlvbnM6IFN0YWtpbmdTaWduT3B0aW9ucyxcbiAgICB0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uXG4gICk6IFByb21pc2U8U3Rha2luZ1NpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgYnVpbHRUeCA9IGF3YWl0IHRoaXMuYnVpbGQodHJhbnNhY3Rpb24pO1xuICAgIC8vIGRlZmF1bHQgdG8gdmVyaWZ5aW5nIGEgdHJhbnNhY3Rpb24gdW5sZXNzIGV4cGxpY2l0bHkgc2tpcHBlZFxuICAgIC8vIHNraXBwaW5nIHRoZSB2ZXJpZmljYXRpb24gZm9yIGJ0YyB1bmRlbGVnYXRlIGJlY2F1c2UgaXQgaXMganVzdCBzaW5nbGUgc2lnXG4gICAgLy8gVE9ETzogU0MtMzE4MyAoYWRkIHRyeCBzdGFraW5nIHZlcmlmaWNhdGlvbilcbiAgICBjb25zdCBza2lwVmVyaWZpY2F0aW9uID1cbiAgICAgIChzaWduT3B0aW9ucy50cmFuc2FjdGlvblZlcmlmaWNhdGlvbk9wdGlvbnM/LnNraXBUcmFuc2FjdGlvblZlcmlmaWNhdGlvbiB8fFxuICAgICAgICB0aGlzLmlzQnRjVW5kZWxlZ2F0ZSh0cmFuc2FjdGlvbikgfHxcbiAgICAgICAgdGhpcy5pc1RyeFN0YWtpbmcodHJhbnNhY3Rpb24pKSA/P1xuICAgICAgZmFsc2U7XG4gICAgaWYgKCFpc1N0YWtpbmdUeFJlcXVlc3RQcmVidWlsZFJlc3VsdChidWlsdFR4LnJlc3VsdCkgJiYgIXNraXBWZXJpZmljYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVCdWlsdFN0YWtpbmdUcmFuc2FjdGlvbihidWlsdFR4LnRyYW5zYWN0aW9uLCBidWlsdFR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2lnbihzaWduT3B0aW9ucywgYnVpbHRUeCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4cGFuZEJ1aWxkUGFyYW1zKHN0YWtpbmdUcmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uKTogUHJvbWlzZTxTdGFraW5nVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLmdldCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwodGhpcy5zdGFraW5nVHJhbnNhY3Rpb25VUkwoc3Rha2luZ1RyYW5zYWN0aW9uKSkpXG4gICAgICAucXVlcnkoeyBleHBhbmRCdWlsZFBhcmFtczogdHJ1ZSB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVTdGFraW5nUmVxdWVzdChcbiAgICBvcHRpb25zOlxuICAgICAgfCBTdGFrZU9wdGlvbnNcbiAgICAgIHwgVW5zdGFrZU9wdGlvbnNcbiAgICAgIHwgRXRoVW5zdGFrZU9wdGlvbnNcbiAgICAgIHwgU3dpdGNoVmFsaWRhdG9yT3B0aW9uc1xuICAgICAgfCBDbGFpbVJld2FyZHNPcHRpb25zXG4gICAgICB8IFRyb25TdGFrZU9wdGlvbnNcbiAgICAgIHwgVGFvU3Rha2VPcHRpb25zLFxuICAgIHR5cGU6IHN0cmluZ1xuICApOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdSZXF1ZXN0c1VSTCgpKSlcbiAgICAgIC5zZW5kKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdSZXF1ZXN0c1VSTCgpIHtcbiAgICByZXR1cm4gYC9hcGkvc3Rha2luZy92MS8ke3RoaXMuY29pbn0vd2FsbGV0cy8ke3RoaXMud2FsbGV0SWR9L3JlcXVlc3RzYDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGVsZWdhdGlvbnMob3B0aW9uczogRGVsZWdhdGlvbk9wdGlvbnMpOiBQcm9taXNlPERlbGVnYXRpb25SZXN1bHRzPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdEZWxlZ2F0aW9uc1VSTCgpKSkucXVlcnkob3B0aW9ucykucmVzdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdEZWxlZ2F0aW9uc1VSTCgpIHtcbiAgICByZXR1cm4gYC9hcGkvc3Rha2luZy92MS8ke3RoaXMuY29pbn0vd2FsbGV0cy8ke3RoaXMud2FsbGV0SWR9L2RlbGVnYXRpb25zYDtcbiAgfVxuXG4gIHByaXZhdGUgc3Rha2luZ1JlcXVlc3RVcmwoc3Rha2luZ1JlcXVlc3RJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zdGFraW5nUmVxdWVzdHNVUkwoKX0vJHtzdGFraW5nUmVxdWVzdElkfWA7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdUcmFuc2FjdGlvblVSTChzdGFraW5nVHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc3Rha2luZ1JlcXVlc3RVcmwoc3Rha2luZ1RyYW5zYWN0aW9uLnN0YWtpbmdSZXF1ZXN0SWQpfS90cmFuc2FjdGlvbnMvJHtzdGFraW5nVHJhbnNhY3Rpb24uaWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0V2FsbGV0Rm9yQnVpbGRpbmdBbmRTaWduaW5nKCk6IFByb21pc2U8SVdhbGxldD4ge1xuICAgIGlmICh0aGlzLndhbGxldC5iYXNlQ29pbi50b2tlbkNvbmZpZykge1xuICAgICAgaWYgKCF0aGlzLnRva2VuUGFyZW50V2FsbGV0KSB7XG4gICAgICAgIHRoaXMudG9rZW5QYXJlbnRXYWxsZXQgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAgICAgLmNvaW4odGhpcy53YWxsZXQuYmFzZUNvaW4udG9rZW5Db25maWcuY29pbilcbiAgICAgICAgICAud2FsbGV0cygpXG4gICAgICAgICAgLmdldCh7IGlkOiB0aGlzLndhbGxldC5pZCgpIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5QYXJlbnRXYWxsZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy53YWxsZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIEFQSSBjYWxsIGlzIG9ubHkgcmVxdWlyZWQgZm9yIFRTUyBUeFJlcXVlc3QgYXBpIHZlcnNpb24gbGl0ZSBvciBtdWx0aS1zaWcgdHJhbnNhY3Rpb25zLlxuICAgKiBGb3IgRnVsbCBhcGkgdmVyc2lvbiwgc2lnbiB0cmFuc2FjdGlvbiBtb3ZlcyB0aGUgdHJhbnNhY3Rpb24gdG8gZGVsaXZlcmVkIHN0YXRlLlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHNlbmQgQVBJIGNhbGwgdG8gc3Rha2luZyBzZXJ2aWNlIGlzIHJlcXVpcmVkIGVsc2UgZmFsc2VcbiAgICovXG4gIHByaXZhdGUgaXNTZW5kQ2FsbFJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gQ29pbkZhbWlseS5FVEgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0V0aFRzcztcbiAgICB9IGVsc2UgaWYgKHRoaXMud2FsbGV0Lm11bHRpc2lnVHlwZSgpID09PSAndHNzJykge1xuICAgICAgcmV0dXJuIHRoaXMud2FsbGV0LmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpICE9PSAnZWNkc2EnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldERlc2NyaXB0b3JXYWxsZXQodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IFByb21pc2U8SVdhbGxldD4ge1xuICAgIGFzc2VydCh0cmFuc2FjdGlvbi5idWlsZFBhcmFtcz8uc2VuZGVyV2FsbGV0SWQsICdzZW5kZXJXYWxsZXRJZCBpcyByZXF1aXJlZCBmb3IgYnRjIHVuZGVsZWdhdGUgdHJhbnNhY3Rpb24nKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy53YWxsZXQuYmFzZUNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB0cmFuc2FjdGlvbi5idWlsZFBhcmFtcy5zZW5kZXJXYWxsZXRJZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVCdWlsdFN0YWtpbmdUcmFuc2FjdGlvbihcbiAgICB0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uLFxuICAgIHByZWJ1aWx0U3Rha2luZ1RyYW5zYWN0aW9uOiBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdFxuICApIHtcbiAgICBjb25zdCB7IGJ1aWxkUGFyYW1zIH0gPSB0cmFuc2FjdGlvbjtcbiAgICBjb25zdCB7IHJlc3VsdCB9ID0gcHJlYnVpbHRTdGFraW5nVHJhbnNhY3Rpb247XG4gICAgY29uc3QgY29pbiA9IHRoaXMud2FsbGV0LmJhc2VDb2luO1xuICAgIGRlYnVnKGBWYWxpZGF0aW5nIHN0YWtpbmcgdHJhbnNhY3Rpb24gJHt0cmFuc2FjdGlvbi5zdGFraW5nUmVxdWVzdElkfSB3aXRoIHByZWJ1aWx0IHRyYW5zYWN0aW9uYCk7XG5cbiAgICBpZiAoISgndHhIZXgnIGluIHJlc3VsdCkgfHwgIXJlc3VsdC50eEhleCkge1xuICAgICAgZGVidWcoYFNraXBwaW5nIHZhbGlkYXRpb24gZm9yIHN0YWtpbmcgdHJhbnNhY3Rpb24gJHt0cmFuc2FjdGlvbi5zdGFraW5nUmVxdWVzdElkfSAtIHR4SGV4IGlzIHVuZGVmaW5lZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgY29pbi5leHBsYWluVHJhbnNhY3Rpb24ocmVzdWx0KTtcbiAgICBjb25zdCBtaXNtYXRjaEVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChidWlsZFBhcmFtcz8ucmVjaXBpZW50cyAmJiBidWlsZFBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHVzZXJSZWNpcGllbnRNYXAgPSBuZXcgTWFwKFxuICAgICAgICBidWlsZFBhcmFtcy5yZWNpcGllbnRzLm1hcCgocmVjaXBpZW50KSA9PiBbcmVjaXBpZW50LmFkZHJlc3MudG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50XSlcbiAgICAgICk7XG4gICAgICBjb25zdCBwbGF0Zm9ybVJlY2lwaWVudE1hcCA9IG5ldyBNYXAoXG4gICAgICAgIChleHBsYWluZWRUcmFuc2FjdGlvbj8ub3V0cHV0cyA/PyBbXSkubWFwKChyZWNpcGllbnQpID0+IFtyZWNpcGllbnQuYWRkcmVzcy50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnRdKVxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgW2FkZHJlc3NdIG9mIHBsYXRmb3JtUmVjaXBpZW50TWFwKSB7XG4gICAgICAgIGlmICghdXNlclJlY2lwaWVudE1hcC5oYXMoYWRkcmVzcykpIHtcbiAgICAgICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKGBVbmV4cGVjdGVkIHJlY2lwaWVudCBhZGRyZXNzIGZvdW5kIGluIGJ1aWx0IHRyYW5zYWN0aW9uOiAke2FkZHJlc3N9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBbYWRkcmVzcywgdXNlclJlY2lwaWVudF0gb2YgdXNlclJlY2lwaWVudE1hcCkge1xuICAgICAgICBjb25zdCBwbGF0Zm9ybVJlY2lwaWVudCA9IHBsYXRmb3JtUmVjaXBpZW50TWFwLmdldChhZGRyZXNzKTtcbiAgICAgICAgaWYgKCFwbGF0Zm9ybVJlY2lwaWVudCkge1xuICAgICAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goYEV4cGVjdGVkIHJlY2lwaWVudCBhZGRyZXNzIG5vdCBmb3VuZCBpbiBidWlsdCB0cmFuc2FjdGlvbjogJHthZGRyZXNzfWApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0Y2hSZXN1bHQgPSB0cmFuc2FjdGlvblJlY2lwaWVudHNNYXRjaCh1c2VyUmVjaXBpZW50LCBwbGF0Zm9ybVJlY2lwaWVudCk7XG5cbiAgICAgICAgaWYgKCFtYXRjaFJlc3VsdC5hbW91bnRNYXRjaCkge1xuICAgICAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgICAgICBgUmVjaXBpZW50ICR7YWRkcmVzc30gYW1vdW50IG1pc21hdGNoLiBFeHBlY3RlZDogJHt1c2VyUmVjaXBpZW50LmFtb3VudH0sIEdvdDogJHtwbGF0Zm9ybVJlY2lwaWVudC5hbW91bnR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFJlc3VsdC50b2tlbk1hdGNoKSB7XG4gICAgICAgICAgbWlzbWF0Y2hFcnJvcnMucHVzaChcbiAgICAgICAgICAgIGBSZWNpcGllbnQgJHthZGRyZXNzfSB0b2tlbiBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICR7dXNlclJlY2lwaWVudC50b2tlbk5hbWUgPz8gJ25hdGl2ZSBjb2luJ30sIEdvdDogJHtcbiAgICAgICAgICAgICAgcGxhdGZvcm1SZWNpcGllbnQudG9rZW5OYW1lID8/ICduYXRpdmUgY29pbidcbiAgICAgICAgICAgIH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChidWlsZFBhcmFtcz8ubWVtbyAmJiAoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS5tZW1vICE9PSBidWlsZFBhcmFtcy5tZW1vKSB7XG4gICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKFxuICAgICAgICBgTWVtbyBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICcke0pTT04uc3RyaW5naWZ5KGJ1aWxkUGFyYW1zLm1lbW8pfScsIEdvdDogJyR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkubWVtb1xuICAgICAgICApfSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChidWlsZFBhcmFtcz8uZ2FzTGltaXQgJiYgU3RyaW5nKChleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLmdhc0xpbWl0KSAhPT0gU3RyaW5nKGJ1aWxkUGFyYW1zLmdhc0xpbWl0KSkge1xuICAgICAgbWlzbWF0Y2hFcnJvcnMucHVzaChcbiAgICAgICAgYEdhcyBMaW1pdCBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICR7YnVpbGRQYXJhbXMuZ2FzTGltaXR9LCBHb3Q6ICR7KGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkuZ2FzTGltaXR9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBidWlsZFBhcmFtcz8udHlwZSAmJlxuICAgICAgKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkudHlwZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoKHRoaXMuaXNTdHgoKSAmJiBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsICE9PSAoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS50eXBlKSB8fCAvLyBmb3IgU1RYIHRoZSB0eCB0eXBlIHNob3VsZCBhbHdheXMgQ29udHJhY3RDYWxsXG4gICAgICAgICghdGhpcy5pc1N0eCgpICYmIFRyYW5zYWN0aW9uVHlwZVtidWlsZFBhcmFtcy50eXBlXSAhPT0gKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkudHlwZSkpXG4gICAgKSB7XG4gICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKFxuICAgICAgICBgVHJhbnNhY3Rpb24gdHlwZSBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICcke2J1aWxkUGFyYW1zLnR5cGV9JywgR290OiAnJHsoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS50eXBlfSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChidWlsZFBhcmFtcz8uc29sSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAoIWlzRXF1YWwoKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkuc29sSW5zdHJ1Y3Rpb25zLCBidWlsZFBhcmFtcy5zb2xJbnN0cnVjdGlvbnMpKSB7XG4gICAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgICAgYFNvbGFuYSBpbnN0cnVjdGlvbnMgbWlzbWF0Y2guIEV4cGVjdGVkOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYnVpbGRQYXJhbXMuc29sSW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgKX0sIEdvdDogJHtKU09OLnN0cmluZ2lmeSgoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS5zb2xJbnN0cnVjdGlvbnMpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWlzbWF0Y2hFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFN0YWtpbmcgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQgYmVmb3JlIHNpZ25pbmc6ICR7bWlzbWF0Y2hFcnJvcnMuam9pbignOyAnKX1gO1xuICAgICAgZGVidWcoZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmICghYnVpbGRQYXJhbXMpIHtcbiAgICAgIGRlYnVnKFxuICAgICAgICBgQ2Fubm90IHBlcmZvcm0gZGVlcCB2YWxpZGF0aW9uIGZvciBzdGFraW5nIHRyYW5zYWN0aW9uICR7dHJhbnNhY3Rpb24uc3Rha2luZ1JlcXVlc3RJZH0gd2l0aG91dCBzcGVjaWZpZWQgYnVpbGQgcGFyYW1zYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRSZXN1bHQoXG4gIHR4OiBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdFsncmVzdWx0J11cbik6IHR4IGlzIFN0YWtpbmdUeFJlcXVlc3RQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0IHtcbiAgcmV0dXJuICh0eCBhcyBTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdCkudHhSZXF1ZXN0SWQgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1dhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby9zdGFraW5nL3N0YWtpbmdXYWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0dBRUc7QUFDSCw0Q0FBNEM7QUFDNUMsNkRBQXFDO0FBdUJyQyxvQ0FBOEQ7QUFDOUQsb0RBQTRCO0FBQzVCLGdFQUF1RTtBQUN2RSxrREFBMEI7QUFDMUIsbURBQW9EO0FBRXBELE1BQWEsYUFBYTtJQVF4QixZQUFZLE1BQWUsRUFBRSxRQUFpQjtRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkcsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQTBEO1FBQ3BFLE9BQU8sTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNE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QixVQUFVLElBQUksQ0FBQyxTQUFTLENBQUUsb0JBQTRCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FDM0UsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sWUFBWSxHQUFHLHlEQUF5RCxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUcsSUFBQSxlQUFLLEVBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLElBQUEsZUFBSyxFQUNILDBEQUEwRCxXQUFXLENBQUMsZ0JBQWdCLGlDQUFpQyxDQUN4SCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQXBjRCxzQ0FvY0M7QUFFRCxTQUFTLGdDQUFnQyxDQUN2QyxFQUE4QztJQUU5QyxPQUFRLEVBQWdELENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQztBQUNyRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQ29pbkZhbWlseSB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcblxuaW1wb3J0IHtcbiAgRGVsZWdhdGlvbk9wdGlvbnMsXG4gIERlbGVnYXRpb25SZXN1bHRzLFxuICBJU3Rha2luZ1dhbGxldCxcbiAgU3Rha2VPcHRpb25zLFxuICBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdCxcbiAgU3Rha2luZ1JlcXVlc3QsXG4gIFN0YWtpbmdTaWduZWRUcmFuc2FjdGlvbixcbiAgU3Rha2luZ1NpZ25PcHRpb25zLFxuICBTdGFraW5nVHJhbnNhY3Rpb24sXG4gIFN3aXRjaFZhbGlkYXRvck9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uc1JlYWR5VG9TaWduLFxuICBVbnN0YWtlT3B0aW9ucyxcbiAgRXRoVW5zdGFrZU9wdGlvbnMsXG4gIENsYWltUmV3YXJkc09wdGlvbnMsXG4gIFN0YWtpbmdUeFJlcXVlc3RQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0LFxuICBUcm9uU3Rha2VPcHRpb25zLFxuICBUYW9TdGFrZU9wdGlvbnMsXG59IGZyb20gJy4vaVN0YWtpbmdXYWxsZXQnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IElXYWxsZXQsIFByZWJ1aWxkVHJhbnNhY3Rpb25SZXN1bHQgfSBmcm9tICcuLi93YWxsZXQnO1xuaW1wb3J0IHsgSVRzc1V0aWxzLCBSZXF1ZXN0VHJhY2VyLCBUc3NVdGlscyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHRyYW5zYWN0aW9uUmVjaXBpZW50c01hdGNoIH0gZnJvbSAnLi4vdXRpbHMvdHJhbnNhY3Rpb25VdGlscyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vYWNjb3VudC1saWInO1xuXG5leHBvcnQgY2xhc3MgU3Rha2luZ1dhbGxldCBpbXBsZW1lbnRzIElTdGFraW5nV2FsbGV0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBiaXRnbzogQml0R29CYXNlO1xuICBwcml2YXRlIHRva2VuUGFyZW50V2FsbGV0PzogSVdhbGxldDtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0V0aFRzczogYm9vbGVhbjtcblxuICBwdWJsaWMgd2FsbGV0OiBJV2FsbGV0O1xuICBwdWJsaWMgdHNzVXRpbDogSVRzc1V0aWxzO1xuXG4gIGNvbnN0cnVjdG9yKHdhbGxldDogSVdhbGxldCwgaXNFdGhUc3M6IGJvb2xlYW4pIHtcbiAgICB0aGlzLndhbGxldCA9IHdhbGxldDtcbiAgICB0aGlzLmJpdGdvID0gd2FsbGV0LmJpdGdvO1xuICAgIHRoaXMudHNzVXRpbCA9IG5ldyBUc3NVdGlscyh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5iYXNlQ29pbiwgdGhpcy53YWxsZXQpO1xuICAgIHRoaXMuaXNFdGhUc3MgPSBpc0V0aFRzcztcbiAgfVxuXG4gIGdldCB3YWxsZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndhbGxldC5pZCgpO1xuICB9XG5cbiAgZ2V0IGNvaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53YWxsZXQuYmFzZUNvaW4udG9rZW5Db25maWcgPyB0aGlzLndhbGxldC5iYXNlQ29pbi50b2tlbkNvbmZpZy50eXBlIDogdGhpcy53YWxsZXQuY29pbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YWtlIGNvaW5zXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gc3Rha2Ugb3B0aW9uc1xuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBzdGFrZShvcHRpb25zOiBTdGFrZU9wdGlvbnMgfCBUcm9uU3Rha2VPcHRpb25zIHwgVGFvU3Rha2VPcHRpb25zKTogUHJvbWlzZTxTdGFraW5nUmVxdWVzdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZVN0YWtpbmdSZXF1ZXN0KG9wdGlvbnMsICdTVEFLRScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Rha2UgY29pbnNcbiAgICogQHBhcmFtIG9wdGlvbnMgLSB1bnN0YWtlIG9wdGlvbnNcbiAgICogQHJldHVybiBTdGFraW5nUmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgdW5zdGFrZShvcHRpb25zOiBVbnN0YWtlT3B0aW9ucyB8IEV0aFVuc3Rha2VPcHRpb25zKTogUHJvbWlzZTxTdGFraW5nUmVxdWVzdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZVN0YWtpbmdSZXF1ZXN0KG9wdGlvbnMsICdVTlNUQUtFJyk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0IGEgcmVxdWVzdCB0byBzd2l0Y2ggdGhlIHZhbGlkYXRvciB1c2VkIGZvciBhIHNwZWNpZmljIGRlbGVnYXRpb25cbiAgICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBkZWxlZ2F0aW9uIHdpdGggdGhlIG5ldyB2YWxpZGF0b3IgYWRkcmVzcyBhbmQgbWFyayB0aGUgb2xkIGRlbGVnYXRpb24gYXMgaW5hY3RpdmVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBzd2l0Y2ggdmFsaWRhdG9yIG9wdGlvbnNcbiAgICogQHJldHVybiBTdGFraW5nUmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgc3dpdGNoVmFsaWRhdG9yKG9wdGlvbnM6IFN3aXRjaFZhbGlkYXRvck9wdGlvbnMpOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlU3Rha2luZ1JlcXVlc3Qob3B0aW9ucywgJ1NXSVRDSF9WQUxJREFUT1InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXQgYSByZXF1ZXN0IHRvIGNsYWltIHJld2FyZHMgZm9yIGEgc3BlY2lmaWMgZGVsZWdhdGlvblxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIGNsYWltIHJld2FyZHMgb3B0aW9uc1xuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBjbGFpbVJld2FyZHMob3B0aW9uczogQ2xhaW1SZXdhcmRzT3B0aW9ucyk6IFByb21pc2U8U3Rha2luZ1JlcXVlc3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVTdGFraW5nUmVxdWVzdChvcHRpb25zLCAnQ0xBSU1fUkVXQVJEUycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBzdGFraW5nIHJlcXVlc3RcbiAgICogQHBhcmFtIHN0YWtpbmdSZXF1ZXN0SWQgLSBpZCBvZiB0aGUgc3Rha2luZyByZXF1ZXN0IHRvIGNhbmNlbFxuICAgKiBAcmV0dXJuIFN0YWtpbmdSZXF1ZXN0XG4gICAqL1xuICBhc3luYyBjYW5jZWxTdGFraW5nUmVxdWVzdChzdGFraW5nUmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFN0YWtpbmdSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZGVsKHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCh0aGlzLnN0YWtpbmdSZXF1ZXN0VXJsKHN0YWtpbmdSZXF1ZXN0SWQpKSkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZGVsZWdhdGlvbnMgZm9yIGEgc3BlY2lmaWMgd2FsbGV0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gdW5zdGFrZSBvcHRpb25zXG4gICAqIEByZXR1cm4gU3Rha2luZ1JlcXVlc3RcbiAgICovXG4gIGFzeW5jIGRlbGVnYXRpb25zKG9wdGlvbnM6IERlbGVnYXRpb25PcHRpb25zKTogUHJvbWlzZTxEZWxlZ2F0aW9uUmVzdWx0cz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERlbGVnYXRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHN0YWtpbmcgcmVxdWVzdCBieSBJRFxuICAgKiBAcGFyYW0gc3Rha2luZ1JlcXVlc3RJZCAtIGlkIG9mIHRoZSBzdGFraW5nIHJlcXVlc3QgdG8gcmV0cmlldmVcbiAgICogQHJldHVybiBTdGFraW5nUmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgZ2V0U3Rha2luZ1JlcXVlc3Qoc3Rha2luZ1JlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxTdGFraW5nUmVxdWVzdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwodGhpcy5zdGFraW5nUmVxdWVzdFVybChzdGFraW5nUmVxdWVzdElkKSkpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0cmFuc2FjdGlvbnMgcmVhZHkgdG8gc2lnblxuICAgKiBAcGFyYW0gc3Rha2luZ1JlcXVlc3RJZFxuICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uc1JlYWR5VG9TaWduXG4gICAqL1xuICBhc3luYyBnZXRUcmFuc2FjdGlvbnNSZWFkeVRvU2lnbihzdGFraW5nUmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uc1JlYWR5VG9TaWduPiB7XG4gICAgY29uc3Qgc3Rha2luZ1JlcXVlc3Q6IFN0YWtpbmdSZXF1ZXN0ID0gYXdhaXQgdGhpcy5nZXRTdGFraW5nUmVxdWVzdChzdGFraW5nUmVxdWVzdElkKTtcbiAgICBjb25zdCByZWFkeVRvU2lnbjogU3Rha2luZ1RyYW5zYWN0aW9uW10gPSBzdGFraW5nUmVxdWVzdC50cmFuc2FjdGlvbnMuZmlsdGVyKFxuICAgICAgKHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLnN0YXR1cyA9PT0gYFJFQURZYFxuICAgICk7XG4gICAgY29uc3QgbmV3VHJhbnNhY3Rpb25zOiBTdGFraW5nVHJhbnNhY3Rpb25bXSA9IHN0YWtpbmdSZXF1ZXN0LnRyYW5zYWN0aW9ucy5maWx0ZXIoXG4gICAgICAodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbikgPT4gdHJhbnNhY3Rpb24uc3RhdHVzID09PSBgTkVXYFxuICAgICk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIGFsbFNpZ25pbmdDb21wbGV0ZTpcbiAgICAgICAgc3Rha2luZ1JlcXVlc3QudHJhbnNhY3Rpb25zLmxlbmd0aCA+IDAgJiYgbmV3VHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCAmJiByZWFkeVRvU2lnbi5sZW5ndGggPT09IDAsXG4gICAgICB0cmFuc2FjdGlvbnM6IHJlYWR5VG9TaWduLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzdGFraW5nIHRyYW5zYWN0aW9uXG4gICAqIElmIFRTUyBkZWxldGUgc2lnbmF0dXJlIHNoYXJlcywgZWxzZSBleHBhbmQgYnVpbGQgcGFyYW1zIGFuZCB0aGVuIGJ1aWxkXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbiAtIHN0YWtpbmcgdHJhbnNhY3Rpb24gdG8gYnVpbGRcbiAgICovXG4gIGFzeW5jIGJ1aWxkKHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pOiBQcm9taXNlPFN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0PiB7XG4gICAgaWYgKCh0aGlzLndhbGxldC5tdWx0aXNpZ1R5cGUoKSA9PT0gJ3RzcycgJiYgdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgIT09ICdldGgnKSB8fCB0aGlzLmlzRXRoVHNzKSB7XG4gICAgICBpZiAoIXRyYW5zYWN0aW9uLnR4UmVxdWVzdElkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHhSZXF1ZXN0SWQgaXMgcmVxdWlyZWQgdG8gc2lnbiBhbmQgc2VuZCcpO1xuICAgICAgfVxuICAgICAgLy8gZGVsZXRlIHNpZ25hdHVyZSBzaGFyZXMgYmVmb3JlIHNpZ25pbmcgZm9yIHRyYW5zYWN0aW9uIHJlcXVlc3QgQVBJXG4gICAgICBhd2FpdCB0aGlzLnRzc1V0aWwuZGVsZXRlU2lnbmF0dXJlU2hhcmVzKHRyYW5zYWN0aW9uLnR4UmVxdWVzdElkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgd2FsbGV0SWQ6IHRoaXMud2FsbGV0SWQsXG4gICAgICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uLnR4UmVxdWVzdElkLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLmV4cGFuZEJ1aWxkUGFyYW1zKHRyYW5zYWN0aW9uKTtcbiAgICAgIGlmICghdHJhbnNhY3Rpb24uYnVpbGRQYXJhbXMpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYFN0YWtpbmcgdHJhbnNhY3Rpb24gJHt0cmFuc2FjdGlvbi5pZH0gYnVpbGQgcGFyYW1zIG5vdCBleHBhbmRlZGApO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2FsbGV0ID0gYXdhaXQgdGhpcy5leHRyYWN0V2FsbGV0KHRyYW5zYWN0aW9uKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uLFxuICAgICAgICByZXN1bHQ6IGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLmJ1aWxkUGFyYW1zKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleHRyYWN0V2FsbGV0KHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc0J0Y1VuZGVsZWdhdGUodHJhbnNhY3Rpb24pXG4gICAgICA/IGF3YWl0IHRoaXMuZ2V0RGVzY3JpcHRvcldhbGxldCh0cmFuc2FjdGlvbilcbiAgICAgIDogYXdhaXQgdGhpcy5nZXRXYWxsZXRGb3JCdWlsZGluZ0FuZFNpZ25pbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNCdGNVbmRlbGVnYXRlKHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdidGMnICYmIHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uVHlwZS50b0xvd2VyQ2FzZSgpID09PSAndW5kZWxlZ2F0ZV93aXRoZHJhdydcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N0eCgpIHtcbiAgICByZXR1cm4gdGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdzdHgnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyeFN0YWtpbmcodHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbikge1xuICAgIHJldHVybiB0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ3RyeCc7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiB0aGUgc3Rha2luZyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnbk9wdGlvbnNcbiAgICogQHBhcmFtIHN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uXG4gICAqL1xuICBhc3luYyBzaWduKFxuICAgIHNpZ25PcHRpb25zOiBTdGFraW5nU2lnbk9wdGlvbnMsXG4gICAgc3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb246IFN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0XG4gICk6IFByb21pc2U8U3Rha2luZ1NpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIGNvbnN0IGlzQnRjVW5kZWxlZ2F0ZSA9XG4gICAgICB0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ2J0YycgJiZcbiAgICAgIHN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uVHlwZS50b0xvd2VyQ2FzZSgpID09PSAndW5kZWxlZ2F0ZV93aXRoZHJhdyc7XG4gICAgY29uc3Qgd2FsbGV0ID0gaXNCdGNVbmRlbGVnYXRlXG4gICAgICA/IGF3YWl0IHRoaXMuZ2V0RGVzY3JpcHRvcldhbGxldChzdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbilcbiAgICAgIDogYXdhaXQgdGhpcy5nZXRXYWxsZXRGb3JCdWlsZGluZ0FuZFNpZ25pbmcoKTtcblxuICAgIGNvbnN0IGtleWNoYWluID0gYXdhaXQgd2FsbGV0LmJhc2VDb2luLmtleWNoYWlucygpLmdldEtleXNGb3JTaWduaW5nKHtcbiAgICAgIHdhbGxldDogdGhpcy53YWxsZXQsXG4gICAgICByZXFJZDogcmVxSWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zYWN0aW9uOiBzdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbixcbiAgICAgIHNpZ25lZDogYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHN0YWtpbmdQcmVidWlsZFRyYW5zYWN0aW9uLnJlc3VsdCxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogc2lnbk9wdGlvbnMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAga2V5Y2hhaW46IGtleWNoYWluWzBdLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHRoZSBzaWduZWQgc3Rha2luZyB0cmFuc2FjdGlvbiBpZiByZXF1aXJlZC4gU2VuZCBjYWxsIGlzIG5vdCByZXF1aXJlZCBpZiBhcGkgdmVyc2lvbiBpcyBmdWxsXG4gICAqIGFuZCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgc3Rha2luZyB0cmFuc2FjdGlvbiBmcm9tIHRoZSBpbmNvbWluZyBvYmplY3QuXG4gICAqIEBwYXJhbSBzaWduZWRUcmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgc2VuZChzaWduZWRUcmFuc2FjdGlvbjogU3Rha2luZ1NpZ25lZFRyYW5zYWN0aW9uKTogUHJvbWlzZTxTdGFraW5nVHJhbnNhY3Rpb24+IHtcbiAgICBpZiAodGhpcy5pc1NlbmRDYWxsUmVxdWlyZWQoKSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgICAgLnBvc3QodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMuc3Rha2luZ1RyYW5zYWN0aW9uVVJMKHNpZ25lZFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uKSkpXG4gICAgICAgIC5zZW5kKHNpZ25lZFRyYW5zYWN0aW9uLnNpZ25lZClcbiAgICAgICAgLnJlc3VsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmVkVHJhbnNhY3Rpb24udHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQERlcHJlY2F0ZWQgdXNlIGJ1aWxkQW5kU2lnblxuICAgKiBCdWlsZCwgc2lnbiBhbmQgc2VuZCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIEBwYXJhbSBzaWduT3B0aW9uc1xuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIGJ1aWxkU2lnbkFuZFNlbmQoXG4gICAgc2lnbk9wdGlvbnM6IFN0YWtpbmdTaWduT3B0aW9ucyxcbiAgICB0cmFuc2FjdGlvbjogU3Rha2luZ1RyYW5zYWN0aW9uXG4gICk6IFByb21pc2U8U3Rha2luZ1RyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYnVpbGRBbmRTaWduKHNpZ25PcHRpb25zLCB0cmFuc2FjdGlvbikudGhlbigocmVzdWx0OiBTdGFraW5nU2lnbmVkVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnNlbmQocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcHJlYnVpbHQgc3Rha2luZyB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogZm9yIHRyYW5zYWN0aW9ucyB3aXRoIHR4IHJlcXVlc3QgaWQgKFRTUyB0cmFuc2FjdGlvbnMpLCB3ZSBuZWVkIHRvIGRlbGV0ZSBzaWduYXR1cmUgc2hhcmVzIGJlZm9yZSBjcmVhdGluZyBwcmVidWlsZCB0cmFuc2FjdGlvblxuICAgKiB3ZSBvbmx5IG5lZWQgdG8gZ2V0IHRyYW5zYWN0aW9uIGJ1aWxkIHBhcmFtcyBpZiB0aGV5IGV4aXN0IHRvIHByZSBidWlsZFxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIHByZWJ1aWxkU2VsZk1hbmFnZWRTdGFraW5nVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IFByb21pc2U8UHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGlmICh0cmFuc2FjdGlvbi50eFJlcXVlc3RJZCkge1xuICAgICAgYXdhaXQgdGhpcy50c3NVdGlsLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0cmFuc2FjdGlvbi50eFJlcXVlc3RJZCk7XG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkUGFyYW1zID0gKGF3YWl0IHRoaXMuZXhwYW5kQnVpbGRQYXJhbXModHJhbnNhY3Rpb24pKS5idWlsZFBhcmFtcztcbiAgICBjb25zdCBmb3JtYXR0ZWRQYXJhbXMgPSB7XG4gICAgICAuLi5idWlsZFBhcmFtcyxcbiAgICAgIGNvaW46IHRoaXMuY29pbixcbiAgICAgIHdhbGxldElkOiB0aGlzLndhbGxldElkLFxuICAgICAgd2FsbGV0VHlwZTogdGhpcy53YWxsZXQudHlwZSgpLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy5nZXRXYWxsZXRGb3JCdWlsZGluZ0FuZFNpZ25pbmcoKSkucHJlYnVpbGRUcmFuc2FjdGlvbihmb3JtYXR0ZWRQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCBzaWduIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogQHBhcmFtIHNpZ25PcHRpb25zXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgYnVpbGRBbmRTaWduKFxuICAgIHNpZ25PcHRpb25zOiBTdGFraW5nU2lnbk9wdGlvbnMsXG4gICAgdHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvblxuICApOiBQcm9taXNlPFN0YWtpbmdTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGJ1aWx0VHggPSBhd2FpdCB0aGlzLmJ1aWxkKHRyYW5zYWN0aW9uKTtcbiAgICAvLyBkZWZhdWx0IHRvIHZlcmlmeWluZyBhIHRyYW5zYWN0aW9uIHVubGVzcyBleHBsaWNpdGx5IHNraXBwZWRcbiAgICAvLyBza2lwcGluZyB0aGUgdmVyaWZpY2F0aW9uIGZvciBidGMgdW5kZWxlZ2F0ZSBiZWNhdXNlIGl0IGlzIGp1c3Qgc2luZ2xlIHNpZ1xuICAgIC8vIFRPRE86IFNDLTMxODMgKGFkZCB0cnggc3Rha2luZyB2ZXJpZmljYXRpb24pXG4gICAgLy8gVE9ETzogU0MtMzUwOCAoYWRkIFNUWCBzdGFraW5nIHZlcmlmaWNhdGlvbilcbiAgICBjb25zdCBza2lwVmVyaWZpY2F0aW9uID1cbiAgICAgIChzaWduT3B0aW9ucy50cmFuc2FjdGlvblZlcmlmaWNhdGlvbk9wdGlvbnM/LnNraXBUcmFuc2FjdGlvblZlcmlmaWNhdGlvbiB8fFxuICAgICAgICB0aGlzLmlzQnRjVW5kZWxlZ2F0ZSh0cmFuc2FjdGlvbikgfHxcbiAgICAgICAgdGhpcy5pc1RyeFN0YWtpbmcodHJhbnNhY3Rpb24pIHx8XG4gICAgICAgIHRoaXMuaXNTdHgoKSkgPz9cbiAgICAgIGZhbHNlO1xuICAgIGlmICghaXNTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRSZXN1bHQoYnVpbHRUeC5yZXN1bHQpICYmICFza2lwVmVyaWZpY2F0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlQnVpbHRTdGFraW5nVHJhbnNhY3Rpb24oYnVpbHRUeC50cmFuc2FjdGlvbiwgYnVpbHRUeCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ24oc2lnbk9wdGlvbnMsIGJ1aWx0VHgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleHBhbmRCdWlsZFBhcmFtcyhzdGFraW5nVHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbik6IFByb21pc2U8U3Rha2luZ1RyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKHRoaXMuc3Rha2luZ1RyYW5zYWN0aW9uVVJMKHN0YWtpbmdUcmFuc2FjdGlvbikpKVxuICAgICAgLnF1ZXJ5KHsgZXhwYW5kQnVpbGRQYXJhbXM6IHRydWUgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlU3Rha2luZ1JlcXVlc3QoXG4gICAgb3B0aW9uczpcbiAgICAgIHwgU3Rha2VPcHRpb25zXG4gICAgICB8IFVuc3Rha2VPcHRpb25zXG4gICAgICB8IEV0aFVuc3Rha2VPcHRpb25zXG4gICAgICB8IFN3aXRjaFZhbGlkYXRvck9wdGlvbnNcbiAgICAgIHwgQ2xhaW1SZXdhcmRzT3B0aW9uc1xuICAgICAgfCBUcm9uU3Rha2VPcHRpb25zXG4gICAgICB8IFRhb1N0YWtlT3B0aW9ucyxcbiAgICB0eXBlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxTdGFraW5nUmVxdWVzdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwodGhpcy5zdGFraW5nUmVxdWVzdHNVUkwoKSkpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFraW5nUmVxdWVzdHNVUkwoKSB7XG4gICAgcmV0dXJuIGAvYXBpL3N0YWtpbmcvdjEvJHt0aGlzLmNvaW59L3dhbGxldHMvJHt0aGlzLndhbGxldElkfS9yZXF1ZXN0c2A7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldERlbGVnYXRpb25zKG9wdGlvbnM6IERlbGVnYXRpb25PcHRpb25zKTogUHJvbWlzZTxEZWxlZ2F0aW9uUmVzdWx0cz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwodGhpcy5zdGFraW5nRGVsZWdhdGlvbnNVUkwoKSkpLnF1ZXJ5KG9wdGlvbnMpLnJlc3VsdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFraW5nRGVsZWdhdGlvbnNVUkwoKSB7XG4gICAgcmV0dXJuIGAvYXBpL3N0YWtpbmcvdjEvJHt0aGlzLmNvaW59L3dhbGxldHMvJHt0aGlzLndhbGxldElkfS9kZWxlZ2F0aW9uc2A7XG4gIH1cblxuICBwcml2YXRlIHN0YWtpbmdSZXF1ZXN0VXJsKHN0YWtpbmdSZXF1ZXN0SWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc3Rha2luZ1JlcXVlc3RzVVJMKCl9LyR7c3Rha2luZ1JlcXVlc3RJZH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFraW5nVHJhbnNhY3Rpb25VUkwoc3Rha2luZ1RyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnN0YWtpbmdSZXF1ZXN0VXJsKHN0YWtpbmdUcmFuc2FjdGlvbi5zdGFraW5nUmVxdWVzdElkKX0vdHJhbnNhY3Rpb25zLyR7c3Rha2luZ1RyYW5zYWN0aW9uLmlkfWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFdhbGxldEZvckJ1aWxkaW5nQW5kU2lnbmluZygpOiBQcm9taXNlPElXYWxsZXQ+IHtcbiAgICBpZiAodGhpcy53YWxsZXQuYmFzZUNvaW4udG9rZW5Db25maWcpIHtcbiAgICAgIGlmICghdGhpcy50b2tlblBhcmVudFdhbGxldCkge1xuICAgICAgICB0aGlzLnRva2VuUGFyZW50V2FsbGV0ID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgICAgIC5jb2luKHRoaXMud2FsbGV0LmJhc2VDb2luLnRva2VuQ29uZmlnLmNvaW4pXG4gICAgICAgICAgLndhbGxldHMoKVxuICAgICAgICAgIC5nZXQoeyBpZDogdGhpcy53YWxsZXQuaWQoKSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnRva2VuUGFyZW50V2FsbGV0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMud2FsbGV0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBBUEkgY2FsbCBpcyBvbmx5IHJlcXVpcmVkIGZvciBUU1MgVHhSZXF1ZXN0IGFwaSB2ZXJzaW9uIGxpdGUgb3IgbXVsdGktc2lnIHRyYW5zYWN0aW9ucy5cbiAgICogRm9yIEZ1bGwgYXBpIHZlcnNpb24sIHNpZ24gdHJhbnNhY3Rpb24gbW92ZXMgdGhlIHRyYW5zYWN0aW9uIHRvIGRlbGl2ZXJlZCBzdGF0ZS5cbiAgICogQHJldHVybnMgdHJ1ZSBpZiBzZW5kIEFQSSBjYWxsIHRvIHN0YWtpbmcgc2VydmljZSBpcyByZXF1aXJlZCBlbHNlIGZhbHNlXG4gICAqL1xuICBwcml2YXRlIGlzU2VuZENhbGxSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy53YWxsZXQuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09IENvaW5GYW1pbHkuRVRIKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNFdGhUc3M7XG4gICAgfSBlbHNlIGlmICh0aGlzLndhbGxldC5tdWx0aXNpZ1R5cGUoKSA9PT0gJ3RzcycpIHtcbiAgICAgIHJldHVybiB0aGlzLndhbGxldC5iYXNlQ29pbi5nZXRNUENBbGdvcml0aG0oKSAhPT0gJ2VjZHNhJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXNjcmlwdG9yV2FsbGV0KHRyYW5zYWN0aW9uOiBTdGFraW5nVHJhbnNhY3Rpb24pOiBQcm9taXNlPElXYWxsZXQ+IHtcbiAgICBhc3NlcnQodHJhbnNhY3Rpb24uYnVpbGRQYXJhbXM/LnNlbmRlcldhbGxldElkLCAnc2VuZGVyV2FsbGV0SWQgaXMgcmVxdWlyZWQgZm9yIGJ0YyB1bmRlbGVnYXRlIHRyYW5zYWN0aW9uJyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMud2FsbGV0LmJhc2VDb2luLndhbGxldHMoKS5nZXQoeyBpZDogdHJhbnNhY3Rpb24uYnVpbGRQYXJhbXMuc2VuZGVyV2FsbGV0SWQgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlQnVpbHRTdGFraW5nVHJhbnNhY3Rpb24oXG4gICAgdHJhbnNhY3Rpb246IFN0YWtpbmdUcmFuc2FjdGlvbixcbiAgICBwcmVidWlsdFN0YWtpbmdUcmFuc2FjdGlvbjogU3Rha2luZ1ByZWJ1aWxkVHJhbnNhY3Rpb25SZXN1bHRcbiAgKSB7XG4gICAgY29uc3QgeyBidWlsZFBhcmFtcyB9ID0gdHJhbnNhY3Rpb247XG4gICAgY29uc3QgeyByZXN1bHQgfSA9IHByZWJ1aWx0U3Rha2luZ1RyYW5zYWN0aW9uO1xuICAgIGNvbnN0IGNvaW4gPSB0aGlzLndhbGxldC5iYXNlQ29pbjtcbiAgICBkZWJ1ZyhgVmFsaWRhdGluZyBzdGFraW5nIHRyYW5zYWN0aW9uICR7dHJhbnNhY3Rpb24uc3Rha2luZ1JlcXVlc3RJZH0gd2l0aCBwcmVidWlsdCB0cmFuc2FjdGlvbmApO1xuXG4gICAgaWYgKCEoJ3R4SGV4JyBpbiByZXN1bHQpIHx8ICFyZXN1bHQudHhIZXgpIHtcbiAgICAgIGRlYnVnKGBTa2lwcGluZyB2YWxpZGF0aW9uIGZvciBzdGFraW5nIHRyYW5zYWN0aW9uICR7dHJhbnNhY3Rpb24uc3Rha2luZ1JlcXVlc3RJZH0gLSB0eEhleCBpcyB1bmRlZmluZWRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBsYWluZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHJlc3VsdCk7XG4gICAgY29uc3QgbWlzbWF0Y2hFcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoYnVpbGRQYXJhbXM/LnJlY2lwaWVudHMgJiYgYnVpbGRQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB1c2VyUmVjaXBpZW50TWFwID0gbmV3IE1hcChcbiAgICAgICAgYnVpbGRQYXJhbXMucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gW3JlY2lwaWVudC5hZGRyZXNzLnRvTG93ZXJDYXNlKCksIHJlY2lwaWVudF0pXG4gICAgICApO1xuICAgICAgY29uc3QgcGxhdGZvcm1SZWNpcGllbnRNYXAgPSBuZXcgTWFwKFxuICAgICAgICAoZXhwbGFpbmVkVHJhbnNhY3Rpb24/Lm91dHB1dHMgPz8gW10pLm1hcCgocmVjaXBpZW50KSA9PiBbcmVjaXBpZW50LmFkZHJlc3MudG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50XSlcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IFthZGRyZXNzXSBvZiBwbGF0Zm9ybVJlY2lwaWVudE1hcCkge1xuICAgICAgICBpZiAoIXVzZXJSZWNpcGllbnRNYXAuaGFzKGFkZHJlc3MpKSB7XG4gICAgICAgICAgbWlzbWF0Y2hFcnJvcnMucHVzaChgVW5leHBlY3RlZCByZWNpcGllbnQgYWRkcmVzcyBmb3VuZCBpbiBidWlsdCB0cmFuc2FjdGlvbjogJHthZGRyZXNzfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2FkZHJlc3MsIHVzZXJSZWNpcGllbnRdIG9mIHVzZXJSZWNpcGllbnRNYXApIHtcbiAgICAgICAgY29uc3QgcGxhdGZvcm1SZWNpcGllbnQgPSBwbGF0Zm9ybVJlY2lwaWVudE1hcC5nZXQoYWRkcmVzcyk7XG4gICAgICAgIGlmICghcGxhdGZvcm1SZWNpcGllbnQpIHtcbiAgICAgICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKGBFeHBlY3RlZCByZWNpcGllbnQgYWRkcmVzcyBub3QgZm91bmQgaW4gYnVpbHQgdHJhbnNhY3Rpb246ICR7YWRkcmVzc31gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gdHJhbnNhY3Rpb25SZWNpcGllbnRzTWF0Y2godXNlclJlY2lwaWVudCwgcGxhdGZvcm1SZWNpcGllbnQpO1xuXG4gICAgICAgIGlmICghbWF0Y2hSZXN1bHQuYW1vdW50TWF0Y2gpIHtcbiAgICAgICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKFxuICAgICAgICAgICAgYFJlY2lwaWVudCAke2FkZHJlc3N9IGFtb3VudCBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICR7dXNlclJlY2lwaWVudC5hbW91bnR9LCBHb3Q6ICR7cGxhdGZvcm1SZWNpcGllbnQuYW1vdW50fWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hSZXN1bHQudG9rZW5NYXRjaCkge1xuICAgICAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgICAgICBgUmVjaXBpZW50ICR7YWRkcmVzc30gdG9rZW4gbWlzbWF0Y2guIEV4cGVjdGVkOiAke3VzZXJSZWNpcGllbnQudG9rZW5OYW1lID8/ICduYXRpdmUgY29pbid9LCBHb3Q6ICR7XG4gICAgICAgICAgICAgIHBsYXRmb3JtUmVjaXBpZW50LnRva2VuTmFtZSA/PyAnbmF0aXZlIGNvaW4nXG4gICAgICAgICAgICB9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVpbGRQYXJhbXM/Lm1lbW8gJiYgKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkubWVtbyAhPT0gYnVpbGRQYXJhbXMubWVtbykge1xuICAgICAgbWlzbWF0Y2hFcnJvcnMucHVzaChcbiAgICAgICAgYE1lbW8gbWlzbWF0Y2guIEV4cGVjdGVkOiAnJHtKU09OLnN0cmluZ2lmeShidWlsZFBhcmFtcy5tZW1vKX0nLCBHb3Q6ICcke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIChleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLm1lbW9cbiAgICAgICAgKX0nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRQYXJhbXM/Lmdhc0xpbWl0ICYmIFN0cmluZygoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS5nYXNMaW1pdCkgIT09IFN0cmluZyhidWlsZFBhcmFtcy5nYXNMaW1pdCkpIHtcbiAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgIGBHYXMgTGltaXQgbWlzbWF0Y2guIEV4cGVjdGVkOiAke2J1aWxkUGFyYW1zLmdhc0xpbWl0fSwgR290OiAkeyhleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLmdhc0xpbWl0fWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYnVpbGRQYXJhbXM/LnR5cGUgJiZcbiAgICAgIChleHBsYWluZWRUcmFuc2FjdGlvbiBhcyBhbnkpLnR5cGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgVHJhbnNhY3Rpb25UeXBlW2J1aWxkUGFyYW1zLnR5cGVdICE9PSAoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS50eXBlXG4gICAgKSB7XG4gICAgICBtaXNtYXRjaEVycm9ycy5wdXNoKFxuICAgICAgICBgVHJhbnNhY3Rpb24gdHlwZSBtaXNtYXRjaC4gRXhwZWN0ZWQ6ICcke2J1aWxkUGFyYW1zLnR5cGV9JywgR290OiAnJHsoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS50eXBlfSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChidWlsZFBhcmFtcz8uc29sSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAoIWlzRXF1YWwoKGV4cGxhaW5lZFRyYW5zYWN0aW9uIGFzIGFueSkuc29sSW5zdHJ1Y3Rpb25zLCBidWlsZFBhcmFtcy5zb2xJbnN0cnVjdGlvbnMpKSB7XG4gICAgICAgIG1pc21hdGNoRXJyb3JzLnB1c2goXG4gICAgICAgICAgYFNvbGFuYSBpbnN0cnVjdGlvbnMgbWlzbWF0Y2guIEV4cGVjdGVkOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYnVpbGRQYXJhbXMuc29sSW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgKX0sIEdvdDogJHtKU09OLnN0cmluZ2lmeSgoZXhwbGFpbmVkVHJhbnNhY3Rpb24gYXMgYW55KS5zb2xJbnN0cnVjdGlvbnMpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWlzbWF0Y2hFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFN0YWtpbmcgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQgYmVmb3JlIHNpZ25pbmc6ICR7bWlzbWF0Y2hFcnJvcnMuam9pbignOyAnKX1gO1xuICAgICAgZGVidWcoZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmICghYnVpbGRQYXJhbXMpIHtcbiAgICAgIGRlYnVnKFxuICAgICAgICBgQ2Fubm90IHBlcmZvcm0gZGVlcCB2YWxpZGF0aW9uIGZvciBzdGFraW5nIHRyYW5zYWN0aW9uICR7dHJhbnNhY3Rpb24uc3Rha2luZ1JlcXVlc3RJZH0gd2l0aG91dCBzcGVjaWZpZWQgYnVpbGQgcGFyYW1zYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRSZXN1bHQoXG4gIHR4OiBTdGFraW5nUHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdFsncmVzdWx0J11cbik6IHR4IGlzIFN0YWtpbmdUeFJlcXVlc3RQcmVidWlsZFRyYW5zYWN0aW9uUmVzdWx0IHtcbiAgcmV0dXJuICh0eCBhcyBTdGFraW5nVHhSZXF1ZXN0UHJlYnVpbGRUcmFuc2FjdGlvblJlc3VsdCkudHhSZXF1ZXN0SWQgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../test/unit/bitgo/errors.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const errors_1 = require("../../../src/bitgo/errors");
|
|
8
|
+
describe('Transaction Intent Mismatch Errors', () => {
|
|
9
|
+
const mockTransactionId = '0x1234567890abcdef';
|
|
10
|
+
const mockTxParams = [
|
|
11
|
+
{ address: '0xrecipient1', amount: '1000000000000000000' },
|
|
12
|
+
{ address: '0xrecipient2', amount: '2000000000000000000' },
|
|
13
|
+
];
|
|
14
|
+
const mockTxHex = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef';
|
|
15
|
+
describe('TxIntentMismatchError', () => {
|
|
16
|
+
it('should create base transaction intent mismatch error with all required properties', () => {
|
|
17
|
+
const message = 'Transaction does not match user intent';
|
|
18
|
+
const error = new errors_1.TxIntentMismatchError(message, mockTransactionId, mockTxParams, mockTxHex);
|
|
19
|
+
should_1.default.exist(error);
|
|
20
|
+
should_1.default.equal(error.message, message);
|
|
21
|
+
should_1.default.equal(error.name, 'TxIntentMismatchError');
|
|
22
|
+
should_1.default.equal(error.id, mockTransactionId);
|
|
23
|
+
should_1.default.deepEqual(error.txParams, mockTxParams);
|
|
24
|
+
should_1.default.equal(error.txHex, mockTxHex);
|
|
25
|
+
});
|
|
26
|
+
it('should be an instance of Error', () => {
|
|
27
|
+
const error = new errors_1.TxIntentMismatchError('Test message', mockTransactionId, mockTxParams, mockTxHex);
|
|
28
|
+
(0, should_1.default)(error).be.instanceOf(Error);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('TxIntentMismatchRecipientError', () => {
|
|
32
|
+
it('should create recipient intent mismatch error with mismatched recipients', () => {
|
|
33
|
+
const message = 'Transaction recipients do not match user intent';
|
|
34
|
+
const mismatchedRecipients = [
|
|
35
|
+
{ address: '0xexpected1', amount: '1000' },
|
|
36
|
+
{ address: '0xexpected2', amount: '2000' },
|
|
37
|
+
];
|
|
38
|
+
const error = new errors_1.TxIntentMismatchRecipientError(message, mockTransactionId, mockTxParams, mockTxHex, mismatchedRecipients);
|
|
39
|
+
should_1.default.exist(error);
|
|
40
|
+
should_1.default.equal(error.message, message);
|
|
41
|
+
should_1.default.equal(error.name, 'TxIntentMismatchRecipientError');
|
|
42
|
+
should_1.default.equal(error.id, mockTransactionId);
|
|
43
|
+
should_1.default.deepEqual(error.txParams, mockTxParams);
|
|
44
|
+
should_1.default.equal(error.txHex, mockTxHex);
|
|
45
|
+
should_1.default.deepEqual(error.mismatchedRecipients, mismatchedRecipients);
|
|
46
|
+
});
|
|
47
|
+
it('should be an instance of TxIntentMismatchError', () => {
|
|
48
|
+
const error = new errors_1.TxIntentMismatchRecipientError('Test message', mockTransactionId, mockTxParams, mockTxHex, []);
|
|
49
|
+
(0, should_1.default)(error).be.instanceOf(errors_1.TxIntentMismatchError);
|
|
50
|
+
(0, should_1.default)(error).be.instanceOf(Error);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('TxIntentMismatchContractError', () => {
|
|
54
|
+
it('should create contract intent mismatch error with mismatched data payload', () => {
|
|
55
|
+
const message = 'Contract interaction does not match user intent';
|
|
56
|
+
const mismatchedDataPayload = {
|
|
57
|
+
address: '0xcontract123',
|
|
58
|
+
rawContractPayload: '0xabcdef',
|
|
59
|
+
decodedContractPayload: { method: 'transfer', params: ['0xrecipient', '1000'] },
|
|
60
|
+
};
|
|
61
|
+
const error = new errors_1.TxIntentMismatchContractError(message, mockTransactionId, mockTxParams, mockTxHex, mismatchedDataPayload);
|
|
62
|
+
should_1.default.exist(error);
|
|
63
|
+
should_1.default.equal(error.message, message);
|
|
64
|
+
should_1.default.equal(error.name, 'TxIntentMismatchContractError');
|
|
65
|
+
should_1.default.equal(error.id, mockTransactionId);
|
|
66
|
+
should_1.default.deepEqual(error.txParams, mockTxParams);
|
|
67
|
+
should_1.default.equal(error.txHex, mockTxHex);
|
|
68
|
+
should_1.default.deepEqual(error.mismatchedDataPayload, mismatchedDataPayload);
|
|
69
|
+
});
|
|
70
|
+
it('should be an instance of TxIntentMismatchError', () => {
|
|
71
|
+
const error = new errors_1.TxIntentMismatchContractError('Test message', mockTransactionId, mockTxParams, mockTxHex, {
|
|
72
|
+
address: '0xtest',
|
|
73
|
+
rawContractPayload: '0x',
|
|
74
|
+
decodedContractPayload: {},
|
|
75
|
+
});
|
|
76
|
+
(0, should_1.default)(error).be.instanceOf(errors_1.TxIntentMismatchError);
|
|
77
|
+
(0, should_1.default)(error).be.instanceOf(Error);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe('TxIntentMismatchApprovalError', () => {
|
|
81
|
+
it('should create approval intent mismatch error with token approval details', () => {
|
|
82
|
+
const message = 'Token approval does not match user intent';
|
|
83
|
+
const tokenApproval = {
|
|
84
|
+
tokenName: 'TestToken',
|
|
85
|
+
tokenAddress: '0xtoken123',
|
|
86
|
+
authorizingAmount: { type: 'unlimited' },
|
|
87
|
+
authorizingAddress: '0xspender456',
|
|
88
|
+
};
|
|
89
|
+
const error = new errors_1.TxIntentMismatchApprovalError(message, mockTransactionId, mockTxParams, mockTxHex, tokenApproval);
|
|
90
|
+
should_1.default.exist(error);
|
|
91
|
+
should_1.default.equal(error.message, message);
|
|
92
|
+
should_1.default.equal(error.name, 'TxIntentMismatchApprovalError');
|
|
93
|
+
should_1.default.equal(error.id, mockTransactionId);
|
|
94
|
+
should_1.default.deepEqual(error.txParams, mockTxParams);
|
|
95
|
+
should_1.default.equal(error.txHex, mockTxHex);
|
|
96
|
+
should_1.default.deepEqual(error.tokenApproval, tokenApproval);
|
|
97
|
+
});
|
|
98
|
+
it('should be an instance of TxIntentMismatchError', () => {
|
|
99
|
+
const error = new errors_1.TxIntentMismatchApprovalError('Test message', mockTransactionId, mockTxParams, mockTxHex, {
|
|
100
|
+
tokenAddress: '0xtoken',
|
|
101
|
+
authorizingAmount: { type: 'limited', amount: 1000 },
|
|
102
|
+
authorizingAddress: '0xspender',
|
|
103
|
+
});
|
|
104
|
+
(0, should_1.default)(error).be.instanceOf(errors_1.TxIntentMismatchError);
|
|
105
|
+
(0, should_1.default)(error).be.instanceOf(Error);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe('Error inheritance and properties', () => {
|
|
109
|
+
it('should maintain proper inheritance chain', () => {
|
|
110
|
+
const baseError = new errors_1.TxIntentMismatchError('Base error', mockTransactionId, mockTxParams, mockTxHex);
|
|
111
|
+
const recipientError = new errors_1.TxIntentMismatchRecipientError('Recipient error', mockTransactionId, mockTxParams, mockTxHex, []);
|
|
112
|
+
const contractError = new errors_1.TxIntentMismatchContractError('Contract error', mockTransactionId, mockTxParams, mockTxHex, { address: '0xtest', rawContractPayload: '0x', decodedContractPayload: {} });
|
|
113
|
+
const approvalError = new errors_1.TxIntentMismatchApprovalError('Approval error', mockTransactionId, mockTxParams, mockTxHex, {
|
|
114
|
+
tokenAddress: '0xtoken',
|
|
115
|
+
authorizingAmount: { type: 'limited', amount: 1000 },
|
|
116
|
+
authorizingAddress: '0xspender',
|
|
117
|
+
});
|
|
118
|
+
// All should be instances of Error
|
|
119
|
+
(0, should_1.default)(baseError).be.instanceOf(Error);
|
|
120
|
+
(0, should_1.default)(recipientError).be.instanceOf(Error);
|
|
121
|
+
(0, should_1.default)(contractError).be.instanceOf(Error);
|
|
122
|
+
(0, should_1.default)(approvalError).be.instanceOf(Error);
|
|
123
|
+
// All should be instances of TxIntentMismatchError
|
|
124
|
+
(0, should_1.default)(recipientError).be.instanceOf(errors_1.TxIntentMismatchError);
|
|
125
|
+
(0, should_1.default)(contractError).be.instanceOf(errors_1.TxIntentMismatchError);
|
|
126
|
+
(0, should_1.default)(approvalError).be.instanceOf(errors_1.TxIntentMismatchError);
|
|
127
|
+
});
|
|
128
|
+
it('should preserve stack trace', () => {
|
|
129
|
+
const error = new errors_1.TxIntentMismatchError('Test error', mockTransactionId, mockTxParams, mockTxHex);
|
|
130
|
+
should_1.default.exist(error.stack);
|
|
131
|
+
(0, should_1.default)(error.stack).be.a.String();
|
|
132
|
+
(0, should_1.default)(error.stack).containEql('TxIntentMismatchError');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixzREFRbUM7QUFFbkMsUUFBUSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtJQUNsRCxNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDO0lBQy9DLE1BQU0sWUFBWSxHQUFVO1FBQzFCLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUU7UUFDMUQsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRTtLQUMzRCxDQUFDO0lBQ0YsTUFBTSxTQUFTLEdBQUcsb0VBQW9FLENBQUM7SUFFdkYsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtRQUNyQyxFQUFFLENBQUMsbUZBQW1GLEVBQUUsR0FBRyxFQUFFO1lBQzNGLE1BQU0sT0FBTyxHQUFHLHdDQUF3QyxDQUFDO1lBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksOEJBQXFCLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUU3RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDMUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMvQyxnQkFBTSxDQUFD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QUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7XG4gIFR4SW50ZW50TWlzbWF0Y2hFcnJvcixcbiAgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yLFxuICBUeEludGVudE1pc21hdGNoQ29udHJhY3RFcnJvcixcbiAgVHhJbnRlbnRNaXNtYXRjaEFwcHJvdmFsRXJyb3IsXG4gIE1pc21hdGNoZWRSZWNpcGllbnQsXG4gIENvbnRyYWN0RGF0YVBheWxvYWQsXG4gIFRva2VuQXBwcm92YWwsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9iaXRnby9lcnJvcnMnO1xuXG5kZXNjcmliZSgnVHJhbnNhY3Rpb24gSW50ZW50IE1pc21hdGNoIEVycm9ycycsICgpID0+IHtcbiAgY29uc3QgbW9ja1RyYW5zYWN0aW9uSWQgPSAnMHgxMjM0NTY3ODkwYWJjZGVmJztcbiAgY29uc3QgbW9ja1R4UGFyYW1zOiBhbnlbXSA9IFtcbiAgICB7IGFkZHJlc3M6ICcweHJlY2lwaWVudDEnLCBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyB9LFxuICAgIHsgYWRkcmVzczogJzB4cmVjaXBpZW50MicsIGFtb3VudDogJzIwMDAwMDAwMDAwMDAwMDAwMDAnIH0sXG4gIF07XG4gIGNvbnN0IG1vY2tUeEhleCA9ICcweDEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYnO1xuXG4gIGRlc2NyaWJlKCdUeEludGVudE1pc21hdGNoRXJyb3InLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYmFzZSB0cmFuc2FjdGlvbiBpbnRlbnQgbWlzbWF0Y2ggZXJyb3Igd2l0aCBhbGwgcmVxdWlyZWQgcHJvcGVydGllcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnVHJhbnNhY3Rpb24gZG9lcyBub3QgbWF0Y2ggdXNlciBpbnRlbnQnO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaEVycm9yKG1lc3NhZ2UsIG1vY2tUcmFuc2FjdGlvbklkLCBtb2NrVHhQYXJhbXMsIG1vY2tUeEhleCk7XG5cbiAgICAgIHNob3VsZC5leGlzdChlcnJvcik7XG4gICAgICBzaG91bGQuZXF1YWwoZXJyb3IubWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgICBzaG91bGQuZXF1YWwoZXJyb3IubmFtZSwgJ1R4SW50ZW50TWlzbWF0Y2hFcnJvcicpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLmlkLCBtb2NrVHJhbnNhY3Rpb25JZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGVycm9yLnR4UGFyYW1zLCBtb2NrVHhQYXJhbXMpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLnR4SGV4LCBtb2NrVHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBhbiBpbnN0YW5jZSBvZiBFcnJvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR4SW50ZW50TWlzbWF0Y2hFcnJvcignVGVzdCBtZXNzYWdlJywgbW9ja1RyYW5zYWN0aW9uSWQsIG1vY2tUeFBhcmFtcywgbW9ja1R4SGV4KTtcblxuICAgICAgc2hvdWxkKGVycm9yKS5iZS5pbnN0YW5jZU9mKEVycm9yKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1R4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSByZWNpcGllbnQgaW50ZW50IG1pc21hdGNoIGVycm9yIHdpdGggbWlzbWF0Y2hlZCByZWNpcGllbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdUcmFuc2FjdGlvbiByZWNpcGllbnRzIGRvIG5vdCBtYXRjaCB1c2VyIGludGVudCc7XG4gICAgICBjb25zdCBtaXNtYXRjaGVkUmVjaXBpZW50czogTWlzbWF0Y2hlZFJlY2lwaWVudFtdID0gW1xuICAgICAgICB7IGFkZHJlc3M6ICcweGV4cGVjdGVkMScsIGFtb3VudDogJzEwMDAnIH0sXG4gICAgICAgIHsgYWRkcmVzczogJzB4ZXhwZWN0ZWQyJywgYW1vdW50OiAnMjAwMCcgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcihcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgbW9ja1RyYW5zYWN0aW9uSWQsXG4gICAgICAgIG1vY2tUeFBhcmFtcyxcbiAgICAgICAgbW9ja1R4SGV4LFxuICAgICAgICBtaXNtYXRjaGVkUmVjaXBpZW50c1xuICAgICAgKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGVycm9yKTtcbiAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCBtZXNzYWdlKTtcbiAgICAgIHNob3VsZC5lcXVhbChlcnJvci5uYW1lLCAnVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yJyk7XG4gICAgICBzaG91bGQuZXF1YWwoZXJyb3IuaWQsIG1vY2tUcmFuc2FjdGlvbklkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoZXJyb3IudHhQYXJhbXMsIG1vY2tUeFBhcmFtcyk7XG4gICAgICBzaG91bGQuZXF1YWwoZXJyb3IudHhIZXgsIG1vY2tUeEhleCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGVycm9yLm1pc21hdGNoZWRSZWNpcGllbnRzLCBtaXNtYXRjaGVkUmVjaXBpZW50cyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIFR4SW50ZW50TWlzbWF0Y2hFcnJvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcignVGVzdCBtZXNzYWdlJywgbW9ja1RyYW5zYWN0aW9uSWQsIG1vY2tUeFBhcmFtcywgbW9ja1R4SGV4LCBbXSk7XG5cbiAgICAgIHNob3VsZChlcnJvcikuYmUuaW5zdGFuY2VPZihUeEludGVudE1pc21hdGNoRXJyb3IpO1xuICAgICAgc2hvdWxkKGVycm9yKS5iZS5pbnN0YW5jZU9mKEVycm9yKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1R4SW50ZW50TWlzbWF0Y2hDb250cmFjdEVycm9yJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY3JlYXRlIGNvbnRyYWN0IGludGVudCBtaXNtYXRjaCBlcnJvciB3aXRoIG1pc21hdGNoZWQgZGF0YSBwYXlsb2FkJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdDb250cmFjdCBpbnRlcmFjdGlvbiBkb2VzIG5vdCBtYXRjaCB1c2VyIGludGVudCc7XG4gICAgICBjb25zdCBtaXNtYXRjaGVkRGF0YVBheWxvYWQ6IENvbnRyYWN0RGF0YVBheWxvYWQgPSB7XG4gICAgICAgIGFkZHJlc3M6ICcweGNvbnRyYWN0MTIzJyxcbiAgICAgICAgcmF3Q29udHJhY3RQYXlsb2FkOiAnMHhhYmNkZWYnLFxuICAgICAgICBkZWNvZGVkQ29udHJhY3RQYXlsb2FkOiB7IG1ldGhvZDogJ3RyYW5zZmVyJywgcGFyYW1zOiBbJzB4cmVjaXBpZW50JywgJzEwMDAnXSB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaENvbnRyYWN0RXJyb3IoXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIG1vY2tUcmFuc2FjdGlvbklkLFxuICAgICAgICBtb2NrVHhQYXJhbXMsXG4gICAgICAgIG1vY2tUeEhleCxcbiAgICAgICAgbWlzbWF0Y2hlZERhdGFQYXlsb2FkXG4gICAgICApO1xuXG4gICAgICBzaG91bGQuZXhpc3QoZXJyb3IpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm1lc3NhZ2UsIG1lc3NhZ2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm5hbWUsICdUeEludGVudE1pc21hdGNoQ29udHJhY3RFcnJvcicpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLmlkLCBtb2NrVHJhbnNhY3Rpb25JZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGVycm9yLnR4UGFyYW1zLCBtb2NrVHhQYXJhbXMpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLnR4SGV4LCBtb2NrVHhIZXgpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChlcnJvci5taXNtYXRjaGVkRGF0YVBheWxvYWQsIG1pc21hdGNoZWREYXRhUGF5bG9hZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIFR4SW50ZW50TWlzbWF0Y2hFcnJvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR4SW50ZW50TWlzbWF0Y2hDb250cmFjdEVycm9yKCdUZXN0IG1lc3NhZ2UnLCBtb2NrVHJhbnNhY3Rpb25JZCwgbW9ja1R4UGFyYW1zLCBtb2NrVHhIZXgsIHtcbiAgICAgICAgYWRkcmVzczogJzB4dGVzdCcsXG4gICAgICAgIHJhd0NvbnRyYWN0UGF5bG9hZDogJzB4JyxcbiAgICAgICAgZGVjb2RlZENvbnRyYWN0UGF5bG9hZDoge30sXG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkKGVycm9yKS5iZS5pbnN0YW5jZU9mKFR4SW50ZW50TWlzbWF0Y2hFcnJvcik7XG4gICAgICBzaG91bGQoZXJyb3IpLmJlLmluc3RhbmNlT2YoRXJyb3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHhJbnRlbnRNaXNtYXRjaEFwcHJvdmFsRXJyb3InLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYXBwcm92YWwgaW50ZW50IG1pc21hdGNoIGVycm9yIHdpdGggdG9rZW4gYXBwcm92YWwgZGV0YWlscycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnVG9rZW4gYXBwcm92YWwgZG9lcyBub3QgbWF0Y2ggdXNlciBpbnRlbnQnO1xuICAgICAgY29uc3QgdG9rZW5BcHByb3ZhbDogVG9rZW5BcHByb3ZhbCA9IHtcbiAgICAgICAgdG9rZW5OYW1lOiAnVGVzdFRva2VuJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHh0b2tlbjEyMycsXG4gICAgICAgIGF1dGhvcml6aW5nQW1vdW50OiB7IHR5cGU6ICd1bmxpbWl0ZWQnIH0sXG4gICAgICAgIGF1dGhvcml6aW5nQWRkcmVzczogJzB4c3BlbmRlcjQ1NicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBUeEludGVudE1pc21hdGNoQXBwcm92YWxFcnJvcihcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgbW9ja1RyYW5zYWN0aW9uSWQsXG4gICAgICAgIG1vY2tUeFBhcmFtcyxcbiAgICAgICAgbW9ja1R4SGV4LFxuICAgICAgICB0b2tlbkFwcHJvdmFsXG4gICAgICApO1xuXG4gICAgICBzaG91bGQuZXhpc3QoZXJyb3IpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm1lc3NhZ2UsIG1lc3NhZ2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm5hbWUsICdUeEludGVudE1pc21hdGNoQXBwcm92YWxFcnJvcicpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLmlkLCBtb2NrVHJhbnNhY3Rpb25JZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGVycm9yLnR4UGFyYW1zLCBtb2NrVHhQYXJhbXMpO1xuICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLnR4SGV4LCBtb2NrVHhIZXgpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChlcnJvci50b2tlbkFwcHJvdmFsLCB0b2tlbkFwcHJvdmFsKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgYW4gaW5zdGFuY2Ugb2YgVHhJbnRlbnRNaXNtYXRjaEVycm9yJywgKCkgPT4ge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaEFwcHJvdmFsRXJyb3IoJ1Rlc3QgbWVzc2FnZScsIG1vY2tUcmFuc2FjdGlvbklkLCBtb2NrVHhQYXJhbXMsIG1vY2tUeEhleCwge1xuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweHRva2VuJyxcbiAgICAgICAgYXV0aG9yaXppbmdBbW91bnQ6IHsgdHlwZTogJ2xpbWl0ZWQnLCBhbW91bnQ6IDEwMDAgfSxcbiAgICAgICAgYXV0aG9yaXppbmdBZGRyZXNzOiAnMHhzcGVuZGVyJyxcbiAgICAgIH0pO1xuXG4gICAgICBzaG91bGQoZXJyb3IpLmJlLmluc3RhbmNlT2YoVHhJbnRlbnRNaXNtYXRjaEVycm9yKTtcbiAgICAgIHNob3VsZChlcnJvcikuYmUuaW5zdGFuY2VPZihFcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFcnJvciBpbmhlcml0YW5jZSBhbmQgcHJvcGVydGllcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIG1haW50YWluIHByb3BlciBpbmhlcml0YW5jZSBjaGFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJhc2VFcnJvciA9IG5ldyBUeEludGVudE1pc21hdGNoRXJyb3IoJ0Jhc2UgZXJyb3InLCBtb2NrVHJhbnNhY3Rpb25JZCwgbW9ja1R4UGFyYW1zLCBtb2NrVHhIZXgpO1xuICAgICAgY29uc3QgcmVjaXBpZW50RXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yKFxuICAgICAgICAnUmVjaXBpZW50IGVycm9yJyxcbiAgICAgICAgbW9ja1RyYW5zYWN0aW9uSWQsXG4gICAgICAgIG1vY2tUeFBhcmFtcyxcbiAgICAgICAgbW9ja1R4SGV4LFxuICAgICAgICBbXVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbnRyYWN0RXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaENvbnRyYWN0RXJyb3IoXG4gICAgICAgICdDb250cmFjdCBlcnJvcicsXG4gICAgICAgIG1vY2tUcmFuc2FjdGlvbklkLFxuICAgICAgICBtb2NrVHhQYXJhbXMsXG4gICAgICAgIG1vY2tUeEhleCxcbiAgICAgICAgeyBhZGRyZXNzOiAnMHh0ZXN0JywgcmF3Q29udHJhY3RQYXlsb2FkOiAnMHgnLCBkZWNvZGVkQ29udHJhY3RQYXlsb2FkOiB7fSB9XG4gICAgICApO1xuICAgICAgY29uc3QgYXBwcm92YWxFcnJvciA9IG5ldyBUeEludGVudE1pc21hdGNoQXBwcm92YWxFcnJvcihcbiAgICAgICAgJ0FwcHJvdmFsIGVycm9yJyxcbiAgICAgICAgbW9ja1RyYW5zYWN0aW9uSWQsXG4gICAgICAgIG1vY2tUeFBhcmFtcyxcbiAgICAgICAgbW9ja1R4SGV4LFxuICAgICAgICB7XG4gICAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHh0b2tlbicsXG4gICAgICAgICAgYXV0aG9yaXppbmdBbW91bnQ6IHsgdHlwZTogJ2xpbWl0ZWQnLCBhbW91bnQ6IDEwMDAgfSxcbiAgICAgICAgICBhdXRob3JpemluZ0FkZHJlc3M6ICcweHNwZW5kZXInLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBBbGwgc2hvdWxkIGJlIGluc3RhbmNlcyBvZiBFcnJvclxuICAgICAgc2hvdWxkKGJhc2VFcnJvcikuYmUuaW5zdGFuY2VPZihFcnJvcik7XG4gICAgICBzaG91bGQocmVjaXBpZW50RXJyb3IpLmJlLmluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgc2hvdWxkKGNvbnRyYWN0RXJyb3IpLmJlLmluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgc2hvdWxkKGFwcHJvdmFsRXJyb3IpLmJlLmluc3RhbmNlT2YoRXJyb3IpO1xuXG4gICAgICAvLyBBbGwgc2hvdWxkIGJlIGluc3RhbmNlcyBvZiBUeEludGVudE1pc21hdGNoRXJyb3JcbiAgICAgIHNob3VsZChyZWNpcGllbnRFcnJvcikuYmUuaW5zdGFuY2VPZihUeEludGVudE1pc21hdGNoRXJyb3IpO1xuICAgICAgc2hvdWxkKGNvbnRyYWN0RXJyb3IpLmJlLmluc3RhbmNlT2YoVHhJbnRlbnRNaXNtYXRjaEVycm9yKTtcbiAgICAgIHNob3VsZChhcHByb3ZhbEVycm9yKS5iZS5pbnN0YW5jZU9mKFR4SW50ZW50TWlzbWF0Y2hFcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIHN0YWNrIHRyYWNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaEVycm9yKCdUZXN0IGVycm9yJywgbW9ja1RyYW5zYWN0aW9uSWQsIG1vY2tUeFBhcmFtcywgbW9ja1R4SGV4KTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGVycm9yLnN0YWNrKTtcbiAgICAgIHNob3VsZChlcnJvci5zdGFjaykuYmUuYS5TdHJpbmcoKTtcbiAgICAgIHNob3VsZChlcnJvci5zdGFjaykuY29udGFpbkVxbCgnVHhJbnRlbnRNaXNtYXRjaEVycm9yJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|