@eulerxyz/euler-v2-sdk 0.2.6-beta → 0.2.8-beta
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/entities/Account.d.ts +10 -2
- package/dist/src/entities/Account.d.ts.map +1 -1
- package/dist/src/entities/Account.js +15 -2
- package/dist/src/entities/Account.js.map +1 -1
- package/dist/src/entities/EVault.d.ts +6 -1
- package/dist/src/entities/EVault.d.ts.map +1 -1
- package/dist/src/entities/EVault.js.map +1 -1
- package/dist/src/entities/Portfolio.d.ts +143 -18
- package/dist/src/entities/Portfolio.d.ts.map +1 -1
- package/dist/src/entities/Portfolio.js +240 -36
- package/dist/src/entities/Portfolio.js.map +1 -1
- package/dist/src/plugins/keyring/keyringPlugin.d.ts.map +1 -1
- package/dist/src/plugins/keyring/keyringPlugin.js +67 -17
- package/dist/src/plugins/keyring/keyringPlugin.js.map +1 -1
- package/dist/src/plugins/pyth/pythPlugin.d.ts +3 -1
- package/dist/src/plugins/pyth/pythPlugin.d.ts.map +1 -1
- package/dist/src/plugins/pyth/pythPlugin.js +101 -6
- package/dist/src/plugins/pyth/pythPlugin.js.map +1 -1
- package/dist/src/plugins/types.d.ts +38 -2
- package/dist/src/plugins/types.d.ts.map +1 -1
- package/dist/src/plugins/types.js.map +1 -1
- package/dist/src/sdk/buildSDK.d.ts.map +1 -1
- package/dist/src/sdk/buildSDK.js +3 -2
- package/dist/src/sdk/buildSDK.js.map +1 -1
- package/dist/src/sdk/sdk.d.ts +15 -4
- package/dist/src/sdk/sdk.d.ts.map +1 -1
- package/dist/src/sdk/sdk.js +40 -3
- package/dist/src/sdk/sdk.js.map +1 -1
- package/dist/src/services/accountService/accountService.d.ts +7 -1
- package/dist/src/services/accountService/accountService.d.ts.map +1 -1
- package/dist/src/services/accountService/accountService.js +55 -1
- package/dist/src/services/accountService/accountService.js.map +1 -1
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.d.ts.map +1 -1
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.js +2 -2
- package/dist/src/services/accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.js.map +1 -1
- package/dist/src/services/accountService/index.d.ts +1 -1
- package/dist/src/services/accountService/index.d.ts.map +1 -1
- package/dist/src/services/executionService/cowExecutor.d.ts +3 -0
- package/dist/src/services/executionService/cowExecutor.d.ts.map +1 -1
- package/dist/src/services/executionService/cowExecutor.js.map +1 -1
- package/dist/src/services/executionService/execute.d.ts +8 -0
- package/dist/src/services/executionService/execute.d.ts.map +1 -1
- package/dist/src/services/executionService/execute.js.map +1 -1
- package/dist/src/services/executionService/executionService.d.ts +70 -8
- package/dist/src/services/executionService/executionService.d.ts.map +1 -1
- package/dist/src/services/executionService/executionService.js +278 -124
- package/dist/src/services/executionService/executionService.js.map +1 -1
- package/dist/src/services/executionService/executionServiceTypes.d.ts +4 -0
- package/dist/src/services/executionService/executionServiceTypes.d.ts.map +1 -1
- package/dist/src/services/executionService/simulate.d.ts +29 -0
- package/dist/src/services/executionService/simulate.d.ts.map +1 -1
- package/dist/src/services/executionService/simulate.js +42 -5
- package/dist/src/services/executionService/simulate.js.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.d.ts +2 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.d.ts.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js +2 -2
- package/dist/src/services/rewardsService/adapters/rewardsDirectAdapter/rewardsDirectAdapter.js.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.d.ts +2 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.d.ts.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js +11 -2
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js.map +1 -1
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts +4 -0
- package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts.map +1 -1
- package/dist/src/services/rewardsService/index.d.ts +4 -1
- package/dist/src/services/rewardsService/index.d.ts.map +1 -1
- package/dist/src/services/rewardsService/index.js +2 -0
- package/dist/src/services/rewardsService/index.js.map +1 -1
- package/dist/src/services/rewardsService/rewardCampaignEligibility.d.ts +32 -0
- package/dist/src/services/rewardsService/rewardCampaignEligibility.d.ts.map +1 -0
- package/dist/src/services/rewardsService/rewardCampaignEligibility.js +21 -0
- package/dist/src/services/rewardsService/rewardCampaignEligibility.js.map +1 -0
- package/dist/src/services/rewardsService/rewardsService.d.ts +6 -0
- package/dist/src/services/rewardsService/rewardsService.d.ts.map +1 -1
- package/dist/src/services/rewardsService/rewardsService.js +20 -3
- package/dist/src/services/rewardsService/rewardsService.js.map +1 -1
- package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts +8 -5
- package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts.map +1 -1
- package/dist/src/services/rewardsService/rewardsServiceTypes.js +1 -1
- package/dist/src/services/rewardsService/rewardsServiceTypes.js.map +1 -1
- package/dist/src/services/rewardsService/vaultRewardInfo.d.ts +25 -0
- package/dist/src/services/rewardsService/vaultRewardInfo.d.ts.map +1 -0
- package/dist/src/services/rewardsService/vaultRewardInfo.js +39 -0
- package/dist/src/services/rewardsService/vaultRewardInfo.js.map +1 -0
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultLensTypes.d.ts +2 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultLensTypes.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultLensTypes.js +1 -0
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultLensTypes.js.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/vaultInfoConverter.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/vaultInfoConverter.js +7 -0
- package/dist/src/services/vaults/eVaultService/adapters/eVaultOnchainAdapter/vaultInfoConverter.js.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3AdapterConversions.d.ts.map +1 -1
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3AdapterConversions.js +17 -6
- package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3AdapterConversions.js.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.d.ts.map +1 -1
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.js +52 -17
- package/dist/src/services/vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.js.map +1 -1
- package/dist/src/utils/accountComputations.d.ts +41 -8
- package/dist/src/utils/accountComputations.d.ts.map +1 -1
- package/dist/src/utils/accountComputations.js +127 -77
- package/dist/src/utils/accountComputations.js.map +1 -1
- package/dist/src/utils/irm.d.ts +10 -2
- package/dist/src/utils/irm.d.ts.map +1 -1
- package/dist/src/utils/irm.js +33 -0
- package/dist/src/utils/irm.js.map +1 -1
- package/dist/src/utils/oracle.d.ts +16 -0
- package/dist/src/utils/oracle.d.ts.map +1 -1
- package/dist/src/utils/oracle.js +98 -0
- package/dist/src/utils/oracle.js.map +1 -1
- package/dist/src/utils/stateOverrides/approvalOverrides.d.ts +25 -8
- package/dist/src/utils/stateOverrides/approvalOverrides.d.ts.map +1 -1
- package/dist/src/utils/stateOverrides/approvalOverrides.js +76 -16
- package/dist/src/utils/stateOverrides/approvalOverrides.js.map +1 -1
- package/dist/src/utils/stateOverrides/balanceOverrides.d.ts +26 -7
- package/dist/src/utils/stateOverrides/balanceOverrides.d.ts.map +1 -1
- package/dist/src/utils/stateOverrides/balanceOverrides.js +72 -13
- package/dist/src/utils/stateOverrides/balanceOverrides.js.map +1 -1
- package/dist/src/utils/stateOverrides/getStateOverrides.d.ts +38 -0
- package/dist/src/utils/stateOverrides/getStateOverrides.d.ts.map +1 -1
- package/dist/src/utils/stateOverrides/getStateOverrides.js +14 -4
- package/dist/src/utils/stateOverrides/getStateOverrides.js.map +1 -1
- package/dist/src/utils/stateOverrides/index.d.ts +3 -2
- package/dist/src/utils/stateOverrides/index.d.ts.map +1 -1
- package/dist/src/utils/stateOverrides/index.js +2 -1
- package/dist/src/utils/stateOverrides/index.js.map +1 -1
- package/dist/src/utils/stateOverrides/slotHints.d.ts +78 -0
- package/dist/src/utils/stateOverrides/slotHints.d.ts.map +1 -0
- package/dist/src/utils/stateOverrides/slotHints.js +152 -0
- package/dist/src/utils/stateOverrides/slotHints.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { encodePacked, erc20Abi, getAddress, hexToBigInt, keccak256, maxUint256, numberToHex, toHex, } from "viem";
|
|
2
|
+
const DEFAULT_MAX_SEQUENTIAL = 20;
|
|
3
|
+
const DEFAULT_EXTRA_CANDIDATES = [];
|
|
4
|
+
const slotHintsCache = new Map();
|
|
5
|
+
const probeAddress = (chainId, token) => `${chainId}:${getAddress(token)}`;
|
|
6
|
+
/**
|
|
7
|
+
* Compute the storage slot of `balances[owner]` in a Solidity-style
|
|
8
|
+
* `mapping(address => uint256)` at base slot `slotIndex`.
|
|
9
|
+
*/
|
|
10
|
+
export function computeBalanceSlot(owner, slotIndex) {
|
|
11
|
+
return keccak256(encodePacked(["uint256", "uint256"], [hexToBigInt(owner), slotIndex]));
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Compute the storage slot of `allowance[owner][spender]` in a Solidity-style
|
|
15
|
+
* `mapping(address => mapping(address => uint256))` at base slot `slotIndex`.
|
|
16
|
+
*/
|
|
17
|
+
export function computeAllowanceSlot(owner, spender, slotIndex) {
|
|
18
|
+
const baseSlot = keccak256(encodePacked(["uint256", "uint256"], [hexToBigInt(owner), slotIndex]));
|
|
19
|
+
return keccak256(encodePacked(["uint256", "uint256"], [hexToBigInt(spender), hexToBigInt(baseSlot)]));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Probe a single ERC20 token to discover its `balances` and `allowance` slot
|
|
23
|
+
* indices, by overriding sequential base-slot candidates and reading the
|
|
24
|
+
* value back.
|
|
25
|
+
*
|
|
26
|
+
* Strategy is intentionally simpler than `eth_createAccessList`-based
|
|
27
|
+
* discovery: most ERC20 layouts (OpenZeppelin, Solady, custom) use a small
|
|
28
|
+
* integer base slot. Sequential probing from 0 hits the answer in 1–3 RPC
|
|
29
|
+
* calls; access-list discovery costs an `eth_createAccessList` + per-candidate
|
|
30
|
+
* probe and isn't supported by all proxies.
|
|
31
|
+
*
|
|
32
|
+
* Results are cached module-scope by `chainId:token` (slot indices are
|
|
33
|
+
* owner-/spender-agnostic and immutable for a deployed token), so subsequent
|
|
34
|
+
* calls for the same token short-circuit to a Map lookup.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const hints = await fetchErc20SlotHints(client, token, {
|
|
39
|
+
* allowanceSpender: permit2Address,
|
|
40
|
+
* })
|
|
41
|
+
* // → { balanceSlotIndex: 0n, allowanceSlotIndex: 1n }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export async function fetchErc20SlotHints(client, token, options = {}) {
|
|
45
|
+
const chainId = client.chain?.id;
|
|
46
|
+
if (!chainId)
|
|
47
|
+
throw new Error("Client must have a chain configured");
|
|
48
|
+
const cacheKey = probeAddress(chainId, token);
|
|
49
|
+
const cached = slotHintsCache.get(cacheKey);
|
|
50
|
+
if (cached) {
|
|
51
|
+
const stillNeedsBalance = !options.skipBalance && cached.balanceSlotIndex === undefined;
|
|
52
|
+
const stillNeedsAllowance = !options.skipAllowance && cached.allowanceSlotIndex === undefined;
|
|
53
|
+
if (!stillNeedsBalance && !stillNeedsAllowance) {
|
|
54
|
+
return cached;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const max = options.maxSequentialSlot ?? DEFAULT_MAX_SEQUENTIAL;
|
|
58
|
+
const extras = options.extraSlotCandidates ?? DEFAULT_EXTRA_CANDIDATES;
|
|
59
|
+
const candidates = [];
|
|
60
|
+
for (let i = 0; i <= max; i++)
|
|
61
|
+
candidates.push(BigInt(i));
|
|
62
|
+
for (const idx of extras)
|
|
63
|
+
candidates.push(idx);
|
|
64
|
+
const probeOwner = "0x1111111111111111111111111111111111111111";
|
|
65
|
+
const probeSpender = options.allowanceSpender ??
|
|
66
|
+
"0x2222222222222222222222222222222222222222";
|
|
67
|
+
const valueHex = numberToHex(maxUint256, { size: 32 });
|
|
68
|
+
const findSlotIndex = async (computeSlot, read) => {
|
|
69
|
+
for (const idx of candidates) {
|
|
70
|
+
try {
|
|
71
|
+
const slot = computeSlot(idx);
|
|
72
|
+
const value = await read(idx, slot);
|
|
73
|
+
if (value === maxUint256)
|
|
74
|
+
return idx;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// candidate didn't decode; try next
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
};
|
|
82
|
+
const balancePromise = options.skipBalance || cached?.balanceSlotIndex !== undefined
|
|
83
|
+
? Promise.resolve(cached?.balanceSlotIndex)
|
|
84
|
+
: findSlotIndex((idx) => computeBalanceSlot(probeOwner, idx), (_idx, slot) => client
|
|
85
|
+
.readContract({
|
|
86
|
+
abi: erc20Abi,
|
|
87
|
+
address: token,
|
|
88
|
+
functionName: "balanceOf",
|
|
89
|
+
args: [probeOwner],
|
|
90
|
+
stateOverride: [
|
|
91
|
+
{
|
|
92
|
+
address: token,
|
|
93
|
+
stateDiff: [{ slot, value: valueHex }],
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
})
|
|
97
|
+
.catch(() => 0n));
|
|
98
|
+
const allowancePromise = options.skipAllowance || cached?.allowanceSlotIndex !== undefined
|
|
99
|
+
? Promise.resolve(cached?.allowanceSlotIndex)
|
|
100
|
+
: findSlotIndex((idx) => computeAllowanceSlot(probeOwner, probeSpender, idx), (_idx, slot) => client
|
|
101
|
+
.readContract({
|
|
102
|
+
abi: erc20Abi,
|
|
103
|
+
address: token,
|
|
104
|
+
functionName: "allowance",
|
|
105
|
+
args: [probeOwner, probeSpender],
|
|
106
|
+
stateOverride: [
|
|
107
|
+
{
|
|
108
|
+
address: token,
|
|
109
|
+
stateDiff: [{ slot, value: valueHex }],
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
})
|
|
113
|
+
.catch(() => 0n));
|
|
114
|
+
const [balanceSlotIndex, allowanceSlotIndex] = await Promise.all([
|
|
115
|
+
balancePromise,
|
|
116
|
+
allowancePromise,
|
|
117
|
+
]);
|
|
118
|
+
const hints = {
|
|
119
|
+
balanceSlotIndex,
|
|
120
|
+
allowanceSlotIndex,
|
|
121
|
+
};
|
|
122
|
+
slotHintsCache.set(cacheKey, hints);
|
|
123
|
+
return hints;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Convenience batch wrapper for `fetchErc20SlotHints` over many tokens.
|
|
127
|
+
* Caller-side parallelism is preserved (one `Promise.all` over the inputs);
|
|
128
|
+
* the per-token cache means repeats are free.
|
|
129
|
+
*/
|
|
130
|
+
export async function fetchErc20SlotHintsBatch(client, tokens, options = {}) {
|
|
131
|
+
const result = {};
|
|
132
|
+
await Promise.all(tokens.map(async (rawToken) => {
|
|
133
|
+
const token = getAddress(rawToken);
|
|
134
|
+
result[token] = await fetchErc20SlotHints(client, token, options);
|
|
135
|
+
}));
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Helper for callers who want to pre-seed the slot-hints cache from their own
|
|
140
|
+
* persistence layer (e.g. localStorage).
|
|
141
|
+
*/
|
|
142
|
+
export function primeSlotHintsCache(chainId, hints) {
|
|
143
|
+
for (const [token, h] of Object.entries(hints)) {
|
|
144
|
+
slotHintsCache.set(probeAddress(chainId, token), h);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/** Helper used by deriveStateOverrides to look up a hint without re-probing. */
|
|
148
|
+
export function getCachedSlotHints(chainId, token) {
|
|
149
|
+
return slotHintsCache.get(probeAddress(chainId, token));
|
|
150
|
+
}
|
|
151
|
+
export { toHex };
|
|
152
|
+
//# sourceMappingURL=slotHints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slotHints.js","sourceRoot":"","sources":["../../../../src/utils/stateOverrides/slotHints.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,GACL,MAAM,MAAM,CAAC;AAmCd,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,wBAAwB,GAAa,EAAE,CAAC;AAE9C,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEzD,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,KAAc,EAAE,EAAE,CACxD,GAAG,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc,EAAE,SAAiB;IACnE,OAAO,SAAS,CACf,YAAY,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CACrE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CACnC,KAAc,EACd,OAAgB,EAChB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,SAAS,CACzB,YAAY,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CACrE,CAAC;IACF,OAAO,SAAS,CACf,YAAY,CACX,CAAC,SAAS,EAAE,SAAS,CAAC,EACtB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAC7C,CACD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,MAAoB,EACpB,KAAc,EACd,UAAiC,EAAE;IAEnC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAErE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,iBAAiB,GACtB,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,CAAC;QAC/D,MAAM,mBAAmB,GACxB,CAAC,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,CAAC;QACnE,IAAI,CAAC,iBAAiB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,IAAI,sBAAsB,CAAC;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,IAAI,wBAAwB,CAAC;IACvE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;QAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,KAAK,MAAM,GAAG,IAAI,MAAM;QAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/C,MAAM,UAAU,GACf,4CAAuD,CAAC;IACzD,MAAM,YAAY,GACjB,OAAO,CAAC,gBAAgB;QACvB,4CAAwD,CAAC;IAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAEvD,MAAM,aAAa,GAAG,KAAK,EAC1B,WAAiC,EACjC,IAAiD,EACnB,EAAE;QAChC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpC,IAAI,KAAK,KAAK,UAAU;oBAAE,OAAO,GAAG,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACR,oCAAoC;YACrC,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,cAAc,GACnB,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE,gBAAgB,KAAK,SAAS;QAC5D,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC;QAC3C,CAAC,CAAC,aAAa,CACb,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,EAC5C,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CACd,MAAM;aACJ,YAAY,CAAC;YACb,GAAG,EAAE,QAAQ;YACb,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,UAAU,CAAC;YAClB,aAAa,EAAE;gBACd;oBACC,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;iBACtC;aACD;SACD,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAClB,CAAC;IAEL,MAAM,gBAAgB,GACrB,OAAO,CAAC,aAAa,IAAI,MAAM,EAAE,kBAAkB,KAAK,SAAS;QAChE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC;QAC7C,CAAC,CAAC,aAAa,CACb,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,EAC5D,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CACd,MAAM;aACJ,YAAY,CAAC;YACb,GAAG,EAAE,QAAQ;YACb,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;YAChC,aAAa,EAAE;gBACd;oBACC,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;iBACtC;aACD;SACD,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAClB,CAAC;IAEL,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChE,cAAc;QACd,gBAAgB;KAChB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAmB;QAC7B,gBAAgB;QAChB,kBAAkB;KAClB,CAAC;IACF,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,MAAoB,EACpB,MAAiB,EACjB,UAAiC,EAAE;IAEnC,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC,CAAC,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAClC,OAAe,EACf,KAAsC;IAEtC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,KAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;AACF,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CACjC,OAAe,EACf,KAAc;IAEd,OAAO,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
|