@tatumio/ltc 2.0.1-alpha.261 → 2.0.1-alpha.264
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/package.json +8 -9
- package/src/index.d.ts +1 -1
- package/src/index.js.map +1 -1
- package/src/lib/ltc.sdk.d.ts +15 -15
- package/src/lib/ltc.sdk.js +3 -2
- package/src/lib/ltc.sdk.js.map +1 -1
- package/src/lib/ltc.sdk.wallet.d.ts +14 -0
- package/src/lib/ltc.sdk.wallet.js +11 -0
- package/src/lib/ltc.sdk.wallet.js.map +1 -0
- package/src/lib/transaction/ltc.tx.d.ts +6 -6
- package/src/lib/transaction/ltc.tx.js +6 -114
- package/src/lib/transaction/ltc.tx.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tatumio/ltc",
|
|
3
|
-
"version": "2.0.1-alpha.
|
|
3
|
+
"version": "2.0.1-alpha.264",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "./src/index.js",
|
|
6
6
|
"typings": "./src/index.d.ts",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@tatumio/shared-abstract-sdk": "2.0.1-alpha.
|
|
9
|
-
"@tatumio/api-client": "2.0.1-alpha.
|
|
8
|
+
"@tatumio/shared-abstract-sdk": "2.0.1-alpha.264",
|
|
9
|
+
"@tatumio/api-client": "2.0.1-alpha.264",
|
|
10
10
|
"axios": "^0.26.0",
|
|
11
11
|
"form-data": "^4.0.0",
|
|
12
|
-
"@tatumio/shared-testing-common": "2.0.1-alpha.
|
|
12
|
+
"@tatumio/shared-testing-common": "2.0.1-alpha.264",
|
|
13
13
|
"bignumber.js": "^9.0.2",
|
|
14
|
-
"@tatumio/shared-core": "2.0.1-alpha.
|
|
15
|
-
"@tatumio/shared-blockchain-btc-based": "2.0.1-alpha.
|
|
16
|
-
"@tatumio/shared-blockchain-abstract": "2.0.1-alpha.
|
|
14
|
+
"@tatumio/shared-core": "2.0.1-alpha.264",
|
|
15
|
+
"@tatumio/shared-blockchain-btc-based": "2.0.1-alpha.264",
|
|
16
|
+
"@tatumio/shared-blockchain-abstract": "2.0.1-alpha.264",
|
|
17
17
|
"bip32": "^2.0.5",
|
|
18
18
|
"bip39": "^3.0.2",
|
|
19
19
|
"bitcoinjs-lib": "^5.2.0",
|
|
20
20
|
"hdkey": "^2.0.1",
|
|
21
21
|
"bitcore-lib": "8.25.8",
|
|
22
|
-
"@tatumio/shared-testing-btc-based": "2.0.1-alpha.
|
|
23
|
-
"bitcore-lib-ltc": "8.25.27"
|
|
22
|
+
"@tatumio/shared-testing-btc-based": "2.0.1-alpha.264"
|
|
24
23
|
},
|
|
25
24
|
"peerDependencies": {}
|
|
26
25
|
}
|
package/src/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './lib/ltc.sdk';
|
|
2
|
-
export {
|
|
2
|
+
export { ltcTransactions } from './lib/transaction/ltc.tx';
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/blockchain/ltc/src/index.ts"],"names":[],"mappings":";;;;AAAA,6DAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/blockchain/ltc/src/index.ts"],"names":[],"mappings":";;;;AAAA,6DAA6B;AAC7B,mDAA0D;AAAjD,yGAAA,eAAe,OAAA"}
|
package/src/lib/ltc.sdk.d.ts
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import { LitecoinService } from '@tatumio/api-client';
|
|
2
2
|
import { SDKArguments } from '@tatumio/shared-abstract-sdk';
|
|
3
3
|
export declare const TatumLtcSDK: (args: SDKArguments) => {
|
|
4
|
-
|
|
4
|
+
wallet: {
|
|
5
|
+
generateAddressFromXPub(xpub: string, i: number, options?: {
|
|
6
|
+
testnet: boolean;
|
|
7
|
+
}): string;
|
|
8
|
+
generatePrivateKeyFromMnemonic(mnemonic: string, i: number, options?: {
|
|
9
|
+
testnet: boolean;
|
|
10
|
+
}): Promise<string>;
|
|
11
|
+
generateAddressFromPrivateKey(privateKey: string, options?: {
|
|
12
|
+
testnet: boolean;
|
|
13
|
+
}): string;
|
|
14
|
+
generateWallet(mnemonic?: string, options?: {
|
|
15
|
+
testnet: boolean;
|
|
16
|
+
}): Promise<import("@tatumio/api-client").TronWallet>;
|
|
17
|
+
};
|
|
18
|
+
transaction: import("@tatumio/shared-blockchain-btc-based").BtcBasedTx<import("@tatumio/shared-blockchain-btc-based").LtcTransactionTypes>;
|
|
5
19
|
blockchain: {
|
|
6
20
|
info: typeof LitecoinService.ltcGetBlockChainInfo;
|
|
7
21
|
mempool: typeof LitecoinService.ltcGetMempool;
|
|
@@ -21,20 +35,6 @@ export declare const TatumLtcSDK: (args: SDKArguments) => {
|
|
|
21
35
|
complete: typeof import("@tatumio/api-client").KeyManagementSystemService.completePendingSignature;
|
|
22
36
|
delete: typeof import("@tatumio/api-client").KeyManagementSystemService.deletePendingTransactionToSign;
|
|
23
37
|
};
|
|
24
|
-
wallet: {
|
|
25
|
-
generateAddressFromXPub(xpub: string, i: number, options?: {
|
|
26
|
-
testnet: boolean;
|
|
27
|
-
}): string;
|
|
28
|
-
generatePrivateKeyFromMnemonic(mnemonic: string, i: number, options?: {
|
|
29
|
-
testnet: boolean;
|
|
30
|
-
}): Promise<string>;
|
|
31
|
-
generateAddressFromPrivateKey(privateKey: string, options?: {
|
|
32
|
-
testnet: boolean;
|
|
33
|
-
}): string;
|
|
34
|
-
generateWallet(mnemonic?: string, options?: {
|
|
35
|
-
testnet: boolean;
|
|
36
|
-
}): Promise<import("@tatumio/api-client").TronWallet>;
|
|
37
|
-
};
|
|
38
38
|
offchain: {
|
|
39
39
|
depositAddress: {
|
|
40
40
|
checkExists: (address: string, index?: number) => Promise<import("@tatumio/api-client").Account>;
|
package/src/lib/ltc.sdk.js
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TatumLtcSDK = void 0;
|
|
4
4
|
const shared_core_1 = require("@tatumio/shared-core");
|
|
5
|
-
const shared_blockchain_btc_based_1 = require("@tatumio/shared-blockchain-btc-based");
|
|
6
5
|
const api_client_1 = require("@tatumio/api-client");
|
|
7
6
|
const ltc_tx_1 = require("./transaction/ltc.tx");
|
|
7
|
+
const ltc_sdk_wallet_1 = require("./ltc.sdk.wallet");
|
|
8
|
+
const shared_blockchain_btc_based_1 = require("@tatumio/shared-blockchain-btc-based");
|
|
8
9
|
const blockchain = shared_core_1.Blockchain.LTC;
|
|
9
10
|
const TatumLtcSDK = (args) => {
|
|
10
|
-
return Object.assign(Object.assign({}, (0, shared_blockchain_btc_based_1.btcBasedSdk)(Object.assign(Object.assign({}, args), { blockchain }))), { transaction: (0, ltc_tx_1.ltcTransactions)(), blockchain: {
|
|
11
|
+
return Object.assign(Object.assign({}, (0, shared_blockchain_btc_based_1.btcBasedSdk)(Object.assign(Object.assign({}, args), { blockchain }))), { wallet: (0, ltc_sdk_wallet_1.ltcWallet)(), transaction: (0, ltc_tx_1.ltcTransactions)(), blockchain: {
|
|
11
12
|
info: api_client_1.LitecoinService.ltcGetBlockChainInfo,
|
|
12
13
|
mempool: api_client_1.LitecoinService.ltcGetMempool,
|
|
13
14
|
broadcast: api_client_1.LitecoinService.ltcBroadcast,
|
package/src/lib/ltc.sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ltc.sdk.js","sourceRoot":"","sources":["../../../../../../packages/blockchain/ltc/src/lib/ltc.sdk.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"ltc.sdk.js","sourceRoot":"","sources":["../../../../../../packages/blockchain/ltc/src/lib/ltc.sdk.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AACjD,oDAAqD;AACrD,iDAAsD;AAEtD,qDAA4C;AAC5C,sFAAkE;AAElE,MAAM,UAAU,GAAG,wBAAU,CAAC,GAAG,CAAA;AAE1B,MAAM,WAAW,GAAG,CAAC,IAAkB,EAAE,EAAE;IAChD,uCACK,IAAA,yCAAW,kCAAM,IAAI,KAAE,UAAU,IAAG,KACvC,MAAM,EAAE,IAAA,0BAAS,GAAE,EACnB,WAAW,EAAE,IAAA,wBAAe,GAAE,EAC9B,UAAU,EAAE;YACV,IAAI,EAAE,4BAAe,CAAC,oBAAoB;YAC1C,OAAO,EAAE,4BAAe,CAAC,aAAa;YACtC,SAAS,EAAE,4BAAe,CAAC,YAAY;YACvC,YAAY,EAAE,4BAAe,CAAC,eAAe;YAC7C,QAAQ,EAAE,4BAAe,CAAC,WAAW;YACrC,OAAO,EAAE,4BAAe,CAAC,UAAU;YACnC,2BAA2B,EAAE,4BAAe,CAAC,sBAAsB;YACnE,eAAe,EAAE,4BAAe,CAAC,iBAAiB;YAClD,cAAc,EAAE,4BAAe,CAAC,oBAAoB;YACpD,IAAI,EAAE,4BAAe,CAAC,qBAAqB;SAC5C,IACF;AACH,CAAC,CAAA;AAlBY,QAAA,WAAW,eAkBvB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const ltcWallet: () => {
|
|
2
|
+
generateAddressFromXPub(xpub: string, i: number, options?: {
|
|
3
|
+
testnet: boolean;
|
|
4
|
+
}): string;
|
|
5
|
+
generatePrivateKeyFromMnemonic(mnemonic: string, i: number, options?: {
|
|
6
|
+
testnet: boolean;
|
|
7
|
+
}): Promise<string>;
|
|
8
|
+
generateAddressFromPrivateKey(privateKey: string, options?: {
|
|
9
|
+
testnet: boolean;
|
|
10
|
+
}): string;
|
|
11
|
+
generateWallet(mnemonic?: string, options?: {
|
|
12
|
+
testnet: boolean;
|
|
13
|
+
}): Promise<import("../../../../../dist/packages/api-client/src").TronWallet>;
|
|
14
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ltcWallet = void 0;
|
|
4
|
+
const shared_core_1 = require("@tatumio/shared-core");
|
|
5
|
+
const shared_blockchain_btc_based_1 = require("@tatumio/shared-blockchain-btc-based");
|
|
6
|
+
const ltcWallet = () => {
|
|
7
|
+
const blockchain = shared_core_1.Blockchain.LTC;
|
|
8
|
+
return (0, shared_blockchain_btc_based_1.btcBasedWallet)({ blockchain });
|
|
9
|
+
};
|
|
10
|
+
exports.ltcWallet = ltcWallet;
|
|
11
|
+
//# sourceMappingURL=ltc.sdk.wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ltc.sdk.wallet.js","sourceRoot":"","sources":["../../../../../../packages/blockchain/ltc/src/lib/ltc.sdk.wallet.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AAEjD,sFAAqE;AAE9D,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,MAAM,UAAU,GAAG,wBAAU,CAAC,GAAG,CAAA;IACjC,OAAO,IAAA,4CAAc,EAAC,EAAE,UAAU,EAAE,CAAC,CAAA;AACvC,CAAC,CAAA;AAHY,QAAA,SAAS,aAGrB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ApiServices
|
|
2
|
-
import { BtcBasedTx } from '@tatumio/shared-blockchain-btc-based';
|
|
3
|
-
export declare type LtcTransactionTypes = LtcTransactionAddress | LtcTransactionAddressKMS | LtcTransactionUTXO | LtcTransactionUTXOKMS;
|
|
1
|
+
import { ApiServices } from '@tatumio/api-client';
|
|
2
|
+
import { BtcBasedTx, LtcTransactionTypes } from '@tatumio/shared-blockchain-btc-based';
|
|
4
3
|
export declare const ltcTransactions: (apiCalls?: {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
getTxByAddress: typeof ApiServices.blockchain.ltc.ltcGetTxByAddress;
|
|
5
|
+
broadcast: typeof ApiServices.blockchain.ltc.ltcBroadcast;
|
|
6
|
+
getRawTransaction: typeof ApiServices.blockchain.ltc.ltcGetRawTransaction;
|
|
7
|
+
getUtxo: typeof ApiServices.blockchain.ltc.ltcGetUtxo;
|
|
8
8
|
}) => BtcBasedTx<LtcTransactionTypes>;
|
|
@@ -1,123 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ltcTransactions = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
// @ts-ignore
|
|
6
|
-
const bitcore_lib_ltc_1 = require("bitcore-lib-ltc");
|
|
7
4
|
const api_client_1 = require("@tatumio/api-client");
|
|
8
|
-
const
|
|
9
|
-
const bignumber_js_1 = (0, tslib_1.__importDefault)(require("bignumber.js"));
|
|
10
|
-
const ltc_sdk_errors_1 = require("../ltc.sdk.errors");
|
|
5
|
+
const shared_blockchain_btc_based_1 = require("@tatumio/shared-blockchain-btc-based");
|
|
11
6
|
const ltcTransactions = (apiCalls = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
getTxByAddress: api_client_1.ApiServices.blockchain.ltc.ltcGetTxByAddress,
|
|
8
|
+
broadcast: api_client_1.ApiServices.blockchain.ltc.ltcBroadcast,
|
|
9
|
+
getRawTransaction: api_client_1.ApiServices.blockchain.ltc.ltcGetRawTransaction,
|
|
10
|
+
getUtxo: api_client_1.ApiServices.blockchain.ltc.ltcGetUtxo,
|
|
15
11
|
}) => {
|
|
16
|
-
|
|
17
|
-
return apiCalls.ltcBroadcast({
|
|
18
|
-
txData: yield prepareSignedTransaction(body),
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
const prepareSignedTransaction = (body) => (0, tslib_1.__awaiter)(void 0, void 0, void 0, function* () {
|
|
22
|
-
try {
|
|
23
|
-
const tx = new bitcore_lib_ltc_1.Transaction();
|
|
24
|
-
let privateKeysToSign = [];
|
|
25
|
-
body.to.forEach((to) => {
|
|
26
|
-
tx.to(to.address, shared_abstract_sdk_1.amountUtils.toSatoshis(to.value));
|
|
27
|
-
});
|
|
28
|
-
if ('fromAddress' in body) {
|
|
29
|
-
privateKeysToSign = yield privateKeysFromAddress(tx, body);
|
|
30
|
-
const fromAddress = body.fromAddress;
|
|
31
|
-
if (fromAddress && 'signatureId' in fromAddress[0] && fromAddress[0].signatureId) {
|
|
32
|
-
return JSON.stringify({ txData: JSON.stringify(tx), privateKeysToSign });
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
else if ('fromUTXO' in body) {
|
|
36
|
-
privateKeysToSign = yield privateKeysFromUTXO(tx, body);
|
|
37
|
-
const fromUTXO = body.fromUTXO;
|
|
38
|
-
if (fromUTXO && 'signatureId' in fromUTXO[0] && fromUTXO[0].signatureId) {
|
|
39
|
-
return JSON.stringify({ txData: JSON.stringify(tx), privateKeysToSign });
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
verifyAmounts(tx, body);
|
|
43
|
-
privateKeysToSign.forEach((key) => {
|
|
44
|
-
tx.sign(bitcore_lib_ltc_1.PrivateKey.fromWIF(key));
|
|
45
|
-
});
|
|
46
|
-
// @TODO unchecked serialize
|
|
47
|
-
return tx.serialize(true);
|
|
48
|
-
}
|
|
49
|
-
catch (e) {
|
|
50
|
-
throw new ltc_sdk_errors_1.LtcSdkError(e);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
function verifyAmounts(tx, body) {
|
|
54
|
-
const outputsSum = body.to
|
|
55
|
-
.map((to) => shared_abstract_sdk_1.amountUtils.toSatoshis(to.value))
|
|
56
|
-
.reduce((e, acc) => e.plus(acc), new bignumber_js_1.default(0));
|
|
57
|
-
const inputsSum = tx.inputs
|
|
58
|
-
.map((i) => new bignumber_js_1.default(i.output.satoshis))
|
|
59
|
-
.reduce((v, acc) => v.plus(acc), new bignumber_js_1.default(0));
|
|
60
|
-
if (outputsSum.eq(inputsSum)) {
|
|
61
|
-
throw new ltc_sdk_errors_1.LtcSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_FEE_TOO_SMALL);
|
|
62
|
-
}
|
|
63
|
-
if (outputsSum.gt(inputsSum)) {
|
|
64
|
-
throw new ltc_sdk_errors_1.LtcSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_NOT_ENOUGH_BALANCE);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
const privateKeysFromAddress = (transaction, body) => (0, tslib_1.__awaiter)(void 0, void 0, void 0, function* () {
|
|
68
|
-
const privateKeysToSign = [];
|
|
69
|
-
for (const item of body.fromAddress) {
|
|
70
|
-
const txs = yield apiCalls.ltcGetTxByAddress(item.address, 50); // @TODO OPENAPI remove pageSize
|
|
71
|
-
for (const tx of txs) {
|
|
72
|
-
for (const [i, o] of tx.outputs.entries()) {
|
|
73
|
-
if (o.address !== item.address) {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
try {
|
|
77
|
-
transaction.from({
|
|
78
|
-
txId: tx.hash,
|
|
79
|
-
outputIndex: i,
|
|
80
|
-
script: bitcore_lib_ltc_1.Script.fromAddress(item.address).toString(),
|
|
81
|
-
satoshis: shared_abstract_sdk_1.amountUtils.toSatoshis(o.value), // @TODO null check
|
|
82
|
-
});
|
|
83
|
-
if ('signatureId' in item)
|
|
84
|
-
privateKeysToSign.push(item.signatureId);
|
|
85
|
-
else if ('privateKey' in item)
|
|
86
|
-
privateKeysToSign.push(item.privateKey);
|
|
87
|
-
}
|
|
88
|
-
catch (e) {
|
|
89
|
-
console.error(e.toString());
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return privateKeysToSign;
|
|
95
|
-
});
|
|
96
|
-
const privateKeysFromUTXO = (transaction, body) => (0, tslib_1.__awaiter)(void 0, void 0, void 0, function* () {
|
|
97
|
-
var _a;
|
|
98
|
-
const privateKeysToSign = [];
|
|
99
|
-
for (const item of body.fromUTXO) {
|
|
100
|
-
const tx = yield apiCalls.ltcGetRawTransaction(item.txHash);
|
|
101
|
-
const output = ((_a = tx.outputs) !== null && _a !== void 0 ? _a : [])[item.index];
|
|
102
|
-
if (!output || !output.address || !output.value)
|
|
103
|
-
throw new ltc_sdk_errors_1.LtcSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_UTXO_NOT_FOUND);
|
|
104
|
-
transaction.from({
|
|
105
|
-
txId: item.txHash,
|
|
106
|
-
outputIndex: item.index,
|
|
107
|
-
script: bitcore_lib_ltc_1.Script.fromAddress(output.address).toString(),
|
|
108
|
-
satoshis: shared_abstract_sdk_1.amountUtils.toSatoshis(output.value),
|
|
109
|
-
});
|
|
110
|
-
if ('signatureId' in item)
|
|
111
|
-
privateKeysToSign.push(item.signatureId);
|
|
112
|
-
else if ('privateKey' in item)
|
|
113
|
-
privateKeysToSign.push(item.privateKey);
|
|
114
|
-
}
|
|
115
|
-
return privateKeysToSign;
|
|
116
|
-
});
|
|
117
|
-
return {
|
|
118
|
-
sendTransaction,
|
|
119
|
-
prepareSignedTransaction,
|
|
120
|
-
};
|
|
12
|
+
return Object.assign({}, (0, shared_blockchain_btc_based_1.btcBasedTransactions)(api_client_1.Currency.LTC, apiCalls));
|
|
121
13
|
};
|
|
122
14
|
exports.ltcTransactions = ltcTransactions;
|
|
123
15
|
//# sourceMappingURL=ltc.tx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ltc.tx.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/ltc/src/lib/transaction/ltc.tx.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ltc.tx.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/ltc/src/lib/transaction/ltc.tx.ts"],"names":[],"mappings":";;;AAAA,oDAA2D;AAC3D,sFAA4G;AAErG,MAAM,eAAe,GAAG,CAC7B,WAKI;IACF,cAAc,EAAE,wBAAW,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB;IAC5D,SAAS,EAAE,wBAAW,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY;IAClD,iBAAiB,EAAE,wBAAW,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB;IAClE,OAAO,EAAE,wBAAW,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU;CAC/C,EACgC,EAAE;IACnC,yBACK,IAAA,kDAAoB,EAAC,qBAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAChD;AACH,CAAC,CAAA;AAhBY,QAAA,eAAe,mBAgB3B"}
|