@bitgo-beta/sdk-coin-apt 1.0.1-beta.91 → 1.0.1-beta.910
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/apt.d.ts +9 -2
- package/dist/src/apt.d.ts.map +1 -1
- package/dist/src/apt.js +37 -11
- package/dist/src/aptNFTCollection.d.ts +18 -0
- package/dist/src/aptNFTCollection.d.ts.map +1 -0
- package/dist/src/aptNFTCollection.js +52 -0
- package/dist/src/aptToken.d.ts +19 -0
- package/dist/src/aptToken.d.ts.map +1 -0
- package/dist/src/aptToken.js +52 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/lib/constants.d.ts +16 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +18 -2
- package/dist/src/lib/iface.d.ts +98 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +18 -4
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +35 -7
- package/dist/src/lib/transaction/abstractDelegationPoolAmountBasedTransaction.d.ts +21 -0
- package/dist/src/lib/transaction/abstractDelegationPoolAmountBasedTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/abstractDelegationPoolAmountBasedTransaction.js +61 -0
- package/dist/src/lib/transaction/abstractDelegationPoolTransaction.d.ts +13 -0
- package/dist/src/lib/transaction/abstractDelegationPoolTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/abstractDelegationPoolTransaction.js +23 -0
- package/dist/src/lib/transaction/abstractTransferTransaction.d.ts +10 -0
- package/dist/src/lib/transaction/abstractTransferTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/abstractTransferTransaction.js +39 -0
- package/dist/src/lib/transaction/customTransaction.d.ts +89 -0
- package/dist/src/lib/transaction/customTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/customTransaction.js +278 -0
- package/dist/src/lib/transaction/delegationPoolAddStakeTransaction.d.ts +10 -0
- package/dist/src/lib/transaction/delegationPoolAddStakeTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/delegationPoolAddStakeTransaction.js +48 -0
- package/dist/src/lib/transaction/delegationPoolUnlockTransaction.d.ts +10 -0
- package/dist/src/lib/transaction/delegationPoolUnlockTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/delegationPoolUnlockTransaction.js +24 -0
- package/dist/src/lib/transaction/delegationPoolWithdrawTransaction.d.ts +10 -0
- package/dist/src/lib/transaction/delegationPoolWithdrawTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/delegationPoolWithdrawTransaction.js +43 -0
- package/dist/src/lib/transaction/digitalAssetTransfer.d.ts +10 -0
- package/dist/src/lib/transaction/digitalAssetTransfer.d.ts.map +1 -0
- package/dist/src/lib/transaction/digitalAssetTransfer.js +45 -0
- package/dist/src/lib/transaction/fungibleAssetTransfer.d.ts +12 -0
- package/dist/src/lib/transaction/fungibleAssetTransfer.d.ts.map +1 -0
- package/dist/src/lib/transaction/fungibleAssetTransfer.js +73 -0
- package/dist/src/lib/transaction/transaction.d.ts +45 -7
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +175 -61
- package/dist/src/lib/transaction/transferTransaction.d.ts +10 -8
- package/dist/src/lib/transaction/transferTransaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transferTransaction.js +48 -41
- package/dist/src/lib/transactionBuilder/customTransactionBuilder.d.ts +64 -0
- package/dist/src/lib/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/customTransactionBuilder.js +127 -0
- package/dist/src/lib/transactionBuilder/delegationPoolAddStakeTransactionBuilder.d.ts +15 -0
- package/dist/src/lib/transactionBuilder/delegationPoolAddStakeTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/delegationPoolAddStakeTransactionBuilder.js +50 -0
- package/dist/src/lib/transactionBuilder/delegationPoolUnlockTransactionBuilder.d.ts +15 -0
- package/dist/src/lib/transactionBuilder/delegationPoolUnlockTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/delegationPoolUnlockTransactionBuilder.js +50 -0
- package/dist/src/lib/transactionBuilder/delegationPoolWithdrawTransactionBuilder.d.ts +15 -0
- package/dist/src/lib/transactionBuilder/delegationPoolWithdrawTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/delegationPoolWithdrawTransactionBuilder.js +50 -0
- package/dist/src/lib/transactionBuilder/digitalAssetTransferBuilder.d.ts +14 -0
- package/dist/src/lib/transactionBuilder/digitalAssetTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/digitalAssetTransferBuilder.js +55 -0
- package/dist/src/lib/transactionBuilder/fungibleAssetTransferBuilder.d.ts +15 -0
- package/dist/src/lib/transactionBuilder/fungibleAssetTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/fungibleAssetTransferBuilder.js +61 -0
- package/dist/src/lib/{transactionBuilder.d.ts → transactionBuilder/transactionBuilder.d.ts} +25 -11
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/transactionBuilder.js +169 -0
- package/dist/src/lib/{transferBuilder.d.ts → transactionBuilder/transferBuilder.d.ts} +5 -7
- package/dist/src/lib/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/transferBuilder.js +56 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +26 -10
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +82 -18
- package/dist/src/lib/utils/validation.d.ts +32 -0
- package/dist/src/lib/utils/validation.d.ts.map +1 -0
- package/dist/src/lib/utils/validation.js +99 -0
- package/dist/src/lib/utils.d.ts +29 -5
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +111 -28
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +9 -1
- package/dist/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/resources/apt.d.ts +56 -0
- package/dist/test/resources/apt.d.ts.map +1 -0
- package/dist/test/resources/apt.js +115 -0
- package/dist/test/unit/apt.d.ts +2 -0
- package/dist/test/unit/apt.d.ts.map +1 -0
- package/dist/test/unit/apt.js +375 -0
- package/dist/test/unit/aptToken.d.ts +2 -0
- package/dist/test/unit/aptToken.d.ts.map +1 -0
- package/dist/test/unit/aptToken.js +92 -0
- package/dist/test/unit/customTransaction.test.d.ts +2 -0
- package/dist/test/unit/customTransaction.test.d.ts.map +1 -0
- package/dist/test/unit/customTransaction.test.js +264 -0
- package/dist/test/unit/getBuilderFactory.d.ts +3 -0
- package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/getBuilderFactory.js +10 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +71 -0
- package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/customTransactionBuilder.js +743 -0
- package/dist/test/unit/transactionBuilder/delegationPoolAddStakeTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/delegationPoolAddStakeTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/delegationPoolAddStakeTransactionBuilder.js +172 -0
- package/dist/test/unit/transactionBuilder/delegationPoolUnlockTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/delegationPoolUnlockTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/delegationPoolUnlockTransactionBuilder.js +148 -0
- package/dist/test/unit/transactionBuilder/delegationPoolWithdrawTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/delegationPoolWithdrawTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/delegationPoolWithdrawTransactionBuilder.js +172 -0
- package/dist/test/unit/transactionBuilder/digitalAssetTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/digitalAssetTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/digitalAssetTransferBuilder.js +276 -0
- package/dist/test/unit/transactionBuilder/fungibleAssetTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/fungibleAssetTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/fungibleAssetTransferBuilder.js +449 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +529 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +108 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +14 -11
- package/.eslintignore +0 -4
- package/.gitignore +0 -3
- package/.mocharc.yml +0 -8
- package/.prettierignore +0 -2
- package/CHANGELOG.md +0 -72
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -118
- package/dist/src/lib/transferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilder.js +0 -25
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
exports.FungibleAssetTransfer = void 0;
|
|
7
|
+
const ts_sdk_1 = require("@aptos-labs/ts-sdk");
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const constants_1 = require("../constants");
|
|
10
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
11
|
+
const abstractTransferTransaction_1 = require("./abstractTransferTransaction");
|
|
12
|
+
class FungibleAssetTransfer extends abstractTransferTransaction_1.AbstractTransferTransaction {
|
|
13
|
+
constructor(coinConfig) {
|
|
14
|
+
super(coinConfig);
|
|
15
|
+
this.faTransferAbi = {
|
|
16
|
+
typeParameters: [{ constraints: [] }],
|
|
17
|
+
parameters: [(0, ts_sdk_1.parseTypeTag)(constants_1.FUNBIGLE_ASSET_TYPE_TAG), new ts_sdk_1.TypeTagAddress(), new ts_sdk_1.TypeTagU64()],
|
|
18
|
+
};
|
|
19
|
+
this.batchFaTransferAbi = {
|
|
20
|
+
typeParameters: [],
|
|
21
|
+
parameters: [
|
|
22
|
+
(0, ts_sdk_1.parseTypeTag)(constants_1.BATCH_FUNGIBLE_ASSET_TYPE_TAG),
|
|
23
|
+
new ts_sdk_1.TypeTagVector(new ts_sdk_1.TypeTagAddress()),
|
|
24
|
+
new ts_sdk_1.TypeTagVector(new ts_sdk_1.TypeTagU64()),
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
this._type = sdk_core_1.TransactionType.SendToken;
|
|
28
|
+
}
|
|
29
|
+
parseTransactionPayload(payload) {
|
|
30
|
+
if (!this.isValidPayload(payload)) {
|
|
31
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid transaction payload');
|
|
32
|
+
}
|
|
33
|
+
const entryFunction = payload.entryFunction;
|
|
34
|
+
this._assetId = entryFunction.args[0].toString();
|
|
35
|
+
const addressArg = entryFunction.args[1];
|
|
36
|
+
const amountArg = entryFunction.args[2];
|
|
37
|
+
this.recipients = utils_1.default.parseRecipients(addressArg, amountArg);
|
|
38
|
+
}
|
|
39
|
+
getTransactionPayloadData() {
|
|
40
|
+
const fungibleTokenAddress = this._assetId;
|
|
41
|
+
if (this.recipients.length > 1) {
|
|
42
|
+
return {
|
|
43
|
+
function: constants_1.FUNGIBLE_ASSET_BATCH_TRANSFER_FUNCTION,
|
|
44
|
+
typeArguments: [],
|
|
45
|
+
functionArguments: [
|
|
46
|
+
fungibleTokenAddress,
|
|
47
|
+
this.recipients.map((recipient) => ts_sdk_1.AccountAddress.fromString(recipient.address)),
|
|
48
|
+
this.recipients.map((recipient) => recipient.amount),
|
|
49
|
+
],
|
|
50
|
+
abi: this.batchFaTransferAbi,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
function: constants_1.FUNGIBLE_ASSET_TRANSFER_FUNCTION,
|
|
55
|
+
typeArguments: [constants_1.FUNGIBLE_ASSET_TYPE_ARGUMENT],
|
|
56
|
+
functionArguments: [
|
|
57
|
+
fungibleTokenAddress,
|
|
58
|
+
ts_sdk_1.AccountAddress.fromString(this.recipients[0].address),
|
|
59
|
+
this.recipients[0].amount,
|
|
60
|
+
],
|
|
61
|
+
abi: this.faTransferAbi,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
isValidPayload(payload) {
|
|
65
|
+
return (payload instanceof ts_sdk_1.TransactionPayloadEntryFunction &&
|
|
66
|
+
payload.entryFunction.args.length === 3 &&
|
|
67
|
+
(payload.entryFunction.type_args.length === 0 ||
|
|
68
|
+
(payload.entryFunction.type_args.length === 1 &&
|
|
69
|
+
constants_1.FUNGIBLE_ASSET_TYPE_ARGUMENT === payload.entryFunction.type_args[0].toString())));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.FungibleAssetTransfer = FungibleAssetTransfer;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVBc3NldFRyYW5zZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbi9mdW5naWJsZUFzc2V0VHJhbnNmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0NBVTRCO0FBQzVCLG1EQUFnRjtBQUVoRiw0Q0FNc0I7QUFDdEIscURBQTZCO0FBQzdCLCtFQUE0RTtBQUU1RSxNQUFhLHFCQUFzQixTQUFRLHlEQUEyQjtJQUNwRSxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQW1EWixrQkFBYSxHQUFxQjtZQUN4QyxjQUFjLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxVQUFVLEVBQUUsQ0FBQyxJQUFBLHFCQUFZLEVBQUMsbUNBQXVCLENBQUMsRUFBRSxJQUFJLHVCQUFjLEVBQUUsRUFBRSxJQUFJLG1CQUFVLEVBQUUsQ0FBQztTQUM1RixDQUFDO1FBRU0sdUJBQWtCLEdBQXFCO1lBQzdDLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFVBQVUsRUFBRTtnQkFDVixJQUFBLHFCQUFZLEVBQUMseUNBQTZCLENBQUM7Z0JBQzNDLElBQUksc0JBQWEsQ0FBQyxJQUFJLHVCQUFjLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxzQkFBYSxDQUFDLElBQUksbUJBQVUsRUFBRSxDQUFDO2FBQ3BDO1NBQ0YsQ0FBQztRQTlEQSxJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsU0FBUyxDQUFDO0lBQ3pDLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxPQUEyQjtRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBSSxPQUEyQyxDQUFDLGFBQWEsQ0FBQztRQUNqRixJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVTLHlCQUF5QjtRQUNqQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPO2dCQUNMLFFBQVEsRUFBRSxrREFBc0M7Z0JBQ2hELGFBQWEsRUFBRSxFQUFFO2dCQUNqQixpQkFBaUIsRUFBRTtvQkFDakIsb0JBQW9CO29CQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsdUJBQWMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNoRixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztpQkFDckQ7Z0JBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7YUFDN0IsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLDRDQUFnQztZQUMxQyxhQUFhLEVBQUUsQ0FBQyx3Q0FBNEIsQ0FBQztZQUM3QyxpQkFBaUIsRUFBRTtnQkFDakIsb0JBQW9CO2dCQUNwQix1QkFBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO2FBQzFCO1lBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQTJCO1FBQ2hELE9BQU8sQ0FDTCxPQUFPLFlBQVksd0NBQStCO1lBQ2xELE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3ZDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQzNDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7b0JBQzNDLHdDQUE0QixLQUFLLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FDckYsQ0FBQztJQUNKLENBQUM7Q0FjRjtBQWxFRCxzREFrRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBY2NvdW50QWRkcmVzcyxcbiAgRW50cnlGdW5jdGlvbkFCSSxcbiAgSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEsXG4gIHBhcnNlVHlwZVRhZyxcbiAgVHJhbnNhY3Rpb25QYXlsb2FkLFxuICBUcmFuc2FjdGlvblBheWxvYWRFbnRyeUZ1bmN0aW9uLFxuICBUeXBlVGFnQWRkcmVzcyxcbiAgVHlwZVRhZ1U2NCxcbiAgVHlwZVRhZ1ZlY3Rvcixcbn0gZnJvbSAnQGFwdG9zLWxhYnMvdHMtc2RrJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCQVRDSF9GVU5HSUJMRV9BU1NFVF9UWVBFX1RBRyxcbiAgRlVOQklHTEVfQVNTRVRfVFlQRV9UQUcsXG4gIEZVTkdJQkxFX0FTU0VUX0JBVENIX1RSQU5TRkVSX0ZVTkNUSU9OLFxuICBGVU5HSUJMRV9BU1NFVF9UUkFOU0ZFUl9GVU5DVElPTixcbiAgRlVOR0lCTEVfQVNTRVRfVFlQRV9BUkdVTUVOVCxcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdFRyYW5zZmVyVHJhbnNhY3Rpb24gfSBmcm9tICcuL2Fic3RyYWN0VHJhbnNmZXJUcmFuc2FjdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBGdW5naWJsZUFzc2V0VHJhbnNmZXIgZXh0ZW5kcyBBYnN0cmFjdFRyYW5zZmVyVHJhbnNhY3Rpb24ge1xuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZFRva2VuO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlVHJhbnNhY3Rpb25QYXlsb2FkKHBheWxvYWQ6IFRyYW5zYWN0aW9uUGF5bG9hZCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkUGF5bG9hZChwYXlsb2FkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uIHBheWxvYWQnKTtcbiAgICB9XG4gICAgY29uc3QgZW50cnlGdW5jdGlvbiA9IChwYXlsb2FkIGFzIFRyYW5zYWN0aW9uUGF5bG9hZEVudHJ5RnVuY3Rpb24pLmVudHJ5RnVuY3Rpb247XG4gICAgdGhpcy5fYXNzZXRJZCA9IGVudHJ5RnVuY3Rpb24uYXJnc1swXS50b1N0cmluZygpO1xuICAgIGNvbnN0IGFkZHJlc3NBcmcgPSBlbnRyeUZ1bmN0aW9uLmFyZ3NbMV07XG4gICAgY29uc3QgYW1vdW50QXJnID0gZW50cnlGdW5jdGlvbi5hcmdzWzJdO1xuICAgIHRoaXMucmVjaXBpZW50cyA9IHV0aWxzLnBhcnNlUmVjaXBpZW50cyhhZGRyZXNzQXJnLCBhbW91bnRBcmcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uUGF5bG9hZERhdGEoKTogSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEge1xuICAgIGNvbnN0IGZ1bmdpYmxlVG9rZW5BZGRyZXNzID0gdGhpcy5fYXNzZXRJZDtcblxuICAgIGlmICh0aGlzLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnVuY3Rpb246IEZVTkdJQkxFX0FTU0VUX0JBVENIX1RSQU5TRkVSX0ZVTkNUSU9OLFxuICAgICAgICB0eXBlQXJndW1lbnRzOiBbXSxcbiAgICAgICAgZnVuY3Rpb25Bcmd1bWVudHM6IFtcbiAgICAgICAgICBmdW5naWJsZVRva2VuQWRkcmVzcyxcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcocmVjaXBpZW50LmFkZHJlc3MpKSxcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IHJlY2lwaWVudC5hbW91bnQpLFxuICAgICAgICBdLFxuICAgICAgICBhYmk6IHRoaXMuYmF0Y2hGYVRyYW5zZmVyQWJpLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZ1bmN0aW9uOiBGVU5HSUJMRV9BU1NFVF9UUkFOU0ZFUl9GVU5DVElPTixcbiAgICAgIHR5cGVBcmd1bWVudHM6IFtGVU5HSUJMRV9BU1NFVF9UWVBFX0FSR1VNRU5UXSxcbiAgICAgIGZ1bmN0aW9uQXJndW1lbnRzOiBbXG4gICAgICAgIGZ1bmdpYmxlVG9rZW5BZGRyZXNzLFxuICAgICAgICBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMucmVjaXBpZW50c1swXS5hZGRyZXNzKSxcbiAgICAgICAgdGhpcy5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgIF0sXG4gICAgICBhYmk6IHRoaXMuZmFUcmFuc2ZlckFiaSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkUGF5bG9hZChwYXlsb2FkOiBUcmFuc2FjdGlvblBheWxvYWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgcGF5bG9hZCBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uUGF5bG9hZEVudHJ5RnVuY3Rpb24gJiZcbiAgICAgIHBheWxvYWQuZW50cnlGdW5jdGlvbi5hcmdzLmxlbmd0aCA9PT0gMyAmJlxuICAgICAgKHBheWxvYWQuZW50cnlGdW5jdGlvbi50eXBlX2FyZ3MubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIChwYXlsb2FkLmVudHJ5RnVuY3Rpb24udHlwZV9hcmdzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgIEZVTkdJQkxFX0FTU0VUX1RZUEVfQVJHVU1FTlQgPT09IHBheWxvYWQuZW50cnlGdW5jdGlvbi50eXBlX2FyZ3NbMF0udG9TdHJpbmcoKSkpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGZhVHJhbnNmZXJBYmk6IEVudHJ5RnVuY3Rpb25BQkkgPSB7XG4gICAgdHlwZVBhcmFtZXRlcnM6IFt7IGNvbnN0cmFpbnRzOiBbXSB9XSxcbiAgICBwYXJhbWV0ZXJzOiBbcGFyc2VUeXBlVGFnKEZVTkJJR0xFX0FTU0VUX1RZUEVfVEFHKSwgbmV3IFR5cGVUYWdBZGRyZXNzKCksIG5ldyBUeXBlVGFnVTY0KCldLFxuICB9O1xuXG4gIHByaXZhdGUgYmF0Y2hGYVRyYW5zZmVyQWJpOiBFbnRyeUZ1bmN0aW9uQUJJID0ge1xuICAgIHR5cGVQYXJhbWV0ZXJzOiBbXSxcbiAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICBwYXJzZVR5cGVUYWcoQkFUQ0hfRlVOR0lCTEVfQVNTRVRfVFlQRV9UQUcpLFxuICAgICAgbmV3IFR5cGVUYWdWZWN0b3IobmV3IFR5cGVUYWdBZGRyZXNzKCkpLFxuICAgICAgbmV3IFR5cGVUYWdWZWN0b3IobmV3IFR5cGVUYWdVNjQoKSksXG4gICAgXSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,16 +1,29 @@
|
|
|
1
|
-
import { BaseKey, BaseTransaction, PublicKey, Signature, TransactionRecipient, TransactionType } from '@bitgo-beta/sdk-core';
|
|
1
|
+
import { BaseKey, BaseTransaction, Entry, PublicKey, Signature, TransactionRecipient, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
2
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
-
import { RawTransaction, SignedTransaction } from '@aptos-labs/ts-sdk';
|
|
3
|
+
import { InputGenerateTransactionPayloadData, RawTransaction, SignedTransaction, TransactionPayload } from '@aptos-labs/ts-sdk';
|
|
4
|
+
import { AptTransactionExplanation, TxData } from '../iface';
|
|
5
|
+
export type InputsAndOutputs = {
|
|
6
|
+
/** Used for this.inputs */
|
|
7
|
+
inputs: Entry[];
|
|
8
|
+
/** Used for this.outputs */
|
|
9
|
+
outputs: Entry[];
|
|
10
|
+
/** Used for this.explainTransaction() */
|
|
11
|
+
externalOutputs: TransactionRecipient[];
|
|
12
|
+
};
|
|
4
13
|
export declare abstract class Transaction extends BaseTransaction {
|
|
5
14
|
protected _rawTransaction: RawTransaction;
|
|
6
|
-
protected
|
|
15
|
+
protected _senderSignature: Signature;
|
|
16
|
+
protected _feePayerSignature: Signature;
|
|
7
17
|
protected _sender: string;
|
|
8
|
-
protected
|
|
18
|
+
protected _recipients: TransactionRecipient[];
|
|
9
19
|
protected _sequenceNumber: number;
|
|
10
20
|
protected _maxGasAmount: number;
|
|
11
21
|
protected _gasUnitPrice: number;
|
|
12
22
|
protected _gasUsed: number;
|
|
13
23
|
protected _expirationTime: number;
|
|
24
|
+
protected _feePayerAddress: string;
|
|
25
|
+
protected _assetId: string;
|
|
26
|
+
protected _isSimulateTxn: boolean;
|
|
14
27
|
static EMPTY_PUBLIC_KEY: Buffer<ArrayBuffer>;
|
|
15
28
|
static EMPTY_SIGNATURE: Buffer<ArrayBuffer>;
|
|
16
29
|
constructor(coinConfig: Readonly<CoinConfig>);
|
|
@@ -18,8 +31,16 @@ export declare abstract class Transaction extends BaseTransaction {
|
|
|
18
31
|
get id(): string;
|
|
19
32
|
get sender(): string;
|
|
20
33
|
set sender(value: string);
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated - use `recipients()`.
|
|
36
|
+
*/
|
|
21
37
|
get recipient(): TransactionRecipient;
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated - use `recipients()`.
|
|
40
|
+
*/
|
|
22
41
|
set recipient(value: TransactionRecipient);
|
|
42
|
+
get recipients(): TransactionRecipient[];
|
|
43
|
+
set recipients(value: TransactionRecipient[]);
|
|
23
44
|
get sequenceNumber(): number;
|
|
24
45
|
set sequenceNumber(value: number);
|
|
25
46
|
get maxGasAmount(): number;
|
|
@@ -30,23 +51,40 @@ export declare abstract class Transaction extends BaseTransaction {
|
|
|
30
51
|
set gasUsed(value: number);
|
|
31
52
|
get expirationTime(): number;
|
|
32
53
|
set expirationTime(value: number);
|
|
54
|
+
get feePayerAddress(): string;
|
|
33
55
|
set transactionType(transactionType: TransactionType);
|
|
56
|
+
get assetId(): string;
|
|
57
|
+
set assetId(value: string);
|
|
58
|
+
get isSimulateTxn(): boolean;
|
|
59
|
+
set isSimulateTxn(value: boolean);
|
|
60
|
+
protected abstract getTransactionPayloadData(): InputGenerateTransactionPayloadData;
|
|
61
|
+
protected abstract parseTransactionPayload(payload: TransactionPayload): void;
|
|
62
|
+
fromDeserializedSignedTransaction(signedTxn: SignedTransaction): void;
|
|
34
63
|
canSign(_key: BaseKey): boolean;
|
|
35
64
|
toBroadcastFormat(): string;
|
|
36
65
|
serialize(): string;
|
|
37
|
-
|
|
66
|
+
addSenderSignature(publicKey: PublicKey, signature: Buffer): void;
|
|
67
|
+
getFeePayerPubKey(): string;
|
|
68
|
+
addFeePayerSignature(publicKey: PublicKey, signature: Buffer): void;
|
|
69
|
+
addFeePayerAddress(address: string): void;
|
|
38
70
|
build(): Promise<void>;
|
|
71
|
+
abstract inputsAndOutputs(): InputsAndOutputs;
|
|
39
72
|
loadInputsAndOutputs(): void;
|
|
40
73
|
fromRawTransaction(rawTransaction: string): void;
|
|
41
|
-
fromDeserializedSignedTransaction(signedTxn: SignedTransaction): void;
|
|
42
74
|
/**
|
|
43
75
|
* Deserializes a signed transaction hex string
|
|
44
76
|
* @param {string} signedRawTransaction
|
|
45
77
|
* @returns {SignedTransaction} the aptos signed transaction
|
|
46
78
|
*/
|
|
47
79
|
static deserializeSignedTransaction(signedRawTransaction: string): SignedTransaction;
|
|
48
|
-
|
|
80
|
+
toJson(): TxData;
|
|
49
81
|
getFee(): string;
|
|
82
|
+
get signablePayload(): Buffer;
|
|
83
|
+
/** @inheritDoc */
|
|
84
|
+
explainTransaction(): AptTransactionExplanation;
|
|
85
|
+
protected buildRawTransaction(): Promise<void>;
|
|
86
|
+
private getSignablePayloadWithFeePayer;
|
|
87
|
+
private getSignablePayloadWithoutFeePayer;
|
|
50
88
|
private generateTxnId;
|
|
51
89
|
}
|
|
52
90
|
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,15 +10,27 @@ const ts_sdk_1 = require("@aptos-labs/ts-sdk");
|
|
|
10
10
|
const constants_1 = require("../constants");
|
|
11
11
|
const utils_1 = __importDefault(require("../utils"));
|
|
12
12
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
13
|
+
const assert_1 = __importDefault(require("assert"));
|
|
13
14
|
class Transaction extends sdk_core_1.BaseTransaction {
|
|
14
15
|
constructor(coinConfig) {
|
|
15
16
|
super(coinConfig);
|
|
16
17
|
this._maxGasAmount = ts_sdk_1.DEFAULT_MAX_GAS_AMOUNT;
|
|
17
18
|
this._gasUnitPrice = constants_1.DEFAULT_GAS_UNIT_PRICE;
|
|
18
19
|
this._gasUsed = 0;
|
|
19
|
-
this._expirationTime =
|
|
20
|
+
this._expirationTime = utils_1.default.getTxnExpirationTimestamp();
|
|
20
21
|
this._sequenceNumber = 0;
|
|
21
|
-
this.
|
|
22
|
+
this._sender = ts_sdk_1.AccountAddress.ZERO.toString();
|
|
23
|
+
this._recipients = [];
|
|
24
|
+
this._assetId = ts_sdk_1.AccountAddress.ZERO.toString();
|
|
25
|
+
this._isSimulateTxn = false;
|
|
26
|
+
this._senderSignature = {
|
|
27
|
+
publicKey: {
|
|
28
|
+
pub: ts_sdk_1.Hex.fromHexInput(Transaction.EMPTY_PUBLIC_KEY).toString(),
|
|
29
|
+
},
|
|
30
|
+
signature: Transaction.EMPTY_SIGNATURE,
|
|
31
|
+
};
|
|
32
|
+
this._feePayerAddress = ts_sdk_1.AccountAddress.ZERO.toString();
|
|
33
|
+
this._feePayerSignature = {
|
|
22
34
|
publicKey: {
|
|
23
35
|
pub: ts_sdk_1.Hex.fromHexInput(Transaction.EMPTY_PUBLIC_KEY).toString(),
|
|
24
36
|
},
|
|
@@ -36,11 +48,24 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
36
48
|
set sender(value) {
|
|
37
49
|
this._sender = value;
|
|
38
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated - use `recipients()`.
|
|
53
|
+
*/
|
|
39
54
|
get recipient() {
|
|
40
|
-
|
|
55
|
+
(0, assert_1.default)(this._recipients.length > 0, 'No recipients available');
|
|
56
|
+
return this._recipients[0];
|
|
41
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* @deprecated - use `recipients()`.
|
|
60
|
+
*/
|
|
42
61
|
set recipient(value) {
|
|
43
|
-
this.
|
|
62
|
+
this.recipients = [value];
|
|
63
|
+
}
|
|
64
|
+
get recipients() {
|
|
65
|
+
return this._recipients;
|
|
66
|
+
}
|
|
67
|
+
set recipients(value) {
|
|
68
|
+
this._recipients = value;
|
|
44
69
|
}
|
|
45
70
|
get sequenceNumber() {
|
|
46
71
|
return this._sequenceNumber;
|
|
@@ -72,9 +97,49 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
72
97
|
set expirationTime(value) {
|
|
73
98
|
this._expirationTime = value;
|
|
74
99
|
}
|
|
100
|
+
get feePayerAddress() {
|
|
101
|
+
return this._feePayerAddress;
|
|
102
|
+
}
|
|
75
103
|
set transactionType(transactionType) {
|
|
76
104
|
this._type = transactionType;
|
|
77
105
|
}
|
|
106
|
+
get assetId() {
|
|
107
|
+
return this._assetId;
|
|
108
|
+
}
|
|
109
|
+
set assetId(value) {
|
|
110
|
+
this._assetId = value;
|
|
111
|
+
}
|
|
112
|
+
get isSimulateTxn() {
|
|
113
|
+
return this._isSimulateTxn;
|
|
114
|
+
}
|
|
115
|
+
set isSimulateTxn(value) {
|
|
116
|
+
this._isSimulateTxn = value;
|
|
117
|
+
}
|
|
118
|
+
fromDeserializedSignedTransaction(signedTxn) {
|
|
119
|
+
try {
|
|
120
|
+
const rawTxn = signedTxn.raw_txn;
|
|
121
|
+
this.parseTransactionPayload(rawTxn.payload);
|
|
122
|
+
this._sender = rawTxn.sender.toString();
|
|
123
|
+
this._sequenceNumber = utils_1.default.castToNumber(rawTxn.sequence_number);
|
|
124
|
+
this._maxGasAmount = utils_1.default.castToNumber(rawTxn.max_gas_amount);
|
|
125
|
+
this._gasUnitPrice = utils_1.default.castToNumber(rawTxn.gas_unit_price);
|
|
126
|
+
this._expirationTime = utils_1.default.castToNumber(rawTxn.expiration_timestamp_secs);
|
|
127
|
+
this._rawTransaction = rawTxn;
|
|
128
|
+
this.loadInputsAndOutputs();
|
|
129
|
+
const authenticator = signedTxn.authenticator;
|
|
130
|
+
this._feePayerAddress = authenticator.fee_payer.address.toString();
|
|
131
|
+
const senderAuthenticator = authenticator.sender;
|
|
132
|
+
const senderSignature = Buffer.from(senderAuthenticator.signature.toUint8Array());
|
|
133
|
+
this.addSenderSignature({ pub: senderAuthenticator.public_key.toString() }, senderSignature);
|
|
134
|
+
const feePayerAuthenticator = authenticator.fee_payer.authenticator;
|
|
135
|
+
const feePayerSignature = Buffer.from(feePayerAuthenticator.signature.toUint8Array());
|
|
136
|
+
this.addFeePayerSignature({ pub: utils_1.default.stripHexPrefix(feePayerAuthenticator.public_key.toString()) }, feePayerSignature);
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
console.error('invalid signed transaction', e);
|
|
140
|
+
throw new Error('invalid signed transaction');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
78
143
|
canSign(_key) {
|
|
79
144
|
return false;
|
|
80
145
|
}
|
|
@@ -85,16 +150,41 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
85
150
|
return this.serialize();
|
|
86
151
|
}
|
|
87
152
|
serialize() {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
153
|
+
let senderAuthenticator;
|
|
154
|
+
let feePayerAuthenticator;
|
|
155
|
+
if (this.isSimulateTxn) {
|
|
156
|
+
senderAuthenticator = new ts_sdk_1.AccountAuthenticatorNoAccountAuthenticator();
|
|
157
|
+
feePayerAuthenticator = new ts_sdk_1.AccountAuthenticatorNoAccountAuthenticator();
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const senderPublicKeyBuffer = utils_1.default.getBufferFromHexString(this._senderSignature.publicKey.pub);
|
|
161
|
+
const senderPublicKey = new ts_sdk_1.Ed25519PublicKey(senderPublicKeyBuffer);
|
|
162
|
+
const senderSignature = new ts_sdk_1.Ed25519Signature(this._senderSignature.signature);
|
|
163
|
+
senderAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(senderPublicKey, senderSignature);
|
|
164
|
+
const feePayerPublicKeyBuffer = utils_1.default.getBufferFromHexString(this._feePayerSignature.publicKey.pub);
|
|
165
|
+
const feePayerPublicKey = new ts_sdk_1.Ed25519PublicKey(feePayerPublicKeyBuffer);
|
|
166
|
+
const feePayerSignature = new ts_sdk_1.Ed25519Signature(this._feePayerSignature.signature);
|
|
167
|
+
feePayerAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(feePayerPublicKey, feePayerSignature);
|
|
168
|
+
}
|
|
169
|
+
const txnAuthenticator = new ts_sdk_1.TransactionAuthenticatorFeePayer(senderAuthenticator, [], [], {
|
|
170
|
+
address: ts_sdk_1.AccountAddress.fromString(this._feePayerAddress),
|
|
171
|
+
authenticator: feePayerAuthenticator,
|
|
172
|
+
});
|
|
92
173
|
const signedTxn = new ts_sdk_1.SignedTransaction(this._rawTransaction, txnAuthenticator);
|
|
93
174
|
return signedTxn.toString();
|
|
94
175
|
}
|
|
95
|
-
|
|
176
|
+
addSenderSignature(publicKey, signature) {
|
|
96
177
|
this._signatures = [signature.toString('hex')];
|
|
97
|
-
this.
|
|
178
|
+
this._senderSignature = { publicKey, signature };
|
|
179
|
+
}
|
|
180
|
+
getFeePayerPubKey() {
|
|
181
|
+
return this._feePayerSignature.publicKey.pub;
|
|
182
|
+
}
|
|
183
|
+
addFeePayerSignature(publicKey, signature) {
|
|
184
|
+
this._feePayerSignature = { publicKey, signature };
|
|
185
|
+
}
|
|
186
|
+
addFeePayerAddress(address) {
|
|
187
|
+
this._feePayerAddress = address;
|
|
98
188
|
}
|
|
99
189
|
async build() {
|
|
100
190
|
await this.buildRawTransaction();
|
|
@@ -102,20 +192,9 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
102
192
|
this.loadInputsAndOutputs();
|
|
103
193
|
}
|
|
104
194
|
loadInputsAndOutputs() {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
value: this.recipient.amount,
|
|
109
|
-
coin: this._coinConfig.name,
|
|
110
|
-
},
|
|
111
|
-
];
|
|
112
|
-
this._outputs = [
|
|
113
|
-
{
|
|
114
|
-
address: this.recipient.address,
|
|
115
|
-
value: this.recipient.amount,
|
|
116
|
-
coin: this._coinConfig.name,
|
|
117
|
-
},
|
|
118
|
-
];
|
|
195
|
+
const { inputs, outputs } = this.inputsAndOutputs();
|
|
196
|
+
this._inputs = inputs;
|
|
197
|
+
this._outputs = outputs;
|
|
119
198
|
}
|
|
120
199
|
fromRawTransaction(rawTransaction) {
|
|
121
200
|
let signedTxn;
|
|
@@ -123,31 +202,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
123
202
|
signedTxn = utils_1.default.deserializeSignedTransaction(rawTransaction);
|
|
124
203
|
}
|
|
125
204
|
catch (e) {
|
|
126
|
-
console.error('invalid raw transaction', e);
|
|
127
205
|
throw new Error('invalid raw transaction');
|
|
128
206
|
}
|
|
129
207
|
this.fromDeserializedSignedTransaction(signedTxn);
|
|
130
208
|
}
|
|
131
|
-
fromDeserializedSignedTransaction(signedTxn) {
|
|
132
|
-
try {
|
|
133
|
-
const rawTxn = signedTxn.raw_txn;
|
|
134
|
-
this._sender = rawTxn.sender.toString();
|
|
135
|
-
this._recipient = utils_1.default.getRecipientFromTransactionPayload(rawTxn.payload);
|
|
136
|
-
this._sequenceNumber = utils_1.default.castToNumber(rawTxn.sequence_number);
|
|
137
|
-
this._maxGasAmount = utils_1.default.castToNumber(rawTxn.max_gas_amount);
|
|
138
|
-
this._gasUnitPrice = utils_1.default.castToNumber(rawTxn.gas_unit_price);
|
|
139
|
-
this._expirationTime = utils_1.default.castToNumber(rawTxn.expiration_timestamp_secs);
|
|
140
|
-
this._rawTransaction = rawTxn;
|
|
141
|
-
this.loadInputsAndOutputs();
|
|
142
|
-
const authenticator = signedTxn.authenticator;
|
|
143
|
-
const signature = Buffer.from(authenticator.signature.toUint8Array());
|
|
144
|
-
this.addSignature({ pub: authenticator.public_key.toString() }, signature);
|
|
145
|
-
}
|
|
146
|
-
catch (e) {
|
|
147
|
-
console.error('invalid signed transaction', e);
|
|
148
|
-
throw new Error('invalid signed transaction');
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
209
|
/**
|
|
152
210
|
* Deserializes a signed transaction hex string
|
|
153
211
|
* @param {string} signedRawTransaction
|
|
@@ -158,22 +216,65 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
158
216
|
return utils_1.default.deserializeSignedTransaction(signedRawTransaction);
|
|
159
217
|
}
|
|
160
218
|
catch (e) {
|
|
161
|
-
console.error('invalid raw transaction', e);
|
|
162
219
|
throw new Error('invalid raw transaction');
|
|
163
220
|
}
|
|
164
221
|
}
|
|
222
|
+
toJson() {
|
|
223
|
+
return {
|
|
224
|
+
id: this.id,
|
|
225
|
+
sender: this.sender,
|
|
226
|
+
recipients: this.recipients,
|
|
227
|
+
sequenceNumber: this.sequenceNumber,
|
|
228
|
+
maxGasAmount: this.maxGasAmount,
|
|
229
|
+
gasUnitPrice: this.gasUnitPrice,
|
|
230
|
+
gasUsed: this.gasUsed,
|
|
231
|
+
expirationTime: this.expirationTime,
|
|
232
|
+
feePayer: this.feePayerAddress,
|
|
233
|
+
assetId: this.assetId,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
getFee() {
|
|
237
|
+
return new bignumber_js_1.default(this.gasUsed).multipliedBy(this.gasUnitPrice).toString();
|
|
238
|
+
}
|
|
239
|
+
get signablePayload() {
|
|
240
|
+
return this.feePayerAddress ? this.getSignablePayloadWithFeePayer() : this.getSignablePayloadWithoutFeePayer();
|
|
241
|
+
}
|
|
242
|
+
/** @inheritDoc */
|
|
243
|
+
explainTransaction() {
|
|
244
|
+
const displayOrder = [
|
|
245
|
+
'id',
|
|
246
|
+
'outputs',
|
|
247
|
+
'outputAmount',
|
|
248
|
+
'changeOutputs',
|
|
249
|
+
'changeAmount',
|
|
250
|
+
'fee',
|
|
251
|
+
'withdrawAmount',
|
|
252
|
+
'sender',
|
|
253
|
+
'type',
|
|
254
|
+
];
|
|
255
|
+
const outputs = this.inputsAndOutputs().externalOutputs;
|
|
256
|
+
const outputAmount = outputs
|
|
257
|
+
.reduce((accumulator, current) => accumulator.plus(current.amount), new bignumber_js_1.default('0'))
|
|
258
|
+
.toString();
|
|
259
|
+
return {
|
|
260
|
+
displayOrder,
|
|
261
|
+
id: this.id,
|
|
262
|
+
outputs,
|
|
263
|
+
outputAmount,
|
|
264
|
+
changeOutputs: [],
|
|
265
|
+
changeAmount: '0',
|
|
266
|
+
fee: { fee: this.getFee() },
|
|
267
|
+
sender: this.sender,
|
|
268
|
+
type: this.type,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
165
271
|
async buildRawTransaction() {
|
|
166
272
|
const network = this._coinConfig.network.type === statics_1.NetworkType.MAINNET ? ts_sdk_1.Network.MAINNET : ts_sdk_1.Network.TESTNET;
|
|
167
273
|
const aptos = new ts_sdk_1.Aptos(new ts_sdk_1.AptosConfig({ network }));
|
|
168
274
|
const senderAddress = ts_sdk_1.AccountAddress.fromString(this._sender);
|
|
169
|
-
const recipientAddress = ts_sdk_1.AccountAddress.fromString(this._recipient.address);
|
|
170
275
|
const simpleTxn = await aptos.transaction.build.simple({
|
|
171
276
|
sender: senderAddress,
|
|
172
|
-
data:
|
|
173
|
-
function: '0x1::coin::transfer',
|
|
174
|
-
typeArguments: [ts_sdk_1.APTOS_COIN],
|
|
175
|
-
functionArguments: [recipientAddress, this.recipient.amount],
|
|
176
|
-
},
|
|
277
|
+
data: this.getTransactionPayloadData(),
|
|
177
278
|
options: {
|
|
178
279
|
maxGasAmount: this.maxGasAmount,
|
|
179
280
|
gasUnitPrice: this.gasUnitPrice,
|
|
@@ -183,21 +284,34 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
183
284
|
});
|
|
184
285
|
this._rawTransaction = simpleTxn.rawTransaction;
|
|
185
286
|
}
|
|
186
|
-
|
|
187
|
-
|
|
287
|
+
getSignablePayloadWithFeePayer() {
|
|
288
|
+
const feePayerRawTxn = new ts_sdk_1.FeePayerRawTransaction(this._rawTransaction, [], ts_sdk_1.AccountAddress.fromString(this._feePayerAddress));
|
|
289
|
+
return Buffer.from((0, ts_sdk_1.generateSigningMessage)(feePayerRawTxn.bcsToBytes(), ts_sdk_1.RAW_TRANSACTION_WITH_DATA_SALT));
|
|
290
|
+
}
|
|
291
|
+
getSignablePayloadWithoutFeePayer() {
|
|
292
|
+
return Buffer.from((0, ts_sdk_1.generateSigningMessage)(this._rawTransaction.bcsToBytes(), ts_sdk_1.RAW_TRANSACTION_SALT));
|
|
188
293
|
}
|
|
189
294
|
generateTxnId() {
|
|
190
|
-
if (!this.
|
|
295
|
+
if (!this._senderSignature ||
|
|
296
|
+
!this._senderSignature.publicKey ||
|
|
297
|
+
!this._senderSignature.signature ||
|
|
298
|
+
!this._feePayerSignature ||
|
|
299
|
+
!this._feePayerSignature.publicKey ||
|
|
300
|
+
!this._feePayerSignature.signature ||
|
|
301
|
+
!this._feePayerAddress) {
|
|
191
302
|
return;
|
|
192
303
|
}
|
|
193
|
-
const transaction = new ts_sdk_1.SimpleTransaction(this._rawTransaction);
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
const senderAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(
|
|
197
|
-
|
|
304
|
+
const transaction = new ts_sdk_1.SimpleTransaction(this._rawTransaction, ts_sdk_1.AccountAddress.fromString(this._feePayerAddress));
|
|
305
|
+
const senderPublicKey = new ts_sdk_1.Ed25519PublicKey(utils_1.default.getBufferFromHexString(this._senderSignature.publicKey.pub));
|
|
306
|
+
const senderSignature = new ts_sdk_1.Ed25519Signature(this._senderSignature.signature);
|
|
307
|
+
const senderAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(senderPublicKey, senderSignature);
|
|
308
|
+
const feePayerPublicKey = new ts_sdk_1.Ed25519PublicKey(utils_1.default.getBufferFromHexString(this._feePayerSignature.publicKey.pub));
|
|
309
|
+
const feePayerSignature = new ts_sdk_1.Ed25519Signature(this._feePayerSignature.signature);
|
|
310
|
+
const feePayerAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(feePayerPublicKey, feePayerSignature);
|
|
311
|
+
this._id = (0, ts_sdk_1.generateUserTransactionHash)({ transaction, senderAuthenticator, feePayerAuthenticator });
|
|
198
312
|
}
|
|
199
313
|
}
|
|
200
314
|
exports.Transaction = Transaction;
|
|
201
315
|
Transaction.EMPTY_PUBLIC_KEY = Buffer.alloc(32);
|
|
202
316
|
Transaction.EMPTY_SIGNATURE = Buffer.alloc(64);
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUM5QixpREFBMEU7QUFDMUUsK0NBZ0I0QjtBQUM1Qiw0Q0FBMEY7QUFDMUYscURBQTZCO0FBQzdCLGdFQUFxQztBQUVyQyxNQUFzQixXQUFZLFNBQVEsMEJBQWU7SUFjdkQsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRywrQkFBc0IsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLGtDQUFzQixDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsNEJBQWdCLENBQUM7UUFDdkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxFQUFFLFlBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxFQUFFO2FBQy9EO1lBQ0QsU0FBUyxFQUFFLFdBQVcsQ0FBQyxlQUFlO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLElBQVcsRUFBRTtRQUNYLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksNEJBQWdCLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxNQUFNLENB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QUFTLENBQUMsY0FBYyxDQUFDO0lBQ2xELENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLHNCQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEYsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakYsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLHlCQUFnQixDQUFDLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sU0FBUyxHQUFHLElBQUkseUJBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRSxNQUFNLG1CQUFtQixHQUFHLElBQUksb0NBQTJCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBQSxvQ0FBMkIsRUFBQyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQzs7QUFuT0gsa0NBb09DO0FBek5RLDRCQUFnQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsMkJBQWUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcsIE5ldHdvcmtUeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBBY2NvdW50QWRkcmVzcyxcbiAgQWNjb3VudEF1dGhlbnRpY2F0b3JFZDI1NTE5LFxuICBBcHRvcyxcbiAgQVBUT1NfQ09JTixcbiAgQXB0b3NDb25maWcsXG4gIERFRkFVTFRfTUFYX0dBU19BTU9VTlQsXG4gIEVkMjU1MTlQdWJsaWNLZXksXG4gIEVkMjU1MTlTaWduYXR1cmUsXG4gIGdlbmVyYXRlVXNlclRyYW5zYWN0aW9uSGFzaCxcbiAgSGV4LFxuICBOZXR3b3JrLFxuICBSYXdUcmFuc2FjdGlvbixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpbXBsZVRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JFZDI1NTE5LFxufSBmcm9tICdAYXB0b3MtbGFicy90cy1zZGsnO1xuaW1wb3J0IHsgREVGQVVMVF9HQVNfVU5JVF9QUklDRSwgU0VDT05EU19QRVJfV0VFSywgVU5BVkFJTEFCTEVfVEVYVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX3Jhd1RyYW5zYWN0aW9uOiBSYXdUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9zaWduYXR1cmU6IFNpZ25hdHVyZTtcbiAgcHJvdGVjdGVkIF9zZW5kZXI6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9yZWNpcGllbnQ6IFRyYW5zYWN0aW9uUmVjaXBpZW50O1xuICBwcm90ZWN0ZWQgX3NlcXVlbmNlTnVtYmVyOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfbWF4R2FzQW1vdW50OiBudW1iZXI7XG4gIHByb3RlY3RlZCBfZ2FzVW5pdFByaWNlOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfZ2FzVXNlZDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2V4cGlyYXRpb25UaW1lOiBudW1iZXI7XG5cbiAgc3RhdGljIEVNUFRZX1BVQkxJQ19LRVkgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICBzdGF0aWMgRU1QVFlfU0lHTkFUVVJFID0gQnVmZmVyLmFsbG9jKDY0KTtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX21heEdhc0Ftb3VudCA9IERFRkFVTFRfTUFYX0dBU19BTU9VTlQ7XG4gICAgdGhpcy5fZ2FzVW5pdFByaWNlID0gREVGQVVMVF9HQVNfVU5JVF9QUklDRTtcbiAgICB0aGlzLl9nYXNVc2VkID0gMDtcbiAgICB0aGlzLl9leHBpcmF0aW9uVGltZSA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDFlMykgKyBTRUNPTkRTX1BFUl9XRUVLO1xuICAgIHRoaXMuX3NlcXVlbmNlTnVtYmVyID0gMDtcbiAgICB0aGlzLl9zaWduYXR1cmUgPSB7XG4gICAgICBwdWJsaWNLZXk6IHtcbiAgICAgICAgcHViOiBIZXguZnJvbUhleElucHV0KFRyYW5zYWN0aW9uLkVNUFRZX1BVQkxJQ19LRVkpLnRvU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgc2lnbmF0dXJlOiBUcmFuc2FjdGlvbi5FTVBUWV9TSUdOQVRVUkUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHRoaXMuZ2VuZXJhdGVUeG5JZCgpO1xuICAgIHJldHVybiB0aGlzLl9pZCA/PyBVTkFWQUlMQUJMRV9URVhUO1xuICB9XG5cbiAgZ2V0IHNlbmRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZW5kZXI7XG4gIH1cblxuICBzZXQgc2VuZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZW5kZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCByZWNpcGllbnQoKTogVHJhbnNhY3Rpb25SZWNpcGllbnQge1xuICAgIHJldHVybiB0aGlzLl9yZWNpcGllbnQ7XG4gIH1cblxuICBzZXQgcmVjaXBpZW50KHZhbHVlOiBUcmFuc2FjdGlvblJlY2lwaWVudCkge1xuICAgIHRoaXMuX3JlY2lwaWVudCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlcXVlbmNlTnVtYmVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcXVlbmNlTnVtYmVyO1xuICB9XG5cbiAgc2V0IHNlcXVlbmNlTnVtYmVyKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zZXF1ZW5jZU51bWJlciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IG1heEdhc0Ftb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhHYXNBbW91bnQ7XG4gIH1cblxuICBzZXQgbWF4R2FzQW1vdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhHYXNBbW91bnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBnYXNVbml0UHJpY2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZ2FzVW5pdFByaWNlO1xuICB9XG5cbiAgc2V0IGdhc1VuaXRQcmljZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZ2FzVW5pdFByaWNlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZ2FzVXNlZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9nYXNVc2VkO1xuICB9XG5cbiAgc2V0IGdhc1VzZWQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2dhc1VzZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBleHBpcmF0aW9uVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9leHBpcmF0aW9uVGltZTtcbiAgfVxuXG4gIHNldCBleHBpcmF0aW9uVGltZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgY2FuU2lnbihfa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3Jhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcHVibGljS2V5QnVmZmVyID0gdXRpbHMuZ2V0QnVmZmVyRnJvbUhleFN0cmluZyh0aGlzLl9zaWduYXR1cmUucHVibGljS2V5LnB1Yik7XG4gICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVkMjU1MTlQdWJsaWNLZXkocHVibGljS2V5QnVmZmVyKTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IG5ldyBFZDI1NTE5U2lnbmF0dXJlKHRoaXMuX3NpZ25hdHVyZS5zaWduYXR1cmUpO1xuXG4gICAgY29uc3QgdHhuQXV0aGVudGljYXRvciA9IG5ldyBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JFZDI1NTE5KHB1YmxpY0tleSwgc2lnbmF0dXJlKTtcbiAgICBjb25zdCBzaWduZWRUeG4gPSBuZXcgU2lnbmVkVHJhbnNhY3Rpb24odGhpcy5fcmF3VHJhbnNhY3Rpb24sIHR4bkF1dGhlbnRpY2F0b3IpO1xuICAgIHJldHVybiBzaWduZWRUeG4udG9TdHJpbmcoKTtcbiAgfVxuXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IFB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW3NpZ25hdHVyZS50b1N0cmluZygnaGV4JyldO1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuYnVpbGRSYXdUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMuZ2VuZXJhdGVUeG5JZCgpO1xuICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgfVxuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGhpcy5zZW5kZXIsXG4gICAgICAgIHZhbHVlOiB0aGlzLnJlY2lwaWVudC5hbW91bnQgYXMgc3RyaW5nLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9LFxuICAgIF07XG4gICAgdGhpcy5fb3V0cHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGhpcy5yZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IHRoaXMucmVjaXBpZW50LmFtb3VudCBhcyBzdHJpbmcsXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IHNpZ25lZFR4bjogU2lnbmVkVHJhbnNhY3Rpb247XG4gICAgdHJ5IHtcbiAgICAgIHNpZ25lZFR4biA9IHV0aWxzLmRlc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJywgZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMuZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4bik7XG4gIH1cblxuICBmcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHhuOiBTaWduZWRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXdUeG4gPSBzaWduZWRUeG4ucmF3X3R4bjtcbiAgICAgIHRoaXMuX3NlbmRlciA9IHJhd1R4bi5zZW5kZXIudG9TdHJpbmcoKTtcbiAgICAgIHRoaXMuX3JlY2lwaWVudCA9IHV0aWxzLmdldFJlY2lwaWVudEZyb21UcmFuc2FjdGlvblBheWxvYWQocmF3VHhuLnBheWxvYWQpO1xuICAgICAgdGhpcy5fc2VxdWVuY2VOdW1iZXIgPSB1dGlscy5jYXN0VG9OdW1iZXIocmF3VHhuLnNlcXVlbmNlX251bWJlcik7XG4gICAgICB0aGlzLl9tYXhHYXNBbW91bnQgPSB1dGlscy5jYXN0VG9OdW1iZXIocmF3VHhuLm1heF9nYXNfYW1vdW50KTtcbiAgICAgIHRoaXMuX2dhc1VuaXRQcmljZSA9IHV0aWxzLmNhc3RUb051bWJlcihyYXdUeG4uZ2FzX3VuaXRfcHJpY2UpO1xuICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB1dGlscy5jYXN0VG9OdW1iZXIocmF3VHhuLmV4cGlyYXRpb25fdGltZXN0YW1wX3NlY3MpO1xuICAgICAgdGhpcy5fcmF3VHJhbnNhY3Rpb24gPSByYXdUeG47XG5cbiAgICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICAgIGNvbnN0IGF1dGhlbnRpY2F0b3IgPSBzaWduZWRUeG4uYXV0aGVudGljYXRvciBhcyBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JFZDI1NTE5O1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20oYXV0aGVudGljYXRvci5zaWduYXR1cmUudG9VaW50OEFycmF5KCkpO1xuICAgICAgdGhpcy5hZGRTaWduYXR1cmUoeyBwdWI6IGF1dGhlbnRpY2F0b3IucHVibGljX2tleS50b1N0cmluZygpIH0sIHNpZ25hdHVyZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignaW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb24nLCBlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIGEgc2lnbmVkIHRyYW5zYWN0aW9uIGhleCBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25lZFJhd1RyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtTaWduZWRUcmFuc2FjdGlvbn0gdGhlIGFwdG9zIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkUmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHV0aWxzLmRlc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkUmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJywgZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkUmF3VHJhbnNhY3Rpb24oKSB7XG4gICAgY29uc3QgbmV0d29yazogTmV0d29yayA9IHRoaXMuX2NvaW5Db25maWcubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gTmV0d29yay5NQUlOTkVUIDogTmV0d29yay5URVNUTkVUO1xuICAgIGNvbnN0IGFwdG9zID0gbmV3IEFwdG9zKG5ldyBBcHRvc0NvbmZpZyh7IG5ldHdvcmsgfSkpO1xuICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMuX3NlbmRlcik7XG4gICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9IEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcodGhpcy5fcmVjaXBpZW50LmFkZHJlc3MpO1xuXG4gICAgY29uc3Qgc2ltcGxlVHhuID0gYXdhaXQgYXB0b3MudHJhbnNhY3Rpb24uYnVpbGQuc2ltcGxlKHtcbiAgICAgIHNlbmRlcjogc2VuZGVyQWRkcmVzcyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZnVuY3Rpb246ICcweDE6OmNvaW46OnRyYW5zZmVyJyxcbiAgICAgICAgdHlwZUFyZ3VtZW50czogW0FQVE9TX0NPSU5dLFxuICAgICAgICBmdW5jdGlvbkFyZ3VtZW50czogW3JlY2lwaWVudEFkZHJlc3MsIHRoaXMucmVjaXBpZW50LmFtb3VudF0sXG4gICAgICB9LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBtYXhHYXNBbW91bnQ6IHRoaXMubWF4R2FzQW1vdW50LFxuICAgICAgICBnYXNVbml0UHJpY2U6IHRoaXMuZ2FzVW5pdFByaWNlLFxuICAgICAgICBleHBpcmVUaW1lc3RhbXA6IHRoaXMuZXhwaXJhdGlvblRpbWUsXG4gICAgICAgIGFjY291bnRTZXF1ZW5jZU51bWJlcjogdGhpcy5zZXF1ZW5jZU51bWJlcixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5fcmF3VHJhbnNhY3Rpb24gPSBzaW1wbGVUeG4ucmF3VHJhbnNhY3Rpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0RmVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIodGhpcy5nYXNVc2VkKS5tdWx0aXBsaWVkQnkodGhpcy5nYXNVbml0UHJpY2UpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlVHhuSWQoKSB7XG4gICAgaWYgKCF0aGlzLl9zaWduYXR1cmUgfHwgIXRoaXMuX3NpZ25hdHVyZS5wdWJsaWNLZXkgfHwgIXRoaXMuX3NpZ25hdHVyZS5zaWduYXR1cmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgU2ltcGxlVHJhbnNhY3Rpb24odGhpcy5fcmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBFZDI1NTE5UHVibGljS2V5KHV0aWxzLmdldEJ1ZmZlckZyb21IZXhTdHJpbmcodGhpcy5fc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBuZXcgRWQyNTUxOVNpZ25hdHVyZSh0aGlzLl9zaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICBjb25zdCBzZW5kZXJBdXRoZW50aWNhdG9yID0gbmV3IEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOShwdWJsaWNLZXksIHNpZ25hdHVyZSk7XG4gICAgdGhpcy5faWQgPSBnZW5lcmF0ZVVzZXJUcmFuc2FjdGlvbkhhc2goeyB0cmFuc2FjdGlvbiwgc2VuZGVyQXV0aGVudGljYXRvciB9KTtcbiAgfVxufVxuIl19
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVM4QjtBQUM5QixpREFBMEU7QUFDMUUsK0NBdUI0QjtBQUM1Qiw0Q0FBd0U7QUFDeEUscURBQTZCO0FBQzdCLGdFQUFxQztBQUVyQyxvREFBNEI7QUFXNUIsTUFBc0IsV0FBWSxTQUFRLDBCQUFlO0lBa0J2RCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLCtCQUFzQixDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsa0NBQXNCLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLHVCQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3RCLFNBQVMsRUFBRTtnQkFDVCxHQUFHLEVBQUUsWUFBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLEVBQUU7YUFDL0Q7WUFDRCxTQUFTLEVBQUUsV0FBVyxDQUFDLGVBQWU7U0FDdkMsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyx1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Q0FBQyxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgTmV0d29ya1R5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEFjY291bnRBZGRyZXNzLFxuICBBY2NvdW50QXV0aGVudGljYXRvcixcbiAgQWNjb3VudEF1dGhlbnRpY2F0b3JFZDI1NTE5LFxuICBBY2NvdW50QXV0aGVudGljYXRvck5vQWNjb3VudEF1dGhlbnRpY2F0b3IsXG4gIEFwdG9zLFxuICBBcHRvc0NvbmZpZyxcbiAgREVGQVVMVF9NQVhfR0FTX0FNT1VOVCxcbiAgRWQyNTUxOVB1YmxpY0tleSxcbiAgRWQyNTUxOVNpZ25hdHVyZSxcbiAgRmVlUGF5ZXJSYXdUcmFuc2FjdGlvbixcbiAgZ2VuZXJhdGVTaWduaW5nTWVzc2FnZSxcbiAgZ2VuZXJhdGVVc2VyVHJhbnNhY3Rpb25IYXNoLFxuICBIZXgsXG4gIElucHV0R2VuZXJhdGVUcmFuc2FjdGlvblBheWxvYWREYXRhLFxuICBOZXR3b3JrLFxuICBSQVdfVFJBTlNBQ1RJT05fU0FMVCxcbiAgUkFXX1RSQU5TQUNUSU9OX1dJVEhfREFUQV9TQUxULFxuICBSYXdUcmFuc2FjdGlvbixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpbXBsZVRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JGZWVQYXllcixcbiAgVHJhbnNhY3Rpb25QYXlsb2FkLFxufSBmcm9tICdAYXB0b3MtbGFicy90cy1zZGsnO1xuaW1wb3J0IHsgREVGQVVMVF9HQVNfVU5JVF9QUklDRSwgVU5BVkFJTEFCTEVfVEVYVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQXB0VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHhEYXRhIH0gZnJvbSAnLi4vaWZhY2UnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgdHlwZSBJbnB1dHNBbmRPdXRwdXRzID0ge1xuICAvKiogVXNlZCBmb3IgdGhpcy5pbnB1dHMgKi9cbiAgaW5wdXRzOiBFbnRyeVtdO1xuICAvKiogVXNlZCBmb3IgdGhpcy5vdXRwdXRzICovXG4gIG91dHB1dHM6IEVudHJ5W107XG4gIC8qKiBVc2VkIGZvciB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbigpICovXG4gIGV4dGVybmFsT3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbn07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfcmF3VHJhbnNhY3Rpb246IFJhd1RyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX3NlbmRlclNpZ25hdHVyZTogU2lnbmF0dXJlO1xuICBwcm90ZWN0ZWQgX2ZlZVBheWVyU2lnbmF0dXJlOiBTaWduYXR1cmU7XG4gIHByb3RlY3RlZCBfc2VuZGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcmVjaXBpZW50czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbiAgcHJvdGVjdGVkIF9zZXF1ZW5jZU51bWJlcjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX21heEdhc0Ftb3VudDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2dhc1VuaXRQcmljZTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2dhc1VzZWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9leHBpcmF0aW9uVGltZTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2ZlZVBheWVyQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2Fzc2V0SWQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9pc1NpbXVsYXRlVHhuOiBib29sZWFuO1xuXG4gIHN0YXRpYyBFTVBUWV9QVUJMSUNfS0VZID0gQnVmZmVyLmFsbG9jKDMyKTtcbiAgc3RhdGljIEVNUFRZX1NJR05BVFVSRSA9IEJ1ZmZlci5hbGxvYyg2NCk7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl9tYXhHYXNBbW91bnQgPSBERUZBVUxUX01BWF9HQVNfQU1PVU5UO1xuICAgIHRoaXMuX2dhc1VuaXRQcmljZSA9IERFRkFVTFRfR0FTX1VOSVRfUFJJQ0U7XG4gICAgdGhpcy5fZ2FzVXNlZCA9IDA7XG4gICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB1dGlscy5nZXRUeG5FeHBpcmF0aW9uVGltZXN0YW1wKCk7XG4gICAgdGhpcy5fc2VxdWVuY2VOdW1iZXIgPSAwO1xuICAgIHRoaXMuX3NlbmRlciA9IEFjY291bnRBZGRyZXNzLlpFUk8udG9TdHJpbmcoKTtcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gW107XG4gICAgdGhpcy5fYXNzZXRJZCA9IEFjY291bnRBZGRyZXNzLlpFUk8udG9TdHJpbmcoKTtcbiAgICB0aGlzLl9pc1NpbXVsYXRlVHhuID0gZmFsc2U7XG4gICAgdGhpcy5fc2VuZGVyU2lnbmF0dXJlID0ge1xuICAgICAgcHVibGljS2V5OiB7XG4gICAgICAgIHB1YjogSGV4LmZyb21IZXhJbnB1dChUcmFuc2FjdGlvbi5FTVBUWV9QVUJMSUNfS0VZKS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIHNpZ25hdHVyZTogVHJhbnNhY3Rpb24uRU1QVFlfU0lHTkFUVVJFLFxuICAgIH07XG4gICAgdGhpcy5fZmVlUGF5ZXJBZGRyZXNzID0gQWNjb3VudEFkZHJlc3MuWkVSTy50b1N0cmluZygpO1xuICAgIHRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlID0ge1xuICAgICAgcHVibGljS2V5OiB7XG4gICAgICAgIHB1YjogSGV4LmZyb21IZXhJbnB1dChUcmFuc2FjdGlvbi5FTVBUWV9QVUJMSUNfS0VZKS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIHNpZ25hdHVyZTogVHJhbnNhY3Rpb24uRU1QVFlfU0lHTkFUVVJFLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICB0aGlzLmdlbmVyYXRlVHhuSWQoKTtcbiAgICByZXR1cm4gdGhpcy5faWQgPz8gVU5BVkFJTEFCTEVfVEVYVDtcbiAgfVxuXG4gIGdldCBzZW5kZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZGVyO1xuICB9XG5cbiAgc2V0IHNlbmRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2VuZGVyID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYHJlY2lwaWVudHMoKWAuXG4gICAqL1xuICBnZXQgcmVjaXBpZW50KCk6IFRyYW5zYWN0aW9uUmVjaXBpZW50IHtcbiAgICBhc3NlcnQodGhpcy5fcmVjaXBpZW50cy5sZW5ndGggPiAwLCAnTm8gcmVjaXBpZW50cyBhdmFpbGFibGUnKTtcbiAgICByZXR1cm4gdGhpcy5fcmVjaXBpZW50c1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgcmVjaXBpZW50cygpYC5cbiAgICovXG4gIHNldCByZWNpcGllbnQodmFsdWU6IFRyYW5zYWN0aW9uUmVjaXBpZW50KSB7XG4gICAgdGhpcy5yZWNpcGllbnRzID0gW3ZhbHVlXTtcbiAgfVxuXG4gIGdldCByZWNpcGllbnRzKCk6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10ge1xuICAgIHJldHVybiB0aGlzLl9yZWNpcGllbnRzO1xuICB9XG5cbiAgc2V0IHJlY2lwaWVudHModmFsdWU6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10pIHtcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc2VxdWVuY2VOdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2VOdW1iZXI7XG4gIH1cblxuICBzZXQgc2VxdWVuY2VOdW1iZXIodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3NlcXVlbmNlTnVtYmVyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgbWF4R2FzQW1vdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heEdhc0Ftb3VudDtcbiAgfVxuXG4gIHNldCBtYXhHYXNBbW91bnQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heEdhc0Ftb3VudCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGdhc1VuaXRQcmljZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9nYXNVbml0UHJpY2U7XG4gIH1cblxuICBzZXQgZ2FzVW5pdFByaWNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9nYXNVbml0UHJpY2UgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBnYXNVc2VkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2dhc1VzZWQ7XG4gIH1cblxuICBzZXQgZ2FzVXNlZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZ2FzVXNlZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGV4cGlyYXRpb25UaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGlyYXRpb25UaW1lO1xuICB9XG5cbiAgc2V0IGV4cGlyYXRpb25UaW1lKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9leHBpcmF0aW9uVGltZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGZlZVBheWVyQWRkcmVzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mZWVQYXllckFkZHJlc3M7XG4gIH1cblxuICBzZXQgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIGdldCBhc3NldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2V0SWQ7XG4gIH1cblxuICBzZXQgYXNzZXRJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYXNzZXRJZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzU2ltdWxhdGVUeG4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2ltdWxhdGVUeG47XG4gIH1cblxuICBzZXQgaXNTaW11bGF0ZVR4bih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzU2ltdWxhdGVUeG4gPSB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRUcmFuc2FjdGlvblBheWxvYWREYXRhKCk6IElucHV0R2VuZXJhdGVUcmFuc2FjdGlvblBheWxvYWREYXRhO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYXJzZVRyYW5zYWN0aW9uUGF5bG9hZChwYXlsb2FkOiBUcmFuc2FjdGlvblBheWxvYWQpOiB2b2lkO1xuXG4gIGZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeG46IFNpZ25lZFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhd1R4biA9IHNpZ25lZFR4bi5yYXdfdHhuO1xuICAgICAgdGhpcy5wYXJzZVRyYW5zYWN0aW9uUGF5bG9hZChyYXdUeG4ucGF5bG9hZCk7XG4gICAgICB0aGlzLl9zZW5kZXIgPSByYXdUeG4uc2VuZGVyLnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLl9zZXF1ZW5jZU51bWJlciA9IHV0aWxzLmNhc3RUb051bWJlcihyYXdUeG4uc2VxdWVuY2VfbnVtYmVyKTtcbiAgICAgIHRoaXMuX21heEdhc0Ftb3VudCA9IHV0aWxzLmNhc3RUb051bWJlcihyYXdUeG4ubWF4X2dhc19hbW91bnQpO1xuICAgICAgdGhpcy5fZ2FzVW5pdFByaWNlID0gdXRpbHMuY2FzdFRvTnVtYmVyKHJhd1R4bi5nYXNfdW5pdF9wcmljZSk7XG4gICAgICB0aGlzLl9leHBpcmF0aW9uVGltZSA9IHV0aWxzLmNhc3RUb051bWJlcihyYXdUeG4uZXhwaXJhdGlvbl90aW1lc3RhbXBfc2Vjcyk7XG4gICAgICB0aGlzLl9yYXdUcmFuc2FjdGlvbiA9IHJhd1R4bjtcblxuICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgICAgY29uc3QgYXV0aGVudGljYXRvciA9IHNpZ25lZFR4bi5hdXRoZW50aWNhdG9yIGFzIFRyYW5zYWN0aW9uQXV0aGVudGljYXRvckZlZVBheWVyO1xuICAgICAgdGhpcy5fZmVlUGF5ZXJBZGRyZXNzID0gYXV0aGVudGljYXRvci5mZWVfcGF5ZXIuYWRkcmVzcy50b1N0cmluZygpO1xuICAgICAgY29uc3Qgc2VuZGVyQXV0aGVudGljYXRvciA9IGF1dGhlbnRpY2F0b3Iuc2VuZGVyIGFzIEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOTtcbiAgICAgIGNvbnN0IHNlbmRlclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNlbmRlckF1dGhlbnRpY2F0b3Iuc2lnbmF0dXJlLnRvVWludDhBcnJheSgpKTtcbiAgICAgIHRoaXMuYWRkU2VuZGVyU2lnbmF0dXJlKHsgcHViOiBzZW5kZXJBdXRoZW50aWNhdG9yLnB1YmxpY19rZXkudG9TdHJpbmcoKSB9LCBzZW5kZXJTaWduYXR1cmUpO1xuXG4gICAgICBjb25zdCBmZWVQYXllckF1dGhlbnRpY2F0b3IgPSBhdXRoZW50aWNhdG9yLmZlZV9wYXllci5hdXRoZW50aWNhdG9yIGFzIEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOTtcbiAgICAgIGNvbnN0IGZlZVBheWVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20oZmVlUGF5ZXJBdXRoZW50aWNhdG9yLnNpZ25hdHVyZS50b1VpbnQ4QXJyYXkoKSk7XG4gICAgICB0aGlzLmFkZEZlZVBheWVyU2lnbmF0dXJlKFxuICAgICAgICB7IHB1YjogdXRpbHMuc3RyaXBIZXhQcmVmaXgoZmVlUGF5ZXJBdXRoZW50aWNhdG9yLnB1YmxpY19rZXkudG9TdHJpbmcoKSkgfSxcbiAgICAgICAgZmVlUGF5ZXJTaWduYXR1cmVcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignaW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb24nLCBlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICBjYW5TaWduKF9rZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICBsZXQgc2VuZGVyQXV0aGVudGljYXRvcjogQWNjb3VudEF1dGhlbnRpY2F0b3I7XG4gICAgbGV0IGZlZVBheWVyQXV0aGVudGljYXRvcjogQWNjb3VudEF1dGhlbnRpY2F0b3I7XG4gICAgaWYgKHRoaXMuaXNTaW11bGF0ZVR4bikge1xuICAgICAgc2VuZGVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvck5vQWNjb3VudEF1dGhlbnRpY2F0b3IoKTtcbiAgICAgIGZlZVBheWVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvck5vQWNjb3VudEF1dGhlbnRpY2F0b3IoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VuZGVyUHVibGljS2V5QnVmZmVyID0gdXRpbHMuZ2V0QnVmZmVyRnJvbUhleFN0cmluZyh0aGlzLl9zZW5kZXJTaWduYXR1cmUucHVibGljS2V5LnB1Yik7XG4gICAgICBjb25zdCBzZW5kZXJQdWJsaWNLZXkgPSBuZXcgRWQyNTUxOVB1YmxpY0tleShzZW5kZXJQdWJsaWNLZXlCdWZmZXIpO1xuICAgICAgY29uc3Qgc2VuZGVyU2lnbmF0dXJlID0gbmV3IEVkMjU1MTlTaWduYXR1cmUodGhpcy5fc2VuZGVyU2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgICBzZW5kZXJBdXRoZW50aWNhdG9yID0gbmV3IEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOShzZW5kZXJQdWJsaWNLZXksIHNlbmRlclNpZ25hdHVyZSk7XG5cbiAgICAgIGNvbnN0IGZlZVBheWVyUHVibGljS2V5QnVmZmVyID0gdXRpbHMuZ2V0QnVmZmVyRnJvbUhleFN0cmluZyh0aGlzLl9mZWVQYXllclNpZ25hdHVyZS5wdWJsaWNLZXkucHViKTtcbiAgICAgIGNvbnN0IGZlZVBheWVyUHVibGljS2V5ID0gbmV3IEVkMjU1MTlQdWJsaWNLZXkoZmVlUGF5ZXJQdWJsaWNLZXlCdWZmZXIpO1xuICAgICAgY29uc3QgZmVlUGF5ZXJTaWduYXR1cmUgPSBuZXcgRWQyNTUxOVNpZ25hdHVyZSh0aGlzLl9mZWVQYXllclNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgZmVlUGF5ZXJBdXRoZW50aWNhdG9yID0gbmV3IEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOShmZWVQYXllclB1YmxpY0tleSwgZmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4bkF1dGhlbnRpY2F0b3IgPSBuZXcgVHJhbnNhY3Rpb25BdXRoZW50aWNhdG9yRmVlUGF5ZXIoc2VuZGVyQXV0aGVudGljYXRvciwgW10sIFtdLCB7XG4gICAgICBhZGRyZXNzOiBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMuX2ZlZVBheWVyQWRkcmVzcyksXG4gICAgICBhdXRoZW50aWNhdG9yOiBmZWVQYXllckF1dGhlbnRpY2F0b3IsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzaWduZWRUeG4gPSBuZXcgU2lnbmVkVHJhbnNhY3Rpb24odGhpcy5fcmF3VHJhbnNhY3Rpb24sIHR4bkF1dGhlbnRpY2F0b3IpO1xuICAgIHJldHVybiBzaWduZWRUeG4udG9TdHJpbmcoKTtcbiAgfVxuXG4gIGFkZFNlbmRlclNpZ25hdHVyZShwdWJsaWNLZXk6IFB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW3NpZ25hdHVyZS50b1N0cmluZygnaGV4JyldO1xuICAgIHRoaXMuX3NlbmRlclNpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxuXG4gIGdldEZlZVBheWVyUHViS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlLnB1YmxpY0tleS5wdWI7XG4gIH1cblxuICBhZGRGZWVQYXllclNpZ25hdHVyZShwdWJsaWNLZXk6IFB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9mZWVQYXllclNpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxuXG4gIGFkZEZlZVBheWVyQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9mZWVQYXllckFkZHJlc3MgPSBhZGRyZXNzO1xuICB9XG5cbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5idWlsZFJhd1RyYW5zYWN0aW9uKCk7XG4gICAgdGhpcy5nZW5lcmF0ZVR4bklkKCk7XG4gICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICB9XG5cbiAgYWJzdHJhY3QgaW5wdXRzQW5kT3V0cHV0cygpOiBJbnB1dHNBbmRPdXRwdXRzO1xuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgaW5wdXRzLCBvdXRwdXRzIH0gPSB0aGlzLmlucHV0c0FuZE91dHB1dHMoKTtcbiAgICB0aGlzLl9pbnB1dHMgPSBpbnB1dHM7XG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gIH1cblxuICBmcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBzaWduZWRUeG46IFNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIHRyeSB7XG4gICAgICBzaWduZWRUeG4gPSB1dGlscy5kZXNlcmlhbGl6ZVNpZ25lZFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMuZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4bik7XG4gIH1cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyBhIHNpZ25lZCB0cmFuc2FjdGlvbiBoZXggc3RyaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduZWRSYXdUcmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7U2lnbmVkVHJhbnNhY3Rpb259IHRoZSBhcHRvcyBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZVNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBTaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB1dGlscy5kZXNlcmlhbGl6ZVNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFJhd1RyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIHJlY2lwaWVudHM6IHRoaXMucmVjaXBpZW50cyxcbiAgICAgIHNlcXVlbmNlTnVtYmVyOiB0aGlzLnNlcXVlbmNlTnVtYmVyLFxuICAgICAgbWF4R2FzQW1vdW50OiB0aGlzLm1heEdhc0Ftb3VudCxcbiAgICAgIGdhc1VuaXRQcmljZTogdGhpcy5nYXNVbml0UHJpY2UsXG4gICAgICBnYXNVc2VkOiB0aGlzLmdhc1VzZWQsXG4gICAgICBleHBpcmF0aW9uVGltZTogdGhpcy5leHBpcmF0aW9uVGltZSxcbiAgICAgIGZlZVBheWVyOiB0aGlzLmZlZVBheWVyQWRkcmVzcyxcbiAgICAgIGFzc2V0SWQ6IHRoaXMuYXNzZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldEZlZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHRoaXMuZ2FzVXNlZCkubXVsdGlwbGllZEJ5KHRoaXMuZ2FzVW5pdFByaWNlKS50b1N0cmluZygpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gdGhpcy5mZWVQYXllckFkZHJlc3MgPyB0aGlzLmdldFNpZ25hYmxlUGF5bG9hZFdpdGhGZWVQYXllcigpIDogdGhpcy5nZXRTaWduYWJsZVBheWxvYWRXaXRob3V0RmVlUGF5ZXIoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBvdmVycmlkZSBleHBsYWluVHJhbnNhY3Rpb24oKTogQXB0VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICdvdXRwdXRzJyxcbiAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAnZmVlJyxcbiAgICAgICd3aXRoZHJhd0Ftb3VudCcsXG4gICAgICAnc2VuZGVyJyxcbiAgICAgICd0eXBlJyxcbiAgICBdO1xuXG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IHRoaXMuaW5wdXRzQW5kT3V0cHV0cygpLmV4dGVybmFsT3V0cHV0cztcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBvdXRwdXRzXG4gICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4gYWNjdW11bGF0b3IucGx1cyhjdXJyZW50LmFtb3VudCksIG5ldyBCaWdOdW1iZXIoJzAnKSlcbiAgICAgIC50b1N0cmluZygpO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5nZXRGZWUoKSB9LFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkUmF3VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmV0d29yazogTmV0d29yayA9IHRoaXMuX2NvaW5Db25maWcubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gTmV0d29yay5NQUlOTkVUIDogTmV0d29yay5URVNUTkVUO1xuICAgIGNvbnN0IGFwdG9zID0gbmV3IEFwdG9zKG5ldyBBcHRvc0NvbmZpZyh7IG5ldHdvcmsgfSkpO1xuICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMuX3NlbmRlcik7XG5cbiAgICBjb25zdCBzaW1wbGVUeG4gPSBhd2FpdCBhcHRvcy50cmFuc2FjdGlvbi5idWlsZC5zaW1wbGUoe1xuICAgICAgc2VuZGVyOiBzZW5kZXJBZGRyZXNzLFxuICAgICAgZGF0YTogdGhpcy5nZXRUcmFuc2FjdGlvblBheWxvYWREYXRhKCkgYXMgSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIG1heEdhc0Ftb3VudDogdGhpcy5tYXhHYXNBbW91bnQsXG4gICAgICAgIGdhc1VuaXRQcmljZTogdGhpcy5nYXNVbml0UHJpY2UsXG4gICAgICAgIGV4cGlyZVRpbWVzdGFtcDogdGhpcy5leHBpcmF0aW9uVGltZSxcbiAgICAgICAgYWNjb3VudFNlcXVlbmNlTnVtYmVyOiB0aGlzLnNlcXVlbmNlTnVtYmVyLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9yYXdUcmFuc2FjdGlvbiA9IHNpbXBsZVR4bi5yYXdUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2lnbmFibGVQYXlsb2FkV2l0aEZlZVBheWVyKCk6IEJ1ZmZlciB7XG4gICAgY29uc3QgZmVlUGF5ZXJSYXdUeG4gPSBuZXcgRmVlUGF5ZXJSYXdUcmFuc2FjdGlvbihcbiAgICAgIHRoaXMuX3Jhd1RyYW5zYWN0aW9uLFxuICAgICAgW10sXG4gICAgICBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMuX2ZlZVBheWVyQWRkcmVzcylcbiAgICApO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShnZW5lcmF0ZVNpZ25pbmdNZXNzYWdlKGZlZVBheWVyUmF3VHhuLmJjc1RvQnl0ZXMoKSwgUkFXX1RSQU5TQUNUSU9OX1dJVEhfREFUQV9TQUxUKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNpZ25hYmxlUGF5bG9hZFdpdGhvdXRGZWVQYXllcigpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShnZW5lcmF0ZVNpZ25pbmdNZXNzYWdlKHRoaXMuX3Jhd1RyYW5zYWN0aW9uLmJjc1RvQnl0ZXMoKSwgUkFXX1RSQU5TQUNUSU9OX1NBTFQpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVUeG5JZCgpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5fc2VuZGVyU2lnbmF0dXJlIHx8XG4gICAgICAhdGhpcy5fc2VuZGVyU2lnbmF0dXJlLnB1YmxpY0tleSB8fFxuICAgICAgIXRoaXMuX3NlbmRlclNpZ25hdHVyZS5zaWduYXR1cmUgfHxcbiAgICAgICF0aGlzLl9mZWVQYXllclNpZ25hdHVyZSB8fFxuICAgICAgIXRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlLnB1YmxpY0tleSB8fFxuICAgICAgIXRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlLnNpZ25hdHVyZSB8fFxuICAgICAgIXRoaXMuX2ZlZVBheWVyQWRkcmVzc1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBTaW1wbGVUcmFuc2FjdGlvbih0aGlzLl9yYXdUcmFuc2FjdGlvbiwgQWNjb3VudEFkZHJlc3MuZnJvbVN0cmluZyh0aGlzLl9mZWVQYXllckFkZHJlc3MpKTtcbiAgICBjb25zdCBzZW5kZXJQdWJsaWNLZXkgPSBuZXcgRWQyNTUxOVB1YmxpY0tleSh1dGlscy5nZXRCdWZmZXJGcm9tSGV4U3RyaW5nKHRoaXMuX3NlbmRlclNpZ25hdHVyZS5wdWJsaWNLZXkucHViKSk7XG4gICAgY29uc3Qgc2VuZGVyU2lnbmF0dXJlID0gbmV3IEVkMjU1MTlTaWduYXR1cmUodGhpcy5fc2VuZGVyU2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgY29uc3Qgc2VuZGVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTkoc2VuZGVyUHVibGljS2V5LCBzZW5kZXJTaWduYXR1cmUpO1xuICAgIGNvbnN0IGZlZVBheWVyUHVibGljS2V5ID0gbmV3IEVkMjU1MTlQdWJsaWNLZXkodXRpbHMuZ2V0QnVmZmVyRnJvbUhleFN0cmluZyh0aGlzLl9mZWVQYXllclNpZ25hdHVyZS5wdWJsaWNLZXkucHViKSk7XG4gICAgY29uc3QgZmVlUGF5ZXJTaWduYXR1cmUgPSBuZXcgRWQyNTUxOVNpZ25hdHVyZSh0aGlzLl9mZWVQYXllclNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgIGNvbnN0IGZlZVBheWVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTkoZmVlUGF5ZXJQdWJsaWNLZXksIGZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICB0aGlzLl9pZCA9IGdlbmVyYXRlVXNlclRyYW5zYWN0aW9uSGFzaCh7IHRyYW5zYWN0aW9uLCBzZW5kZXJBdXRoZW50aWNhdG9yLCBmZWVQYXllckF1dGhlbnRpY2F0b3IgfSk7XG4gIH1cbn1cbiJdfQ==
|