@paraswap/dex-lib 4.5.11 → 4.5.12-fluid-dex-lite.1

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.
Files changed (195) hide show
  1. package/build/abi/bunni-v2/BunniHook.abi.json +1921 -0
  2. package/build/abi/bunni-v2/BunniHub.abi.json +1598 -0
  3. package/build/abi/bunni-v2/BunniToken.abi.json +833 -0
  4. package/build/abi/bunni-v2/FeeOverrideHooklet.abi.json +1947 -0
  5. package/build/abi/bunni-v2/FloodPlain.abi.json +1195 -0
  6. package/build/abi/bunni-v2/PoolManager.abi.json +1366 -0
  7. package/build/abi/bunni-v2/V4Quoter.abi.json +637 -0
  8. package/build/abi/fluid-dex-lite/FluidDexLite.abi.json +262 -0
  9. package/build/abi/miro-migrator/MiroMigrator.abi.json +19 -36
  10. package/build/abi/pangolin-v3/PangolinV3StateMulticall.abi.json +796 -0
  11. package/build/abi/ring-v2/few-wrapped-token.json +587 -0
  12. package/build/abi/ring-v2/ring-v2-factory.json +125 -0
  13. package/build/abi/ring-v2/ring-v2-pool.json +461 -0
  14. package/build/abi/ring-v2/ring-v2-router.json +332 -0
  15. package/build/abi/uniswap-v4/hooks/cabalcoin-hook.abi.json +682 -0
  16. package/build/abi/uniswap-v4/hooks/fee-hook.abi.json +1335 -0
  17. package/build/dex/bunni-v2/bunni-v2-pool.d.ts +61 -0
  18. package/build/dex/bunni-v2/bunni-v2-pool.js +495 -0
  19. package/build/dex/bunni-v2/bunni-v2-pool.js.map +1 -0
  20. package/build/dex/bunni-v2/bunni-v2.d.ts +49 -0
  21. package/build/dex/bunni-v2/bunni-v2.js +435 -0
  22. package/build/dex/bunni-v2/bunni-v2.js.map +1 -0
  23. package/build/dex/bunni-v2/config.d.ts +3 -0
  24. package/build/dex/bunni-v2/config.js +130 -0
  25. package/build/dex/bunni-v2/config.js.map +1 -0
  26. package/build/dex/bunni-v2/encoder.d.ts +19 -0
  27. package/build/dex/bunni-v2/encoder.js +400 -0
  28. package/build/dex/bunni-v2/encoder.js.map +1 -0
  29. package/build/dex/bunni-v2/getOnChainState.d.ts +25 -0
  30. package/build/dex/bunni-v2/getOnChainState.js +455 -0
  31. package/build/dex/bunni-v2/getOnChainState.js.map +1 -0
  32. package/build/dex/bunni-v2/hook/BunniSwapMath.d.ts +7 -0
  33. package/build/dex/bunni-v2/hook/BunniSwapMath.js +198 -0
  34. package/build/dex/bunni-v2/hook/BunniSwapMath.js.map +1 -0
  35. package/build/dex/bunni-v2/hook/SwapMath.d.ts +8 -0
  36. package/build/dex/bunni-v2/hook/SwapMath.js +65 -0
  37. package/build/dex/bunni-v2/hook/SwapMath.js.map +1 -0
  38. package/build/dex/bunni-v2/hooklet/FeeOverrideHooklet.d.ts +33 -0
  39. package/build/dex/bunni-v2/hooklet/FeeOverrideHooklet.js +33 -0
  40. package/build/dex/bunni-v2/hooklet/FeeOverrideHooklet.js.map +1 -0
  41. package/build/dex/bunni-v2/hooklet/index.d.ts +21 -0
  42. package/build/dex/bunni-v2/hooklet/index.js +64 -0
  43. package/build/dex/bunni-v2/hooklet/index.js.map +1 -0
  44. package/build/dex/bunni-v2/ldf/CarpetedDoubleGeometricDistribution.d.ts +70 -0
  45. package/build/dex/bunni-v2/ldf/CarpetedDoubleGeometricDistribution.js +277 -0
  46. package/build/dex/bunni-v2/ldf/CarpetedDoubleGeometricDistribution.js.map +1 -0
  47. package/build/dex/bunni-v2/ldf/CarpetedGeometricDistribution.d.ts +64 -0
  48. package/build/dex/bunni-v2/ldf/CarpetedGeometricDistribution.js +262 -0
  49. package/build/dex/bunni-v2/ldf/CarpetedGeometricDistribution.js.map +1 -0
  50. package/build/dex/bunni-v2/ldf/DoubleGeometricDistribution.d.ts +60 -0
  51. package/build/dex/bunni-v2/ldf/DoubleGeometricDistribution.js +224 -0
  52. package/build/dex/bunni-v2/ldf/DoubleGeometricDistribution.js.map +1 -0
  53. package/build/dex/bunni-v2/ldf/GeometricDistribution.d.ts +56 -0
  54. package/build/dex/bunni-v2/ldf/GeometricDistribution.js +489 -0
  55. package/build/dex/bunni-v2/ldf/GeometricDistribution.js.map +1 -0
  56. package/build/dex/bunni-v2/ldf/LDFType.d.ts +5 -0
  57. package/build/dex/bunni-v2/ldf/LDFType.js +10 -0
  58. package/build/dex/bunni-v2/ldf/LDFType.js.map +1 -0
  59. package/build/dex/bunni-v2/ldf/ShiftMode.d.ts +7 -0
  60. package/build/dex/bunni-v2/ldf/ShiftMode.js +19 -0
  61. package/build/dex/bunni-v2/ldf/ShiftMode.js.map +1 -0
  62. package/build/dex/bunni-v2/ldf/UniformDistribution.d.ts +55 -0
  63. package/build/dex/bunni-v2/ldf/UniformDistribution.js +291 -0
  64. package/build/dex/bunni-v2/ldf/UniformDistribution.js.map +1 -0
  65. package/build/dex/bunni-v2/ldf/index.d.ts +15 -0
  66. package/build/dex/bunni-v2/ldf/index.js +21 -0
  67. package/build/dex/bunni-v2/ldf/index.js.map +1 -0
  68. package/build/dex/bunni-v2/lib/AmAmmPayload.d.ts +4 -0
  69. package/build/dex/bunni-v2/lib/AmAmmPayload.js +10 -0
  70. package/build/dex/bunni-v2/lib/AmAmmPayload.js.map +1 -0
  71. package/build/dex/bunni-v2/lib/BitMath.d.ts +4 -0
  72. package/build/dex/bunni-v2/lib/BitMath.js +24 -0
  73. package/build/dex/bunni-v2/lib/BitMath.js.map +1 -0
  74. package/build/dex/bunni-v2/lib/Constants.d.ts +14 -0
  75. package/build/dex/bunni-v2/lib/Constants.js +18 -0
  76. package/build/dex/bunni-v2/lib/Constants.js.map +1 -0
  77. package/build/dex/bunni-v2/lib/ExpMath.d.ts +5 -0
  78. package/build/dex/bunni-v2/lib/ExpMath.js +121 -0
  79. package/build/dex/bunni-v2/lib/ExpMath.js.map +1 -0
  80. package/build/dex/bunni-v2/lib/FeeMath.d.ts +2 -0
  81. package/build/dex/bunni-v2/lib/FeeMath.js +27 -0
  82. package/build/dex/bunni-v2/lib/FeeMath.js.map +1 -0
  83. package/build/dex/bunni-v2/lib/FixedPointMath.d.ts +3 -0
  84. package/build/dex/bunni-v2/lib/FixedPointMath.js +15 -0
  85. package/build/dex/bunni-v2/lib/FixedPointMath.js.map +1 -0
  86. package/build/dex/bunni-v2/lib/FullMathX96.d.ts +4 -0
  87. package/build/dex/bunni-v2/lib/FullMathX96.js +21 -0
  88. package/build/dex/bunni-v2/lib/FullMathX96.js.map +1 -0
  89. package/build/dex/bunni-v2/lib/IdleBalance.d.ts +11 -0
  90. package/build/dex/bunni-v2/lib/IdleBalance.js +33 -0
  91. package/build/dex/bunni-v2/lib/IdleBalance.js.map +1 -0
  92. package/build/dex/bunni-v2/lib/LiquidityAmounts.d.ts +6 -0
  93. package/build/dex/bunni-v2/lib/LiquidityAmounts.js +25 -0
  94. package/build/dex/bunni-v2/lib/LiquidityAmounts.js.map +1 -0
  95. package/build/dex/bunni-v2/lib/Math.d.ts +28 -0
  96. package/build/dex/bunni-v2/lib/Math.js +169 -0
  97. package/build/dex/bunni-v2/lib/Math.js.map +1 -0
  98. package/build/dex/bunni-v2/lib/Oracle.d.ts +27 -0
  99. package/build/dex/bunni-v2/lib/Oracle.js +180 -0
  100. package/build/dex/bunni-v2/lib/Oracle.js.map +1 -0
  101. package/build/dex/bunni-v2/lib/QueryLDF.d.ts +12 -0
  102. package/build/dex/bunni-v2/lib/QueryLDF.js +90 -0
  103. package/build/dex/bunni-v2/lib/QueryLDF.js.map +1 -0
  104. package/build/dex/bunni-v2/lib/QueryTwap.d.ts +2 -0
  105. package/build/dex/bunni-v2/lib/QueryTwap.js +13 -0
  106. package/build/dex/bunni-v2/lib/QueryTwap.js.map +1 -0
  107. package/build/dex/bunni-v2/lib/SqrtPriceMath.d.ts +8 -0
  108. package/build/dex/bunni-v2/lib/SqrtPriceMath.js +84 -0
  109. package/build/dex/bunni-v2/lib/SqrtPriceMath.js.map +1 -0
  110. package/build/dex/bunni-v2/lib/TickMath.d.ts +11 -0
  111. package/build/dex/bunni-v2/lib/TickMath.js +100 -0
  112. package/build/dex/bunni-v2/lib/TickMath.js.map +1 -0
  113. package/build/dex/bunni-v2/lib/VaultMath.d.ts +2 -0
  114. package/build/dex/bunni-v2/lib/VaultMath.js +11 -0
  115. package/build/dex/bunni-v2/lib/VaultMath.js.map +1 -0
  116. package/build/dex/bunni-v2/logic/AmAmm.d.ts +11 -0
  117. package/build/dex/bunni-v2/logic/AmAmm.js +156 -0
  118. package/build/dex/bunni-v2/logic/AmAmm.js.map +1 -0
  119. package/build/dex/bunni-v2/logic/BunniHookLogic.d.ts +10 -0
  120. package/build/dex/bunni-v2/logic/BunniHookLogic.js +298 -0
  121. package/build/dex/bunni-v2/logic/BunniHookLogic.js.map +1 -0
  122. package/build/dex/bunni-v2/logic/BunniHubLogic.d.ts +5 -0
  123. package/build/dex/bunni-v2/logic/BunniHubLogic.js +245 -0
  124. package/build/dex/bunni-v2/logic/BunniHubLogic.js.map +1 -0
  125. package/build/dex/bunni-v2/logic/BunniQuoter.d.ts +12 -0
  126. package/build/dex/bunni-v2/logic/BunniQuoter.js +201 -0
  127. package/build/dex/bunni-v2/logic/BunniQuoter.js.map +1 -0
  128. package/build/dex/bunni-v2/subgraph.d.ts +7 -0
  129. package/build/dex/bunni-v2/subgraph.js +184 -0
  130. package/build/dex/bunni-v2/subgraph.js.map +1 -0
  131. package/build/dex/bunni-v2/types.d.ts +256 -0
  132. package/build/dex/bunni-v2/types.js +3 -0
  133. package/build/dex/bunni-v2/types.js.map +1 -0
  134. package/build/dex/bunni-v2/utils.d.ts +12 -0
  135. package/build/dex/bunni-v2/utils.js +181 -0
  136. package/build/dex/bunni-v2/utils.js.map +1 -0
  137. package/build/dex/fluid-dex-lite/config.d.ts +3 -0
  138. package/build/dex/fluid-dex-lite/config.js +12 -0
  139. package/build/dex/fluid-dex-lite/config.js.map +1 -0
  140. package/build/dex/fluid-dex-lite/fluid-dex-lite-math.d.ts +63 -0
  141. package/build/dex/fluid-dex-lite/fluid-dex-lite-math.js +543 -0
  142. package/build/dex/fluid-dex-lite/fluid-dex-lite-math.js.map +1 -0
  143. package/build/dex/fluid-dex-lite/fluid-dex-lite-pool.d.ts +42 -0
  144. package/build/dex/fluid-dex-lite/fluid-dex-lite-pool.js +191 -0
  145. package/build/dex/fluid-dex-lite/fluid-dex-lite-pool.js.map +1 -0
  146. package/build/dex/fluid-dex-lite/fluid-dex-lite.d.ts +46 -0
  147. package/build/dex/fluid-dex-lite/fluid-dex-lite.js +477 -0
  148. package/build/dex/fluid-dex-lite/fluid-dex-lite.js.map +1 -0
  149. package/build/dex/fluid-dex-lite/types.d.ts +54 -0
  150. package/build/dex/fluid-dex-lite/types.js +3 -0
  151. package/build/dex/fluid-dex-lite/types.js.map +1 -0
  152. package/build/dex/fluid-dex-lite/utils.d.ts +12 -0
  153. package/build/dex/fluid-dex-lite/utils.js +51 -0
  154. package/build/dex/fluid-dex-lite/utils.js.map +1 -0
  155. package/build/dex/index.js +2 -0
  156. package/build/dex/index.js.map +1 -1
  157. package/build/dex/miro-migrator/config.js +10 -3
  158. package/build/dex/miro-migrator/config.js.map +1 -1
  159. package/build/dex/miro-migrator/constants.d.ts +1 -2
  160. package/build/dex/miro-migrator/constants.js +2 -3
  161. package/build/dex/miro-migrator/constants.js.map +1 -1
  162. package/build/dex/miro-migrator/miro-migrator-pool.d.ts +5 -9
  163. package/build/dex/miro-migrator/miro-migrator-pool.js +30 -49
  164. package/build/dex/miro-migrator/miro-migrator-pool.js.map +1 -1
  165. package/build/dex/miro-migrator/miro-migrator-state.d.ts +27 -0
  166. package/build/dex/miro-migrator/miro-migrator-state.js +89 -0
  167. package/build/dex/miro-migrator/miro-migrator-state.js.map +1 -0
  168. package/build/dex/miro-migrator/miro-migrator.d.ts +4 -5
  169. package/build/dex/miro-migrator/miro-migrator.js +83 -41
  170. package/build/dex/miro-migrator/miro-migrator.js.map +1 -1
  171. package/build/dex/miro-migrator/types.d.ts +4 -2
  172. package/build/dex/miro-migrator/types.js +2 -1
  173. package/build/dex/miro-migrator/types.js.map +1 -1
  174. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.d.ts +4 -0
  175. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js +56 -0
  176. package/build/dex/uniswap-v3/forks/pangolin-v3/utils.js.map +1 -0
  177. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.d.ts +7 -0
  178. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js +28 -0
  179. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/cabalcoin-hook-pool.js.map +1 -0
  180. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.d.ts +0 -0
  181. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js +2 -0
  182. package/build/dex/uniswap-v4/hooks/cabalcoin-hook/types.js.map +1 -0
  183. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.d.ts +7 -0
  184. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js +28 -0
  185. package/build/dex/uniswap-v4/hooks/fee-hook/fee-hook-pool.js.map +1 -0
  186. package/build/dex/uniswap-v4/hooks/fee-hook/types.d.ts +0 -0
  187. package/build/dex/uniswap-v4/hooks/fee-hook/types.js +2 -0
  188. package/build/dex/uniswap-v4/hooks/fee-hook/types.js.map +1 -0
  189. package/build/dex/uniswap-v4/hooks/index.d.ts +2 -0
  190. package/build/dex/uniswap-v4/hooks/index.js +8 -0
  191. package/build/dex/uniswap-v4/hooks/index.js.map +1 -0
  192. package/build/dex/usdc-transmuter/usdc-transmuter-pool.d.ts +26 -0
  193. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js +75 -0
  194. package/build/dex/usdc-transmuter/usdc-transmuter-pool.js.map +1 -0
  195. package/package.json +1 -1
@@ -0,0 +1,477 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
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);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
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
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.FluidDexLite = void 0;
40
+ const constants_1 = require("../../constants");
41
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
42
+ const utils_1 = require("../../utils");
43
+ const fluid_dex_lite_math_1 = require("./fluid-dex-lite-math");
44
+ const simple_exchange_1 = require("../simple-exchange");
45
+ const config_1 = require("./config");
46
+ const fluid_dex_lite_pool_1 = require("./fluid-dex-lite-pool");
47
+ const FluidDexLite_abi_json_1 = __importDefault(require("../../abi/fluid-dex-lite/FluidDexLite.abi.json"));
48
+ const abi_1 = require("@ethersproject/abi");
49
+ const abi_2 = require("@ethersproject/abi");
50
+ const web3_utils_1 = require("web3-utils");
51
+ const fluid_dex_lite_math_2 = require("./fluid-dex-lite-math");
52
+ const utils_2 = require("../../executor/utils");
53
+ const bigint_constants_1 = require("../../bigint-constants");
54
+ const utils_3 = require("./utils");
55
+ // Storage slot constants
56
+ const DEX_LITE_DEXES_LIST_SLOT = 1;
57
+ class FluidDexLite extends simple_exchange_1.SimpleExchange {
58
+ network;
59
+ dexKey;
60
+ dexHelper;
61
+ eventPools = {};
62
+ pools = [];
63
+ hasConstantPriceLargeAmounts = false;
64
+ needWrapNative = true;
65
+ isFeeOnTransferSupported = false;
66
+ static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.FluidDexLiteConfig);
67
+ logger;
68
+ fluidDexLiteIface;
69
+ dexLiteAddress;
70
+ constructor(network, dexKey, dexHelper) {
71
+ super(dexHelper, dexKey);
72
+ this.network = network;
73
+ this.dexKey = dexKey;
74
+ this.dexHelper = dexHelper;
75
+ this.logger = dexHelper.getLogger(dexKey);
76
+ this.fluidDexLiteIface = new abi_1.Interface(FluidDexLite_abi_json_1.default);
77
+ const config = config_1.FluidDexLiteConfig[dexKey][network];
78
+ if (!config) {
79
+ throw new Error(`No config found for ${dexKey} on network ${network}`);
80
+ }
81
+ this.dexLiteAddress = config.dexLiteAddress;
82
+ }
83
+ // Initialize pricing is called once in the start of
84
+ // pricing service. It is intended to setup the integration
85
+ // for pricing requests.
86
+ async initializePricing(blockNumber) {
87
+ try {
88
+ // Step 1: Read the _dexesList array from storage
89
+ await this.loadDexesList(blockNumber);
90
+ // Step 2: Initialize event pools for each dex
91
+ await this.initializeEventPools(blockNumber);
92
+ this.logger.info(`FluidDexLite: Initialized ${this.pools.length} pools`);
93
+ }
94
+ catch (error) {
95
+ this.logger.error('FluidDexLite: Failed to initialize pricing', error);
96
+ throw error;
97
+ }
98
+ }
99
+ // Load all dex pools from the _dexesList storage array
100
+ async loadDexesList(blockNumber) {
101
+ try {
102
+ const [lengthResult] = await this.dexHelper.multiWrapper.tryAggregate(false, [
103
+ (0, utils_3.readFromStorageCall)(this.dexLiteAddress, this.fluidDexLiteIface, (0, utils_3.encodeSlot)(DEX_LITE_DEXES_LIST_SLOT)),
104
+ ], blockNumber);
105
+ const arrayLength = Number(lengthResult.returnData);
106
+ if (arrayLength === 0) {
107
+ this.logger.info(`${this.dexKey}: No dex pools found in _dexesList`);
108
+ return;
109
+ }
110
+ const arrayBaseSlot = (0, web3_utils_1.keccak256)(abi_2.defaultAbiCoder.encode(['uint256'], [DEX_LITE_DEXES_LIST_SLOT]));
111
+ const callDataList = [];
112
+ for (let i = 0; i < arrayLength; i++) {
113
+ const baseIndex = BigInt(arrayBaseSlot) + BigInt(i * 3);
114
+ callDataList.push((0, utils_3.readFromStorageCall)(this.dexLiteAddress, this.fluidDexLiteIface, (0, utils_3.encodeSlot)(baseIndex)), // token0
115
+ (0, utils_3.readFromStorageCall)(this.dexLiteAddress, this.fluidDexLiteIface, (0, utils_3.encodeSlot)(baseIndex + 1n)), // token1
116
+ (0, utils_3.readFromStorageCall)(this.dexLiteAddress, this.fluidDexLiteIface, (0, utils_3.encodeSlot)(baseIndex + 2n)));
117
+ }
118
+ const results = await this.dexHelper.multiWrapper.tryAggregate(false, callDataList, blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
119
+ const dexesList = [];
120
+ for (let i = 0; i < arrayLength; i++) {
121
+ const resultIndex = i * 3;
122
+ if (resultIndex + 2 >= results.length) {
123
+ this.logger.warn(`${this.dexKey}: Missing results for pool ${i}, skipping`);
124
+ continue;
125
+ }
126
+ const token0 = results[resultIndex].returnData;
127
+ const token1 = results[resultIndex + 1].returnData;
128
+ const salt = results[resultIndex + 2].returnData;
129
+ if (token0 === 0n || token1 === 0n) {
130
+ this.logger.debug(`${this.dexKey}: Invalid token addresses for pool ${i}, skipping`);
131
+ continue;
132
+ }
133
+ dexesList.push({
134
+ token0: '0x' + token0.toString(16).padStart(40, '0'),
135
+ token1: '0x' + token1.toString(16).padStart(40, '0'),
136
+ salt: '0x' + salt.toString(16).padStart(64, '0'),
137
+ });
138
+ }
139
+ this.pools = dexesList.map(dexKey => ({
140
+ dexId: (0, utils_3.calculateDexId)(dexKey),
141
+ dexKey,
142
+ }));
143
+ this.logger.info(`${this.dexKey}: Loaded ${this.pools.length} dex pools`);
144
+ }
145
+ catch (error) {
146
+ this.logger.error(`${this.dexKey}: Failed to load dexes list`, error);
147
+ throw error;
148
+ }
149
+ }
150
+ // Initialize event pools for tracking state changes
151
+ async initializeEventPools(blockNumber, subscribe = true) {
152
+ for (const pool of this.pools) {
153
+ const mapKey = `${pool.dexKey.token0}_${pool.dexKey.token1}_${pool.dexKey.salt}`.toLowerCase();
154
+ try {
155
+ let eventPool = this.eventPools[mapKey];
156
+ if (!eventPool) {
157
+ eventPool = new fluid_dex_lite_pool_1.FluidDexLiteEventPool(this.dexKey, this.network, this.dexHelper, this.logger, mapKey, this.fluidDexLiteIface, pool, this.dexLiteAddress);
158
+ this.eventPools[mapKey] = eventPool;
159
+ }
160
+ if (subscribe) {
161
+ await eventPool.initialize(blockNumber);
162
+ }
163
+ else {
164
+ const state = await eventPool.generateState(blockNumber);
165
+ eventPool.setState(state, blockNumber);
166
+ }
167
+ this.logger.debug(`${this.dexKey}: Initialized event pool for ${mapKey}`);
168
+ }
169
+ catch (error) {
170
+ this.eventPools[mapKey] = null;
171
+ this.logger.error(`${this.dexKey}: Failed to initialize event pool for ${pool.dexId}, ${error}`);
172
+ }
173
+ }
174
+ }
175
+ // Helper function to get pool by token addresses
176
+ getPoolForTokens(srcToken, destToken) {
177
+ const srcAddr = srcToken.toLowerCase();
178
+ const destAddr = destToken.toLowerCase();
179
+ return (this.pools.find(pool => {
180
+ const token0 = pool.dexKey.token0.toLowerCase();
181
+ const token1 = pool.dexKey.token1.toLowerCase();
182
+ return ((token0 === srcAddr && token1 === destAddr) ||
183
+ (token0 === destAddr && token1 === srcAddr));
184
+ }) || null);
185
+ }
186
+ // Helper function to get event pool
187
+ getEventPool(pool) {
188
+ const mapKey = `${pool.dexKey.token0}_${pool.dexKey.token1}_${pool.dexKey.salt}`.toLowerCase();
189
+ return this.eventPools[mapKey] || null;
190
+ }
191
+ // Get estimated gas cost for a swap
192
+ getGasCost() {
193
+ // Default gas cost estimate for FluidDexLite swaps
194
+ // This should be calibrated based on actual gas usage
195
+ return 10000;
196
+ }
197
+ // Legacy: was only used for V5
198
+ // Returns the list of contract adapters (name and index)
199
+ // for a buy/sell. Return null if there are no adapters.
200
+ getAdapters(side) {
201
+ return null;
202
+ }
203
+ // Returns list of pool identifiers that can be used
204
+ // for a given swap. poolIdentifiers must be unique
205
+ // across DEXes.
206
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
207
+ const pool = this.getPoolForTokens(srcToken.address, destToken.address);
208
+ if (!pool) {
209
+ return [];
210
+ }
211
+ // Check if pool has liquidity
212
+ const eventPool = this.getEventPool(pool);
213
+ if (!eventPool) {
214
+ return [];
215
+ }
216
+ try {
217
+ const state = eventPool.getState(blockNumber);
218
+ if (!state) {
219
+ return [];
220
+ }
221
+ // Check if pool has sufficient liquidity
222
+ if (state.dexVariables === 0n) {
223
+ return [];
224
+ }
225
+ return [`${this.dexKey}_${pool.dexId}`.toLowerCase()];
226
+ }
227
+ catch (error) {
228
+ this.logger.debug(`FluidDexLite: Error getting pool state for ${pool.dexId}`, error);
229
+ return [];
230
+ }
231
+ }
232
+ // Returns pool prices for amounts.
233
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
234
+ try {
235
+ if (limitPools && !limitPools.length)
236
+ return [];
237
+ const pool = this.getPoolForTokens(srcToken.address, destToken.address);
238
+ if (!pool)
239
+ return null;
240
+ const poolIdentifier = `${this.dexKey}_${pool.dexId}`.toLowerCase();
241
+ if (limitPools?.length && !limitPools.includes(poolIdentifier))
242
+ return null;
243
+ const eventPool = this.getEventPool(pool);
244
+ const state = eventPool?.getState(blockNumber);
245
+ if (!state || state.dexVariables === 0n)
246
+ return null;
247
+ const swap0To1 = pool.dexKey.token0.toLowerCase() === srcToken.address.toLowerCase();
248
+ // Initialize result arrays with zero for index 0
249
+ const prices = [0n];
250
+ const gasCost = [0];
251
+ // Compute swap results for all amounts (except the 0th)
252
+ for (let i = 1; i < amounts.length; i++) {
253
+ try {
254
+ const { amountIn, amountOut } = (0, fluid_dex_lite_math_2.calculateSwap)(state, swap0To1, amounts[i], side);
255
+ prices.push(side === constants_1.SwapSide.SELL ? amountOut : amountIn);
256
+ gasCost.push(this.getGasCost());
257
+ }
258
+ catch (err) {
259
+ this.logger.error(`${this.dexKey}: Error calculating swap for amount ${amounts[i]}`, err);
260
+ prices.push(0n);
261
+ gasCost.push(0);
262
+ }
263
+ }
264
+ // Get unit amount (1 token with proper decimals)
265
+ const unitAmount = bigint_constants_1.BI_POWS[side === constants_1.SwapSide.SELL ? srcToken.decimals : destToken.decimals];
266
+ let unit = 0n;
267
+ try {
268
+ const { amountIn, amountOut } = (0, fluid_dex_lite_math_2.calculateSwap)(state, swap0To1, unitAmount, side);
269
+ unit = side === constants_1.SwapSide.SELL ? amountOut : amountIn;
270
+ }
271
+ catch (err) {
272
+ this.logger.debug(`${this.dexKey}: Error calculating unit price`, err);
273
+ }
274
+ return [
275
+ {
276
+ prices,
277
+ unit,
278
+ gasCost,
279
+ exchange: this.dexKey,
280
+ poolIdentifier,
281
+ data: {
282
+ exchange: this.dexLiteAddress,
283
+ dexKey: pool.dexKey,
284
+ swap0To1,
285
+ },
286
+ poolAddresses: [this.dexLiteAddress],
287
+ },
288
+ ];
289
+ }
290
+ catch (error) {
291
+ this.logger.error(`${this.dexKey}: Error in getPricesVolume`, error);
292
+ return null;
293
+ }
294
+ }
295
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
296
+ getCalldataGasCost(poolPrices) {
297
+ return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
298
+ }
299
+ // Encode params required by the exchange adapter
300
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
301
+ const { exchange } = data;
302
+ // Encode here the payload for adapter
303
+ const payload = '';
304
+ return {
305
+ targetExchange: exchange,
306
+ payload,
307
+ networkFee: '0',
308
+ };
309
+ }
310
+ // Step 4: Generate calldata for Augustus to swap through FluidDexLite
311
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
312
+ const { dexKey, swap0To1 } = data;
313
+ const { token0, token1, salt } = dexKey;
314
+ const [t0, t1, s] = [token0, token1, salt].map(t => t.toLowerCase());
315
+ const [src, dest] = [srcToken, destToken].map(t => t.toLowerCase());
316
+ // Ensure the pool exists
317
+ const poolExists = this.pools.some(p => p.dexKey.token0.toLowerCase() === t0 &&
318
+ p.dexKey.token1.toLowerCase() === t1 &&
319
+ p.dexKey.salt.toLowerCase() === s);
320
+ if (!poolExists) {
321
+ throw new Error(`${this.dexKey}: Pool not found for tokens ${token0}/${token1} with salt ${salt}`);
322
+ }
323
+ // Validate the swap direction matches the token addresses
324
+ if (swap0To1 !== (src === t0)) {
325
+ throw new Error(`${this.dexKey}: Swap direction mismatch. Expected swap0To1: ${src === t0}, got: ${swap0To1}`);
326
+ }
327
+ // Validate that srcToken and destToken are actually part of this pool
328
+ if (![t0, t1].includes(src) || ![t0, t1].includes(dest)) {
329
+ throw new Error(`${this.dexKey}: Tokens ${srcToken}/${destToken} are not part of pool ${token0}/${token1}`);
330
+ }
331
+ // Determine swap amount and limits based on side
332
+ let amountSpecified;
333
+ let amountLimit;
334
+ if (side === constants_1.SwapSide.SELL) {
335
+ // Exact input: positive amountSpecified, amountLimit is minimum output
336
+ amountSpecified = srcAmount;
337
+ amountLimit = destAmount;
338
+ }
339
+ else {
340
+ // Exact output: negative amountSpecified, amountLimit is maximum input
341
+ amountSpecified = `-${destAmount}`;
342
+ amountLimit = srcAmount;
343
+ }
344
+ // Encode swapSingle function call
345
+ const swapData = this.fluidDexLiteIface.encodeFunctionData('swapSingle', [
346
+ dexKey, // DexKey calldata dexKey_
347
+ swap0To1, // bool swap0To1_
348
+ amountSpecified, // int256 amountSpecified_
349
+ amountLimit, // uint256 amountLimit_
350
+ recipient, // address to_
351
+ false, // bool isCallback_ (set to false for now)
352
+ '0x', // bytes calldata callbackData_ (empty)
353
+ '0x', // bytes calldata extraData_ (empty)
354
+ ]);
355
+ return {
356
+ needWrapNative: this.needWrapNative, // FluidDexLite can handle ETH directly
357
+ dexFuncHasRecipient: true, // Has to_ parameter for recipient
358
+ exchangeData: swapData, // Encoded swapSingle call
359
+ targetExchange: this.dexLiteAddress, // FluidDexLite contract address
360
+ spender: this.dexLiteAddress, // Approve tokens to FluidDexLite contract
361
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(this.fluidDexLiteIface, 'swapSingle', 'amountUnspecified_'),
362
+ };
363
+ }
364
+ // Legacy compatibility method for SimpleExchange
365
+ async getSimpleParam(srcToken, destToken, srcAmount, destAmount, data, side) {
366
+ const { dexKey, swap0To1 } = data;
367
+ // Determine swap amount and limits based on side
368
+ let amountSpecified;
369
+ let amountLimit;
370
+ if (side === constants_1.SwapSide.SELL) {
371
+ // Exact input: positive amountSpecified, amountLimit is minimum output
372
+ amountSpecified = srcAmount;
373
+ amountLimit = destAmount;
374
+ }
375
+ else {
376
+ // Exact output: negative amountSpecified, amountLimit is maximum input
377
+ amountSpecified = `-${destAmount}`;
378
+ amountLimit = srcAmount;
379
+ }
380
+ // Encode swapSingle function call with Augustus as recipient
381
+ const swapData = this.fluidDexLiteIface.encodeFunctionData('swapSingle', [
382
+ dexKey, // DexKey calldata dexKey_
383
+ swap0To1, // bool swap0To1_
384
+ amountSpecified, // int256 amountSpecified_
385
+ amountLimit, // uint256 amountLimit_
386
+ this.augustusAddress, // address to_ (Augustus for simple swaps)
387
+ false, // bool isCallback_ (set to false for now)
388
+ '0x', // bytes calldata callbackData_ (empty)
389
+ '0x', // bytes calldata extraData_ (empty)
390
+ ]);
391
+ return {
392
+ callees: [this.dexLiteAddress],
393
+ calldata: [swapData],
394
+ values: ['0'],
395
+ networkFee: '0',
396
+ };
397
+ }
398
+ async updatePoolState() {
399
+ const currentBlock = await this.dexHelper.web3Provider.eth.getBlockNumber();
400
+ await this.loadDexesList(currentBlock);
401
+ await this.initializeEventPools(currentBlock, false);
402
+ }
403
+ // Returns list of top pools based on liquidity.
404
+ async getTopPoolsForToken(tokenAddress, limit) {
405
+ try {
406
+ const normalizedTokenAddress = tokenAddress.toLowerCase();
407
+ const relevantPools = this.pools.filter(pool => pool.dexKey.token0.toLowerCase() === normalizedTokenAddress ||
408
+ pool.dexKey.token1.toLowerCase() === normalizedTokenAddress);
409
+ const poolLiquidity = [];
410
+ for (const pool of relevantPools.slice(0, limit * 2)) {
411
+ // Fetch more to filter out inactive ones
412
+ const eventPool = this.getEventPool(pool);
413
+ if (!eventPool)
414
+ continue;
415
+ try {
416
+ const state = eventPool.getStaleState();
417
+ if (!state || state.dexVariables === 0n) {
418
+ // Skip pools with no liquidity
419
+ continue;
420
+ }
421
+ // Unpack dex variables to get token supplies
422
+ const unpackedVars = (0, fluid_dex_lite_math_1.unpackDexVariables)(state.dexVariables);
423
+ // Calculate liquidity based on adjusted total supplies
424
+ // These represent the actual liquidity available in the pool
425
+ const token0Supply = unpackedVars.token0TotalSupplyAdjusted;
426
+ const token1Supply = unpackedVars.token1TotalSupplyAdjusted;
427
+ if (token0Supply === 0n || token1Supply === 0n) {
428
+ // Skip pools with no liquidity
429
+ continue;
430
+ }
431
+ // Get decimals for proper scaling
432
+ const token0Decimals = BigInt(unpackedVars.token0Decimals);
433
+ const token1Decimals = BigInt(unpackedVars.token1Decimals);
434
+ // Calculate geometric mean of liquidity as a proxy for USD value
435
+ // tokenSupply is scaled to 9 decimals for all tokens
436
+ const token0LiquidityNormalized = (token0Supply * 10n ** token0Decimals) / 10n ** 9n;
437
+ const token1LiquidityNormalized = (token1Supply * 10n ** token1Decimals) / 10n ** 9n;
438
+ const token0LiquidityUSD = token0LiquidityNormalized / 10n ** token0Decimals;
439
+ const token1LiquidityUSD = token1LiquidityNormalized / 10n ** token1Decimals;
440
+ // Determine connector token (the other token in the pair)
441
+ const connectorToken = pool.dexKey.token0.toLowerCase() === normalizedTokenAddress
442
+ ? {
443
+ address: pool.dexKey.token1,
444
+ decimals: Number(token1Decimals),
445
+ liquidityUSD: Number(token1LiquidityUSD),
446
+ }
447
+ : {
448
+ address: pool.dexKey.token0,
449
+ decimals: Number(token0Decimals),
450
+ liquidityUSD: Number(token0LiquidityUSD),
451
+ };
452
+ poolLiquidity.push({
453
+ exchange: this.dexKey,
454
+ address: this.dexLiteAddress,
455
+ connectorTokens: [connectorToken],
456
+ liquidityUSD: pool.dexKey.token0.toLowerCase() === normalizedTokenAddress
457
+ ? Number(token0LiquidityUSD)
458
+ : Number(token1LiquidityUSD),
459
+ });
460
+ }
461
+ catch (error) {
462
+ this.logger.debug(`FluidDexLite: Error getting liquidity for pool ${pool.dexId}`, error);
463
+ }
464
+ }
465
+ // Sort by liquidity and return top pools
466
+ return poolLiquidity
467
+ .sort((a, b) => b.liquidityUSD - a.liquidityUSD)
468
+ .slice(0, limit);
469
+ }
470
+ catch (error) {
471
+ this.logger.error('FluidDexLite: Error in getTopPoolsForToken', error);
472
+ return [];
473
+ }
474
+ }
475
+ }
476
+ exports.FluidDexLite = FluidDexLite;
477
+ //# sourceMappingURL=fluid-dex-lite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluid-dex-lite.js","sourceRoot":"","sources":["../../../src/dex/fluid-dex-lite/fluid-dex-lite.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,+CAAoD;AACpD,2EAA6D;AAC7D,uCAAoD;AAIpD,+DAAiE;AACjE,wDAAoD;AACpD,qCAA8C;AAC9C,+DAA8D;AAC9D,2GAA6E;AAC7E,4CAA+C;AAC/C,4CAAqD;AACrD,2CAAuC;AACvC,+DAAsD;AACtD,gDAAmE;AACnE,6DAAiD;AACjD,mCAA0E;AAE1E,yBAAyB;AACzB,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAEnC,MAAa,YACX,SAAQ,gCAAc;IAkBX;IACA;IACA;IAjBD,UAAU,GAAoD,EAAE,CAAC;IACpE,KAAK,GAAiB,EAAE,CAAC;IAEvB,4BAA4B,GAAG,KAAK,CAAC;IACrC,cAAc,GAAG,IAAI,CAAC;IACtB,wBAAwB,GAAG,KAAK,CAAC;IAEnC,MAAM,CAAC,kBAAkB,GAC9B,IAAA,6BAAqB,EAAC,2BAAkB,CAAC,CAAC;IAE5C,MAAM,CAAS;IACf,iBAAiB,CAAY;IAC7B,cAAc,CAAU;IAExB,YACW,OAAgB,EAChB,MAAc,EACd,SAAqB;QAE9B,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAJhB,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAY;QAG9B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,iBAAiB,GAAG,IAAI,eAAS,CAAC,+BAAe,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,2BAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,eAAe,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAC9C,CAAC;IAED,oDAAoD;IACpD,2DAA2D;IAC3D,wBAAwB;IACxB,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,IAAI,CAAC;YACH,iDAAiD;YACjD,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAEtC,8CAA8C;YAC9C,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAE7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;YACvE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,uDAAuD;IAC/C,KAAK,CAAC,aAAa,CAAC,WAAmB;QAC7C,IAAI,CAAC;YACH,MAAM,CAAC,YAAY,CAAC,GAClB,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAC5C,KAAK,EACL;gBACE,IAAA,2BAAmB,EACjB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,iBAAiB,EACtB,IAAA,kBAAU,EAAC,wBAAwB,CAAC,CACrC;aACF,EACD,WAAW,CACZ,CAAC;YAEJ,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAEpD,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,oCAAoC,CAAC,CAAC;gBACrE,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,IAAA,sBAAS,EAC7B,qBAAe,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAChE,CAAC;YAEF,MAAM,YAAY,GAA6C,EAAE,CAAC;YAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxD,YAAY,CAAC,IAAI,CACf,IAAA,2BAAmB,EACjB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,iBAAiB,EACtB,IAAA,kBAAU,EAAC,SAAS,CAAC,CACtB,EAAE,SAAS;gBACZ,IAAA,2BAAmB,EACjB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,iBAAiB,EACtB,IAAA,kBAAU,EAAC,SAAS,GAAG,EAAE,CAAC,CAC3B,EAAE,SAAS;gBACZ,IAAA,2BAAmB,EACjB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,iBAAiB,EACtB,IAAA,kBAAU,EAAC,SAAS,GAAG,EAAE,CAAC,CAC3B,CACF,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAC5D,KAAK,EACL,YAAY,EACZ,WAAW,EACX,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAC5C,KAAK,CACN,CAAC;YAEF,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,IAAI,CAAC,MAAM,8BAA8B,CAAC,YAAY,CAC1D,CAAC;oBACF,SAAS;gBACX,CAAC;gBAED,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC;gBAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;gBACnD,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;gBAEjD,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;oBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,GAAG,IAAI,CAAC,MAAM,sCAAsC,CAAC,YAAY,CAClE,CAAC;oBACF,SAAS;gBACX,CAAC;gBAED,SAAS,CAAC,IAAI,CAAC;oBACb,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;oBACpD,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;oBACpD,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;iBACjD,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpC,KAAK,EAAE,IAAA,sBAAc,EAAC,MAAM,CAAC;gBAC7B,MAAM;aACP,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACtE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,oDAAoD;IAC5C,KAAK,CAAC,oBAAoB,CAChC,WAAmB,EACnB,SAAS,GAAG,IAAI;QAEhB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,MAAM,GACV,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAElF,IAAI,CAAC;gBACH,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAExC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,GAAG,IAAI,2CAAqB,CACnC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,EACX,MAAM,EACN,IAAI,CAAC,iBAAiB,EACtB,IAAI,EACJ,IAAI,CAAC,cAAc,CACpB,CAAC;oBACF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;gBACtC,CAAC;gBAED,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;oBACzD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACzC,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,GAAG,IAAI,CAAC,MAAM,gCAAgC,MAAM,EAAE,CACvD,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,GAAG,IAAI,CAAC,MAAM,yCAAyC,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAC9E,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,iDAAiD;IACzC,gBAAgB,CACtB,QAAiB,EACjB,SAAkB;QAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAEzC,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAChD,OAAO,CACL,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,CAAC;gBAC3C,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO,CAAC,CAC5C,CAAC;QACJ,CAAC,CAAC,IAAI,IAAI,CACX,CAAC;IACJ,CAAC;IAED,oCAAoC;IAC5B,YAAY,CAAC,IAAgB;QACnC,MAAM,MAAM,GACV,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClF,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,oCAAoC;IAC5B,UAAU;QAChB,mDAAmD;QACnD,sDAAsD;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+BAA+B;IAC/B,yDAAyD;IACzD,wDAAwD;IACxD,WAAW,CAAC,IAAc;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oDAAoD;IACpD,mDAAmD;IACnD,gBAAgB;IAChB,KAAK,CAAC,kBAAkB,CACtB,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,WAAmB;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,8BAA8B;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,yCAAyC;YACzC,IAAI,KAAK,CAAC,YAAY,KAAK,EAAE,EAAE,CAAC;gBAC9B,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,8CAA8C,IAAI,CAAC,KAAK,EAAE,EAC1D,KAAK,CACN,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,eAAe,CACnB,QAAe,EACf,SAAgB,EAChB,OAAiB,EACjB,IAAc,EACd,WAAmB,EACnB,UAAqB;QAErB,IAAI,CAAC;YACH,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,MAAM,cAAc,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;YACpE,IAAI,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC5D,OAAO,IAAI,CAAC;YAEd,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAC;YAErD,MAAM,QAAQ,GACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAEtE,iDAAiD;YACjD,MAAM,MAAM,GAAa,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAa,CAAC,CAAC,CAAC,CAAC;YAE9B,wDAAwD;YACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACH,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAA,mCAAa,EAC3C,KAAK,EACL,QAAQ,EACR,OAAO,CAAC,CAAC,CAAC,EACV,IAAI,CACL,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAC3D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,GAAG,IAAI,CAAC,MAAM,uCAAuC,OAAO,CAAC,CAAC,CAAC,EAAE,EACjE,GAAG,CACJ,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,MAAM,UAAU,GACd,0BAAO,CACL,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAChE,CAAC;YACJ,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,IAAI,CAAC;gBACH,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAA,mCAAa,EAC3C,KAAK,EACL,QAAQ,EACR,UAAU,EACV,IAAI,CACL,CAAC;gBACF,IAAI,GAAG,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;YACvD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,gCAAgC,EAAE,GAAG,CAAC,CAAC;YACzE,CAAC;YAED,OAAO;gBACL;oBACE,MAAM;oBACN,IAAI;oBACJ,OAAO;oBACP,QAAQ,EAAE,IAAI,CAAC,MAAM;oBACrB,cAAc;oBACd,IAAI,EAAE;wBACJ,QAAQ,EAAE,IAAI,CAAC,cAAc;wBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,QAAQ;qBACT;oBACD,aAAa,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;iBACrC;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,kBAAkB,CAChB,UAAwC;QAExC,OAAO,iBAAiB,CAAC,cAAc,CAAC;IAC1C,CAAC;IAED,iDAAiD;IACjD,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAsB,EACtB,IAAc;QAEd,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAE1B,sCAAsC;QACtC,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,OAAO;YACL,cAAc,EAAE,QAAQ;YACxB,OAAO;YACP,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,WAAW,CACT,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAsB,EACtB,IAAc;QAEd,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAClC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAExC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAEpE,yBAAyB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAChC,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE;YACpC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE;YACpC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CACpC,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,MAAM,+BAA+B,MAAM,IAAI,MAAM,cAAc,IAAI,EAAE,CAClF,CAAC;QACJ,CAAC;QAED,0DAA0D;QAC1D,IAAI,QAAQ,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,MAAM,iDACZ,GAAG,KAAK,EACV,UAAU,QAAQ,EAAE,CACrB,CAAC;QACJ,CAAC;QAED,sEAAsE;QACtE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,MAAM,YAAY,QAAQ,IAAI,SAAS,yBAAyB,MAAM,IAAI,MAAM,EAAE,CAC3F,CAAC;QACJ,CAAC;QAED,iDAAiD;QACjD,IAAI,eAAuB,CAAC;QAC5B,IAAI,WAAmB,CAAC;QAExB,IAAI,IAAI,KAAK,oBAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,uEAAuE;YACvE,eAAe,GAAG,SAAS,CAAC;YAC5B,WAAW,GAAG,UAAU,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,uEAAuE;YACvE,eAAe,GAAG,IAAI,UAAU,EAAE,CAAC;YACnC,WAAW,GAAG,SAAS,CAAC;QAC1B,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,YAAY,EAAE;YACvE,MAAM,EAAE,0BAA0B;YAClC,QAAQ,EAAE,iBAAiB;YAC3B,eAAe,EAAE,0BAA0B;YAC3C,WAAW,EAAE,uBAAuB;YACpC,SAAS,EAAE,cAAc;YACzB,KAAK,EAAE,0CAA0C;YACjD,IAAI,EAAE,uCAAuC;YAC7C,IAAI,EAAE,oCAAoC;SAC3C,CAAC,CAAC;QAEH,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,uCAAuC;YAC5E,mBAAmB,EAAE,IAAI,EAAE,kCAAkC;YAC7D,YAAY,EAAE,QAAQ,EAAE,0BAA0B;YAClD,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,gCAAgC;YACrE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,0CAA0C;YACxE,eAAe,EAAE,IAAA,mCAA2B,EAC1C,IAAI,CAAC,iBAAiB,EACtB,YAAY,EACZ,oBAAoB,CACrB;SACF,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAsB,EACtB,IAAc;QAEd,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAElC,iDAAiD;QACjD,IAAI,eAAuB,CAAC;QAC5B,IAAI,WAAmB,CAAC;QAExB,IAAI,IAAI,KAAK,oBAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,uEAAuE;YACvE,eAAe,GAAG,SAAS,CAAC;YAC5B,WAAW,GAAG,UAAU,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,uEAAuE;YACvE,eAAe,GAAG,IAAI,UAAU,EAAE,CAAC;YACnC,WAAW,GAAG,SAAS,CAAC;QAC1B,CAAC;QAED,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,YAAY,EAAE;YACvE,MAAM,EAAE,0BAA0B;YAClC,QAAQ,EAAE,iBAAiB;YAC3B,eAAe,EAAE,0BAA0B;YAC3C,WAAW,EAAE,uBAAuB;YACpC,IAAI,CAAC,eAAe,EAAE,0CAA0C;YAChE,KAAK,EAAE,0CAA0C;YACjD,IAAI,EAAE,uCAAuC;YAC7C,IAAI,EAAE,oCAAoC;SAC3C,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;YAC9B,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,MAAM,EAAE,CAAC,GAAG,CAAC;YACb,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC5E,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,mBAAmB,CACvB,YAAqB,EACrB,KAAa;QAEb,IAAI,CAAC;YACH,MAAM,sBAAsB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACrC,IAAI,CAAC,EAAE,CACL,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,sBAAsB;gBAC3D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,sBAAsB,CAC9D,CAAC;YAEF,MAAM,aAAa,GAAoB,EAAE,CAAC;YAE1C,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACrD,yCAAyC;gBACzC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAEzB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;oBACxC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,EAAE,EAAE,CAAC;wBACxC,+BAA+B;wBAC/B,SAAS;oBACX,CAAC;oBAED,6CAA6C;oBAC7C,MAAM,YAAY,GAAG,IAAA,wCAAkB,EAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBAE5D,uDAAuD;oBACvD,6DAA6D;oBAC7D,MAAM,YAAY,GAAG,YAAY,CAAC,yBAAyB,CAAC;oBAC5D,MAAM,YAAY,GAAG,YAAY,CAAC,yBAAyB,CAAC;oBAE5D,IAAI,YAAY,KAAK,EAAE,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;wBAC/C,+BAA+B;wBAC/B,SAAS;oBACX,CAAC;oBAED,kCAAkC;oBAClC,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;oBAC3D,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;oBAE3D,iEAAiE;oBACjE,qDAAqD;oBACrD,MAAM,yBAAyB,GAC7B,CAAC,YAAY,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;oBAErD,MAAM,yBAAyB,GAC7B,CAAC,YAAY,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;oBAErD,MAAM,kBAAkB,GACtB,yBAAyB,GAAG,GAAG,IAAI,cAAc,CAAC;oBAEpD,MAAM,kBAAkB,GACtB,yBAAyB,GAAG,GAAG,IAAI,cAAc,CAAC;oBAEpD,0DAA0D;oBAC1D,MAAM,cAAc,GAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,sBAAsB;wBACzD,CAAC,CAAC;4BACE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;4BAC3B,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC;4BAChC,YAAY,EAAE,MAAM,CAAC,kBAAkB,CAAC;yBACzC;wBACH,CAAC,CAAC;4BACE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;4BAC3B,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC;4BAChC,YAAY,EAAE,MAAM,CAAC,kBAAkB,CAAC;yBACzC,CAAC;oBAER,aAAa,CAAC,IAAI,CAAC;wBACjB,QAAQ,EAAE,IAAI,CAAC,MAAM;wBACrB,OAAO,EAAE,IAAI,CAAC,cAAc;wBAC5B,eAAe,EAAE,CAAC,cAAc,CAAC;wBACjC,YAAY,EACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,sBAAsB;4BACzD,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;4BAC5B,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;qBACjC,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,kDAAkD,IAAI,CAAC,KAAK,EAAE,EAC9D,KAAK,CACN,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,yCAAyC;YACzC,OAAO,aAAa;iBACjB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;iBAC/C,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;YACvE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;;AAnnBH,oCAonBC"}
@@ -0,0 +1,54 @@
1
+ import { Address } from '../../types';
2
+ export type DexKey = {
3
+ token0: Address;
4
+ token1: Address;
5
+ salt: string;
6
+ };
7
+ export type PoolState = {
8
+ dexVariables: bigint;
9
+ centerPriceShift: bigint;
10
+ rangeShift: bigint;
11
+ thresholdShift: bigint;
12
+ lastInteractionTimestamp: bigint;
13
+ };
14
+ export type UnpackedDexVariables = {
15
+ fee: bigint;
16
+ revenueCut: bigint;
17
+ rebalancingStatus: bigint;
18
+ centerPriceShiftActive: boolean;
19
+ centerPrice: bigint;
20
+ centerPriceContractAddress: bigint;
21
+ rangePercentShiftActive: boolean;
22
+ upperPercent: bigint;
23
+ lowerPercent: bigint;
24
+ thresholdPercentShiftActive: boolean;
25
+ upperShiftThresholdPercent: bigint;
26
+ lowerShiftThresholdPercent: bigint;
27
+ token0Decimals: bigint;
28
+ token1Decimals: bigint;
29
+ token0TotalSupplyAdjusted: bigint;
30
+ token1TotalSupplyAdjusted: bigint;
31
+ };
32
+ export type FluidDexLiteData = {
33
+ exchange: Address;
34
+ dexKey: DexKey;
35
+ swap0To1: boolean;
36
+ };
37
+ export type PoolParams = {
38
+ dexId: string;
39
+ dexKey: DexKey;
40
+ };
41
+ export type DexParams = {
42
+ dexLiteAddress: Address;
43
+ };
44
+ export interface SwapResult {
45
+ amountOut: bigint;
46
+ amountIn: bigint;
47
+ }
48
+ export interface PricingResult {
49
+ centerPrice: bigint;
50
+ upperRangePrice: bigint;
51
+ lowerRangePrice: bigint;
52
+ token0ImaginaryReserves: bigint;
53
+ token1ImaginaryReserves: bigint;
54
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/fluid-dex-lite/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { Address } from '@paraswap/core';
3
+ import { DexKey } from './types';
4
+ export declare function encodeSlot(slot: bigint | number): string;
5
+ export declare function readFromStorageCall(target: Address, iface: Interface, slot: string): {
6
+ target: string;
7
+ callData: string;
8
+ decodeFunction: (result: import("../../lib/multi-wrapper").MultiResult<import("@ethersproject/bytes").BytesLike> | import("@ethersproject/bytes").BytesLike) => bigint;
9
+ };
10
+ export declare function calculateMappingStorageSlot(slot: number, key: string): string;
11
+ export declare function calculateDexId(dexKey: DexKey): string;
12
+ export declare function normalizeDexId(dexId: string | undefined): string | null;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeSlot = encodeSlot;
4
+ exports.readFromStorageCall = readFromStorageCall;
5
+ exports.calculateMappingStorageSlot = calculateMappingStorageSlot;
6
+ exports.calculateDexId = calculateDexId;
7
+ exports.normalizeDexId = normalizeDexId;
8
+ const abi_1 = require("@ethersproject/abi");
9
+ const utils_1 = require("ethers/lib/utils");
10
+ const decoders_1 = require("../../lib/decoders");
11
+ function encodeSlot(slot) {
12
+ return (0, utils_1.hexZeroPad)('0x' + BigInt(slot).toString(16), 32);
13
+ }
14
+ function readFromStorageCall(target, iface, slot) {
15
+ return {
16
+ target,
17
+ callData: iface.encodeFunctionData('readFromStorage', [slot]),
18
+ decodeFunction: decoders_1.uint256ToBigInt,
19
+ };
20
+ }
21
+ function calculateMappingStorageSlot(slot, key) {
22
+ // For bytes8 keys in Solidity mappings, we need to pad to bytes32
23
+ // The dexId is bytes8 but storage slot calculation expects bytes32
24
+ const paddedKey = key.padEnd(66, '0'); // Pad to 32 bytes (0x + 64 hex chars)
25
+ // Solidity mapping storage slot calculation: keccak256(abi.encode(key, slot))
26
+ const encoded = abi_1.defaultAbiCoder.encode(['bytes32', 'uint256'], [paddedKey, slot]);
27
+ return (0, utils_1.keccak256)(encoded);
28
+ }
29
+ // Helper function to calculate dexId like in Solidity: bytes8(keccak256(abi.encode(dexKey)))
30
+ function calculateDexId(dexKey) {
31
+ const encoded = abi_1.defaultAbiCoder.encode(['address', 'address', 'bytes32'], [dexKey.token0, dexKey.token1, dexKey.salt]);
32
+ const hash = (0, utils_1.keccak256)(encoded);
33
+ // Take first 8 bytes (16 hex chars)
34
+ return '0x' + hash.slice(2, 18);
35
+ }
36
+ function normalizeDexId(dexId) {
37
+ if (!dexId) {
38
+ return null;
39
+ }
40
+ // Convert to lowercase and ensure it's a string
41
+ const idStr = dexId.toString().toLowerCase();
42
+ // If it starts with 0x, ensure we have exactly 18 characters total (0x + 16 hex chars)
43
+ if (idStr.startsWith('0x')) {
44
+ return '0x' + idStr.slice(2).padStart(16, '0');
45
+ }
46
+ else {
47
+ // Add 0x prefix and pad to 16 hex characters
48
+ return '0x' + idStr.padStart(16, '0');
49
+ }
50
+ }
51
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/dex/fluid-dex-lite/utils.ts"],"names":[],"mappings":";;AAMA,gCAEC;AAED,kDAUC;AAED,kEAYC;AAGD,wCAQC;AAED,wCAeC;AA9DD,4CAAgE;AAChE,4CAAyD;AAEzD,iDAAqD;AAGrD,SAAgB,UAAU,CAAC,IAAqB;IAC9C,OAAO,IAAA,kBAAU,EAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,mBAAmB,CACjC,MAAe,EACf,KAAgB,EAChB,IAAY;IAEZ,OAAO;QACL,MAAM;QACN,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7D,cAAc,EAAE,0BAAe;KAChC,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CAAC,IAAY,EAAE,GAAW;IACnE,kEAAkE;IAClE,mEAAmE;IACnE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,sCAAsC;IAE7E,8EAA8E;IAC9E,MAAM,OAAO,GAAG,qBAAe,CAAC,MAAM,CACpC,CAAC,SAAS,EAAE,SAAS,CAAC,EACtB,CAAC,SAAS,EAAE,IAAI,CAAC,CAClB,CAAC;IAEF,OAAO,IAAA,iBAAS,EAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,6FAA6F;AAC7F,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,OAAO,GAAG,qBAAe,CAAC,MAAM,CACpC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EACjC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAC5C,CAAC;IACF,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,OAAO,CAAC,CAAC;IAChC,oCAAoC;IACpC,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,cAAc,CAAC,KAAyB;IACtD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;IAE7C,uFAAuF;IACvF,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,6CAA6C;QAC7C,OAAO,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
@@ -90,6 +90,7 @@ const aave_v3_stata_1 = require("./aave-v3-stata/aave-v3-stata");
90
90
  const aave_v3_stata_v2_1 = require("./aave-v3-stata-v2/aave-v3-stata-v2");
91
91
  const oswap_1 = require("./oswap/oswap");
92
92
  const fluid_dex_1 = require("./fluid-dex/fluid-dex");
93
+ const fluid_dex_lite_1 = require("./fluid-dex-lite/fluid-dex-lite");
93
94
  const concentrator_arusd_1 = require("./concentrator-arusd/concentrator-arusd");
94
95
  const fx_protocol_rusd_1 = require("./fx-protocol-rusd/fx-protocol-rusd");
95
96
  const aave_gsm_1 = require("./aave-gsm/aave-gsm");
@@ -208,6 +209,7 @@ const Dexes = [
208
209
  sky_converter_1.SkyConverter,
209
210
  cables_1.Cables,
210
211
  fluid_dex_1.FluidDex,
212
+ fluid_dex_lite_1.FluidDexLite,
211
213
  usual_m_wrapped_m_1.UsualMWrappedM,
212
214
  m_wrapped_m_1.MWrappedM,
213
215
  wrapped_m_m_1.WrappedMM,