@spicenet-io/spiceflow-core 0.3.6 → 0.3.8
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/chains/index.d.ts +4 -0
- package/dist/chains/index.d.ts.map +1 -1
- package/dist/index.cjs +63 -8
- package/dist/index.js +54 -4
- package/dist/tokens/index.d.ts +2 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/chains/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type { Network, ChainMeta, ChainType } from "./types.js";
|
|
2
2
|
export { CHAINS } from "./list.js";
|
|
3
3
|
import type { Network, ChainMeta } from "./types.js";
|
|
4
|
+
import { type Chain } from "viem";
|
|
4
5
|
export declare function getChainMeta(chainId: number): ChainMeta | undefined;
|
|
5
6
|
export declare function getChainsByNetwork(network: Network): ChainMeta[];
|
|
6
7
|
export declare function getChainIdsByNetwork(network: Network): number[];
|
|
@@ -9,6 +10,9 @@ export declare function getTestnetChains(): ChainMeta[];
|
|
|
9
10
|
/** Returns ALL chains for a network including non-EVM (StarkNet). */
|
|
10
11
|
export declare function getAllChainsByNetwork(network: Network): ChainMeta[];
|
|
11
12
|
export declare function getDelegateContract(chainId: number): `0x${string}` | undefined;
|
|
13
|
+
export declare const VIEM_CHAINS: Record<number, Chain>;
|
|
14
|
+
export declare function getViemChain(chainId: number): Chain | undefined;
|
|
15
|
+
export declare function requireViemChain(chainId: number): Chain;
|
|
12
16
|
export declare function isStarknetChain(chainId: number): boolean;
|
|
13
17
|
/**
|
|
14
18
|
* StarkNet Mainnet chain ID as a JS number.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAE/C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEnE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,CAIhE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAE/D;AAED,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAED,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,GAAG,SAAS,CAE9E;AA8BD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAI7C,CAAC;AAEF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAKvD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAyB,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -31,6 +31,7 @@ __export(index_exports, {
|
|
|
31
31
|
STARKNET_MAINNET_CHAIN_ID: () => STARKNET_MAINNET_CHAIN_ID,
|
|
32
32
|
SpiceFlowCore: () => SpiceFlowCore,
|
|
33
33
|
TOKENS: () => TOKENS,
|
|
34
|
+
VIEM_CHAINS: () => VIEM_CHAINS,
|
|
34
35
|
WCBTC_ABI: () => WCBTC_ABI,
|
|
35
36
|
ZERO_ADDRESS: () => ZERO_ADDRESS,
|
|
36
37
|
applySlippage: () => applySlippage,
|
|
@@ -54,8 +55,10 @@ __export(index_exports, {
|
|
|
54
55
|
getRecentBlock: () => getRecentBlock,
|
|
55
56
|
getTestnetChains: () => getTestnetChains,
|
|
56
57
|
getTokenByAddress: () => getTokenByAddress,
|
|
58
|
+
getTokenBySymbol: () => getTokenBySymbol,
|
|
57
59
|
getTokenDefinition: () => getTokenDefinition,
|
|
58
60
|
getTokensForChain: () => getTokensForChain,
|
|
61
|
+
getViemChain: () => getViemChain,
|
|
59
62
|
hashChainBatches: () => hashChainBatches,
|
|
60
63
|
isBtcDenominated: () => isBtcDenominated,
|
|
61
64
|
isNativeToken: () => isNativeToken,
|
|
@@ -64,6 +67,8 @@ __export(index_exports, {
|
|
|
64
67
|
isUsdDenominated: () => isUsdDenominated,
|
|
65
68
|
normalizeNativeTokenAddress: () => normalizeNativeTokenAddress,
|
|
66
69
|
prepareRFQT: () => prepareRFQT,
|
|
70
|
+
requireTokenBySymbol: () => requireTokenBySymbol,
|
|
71
|
+
requireViemChain: () => requireViemChain,
|
|
67
72
|
resolveTokenRef: () => resolveTokenRef,
|
|
68
73
|
submitTransaction: () => submitTransaction,
|
|
69
74
|
truncateAddress: () => truncateAddress,
|
|
@@ -669,6 +674,18 @@ function getTokenByAddress(address, chainId) {
|
|
|
669
674
|
if (!entry) return void 0;
|
|
670
675
|
return _resolve(entry.token, entry.deployment);
|
|
671
676
|
}
|
|
677
|
+
function getTokenBySymbol(symbol, chainId) {
|
|
678
|
+
return getTokensForChain(chainId).find(
|
|
679
|
+
(token) => token.symbol.toUpperCase() === symbol.toUpperCase()
|
|
680
|
+
);
|
|
681
|
+
}
|
|
682
|
+
function requireTokenBySymbol(symbol, chainId) {
|
|
683
|
+
const token = getTokenBySymbol(symbol, chainId);
|
|
684
|
+
if (token) return token;
|
|
685
|
+
throw new Error(
|
|
686
|
+
`Token "${symbol}" not found on chain ${chainId} in the token registry.`
|
|
687
|
+
);
|
|
688
|
+
}
|
|
672
689
|
function getTokenDefinition(address) {
|
|
673
690
|
return _addressIndex.get(address.toLowerCase());
|
|
674
691
|
}
|
|
@@ -701,10 +718,7 @@ function isBtcDenominated(address) {
|
|
|
701
718
|
}
|
|
702
719
|
function resolveTokenRef(ref) {
|
|
703
720
|
const [symbol, chainId] = ref;
|
|
704
|
-
const
|
|
705
|
-
const match = tokens.find(
|
|
706
|
-
(t) => t.symbol.toUpperCase() === symbol.toUpperCase()
|
|
707
|
-
);
|
|
721
|
+
const match = getTokenBySymbol(symbol, chainId);
|
|
708
722
|
if (!match) {
|
|
709
723
|
throw new Error(
|
|
710
724
|
`Token "${symbol}" not found on chain ${chainId} in the token registry.`
|
|
@@ -918,6 +932,7 @@ var CHAINS = {
|
|
|
918
932
|
};
|
|
919
933
|
|
|
920
934
|
// src/chains/index.ts
|
|
935
|
+
var import_viem2 = require("viem");
|
|
921
936
|
function getChainMeta(chainId) {
|
|
922
937
|
return CHAINS[chainId];
|
|
923
938
|
}
|
|
@@ -941,6 +956,41 @@ function getAllChainsByNetwork(network) {
|
|
|
941
956
|
function getDelegateContract(chainId) {
|
|
942
957
|
return CHAINS[chainId]?.delegateContract;
|
|
943
958
|
}
|
|
959
|
+
function toViemChain(meta) {
|
|
960
|
+
if (meta.chainType === "starknet") return void 0;
|
|
961
|
+
return (0, import_viem2.defineChain)({
|
|
962
|
+
id: meta.id,
|
|
963
|
+
name: meta.name,
|
|
964
|
+
nativeCurrency: meta.nativeCurrency,
|
|
965
|
+
rpcUrls: {
|
|
966
|
+
default: {
|
|
967
|
+
http: [meta.rpcUrl]
|
|
968
|
+
},
|
|
969
|
+
public: {
|
|
970
|
+
http: [meta.rpcUrl]
|
|
971
|
+
}
|
|
972
|
+
},
|
|
973
|
+
...meta.blockExplorer ? {
|
|
974
|
+
blockExplorers: {
|
|
975
|
+
default: {
|
|
976
|
+
name: meta.displayName || meta.name,
|
|
977
|
+
url: meta.blockExplorer
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
} : {}
|
|
981
|
+
});
|
|
982
|
+
}
|
|
983
|
+
var VIEM_CHAINS = Object.fromEntries(
|
|
984
|
+
Object.values(CHAINS).map((meta) => [meta.id, toViemChain(meta)]).filter((entry) => entry[1] !== void 0)
|
|
985
|
+
);
|
|
986
|
+
function getViemChain(chainId) {
|
|
987
|
+
return VIEM_CHAINS[chainId];
|
|
988
|
+
}
|
|
989
|
+
function requireViemChain(chainId) {
|
|
990
|
+
const chain = getViemChain(chainId);
|
|
991
|
+
if (chain) return chain;
|
|
992
|
+
throw new Error(`Viem chain not found for chain ${chainId}.`);
|
|
993
|
+
}
|
|
944
994
|
function isStarknetChain(chainId) {
|
|
945
995
|
return getChainMeta(chainId)?.chainType === "starknet";
|
|
946
996
|
}
|
|
@@ -1361,7 +1411,7 @@ var uniV3SwapRouterAbi = [
|
|
|
1361
1411
|
];
|
|
1362
1412
|
|
|
1363
1413
|
// src/swap.ts
|
|
1364
|
-
var
|
|
1414
|
+
var import_viem3 = require("viem");
|
|
1365
1415
|
function applySlippage(amount, slippage = 0.03) {
|
|
1366
1416
|
const slippageBps = BigInt(Math.floor((1 - slippage) * 1e4));
|
|
1367
1417
|
return amount * slippageBps / 10000n;
|
|
@@ -1380,8 +1430,8 @@ function buildUniV3SwapCalls(params) {
|
|
|
1380
1430
|
{
|
|
1381
1431
|
to: tokenIn,
|
|
1382
1432
|
value: 0n,
|
|
1383
|
-
data: (0,
|
|
1384
|
-
abi:
|
|
1433
|
+
data: (0, import_viem3.encodeFunctionData)({
|
|
1434
|
+
abi: import_viem3.erc20Abi,
|
|
1385
1435
|
functionName: "approve",
|
|
1386
1436
|
args: [config.swapRouter, amountIn]
|
|
1387
1437
|
})
|
|
@@ -1389,7 +1439,7 @@ function buildUniV3SwapCalls(params) {
|
|
|
1389
1439
|
{
|
|
1390
1440
|
to: config.swapRouter,
|
|
1391
1441
|
value: 0n,
|
|
1392
|
-
data: (0,
|
|
1442
|
+
data: (0, import_viem3.encodeFunctionData)({
|
|
1393
1443
|
abi: uniV3SwapRouterAbi,
|
|
1394
1444
|
functionName: "exactInputSingle",
|
|
1395
1445
|
args: [
|
|
@@ -1421,6 +1471,7 @@ function buildUniV3SwapCalls(params) {
|
|
|
1421
1471
|
STARKNET_MAINNET_CHAIN_ID,
|
|
1422
1472
|
SpiceFlowCore,
|
|
1423
1473
|
TOKENS,
|
|
1474
|
+
VIEM_CHAINS,
|
|
1424
1475
|
WCBTC_ABI,
|
|
1425
1476
|
ZERO_ADDRESS,
|
|
1426
1477
|
applySlippage,
|
|
@@ -1444,8 +1495,10 @@ function buildUniV3SwapCalls(params) {
|
|
|
1444
1495
|
getRecentBlock,
|
|
1445
1496
|
getTestnetChains,
|
|
1446
1497
|
getTokenByAddress,
|
|
1498
|
+
getTokenBySymbol,
|
|
1447
1499
|
getTokenDefinition,
|
|
1448
1500
|
getTokensForChain,
|
|
1501
|
+
getViemChain,
|
|
1449
1502
|
hashChainBatches,
|
|
1450
1503
|
isBtcDenominated,
|
|
1451
1504
|
isNativeToken,
|
|
@@ -1454,6 +1507,8 @@ function buildUniV3SwapCalls(params) {
|
|
|
1454
1507
|
isUsdDenominated,
|
|
1455
1508
|
normalizeNativeTokenAddress,
|
|
1456
1509
|
prepareRFQT,
|
|
1510
|
+
requireTokenBySymbol,
|
|
1511
|
+
requireViemChain,
|
|
1457
1512
|
resolveTokenRef,
|
|
1458
1513
|
submitTransaction,
|
|
1459
1514
|
truncateAddress,
|
package/dist/index.js
CHANGED
|
@@ -594,6 +594,18 @@ function getTokenByAddress(address, chainId) {
|
|
|
594
594
|
if (!entry) return void 0;
|
|
595
595
|
return _resolve(entry.token, entry.deployment);
|
|
596
596
|
}
|
|
597
|
+
function getTokenBySymbol(symbol, chainId) {
|
|
598
|
+
return getTokensForChain(chainId).find(
|
|
599
|
+
(token) => token.symbol.toUpperCase() === symbol.toUpperCase()
|
|
600
|
+
);
|
|
601
|
+
}
|
|
602
|
+
function requireTokenBySymbol(symbol, chainId) {
|
|
603
|
+
const token = getTokenBySymbol(symbol, chainId);
|
|
604
|
+
if (token) return token;
|
|
605
|
+
throw new Error(
|
|
606
|
+
`Token "${symbol}" not found on chain ${chainId} in the token registry.`
|
|
607
|
+
);
|
|
608
|
+
}
|
|
597
609
|
function getTokenDefinition(address) {
|
|
598
610
|
return _addressIndex.get(address.toLowerCase());
|
|
599
611
|
}
|
|
@@ -626,10 +638,7 @@ function isBtcDenominated(address) {
|
|
|
626
638
|
}
|
|
627
639
|
function resolveTokenRef(ref) {
|
|
628
640
|
const [symbol, chainId] = ref;
|
|
629
|
-
const
|
|
630
|
-
const match = tokens.find(
|
|
631
|
-
(t) => t.symbol.toUpperCase() === symbol.toUpperCase()
|
|
632
|
-
);
|
|
641
|
+
const match = getTokenBySymbol(symbol, chainId);
|
|
633
642
|
if (!match) {
|
|
634
643
|
throw new Error(
|
|
635
644
|
`Token "${symbol}" not found on chain ${chainId} in the token registry.`
|
|
@@ -843,6 +852,7 @@ var CHAINS = {
|
|
|
843
852
|
};
|
|
844
853
|
|
|
845
854
|
// src/chains/index.ts
|
|
855
|
+
import { defineChain } from "viem";
|
|
846
856
|
function getChainMeta(chainId) {
|
|
847
857
|
return CHAINS[chainId];
|
|
848
858
|
}
|
|
@@ -866,6 +876,41 @@ function getAllChainsByNetwork(network) {
|
|
|
866
876
|
function getDelegateContract(chainId) {
|
|
867
877
|
return CHAINS[chainId]?.delegateContract;
|
|
868
878
|
}
|
|
879
|
+
function toViemChain(meta) {
|
|
880
|
+
if (meta.chainType === "starknet") return void 0;
|
|
881
|
+
return defineChain({
|
|
882
|
+
id: meta.id,
|
|
883
|
+
name: meta.name,
|
|
884
|
+
nativeCurrency: meta.nativeCurrency,
|
|
885
|
+
rpcUrls: {
|
|
886
|
+
default: {
|
|
887
|
+
http: [meta.rpcUrl]
|
|
888
|
+
},
|
|
889
|
+
public: {
|
|
890
|
+
http: [meta.rpcUrl]
|
|
891
|
+
}
|
|
892
|
+
},
|
|
893
|
+
...meta.blockExplorer ? {
|
|
894
|
+
blockExplorers: {
|
|
895
|
+
default: {
|
|
896
|
+
name: meta.displayName || meta.name,
|
|
897
|
+
url: meta.blockExplorer
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
} : {}
|
|
901
|
+
});
|
|
902
|
+
}
|
|
903
|
+
var VIEM_CHAINS = Object.fromEntries(
|
|
904
|
+
Object.values(CHAINS).map((meta) => [meta.id, toViemChain(meta)]).filter((entry) => entry[1] !== void 0)
|
|
905
|
+
);
|
|
906
|
+
function getViemChain(chainId) {
|
|
907
|
+
return VIEM_CHAINS[chainId];
|
|
908
|
+
}
|
|
909
|
+
function requireViemChain(chainId) {
|
|
910
|
+
const chain = getViemChain(chainId);
|
|
911
|
+
if (chain) return chain;
|
|
912
|
+
throw new Error(`Viem chain not found for chain ${chainId}.`);
|
|
913
|
+
}
|
|
869
914
|
function isStarknetChain(chainId) {
|
|
870
915
|
return getChainMeta(chainId)?.chainType === "starknet";
|
|
871
916
|
}
|
|
@@ -1345,6 +1390,7 @@ export {
|
|
|
1345
1390
|
STARKNET_MAINNET_CHAIN_ID,
|
|
1346
1391
|
SpiceFlowCore,
|
|
1347
1392
|
TOKENS,
|
|
1393
|
+
VIEM_CHAINS,
|
|
1348
1394
|
WCBTC_ABI,
|
|
1349
1395
|
ZERO_ADDRESS,
|
|
1350
1396
|
applySlippage,
|
|
@@ -1368,8 +1414,10 @@ export {
|
|
|
1368
1414
|
getRecentBlock,
|
|
1369
1415
|
getTestnetChains,
|
|
1370
1416
|
getTokenByAddress,
|
|
1417
|
+
getTokenBySymbol,
|
|
1371
1418
|
getTokenDefinition,
|
|
1372
1419
|
getTokensForChain,
|
|
1420
|
+
getViemChain,
|
|
1373
1421
|
hashChainBatches,
|
|
1374
1422
|
isBtcDenominated,
|
|
1375
1423
|
isNativeToken,
|
|
@@ -1378,6 +1426,8 @@ export {
|
|
|
1378
1426
|
isUsdDenominated,
|
|
1379
1427
|
normalizeNativeTokenAddress,
|
|
1380
1428
|
prepareRFQT,
|
|
1429
|
+
requireTokenBySymbol,
|
|
1430
|
+
requireViemChain,
|
|
1381
1431
|
resolveTokenRef,
|
|
1382
1432
|
submitTransaction,
|
|
1383
1433
|
truncateAddress,
|
package/dist/tokens/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import type { TokenDefinition, TokenDeployment, Token } from "./types.js";
|
|
|
4
4
|
import type { ChainToken, TokenRef } from "../types.js";
|
|
5
5
|
export declare function getTokensForChain(chainId: number): Token[];
|
|
6
6
|
export declare function getTokenByAddress(address: string, chainId: number): Token | undefined;
|
|
7
|
+
export declare function getTokenBySymbol(symbol: string, chainId: number): Token | undefined;
|
|
8
|
+
export declare function requireTokenBySymbol(symbol: string, chainId: number): Token;
|
|
7
9
|
export declare function getTokenDefinition(address: string): TokenDefinition | undefined;
|
|
8
10
|
export declare function getDeployment(address: string, chainId: number): TokenDeployment | undefined;
|
|
9
11
|
export declare function getEquivalentAddresses(tokenAddress: string): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA8DxD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAI1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAIrF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE/E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE3F;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrE;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK3D;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA8DxD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAI1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAIrF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAInF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAO3E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE/E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE3F;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrE;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK3D;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,CAgBzD"}
|