@bitgo-beta/sdk-coin-tempo 1.0.1-beta.48 → 1.0.1-beta.481
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/constants.d.ts +5 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +7 -4
- package/dist/src/lib/keyPair.d.ts +2 -12
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +4 -26
- package/dist/src/lib/transaction.d.ts +77 -3
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +149 -6
- package/dist/src/lib/transactionBuilder.d.ts +42 -3
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +216 -12
- package/dist/src/lib/types.d.ts +10 -0
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +1 -1
- package/dist/src/lib/utils.d.ts +16 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +27 -1
- package/dist/src/register.d.ts +0 -4
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +2 -23
- package/dist/src/tempo.d.ts +82 -19
- package/dist/src/tempo.d.ts.map +1 -1
- package/dist/src/tempo.js +433 -29
- package/dist/src/tip20Token.d.ts +7 -13
- package/dist/src/tip20Token.d.ts.map +1 -1
- package/dist/src/tip20Token.js +11 -7
- package/dist/test/integration/tip20.d.ts +5 -0
- package/dist/test/integration/tip20.d.ts.map +1 -1
- package/dist/test/integration/tip20.js +151 -88
- package/dist/test/resources/tempo.d.ts +77 -0
- package/dist/test/resources/tempo.d.ts.map +1 -0
- package/dist/test/resources/tempo.js +95 -0
- package/dist/test/unit/index.js +172 -3
- package/dist/test/unit/tempo.d.ts +2 -0
- package/dist/test/unit/tempo.d.ts.map +1 -0
- package/dist/test/unit/tempo.js +207 -0
- package/dist/test/unit/transactionBuilder.js +750 -144
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -9
|
@@ -9,7 +9,8 @@ export declare const VALID_PUBLIC_KEY_REGEX: RegExp;
|
|
|
9
9
|
* Tempo Chain IDs
|
|
10
10
|
*/
|
|
11
11
|
export declare const TEMPO_CHAIN_IDS: {
|
|
12
|
-
readonly
|
|
12
|
+
readonly MAINNET: 4217;
|
|
13
|
+
readonly TESTNET: 42431;
|
|
13
14
|
};
|
|
14
15
|
/**
|
|
15
16
|
* TIP-20 Token Standard
|
|
@@ -21,4 +22,7 @@ export declare const TIP20_DECIMALS = 6;
|
|
|
21
22
|
* Tempo uses EIP-7702 Account Abstraction with transaction type 0x76
|
|
22
23
|
*/
|
|
23
24
|
export declare const AA_TRANSACTION_TYPE: "0x76";
|
|
25
|
+
/** TIP-20 token names for pathUSD — used to look up contract address from statics */
|
|
26
|
+
export declare const PATH_USD_TOKEN_MAINNET = "tempo:pathusd";
|
|
27
|
+
export declare const PATH_USD_TOKEN_TESTNET = "ttempo:pathusd";
|
|
24
28
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,YAAY,UAAU,CAAC;AACpC,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AACzD,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,YAAY,UAAU,CAAC;AACpC,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AACzD,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,eAAe;;;CAGlB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAG,MAAe,CAAC;AAEnD,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AACtD,eAAO,MAAM,sBAAsB,mBAAmB,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Constants for Tempo blockchain (EVM-compatible)
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.AA_TRANSACTION_TYPE = exports.TIP20_DECIMALS = exports.TEMPO_CHAIN_IDS = exports.VALID_PUBLIC_KEY_REGEX = exports.VALID_ADDRESS_REGEX = exports.TESTNET_COIN = exports.MAINNET_COIN = void 0;
|
|
6
|
+
exports.PATH_USD_TOKEN_TESTNET = exports.PATH_USD_TOKEN_MAINNET = exports.AA_TRANSACTION_TYPE = exports.TIP20_DECIMALS = exports.TEMPO_CHAIN_IDS = exports.VALID_PUBLIC_KEY_REGEX = exports.VALID_ADDRESS_REGEX = exports.TESTNET_COIN = exports.MAINNET_COIN = void 0;
|
|
7
7
|
exports.MAINNET_COIN = 'tempo';
|
|
8
8
|
exports.TESTNET_COIN = 'ttempo';
|
|
9
9
|
exports.VALID_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;
|
|
@@ -12,8 +12,8 @@ exports.VALID_PUBLIC_KEY_REGEX = /^[A-Fa-f0-9]{64}$/;
|
|
|
12
12
|
* Tempo Chain IDs
|
|
13
13
|
*/
|
|
14
14
|
exports.TEMPO_CHAIN_IDS = {
|
|
15
|
-
|
|
16
|
-
//
|
|
15
|
+
MAINNET: 4217,
|
|
16
|
+
TESTNET: 42431, // Moderato testnet
|
|
17
17
|
};
|
|
18
18
|
/**
|
|
19
19
|
* TIP-20 Token Standard
|
|
@@ -25,4 +25,7 @@ exports.TIP20_DECIMALS = 6;
|
|
|
25
25
|
* Tempo uses EIP-7702 Account Abstraction with transaction type 0x76
|
|
26
26
|
*/
|
|
27
27
|
exports.AA_TRANSACTION_TYPE = '0x76';
|
|
28
|
-
|
|
28
|
+
/** TIP-20 token names for pathUSD — used to look up contract address from statics */
|
|
29
|
+
exports.PATH_USD_TOKEN_MAINNET = 'tempo:pathusd';
|
|
30
|
+
exports.PATH_USD_TOKEN_TESTNET = 'ttempo:pathusd';
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFVSxRQUFBLFlBQVksR0FBRyxPQUFPLENBQUM7QUFDdkIsUUFBQSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRXhCLFFBQUEsbUJBQW1CLEdBQUcscUJBQXFCLENBQUM7QUFDNUMsUUFBQSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQztBQUUxRDs7R0FFRztBQUNVLFFBQUEsZUFBZSxHQUFHO0lBQzdCLE9BQU8sRUFBRSxJQUFJO0lBQ2IsT0FBTyxFQUFFLEtBQUssRUFBRSxtQkFBbUI7Q0FDM0IsQ0FBQztBQUVYOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUVoQzs7O0dBR0c7QUFDVSxRQUFBLG1CQUFtQixHQUFHLE1BQWUsQ0FBQztBQUVuRCxxRkFBcUY7QUFDeEUsUUFBQSxzQkFBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsUUFBQSxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uc3RhbnRzIGZvciBUZW1wbyBibG9ja2NoYWluIChFVk0tY29tcGF0aWJsZSlcbiAqL1xuXG5leHBvcnQgY29uc3QgTUFJTk5FVF9DT0lOID0gJ3RlbXBvJztcbmV4cG9ydCBjb25zdCBURVNUTkVUX0NPSU4gPSAndHRlbXBvJztcblxuZXhwb3J0IGNvbnN0IFZBTElEX0FERFJFU1NfUkVHRVggPSAvXjB4W2EtZkEtRjAtOV17NDB9JC87XG5leHBvcnQgY29uc3QgVkFMSURfUFVCTElDX0tFWV9SRUdFWCA9IC9eW0EtRmEtZjAtOV17NjR9JC87XG5cbi8qKlxuICogVGVtcG8gQ2hhaW4gSURzXG4gKi9cbmV4cG9ydCBjb25zdCBURU1QT19DSEFJTl9JRFMgPSB7XG4gIE1BSU5ORVQ6IDQyMTcsXG4gIFRFU1RORVQ6IDQyNDMxLCAvLyBNb2RlcmF0byB0ZXN0bmV0XG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFRJUC0yMCBUb2tlbiBTdGFuZGFyZFxuICogVElQLTIwIHVzZXMgNiBkZWNpbWFscyAodW5saWtlIEVSQy0yMCdzIHN0YW5kYXJkIDE4IGRlY2ltYWxzKVxuICovXG5leHBvcnQgY29uc3QgVElQMjBfREVDSU1BTFMgPSA2O1xuXG4vKipcbiAqIEFBIFRyYW5zYWN0aW9uIFR5cGVcbiAqIFRlbXBvIHVzZXMgRUlQLTc3MDIgQWNjb3VudCBBYnN0cmFjdGlvbiB3aXRoIHRyYW5zYWN0aW9uIHR5cGUgMHg3NlxuICovXG5leHBvcnQgY29uc3QgQUFfVFJBTlNBQ1RJT05fVFlQRSA9ICcweDc2JyBhcyBjb25zdDtcblxuLyoqIFRJUC0yMCB0b2tlbiBuYW1lcyBmb3IgcGF0aFVTRCDigJQgdXNlZCB0byBsb29rIHVwIGNvbnRyYWN0IGFkZHJlc3MgZnJvbSBzdGF0aWNzICovXG5leHBvcnQgY29uc3QgUEFUSF9VU0RfVE9LRU5fTUFJTk5FVCA9ICd0ZW1wbzpwYXRodXNkJztcbmV4cG9ydCBjb25zdCBQQVRIX1VTRF9UT0tFTl9URVNUTkVUID0gJ3R0ZW1wbzpwYXRodXNkJztcbiJdfQ==
|
|
@@ -2,17 +2,7 @@
|
|
|
2
2
|
* Tempo KeyPair - Reuses Ethereum KeyPair Implementation
|
|
3
3
|
*
|
|
4
4
|
* Since Tempo is EVM-compatible and uses the same cryptography (ECDSA/secp256k1)
|
|
5
|
-
* as Ethereum, we
|
|
5
|
+
* as Ethereum, we directly reuse the Ethereum KeyPair implementation from abstract-eth.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Tempo KeyPair class
|
|
10
|
-
* Uses same key derivation as Ethereum (BIP32 + secp256k1)
|
|
11
|
-
*/
|
|
12
|
-
export declare class KeyPair {
|
|
13
|
-
private keyPair;
|
|
14
|
-
constructor(source?: KeyPairOptions);
|
|
15
|
-
getKeys(): DefaultKeys;
|
|
16
|
-
getAddress(): string;
|
|
17
|
-
}
|
|
7
|
+
export { KeyPair } from '@bitgo-beta/abstract-eth';
|
|
18
8
|
//# sourceMappingURL=keyPair.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../src/lib/keyPair.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../src/lib/keyPair.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/src/lib/keyPair.js
CHANGED
|
@@ -3,32 +3,10 @@
|
|
|
3
3
|
* Tempo KeyPair - Reuses Ethereum KeyPair Implementation
|
|
4
4
|
*
|
|
5
5
|
* Since Tempo is EVM-compatible and uses the same cryptography (ECDSA/secp256k1)
|
|
6
|
-
* as Ethereum, we
|
|
6
|
+
* as Ethereum, we directly reuse the Ethereum KeyPair implementation from abstract-eth.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.KeyPair = void 0;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* Uses same key derivation as Ethereum (BIP32 + secp256k1)
|
|
14
|
-
*/
|
|
15
|
-
class KeyPair {
|
|
16
|
-
constructor(source) {
|
|
17
|
-
// TODO: Implement proper key generation when needed
|
|
18
|
-
const seed = Buffer.alloc(64);
|
|
19
|
-
const hdNode = secp256k1_1.bip32.fromSeed(seed);
|
|
20
|
-
this.keyPair = {
|
|
21
|
-
prv: hdNode.toBase58(),
|
|
22
|
-
pub: hdNode.neutered().toBase58(),
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
getKeys() {
|
|
26
|
-
return this.keyPair;
|
|
27
|
-
}
|
|
28
|
-
getAddress() {
|
|
29
|
-
// TODO: Implement Ethereum-style address derivation
|
|
30
|
-
return '0x0000000000000000000000000000000000000000';
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
exports.KeyPair = KeyPair;
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQUVILHFEQUE4QztBQUc5Qzs7O0dBR0c7QUFDSCxNQUFhLE9BQU87SUFHbEIsWUFBWSxNQUF1QjtRQUNqQyxvREFBb0Q7UUFDcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixNQUFNLE1BQU0sR0FBRyxpQkFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDdEIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7U0FDbEMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVO1FBQ1Isb0RBQW9EO1FBQ3BELE9BQU8sNENBQTRDLENBQUM7SUFDdEQsQ0FBQztDQUNGO0FBdEJELDBCQXNCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVtcG8gS2V5UGFpciAtIFJldXNlcyBFdGhlcmV1bSBLZXlQYWlyIEltcGxlbWVudGF0aW9uXG4gKlxuICogU2luY2UgVGVtcG8gaXMgRVZNLWNvbXBhdGlibGUgYW5kIHVzZXMgdGhlIHNhbWUgY3J5cHRvZ3JhcGh5IChFQ0RTQS9zZWNwMjU2azEpXG4gKiBhcyBFdGhlcmV1bSwgd2UgY2FuIGRpcmVjdGx5IHJldXNlIHRoZSBFdGhlcmV1bSBLZXlQYWlyIGltcGxlbWVudGF0aW9uLlxuICovXG5cbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IERlZmF1bHRLZXlzLCBLZXlQYWlyT3B0aW9ucyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuLyoqXG4gKiBUZW1wbyBLZXlQYWlyIGNsYXNzXG4gKiBVc2VzIHNhbWUga2V5IGRlcml2YXRpb24gYXMgRXRoZXJldW0gKEJJUDMyICsgc2VjcDI1NmsxKVxuICovXG5leHBvcnQgY2xhc3MgS2V5UGFpciB7XG4gIHByaXZhdGUga2V5UGFpcjogRGVmYXVsdEtleXM7XG5cbiAgY29uc3RydWN0b3Ioc291cmNlPzogS2V5UGFpck9wdGlvbnMpIHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgcHJvcGVyIGtleSBnZW5lcmF0aW9uIHdoZW4gbmVlZGVkXG4gICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5hbGxvYyg2NCk7XG4gICAgY29uc3QgaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc2VlZCk7XG5cbiAgICB0aGlzLmtleVBhaXIgPSB7XG4gICAgICBwcnY6IGhkTm9kZS50b0Jhc2U1OCgpLFxuICAgICAgcHViOiBoZE5vZGUubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgIH07XG4gIH1cblxuICBnZXRLZXlzKCk6IERlZmF1bHRLZXlzIHtcbiAgICByZXR1cm4gdGhpcy5rZXlQYWlyO1xuICB9XG5cbiAgZ2V0QWRkcmVzcygpOiBzdHJpbmcge1xuICAgIC8vIFRPRE86IEltcGxlbWVudCBFdGhlcmV1bS1zdHlsZSBhZGRyZXNzIGRlcml2YXRpb25cbiAgICByZXR1cm4gJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7XG4gIH1cbn1cbiJdfQ==
|
|
10
|
+
var abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
11
|
+
Object.defineProperty(exports, "KeyPair", { enumerable: true, get: function () { return abstract_eth_1.KeyPair; } });
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQUVILHlEQUFtRDtBQUExQyx1R0FBQSxPQUFPLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlbXBvIEtleVBhaXIgLSBSZXVzZXMgRXRoZXJldW0gS2V5UGFpciBJbXBsZW1lbnRhdGlvblxuICpcbiAqIFNpbmNlIFRlbXBvIGlzIEVWTS1jb21wYXRpYmxlIGFuZCB1c2VzIHRoZSBzYW1lIGNyeXB0b2dyYXBoeSAoRUNEU0Evc2VjcDI1NmsxKVxuICogYXMgRXRoZXJldW0sIHdlIGRpcmVjdGx5IHJldXNlIHRoZSBFdGhlcmV1bSBLZXlQYWlyIGltcGxlbWVudGF0aW9uIGZyb20gYWJzdHJhY3QtZXRoLlxuICovXG5cbmV4cG9ydCB7IEtleVBhaXIgfSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuIl19
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { BaseTransaction, TransactionType } from '@bitgo-beta/sdk-core';
|
|
8
8
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
9
|
-
import { Address, Hex, Tip20Operation } from './types';
|
|
9
|
+
import { Address, Hex, RawContractCall, Tip20Operation } from './types';
|
|
10
10
|
/**
|
|
11
11
|
* TIP-20 Transaction Request Structure
|
|
12
12
|
* Represents the raw transaction data for Tempo Account Abstraction (EIP-7702)
|
|
@@ -35,11 +35,29 @@ export interface Tip20TransactionRequest {
|
|
|
35
35
|
/** Optional TIP-20 token to use for paying fees */
|
|
36
36
|
feeToken?: Address;
|
|
37
37
|
}
|
|
38
|
+
export interface TxData {
|
|
39
|
+
type: number | string;
|
|
40
|
+
chainId: number;
|
|
41
|
+
nonce: number;
|
|
42
|
+
maxFeePerGas: string;
|
|
43
|
+
maxPriorityFeePerGas: string;
|
|
44
|
+
gas: string;
|
|
45
|
+
callCount: number;
|
|
46
|
+
feeToken?: string;
|
|
47
|
+
operations: Tip20Operation[];
|
|
48
|
+
rawCalls: RawContractCall[];
|
|
49
|
+
signature?: {
|
|
50
|
+
r: Hex;
|
|
51
|
+
s: Hex;
|
|
52
|
+
yParity: number;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
38
55
|
export declare class Tip20Transaction extends BaseTransaction {
|
|
39
56
|
private txRequest;
|
|
40
57
|
private _operations;
|
|
58
|
+
private _rawCalls;
|
|
41
59
|
private _signature?;
|
|
42
|
-
constructor(_coinConfig: Readonly<CoinConfig>, request: Tip20TransactionRequest, operations?: Tip20Operation[]);
|
|
60
|
+
constructor(_coinConfig: Readonly<CoinConfig>, request: Tip20TransactionRequest, operations?: Tip20Operation[], rawCalls?: RawContractCall[]);
|
|
43
61
|
get type(): TransactionType;
|
|
44
62
|
canSign(): boolean;
|
|
45
63
|
serialize(signature?: {
|
|
@@ -47,7 +65,57 @@ export declare class Tip20Transaction extends BaseTransaction {
|
|
|
47
65
|
s: Hex;
|
|
48
66
|
yParity: number;
|
|
49
67
|
}): Promise<Hex>;
|
|
68
|
+
/**
|
|
69
|
+
* Encode calls as RLP tuples for atomic batch execution
|
|
70
|
+
* @returns Array of [to, value, data] tuples
|
|
71
|
+
* @private
|
|
72
|
+
*/
|
|
73
|
+
private encodeCallsAsTuples;
|
|
74
|
+
/**
|
|
75
|
+
* Encode EIP-2930 access list as RLP tuples
|
|
76
|
+
* @returns Array of [address, storageKeys[]] tuples
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
private encodeAccessList;
|
|
80
|
+
/**
|
|
81
|
+
* Convert bigint to hex string for RLP encoding
|
|
82
|
+
* @param value bigint value to convert
|
|
83
|
+
* @returns Hex string
|
|
84
|
+
* @private
|
|
85
|
+
*/
|
|
86
|
+
private bigintToHex;
|
|
87
|
+
/**
|
|
88
|
+
* Build base RLP data array per Tempo EIP-7702 specification
|
|
89
|
+
* @param callsTuples Encoded calls
|
|
90
|
+
* @param accessTuples Encoded access list
|
|
91
|
+
* @returns RLP-ready array of transaction fields
|
|
92
|
+
* @private
|
|
93
|
+
*/
|
|
94
|
+
private buildBaseRlpData;
|
|
95
|
+
/**
|
|
96
|
+
* Encode secp256k1 signature as 65-byte envelope
|
|
97
|
+
* @param signature ECDSA signature components
|
|
98
|
+
* @returns Hex string of concatenated r (32) + s (32) + v (1) bytes
|
|
99
|
+
* @private
|
|
100
|
+
*/
|
|
101
|
+
private encodeSignature;
|
|
102
|
+
/**
|
|
103
|
+
* RLP encode and prepend transaction type byte
|
|
104
|
+
* @param rlpData Transaction fields array
|
|
105
|
+
* @returns Hex string with 0x76 prefix
|
|
106
|
+
* @private
|
|
107
|
+
*/
|
|
108
|
+
private rlpEncodeWithTypePrefix;
|
|
109
|
+
/**
|
|
110
|
+
* Serialize Tempo AA transaction (type 0x76) per EIP-7702 specification
|
|
111
|
+
* Format: 0x76 || RLP([chainId, fees, gas, calls, accessList, nonce fields, feeToken, sponsorship, authList, signature?])
|
|
112
|
+
* @param signature Optional ECDSA signature (omit for unsigned transactions)
|
|
113
|
+
* @returns RLP-encoded transaction hex string
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
private serializeTransaction;
|
|
50
117
|
getOperations(): Tip20Operation[];
|
|
118
|
+
getRawCalls(): RawContractCall[];
|
|
51
119
|
getFeeToken(): Address | undefined;
|
|
52
120
|
getOperationCount(): number;
|
|
53
121
|
isBatch(): boolean;
|
|
@@ -61,8 +129,14 @@ export declare class Tip20Transaction extends BaseTransaction {
|
|
|
61
129
|
s: Hex;
|
|
62
130
|
yParity: number;
|
|
63
131
|
} | undefined;
|
|
64
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Recover the signer address from the transaction signature.
|
|
134
|
+
* @returns Checksummed sender address, or undefined if unsigned
|
|
135
|
+
*/
|
|
136
|
+
getSenderAddress(): string | undefined;
|
|
137
|
+
toJson(): TxData;
|
|
65
138
|
toBroadcastFormat(): Promise<string>;
|
|
139
|
+
/** @inheritdoc */
|
|
66
140
|
get id(): string;
|
|
67
141
|
toString(): string;
|
|
68
142
|
canBroadcast(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,11 +8,28 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.Tip20Transaction = void 0;
|
|
10
10
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
11
|
+
const ethers_1 = require("ethers");
|
|
12
|
+
const utils_1 = require("./utils");
|
|
11
13
|
class Tip20Transaction extends sdk_core_1.BaseTransaction {
|
|
12
|
-
constructor(_coinConfig, request, operations = []) {
|
|
14
|
+
constructor(_coinConfig, request, operations = [], rawCalls = []) {
|
|
13
15
|
super(_coinConfig);
|
|
14
16
|
this.txRequest = request;
|
|
15
17
|
this._operations = operations;
|
|
18
|
+
this._rawCalls = rawCalls;
|
|
19
|
+
this._outputs = [
|
|
20
|
+
...operations.map((op) => ({
|
|
21
|
+
address: op.to,
|
|
22
|
+
value: (0, utils_1.amountToTip20Units)(op.amount).toString(),
|
|
23
|
+
coin: op.token,
|
|
24
|
+
})),
|
|
25
|
+
...rawCalls.map((call) => ({
|
|
26
|
+
address: call.to,
|
|
27
|
+
value: call.value || '0',
|
|
28
|
+
coin: _coinConfig.name,
|
|
29
|
+
})),
|
|
30
|
+
];
|
|
31
|
+
const totalUnits = operations.reduce((sum, op) => sum + (0, utils_1.amountToTip20Units)(op.amount), 0n);
|
|
32
|
+
this._inputs = [{ address: '', value: totalUnits.toString(), coin: _coinConfig.name }];
|
|
16
33
|
}
|
|
17
34
|
get type() {
|
|
18
35
|
return sdk_core_1.TransactionType.Send;
|
|
@@ -21,17 +38,119 @@ class Tip20Transaction extends sdk_core_1.BaseTransaction {
|
|
|
21
38
|
return true;
|
|
22
39
|
}
|
|
23
40
|
async serialize(signature) {
|
|
24
|
-
|
|
25
|
-
|
|
41
|
+
const sig = signature || this._signature;
|
|
42
|
+
return this.serializeTransaction(sig);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Encode calls as RLP tuples for atomic batch execution
|
|
46
|
+
* @returns Array of [to, value, data] tuples
|
|
47
|
+
* @private
|
|
48
|
+
*/
|
|
49
|
+
encodeCallsAsTuples() {
|
|
50
|
+
return this.txRequest.calls.map((call) => [call.to, this.bigintToHex(call.value), call.data]);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Encode EIP-2930 access list as RLP tuples
|
|
54
|
+
* @returns Array of [address, storageKeys[]] tuples
|
|
55
|
+
* @private
|
|
56
|
+
*/
|
|
57
|
+
encodeAccessList() {
|
|
58
|
+
return (this.txRequest.accessList ?? []).map((item) => [item.address, item.storageKeys || []]);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Convert bigint to hex string for RLP encoding
|
|
62
|
+
* @param value bigint value to convert
|
|
63
|
+
* @returns Hex string
|
|
64
|
+
* @private
|
|
65
|
+
*/
|
|
66
|
+
bigintToHex(value) {
|
|
67
|
+
if (value === 0n) {
|
|
68
|
+
return '0x';
|
|
69
|
+
}
|
|
70
|
+
const hex = value.toString(16);
|
|
71
|
+
return '0x' + (hex.length % 2 ? '0' : '') + hex;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Build base RLP data array per Tempo EIP-7702 specification
|
|
75
|
+
* @param callsTuples Encoded calls
|
|
76
|
+
* @param accessTuples Encoded access list
|
|
77
|
+
* @returns RLP-ready array of transaction fields
|
|
78
|
+
* @private
|
|
79
|
+
*/
|
|
80
|
+
buildBaseRlpData(callsTuples, accessTuples) {
|
|
81
|
+
return [
|
|
82
|
+
ethers_1.ethers.utils.hexlify(this.txRequest.chainId),
|
|
83
|
+
this.txRequest.maxPriorityFeePerGas ? this.bigintToHex(this.txRequest.maxPriorityFeePerGas) : '0x',
|
|
84
|
+
this.bigintToHex(this.txRequest.maxFeePerGas),
|
|
85
|
+
this.bigintToHex(this.txRequest.gas),
|
|
86
|
+
callsTuples,
|
|
87
|
+
accessTuples,
|
|
88
|
+
'0x', // nonceKey (reserved for 2D nonce system)
|
|
89
|
+
this.txRequest.nonce ? this.bigintToHex(BigInt(this.txRequest.nonce)) : '0x',
|
|
90
|
+
'0x', // validBefore (reserved for time bounds)
|
|
91
|
+
'0x', // validAfter (reserved for time bounds)
|
|
92
|
+
this.txRequest.feeToken || '0x',
|
|
93
|
+
'0x', // feePayerSignature (reserved for sponsorship)
|
|
94
|
+
[], // authorizationList (EIP-7702)
|
|
95
|
+
];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Encode secp256k1 signature as 65-byte envelope
|
|
99
|
+
* @param signature ECDSA signature components
|
|
100
|
+
* @returns Hex string of concatenated r (32) + s (32) + v (1) bytes
|
|
101
|
+
* @private
|
|
102
|
+
*/
|
|
103
|
+
encodeSignature(signature) {
|
|
104
|
+
const v = signature.yParity + 27;
|
|
105
|
+
const signatureBytes = ethers_1.ethers.utils.concat([
|
|
106
|
+
ethers_1.ethers.utils.zeroPad(signature.r, 32),
|
|
107
|
+
ethers_1.ethers.utils.zeroPad(signature.s, 32),
|
|
108
|
+
ethers_1.ethers.utils.hexlify(v),
|
|
109
|
+
]);
|
|
110
|
+
return ethers_1.ethers.utils.hexlify(signatureBytes);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* RLP encode and prepend transaction type byte
|
|
114
|
+
* @param rlpData Transaction fields array
|
|
115
|
+
* @returns Hex string with 0x76 prefix
|
|
116
|
+
* @private
|
|
117
|
+
*/
|
|
118
|
+
rlpEncodeWithTypePrefix(rlpData) {
|
|
119
|
+
try {
|
|
120
|
+
const encoded = ethers_1.ethers.utils.RLP.encode(rlpData);
|
|
121
|
+
return ('0x76' + encoded.slice(2));
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
throw new sdk_core_1.ParseTransactionError(`Failed to RLP encode transaction: ${error}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Serialize Tempo AA transaction (type 0x76) per EIP-7702 specification
|
|
129
|
+
* Format: 0x76 || RLP([chainId, fees, gas, calls, accessList, nonce fields, feeToken, sponsorship, authList, signature?])
|
|
130
|
+
* @param signature Optional ECDSA signature (omit for unsigned transactions)
|
|
131
|
+
* @returns RLP-encoded transaction hex string
|
|
132
|
+
* @private
|
|
133
|
+
*/
|
|
134
|
+
serializeTransaction(signature) {
|
|
135
|
+
const callsTuples = this.encodeCallsAsTuples();
|
|
136
|
+
const accessTuples = this.encodeAccessList();
|
|
137
|
+
const rlpData = this.buildBaseRlpData(callsTuples, accessTuples);
|
|
138
|
+
if (signature) {
|
|
139
|
+
rlpData.push(this.encodeSignature(signature));
|
|
140
|
+
}
|
|
141
|
+
return this.rlpEncodeWithTypePrefix(rlpData);
|
|
26
142
|
}
|
|
27
143
|
getOperations() {
|
|
28
144
|
return [...this._operations];
|
|
29
145
|
}
|
|
146
|
+
getRawCalls() {
|
|
147
|
+
return [...this._rawCalls];
|
|
148
|
+
}
|
|
30
149
|
getFeeToken() {
|
|
31
150
|
return this.txRequest.feeToken;
|
|
32
151
|
}
|
|
33
152
|
getOperationCount() {
|
|
34
|
-
return this.
|
|
153
|
+
return this._operations.length + this._rawCalls.length;
|
|
35
154
|
}
|
|
36
155
|
isBatch() {
|
|
37
156
|
return this.txRequest.calls.length > 1;
|
|
@@ -42,6 +161,22 @@ class Tip20Transaction extends sdk_core_1.BaseTransaction {
|
|
|
42
161
|
getSignature() {
|
|
43
162
|
return this._signature;
|
|
44
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Recover the signer address from the transaction signature.
|
|
166
|
+
* @returns Checksummed sender address, or undefined if unsigned
|
|
167
|
+
*/
|
|
168
|
+
getSenderAddress() {
|
|
169
|
+
if (!this._signature) {
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
const unsignedHex = this.serializeTransaction();
|
|
173
|
+
const msgHash = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.arrayify(unsignedHex));
|
|
174
|
+
return ethers_1.ethers.utils.recoverAddress(msgHash, {
|
|
175
|
+
r: this._signature.r,
|
|
176
|
+
s: this._signature.s,
|
|
177
|
+
recoveryParam: this._signature.yParity,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
45
180
|
toJson() {
|
|
46
181
|
return {
|
|
47
182
|
type: this.txRequest.type,
|
|
@@ -53,14 +188,22 @@ class Tip20Transaction extends sdk_core_1.BaseTransaction {
|
|
|
53
188
|
callCount: this.txRequest.calls.length,
|
|
54
189
|
feeToken: this.txRequest.feeToken,
|
|
55
190
|
operations: this._operations,
|
|
191
|
+
rawCalls: this._rawCalls,
|
|
56
192
|
signature: this._signature,
|
|
57
193
|
};
|
|
58
194
|
}
|
|
59
195
|
async toBroadcastFormat() {
|
|
60
196
|
return await this.serialize(this._signature);
|
|
61
197
|
}
|
|
198
|
+
/** @inheritdoc */
|
|
62
199
|
get id() {
|
|
63
|
-
|
|
200
|
+
try {
|
|
201
|
+
const serialized = this.serializeTransaction(this._signature);
|
|
202
|
+
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.arrayify(serialized));
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return 'pending';
|
|
206
|
+
}
|
|
64
207
|
}
|
|
65
208
|
toString() {
|
|
66
209
|
return JSON.stringify(this.toJson(), null, 2);
|
|
@@ -70,4 +213,4 @@ class Tip20Transaction extends sdk_core_1.BaseTransaction {
|
|
|
70
213
|
}
|
|
71
214
|
}
|
|
72
215
|
exports.Tip20Transaction = Tip20Transaction;
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBRUgsbURBQStGO0FBNkIvRixNQUFhLGdCQUFpQixTQUFRLDBCQUFlO0lBS25ELFlBQVksV0FBaUMsRUFBRSxPQUFnQyxFQUFFLGFBQStCLEVBQUU7UUFDaEgsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLDBCQUFlLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUErQztRQUM3RCxvRUFBb0U7UUFDcEUsTUFBTSxJQUFJLGdDQUFxQixDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQThDO1FBQ3pELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7WUFDekIsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTztZQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUU7WUFDcEQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7WUFDcEUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNsQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN0QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQ2pDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxFQUFFO1FBQ0osT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNGO0FBOUVELDRDQThFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVElQLTIwIFRyYW5zYWN0aW9uXG4gKlxuICogUmVwcmVzZW50cyBhIFRlbXBvIEFjY291bnQgQWJzdHJhY3Rpb24gKEFBKSB0cmFuc2FjdGlvbiAodHlwZSAweDc2KVxuICogU3VwcG9ydHMgc2luZ2xlIG9yIGJhdGNoIFRJUC0yMCB0b2tlbiB0cmFuc2ZlcnMgd2l0aCBtZW1vc1xuICovXG5cbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgUGFyc2VUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBBZGRyZXNzLCBIZXgsIFRpcDIwT3BlcmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVElQLTIwIFRyYW5zYWN0aW9uIFJlcXVlc3QgU3RydWN0dXJlXG4gKiBSZXByZXNlbnRzIHRoZSByYXcgdHJhbnNhY3Rpb24gZGF0YSBmb3IgVGVtcG8gQWNjb3VudCBBYnN0cmFjdGlvbiAoRUlQLTc3MDIpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlwMjBUcmFuc2FjdGlvblJlcXVlc3Qge1xuICAvKiogVHJhbnNhY3Rpb24gdHlwZSAoMHg3NiBmb3IgVGVtcG8gQUEpICovXG4gIHR5cGU6IG51bWJlciB8IHN0cmluZztcbiAgLyoqIENoYWluIElEIGZvciB0aGUgVGVtcG8gbmV0d29yayAqL1xuICBjaGFpbklkOiBudW1iZXI7XG4gIC8qKiBUcmFuc2FjdGlvbiBub25jZSAqL1xuICBub25jZTogbnVtYmVyO1xuICAvKiogTWF4aW11bSBmZWUgcGVyIGdhcyAoRUlQLTE1NTkpICovXG4gIG1heEZlZVBlckdhczogYmlnaW50O1xuICAvKiogTWF4aW11bSBwcmlvcml0eSBmZWUgcGVyIGdhcyAoRUlQLTE1NTkpICovXG4gIG1heFByaW9yaXR5RmVlUGVyR2FzOiBiaWdpbnQ7XG4gIC8qKiBHYXMgbGltaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiAqL1xuICBnYXM6IGJpZ2ludDtcbiAgLyoqIEFycmF5IG9mIGNhbGxzIHRvIGV4ZWN1dGUgaW4gdGhpcyB0cmFuc2FjdGlvbiAqL1xuICBjYWxsczogeyB0bzogQWRkcmVzczsgZGF0YTogSGV4OyB2YWx1ZTogYmlnaW50IH1bXTtcbiAgLyoqIEFjY2VzcyBsaXN0IChvcHRpb25hbCwgdHlwaWNhbGx5IGVtcHR5IGZvciBUSVAtMjApICovXG4gIGFjY2Vzc0xpc3Q/OiB1bmtub3duW107XG4gIC8qKiBPcHRpb25hbCBUSVAtMjAgdG9rZW4gdG8gdXNlIGZvciBwYXlpbmcgZmVlcyAqL1xuICBmZWVUb2tlbj86IEFkZHJlc3M7XG59XG5cbmV4cG9ydCBjbGFzcyBUaXAyMFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSB0eFJlcXVlc3Q6IFRpcDIwVHJhbnNhY3Rpb25SZXF1ZXN0O1xuICBwcml2YXRlIF9vcGVyYXRpb25zOiBUaXAyME9wZXJhdGlvbltdO1xuICBwcml2YXRlIF9zaWduYXR1cmU/OiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4sIHJlcXVlc3Q6IFRpcDIwVHJhbnNhY3Rpb25SZXF1ZXN0LCBvcGVyYXRpb25zOiBUaXAyME9wZXJhdGlvbltdID0gW10pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50eFJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuX29wZXJhdGlvbnMgPSBvcGVyYXRpb25zO1xuICB9XG5cbiAgZ2V0IHR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gIH1cblxuICBjYW5TaWduKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2VyaWFsaXplKHNpZ25hdHVyZT86IHsgcjogSGV4OyBzOiBIZXg7IHlQYXJpdHk6IG51bWJlciB9KTogUHJvbWlzZTxIZXg+IHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgRUlQLTc3MDIgdHJhbnNhY3Rpb24gc2VyaWFsaXphdGlvbiB3aXRoIGV0aGVycy5qc1xuICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIHNlcmlhbGl6YXRpb24gbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0T3BlcmF0aW9ucygpOiBUaXAyME9wZXJhdGlvbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX29wZXJhdGlvbnNdO1xuICB9XG5cbiAgZ2V0RmVlVG9rZW4oKTogQWRkcmVzcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHhSZXF1ZXN0LmZlZVRva2VuO1xuICB9XG5cbiAgZ2V0T3BlcmF0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50eFJlcXVlc3QuY2FsbHMubGVuZ3RoO1xuICB9XG5cbiAgaXNCYXRjaCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eFJlcXVlc3QuY2FsbHMubGVuZ3RoID4gMTtcbiAgfVxuXG4gIHNldFNpZ25hdHVyZShzaWduYXR1cmU6IHsgcjogSGV4OyBzOiBIZXg7IHlQYXJpdHk6IG51bWJlciB9KTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlKCk6IHsgcjogSGV4OyBzOiBIZXg7IHlQYXJpdHk6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlO1xuICB9XG5cbiAgdG9Kc29uKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdGhpcy50eFJlcXVlc3QudHlwZSxcbiAgICAgIGNoYWluSWQ6IHRoaXMudHhSZXF1ZXN0LmNoYWluSWQsXG4gICAgICBub25jZTogdGhpcy50eFJlcXVlc3Qubm9uY2UsXG4gICAgICBtYXhGZWVQZXJHYXM6IHRoaXMudHhSZXF1ZXN0Lm1heEZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IHRoaXMudHhSZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzLnRvU3RyaW5nKCksXG4gICAgICBnYXM6IHRoaXMudHhSZXF1ZXN0Lmdhcy50b1N0cmluZygpLFxuICAgICAgY2FsbENvdW50OiB0aGlzLnR4UmVxdWVzdC5jYWxscy5sZW5ndGgsXG4gICAgICBmZWVUb2tlbjogdGhpcy50eFJlcXVlc3QuZmVlVG9rZW4sXG4gICAgICBvcGVyYXRpb25zOiB0aGlzLl9vcGVyYXRpb25zLFxuICAgICAgc2lnbmF0dXJlOiB0aGlzLl9zaWduYXR1cmUsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VyaWFsaXplKHRoaXMuX3NpZ25hdHVyZSk7XG4gIH1cblxuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pzb24oKSwgbnVsbCwgMik7XG4gIH1cblxuICBjYW5Ccm9hZGNhc3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHhSZXF1ZXN0LmNhbGxzLmxlbmd0aCA+IDAgJiYgdGhpcy50eFJlcXVlc3QuY2hhaW5JZCA+IDA7XG4gIH1cbn1cbiJdfQ==
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBRUgsbURBQStGO0FBRS9GLG1DQUFnQztBQUVoQyxtQ0FBNkM7QUF5QzdDLE1BQWEsZ0JBQWlCLFNBQVEsMEJBQWU7SUFNbkQsWUFDRSxXQUFpQyxFQUNqQyxPQUFnQyxFQUNoQyxhQUErQixFQUFFLEVBQ2pDLFdBQThCLEVBQUU7UUFFaEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDZCxLQUFLLEVBQUUsSUFBQSwwQkFBa0IsRUFBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUMvQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUs7YUFDZixDQUFDLENBQUM7WUFDSCxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRztnQkFDeEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO2FBQ3ZCLENBQUMsQ0FBQztTQUNKLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxF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QUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUQsT0FBTyxlQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNGO0FBM09ELDRDQTJPQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVElQLTIwIFRyYW5zYWN0aW9uXG4gKlxuICogUmVwcmVzZW50cyBhIFRlbXBvIEFjY291bnQgQWJzdHJhY3Rpb24gKEFBKSB0cmFuc2FjdGlvbiAodHlwZSAweDc2KVxuICogU3VwcG9ydHMgc2luZ2xlIG9yIGJhdGNoIFRJUC0yMCB0b2tlbiB0cmFuc2ZlcnMgd2l0aCBtZW1vc1xuICovXG5cbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgUGFyc2VUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBldGhlcnMgfSBmcm9tICdldGhlcnMnO1xuaW1wb3J0IHsgQWRkcmVzcywgSGV4LCBSYXdDb250cmFjdENhbGwsIFRpcDIwT3BlcmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBhbW91bnRUb1RpcDIwVW5pdHMgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBUSVAtMjAgVHJhbnNhY3Rpb24gUmVxdWVzdCBTdHJ1Y3R1cmVcbiAqIFJlcHJlc2VudHMgdGhlIHJhdyB0cmFuc2FjdGlvbiBkYXRhIGZvciBUZW1wbyBBY2NvdW50IEFic3RyYWN0aW9uIChFSVAtNzcwMilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaXAyMFRyYW5zYWN0aW9uUmVxdWVzdCB7XG4gIC8qKiBUcmFuc2FjdGlvbiB0eXBlICgweDc2IGZvciBUZW1wbyBBQSkgKi9cbiAgdHlwZTogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogQ2hhaW4gSUQgZm9yIHRoZSBUZW1wbyBuZXR3b3JrICovXG4gIGNoYWluSWQ6IG51bWJlcjtcbiAgLyoqIFRyYW5zYWN0aW9uIG5vbmNlICovXG4gIG5vbmNlOiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIGZlZSBwZXIgZ2FzIChFSVAtMTU1OSkgKi9cbiAgbWF4RmVlUGVyR2FzOiBiaWdpbnQ7XG4gIC8qKiBNYXhpbXVtIHByaW9yaXR5IGZlZSBwZXIgZ2FzIChFSVAtMTU1OSkgKi9cbiAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IGJpZ2ludDtcbiAgLyoqIEdhcyBsaW1pdCBmb3IgdGhlIHRyYW5zYWN0aW9uICovXG4gIGdhczogYmlnaW50O1xuICAvKiogQXJyYXkgb2YgY2FsbHMgdG8gZXhlY3V0ZSBpbiB0aGlzIHRyYW5zYWN0aW9uICovXG4gIGNhbGxzOiB7IHRvOiBBZGRyZXNzOyBkYXRhOiBIZXg7IHZhbHVlOiBiaWdpbnQgfVtdO1xuICAvKiogQWNjZXNzIGxpc3QgKG9wdGlvbmFsLCB0eXBpY2FsbHkgZW1wdHkgZm9yIFRJUC0yMCkgKi9cbiAgYWNjZXNzTGlzdD86IHVua25vd25bXTtcbiAgLyoqIE9wdGlvbmFsIFRJUC0yMCB0b2tlbiB0byB1c2UgZm9yIHBheWluZyBmZWVzICovXG4gIGZlZVRva2VuPzogQWRkcmVzcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeERhdGEge1xuICB0eXBlOiBudW1iZXIgfCBzdHJpbmc7XG4gIGNoYWluSWQ6IG51bWJlcjtcbiAgbm9uY2U6IG51bWJlcjtcbiAgbWF4RmVlUGVyR2FzOiBzdHJpbmc7XG4gIG1heFByaW9yaXR5RmVlUGVyR2FzOiBzdHJpbmc7XG4gIGdhczogc3RyaW5nO1xuICBjYWxsQ291bnQ6IG51bWJlcjtcbiAgZmVlVG9rZW4/OiBzdHJpbmc7XG4gIG9wZXJhdGlvbnM6IFRpcDIwT3BlcmF0aW9uW107XG4gIHJhd0NhbGxzOiBSYXdDb250cmFjdENhbGxbXTtcbiAgc2lnbmF0dXJlPzogeyByOiBIZXg7IHM6IEhleDsgeVBhcml0eTogbnVtYmVyIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUaXAyMFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSB0eFJlcXVlc3Q6IFRpcDIwVHJhbnNhY3Rpb25SZXF1ZXN0O1xuICBwcml2YXRlIF9vcGVyYXRpb25zOiBUaXAyME9wZXJhdGlvbltdO1xuICBwcml2YXRlIF9yYXdDYWxsczogUmF3Q29udHJhY3RDYWxsW107XG4gIHByaXZhdGUgX3NpZ25hdHVyZT86IHsgcjogSGV4OyBzOiBIZXg7IHlQYXJpdHk6IG51bWJlciB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPixcbiAgICByZXF1ZXN0OiBUaXAyMFRyYW5zYWN0aW9uUmVxdWVzdCxcbiAgICBvcGVyYXRpb25zOiBUaXAyME9wZXJhdGlvbltdID0gW10sXG4gICAgcmF3Q2FsbHM6IFJhd0NvbnRyYWN0Q2FsbFtdID0gW11cbiAgKSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHhSZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLl9vcGVyYXRpb25zID0gb3BlcmF0aW9ucztcbiAgICB0aGlzLl9yYXdDYWxscyA9IHJhd0NhbGxzO1xuICAgIHRoaXMuX291dHB1dHMgPSBbXG4gICAgICAuLi5vcGVyYXRpb25zLm1hcCgob3ApID0+ICh7XG4gICAgICAgIGFkZHJlc3M6IG9wLnRvLFxuICAgICAgICB2YWx1ZTogYW1vdW50VG9UaXAyMFVuaXRzKG9wLmFtb3VudCkudG9TdHJpbmcoKSxcbiAgICAgICAgY29pbjogb3AudG9rZW4sXG4gICAgICB9KSksXG4gICAgICAuLi5yYXdDYWxscy5tYXAoKGNhbGwpID0+ICh7XG4gICAgICAgIGFkZHJlc3M6IGNhbGwudG8sXG4gICAgICAgIHZhbHVlOiBjYWxsLnZhbHVlIHx8ICcwJyxcbiAgICAgICAgY29pbjogX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0pKSxcbiAgICBdO1xuICAgIGNvbnN0IHRvdGFsVW5pdHMgPSBvcGVyYXRpb25zLnJlZHVjZSgoc3VtLCBvcCkgPT4gc3VtICsgYW1vdW50VG9UaXAyMFVuaXRzKG9wLmFtb3VudCksIDBuKTtcbiAgICB0aGlzLl9pbnB1dHMgPSBbeyBhZGRyZXNzOiAnJywgdmFsdWU6IHRvdGFsVW5pdHMudG9TdHJpbmcoKSwgY29pbjogX2NvaW5Db25maWcubmFtZSB9XTtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICB9XG5cbiAgY2FuU2lnbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNlcmlhbGl6ZShzaWduYXR1cmU/OiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfSk6IFByb21pc2U8SGV4PiB7XG4gICAgY29uc3Qgc2lnID0gc2lnbmF0dXJlIHx8IHRoaXMuX3NpZ25hdHVyZTtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVUcmFuc2FjdGlvbihzaWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSBjYWxscyBhcyBSTFAgdHVwbGVzIGZvciBhdG9taWMgYmF0Y2ggZXhlY3V0aW9uXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIFt0bywgdmFsdWUsIGRhdGFdIHR1cGxlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBlbmNvZGVDYWxsc0FzVHVwbGVzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy50eFJlcXVlc3QuY2FsbHMubWFwKChjYWxsKSA9PiBbY2FsbC50bywgdGhpcy5iaWdpbnRUb0hleChjYWxsLnZhbHVlKSwgY2FsbC5kYXRhXSk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIEVJUC0yOTMwIGFjY2VzcyBsaXN0IGFzIFJMUCB0dXBsZXNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgW2FkZHJlc3MsIHN0b3JhZ2VLZXlzW11dIHR1cGxlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBlbmNvZGVBY2Nlc3NMaXN0KCk6IGFueVtdIHtcbiAgICByZXR1cm4gKHRoaXMudHhSZXF1ZXN0LmFjY2Vzc0xpc3QgPz8gW10pLm1hcCgoaXRlbTogYW55KSA9PiBbaXRlbS5hZGRyZXNzLCBpdGVtLnN0b3JhZ2VLZXlzIHx8IFtdXSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBiaWdpbnQgdG8gaGV4IHN0cmluZyBmb3IgUkxQIGVuY29kaW5nXG4gICAqIEBwYXJhbSB2YWx1ZSBiaWdpbnQgdmFsdWUgdG8gY29udmVydFxuICAgKiBAcmV0dXJucyBIZXggc3RyaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJpZ2ludFRvSGV4KHZhbHVlOiBiaWdpbnQpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gMG4pIHtcbiAgICAgIHJldHVybiAnMHgnO1xuICAgIH1cbiAgICBjb25zdCBoZXggPSB2YWx1ZS50b1N0cmluZygxNik7XG4gICAgcmV0dXJuICcweCcgKyAoaGV4Lmxlbmd0aCAlIDIgPyAnMCcgOiAnJykgKyBoZXg7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYmFzZSBSTFAgZGF0YSBhcnJheSBwZXIgVGVtcG8gRUlQLTc3MDIgc3BlY2lmaWNhdGlvblxuICAgKiBAcGFyYW0gY2FsbHNUdXBsZXMgRW5jb2RlZCBjYWxsc1xuICAgKiBAcGFyYW0gYWNjZXNzVHVwbGVzIEVuY29kZWQgYWNjZXNzIGxpc3RcbiAgICogQHJldHVybnMgUkxQLXJlYWR5IGFycmF5IG9mIHRyYW5zYWN0aW9uIGZpZWxkc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEJhc2VSbHBEYXRhKGNhbGxzVHVwbGVzOiBhbnlbXSwgYWNjZXNzVHVwbGVzOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgZXRoZXJzLnV0aWxzLmhleGxpZnkodGhpcy50eFJlcXVlc3QuY2hhaW5JZCksXG4gICAgICB0aGlzLnR4UmVxdWVzdC5tYXhQcmlvcml0eUZlZVBlckdhcyA/IHRoaXMuYmlnaW50VG9IZXgodGhpcy50eFJlcXVlc3QubWF4UHJpb3JpdHlGZWVQZXJHYXMpIDogJzB4JyxcbiAgICAgIHRoaXMuYmlnaW50VG9IZXgodGhpcy50eFJlcXVlc3QubWF4RmVlUGVyR2FzKSxcbiAgICAgIHRoaXMuYmlnaW50VG9IZXgodGhpcy50eFJlcXVlc3QuZ2FzKSxcbiAgICAgIGNhbGxzVHVwbGVzLFxuICAgICAgYWNjZXNzVHVwbGVzLFxuICAgICAgJzB4JywgLy8gbm9uY2VLZXkgKHJlc2VydmVkIGZvciAyRCBub25jZSBzeXN0ZW0pXG4gICAgICB0aGlzLnR4UmVxdWVzdC5ub25jZSA/IHRoaXMuYmlnaW50VG9IZXgoQmlnSW50KHRoaXMudHhSZXF1ZXN0Lm5vbmNlKSkgOiAnMHgnLFxuICAgICAgJzB4JywgLy8gdmFsaWRCZWZvcmUgKHJlc2VydmVkIGZvciB0aW1lIGJvdW5kcylcbiAgICAgICcweCcsIC8vIHZhbGlkQWZ0ZXIgKHJlc2VydmVkIGZvciB0aW1lIGJvdW5kcylcbiAgICAgIHRoaXMudHhSZXF1ZXN0LmZlZVRva2VuIHx8ICcweCcsXG4gICAgICAnMHgnLCAvLyBmZWVQYXllclNpZ25hdHVyZSAocmVzZXJ2ZWQgZm9yIHNwb25zb3JzaGlwKVxuICAgICAgW10sIC8vIGF1dGhvcml6YXRpb25MaXN0IChFSVAtNzcwMilcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSBzZWNwMjU2azEgc2lnbmF0dXJlIGFzIDY1LWJ5dGUgZW52ZWxvcGVcbiAgICogQHBhcmFtIHNpZ25hdHVyZSBFQ0RTQSBzaWduYXR1cmUgY29tcG9uZW50c1xuICAgKiBAcmV0dXJucyBIZXggc3RyaW5nIG9mIGNvbmNhdGVuYXRlZCByICgzMikgKyBzICgzMikgKyB2ICgxKSBieXRlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBlbmNvZGVTaWduYXR1cmUoc2lnbmF0dXJlOiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfSk6IHN0cmluZyB7XG4gICAgY29uc3QgdiA9IHNpZ25hdHVyZS55UGFyaXR5ICsgMjc7XG4gICAgY29uc3Qgc2lnbmF0dXJlQnl0ZXMgPSBldGhlcnMudXRpbHMuY29uY2F0KFtcbiAgICAgIGV0aGVycy51dGlscy56ZXJvUGFkKHNpZ25hdHVyZS5yLCAzMiksXG4gICAgICBldGhlcnMudXRpbHMuemVyb1BhZChzaWduYXR1cmUucywgMzIpLFxuICAgICAgZXRoZXJzLnV0aWxzLmhleGxpZnkodiksXG4gICAgXSk7XG4gICAgcmV0dXJuIGV0aGVycy51dGlscy5oZXhsaWZ5KHNpZ25hdHVyZUJ5dGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSTFAgZW5jb2RlIGFuZCBwcmVwZW5kIHRyYW5zYWN0aW9uIHR5cGUgYnl0ZVxuICAgKiBAcGFyYW0gcmxwRGF0YSBUcmFuc2FjdGlvbiBmaWVsZHMgYXJyYXlcbiAgICogQHJldHVybnMgSGV4IHN0cmluZyB3aXRoIDB4NzYgcHJlZml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJscEVuY29kZVdpdGhUeXBlUHJlZml4KHJscERhdGE6IGFueVtdKTogSGV4IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5jb2RlZCA9IGV0aGVycy51dGlscy5STFAuZW5jb2RlKHJscERhdGEpO1xuICAgICAgcmV0dXJuICgnMHg3NicgKyBlbmNvZGVkLnNsaWNlKDIpKSBhcyBIZXg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoYEZhaWxlZCB0byBSTFAgZW5jb2RlIHRyYW5zYWN0aW9uOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgVGVtcG8gQUEgdHJhbnNhY3Rpb24gKHR5cGUgMHg3NikgcGVyIEVJUC03NzAyIHNwZWNpZmljYXRpb25cbiAgICogRm9ybWF0OiAweDc2IHx8IFJMUChbY2hhaW5JZCwgZmVlcywgZ2FzLCBjYWxscywgYWNjZXNzTGlzdCwgbm9uY2UgZmllbGRzLCBmZWVUb2tlbiwgc3BvbnNvcnNoaXAsIGF1dGhMaXN0LCBzaWduYXR1cmU/XSlcbiAgICogQHBhcmFtIHNpZ25hdHVyZSBPcHRpb25hbCBFQ0RTQSBzaWduYXR1cmUgKG9taXQgZm9yIHVuc2lnbmVkIHRyYW5zYWN0aW9ucylcbiAgICogQHJldHVybnMgUkxQLWVuY29kZWQgdHJhbnNhY3Rpb24gaGV4IHN0cmluZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXJpYWxpemVUcmFuc2FjdGlvbihzaWduYXR1cmU/OiB7IHI6IEhleDsgczogSGV4OyB5UGFyaXR5OiBudW1iZXIgfSk6IEhleCB7XG4gICAgY29uc3QgY2FsbHNUdXBsZXMgPSB0aGlzLmVuY29kZUNhbGxzQXNUdXBsZXMoKTtcbiAgICBjb25zdCBhY2Nlc3NUdXBsZXMgPSB0aGlzLmVuY29kZUFjY2Vzc0xpc3QoKTtcbiAgICBjb25zdCBybHBEYXRhID0gdGhpcy5idWlsZEJhc2VSbHBEYXRhKGNhbGxzVHVwbGVzLCBhY2Nlc3NUdXBsZXMpO1xuXG4gICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgcmxwRGF0YS5wdXNoKHRoaXMuZW5jb2RlU2lnbmF0dXJlKHNpZ25hdHVyZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJscEVuY29kZVdpdGhUeXBlUHJlZml4KHJscERhdGEpO1xuICB9XG5cbiAgZ2V0T3BlcmF0aW9ucygpOiBUaXAyME9wZXJhdGlvbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX29wZXJhdGlvbnNdO1xuICB9XG5cbiAgZ2V0UmF3Q2FsbHMoKTogUmF3Q29udHJhY3RDYWxsW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcmF3Q2FsbHNdO1xuICB9XG5cbiAgZ2V0RmVlVG9rZW4oKTogQWRkcmVzcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHhSZXF1ZXN0LmZlZVRva2VuO1xuICB9XG5cbiAgZ2V0T3BlcmF0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlcmF0aW9ucy5sZW5ndGggKyB0aGlzLl9yYXdDYWxscy5sZW5ndGg7XG4gIH1cblxuICBpc0JhdGNoKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR4UmVxdWVzdC5jYWxscy5sZW5ndGggPiAxO1xuICB9XG5cbiAgc2V0U2lnbmF0dXJlKHNpZ25hdHVyZTogeyByOiBIZXg7IHM6IEhleDsgeVBhcml0eTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmUgPSBzaWduYXR1cmU7XG4gIH1cblxuICBnZXRTaWduYXR1cmUoKTogeyByOiBIZXg7IHM6IEhleDsgeVBhcml0eTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmU7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciB0aGUgc2lnbmVyIGFkZHJlc3MgZnJvbSB0aGUgdHJhbnNhY3Rpb24gc2lnbmF0dXJlLlxuICAgKiBAcmV0dXJucyBDaGVja3N1bW1lZCBzZW5kZXIgYWRkcmVzcywgb3IgdW5kZWZpbmVkIGlmIHVuc2lnbmVkXG4gICAqL1xuICBnZXRTZW5kZXJBZGRyZXNzKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9zaWduYXR1cmUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdW5zaWduZWRIZXggPSB0aGlzLnNlcmlhbGl6ZVRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgbXNnSGFzaCA9IGV0aGVycy51dGlscy5rZWNjYWsyNTYoZXRoZXJzLnV0aWxzLmFycmF5aWZ5KHVuc2lnbmVkSGV4KSk7XG4gICAgcmV0dXJuIGV0aGVycy51dGlscy5yZWNvdmVyQWRkcmVzcyhtc2dIYXNoLCB7XG4gICAgICByOiB0aGlzLl9zaWduYXR1cmUucixcbiAgICAgIHM6IHRoaXMuX3NpZ25hdHVyZS5zLFxuICAgICAgcmVjb3ZlcnlQYXJhbTogdGhpcy5fc2lnbmF0dXJlLnlQYXJpdHksXG4gICAgfSk7XG4gIH1cblxuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdGhpcy50eFJlcXVlc3QudHlwZSxcbiAgICAgIGNoYWluSWQ6IHRoaXMudHhSZXF1ZXN0LmNoYWluSWQsXG4gICAgICBub25jZTogdGhpcy50eFJlcXVlc3Qubm9uY2UsXG4gICAgICBtYXhGZWVQZXJHYXM6IHRoaXMudHhSZXF1ZXN0Lm1heEZlZVBlckdhcy50b1N0cmluZygpLFxuICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IHRoaXMudHhSZXF1ZXN0Lm1heFByaW9yaXR5RmVlUGVyR2FzLnRvU3RyaW5nKCksXG4gICAgICBnYXM6IHRoaXMudHhSZXF1ZXN0Lmdhcy50b1N0cmluZygpLFxuICAgICAgY2FsbENvdW50OiB0aGlzLnR4UmVxdWVzdC5jYWxscy5sZW5ndGgsXG4gICAgICBmZWVUb2tlbjogdGhpcy50eFJlcXVlc3QuZmVlVG9rZW4sXG4gICAgICBvcGVyYXRpb25zOiB0aGlzLl9vcGVyYXRpb25zLFxuICAgICAgcmF3Q2FsbHM6IHRoaXMuX3Jhd0NhbGxzLFxuICAgICAgc2lnbmF0dXJlOiB0aGlzLl9zaWduYXR1cmUsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VyaWFsaXplKHRoaXMuX3NpZ25hdHVyZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRoaXMuX3NpZ25hdHVyZSk7XG4gICAgICByZXR1cm4gZXRoZXJzLnV0aWxzLmtlY2NhazI1NihldGhlcnMudXRpbHMuYXJyYXlpZnkoc2VyaWFsaXplZCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICdwZW5kaW5nJztcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSnNvbigpLCBudWxsLCAyKTtcbiAgfVxuXG4gIGNhbkJyb2FkY2FzdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eFJlcXVlc3QuY2FsbHMubGVuZ3RoID4gMCAmJiB0aGlzLnR4UmVxdWVzdC5jaGFpbklkID4gMDtcbiAgfVxufVxuIl19
|
|
@@ -7,21 +7,23 @@
|
|
|
7
7
|
* - Custom fee token selection
|
|
8
8
|
* - EIP-7702 Account Abstraction (type 0x76)
|
|
9
9
|
*/
|
|
10
|
-
import { TransactionBuilder as AbstractTransactionBuilder, TransferBuilder } from '@bitgo-beta/abstract-eth';
|
|
10
|
+
import { Transaction as EthTransaction, TransactionBuilder as AbstractTransactionBuilder, TransferBuilder } from '@bitgo-beta/abstract-eth';
|
|
11
11
|
import { BaseTransaction } from '@bitgo-beta/sdk-core';
|
|
12
12
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
13
|
-
import { Address, Tip20Operation } from './types';
|
|
13
|
+
import { Address, RawContractCall, Tip20Operation } from './types';
|
|
14
14
|
/**
|
|
15
15
|
* Transaction Builder for TIP-20 tokens on Tempo blockchain
|
|
16
16
|
* Extends abstract-eth TransactionBuilder with Tempo-specific features
|
|
17
17
|
*/
|
|
18
18
|
export declare class Tip20TransactionBuilder extends AbstractTransactionBuilder {
|
|
19
19
|
private operations;
|
|
20
|
+
private rawCalls;
|
|
20
21
|
private _feeToken?;
|
|
21
22
|
private _nonce?;
|
|
22
23
|
private _gas?;
|
|
23
24
|
private _maxFeePerGas?;
|
|
24
25
|
private _maxPriorityFeePerGas?;
|
|
26
|
+
private _restoredSignature?;
|
|
25
27
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
26
28
|
/**
|
|
27
29
|
* Implement the transfer method from abstract class
|
|
@@ -29,7 +31,31 @@ export declare class Tip20TransactionBuilder extends AbstractTransactionBuilder
|
|
|
29
31
|
*/
|
|
30
32
|
transfer(data?: string, isFirstSigner?: boolean): TransferBuilder;
|
|
31
33
|
/**
|
|
32
|
-
*
|
|
34
|
+
* Validate the transaction has all required fields for Tempo AA transactions.
|
|
35
|
+
* Overrides parent class validation since AA transactions use a different model
|
|
36
|
+
* (operations-based rather than single contract address).
|
|
37
|
+
*
|
|
38
|
+
* @throws BuildTransactionError if validation fails
|
|
39
|
+
*/
|
|
40
|
+
validateTransaction(): void;
|
|
41
|
+
/** @inheritdoc */
|
|
42
|
+
validateRawTransaction(rawTransaction: any): void;
|
|
43
|
+
/** @inheritdoc */
|
|
44
|
+
protected fromImplementation(rawTransaction: string, isFirstSigner?: boolean): EthTransaction;
|
|
45
|
+
/**
|
|
46
|
+
* Deserialize a type 0x76 transaction and restore builder state.
|
|
47
|
+
* RLP field layout mirrors buildBaseRlpData() in transaction.ts.
|
|
48
|
+
*/
|
|
49
|
+
private fromTip20Transaction;
|
|
50
|
+
/**
|
|
51
|
+
* Decode a single AA call's data back into a Tip20Operation.
|
|
52
|
+
* Returns null if the call is not a transferWithMemo — it will be stored as a RawContractCall instead.
|
|
53
|
+
* This preserves calldata fidelity for arbitrary smart contract interactions.
|
|
54
|
+
*/
|
|
55
|
+
private decodeCallToOperation;
|
|
56
|
+
/**
|
|
57
|
+
* Build the transaction from configured TIP-20 operations and transaction parameters.
|
|
58
|
+
* Signs with _sourceKeyPair if it has been set via sign({ key }).
|
|
33
59
|
*/
|
|
34
60
|
protected buildImplementation(): Promise<BaseTransaction>;
|
|
35
61
|
/**
|
|
@@ -40,6 +66,19 @@ export declare class Tip20TransactionBuilder extends AbstractTransactionBuilder
|
|
|
40
66
|
* @returns this builder instance for chaining
|
|
41
67
|
*/
|
|
42
68
|
addOperation(operation: Tip20Operation): this;
|
|
69
|
+
/**
|
|
70
|
+
* Add a raw smart contract call with pre-encoded calldata
|
|
71
|
+
* Use this for arbitrary contract interactions where the UI provides ABI-encoded calldata
|
|
72
|
+
*
|
|
73
|
+
* @param call - Raw contract call with target address and pre-encoded calldata
|
|
74
|
+
* @returns this builder instance for chaining
|
|
75
|
+
*/
|
|
76
|
+
addRawCall(call: RawContractCall): this;
|
|
77
|
+
/**
|
|
78
|
+
* Get all raw contract calls in this transaction
|
|
79
|
+
* @returns Array of raw contract calls
|
|
80
|
+
*/
|
|
81
|
+
getRawCalls(): RawContractCall[];
|
|
43
82
|
/**
|
|
44
83
|
* Set which TIP-20 token will be used to pay transaction fees
|
|
45
84
|
* This is a global setting for the entire transaction
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,WAAW,IAAI,cAAc,EAC7B,kBAAkB,IAAI,0BAA0B,EAChD,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EAIhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAO,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAexE;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,0BAA0B;IACrE,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,SAAS,CAAC,CAAU;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAsC;gBAErD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,eAAe;IASjE;;;;;;OAMG;IACH,mBAAmB,IAAI,IAAI;IAsB3B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,GAAG,GAAG,IAAI;IAYjD,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,cAAc;IAU7F;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAmF5B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;OAGG;cACa,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IA6D/D;;;;;;OAMG;IACH,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAM7C;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAmBvC;;;OAGG;IACH,WAAW,IAAI,eAAe,EAAE;IAIhC;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAQpC;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ1B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAS/B;;;;;OAKG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASjD;;;;;OAKG;IACH,oBAAoB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASjE;;;OAGG;IACH,aAAa,IAAI,cAAc,EAAE;IAIjC;;;OAGG;IACH,WAAW,IAAI,OAAO,GAAG,SAAS;IAIlC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAUxB"}
|