@bitgo-beta/sdk-coin-trx 1.2.3-alpha.49 → 1.2.3-alpha.490
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/resources/protobuf/Contract.proto +32 -0
- package/dist/resources/protobuf/tron.d.ts +1478 -214
- package/dist/resources/protobuf/tron.js +6312 -2600
- package/dist/resources/protobuf/tron.proto +6 -0
- package/dist/src/index.js +6 -2
- package/dist/src/lib/constants.d.ts +3 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +6 -0
- package/dist/src/lib/contractCallBuilder.d.ts +1 -35
- package/dist/src/lib/contractCallBuilder.d.ts.map +1 -1
- package/dist/src/lib/contractCallBuilder.js +12 -75
- package/dist/src/lib/delegateResourceTxBuilder.d.ts +27 -0
- package/dist/src/lib/delegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegateResourceTxBuilder.js +104 -0
- package/dist/src/lib/enum.d.ts +36 -1
- package/dist/src/lib/enum.d.ts.map +1 -1
- package/dist/src/lib/enum.js +40 -4
- package/dist/src/lib/freezeBalanceTxBuilder.d.ts +71 -0
- package/dist/src/lib/freezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/freezeBalanceTxBuilder.js +217 -0
- package/dist/src/lib/iface.d.ts +220 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.js +23 -9
- package/dist/src/lib/keyPair.d.ts +0 -1
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +31 -18
- package/dist/src/lib/resourceManagementTxBuilder.d.ts +72 -0
- package/dist/src/lib/resourceManagementTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/resourceManagementTxBuilder.js +150 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +1 -1
- package/dist/src/lib/tokenTransferBuilder.js +3 -3
- package/dist/src/lib/transaction.d.ts +3 -0
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +108 -6
- package/dist/src/lib/transactionBuilder.d.ts +53 -6
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +114 -21
- package/dist/src/lib/undelegateResourceTxBuilder.d.ts +27 -0
- package/dist/src/lib/undelegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/undelegateResourceTxBuilder.js +104 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts +65 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.js +210 -0
- package/dist/src/lib/utils.d.ts +85 -4
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +444 -47
- package/dist/src/lib/voteWitnessTxBuilder.d.ts +62 -0
- package/dist/src/lib/voteWitnessTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/voteWitnessTxBuilder.js +219 -0
- package/dist/src/lib/withdrawBuilder.d.ts +49 -0
- package/dist/src/lib/withdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawBuilder.js +167 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts +49 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.js +167 -0
- package/dist/src/lib/wrappedBuilder.d.ts +59 -1
- package/dist/src/lib/wrappedBuilder.d.ts.map +1 -1
- package/dist/src/lib/wrappedBuilder.js +101 -4
- package/dist/src/trx.d.ts +93 -4
- package/dist/src/trx.d.ts.map +1 -1
- package/dist/src/trx.js +500 -147
- package/dist/src/trxToken.d.ts +2 -2
- package/dist/src/trxToken.d.ts.map +1 -1
- package/dist/src/trxToken.js +14 -6
- package/dist/test/fixtures.d.ts +40 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +46 -0
- package/dist/test/resources.d.ts +586 -0
- package/dist/test/resources.d.ts.map +1 -0
- package/dist/test/resources.js +746 -0
- package/dist/test/unit/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +19 -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 +163 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +38 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.js +315 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.js +339 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.js +365 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +55 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.js +339 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.js +336 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.js +277 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.js +213 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.js +213 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.js +50 -0
- package/dist/test/unit/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.js +178 -0
- package/dist/test/unit/trx.d.ts +2 -0
- package/dist/test/unit/trx.d.ts.map +1 -0
- package/dist/test/unit/trx.js +639 -0
- package/dist/test/unit/util.d.ts +2 -0
- package/dist/test/unit/util.d.ts.map +1 -0
- package/dist/test/unit/util.js +141 -0
- package/dist/test/unit/verifyTransaction.d.ts +2 -0
- package/dist/test/unit/verifyTransaction.d.ts.map +1 -0
- package/dist/test/unit/verifyTransaction.js +573 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +22 -16
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -134
- package/resources/README.md +0 -31
- package/resources/protobuf/Contract.proto +0 -256
- package/resources/protobuf/Discover.proto +0 -44
- package/resources/protobuf/tron.d.ts +0 -11205
- package/resources/protobuf/tron.js +0 -33480
- package/resources/protobuf/tron.proto +0 -677
package/dist/src/lib/utils.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,56 +15,99 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
11
15
|
}) : function(o, v) {
|
|
12
16
|
o["default"] = v;
|
|
13
17
|
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
21
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
37
|
};
|
|
24
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.
|
|
39
|
+
exports.VALID_RESOURCE_TYPES = exports.tokenTestnetContractAddresses = exports.tokenMainnetContractAddresses = exports.TRANSACTION_DEFAULT_EXPIRATION = exports.TRANSACTION_MAX_EXPIRATION = void 0;
|
|
40
|
+
exports.isBase58Address = isBase58Address;
|
|
41
|
+
exports.getByteArrayFromHexAddress = getByteArrayFromHexAddress;
|
|
42
|
+
exports.getHexAddressFromByteArray = getHexAddressFromByteArray;
|
|
43
|
+
exports.verifySignature = verifySignature;
|
|
44
|
+
exports.getHexAddressFromBase58Address = getHexAddressFromBase58Address;
|
|
45
|
+
exports.getPubKeyFromPriKey = getPubKeyFromPriKey;
|
|
46
|
+
exports.getAddressFromPriKey = getAddressFromPriKey;
|
|
47
|
+
exports.getBase58AddressFromByteArray = getBase58AddressFromByteArray;
|
|
48
|
+
exports.getBase58AddressFromHex = getBase58AddressFromHex;
|
|
49
|
+
exports.signTransaction = signTransaction;
|
|
50
|
+
exports.signString = signString;
|
|
51
|
+
exports.getRawAddressFromPubKey = getRawAddressFromPubKey;
|
|
52
|
+
exports.decodeTransaction = decodeTransaction;
|
|
53
|
+
exports.decodeRawTransaction = decodeRawTransaction;
|
|
54
|
+
exports.getHexFromBase64 = getHexFromBase64;
|
|
55
|
+
exports.isValidHex = isValidHex;
|
|
56
|
+
exports.decodeTransferContract = decodeTransferContract;
|
|
57
|
+
exports.decodeTriggerSmartContract = decodeTriggerSmartContract;
|
|
58
|
+
exports.decodeAccountPermissionUpdateContract = decodeAccountPermissionUpdateContract;
|
|
59
|
+
exports.decodeFreezeBalanceV2Contract = decodeFreezeBalanceV2Contract;
|
|
60
|
+
exports.decodeVoteWitnessContract = decodeVoteWitnessContract;
|
|
61
|
+
exports.decodeUnfreezeBalanceV2Contract = decodeUnfreezeBalanceV2Contract;
|
|
62
|
+
exports.decodeWithdrawBalanceContract = decodeWithdrawBalanceContract;
|
|
63
|
+
exports.decodeWithdrawExpireUnfreezeContract = decodeWithdrawExpireUnfreezeContract;
|
|
64
|
+
exports.decodeDelegateResourceContract = decodeDelegateResourceContract;
|
|
65
|
+
exports.decodeUnDelegateResourceContract = decodeUnDelegateResourceContract;
|
|
66
|
+
exports.isValidTxJsonString = isValidTxJsonString;
|
|
67
|
+
exports.isValidRawTransactionFormat = isValidRawTransactionFormat;
|
|
68
|
+
exports.toHex = toHex;
|
|
69
|
+
exports.encodeDataParams = encodeDataParams;
|
|
70
|
+
exports.decodeDataParams = decodeDataParams;
|
|
71
|
+
exports.generateRawDataHex = generateRawDataHex;
|
|
26
72
|
const assert_1 = __importDefault(require("assert"));
|
|
27
73
|
const hex = __importStar(require("@stablelib/hex"));
|
|
28
74
|
const tronweb = __importStar(require("tronweb"));
|
|
29
75
|
const tron_1 = require("../../resources/protobuf/tron");
|
|
30
76
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
77
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
31
78
|
const enum_1 = require("./enum");
|
|
32
79
|
const utils_1 = require("ethers/lib/utils");
|
|
80
|
+
const constants_1 = require("./constants");
|
|
81
|
+
exports.TRANSACTION_MAX_EXPIRATION = 86400000; // one day
|
|
82
|
+
exports.TRANSACTION_DEFAULT_EXPIRATION = 10800000; // three hours
|
|
33
83
|
const ADDRESS_PREFIX_REGEX = /^(41)/;
|
|
34
84
|
const ADDRESS_PREFIX = '41';
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
];
|
|
85
|
+
const getTronTokens = (network = 'mainnet') => {
|
|
86
|
+
return statics_1.coins
|
|
87
|
+
.filter((coin) => coin.family === 'trx')
|
|
88
|
+
.filter((trx) => trx.network.type === network && trx.isToken).map((coins) => coins.contractAddress.toString());
|
|
89
|
+
};
|
|
90
|
+
exports.tokenMainnetContractAddresses = getTronTokens('mainnet');
|
|
91
|
+
exports.tokenTestnetContractAddresses = getTronTokens('testnet');
|
|
92
|
+
exports.VALID_RESOURCE_TYPES = ['ENERGY', 'BANDWIDTH'];
|
|
43
93
|
/**
|
|
44
94
|
* @param address
|
|
45
95
|
*/
|
|
46
96
|
function isBase58Address(address) {
|
|
47
97
|
return tronweb.utils.crypto.isAddressValid(address);
|
|
48
98
|
}
|
|
49
|
-
exports.isBase58Address = isBase58Address;
|
|
50
99
|
/**
|
|
51
100
|
* @param str
|
|
52
101
|
*/
|
|
53
102
|
function getByteArrayFromHexAddress(str) {
|
|
54
103
|
return tronweb.utils.code.hexStr2byteArray(str.replace('0x', ''));
|
|
55
104
|
}
|
|
56
|
-
exports.getByteArrayFromHexAddress = getByteArrayFromHexAddress;
|
|
57
105
|
/**
|
|
58
106
|
* @param arr
|
|
59
107
|
*/
|
|
60
108
|
function getHexAddressFromByteArray(arr) {
|
|
61
109
|
return tronweb.utils.code.byteArray2hexStr(arr);
|
|
62
110
|
}
|
|
63
|
-
exports.getHexAddressFromByteArray = getHexAddressFromByteArray;
|
|
64
111
|
/**
|
|
65
112
|
* @param messageToVerify
|
|
66
113
|
* @param base58Address
|
|
@@ -79,7 +126,6 @@ function verifySignature(messageToVerify, base58Address, sigHex, useTronHeader =
|
|
|
79
126
|
}
|
|
80
127
|
return tronweb.Trx.verifySignature(messageToVerify, base58Address, sigHex, useTronHeader);
|
|
81
128
|
}
|
|
82
|
-
exports.verifySignature = verifySignature;
|
|
83
129
|
/**
|
|
84
130
|
* @param base58
|
|
85
131
|
*/
|
|
@@ -87,30 +133,30 @@ function getHexAddressFromBase58Address(base58) {
|
|
|
87
133
|
// pulled from: https://github.com/TRON-US/tronweb/blob/dcb8efa36a5ebb65c4dab3626e90256a453f3b0d/src/utils/help.js#L17
|
|
88
134
|
// but they don't surface this call in index.js
|
|
89
135
|
const bytes = tronweb.utils.crypto.decodeBase58Address(base58);
|
|
90
|
-
|
|
136
|
+
// Ensure bytes is a ByteArray (number[])
|
|
137
|
+
if (Array.isArray(bytes)) {
|
|
138
|
+
return getHexAddressFromByteArray(bytes);
|
|
139
|
+
}
|
|
140
|
+
throw new sdk_core_1.UtilsError('Failed to decode base58 address to byte array');
|
|
91
141
|
}
|
|
92
|
-
exports.getHexAddressFromBase58Address = getHexAddressFromBase58Address;
|
|
93
142
|
/**
|
|
94
143
|
* @param privateKey
|
|
95
144
|
*/
|
|
96
145
|
function getPubKeyFromPriKey(privateKey) {
|
|
97
146
|
return tronweb.utils.crypto.getPubKeyFromPriKey(privateKey);
|
|
98
147
|
}
|
|
99
|
-
exports.getPubKeyFromPriKey = getPubKeyFromPriKey;
|
|
100
148
|
/**
|
|
101
149
|
* @param privateKey
|
|
102
150
|
*/
|
|
103
151
|
function getAddressFromPriKey(privateKey) {
|
|
104
152
|
return tronweb.utils.crypto.getAddressFromPriKey(privateKey);
|
|
105
153
|
}
|
|
106
|
-
exports.getAddressFromPriKey = getAddressFromPriKey;
|
|
107
154
|
/**
|
|
108
155
|
* @param address
|
|
109
156
|
*/
|
|
110
157
|
function getBase58AddressFromByteArray(address) {
|
|
111
158
|
return tronweb.utils.crypto.getBase58CheckAddress(address);
|
|
112
159
|
}
|
|
113
|
-
exports.getBase58AddressFromByteArray = getBase58AddressFromByteArray;
|
|
114
160
|
/**
|
|
115
161
|
* @param hex
|
|
116
162
|
*/
|
|
@@ -118,7 +164,6 @@ function getBase58AddressFromHex(hex) {
|
|
|
118
164
|
const arr = getByteArrayFromHexAddress(hex);
|
|
119
165
|
return getBase58AddressFromByteArray(arr);
|
|
120
166
|
}
|
|
121
|
-
exports.getBase58AddressFromHex = getBase58AddressFromHex;
|
|
122
167
|
/**
|
|
123
168
|
* @param privateKey
|
|
124
169
|
* @param transaction
|
|
@@ -126,7 +171,6 @@ exports.getBase58AddressFromHex = getBase58AddressFromHex;
|
|
|
126
171
|
function signTransaction(privateKey, transaction) {
|
|
127
172
|
return tronweb.utils.crypto.signTransaction(privateKey, transaction);
|
|
128
173
|
}
|
|
129
|
-
exports.signTransaction = signTransaction;
|
|
130
174
|
/**
|
|
131
175
|
* @param message
|
|
132
176
|
* @param privateKey
|
|
@@ -135,14 +179,12 @@ exports.signTransaction = signTransaction;
|
|
|
135
179
|
function signString(message, privateKey, useTronHeader = true) {
|
|
136
180
|
return tronweb.Trx.signString(message, privateKey, useTronHeader);
|
|
137
181
|
}
|
|
138
|
-
exports.signString = signString;
|
|
139
182
|
/**
|
|
140
183
|
* @param pubBytes
|
|
141
184
|
*/
|
|
142
185
|
function getRawAddressFromPubKey(pubBytes) {
|
|
143
186
|
return tronweb.utils.crypto.computeAddress(pubBytes);
|
|
144
187
|
}
|
|
145
|
-
exports.getRawAddressFromPubKey = getRawAddressFromPubKey;
|
|
146
188
|
/**
|
|
147
189
|
* Decodes a hex encoded transaction in its protobuf representation.
|
|
148
190
|
*
|
|
@@ -170,6 +212,34 @@ function decodeTransaction(hexString) {
|
|
|
170
212
|
contractType = enum_1.ContractType.TriggerSmartContract;
|
|
171
213
|
contract = exports.decodeTriggerSmartContract(rawTransaction.contracts[0].parameter.value);
|
|
172
214
|
break;
|
|
215
|
+
case 'type.googleapis.com/protocol.FreezeBalanceV2Contract':
|
|
216
|
+
contractType = enum_1.ContractType.FreezeBalanceV2;
|
|
217
|
+
contract = decodeFreezeBalanceV2Contract(rawTransaction.contracts[0].parameter.value);
|
|
218
|
+
break;
|
|
219
|
+
case 'type.googleapis.com/protocol.VoteWitnessContract':
|
|
220
|
+
contractType = enum_1.ContractType.VoteWitness;
|
|
221
|
+
contract = decodeVoteWitnessContract(rawTransaction.contracts[0].parameter.value);
|
|
222
|
+
break;
|
|
223
|
+
case 'type.googleapis.com/protocol.WithdrawExpireUnfreezeContract':
|
|
224
|
+
contract = decodeWithdrawExpireUnfreezeContract(rawTransaction.contracts[0].parameter.value);
|
|
225
|
+
contractType = enum_1.ContractType.WithdrawExpireUnfreeze;
|
|
226
|
+
break;
|
|
227
|
+
case 'type.googleapis.com/protocol.WithdrawBalanceContract':
|
|
228
|
+
contract = decodeWithdrawBalanceContract(rawTransaction.contracts[0].parameter.value);
|
|
229
|
+
contractType = enum_1.ContractType.WithdrawBalance;
|
|
230
|
+
break;
|
|
231
|
+
case 'type.googleapis.com/protocol.UnfreezeBalanceV2Contract':
|
|
232
|
+
contract = decodeUnfreezeBalanceV2Contract(rawTransaction.contracts[0].parameter.value);
|
|
233
|
+
contractType = enum_1.ContractType.UnfreezeBalanceV2;
|
|
234
|
+
break;
|
|
235
|
+
case constants_1.DELEGATION_TYPE_URL:
|
|
236
|
+
contractType = enum_1.ContractType.DelegateResourceContract;
|
|
237
|
+
contract = decodeDelegateResourceContract(rawTransaction.contracts[0].parameter.value);
|
|
238
|
+
break;
|
|
239
|
+
case 'type.googleapis.com/protocol.UnDelegateResourceContract':
|
|
240
|
+
contractType = enum_1.ContractType.UnDelegateResourceContract;
|
|
241
|
+
contract = decodeUnDelegateResourceContract(rawTransaction.contracts[0].parameter.value);
|
|
242
|
+
break;
|
|
173
243
|
default:
|
|
174
244
|
throw new sdk_core_1.UtilsError('Unsupported contract type');
|
|
175
245
|
}
|
|
@@ -183,7 +253,6 @@ function decodeTransaction(hexString) {
|
|
|
183
253
|
fee_limit: +rawTransaction.feeLimit,
|
|
184
254
|
};
|
|
185
255
|
}
|
|
186
|
-
exports.decodeTransaction = decodeTransaction;
|
|
187
256
|
/**
|
|
188
257
|
* Decodes a transaction's raw field from a base64 encoded string. This is a protobuf representation.
|
|
189
258
|
*
|
|
@@ -210,7 +279,16 @@ function decodeRawTransaction(hexString) {
|
|
|
210
279
|
blockHash: toHex(raw.refBlockHash),
|
|
211
280
|
};
|
|
212
281
|
}
|
|
213
|
-
|
|
282
|
+
/**
|
|
283
|
+
* Converts a base64 encoded string to hex
|
|
284
|
+
*
|
|
285
|
+
* @param base64 - The base64 encoded string to convert
|
|
286
|
+
* @returns {string} - The hex representation
|
|
287
|
+
*/
|
|
288
|
+
function getHexFromBase64(base64) {
|
|
289
|
+
const buffer = Buffer.from(base64, 'base64');
|
|
290
|
+
return buffer.toString('hex');
|
|
291
|
+
}
|
|
214
292
|
/**
|
|
215
293
|
* Indicates whether the passed string is a safe hex string for tron's purposes.
|
|
216
294
|
*
|
|
@@ -219,7 +297,6 @@ exports.decodeRawTransaction = decodeRawTransaction;
|
|
|
219
297
|
function isValidHex(hex) {
|
|
220
298
|
return /^(0x)?([0-9a-f]{2})+$/i.test(hex);
|
|
221
299
|
}
|
|
222
|
-
exports.isValidHex = isValidHex;
|
|
223
300
|
/** Deserialize the segment of the txHex which corresponds with the details of the transfer
|
|
224
301
|
*
|
|
225
302
|
* @param transferHex is the value property of the "parameter" field of contractList[0]
|
|
@@ -258,7 +335,6 @@ function decodeTransferContract(transferHex) {
|
|
|
258
335
|
},
|
|
259
336
|
];
|
|
260
337
|
}
|
|
261
|
-
exports.decodeTransferContract = decodeTransferContract;
|
|
262
338
|
/**
|
|
263
339
|
* Deserialize the segment of the txHex corresponding with trigger smart contract
|
|
264
340
|
*
|
|
@@ -298,7 +374,6 @@ function decodeTriggerSmartContract(base64) {
|
|
|
298
374
|
},
|
|
299
375
|
];
|
|
300
376
|
}
|
|
301
|
-
exports.decodeTriggerSmartContract = decodeTriggerSmartContract;
|
|
302
377
|
/**
|
|
303
378
|
* Deserialize the segment of the txHex corresponding with the details of the contract which updates
|
|
304
379
|
* account permission
|
|
@@ -308,9 +383,9 @@ exports.decodeTriggerSmartContract = decodeTriggerSmartContract;
|
|
|
308
383
|
*/
|
|
309
384
|
function decodeAccountPermissionUpdateContract(base64) {
|
|
310
385
|
const accountUpdateContract = tron_1.protocol.AccountPermissionUpdateContract.decode(Buffer.from(base64, 'base64')).toJSON();
|
|
311
|
-
assert_1.default(accountUpdateContract.ownerAddress);
|
|
312
|
-
assert_1.default(accountUpdateContract.owner);
|
|
313
|
-
assert_1.default(accountUpdateContract.hasOwnProperty('actives'));
|
|
386
|
+
(0, assert_1.default)(accountUpdateContract.ownerAddress);
|
|
387
|
+
(0, assert_1.default)(accountUpdateContract.owner);
|
|
388
|
+
(0, assert_1.default)(accountUpdateContract.hasOwnProperty('actives'));
|
|
314
389
|
const ownerAddress = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(accountUpdateContract.ownerAddress, 'base64').toString('hex')));
|
|
315
390
|
const owner = createPermission(accountUpdateContract.owner);
|
|
316
391
|
let witness = undefined;
|
|
@@ -325,7 +400,267 @@ function decodeAccountPermissionUpdateContract(base64) {
|
|
|
325
400
|
actives: activeList,
|
|
326
401
|
};
|
|
327
402
|
}
|
|
328
|
-
|
|
403
|
+
/**
|
|
404
|
+
* Deserialize the segment of the txHex corresponding with freeze balance contract
|
|
405
|
+
*
|
|
406
|
+
* @param {string} base64 - The base64 encoded contract data
|
|
407
|
+
* @returns {FreezeBalanceContractParameter[]} - Array containing the decoded freeze contract
|
|
408
|
+
*/
|
|
409
|
+
function decodeFreezeBalanceV2Contract(base64) {
|
|
410
|
+
let freezeContract;
|
|
411
|
+
try {
|
|
412
|
+
freezeContract = tron_1.protocol.FreezeBalanceV2Contract.decode(Buffer.from(base64, 'base64')).toJSON();
|
|
413
|
+
}
|
|
414
|
+
catch (e) {
|
|
415
|
+
throw new sdk_core_1.UtilsError('There was an error decoding the freeze contract in the transaction.');
|
|
416
|
+
}
|
|
417
|
+
if (!freezeContract.ownerAddress) {
|
|
418
|
+
throw new sdk_core_1.UtilsError('Owner address does not exist in this freeze contract.');
|
|
419
|
+
}
|
|
420
|
+
if (freezeContract.frozenBalance === undefined) {
|
|
421
|
+
throw new sdk_core_1.UtilsError('Frozen balance does not exist in this freeze contract.');
|
|
422
|
+
}
|
|
423
|
+
const owner_address = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(freezeContract.ownerAddress, 'base64').toString('hex')));
|
|
424
|
+
// In protobuf3, default values (BANDWIDTH = 0) may be omitted from serialization.
|
|
425
|
+
// If resource is undefined, default to BANDWIDTH.
|
|
426
|
+
const resourceValue = freezeContract.resource === undefined || freezeContract.resource === 'BANDWIDTH'
|
|
427
|
+
? enum_1.TronResource.BANDWIDTH
|
|
428
|
+
: enum_1.TronResource.ENERGY;
|
|
429
|
+
return [
|
|
430
|
+
{
|
|
431
|
+
parameter: {
|
|
432
|
+
value: {
|
|
433
|
+
resource: resourceValue,
|
|
434
|
+
frozen_balance: Number(freezeContract.frozenBalance),
|
|
435
|
+
owner_address,
|
|
436
|
+
},
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
];
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Deserialize the segment of the txHex corresponding with vote witness contract
|
|
443
|
+
*
|
|
444
|
+
* @param {string} base64 - The base64 encoded contract data
|
|
445
|
+
* @returns {VoteWitnessContractParameter[]} - Array containing the decoded vote witness contract
|
|
446
|
+
*/
|
|
447
|
+
function decodeVoteWitnessContract(base64) {
|
|
448
|
+
let voteContract;
|
|
449
|
+
try {
|
|
450
|
+
voteContract = tron_1.protocol.VoteWitnessContract.decode(Buffer.from(base64, 'base64')).toJSON();
|
|
451
|
+
}
|
|
452
|
+
catch (e) {
|
|
453
|
+
throw new sdk_core_1.UtilsError('There was an error decoding the vote contract in the transaction.');
|
|
454
|
+
}
|
|
455
|
+
if (!voteContract.ownerAddress) {
|
|
456
|
+
throw new sdk_core_1.UtilsError('Owner address does not exist in this vote contract.');
|
|
457
|
+
}
|
|
458
|
+
if (!Array.isArray(voteContract.votes) || voteContract.votes.length === 0) {
|
|
459
|
+
throw new sdk_core_1.UtilsError('Votes do not exist or are empty in this vote contract.');
|
|
460
|
+
}
|
|
461
|
+
// deserialize attributes
|
|
462
|
+
const owner_address = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(voteContract.ownerAddress, 'base64').toString('hex')));
|
|
463
|
+
const votes = voteContract.votes.map((vote) => {
|
|
464
|
+
if (!vote.voteAddress) {
|
|
465
|
+
throw new sdk_core_1.UtilsError('Vote address is missing in one of the votes.');
|
|
466
|
+
}
|
|
467
|
+
return {
|
|
468
|
+
vote_address: getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(vote.voteAddress, 'base64').toString('hex'))),
|
|
469
|
+
vote_count: Number(vote.voteCount || 0),
|
|
470
|
+
};
|
|
471
|
+
});
|
|
472
|
+
return [
|
|
473
|
+
{
|
|
474
|
+
parameter: {
|
|
475
|
+
value: {
|
|
476
|
+
owner_address,
|
|
477
|
+
votes,
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
},
|
|
481
|
+
];
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Deserialize the segment of the txHex corresponding with unfreeze balance contract
|
|
485
|
+
*
|
|
486
|
+
* @param {string} base64 - The base64 encoded contract data
|
|
487
|
+
* @returns {UnfreezeBalanceContractParameter[]} - Array containing the decoded unfreeze contract
|
|
488
|
+
*/
|
|
489
|
+
function decodeUnfreezeBalanceV2Contract(base64) {
|
|
490
|
+
let unfreezeContract;
|
|
491
|
+
try {
|
|
492
|
+
unfreezeContract = tron_1.protocol.UnfreezeBalanceV2Contract.decode(Buffer.from(base64, 'base64')).toJSON();
|
|
493
|
+
}
|
|
494
|
+
catch (e) {
|
|
495
|
+
throw new sdk_core_1.UtilsError('There was an error decoding the unfreeze contract in the transaction.');
|
|
496
|
+
}
|
|
497
|
+
if (!unfreezeContract.ownerAddress) {
|
|
498
|
+
throw new sdk_core_1.UtilsError('Owner address does not exist in this unfreeze contract.');
|
|
499
|
+
}
|
|
500
|
+
if (unfreezeContract.unfreezeBalance === undefined) {
|
|
501
|
+
throw new sdk_core_1.UtilsError('Unfreeze balance does not exist in this unfreeze contract.');
|
|
502
|
+
}
|
|
503
|
+
// deserialize attributes
|
|
504
|
+
const owner_address = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(unfreezeContract.ownerAddress, 'base64').toString('hex')));
|
|
505
|
+
// In protobuf3, default values (BANDWIDTH = 0) may be omitted from serialization.
|
|
506
|
+
// If resource is undefined, default to BANDWIDTH.
|
|
507
|
+
const resourceValue = unfreezeContract.resource;
|
|
508
|
+
const resourceEnum = resourceValue === undefined || resourceValue === tron_1.protocol.ResourceCode.BANDWIDTH
|
|
509
|
+
? enum_1.TronResource.BANDWIDTH
|
|
510
|
+
: enum_1.TronResource.ENERGY;
|
|
511
|
+
return [
|
|
512
|
+
{
|
|
513
|
+
parameter: {
|
|
514
|
+
value: {
|
|
515
|
+
resource: resourceEnum,
|
|
516
|
+
unfreeze_balance: Number(unfreezeContract.unfreezeBalance),
|
|
517
|
+
owner_address,
|
|
518
|
+
},
|
|
519
|
+
},
|
|
520
|
+
},
|
|
521
|
+
];
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Deserialize the segment of the txHex corresponding with withdraw balance contract
|
|
525
|
+
* Decoded contract is the same as withdraw expire unfreeze
|
|
526
|
+
*
|
|
527
|
+
* @param {string} base64 - The base64 encoded contract data
|
|
528
|
+
* @returns {WithdrawExpireUnfreezeContractParameter[]} - Array containing the decoded withdraw contract
|
|
529
|
+
*/
|
|
530
|
+
function decodeWithdrawBalanceContract(base64) {
|
|
531
|
+
let withdrawContract;
|
|
532
|
+
try {
|
|
533
|
+
withdrawContract = tron_1.protocol.WithdrawBalanceContract.decode(Buffer.from(base64, 'base64')).toJSON();
|
|
534
|
+
}
|
|
535
|
+
catch (e) {
|
|
536
|
+
throw new sdk_core_1.UtilsError('There was an error decoding the withdraw contract in the transaction.');
|
|
537
|
+
}
|
|
538
|
+
if (!withdrawContract.ownerAddress) {
|
|
539
|
+
throw new sdk_core_1.UtilsError('Owner address does not exist in this withdraw contract.');
|
|
540
|
+
}
|
|
541
|
+
// deserialize attributes
|
|
542
|
+
const owner_address = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(withdrawContract.ownerAddress, 'base64').toString('hex')));
|
|
543
|
+
return [
|
|
544
|
+
{
|
|
545
|
+
parameter: {
|
|
546
|
+
value: {
|
|
547
|
+
owner_address,
|
|
548
|
+
},
|
|
549
|
+
},
|
|
550
|
+
},
|
|
551
|
+
];
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Deserialize the segment of the txHex corresponding with withdraw expire unfreeze contract
|
|
555
|
+
*
|
|
556
|
+
* @param {string} base64 - The base64 encoded contract data
|
|
557
|
+
* @returns {WithdrawExpireUnfreezeContractParameter[]} - Array containing the decoded withdraw contract
|
|
558
|
+
*/
|
|
559
|
+
function decodeWithdrawExpireUnfreezeContract(base64) {
|
|
560
|
+
let withdrawContract;
|
|
561
|
+
try {
|
|
562
|
+
withdrawContract = tron_1.protocol.WithdrawBalanceContract.decode(Buffer.from(base64, 'base64')).toJSON();
|
|
563
|
+
}
|
|
564
|
+
catch (e) {
|
|
565
|
+
throw new sdk_core_1.UtilsError('There was an error decoding the withdraw contract in the transaction.');
|
|
566
|
+
}
|
|
567
|
+
if (!withdrawContract.ownerAddress) {
|
|
568
|
+
throw new sdk_core_1.UtilsError('Owner address does not exist in this withdraw contract.');
|
|
569
|
+
}
|
|
570
|
+
// deserialize attributes
|
|
571
|
+
const owner_address = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(withdrawContract.ownerAddress, 'base64').toString('hex')));
|
|
572
|
+
return [
|
|
573
|
+
{
|
|
574
|
+
parameter: {
|
|
575
|
+
value: {
|
|
576
|
+
owner_address,
|
|
577
|
+
},
|
|
578
|
+
},
|
|
579
|
+
},
|
|
580
|
+
];
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Deserialize the segment of the txHex corresponding with delegate resource contract
|
|
584
|
+
*
|
|
585
|
+
* @param {string} base64 - The base64 encoded contract data
|
|
586
|
+
* @returns {ResourceManagementContractParameter[]} - Array containing the decoded delegate resource contract
|
|
587
|
+
*/
|
|
588
|
+
function decodeDelegateResourceContract(base64) {
|
|
589
|
+
let delegateResourceContract;
|
|
590
|
+
try {
|
|
591
|
+
delegateResourceContract = tron_1.protocol.DelegateResourceContract.decode(Buffer.from(base64, 'base64')).toJSON();
|
|
592
|
+
}
|
|
593
|
+
catch (e) {
|
|
594
|
+
throw new sdk_core_1.UtilsError('There was an error decoding the delegate resource contract in the transaction.');
|
|
595
|
+
}
|
|
596
|
+
if (!delegateResourceContract.ownerAddress) {
|
|
597
|
+
throw new sdk_core_1.UtilsError('Owner address does not exist in this delegate resource contract.');
|
|
598
|
+
}
|
|
599
|
+
if (!delegateResourceContract.receiverAddress) {
|
|
600
|
+
throw new sdk_core_1.UtilsError('Receiver address does not exist in this delegate resource contract.');
|
|
601
|
+
}
|
|
602
|
+
if (delegateResourceContract.balance === undefined) {
|
|
603
|
+
throw new sdk_core_1.UtilsError('Balance does not exist in this delegate resource contract.');
|
|
604
|
+
}
|
|
605
|
+
const owner_address = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(delegateResourceContract.ownerAddress, 'base64').toString('hex')));
|
|
606
|
+
const receiver_address = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(delegateResourceContract.receiverAddress, 'base64').toString('hex')));
|
|
607
|
+
// In protobuf3, default values (BANDWIDTH = 0) may be omitted from serialization.
|
|
608
|
+
// If resource is undefined or falsy, default to BANDWIDTH.
|
|
609
|
+
const resourceValue = !delegateResourceContract.resource ? enum_1.TronResource.BANDWIDTH : enum_1.TronResource.ENERGY;
|
|
610
|
+
return [
|
|
611
|
+
{
|
|
612
|
+
parameter: {
|
|
613
|
+
value: {
|
|
614
|
+
resource: resourceValue,
|
|
615
|
+
balance: Number(delegateResourceContract.balance),
|
|
616
|
+
owner_address,
|
|
617
|
+
receiver_address,
|
|
618
|
+
},
|
|
619
|
+
},
|
|
620
|
+
},
|
|
621
|
+
];
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Deserialize the segment of the txHex corresponding with undelegate resource contract
|
|
625
|
+
*
|
|
626
|
+
* @param {string} base64 - The base64 encoded contract data
|
|
627
|
+
* @returns {ResourceManagementContractParameter[]} - Array containing the decoded undelegate resource contract
|
|
628
|
+
*/
|
|
629
|
+
function decodeUnDelegateResourceContract(base64) {
|
|
630
|
+
let undelegateResourceContract;
|
|
631
|
+
try {
|
|
632
|
+
undelegateResourceContract = tron_1.protocol.UnDelegateResourceContract.decode(Buffer.from(base64, 'base64')).toJSON();
|
|
633
|
+
}
|
|
634
|
+
catch (e) {
|
|
635
|
+
throw new sdk_core_1.UtilsError('There was an error decoding the delegate resource contract in the transaction.');
|
|
636
|
+
}
|
|
637
|
+
if (!undelegateResourceContract.ownerAddress) {
|
|
638
|
+
throw new sdk_core_1.UtilsError('Owner address does not exist in this delegate resource contract.');
|
|
639
|
+
}
|
|
640
|
+
if (!undelegateResourceContract.receiverAddress) {
|
|
641
|
+
throw new sdk_core_1.UtilsError('Receiver address does not exist in this delegate resource contract.');
|
|
642
|
+
}
|
|
643
|
+
if (undelegateResourceContract.balance === undefined) {
|
|
644
|
+
throw new sdk_core_1.UtilsError('Balance does not exist in this delegate resource contract.');
|
|
645
|
+
}
|
|
646
|
+
const owner_address = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(undelegateResourceContract.ownerAddress, 'base64').toString('hex')));
|
|
647
|
+
const receiver_address = getBase58AddressFromByteArray(getByteArrayFromHexAddress(Buffer.from(undelegateResourceContract.receiverAddress, 'base64').toString('hex')));
|
|
648
|
+
// In protobuf3, default values (BANDWIDTH = 0) may be omitted from serialization.
|
|
649
|
+
// If resource is undefined or falsy, default to BANDWIDTH.
|
|
650
|
+
const resourceValue = !undelegateResourceContract.resource ? enum_1.TronResource.BANDWIDTH : enum_1.TronResource.ENERGY;
|
|
651
|
+
return [
|
|
652
|
+
{
|
|
653
|
+
parameter: {
|
|
654
|
+
value: {
|
|
655
|
+
resource: resourceValue,
|
|
656
|
+
balance: Number(undelegateResourceContract.balance),
|
|
657
|
+
owner_address,
|
|
658
|
+
receiver_address,
|
|
659
|
+
},
|
|
660
|
+
},
|
|
661
|
+
},
|
|
662
|
+
];
|
|
663
|
+
}
|
|
329
664
|
/**
|
|
330
665
|
* @param raw
|
|
331
666
|
*/
|
|
@@ -353,7 +688,6 @@ function isValidTxJsonString(rawTransaction) {
|
|
|
353
688
|
const transaction = JSON.parse(rawTransaction);
|
|
354
689
|
return transaction.hasOwnProperty('txID');
|
|
355
690
|
}
|
|
356
|
-
exports.isValidTxJsonString = isValidTxJsonString;
|
|
357
691
|
/**
|
|
358
692
|
* Returns whether the provided raw transaction accommodates to bitgo's preferred format
|
|
359
693
|
*
|
|
@@ -366,7 +700,6 @@ function isValidRawTransactionFormat(rawTransaction) {
|
|
|
366
700
|
}
|
|
367
701
|
return false;
|
|
368
702
|
}
|
|
369
|
-
exports.isValidRawTransactionFormat = isValidRawTransactionFormat;
|
|
370
703
|
/**
|
|
371
704
|
* Returns an hex string of the given buffer
|
|
372
705
|
*
|
|
@@ -376,7 +709,6 @@ exports.isValidRawTransactionFormat = isValidRawTransactionFormat;
|
|
|
376
709
|
function toHex(buffer) {
|
|
377
710
|
return hex.encode(buffer, true);
|
|
378
711
|
}
|
|
379
|
-
exports.toHex = toHex;
|
|
380
712
|
/**
|
|
381
713
|
* Returns a Keccak-256 encoded string of the parameters
|
|
382
714
|
*
|
|
@@ -396,16 +728,15 @@ function encodeDataParams(types, values, methodId) {
|
|
|
396
728
|
data = abiCoder.encode(types, values);
|
|
397
729
|
}
|
|
398
730
|
catch (e) {
|
|
399
|
-
throw new sdk_core_1.UtilsError(
|
|
731
|
+
throw new sdk_core_1.UtilsError(`There was an error encoding the data params. Error = ${JSON.stringify(e)}`);
|
|
400
732
|
}
|
|
401
733
|
if (methodId) {
|
|
402
|
-
return utils_1.hexConcat([methodId, data]).replace(/^(0x)/, '');
|
|
734
|
+
return (0, utils_1.hexConcat)([methodId, data]).replace(/^(0x)/, '');
|
|
403
735
|
}
|
|
404
736
|
else {
|
|
405
737
|
return data.replace(/^(0x)/, '');
|
|
406
738
|
}
|
|
407
739
|
}
|
|
408
|
-
exports.encodeDataParams = encodeDataParams;
|
|
409
740
|
/**
|
|
410
741
|
* Returns the decoded values according to the array of types
|
|
411
742
|
*
|
|
@@ -422,5 +753,71 @@ function decodeDataParams(types, data) {
|
|
|
422
753
|
return obj;
|
|
423
754
|
}, []);
|
|
424
755
|
}
|
|
425
|
-
|
|
426
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQXNDO0FBQ3RDLGlEQUFtQztBQUNuQyx3REFBeUQ7QUFFekQsbURBQWtEO0FBU2xELGlDQUFzRDtBQUN0RCw0Q0FBdUQ7QUFFdkQsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBRWYsUUFBQSw2QkFBNkIsR0FBRztJQUMzQyxvQ0FBb0M7SUFDcEMsb0NBQW9DO0NBQ3JDLENBQUM7QUFDVyxRQUFBLDZCQUE2QixHQUFHO0lBQzNDLG9DQUFvQztJQUNwQyxvQ0FBb0M7Q0FDckMsQ0FBQztBQVFGOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE9BQWU7SUFDN0MsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUZELDBDQUVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQiwwQkFBMEIsQ0FBQyxHQUFXO0lBQ3BELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRkQsZ0VBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLDBCQUEwQixDQUFDLEdBQWM7SUFDdkQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsZ0VBRUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsZUFBdUIsRUFDdkIsYUFBcUIsRUFDckIsTUFBYyxFQUNkLGFBQWEs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SUFDaEMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzdELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVM7WUFBRSxHQUFHLEdBQUcsY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEYsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQVJELDRDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgaGV4IGZyb20gJ0BzdGFibGVsaWIvaGV4JztcbmltcG9ydCAqIGFzIHRyb253ZWIgZnJvbSAndHJvbndlYic7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9wcm90b2J1Zi90cm9uJztcblxuaW1wb3J0IHsgVXRpbHNFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIFRyYW5zZmVyQ29udHJhY3QsXG4gIFJhd0RhdGEsXG4gIEFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QsXG4gIFRyYW5zYWN0aW9uUmVjZWlwdCxcbiAgUGVybWlzc2lvbixcbiAgVHJpZ2dlclNtYXJ0Q29udHJhY3QsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQ29udHJhY3RUeXBlLCBQZXJtaXNzaW9uVHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBBYmlDb2RlciwgaGV4Q29uY2F0IH0gZnJvbSAnZXRoZXJzL2xpYi91dGlscyc7XG5cbmNvbnN0IEFERFJFU1NfUFJFRklYX1JFR0VYID0gL14oNDEpLztcbmNvbnN0IEFERFJFU1NfUFJFRklYID0gJzQxJztcblxuZXhwb3J0IGNvbnN0IHRva2VuTWFpbm5ldENvbnRyYWN0QWRkcmVzc2VzID0gW1xuICAnVEVreGlUZWhuelNtU2UyWHFyQmo0dzMyUlVOOTY2cmR6OCcsXG4gICdUUjdOSHFqZUtReEdUQ2k4cThaWTRwTDhvdFN6Z2pMajZ0Jyxcbl07XG5leHBvcnQgY29uc3QgdG9rZW5UZXN0bmV0Q29udHJhY3RBZGRyZXNzZXMgPSBbXG4gICdUU2Rad05xcEhvZnpQNkJzQktHUVVXZEJlSnBoTG1GNmlkJyxcbiAgJ1RHM1hYeUV4QmtQcDluemRhakRac296RXU0QmthU0pvenMnLFxuXTtcblxuLyoqXG4gKiBUcm9uLXNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgVHJvbkJpbmFyeUxpa2UgPSBCeXRlQXJyYXkgfCBCdWZmZXIgfCBVaW50OEFycmF5IHwgc3RyaW5nO1xuZXhwb3J0IHR5cGUgQnl0ZUFycmF5ID0gbnVtYmVyW107XG5cbi8qKlxuICogQHBhcmFtIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmFzZTU4QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmlzQWRkcmVzc1ZhbGlkKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBzdHJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKHN0cjogc3RyaW5nKTogQnl0ZUFycmF5IHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY29kZS5oZXhTdHIyYnl0ZUFycmF5KHN0ci5yZXBsYWNlKCcweCcsICcnKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGFyclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGV4QWRkcmVzc0Zyb21CeXRlQXJyYXkoYXJyOiBCeXRlQXJyYXkpOiBzdHJpbmcge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jb2RlLmJ5dGVBcnJheTJoZXhTdHIoYXJyKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbWVzc2FnZVRvVmVyaWZ5XG4gKiBAcGFyYW0gYmFzZTU4QWRkcmVzc1xuICogQHBhcmFtIHNpZ0hleFxuICogQHBhcmFtIHVzZVRyb25IZWFkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZShcbiAgbWVzc2FnZVRvVmVyaWZ5OiBzdHJpbmcsXG4gIGJhc2U1OEFkZHJlc3M6IHN0cmluZyxcbiAgc2lnSGV4OiBzdHJpbmcsXG4gIHVzZVRyb25IZWFkZXIgPSB0cnVlXG4pOiBib29sZWFuIHtcbiAgaWYgKCFpc1ZhbGlkSGV4KHNpZ0hleCkpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignc2lnbmF0dXJlIGlzIG5vdCBpbiBhIHZhbGlkIGZvcm1hdCwgbmVlZHMgdG8gYmUgaGV4YWRlY2ltYWwnKTtcbiAgfVxuXG4gIGlmICghaXNWYWxpZEhleChtZXNzYWdlVG9WZXJpZnkpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ21lc3NhZ2UgaXMgbm90IGluIGEgdmFsaWQgZm9ybWF0LCBuZWVkcyB0byBiZSBoZXhhZGVjaW1hbCcpO1xuICB9XG5cbiAgaWYgKCFpc0Jhc2U1OEFkZHJlc3MoYmFzZTU4QWRkcmVzcykpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignYWRkcmVzcyBuZWVkcyB0byBiZSBiYXNlNTggZW5jb2RlZCcpO1xuICB9XG5cbiAgcmV0dXJuIHRyb253ZWIuVHJ4LnZlcmlmeVNpZ25hdHVyZShtZXNzYWdlVG9WZXJpZnksIGJhc2U1OEFkZHJlc3MsIHNpZ0hleCwgdXNlVHJvbkhlYWRlcik7XG59XG5cbi8qKlxuICogQHBhcmFtIGJhc2U1OFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzKGJhc2U1ODogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gcHVsbGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9UUk9OLVVTL3Ryb253ZWIvYmxvYi9kY2I4ZWZhMzZhNWViYjY1YzRkYWIzNjI2ZTkwMjU2YTQ1M2YzYjBkL3NyYy91dGlscy9oZWxwLmpzI0wxN1xuICAvLyBidXQgdGhleSBkb24ndCBzdXJmYWNlIHRoaXMgY2FsbCBpbiBpbmRleC5qc1xuICBjb25zdCBieXRlcyA9IHRyb253ZWIudXRpbHMuY3J5cHRvLmRlY29kZUJhc2U1OEFkZHJlc3MoYmFzZTU4KTtcbiAgcmV0dXJuIGdldEhleEFkZHJlc3NGcm9tQnl0ZUFycmF5KGJ5dGVzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHJpdmF0ZUtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHViS2V5RnJvbVByaUtleShwcml2YXRlS2V5OiBUcm9uQmluYXJ5TGlrZSk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5nZXRQdWJLZXlGcm9tUHJpS2V5KHByaXZhdGVLZXkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzRnJvbVByaUtleShwcml2YXRlS2V5OiBUcm9uQmluYXJ5TGlrZSk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5nZXRBZGRyZXNzRnJvbVByaUtleShwcml2YXRlS2V5KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoYWRkcmVzczogQnl0ZUFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmdldEJhc2U1OENoZWNrQWRkcmVzcyhhZGRyZXNzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gaGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNThBZGRyZXNzRnJvbUhleChoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGFyciA9IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKGhleCk7XG4gIHJldHVybiBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShhcnIpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbihwcml2YXRlS2V5OiBzdHJpbmcgfCBCeXRlQXJyYXksIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQpOiBUcmFuc2FjdGlvblJlY2VpcHQge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uc2lnblRyYW5zYWN0aW9uKHByaXZhdGVLZXksIHRyYW5zYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqIEBwYXJhbSB1c2VUcm9uSGVhZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduU3RyaW5nKG1lc3NhZ2U6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nIHwgQnl0ZUFycmF5LCB1c2VUcm9uSGVhZGVyID0gdHJ1ZSk6IHN0cmluZyB7XG4gIHJldHVybiB0cm9ud2ViLlRyeC5zaWduU3RyaW5nKG1lc3NhZ2UsIHByaXZhdGVLZXksIHVzZVRyb25IZWFkZXIpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwdWJCeXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmF3QWRkcmVzc0Zyb21QdWJLZXkocHViQnl0ZXM6IFRyb25CaW5hcnlMaWtlKTogQnl0ZUFycmF5IHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY3J5cHRvLmNvbXB1dGVBZGRyZXNzKHB1YkJ5dGVzKTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIGEgaGV4IGVuY29kZWQgdHJhbnNhY3Rpb24gaW4gaXRzIHByb3RvYnVmIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBoZXhTdHJpbmcgcmF3X2RhdGFfaGV4IGZpZWxkIGZyb20gdHJvbiB0cmFuc2FjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRyYW5zYWN0aW9uKGhleFN0cmluZzogc3RyaW5nKTogUmF3RGF0YSB7XG4gIGNvbnN0IHJhd1RyYW5zYWN0aW9uID0gZGVjb2RlUmF3VHJhbnNhY3Rpb24oaGV4U3RyaW5nKTtcblxuICAvLyB0aGVyZSBzaG91bGQgbm90IGJlIG11bHRpcGxlIGNvbnRyYWN0cyBpbiB0aGlzIGRhdGFcbiAgaWYgKHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignTnVtYmVyIG9mIGNvbnRyYWN0cyBpcyBncmVhdGVyIHRoYW4gMS4nKTtcbiAgfVxuXG4gIGxldCBjb250cmFjdDogVHJhbnNmZXJDb250cmFjdFtdIHwgQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdFtdIHwgVHJpZ2dlclNtYXJ0Q29udHJhY3RbXTtcbiAgbGV0IGNvbnRyYWN0VHlwZTogQ29udHJhY3RUeXBlO1xuICAvLyBlbnN1cmUgdGhlIGNvbnRyYWN0IHR5cGUgaXMgc3VwcG9ydGVkXG4gIHN3aXRjaCAocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci50eXBlX3VybCkge1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVHJhbnNmZXI7XG4gICAgICBjb250cmFjdCA9IGV4cG9ydHMuZGVjb2RlVHJhbnNmZXJDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuQWNjb3VudFBlcm1pc3Npb25VcGRhdGU7XG4gICAgICBjb250cmFjdCA9IGV4cG9ydHMuZGVjb2RlQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QnOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLlRyaWdnZXJTbWFydENvbnRyYWN0O1xuICAgICAgY29udHJhY3QgPSBleHBvcnRzLmRlY29kZVRyaWdnZXJTbWFydENvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdVbnN1cHBvcnRlZCBjb250cmFjdCB0eXBlJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbnRyYWN0VHlwZSxcbiAgICBjb250cmFjdCxcbiAgICBleHBpcmF0aW9uOiByYXdUcmFuc2FjdGlvbi5leHBpcmF0aW9uLFxuICAgIHRpbWVzdGFtcDogcmF3VHJhbnNhY3Rpb24udGltZXN0YW1wLFxuICAgIHJlZl9ibG9ja19ieXRlczogcmF3VHJhbnNhY3Rpb24uYmxvY2tCeXRlcyxcbiAgICByZWZfYmxvY2tfaGFzaDogcmF3VHJhbnNhY3Rpb24uYmxvY2tIYXNoLFxuICAgIGZlZV9saW1pdDogK3Jhd1RyYW5zYWN0aW9uLmZlZUxpbWl0LFxuICB9O1xufVxuXG4vKipcbiAqIERlY29kZXMgYSB0cmFuc2FjdGlvbidzIHJhdyBmaWVsZCBmcm9tIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLiBUaGlzIGlzIGEgcHJvdG9idWYgcmVwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGhleFN0cmluZyB0aGlzIGlzIHRoZSByYXcgaGV4YWRlY2ltYWwgZW5jb2RlZCBzdHJpbmcuIERvYyBmb3VuZCBpbiB0aGUgZm9sbG93aW5nIGxpbmsuXG4gKiBAZXhhbXBsZVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0JpdEdvL2JpdGdvLWFjY291bnQtbGliL2Jsb2IvNWYyODI1ODg3MDE3NzhhNDQyMWM3NWZhNjFmNDI3MTNmNTZlOTViOS9yZXNvdXJjZXMvcHJvdG9idWYvdHJvbi5wcm90byNMMzE5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUmF3VHJhbnNhY3Rpb24oaGV4U3RyaW5nOiBzdHJpbmcpOiB7XG4gIGV4cGlyYXRpb246IG51bWJlcjtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGNvbnRyYWN0czogQXJyYXk8YW55PjtcbiAgYmxvY2tCeXRlczogc3RyaW5nO1xuICBibG9ja0hhc2g6IHN0cmluZztcbiAgZmVlTGltaXQ6IHN0cmluZztcbn0ge1xuICBjb25zdCBieXRlcyA9IEJ1ZmZlci5mcm9tKGhleFN0cmluZywgJ2hleCcpO1xuXG4gIGxldCByYXc7XG4gIHRyeSB7XG4gICAgLy8gd2UgbmVlZCB0byBkZWNvZGUgb3VyIHJhd19kYXRhX2hleCBmaWVsZCBmaXJzdFxuICAgIHJhdyA9IHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5kZWNvZGUoYnl0ZXMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgaW5pdGlhbCByYXdfZGF0YV9oZXggZnJvbSB0aGUgc2VyaWFsaXplZCB0eC4nKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwaXJhdGlvbjogTnVtYmVyKHJhdy5leHBpcmF0aW9uKSxcbiAgICB0aW1lc3RhbXA6IE51bWJlcihyYXcudGltZXN0YW1wKSxcbiAgICBjb250cmFjdHM6IHJhdy5jb250cmFjdCxcbiAgICBibG9ja0J5dGVzOiB0b0hleChyYXcucmVmQmxvY2tCeXRlcyksXG4gICAgZmVlTGltaXQ6IHJhdy5mZWVMaW1pdCxcbiAgICBibG9ja0hhc2g6IHRvSGV4KHJhdy5yZWZCbG9ja0hhc2gpLFxuICB9O1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwYXNzZWQgc3RyaW5nIGlzIGEgc2FmZSBoZXggc3RyaW5nIGZvciB0cm9uJ3MgcHVycG9zZXMuXG4gKlxuICogQHBhcmFtIGhleCBBIHZhbGlkIGhleCBzdHJpbmcgbXVzdCBiZSBhIHN0cmluZyBtYWRlIG9mIG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgYW5kIGhhcyBhbiBldmVuIGxlbmd0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXgoaGV4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eKDB4KT8oWzAtOWEtZl17Mn0pKyQvaS50ZXN0KGhleCk7XG59XG5cbi8qKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggd2hpY2ggY29ycmVzcG9uZHMgd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNmZXJcbiAqXG4gKiBAcGFyYW0gdHJhbnNmZXJIZXggaXMgdGhlIHZhbHVlIHByb3BlcnR5IG9mIHRoZSBcInBhcmFtZXRlclwiIGZpZWxkIG9mIGNvbnRyYWN0TGlzdFswXVxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUcmFuc2ZlckNvbnRyYWN0KHRyYW5zZmVySGV4OiBzdHJpbmcpOiBUcmFuc2ZlckNvbnRyYWN0W10ge1xuICBjb25zdCBjb250cmFjdEJ5dGVzID0gQnVmZmVyLmZyb20odHJhbnNmZXJIZXgsICdiYXNlNjQnKTtcbiAgbGV0IHRyYW5zZmVyQ29udHJhY3Q7XG5cbiAgdHJ5IHtcbiAgICB0cmFuc2ZlckNvbnRyYWN0ID0gcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdC5kZWNvZGUoY29udHJhY3RCeXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSB0cmFuc2ZlciBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIXRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB0cmFuc2ZlciBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGlmICghdHJhbnNmZXJDb250cmFjdC50b0FkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRGVzdGluYXRpb24gYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRyYW5zZmVyIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCF0cmFuc2ZlckNvbnRyYWN0Lmhhc093blByb3BlcnR5KCdhbW91bnQnKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdBbW91bnQgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB0cmFuc2ZlciBjb250cmFjdC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKHRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCB0b19hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odHJhbnNmZXJDb250cmFjdC50b0FkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGFtb3VudCA9IHRyYW5zZmVyQ29udHJhY3QuYW1vdW50O1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgYW1vdW50OiBOdW1iZXIoYW1vdW50KSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHRvX2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB0cmlnZ2VyIHNtYXJ0IGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFxuICogQHJldHVybnMge0FjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUcmlnZ2VyU21hcnRDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFRyaWdnZXJTbWFydENvbnRyYWN0W10ge1xuICBsZXQgY29udHJhY3RDYWxsRGVjb2RlZDtcbiAgdHJ5IHtcbiAgICBjb250cmFjdENhbGxEZWNvZGVkID0gcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIGNvbnRyYWN0IGNhbGwgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCFjb250cmFjdENhbGxEZWNvZGVkLm93bmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdPd25lciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIGlmICghY29udHJhY3RDYWxsRGVjb2RlZC5jb250cmFjdEFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRGVzdGluYXRpb24gY29udHJhY3QgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGNvbnRyYWN0IGNhbGwuJyk7XG4gIH1cblxuICBpZiAoIWNvbnRyYWN0Q2FsbERlY29kZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdEYXRhIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKGNvbnRyYWN0Q2FsbERlY29kZWQub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCBjb250cmFjdF9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oY29udHJhY3RDYWxsRGVjb2RlZC5jb250cmFjdEFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGRhdGEgPSBjb250cmFjdENhbGxEZWNvZGVkLmRhdGE7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIGNvbnRyYWN0X2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgY29udHJhY3Qgd2hpY2ggdXBkYXRlc1xuICogYWNjb3VudCBwZXJtaXNzaW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFxuICogQHJldHVybnMge0FjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCB7XG4gIGNvbnN0IGFjY291bnRVcGRhdGVDb250cmFjdCA9IHByb3RvY29sLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgYXNzZXJ0KGFjY291bnRVcGRhdGVDb250cmFjdC5vd25lckFkZHJlc3MpO1xuICBhc3NlcnQoYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyKTtcbiAgYXNzZXJ0KGFjY291bnRVcGRhdGVDb250cmFjdC5oYXNPd25Qcm9wZXJ0eSgnYWN0aXZlcycpKTtcblxuICBjb25zdCBvd25lckFkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShhY2NvdW50VXBkYXRlQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCBvd25lcjogUGVybWlzc2lvbiA9IGNyZWF0ZVBlcm1pc3Npb24oYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyKTtcbiAgbGV0IHdpdG5lc3M6IFBlcm1pc3Npb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmIChhY2NvdW50VXBkYXRlQ29udHJhY3Qud2l0bmVzcykge1xuICAgIHdpdG5lc3MgPSBjcmVhdGVQZXJtaXNzaW9uKGFjY291bnRVcGRhdGVDb250cmFjdC53aXRuZXNzKTtcbiAgfVxuICBjb25zdCBhY3RpdmVMaXN0ID0gYWNjb3VudFVwZGF0ZUNvbnRyYWN0LmFjdGl2ZXMubWFwKChhY3RpdmUpID0+IGNyZWF0ZVBlcm1pc3Npb24oYWN0aXZlKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBvd25lckFkZHJlc3MsXG4gICAgb3duZXIsXG4gICAgd2l0bmVzcyxcbiAgICBhY3RpdmVzOiBhY3RpdmVMaXN0LFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSByYXdcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGVybWlzc2lvbihyYXc6IHsgcGVybWlzc2lvbk5hbWU6IHN0cmluZzsgdGhyZXNob2xkOiBudW1iZXIgfSk6IFBlcm1pc3Npb24ge1xuICBsZXQgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlO1xuICBjb25zdCBwZXJtaXNzaW9uID0gcmF3LnBlcm1pc3Npb25OYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBpZiAocGVybWlzc2lvbiA9PT0gJ293bmVyJykge1xuICAgIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGUuT3duZXI7XG4gIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PT0gJ3dpdG5lc3MnKSB7XG4gICAgcGVybWlzc2lvblR5cGUgPSBQZXJtaXNzaW9uVHlwZS5XaXRuZXNzO1xuICB9IGVsc2UgaWYgKHBlcm1pc3Npb24uc3Vic3RyKDAsIDYpID09PSAnYWN0aXZlJykge1xuICAgIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGUuQWN0aXZlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdQZXJtaXNzaW9uIHR5cGUgbm90IHBhcnNlYWJsZS4nKTtcbiAgfVxuICByZXR1cm4geyB0eXBlOiBwZXJtaXNzaW9uVHlwZSwgdGhyZXNob2xkOiByYXcudGhyZXNob2xkIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVHhKc29uU3RyaW5nKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgcmV0dXJuIHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCd0eElEJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCByYXcgdHJhbnNhY3Rpb24gYWNjb21tb2RhdGVzIHRvIGJpdGdvJ3MgcHJlZmVycmVkIGZvcm1hdFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdUcmFuc2FjdGlvbiAtIFRoZSByYXcgdHJhbnNhY3Rpb24gdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMge2Jvb2xlYW59IHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFJhd1RyYW5zYWN0aW9uRm9ybWF0KHJhd1RyYW5zYWN0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycgJiYgKGlzVmFsaWRIZXgocmF3VHJhbnNhY3Rpb24pIHx8IGlzVmFsaWRUeEpzb25TdHJpbmcocmF3VHJhbnNhY3Rpb24pKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgVWludDhBcnJheX0gYnVmZmVyIC0gdGhlIGJ1ZmZlciB0byBiZSBjb252ZXJ0ZWQgdG8gaGV4XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBoZXggdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSGV4KGJ1ZmZlcjogQnVmZmVyIHwgVWludDhBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiBoZXguZW5jb2RlKGJ1ZmZlciwgdHJ1ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEtlY2Nhay0yNTYgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHBhcmFtZXRlcnNcbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBzdHJpbmdzIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIHRoZSB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZXMgLSB2YWx1ZSB0byBlbmNvZGVcbiAqIEBwYXJhbSBtZXRob2RJZCAtIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIHRoZSBmdW5jdGlvbiBzZWxlY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRGF0YVBhcmFtcyh0eXBlczogc3RyaW5nW10sIHZhbHVlczogYW55W10sIG1ldGhvZElkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHlwZXMuZm9yRWFjaCgodHlwZSwgaW5kZXgpID0+IHtcbiAgICBpZiAodHlwZSA9PSAnYWRkcmVzcycpIHtcbiAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZXNbaW5kZXhdLnJlcGxhY2UoQUREUkVTU19QUkVGSVhfUkVHRVgsICcweCcpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgYWJpQ29kZXIgPSBuZXcgQWJpQ29kZXIoKTtcbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IGFiaUNvZGVyLmVuY29kZSh0eXBlcywgdmFsdWVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZW5jb2RpbmcgdGhlIGRhdGEgcGFyYW1zLicpO1xuICB9XG4gIGlmIChtZXRob2RJZCkge1xuICAgIHJldHVybiBoZXhDb25jYXQoW21ldGhvZElkLCBkYXRhXSkucmVwbGFjZSgvXigweCkvLCAnJyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvXigweCkvLCAnJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWNvZGVkIHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlIGFycmF5IG9mIHR5cGVzXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gc3RyaW5ncyBkZXNjcmliaW5nIHRoZSB0eXBlcyBvZiB0aGUgdmFsdWVzXG4gKiBAcGFyYW0gZGF0YSAtIGVuY29kZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVEYXRhUGFyYW1zKHR5cGVzOiBzdHJpbmdbXSwgZGF0YTogc3RyaW5nKTogYW55W10ge1xuICBjb25zdCBhYmlDb2RlciA9IG5ldyBBYmlDb2RlcigpO1xuICBkYXRhID0gJzB4JyArIGRhdGEuc3Vic3RyaW5nKDgpO1xuICByZXR1cm4gYWJpQ29kZXIuZGVjb2RlKHR5cGVzLCBkYXRhKS5yZWR1Y2UoKG9iaiwgYXJnLCBpbmRleCkgPT4ge1xuICAgIGlmICh0eXBlc1tpbmRleF0gPT0gJ2FkZHJlc3MnKSBhcmcgPSBBRERSRVNTX1BSRUZJWCArIGFyZy5zdWJzdHIoMikudG9Mb3dlckNhc2UoKTtcbiAgICBvYmoucHVzaChhcmcpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sIFtdKTtcbn1cbiJdfQ==
|
|
756
|
+
/**
|
|
757
|
+
* Generate raw_data_hex for a TRON transaction
|
|
758
|
+
*
|
|
759
|
+
* @param {Object} rawData - The transaction raw data object containing:
|
|
760
|
+
* @param {Array} rawData.contract - Array of contract objects
|
|
761
|
+
* @param {string} rawData.refBlockBytes - Reference block bytes
|
|
762
|
+
* @param {string} rawData.refBlockHash - Reference block hash
|
|
763
|
+
* @param {number} rawData.expiration - Transaction expiration timestamp
|
|
764
|
+
* @param {number} rawData.timestamp - Transaction creation timestamp
|
|
765
|
+
* @param {number} [rawData.feeLimit] - Optional fee limit for smart contracts
|
|
766
|
+
* @returns {string} The hex string representation of the encoded transaction data
|
|
767
|
+
*/
|
|
768
|
+
function generateRawDataHex(rawData = {}) {
|
|
769
|
+
try {
|
|
770
|
+
// Process contracts to ensure proper protobuf encoding
|
|
771
|
+
let processedContracts = rawData.contract;
|
|
772
|
+
if (rawData.contract && rawData.contract.length > 0) {
|
|
773
|
+
processedContracts = rawData.contract.map((contract) => {
|
|
774
|
+
// Handle TransferContract specifically
|
|
775
|
+
if (contract.parameter?.type_url === 'type.googleapis.com/protocol.TransferContract') {
|
|
776
|
+
const contractValue = contract.parameter.value;
|
|
777
|
+
// Create the protobuf contract object
|
|
778
|
+
const transferContract = {};
|
|
779
|
+
// Handle owner_address (required field)
|
|
780
|
+
if (contractValue.owner_address) {
|
|
781
|
+
transferContract.ownerAddress = Buffer.from(contractValue.owner_address, 'hex');
|
|
782
|
+
}
|
|
783
|
+
// Handle to_address (required field)
|
|
784
|
+
if (contractValue.to_address) {
|
|
785
|
+
transferContract.toAddress = Buffer.from(contractValue.to_address, 'hex');
|
|
786
|
+
}
|
|
787
|
+
// Handle amount (required field)
|
|
788
|
+
if (contractValue.amount !== undefined) {
|
|
789
|
+
transferContract.amount = contractValue.amount;
|
|
790
|
+
}
|
|
791
|
+
// Encode the contract using protobuf
|
|
792
|
+
const encodedContract = tron_1.protocol.TransferContract.encode(transferContract).finish();
|
|
793
|
+
const base64Value = Buffer.from(encodedContract).toString('base64');
|
|
794
|
+
return {
|
|
795
|
+
...contract,
|
|
796
|
+
parameter: {
|
|
797
|
+
...contract.parameter,
|
|
798
|
+
value: base64Value,
|
|
799
|
+
},
|
|
800
|
+
};
|
|
801
|
+
}
|
|
802
|
+
return contract;
|
|
803
|
+
});
|
|
804
|
+
}
|
|
805
|
+
// Create raw transaction object matching protobuf schema
|
|
806
|
+
const rawTx = {
|
|
807
|
+
contract: processedContracts,
|
|
808
|
+
refBlockBytes: rawData.refBlockBytes ? Buffer.from(rawData.refBlockBytes, 'hex') : undefined,
|
|
809
|
+
refBlockHash: rawData.refBlockHash ? Buffer.from(rawData.refBlockHash, 'hex') : undefined,
|
|
810
|
+
expiration: rawData.expiration,
|
|
811
|
+
timestamp: rawData.timestamp,
|
|
812
|
+
feeLimit: rawData.feeLimit,
|
|
813
|
+
};
|
|
814
|
+
// Encode using protobuf and get final bytes
|
|
815
|
+
const encodedBytes = tron_1.protocol.Transaction.raw.encode(rawTx).finish();
|
|
816
|
+
// Convert to hex string
|
|
817
|
+
return Buffer.from(encodedBytes).toString('hex');
|
|
818
|
+
}
|
|
819
|
+
catch (e) {
|
|
820
|
+
throw new sdk_core_1.UtilsError('Failed to generate raw data hex: ' + e.message);
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlEQSwwQ0FFQztBQUtELGdFQUVDO0FBS0QsZ0VBRUM7QUFRRCwwQ0FtQkM7QUFLRCx3RUFTQztBQUlELGtEQUVDO0FBS0Qsb0RBRUM7QUFLRCxzRUFFQztBQUtELDBEQUdDO0FBTUQsMENBRUM7QUFPRCxnQ0FFQztBQUtELDBEQUVDO0FBT0QsOENBMkVDO0FBU0Qsb0RBMEJDO0FBUUQsNENBR0M7QUFPRCxnQ0FFQztBQU1ELHdEQTBDQztBQVFELGdFQXVDQztBQVNELHNGQXNCQztBQVFELHNFQXNDQztBQVFELDhEQWlEQztBQVFELDBFQXdDQztBQVNELHNFQTBCQztBQVFELG9GQTBCQztBQVFELHdFQTRDQztBQVFELDRFQTRDQztBQXVCRCxrREFHQztBQVFELGtFQUtDO0FBUUQsc0JBRUM7QUFTRCw0Q0FtQkM7QUFRRCw0Q0FRQztBQWNELGdEQXdFQztBQXA2QkQsb0RBQTRCO0FBQzVCLG9EQUFzQztBQUN0QyxpREFBbUM7QUFDbkMsd0RBQXlEO0FBRXpELG1EQUFrRDtBQUNsRCxpREFBMkQ7QUFtQjNELGlDQUFvRTtBQUNwRSw0Q0FBdUQ7QUFDdkQsMkNBQWtEO0FBRXJDLFFBQUEsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLENBQUMsVUFBVTtBQUNqRCxRQUFBLDhCQUE4QixHQUFHLFFBQVEsQ0FBQyxDQUFDLGNBQWM7QUFDdEUsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBSTVCLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBTyxHQUFHLFNBQVMsRUFBRSxFQUFFO0lBQzVDLE9BQ0UsZUFBSztTQUNGLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxD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QUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3pGLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUM5QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1NBQzNCLENBQUM7UUFFRiw0Q0FBNEM7UUFDNUMsTUFBTSxZQUFZLEdBQUcsZUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRXJFLHdCQUF3QjtRQUN4QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLHFCQUFVLENBQUMsbUNBQW1DLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgaGV4IGZyb20gJ0BzdGFibGVsaWIvaGV4JztcbmltcG9ydCAqIGFzIHRyb253ZWIgZnJvbSAndHJvbndlYic7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9wcm90b2J1Zi90cm9uJztcblxuaW1wb3J0IHsgVXRpbHNFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyb25FcmMyMENvaW4sIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBUcmFuc2ZlckNvbnRyYWN0LFxuICBSYXdEYXRhLFxuICBBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0LFxuICBUcmFuc2FjdGlvblJlY2VpcHQsXG4gIFBlcm1pc3Npb24sXG4gIFRyaWdnZXJTbWFydENvbnRyYWN0LFxuICBGcmVlemVCYWxhbmNlQ29udHJhY3RQYXJhbWV0ZXIsXG4gIFZvdGVXaXRuZXNzQ29udHJhY3RQYXJhbWV0ZXIsXG4gIEZyZWV6ZUNvbnRyYWN0RGVjb2RlZCxcbiAgVm90ZUNvbnRyYWN0RGVjb2RlZCxcbiAgVW5mcmVlemVCYWxhbmNlQ29udHJhY3RQYXJhbWV0ZXIsXG4gIFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdFBhcmFtZXRlcixcbiAgVW5mcmVlemVDb250cmFjdERlY29kZWQsXG4gIFdpdGhkcmF3Q29udHJhY3REZWNvZGVkLFxuICBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcixcbiAgUmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3REZWNvZGVkLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IENvbnRyYWN0VHlwZSwgUGVybWlzc2lvblR5cGUsIFRyb25SZXNvdXJjZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBBYmlDb2RlciwgaGV4Q29uY2F0IH0gZnJvbSAnZXRoZXJzL2xpYi91dGlscyc7XG5pbXBvcnQgeyBERUxFR0FUSU9OX1RZUEVfVVJMIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fTUFYX0VYUElSQVRJT04gPSA4NjQwMDAwMDsgLy8gb25lIGRheVxuZXhwb3J0IGNvbnN0IFRSQU5TQUNUSU9OX0RFRkFVTFRfRVhQSVJBVElPTiA9IDEwODAwMDAwOyAvLyB0aHJlZSBob3Vyc1xuY29uc3QgQUREUkVTU19QUkVGSVhfUkVHRVggPSAvXig0MSkvO1xuY29uc3QgQUREUkVTU19QUkVGSVggPSAnNDEnO1xuXG5leHBvcnQgdHlwZSBCeXRlc0xpa2UgPSBudW1iZXJbXSB8IFVpbnQ4QXJyYXk7XG5cbmNvbnN0IGdldFRyb25Ub2tlbnMgPSAobmV0d29yayA9ICdtYWlubmV0JykgPT4ge1xuICByZXR1cm4gKFxuICAgIGNvaW5zXG4gICAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luLmZhbWlseSA9PT0gJ3RyeCcpXG4gICAgICAuZmlsdGVyKCh0cngpID0+IHRyeC5uZXR3b3JrLnR5cGUgPT09IG5ldHdvcmsgJiYgdHJ4LmlzVG9rZW4pIGFzIHVua25vd24gYXMgVHJvbkVyYzIwQ29pbltdXG4gICkubWFwKChjb2lucykgPT4gY29pbnMuY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRva2VuTWFpbm5ldENvbnRyYWN0QWRkcmVzc2VzID0gZ2V0VHJvblRva2VucygnbWFpbm5ldCcpO1xuZXhwb3J0IGNvbnN0IHRva2VuVGVzdG5ldENvbnRyYWN0QWRkcmVzc2VzID0gZ2V0VHJvblRva2VucygndGVzdG5ldCcpO1xuLyoqXG4gKiBUcm9uLXNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgQnl0ZUFycmF5ID0gbnVtYmVyW107XG5leHBvcnQgdHlwZSBUcm9uQmluYXJ5TGlrZSA9IEJ5dGVBcnJheSB8IEJ1ZmZlciB8IFVpbnQ4QXJyYXkgfCBzdHJpbmc7XG5cbmV4cG9ydCBjb25zdCBWQUxJRF9SRVNPVVJDRV9UWVBFUyA9IFsnRU5FUkdZJywgJ0JBTkRXSURUSCddO1xuXG4vKipcbiAqIEBwYXJhbSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Jhc2U1OEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5pc0FkZHJlc3NWYWxpZChhZGRyZXNzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gc3RyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhzdHI6IHN0cmluZyk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNvZGUuaGV4U3RyMmJ5dGVBcnJheShzdHIucmVwbGFjZSgnMHgnLCAnJykpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhcnJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhleEFkZHJlc3NGcm9tQnl0ZUFycmF5KGFycjogQnl0ZUFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIHRyb253ZWIudXRpbHMuY29kZS5ieXRlQXJyYXkyaGV4U3RyKGFycik7XG59XG5cbi8qKlxuICogQHBhcmFtIG1lc3NhZ2VUb1ZlcmlmeVxuICogQHBhcmFtIGJhc2U1OEFkZHJlc3NcbiAqIEBwYXJhbSBzaWdIZXhcbiAqIEBwYXJhbSB1c2VUcm9uSGVhZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUoXG4gIG1lc3NhZ2VUb1ZlcmlmeTogc3RyaW5nLFxuICBiYXNlNThBZGRyZXNzOiBzdHJpbmcsXG4gIHNpZ0hleDogc3RyaW5nLFxuICB1c2VUcm9uSGVhZGVyID0gdHJ1ZVxuKTogYm9vbGVhbiB7XG4gIGlmICghaXNWYWxpZEhleChzaWdIZXgpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ3NpZ25hdHVyZSBpcyBub3QgaW4gYSB2YWxpZCBmb3JtYXQsIG5lZWRzIHRvIGJlIGhleGFkZWNpbWFsJyk7XG4gIH1cblxuICBpZiAoIWlzVmFsaWRIZXgobWVzc2FnZVRvVmVyaWZ5KSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdtZXNzYWdlIGlzIG5vdCBpbiBhIHZhbGlkIGZvcm1hdCwgbmVlZHMgdG8gYmUgaGV4YWRlY2ltYWwnKTtcbiAgfVxuXG4gIGlmICghaXNCYXNlNThBZGRyZXNzKGJhc2U1OEFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ2FkZHJlc3MgbmVlZHMgdG8gYmUgYmFzZTU4IGVuY29kZWQnKTtcbiAgfVxuXG4gIHJldHVybiB0cm9ud2ViLlRyeC52ZXJpZnlTaWduYXR1cmUobWVzc2FnZVRvVmVyaWZ5LCBiYXNlNThBZGRyZXNzLCBzaWdIZXgsIHVzZVRyb25IZWFkZXIpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBiYXNlNThcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhiYXNlNTg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIHB1bGxlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vVFJPTi1VUy90cm9ud2ViL2Jsb2IvZGNiOGVmYTM2YTVlYmI2NWM0ZGFiMzYyNmU5MDI1NmE0NTNmM2IwZC9zcmMvdXRpbHMvaGVscC5qcyNMMTdcbiAgLy8gYnV0IHRoZXkgZG9uJ3Qgc3VyZmFjZSB0aGlzIGNhbGwgaW4gaW5kZXguanNcbiAgY29uc3QgYnl0ZXMgPSB0cm9ud2ViLnV0aWxzLmNyeXB0by5kZWNvZGVCYXNlNThBZGRyZXNzKGJhc2U1OCk7XG4gIC8vIEVuc3VyZSBieXRlcyBpcyBhIEJ5dGVBcnJheSAobnVtYmVyW10pXG4gIGlmIChBcnJheS5pc0FycmF5KGJ5dGVzKSkge1xuICAgIHJldHVybiBnZXRIZXhBZGRyZXNzRnJvbUJ5dGVBcnJheShieXRlcyk7XG4gIH1cbiAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0ZhaWxlZCB0byBkZWNvZGUgYmFzZTU4IGFkZHJlc3MgdG8gYnl0ZSBhcnJheScpO1xufVxuLyoqXG4gKiBAcGFyYW0gcHJpdmF0ZUtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHViS2V5RnJvbVByaUtleShwcml2YXRlS2V5OiBUcm9uQmluYXJ5TGlrZSk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5nZXRQdWJLZXlGcm9tUHJpS2V5KHByaXZhdGVLZXkgYXMgQnl0ZXNMaWtlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHJpdmF0ZUtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc0Zyb21QcmlLZXkocHJpdmF0ZUtleTogVHJvbkJpbmFyeUxpa2UpOiBCeXRlQXJyYXkge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uZ2V0QWRkcmVzc0Zyb21QcmlLZXkocHJpdmF0ZUtleSBhcyBCeXRlc0xpa2UpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShhZGRyZXNzOiBCeXRlQXJyYXkpOiBzdHJpbmcge1xuICByZXR1cm4gdHJvbndlYi51dGlscy5jcnlwdG8uZ2V0QmFzZTU4Q2hlY2tBZGRyZXNzKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBoZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYXJyID0gZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoaGV4KTtcbiAgcmV0dXJuIGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KGFycik7XG59XG5cbi8qKlxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblRyYW5zYWN0aW9uKHByaXZhdGVLZXk6IHN0cmluZyB8IEJ5dGVBcnJheSwgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdCk6IFRyYW5zYWN0aW9uUmVjZWlwdCB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5zaWduVHJhbnNhY3Rpb24ocHJpdmF0ZUtleSwgdHJhbnNhY3Rpb24pIGFzIFRyYW5zYWN0aW9uUmVjZWlwdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHByaXZhdGVLZXlcbiAqIEBwYXJhbSB1c2VUcm9uSGVhZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduU3RyaW5nKG1lc3NhZ2U6IHN0cmluZywgcHJpdmF0ZUtleTogc3RyaW5nIHwgQnl0ZUFycmF5LCB1c2VUcm9uSGVhZGVyID0gdHJ1ZSk6IHN0cmluZyB7XG4gIHJldHVybiB0cm9ud2ViLlRyeC5zaWduU3RyaW5nKG1lc3NhZ2UsIHByaXZhdGVLZXkgYXMgc3RyaW5nLCB1c2VUcm9uSGVhZGVyKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHViQnl0ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJhd0FkZHJlc3NGcm9tUHViS2V5KHB1YkJ5dGVzOiBUcm9uQmluYXJ5TGlrZSk6IEJ5dGVBcnJheSB7XG4gIHJldHVybiB0cm9ud2ViLnV0aWxzLmNyeXB0by5jb21wdXRlQWRkcmVzcyhwdWJCeXRlcyBhcyBCeXRlc0xpa2UpO1xufVxuXG4vKipcbiAqIERlY29kZXMgYSBoZXggZW5jb2RlZCB0cmFuc2FjdGlvbiBpbiBpdHMgcHJvdG9idWYgcmVwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGhleFN0cmluZyByYXdfZGF0YV9oZXggZmllbGQgZnJvbSB0cm9uIHRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVHJhbnNhY3Rpb24oaGV4U3RyaW5nOiBzdHJpbmcpOiBSYXdEYXRhIHtcbiAgY29uc3QgcmF3VHJhbnNhY3Rpb24gPSBkZWNvZGVSYXdUcmFuc2FjdGlvbihoZXhTdHJpbmcpO1xuXG4gIC8vIHRoZXJlIHNob3VsZCBub3QgYmUgbXVsdGlwbGUgY29udHJhY3RzIGluIHRoaXMgZGF0YVxuICBpZiAocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdOdW1iZXIgb2YgY29udHJhY3RzIGlzIGdyZWF0ZXIgdGhhbiAxLicpO1xuICB9XG5cbiAgbGV0IGNvbnRyYWN0OlxuICAgIHwgVHJhbnNmZXJDb250cmFjdFtdXG4gICAgfCBBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0W11cbiAgICB8IFRyaWdnZXJTbWFydENvbnRyYWN0W11cbiAgICB8IEZyZWV6ZUJhbGFuY2VDb250cmFjdFBhcmFtZXRlcltdXG4gICAgfCBWb3RlV2l0bmVzc0NvbnRyYWN0UGFyYW1ldGVyW11cbiAgICB8IFVuZnJlZXplQmFsYW5jZUNvbnRyYWN0UGFyYW1ldGVyW11cbiAgICB8IFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdFBhcmFtZXRlcltdXG4gICAgfCBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcltdO1xuXG4gIGxldCBjb250cmFjdFR5cGU6IENvbnRyYWN0VHlwZTtcblxuICAvLyBlbnN1cmUgdGhlIGNvbnRyYWN0IHR5cGUgaXMgc3VwcG9ydGVkXG4gIHN3aXRjaCAocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci50eXBlX3VybCkge1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVHJhbnNmZXI7XG4gICAgICBjb250cmFjdCA9IGV4cG9ydHMuZGVjb2RlVHJhbnNmZXJDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuQWNjb3VudFBlcm1pc3Npb25VcGRhdGU7XG4gICAgICBjb250cmFjdCA9IGV4cG9ydHMuZGVjb2RlQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QnOlxuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLlRyaWdnZXJTbWFydENvbnRyYWN0O1xuICAgICAgY29udHJhY3QgPSBleHBvcnRzLmRlY29kZVRyaWdnZXJTbWFydENvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5GcmVlemVCYWxhbmNlVjJDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuRnJlZXplQmFsYW5jZVYyO1xuICAgICAgY29udHJhY3QgPSBkZWNvZGVGcmVlemVCYWxhbmNlVjJDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVm90ZVdpdG5lc3NDb250cmFjdCc6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVm90ZVdpdG5lc3M7XG4gICAgICBjb250cmFjdCA9IGRlY29kZVZvdGVXaXRuZXNzQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCc6XG4gICAgICBjb250cmFjdCA9IGRlY29kZVdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdChyYXdUcmFuc2FjdGlvbi5jb250cmFjdHNbMF0ucGFyYW1ldGVyLnZhbHVlKTtcbiAgICAgIGNvbnRyYWN0VHlwZSA9IENvbnRyYWN0VHlwZS5XaXRoZHJhd0V4cGlyZVVuZnJlZXplO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5XaXRoZHJhd0JhbGFuY2VDb250cmFjdCc6XG4gICAgICBjb250cmFjdCA9IGRlY29kZVdpdGhkcmF3QmFsYW5jZUNvbnRyYWN0KHJhd1RyYW5zYWN0aW9uLmNvbnRyYWN0c1swXS5wYXJhbWV0ZXIudmFsdWUpO1xuICAgICAgY29udHJhY3RUeXBlID0gQ29udHJhY3RUeXBlLldpdGhkcmF3QmFsYW5jZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdCc6XG4gICAgICBjb250cmFjdCA9IGRlY29kZVVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuVW5mcmVlemVCYWxhbmNlVjI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERFTEVHQVRJT05fVFlQRV9VUkw6XG4gICAgICBjb250cmFjdFR5cGUgPSBDb250cmFjdFR5cGUuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0O1xuICAgICAgY29udHJhY3QgPSBkZWNvZGVEZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlVuRGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0JzpcbiAgICAgIGNvbnRyYWN0VHlwZSA9IENvbnRyYWN0VHlwZS5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdDtcbiAgICAgIGNvbnRyYWN0ID0gZGVjb2RlVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QocmF3VHJhbnNhY3Rpb24uY29udHJhY3RzWzBdLnBhcmFtZXRlci52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbnRyYWN0IHR5cGUnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29udHJhY3RUeXBlLFxuICAgIGNvbnRyYWN0LFxuICAgIGV4cGlyYXRpb246IHJhd1RyYW5zYWN0aW9uLmV4cGlyYXRpb24sXG4gICAgdGltZXN0YW1wOiByYXdUcmFuc2FjdGlvbi50aW1lc3RhbXAsXG4gICAgcmVmX2Jsb2NrX2J5dGVzOiByYXdUcmFuc2FjdGlvbi5ibG9ja0J5dGVzLFxuICAgIHJlZl9ibG9ja19oYXNoOiByYXdUcmFuc2FjdGlvbi5ibG9ja0hhc2gsXG4gICAgZmVlX2xpbWl0OiArcmF3VHJhbnNhY3Rpb24uZmVlTGltaXQsXG4gIH07XG59XG5cbi8qKlxuICogRGVjb2RlcyBhIHRyYW5zYWN0aW9uJ3MgcmF3IGZpZWxkIGZyb20gYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuIFRoaXMgaXMgYSBwcm90b2J1ZiByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gaGV4U3RyaW5nIHRoaXMgaXMgdGhlIHJhdyBoZXhhZGVjaW1hbCBlbmNvZGVkIHN0cmluZy4gRG9jIGZvdW5kIGluIHRoZSBmb2xsb3dpbmcgbGluay5cbiAqIEBleGFtcGxlXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vQml0R28vYml0Z28tYWNjb3VudC1saWIvYmxvYi81ZjI4MjU4ODcwMTc3OGE0NDIxYzc1ZmE2MWY0MjcxM2Y1NmU5NWI5L3Jlc291cmNlcy9wcm90b2J1Zi90cm9uLnByb3RvI0wzMTl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVSYXdUcmFuc2FjdGlvbihoZXhTdHJpbmc6IHN0cmluZyk6IHtcbiAgZXhwaXJhdGlvbjogbnVtYmVyO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgY29udHJhY3RzOiBBcnJheTxhbnk+O1xuICBibG9ja0J5dGVzOiBzdHJpbmc7XG4gIGJsb2NrSGFzaDogc3RyaW5nO1xuICBmZWVMaW1pdDogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4Jyk7XG5cbiAgbGV0IHJhdztcbiAgdHJ5IHtcbiAgICAvLyB3ZSBuZWVkIHRvIGRlY29kZSBvdXIgcmF3X2RhdGFfaGV4IGZpZWxkIGZpcnN0XG4gICAgcmF3ID0gcHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmRlY29kZShieXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSBpbml0aWFsIHJhd19kYXRhX2hleCBmcm9tIHRoZSBzZXJpYWxpemVkIHR4LicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBpcmF0aW9uOiBOdW1iZXIocmF3LmV4cGlyYXRpb24pLFxuICAgIHRpbWVzdGFtcDogTnVtYmVyKHJhdy50aW1lc3RhbXApLFxuICAgIGNvbnRyYWN0czogcmF3LmNvbnRyYWN0LFxuICAgIGJsb2NrQnl0ZXM6IHRvSGV4KHJhdy5yZWZCbG9ja0J5dGVzKSxcbiAgICBmZWVMaW1pdDogcmF3LmZlZUxpbWl0LFxuICAgIGJsb2NrSGFzaDogdG9IZXgocmF3LnJlZkJsb2NrSGFzaCksXG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gaGV4XG4gKlxuICogQHBhcmFtIGJhc2U2NCAtIFRoZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gY29udmVydFxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgaGV4IHJlcHJlc2VudGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZXhGcm9tQmFzZTY0KGJhc2U2NDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcoJ2hleCcpO1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwYXNzZWQgc3RyaW5nIGlzIGEgc2FmZSBoZXggc3RyaW5nIGZvciB0cm9uJ3MgcHVycG9zZXMuXG4gKlxuICogQHBhcmFtIGhleCBBIHZhbGlkIGhleCBzdHJpbmcgbXVzdCBiZSBhIHN0cmluZyBtYWRlIG9mIG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgYW5kIGhhcyBhbiBldmVuIGxlbmd0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXgoaGV4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eKDB4KT8oWzAtOWEtZl17Mn0pKyQvaS50ZXN0KGhleCk7XG59XG5cbi8qKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggd2hpY2ggY29ycmVzcG9uZHMgd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNmZXJcbiAqXG4gKiBAcGFyYW0gdHJhbnNmZXJIZXggaXMgdGhlIHZhbHVlIHByb3BlcnR5IG9mIHRoZSBcInBhcmFtZXRlclwiIGZpZWxkIG9mIGNvbnRyYWN0TGlzdFswXVxuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUcmFuc2ZlckNvbnRyYWN0KHRyYW5zZmVySGV4OiBzdHJpbmcpOiBUcmFuc2ZlckNvbnRyYWN0W10ge1xuICBjb25zdCBjb250cmFjdEJ5dGVzID0gQnVmZmVyLmZyb20odHJhbnNmZXJIZXgsICdiYXNlNjQnKTtcbiAgbGV0IHRyYW5zZmVyQ29udHJhY3Q7XG5cbiAgdHJ5IHtcbiAgICB0cmFuc2ZlckNvbnRyYWN0ID0gcHJvdG9jb2wuVHJhbnNmZXJDb250cmFjdC5kZWNvZGUoY29udHJhY3RCeXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSB0cmFuc2ZlciBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIXRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB0cmFuc2ZlciBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGlmICghdHJhbnNmZXJDb250cmFjdC50b0FkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRGVzdGluYXRpb24gYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRyYW5zZmVyIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCF0cmFuc2ZlckNvbnRyYWN0Lmhhc093blByb3BlcnR5KCdhbW91bnQnKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdBbW91bnQgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB0cmFuc2ZlciBjb250cmFjdC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKHRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCB0b19hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odHJhbnNmZXJDb250cmFjdC50b0FkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGFtb3VudCA9IHRyYW5zZmVyQ29udHJhY3QuYW1vdW50O1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgYW1vdW50OiBOdW1iZXIoYW1vdW50KSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHRvX2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB0cmlnZ2VyIHNtYXJ0IGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFxuICogQHJldHVybnMge0FjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUcmlnZ2VyU21hcnRDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFRyaWdnZXJTbWFydENvbnRyYWN0W10ge1xuICBsZXQgY29udHJhY3RDYWxsRGVjb2RlZDtcbiAgdHJ5IHtcbiAgICBjb250cmFjdENhbGxEZWNvZGVkID0gcHJvdG9jb2wuVHJpZ2dlclNtYXJ0Q29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIGNvbnRyYWN0IGNhbGwgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCFjb250cmFjdENhbGxEZWNvZGVkLm93bmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdPd25lciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIGlmICghY29udHJhY3RDYWxsRGVjb2RlZC5jb250cmFjdEFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignRGVzdGluYXRpb24gY29udHJhY3QgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGNvbnRyYWN0IGNhbGwuJyk7XG4gIH1cblxuICBpZiAoIWNvbnRyYWN0Q2FsbERlY29kZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdEYXRhIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgY29udHJhY3QgY2FsbC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKGNvbnRyYWN0Q2FsbERlY29kZWQub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCBjb250cmFjdF9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oY29udHJhY3RDYWxsRGVjb2RlZC5jb250cmFjdEFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG4gIGNvbnN0IGRhdGEgPSBjb250cmFjdENhbGxEZWNvZGVkLmRhdGE7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIGNvbnRyYWN0X2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgY29udHJhY3Qgd2hpY2ggdXBkYXRlc1xuICogYWNjb3VudCBwZXJtaXNzaW9uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NFxuICogQHJldHVybnMge0FjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVBY2NvdW50UGVybWlzc2lvblVwZGF0ZUNvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogQWNjb3VudFBlcm1pc3Npb25VcGRhdGVDb250cmFjdCB7XG4gIGNvbnN0IGFjY291bnRVcGRhdGVDb250cmFjdCA9IHByb3RvY29sLkFjY291bnRQZXJtaXNzaW9uVXBkYXRlQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgYXNzZXJ0KGFjY291bnRVcGRhdGVDb250cmFjdC5vd25lckFkZHJlc3MpO1xuICBhc3NlcnQoYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyKTtcbiAgYXNzZXJ0KGFjY291bnRVcGRhdGVDb250cmFjdC5oYXNPd25Qcm9wZXJ0eSgnYWN0aXZlcycpKTtcblxuICBjb25zdCBvd25lckFkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShhY2NvdW50VXBkYXRlQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuICBjb25zdCBvd25lcjogUGVybWlzc2lvbiA9IGNyZWF0ZVBlcm1pc3Npb24oYWNjb3VudFVwZGF0ZUNvbnRyYWN0Lm93bmVyKTtcbiAgbGV0IHdpdG5lc3M6IFBlcm1pc3Npb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmIChhY2NvdW50VXBkYXRlQ29udHJhY3Qud2l0bmVzcykge1xuICAgIHdpdG5lc3MgPSBjcmVhdGVQZXJtaXNzaW9uKGFjY291bnRVcGRhdGVDb250cmFjdC53aXRuZXNzKTtcbiAgfVxuICBjb25zdCBhY3RpdmVMaXN0ID0gYWNjb3VudFVwZGF0ZUNvbnRyYWN0LmFjdGl2ZXMubWFwKChhY3RpdmUpID0+IGNyZWF0ZVBlcm1pc3Npb24oYWN0aXZlKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBvd25lckFkZHJlc3MsXG4gICAgb3duZXIsXG4gICAgd2l0bmVzcyxcbiAgICBhY3RpdmVzOiBhY3RpdmVMaXN0LFxuICB9O1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggZnJlZXplIGJhbGFuY2UgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIGNvbnRyYWN0IGRhdGFcbiAqIEByZXR1cm5zIHtGcmVlemVCYWxhbmNlQ29udHJhY3RQYXJhbWV0ZXJbXX0gLSBBcnJheSBjb250YWluaW5nIHRoZSBkZWNvZGVkIGZyZWV6ZSBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRnJlZXplQmFsYW5jZVYyQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBGcmVlemVCYWxhbmNlQ29udHJhY3RQYXJhbWV0ZXJbXSB7XG4gIGxldCBmcmVlemVDb250cmFjdDogRnJlZXplQ29udHJhY3REZWNvZGVkO1xuICB0cnkge1xuICAgIGZyZWV6ZUNvbnRyYWN0ID0gcHJvdG9jb2wuRnJlZXplQmFsYW5jZVYyQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIGZyZWV6ZSBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIWZyZWV6ZUNvbnRyYWN0Lm93bmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdPd25lciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZnJlZXplIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKGZyZWV6ZUNvbnRyYWN0LmZyb3plbkJhbGFuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdGcm96ZW4gYmFsYW5jZSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGZyZWV6ZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGNvbnN0IG93bmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbShmcmVlemVDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgLy8gSW4gcHJvdG9idWYzLCBkZWZhdWx0IHZhbHVlcyAoQkFORFdJRFRIID0gMCkgbWF5IGJlIG9taXR0ZWQgZnJvbSBzZXJpYWxpemF0aW9uLlxuICAvLyBJZiByZXNvdXJjZSBpcyB1bmRlZmluZWQsIGRlZmF1bHQgdG8gQkFORFdJRFRILlxuICBjb25zdCByZXNvdXJjZVZhbHVlID1cbiAgICBmcmVlemVDb250cmFjdC5yZXNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IGZyZWV6ZUNvbnRyYWN0LnJlc291cmNlID09PSAnQkFORFdJRFRIJ1xuICAgICAgPyBUcm9uUmVzb3VyY2UuQkFORFdJRFRIXG4gICAgICA6IFRyb25SZXNvdXJjZS5FTkVSR1k7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VWYWx1ZSxcbiAgICAgICAgICBmcm96ZW5fYmFsYW5jZTogTnVtYmVyKGZyZWV6ZUNvbnRyYWN0LmZyb3plbkJhbGFuY2UpLFxuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogRGVzZXJpYWxpemUgdGhlIHNlZ21lbnQgb2YgdGhlIHR4SGV4IGNvcnJlc3BvbmRpbmcgd2l0aCB2b3RlIHdpdG5lc3MgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIGNvbnRyYWN0IGRhdGFcbiAqIEByZXR1cm5zIHtWb3RlV2l0bmVzc0NvbnRyYWN0UGFyYW1ldGVyW119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCB2b3RlIHdpdG5lc3MgY29udHJhY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVZvdGVXaXRuZXNzQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBWb3RlV2l0bmVzc0NvbnRyYWN0UGFyYW1ldGVyW10ge1xuICBsZXQgdm90ZUNvbnRyYWN0OiBWb3RlQ29udHJhY3REZWNvZGVkO1xuICB0cnkge1xuICAgIHZvdGVDb250cmFjdCA9IHByb3RvY29sLlZvdGVXaXRuZXNzQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIHZvdGUgY29udHJhY3QgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCF2b3RlQ29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB2b3RlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZvdGVDb250cmFjdC52b3RlcykgfHwgdm90ZUNvbnRyYWN0LnZvdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdWb3RlcyBkbyBub3QgZXhpc3Qgb3IgYXJlIGVtcHR5IGluIHRoaXMgdm90ZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKHZvdGVDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgaW50ZXJmYWNlIFZvdGVJdGVtIHtcbiAgICB2b3RlQWRkcmVzcz86IHN0cmluZztcbiAgICB2b3RlQ291bnQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIH1cblxuICBjb25zdCB2b3RlcyA9IHZvdGVDb250cmFjdC52b3Rlcy5tYXAoKHZvdGU6IFZvdGVJdGVtKSA9PiB7XG4gICAgaWYgKCF2b3RlLnZvdGVBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVm90ZSBhZGRyZXNzIGlzIG1pc3NpbmcgaW4gb25lIG9mIHRoZSB2b3Rlcy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdm90ZV9hZGRyZXNzOiBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICAgICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odm90ZS52b3RlQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgICAgICksXG4gICAgICB2b3RlX2NvdW50OiBOdW1iZXIodm90ZS52b3RlQ291bnQgfHwgMCksXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICAgIHZvdGVzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggdW5mcmVlemUgYmFsYW5jZSBjb250cmFjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjQgLSBUaGUgYmFzZTY0IGVuY29kZWQgY29udHJhY3QgZGF0YVxuICogQHJldHVybnMge1VuZnJlZXplQmFsYW5jZUNvbnRyYWN0UGFyYW1ldGVyW119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCB1bmZyZWV6ZSBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdChiYXNlNjQ6IHN0cmluZyk6IFVuZnJlZXplQmFsYW5jZUNvbnRyYWN0UGFyYW1ldGVyW10ge1xuICBsZXQgdW5mcmVlemVDb250cmFjdDogVW5mcmVlemVDb250cmFjdERlY29kZWQ7XG4gIHRyeSB7XG4gICAgdW5mcmVlemVDb250cmFjdCA9IHByb3RvY29sLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIHVuZnJlZXplIGNvbnRyYWN0IGluIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgfVxuXG4gIGlmICghdW5mcmVlemVDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHVuZnJlZXplIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKHVuZnJlZXplQ29udHJhY3QudW5mcmVlemVCYWxhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVW5mcmVlemUgYmFsYW5jZSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHVuZnJlZXplIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odW5mcmVlemVDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgLy8gSW4gcHJvdG9idWYzLCBkZWZhdWx0IHZhbHVlcyAoQkFORFdJRFRIID0gMCkgbWF5IGJlIG9taXR0ZWQgZnJvbSBzZXJpYWxpemF0aW9uLlxuICAvLyBJZiByZXNvdXJjZSBpcyB1bmRlZmluZWQsIGRlZmF1bHQgdG8gQkFORFdJRFRILlxuICBjb25zdCByZXNvdXJjZVZhbHVlID0gdW5mcmVlemVDb250cmFjdC5yZXNvdXJjZTtcbiAgY29uc3QgcmVzb3VyY2VFbnVtID1cbiAgICByZXNvdXJjZVZhbHVlID09PSB1bmRlZmluZWQgfHwgcmVzb3VyY2VWYWx1ZSA9PT0gcHJvdG9jb2wuUmVzb3VyY2VDb2RlLkJBTkRXSURUSFxuICAgICAgPyBUcm9uUmVzb3VyY2UuQkFORFdJRFRIXG4gICAgICA6IFRyb25SZXNvdXJjZS5FTkVSR1k7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VFbnVtLFxuICAgICAgICAgIHVuZnJlZXplX2JhbGFuY2U6IE51bWJlcih1bmZyZWV6ZUNvbnRyYWN0LnVuZnJlZXplQmFsYW5jZSksXG4gICAgICAgICAgb3duZXJfYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIHdpdGhkcmF3IGJhbGFuY2UgY29udHJhY3RcbiAqIERlY29kZWQgY29udHJhY3QgaXMgdGhlIHNhbWUgYXMgd2l0aGRyYXcgZXhwaXJlIHVuZnJlZXplXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NCAtIFRoZSBiYXNlNjQgZW5jb2RlZCBjb250cmFjdCBkYXRhXG4gKiBAcmV0dXJucyB7V2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0UGFyYW1ldGVyW119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCB3aXRoZHJhdyBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3RQYXJhbWV0ZXJbXSB7XG4gIGxldCB3aXRoZHJhd0NvbnRyYWN0OiBXaXRoZHJhd0NvbnRyYWN0RGVjb2RlZDtcbiAgdHJ5IHtcbiAgICB3aXRoZHJhd0NvbnRyYWN0ID0gcHJvdG9jb2wuV2l0aGRyYXdCYWxhbmNlQ29udHJhY3QuZGVjb2RlKEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpKS50b0pTT04oKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgZGVjb2RpbmcgdGhlIHdpdGhkcmF3IGNvbnRyYWN0IGluIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgfVxuXG4gIGlmICghd2l0aGRyYXdDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHdpdGhkcmF3IGNvbnRyYWN0LicpO1xuICB9XG5cbiAgLy8gZGVzZXJpYWxpemUgYXR0cmlidXRlc1xuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20od2l0aGRyYXdDb250cmFjdC5vd25lckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBvd25lcl9hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIERlc2VyaWFsaXplIHRoZSBzZWdtZW50IG9mIHRoZSB0eEhleCBjb3JyZXNwb25kaW5nIHdpdGggd2l0aGRyYXcgZXhwaXJlIHVuZnJlZXplIGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NCAtIFRoZSBiYXNlNjQgZW5jb2RlZCBjb250cmFjdCBkYXRhXG4gKiBAcmV0dXJucyB7V2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0UGFyYW1ldGVyW119IC0gQXJyYXkgY29udGFpbmluZyB0aGUgZGVjb2RlZCB3aXRoZHJhdyBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0KGJhc2U2NDogc3RyaW5nKTogV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0UGFyYW1ldGVyW10ge1xuICBsZXQgd2l0aGRyYXdDb250cmFjdDogV2l0aGRyYXdDb250cmFjdERlY29kZWQ7XG4gIHRyeSB7XG4gICAgd2l0aGRyYXdDb250cmFjdCA9IHByb3RvY29sLldpdGhkcmF3QmFsYW5jZUNvbnRyYWN0LmRlY29kZShCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKSkudG9KU09OKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIGRlY29kaW5nIHRoZSB3aXRoZHJhdyBjb250cmFjdCBpbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gIH1cblxuICBpZiAoIXdpdGhkcmF3Q29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyB3aXRoZHJhdyBjb250cmFjdC4nKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGF0dHJpYnV0ZXNcbiAgY29uc3Qgb3duZXJfYWRkcmVzcyA9IGdldEJhc2U1OEFkZHJlc3NGcm9tQnl0ZUFycmF5KFxuICAgIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKEJ1ZmZlci5mcm9tKHdpdGhkcmF3Q29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgb3duZXJfYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIGRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NCAtIFRoZSBiYXNlNjQgZW5jb2RlZCBjb250cmFjdCBkYXRhXG4gKiBAcmV0dXJucyB7UmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3RQYXJhbWV0ZXJbXX0gLSBBcnJheSBjb250YWluaW5nIHRoZSBkZWNvZGVkIGRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVEZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcltdIHtcbiAgbGV0IGRlbGVnYXRlUmVzb3VyY2VDb250cmFjdDogUmVzb3VyY2VNYW5hZ2VtZW50Q29udHJhY3REZWNvZGVkO1xuICB0cnkge1xuICAgIGRlbGVnYXRlUmVzb3VyY2VDb250cmFjdCA9IHByb3RvY29sLkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCFkZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Qub3duZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ093bmVyIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdC4nKTtcbiAgfVxuXG4gIGlmICghZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlY2VpdmVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdSZWNlaXZlciBhZGRyZXNzIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QuJyk7XG4gIH1cblxuICBpZiAoZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmJhbGFuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdCYWxhbmNlIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QuJyk7XG4gIH1cblxuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0Lm93bmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICBjb25zdCByZWNlaXZlcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20oZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlY2VpdmVyQWRkcmVzcywgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSlcbiAgKTtcblxuICAvLyBJbiBwcm90b2J1ZjMsIGRlZmF1bHQgdmFsdWVzIChCQU5EV0lEVEggPSAwKSBtYXkgYmUgb21pdHRlZCBmcm9tIHNlcmlhbGl6YXRpb24uXG4gIC8vIElmIHJlc291cmNlIGlzIHVuZGVmaW5lZCBvciBmYWxzeSwgZGVmYXVsdCB0byBCQU5EV0lEVEguXG4gIGNvbnN0IHJlc291cmNlVmFsdWUgPSAhZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlc291cmNlID8gVHJvblJlc291cmNlLkJBTkRXSURUSCA6IFRyb25SZXNvdXJjZS5FTkVSR1k7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VWYWx1ZSxcbiAgICAgICAgICBiYWxhbmNlOiBOdW1iZXIoZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmJhbGFuY2UpLFxuICAgICAgICAgIG93bmVyX2FkZHJlc3MsXG4gICAgICAgICAgcmVjZWl2ZXJfYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSB0aGUgc2VnbWVudCBvZiB0aGUgdHhIZXggY29ycmVzcG9uZGluZyB3aXRoIHVuZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0IC0gVGhlIGJhc2U2NCBlbmNvZGVkIGNvbnRyYWN0IGRhdGFcbiAqIEByZXR1cm5zIHtSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcltdfSAtIEFycmF5IGNvbnRhaW5pbmcgdGhlIGRlY29kZWQgdW5kZWxlZ2F0ZSByZXNvdXJjZSBjb250cmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QoYmFzZTY0OiBzdHJpbmcpOiBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdFBhcmFtZXRlcltdIHtcbiAgbGV0IHVuZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0OiBSZXNvdXJjZU1hbmFnZW1lbnRDb250cmFjdERlY29kZWQ7XG4gIHRyeSB7XG4gICAgdW5kZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QgPSBwcm90b2NvbC5VbkRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5kZWNvZGUoQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykpLnRvSlNPTigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBkZWNvZGluZyB0aGUgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QgaW4gdGhlIHRyYW5zYWN0aW9uLicpO1xuICB9XG5cbiAgaWYgKCF1bmRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5vd25lckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignT3duZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKCF1bmRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5yZWNlaXZlckFkZHJlc3MpIHtcbiAgICB0aHJvdyBuZXcgVXRpbHNFcnJvcignUmVjZWl2ZXIgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRlbGVnYXRlIHJlc291cmNlIGNvbnRyYWN0LicpO1xuICB9XG5cbiAgaWYgKHVuZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LmJhbGFuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdCYWxhbmNlIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGVsZWdhdGUgcmVzb3VyY2UgY29udHJhY3QuJyk7XG4gIH1cblxuICBjb25zdCBvd25lcl9hZGRyZXNzID0gZ2V0QmFzZTU4QWRkcmVzc0Zyb21CeXRlQXJyYXkoXG4gICAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MoQnVmZmVyLmZyb20odW5kZWxlZ2F0ZVJlc291cmNlQ29udHJhY3Qub3duZXJBZGRyZXNzLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpKVxuICApO1xuXG4gIGNvbnN0IHJlY2VpdmVyX2FkZHJlc3MgPSBnZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShcbiAgICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyhCdWZmZXIuZnJvbSh1bmRlbGVnYXRlUmVzb3VyY2VDb250cmFjdC5yZWNlaXZlckFkZHJlc3MsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JykpXG4gICk7XG5cbiAgLy8gSW4gcHJvdG9idWYzLCBkZWZhdWx0IHZhbHVlcyAoQkFORFdJRFRIID0gMCkgbWF5IGJlIG9taXR0ZWQgZnJvbSBzZXJpYWxpemF0aW9uLlxuICAvLyBJZiByZXNvdXJjZSBpcyB1bmRlZmluZWQgb3IgZmFsc3ksIGRlZmF1bHQgdG8gQkFORFdJRFRILlxuICBjb25zdCByZXNvdXJjZVZhbHVlID0gIXVuZGVsZWdhdGVSZXNvdXJjZUNvbnRyYWN0LnJlc291cmNlID8gVHJvblJlc291cmNlLkJBTkRXSURUSCA6IFRyb25SZXNvdXJjZS5FTkVSR1k7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VWYWx1ZSxcbiAgICAgICAgICBiYWxhbmNlOiBOdW1iZXIodW5kZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QuYmFsYW5jZSksXG4gICAgICAgICAgb3duZXJfYWRkcmVzcyxcbiAgICAgICAgICByZWNlaXZlcl9hZGRyZXNzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIEBwYXJhbSByYXdcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGVybWlzc2lvbihyYXc6IHsgcGVybWlzc2lvbk5hbWU6IHN0cmluZzsgdGhyZXNob2xkOiBudW1iZXIgfSk6IFBlcm1pc3Npb24ge1xuICBsZXQgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlO1xuICBjb25zdCBwZXJtaXNzaW9uID0gcmF3LnBlcm1pc3Npb25OYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBpZiAocGVybWlzc2lvbiA9PT0gJ293bmVyJykge1xuICAgIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGUuT3duZXI7XG4gIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PT0gJ3dpdG5lc3MnKSB7XG4gICAgcGVybWlzc2lvblR5cGUgPSBQZXJtaXNzaW9uVHlwZS5XaXRuZXNzO1xuICB9IGVsc2UgaWYgKHBlcm1pc3Npb24uc3Vic3RyKDAsIDYpID09PSAnYWN0aXZlJykge1xuICAgIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGUuQWN0aXZlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKCdQZXJtaXNzaW9uIHR5cGUgbm90IHBhcnNlYWJsZS4nKTtcbiAgfVxuICByZXR1cm4geyB0eXBlOiBwZXJtaXNzaW9uVHlwZSwgdGhyZXNob2xkOiByYXcudGhyZXNob2xkIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVHhKc29uU3RyaW5nKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgcmV0dXJuIHRyYW5zYWN0aW9uLmhhc093blByb3BlcnR5KCd0eElEJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCByYXcgdHJhbnNhY3Rpb24gYWNjb21tb2RhdGVzIHRvIGJpdGdvJ3MgcHJlZmVycmVkIGZvcm1hdFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdUcmFuc2FjdGlvbiAtIFRoZSByYXcgdHJhbnNhY3Rpb24gdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMge2Jvb2xlYW59IHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFJhd1RyYW5zYWN0aW9uRm9ybWF0KHJhd1RyYW5zYWN0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycgJiYgKGlzVmFsaWRIZXgocmF3VHJhbnNhY3Rpb24pIHx8IGlzVmFsaWRUeEpzb25TdHJpbmcocmF3VHJhbnNhY3Rpb24pKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgVWludDhBcnJheX0gYnVmZmVyIC0gdGhlIGJ1ZmZlciB0byBiZSBjb252ZXJ0ZWQgdG8gaGV4XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBoZXggdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSGV4KGJ1ZmZlcjogQnVmZmVyIHwgVWludDhBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiBoZXguZW5jb2RlKGJ1ZmZlciwgdHJ1ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEtlY2Nhay0yNTYgZW5jb2RlZCBzdHJpbmcgb2YgdGhlIHBhcmFtZXRlcnNcbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBzdHJpbmdzIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIHRoZSB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZXMgLSB2YWx1ZSB0byBlbmNvZGVcbiAqIEBwYXJhbSBtZXRob2RJZCAtIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIHRoZSBmdW5jdGlvbiBzZWxlY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRGF0YVBhcmFtcyh0eXBlczogc3RyaW5nW10sIHZhbHVlczogYW55W10sIG1ldGhvZElkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHlwZXMuZm9yRWFjaCgodHlwZSwgaW5kZXgpID0+IHtcbiAgICBpZiAodHlwZSA9PSAnYWRkcmVzcycpIHtcbiAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZXNbaW5kZXhdLnJlcGxhY2UoQUREUkVTU19QUkVGSVhfUkVHRVgsICcweCcpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgYWJpQ29kZXIgPSBuZXcgQWJpQ29kZXIoKTtcbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IGFiaUNvZGVyLmVuY29kZSh0eXBlcywgdmFsdWVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBUaGVyZSB3YXMgYW4gZXJyb3IgZW5jb2RpbmcgdGhlIGRhdGEgcGFyYW1zLiBFcnJvciA9ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gIH1cbiAgaWYgKG1ldGhvZElkKSB7XG4gICAgcmV0dXJuIGhleENvbmNhdChbbWV0aG9kSWQsIGRhdGFdKS5yZXBsYWNlKC9eKDB4KS8sICcnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS5yZXBsYWNlKC9eKDB4KS8sICcnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlY29kZWQgdmFsdWVzIGFjY29yZGluZyB0byB0aGUgYXJyYXkgb2YgdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBzdHJpbmdzIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIHRoZSB2YWx1ZXNcbiAqIEBwYXJhbSBkYXRhIC0gZW5jb2RlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZURhdGFQYXJhbXModHlwZXM6IHN0cmluZ1tdLCBkYXRhOiBzdHJpbmcpOiBhbnlbXSB7XG4gIGNvbnN0IGFiaUNvZGVyID0gbmV3IEFiaUNvZGVyKCk7XG4gIGRhdGEgPSAnMHgnICsgZGF0YS5zdWJzdHJpbmcoOCk7XG4gIHJldHVybiBhYmlDb2Rlci5kZWNvZGUodHlwZXMsIGRhdGEpLnJlZHVjZSgob2JqLCBhcmcsIGluZGV4KSA9PiB7XG4gICAgaWYgKHR5cGVzW2luZGV4XSA9PSAnYWRkcmVzcycpIGFyZyA9IEFERFJFU1NfUFJFRklYICsgYXJnLnN1YnN0cigyKS50b0xvd2VyQ2FzZSgpO1xuICAgIG9iai5wdXNoKGFyZyk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSwgW10pO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIHJhd19kYXRhX2hleCBmb3IgYSBUUk9OIHRyYW5zYWN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJhd0RhdGEgLSBUaGUgdHJhbnNhY3Rpb24gcmF3IGRhdGEgb2JqZWN0IGNvbnRhaW5pbmc6XG4gKiBAcGFyYW0ge0FycmF5fSByYXdEYXRhLmNvbnRyYWN0IC0gQXJyYXkgb2YgY29udHJhY3Qgb2JqZWN0c1xuICogQHBhcmFtIHtzdHJpbmd9IHJhd0RhdGEucmVmQmxvY2tCeXRlcyAtIFJlZmVyZW5jZSBibG9jayBieXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IHJhd0RhdGEucmVmQmxvY2tIYXNoIC0gUmVmZXJlbmNlIGJsb2NrIGhhc2hcbiAqIEBwYXJhbSB7bnVtYmVyfSByYXdEYXRhLmV4cGlyYXRpb24gLSBUcmFuc2FjdGlvbiBleHBpcmF0aW9uIHRpbWVzdGFtcFxuICogQHBhcmFtIHtudW1iZXJ9IHJhd0RhdGEudGltZXN0YW1wIC0gVHJhbnNhY3Rpb24gY3JlYXRpb24gdGltZXN0YW1wXG4gKiBAcGFyYW0ge251bWJlcn0gW3Jhd0RhdGEuZmVlTGltaXRdIC0gT3B0aW9uYWwgZmVlIGxpbWl0IGZvciBzbWFydCBjb250cmFjdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmF3RGF0YUhleChcbiAgcmF3RGF0YToge1xuICAgIGNvbnRyYWN0PzogcHJvdG9jb2wuVHJhbnNhY3Rpb24uQ29udHJhY3RbXTtcbiAgICByZWZCbG9ja0J5dGVzPzogc3RyaW5nO1xuICAgIHJlZkJsb2NrSGFzaD86IHN0cmluZztcbiAgICBleHBpcmF0aW9uPzogbnVtYmVyO1xuICAgIHRpbWVzdGFtcD86IG51bWJlcjtcbiAgICBmZWVMaW1pdD86IG51bWJlcjtcbiAgfSA9IHt9XG4pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIC8vIFByb2Nlc3MgY29udHJhY3RzIHRvIGVuc3VyZSBwcm9wZXIgcHJvdG9idWYgZW5jb2RpbmdcbiAgICBsZXQgcHJvY2Vzc2VkQ29udHJhY3RzID0gcmF3RGF0YS5jb250cmFjdDtcbiAgICBpZiAocmF3RGF0YS5jb250cmFjdCAmJiByYXdEYXRhLmNvbnRyYWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByb2Nlc3NlZENvbnRyYWN0cyA9IHJhd0RhdGEuY29udHJhY3QubWFwKChjb250cmFjdCkgPT4ge1xuICAgICAgICAvLyBIYW5kbGUgVHJhbnNmZXJDb250cmFjdCBzcGVjaWZpY2FsbHlcbiAgICAgICAgaWYgKGNvbnRyYWN0LnBhcmFtZXRlcj8udHlwZV91cmwgPT09ICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlRyYW5zZmVyQ29udHJhY3QnKSB7XG4gICAgICAgICAgY29uc3QgY29udHJhY3RWYWx1ZSA9IGNvbnRyYWN0LnBhcmFtZXRlci52YWx1ZSBhcyBhbnk7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgdGhlIHByb3RvYnVmIGNvbnRyYWN0IG9iamVjdFxuICAgICAgICAgIGNvbnN0IHRyYW5zZmVyQ29udHJhY3Q6IGFueSA9IHt9O1xuXG4gICAgICAgICAgLy8gSGFuZGxlIG93bmVyX2FkZHJlc3MgKHJlcXVpcmVkIGZpZWxkKVxuICAgICAgICAgIGlmIChjb250cmFjdFZhbHVlLm93bmVyX2FkZHJlc3MpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQ29udHJhY3Qub3duZXJBZGRyZXNzID0gQnVmZmVyLmZyb20oY29udHJhY3RWYWx1ZS5vd25lcl9hZGRyZXNzLCAnaGV4Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSGFuZGxlIHRvX2FkZHJlc3MgKHJlcXVpcmVkIGZpZWxkKVxuICAgICAgICAgIGlmIChjb250cmFjdFZhbHVlLnRvX2FkZHJlc3MpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQ29udHJhY3QudG9BZGRyZXNzID0gQnVmZmVyLmZyb20oY29udHJhY3RWYWx1ZS50b19hZGRyZXNzLCAnaGV4Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSGFuZGxlIGFtb3VudCAocmVxdWlyZWQgZmllbGQpXG4gICAgICAgICAgaWYgKGNvbnRyYWN0VmFsdWUuYW1vdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQ29udHJhY3QuYW1vdW50ID0gY29udHJhY3RWYWx1ZS5hbW91bnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRW5jb2RlIHRoZSBjb250cmFjdCB1c2luZyBwcm90b2J1ZlxuICAgICAgICAgIGNvbnN0IGVuY29kZWRDb250cmFjdCA9IHByb3RvY29sLlRyYW5zZmVyQ29udHJhY3QuZW5jb2RlKHRyYW5zZmVyQ29udHJhY3QpLmZpbmlzaCgpO1xuICAgICAgICAgIGNvbnN0IGJhc2U2NFZhbHVlID0gQnVmZmVyLmZyb20oZW5jb2RlZENvbnRyYWN0KS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29udHJhY3QsXG4gICAgICAgICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgICAgLi4uY29udHJhY3QucGFyYW1ldGVyLFxuICAgICAgICAgICAgICB2YWx1ZTogYmFzZTY0VmFsdWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgYW55O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyYWN0O1xuICAgICAgfSkgYXMgcHJvdG9jb2wuVHJhbnNhY3Rpb24uQ29udHJhY3RbXTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgcmF3IHRyYW5zYWN0aW9uIG9iamVjdCBtYXRjaGluZyBwcm90b2J1ZiBzY2hlbWFcbiAgICBjb25zdCByYXdUeDogcHJvdG9jb2wuVHJhbnNhY3Rpb24uSXJhdyA9IHtcbiAgICAgIGNvbnRyYWN0OiBwcm9jZXNzZWRDb250cmFjdHMsXG4gICAgICByZWZCbG9ja0J5dGVzOiByYXdEYXRhLnJlZkJsb2NrQnl0ZXMgPyBCdWZmZXIuZnJvbShyYXdEYXRhLnJlZkJsb2NrQnl0ZXMsICdoZXgnKSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlZkJsb2NrSGFzaDogcmF3RGF0YS5yZWZCbG9ja0hhc2ggPyBCdWZmZXIuZnJvbShyYXdEYXRhLnJlZkJsb2NrSGFzaCwgJ2hleCcpIDogdW5kZWZpbmVkLFxuICAgICAgZXhwaXJhdGlvbjogcmF3RGF0YS5leHBpcmF0aW9uLFxuICAgICAgdGltZXN0YW1wOiByYXdEYXRhLnRpbWVzdGFtcCxcbiAgICAgIGZlZUxpbWl0OiByYXdEYXRhLmZlZUxpbWl0LFxuICAgIH07XG5cbiAgICAvLyBFbmNvZGUgdXNpbmcgcHJvdG9idWYgYW5kIGdldCBmaW5hbCBieXRlc1xuICAgIGNvbnN0IGVuY29kZWRCeXRlcyA9IHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5lbmNvZGUocmF3VHgpLmZpbmlzaCgpO1xuXG4gICAgLy8gQ29udmVydCB0byBoZXggc3RyaW5nXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVuY29kZWRCeXRlcykudG9TdHJpbmcoJ2hleCcpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSByYXcgZGF0YSBoZXg6ICcgKyBlLm1lc3NhZ2UpO1xuICB9XG59XG4iXX0=
|