@carrot-protocol/clend-vaults-rpc 0.0.29 → 0.0.30-exec-fee-2-dev-1383e4d

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/math.d.ts CHANGED
@@ -36,3 +36,12 @@ export declare function usdToAmount(usdAmount: number, decimals: number, price:
36
36
  */
37
37
  export declare function convertSharesToAsset(vaultNav: number, sharesAmountUi: number, assetDecimals: number, assetPrice: number): BN;
38
38
  export declare function convertAssetToShares(vaultNav: number, assetAmount: BN, assetDecimals: number, sharesDecimals: number, assetPrice: number): BN;
39
+ /**
40
+ * Adjusts an amount upwards to compensate for potential swap slippage,
41
+ * assuming worst-case based on slippageBps.
42
+ *
43
+ * @param amountToAdjust - The amount to adjust (native units, BN), typically after cost adjustments.
44
+ * @param slippageBps - The maximum slippage tolerance in basis points (e.g., 100 for 1%).
45
+ * @returns Adjusted amount (native units, BN), slightly more than the input amount. Returns input amount if slippageBps is zero or invalid.
46
+ */
47
+ export declare function adjustAmountForSlippage(amountToAdjust: BN, slippageBps: number): BN;
package/dist/math.js CHANGED
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.calculateVaultNav = calculateVaultNav;
4
7
  exports.usdEarned = usdEarned;
@@ -9,7 +12,10 @@ exports.amountToUsd = amountToUsd;
9
12
  exports.usdToAmount = usdToAmount;
10
13
  exports.convertSharesToAsset = convertSharesToAsset;
11
14
  exports.convertAssetToShares = convertAssetToShares;
15
+ exports.adjustAmountForSlippage = adjustAmountForSlippage;
16
+ const anchor_1 = require("@coral-xyz/anchor");
12
17
  const utils_1 = require("./utils");
18
+ const decimal_js_1 = __importDefault(require("decimal.js"));
13
19
  /**
14
20
  * Computes the net asset value (NAV) per share based on vault equity and share supply.
15
21
  */
@@ -78,4 +84,37 @@ function convertAssetToShares(vaultNav, assetAmount, assetDecimals, sharesDecima
78
84
  const assetUsd = amountToUsd(assetAmount, assetDecimals, assetPrice);
79
85
  return usdToAmount(assetUsd, sharesDecimals, vaultNav);
80
86
  }
87
+ /**
88
+ * Adjusts an amount upwards to compensate for potential swap slippage,
89
+ * assuming worst-case based on slippageBps.
90
+ *
91
+ * @param amountToAdjust - The amount to adjust (native units, BN), typically after cost adjustments.
92
+ * @param slippageBps - The maximum slippage tolerance in basis points (e.g., 100 for 1%).
93
+ * @returns Adjusted amount (native units, BN), slightly more than the input amount. Returns input amount if slippageBps is zero or invalid.
94
+ */
95
+ function adjustAmountForSlippage(amountToAdjust, slippageBps) {
96
+ if (slippageBps <= 0) {
97
+ return amountToAdjust; // No adjustment if no slippage tolerance
98
+ }
99
+ const S = new decimal_js_1.default(slippageBps).div(10000); // Slippage factor S as decimal
100
+ // Ensure S is less than 1 (100% slippage)
101
+ if (S.gte(1)) {
102
+ return amountToAdjust;
103
+ }
104
+ // Formula: B_actual ≈ B_ideal / (1 - S)
105
+ // We borrow slightly more, anticipating the swap output will be worth less by factor S.
106
+ const denominator = new decimal_js_1.default(1).sub(S);
107
+ // Should not happen with S < 1, but safety check
108
+ if (denominator.isZero() ||
109
+ denominator.isNaN() ||
110
+ !denominator.isFinite() ||
111
+ denominator.isNegative()) {
112
+ return amountToAdjust;
113
+ }
114
+ const amountToAdjustDecimal = new decimal_js_1.default(amountToAdjust.toString());
115
+ const adjustedAmountDecimal = amountToAdjustDecimal.div(denominator);
116
+ // Round up when increasing amount due to needing more input for slippage
117
+ const adjustedAmount = new anchor_1.BN(adjustedAmountDecimal.ceil().toFixed());
118
+ return adjustedAmount;
119
+ }
81
120
  //# sourceMappingURL=math.js.map
package/dist/math.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":";;AAOA,8CAQC;AAKD,8BAEC;AAQD,gCAGC;AAQD,gCAEC;AAGD,sEAUC;AAKD,kCAMC;AAKD,kCAMC;AAKD,oDAWC;AAED,oDASC;AAvGD,mCAAkC;AAElC;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,MAAc,EACd,cAAsB;IAEtB,IAAI,MAAM,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,MAAM,GAAG,cAAc,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,QAAgB,EAAE,GAAW;IACrD,OAAO,QAAQ,GAAG,GAAG,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,QAAgB,EAAE,QAAgB;IAC3D,8BAA8B;IAC9B,OAAO,IAAA,eAAO,EAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,MAAU,EAAE,QAAgB;IACrD,OAAO,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,QAAQ,CAAC;AAC5C,CAAC;AAED,kCAAkC;AAClC,SAAgB,6BAA6B,CAC3C,sBAAiC;IAEjC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,CAAC;QAC7C,oCAAoC;QACpC,aAAa;YACX,aAAa,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,MAAU,EACV,QAAgB,EAChB,KAAa;IAEb,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,SAAiB,EACjB,QAAgB,EAChB,KAAa;IAEb,OAAO,UAAU,CAAC,SAAS,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,QAAgB,EAChB,cAAsB,EACtB,aAAqB,EACrB,UAAkB;IAElB,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAEtE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAgB,oBAAoB,CAClC,QAAgB,EAChB,WAAe,EACf,aAAqB,EACrB,cAAsB,EACtB,UAAkB;IAElB,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACrE,OAAO,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
package/dist/program.d.ts CHANGED
@@ -15,14 +15,21 @@ export declare class ClendVaultsProgram {
15
15
  updateAssetFlags(vault: web3.PublicKey, manager: web3.PublicKey, assetMint: web3.PublicKey, newFlags: BN): Promise<web3.TransactionInstruction>;
16
16
  updateClendAccountFlags(vault: web3.PublicKey, manager: web3.PublicKey, clendAccount: web3.PublicKey, newFlags: BN): Promise<web3.TransactionInstruction>;
17
17
  updateVaultFlags(vault: web3.PublicKey, manager: web3.PublicKey, newFlags: BN): Promise<web3.TransactionInstruction>;
18
- issue(vault: web3.PublicKey, sharesMint: web3.PublicKey, user: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, amount: BN, minAmountOut: BN, assetTokenProgram: web3.PublicKey, sharesTokenProgram: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
18
+ userSession(vault: web3.PublicKey, manager: web3.PublicKey, user: web3.PublicKey, op: "issue" | "redeem", endSessionIxIndex: number): Promise<{
19
+ startIx: web3.TransactionInstruction;
20
+ endIx: web3.TransactionInstruction;
21
+ }>;
22
+ issue(vault: web3.PublicKey, sharesMint: web3.PublicKey, user: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, amount: BN, minAmountOut: BN, assetTokenProgram: web3.PublicKey, sharesTokenProgram: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<{
23
+ issueStartIxns: web3.TransactionInstruction[];
24
+ issueEndIxns: web3.TransactionInstruction[];
25
+ }>;
19
26
  redeem(vault: web3.PublicKey, sharesMint: web3.PublicKey, user: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, amount: BN, minAmountOut: BN, assetTokenProgram: web3.PublicKey, sharesTokenProgram: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
20
27
  clendAccountDeposit(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, assetMintTokenProgram: web3.PublicKey, amount: BN, vaultReserve: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
21
28
  clendAccountWithdraw(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, assetMintTokenProgram: web3.PublicKey, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
22
29
  clendAccountRepay(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, mintTokenProgram: web3.PublicKey, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
23
- clendAccountBorrow(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, mintTokenProgram: web3.PublicKey, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
30
+ clendAccountBorrow(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, assetOracle: web3.PublicKey, mintTokenProgram: web3.PublicKey, userSession: web3.PublicKey | null, amount: BN, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
24
31
  clendAccountWithdrawEmissions(vault: web3.PublicKey, vaultManager: web3.PublicKey, clendGroup: web3.PublicKey, clendAccount: web3.PublicKey, clendBank: web3.PublicKey, assetMint: web3.PublicKey, assetTokenProgram: web3.PublicKey): Promise<web3.TransactionInstruction>;
25
- swap(vault: web3.PublicKey, vaultManager: web3.PublicKey, assetInMint: web3.PublicKey, assetOutMint: web3.PublicKey, vaultAssetInReserve: web3.PublicKey, vaultAssetOutReserve: web3.PublicKey, swapData: Buffer, remainingAccounts: web3.AccountMeta[], swapProgram?: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
32
+ swap(vault: web3.PublicKey, vaultManager: web3.PublicKey, assetInMint: web3.PublicKey, assetOutMint: web3.PublicKey, vaultAssetInOracle: web3.PublicKey, vaultAssetOutOracle: web3.PublicKey, vaultAssetInReserve: web3.PublicKey, vaultAssetOutReserve: web3.PublicKey, userSession: web3.PublicKey | null, swapData: Buffer, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction[]>;
26
33
  distributeFees(vault: web3.PublicKey, manager: web3.PublicKey, shares: web3.PublicKey, sharesDestinationOwner: web3.PublicKey): Promise<web3.TransactionInstruction[]>;
27
34
  updateSbOraclePrice(vault: web3.PublicKey, shares: web3.PublicKey, queue: web3.PublicKey, feed: web3.PublicKey, remainingAccounts: web3.AccountMeta[]): Promise<web3.TransactionInstruction>;
28
35
  updateAssetOracle(vault: web3.PublicKey, manager: web3.PublicKey, assetMint: web3.PublicKey, oracleMaxAge: number | null, oracle: web3.PublicKey | null): Promise<web3.TransactionInstruction>;
package/dist/program.js CHANGED
@@ -127,25 +127,47 @@ class ClendVaultsProgram {
127
127
  .instruction();
128
128
  return ix;
129
129
  }
130
- // -----------------
131
- // Shares ops
132
- // -----------------
130
+ async userSession(vault, manager, user, op, endSessionIxIndex) {
131
+ const userSession = (0, addresses_1.getUserSessionPda)(vault, user);
132
+ const args = {
133
+ op: op === "issue" ? 0 : 1,
134
+ endSessionIxIndex,
135
+ };
136
+ const startIx = await this.program.methods
137
+ .userSessionStart(args)
138
+ .accountsStrict({
139
+ vault,
140
+ userSession,
141
+ user,
142
+ manager,
143
+ instructions: anchor_1.web3.SYSVAR_INSTRUCTIONS_PUBKEY,
144
+ systemProgram: anchor_1.web3.SystemProgram.programId,
145
+ })
146
+ .instruction();
147
+ const endIx = await this.program.methods
148
+ .userSessionEnd()
149
+ .accountsStrict({
150
+ vault,
151
+ userSession,
152
+ manager,
153
+ })
154
+ .instruction();
155
+ return { startIx, endIx };
156
+ }
133
157
  async issue(vault, sharesMint, user, assetMint, assetOracle, amount, minAmountOut, assetTokenProgram, sharesTokenProgram, remainingAccounts) {
134
158
  // Vault reserve (owner is vault PDA)
135
159
  const vaultAssetReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, assetTokenProgram);
136
160
  // User ATAs (owner is user)
137
161
  const userAssetAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, user, true, assetTokenProgram);
138
162
  const userSharesAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(sharesMint, user, true, sharesTokenProgram);
139
- const ixns = [];
163
+ const userSession = (0, addresses_1.getUserSessionPda)(vault, user);
164
+ const issueStartIxns = [];
140
165
  if (assetMint.equals(SOL_MINT)) {
141
166
  // if the asset is sol, wrap it before issue
142
- ixns.push(...createWSolTokenAccountIxns(user, amount));
167
+ issueStartIxns.push(...createWSolTokenAccountIxns(user, amount));
143
168
  }
144
- // for shares received
145
- const createUserSharesIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(user, userSharesAccount, user, sharesMint, sharesTokenProgram);
146
- ixns.push(createUserSharesIx);
147
- const ix = await this.program.methods
148
- .issue({ amount, minAmountOut })
169
+ const issueStartIx = await this.program.methods
170
+ .issueStart({ amount })
149
171
  .accountsStrict({
150
172
  vault,
151
173
  shares: sharesMint,
@@ -153,21 +175,38 @@ class ClendVaultsProgram {
153
175
  assetOracle,
154
176
  vaultAssetReserve,
155
177
  userAssetAccount,
156
- userSharesAccount,
178
+ userSession,
157
179
  user,
158
180
  clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
159
181
  assetTokenProgram,
160
- sharesTokenProgram,
161
182
  })
162
183
  .remainingAccounts(remainingAccounts)
163
184
  .instruction();
164
- ixns.push(ix);
165
- return ixns;
185
+ issueStartIxns.push(issueStartIx);
186
+ // for shares received
187
+ const createUserSharesIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(user, userSharesAccount, user, sharesMint, sharesTokenProgram);
188
+ const issueEndIx = await this.program.methods
189
+ .issueEnd({ minAmountOut })
190
+ .accountsStrict({
191
+ vault,
192
+ shares: sharesMint,
193
+ userSession,
194
+ user,
195
+ userSharesAccount,
196
+ sharesTokenProgram,
197
+ })
198
+ .instruction();
199
+ const issueEndIxns = [
200
+ createUserSharesIx,
201
+ issueEndIx,
202
+ ];
203
+ return { issueStartIxns, issueEndIxns };
166
204
  }
167
205
  async redeem(vault, sharesMint, user, assetMint, assetOracle, amount, minAmountOut, assetTokenProgram, sharesTokenProgram, remainingAccounts) {
168
206
  const vaultAssetReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, vault, true, assetTokenProgram);
169
207
  const userAssetAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(assetMint, user, true, assetTokenProgram);
170
208
  const userSharesAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(sharesMint, user, true, sharesTokenProgram);
209
+ const userSession = (0, addresses_1.getUserSessionPda)(vault, user);
171
210
  // Make sure the user asset ATA exists
172
211
  const createUserAssetIx = (0, spl_token_1.createAssociatedTokenAccountIdempotentInstruction)(user, userAssetAccount, user, assetMint, assetTokenProgram);
173
212
  const ix = await this.program.methods
@@ -180,6 +219,7 @@ class ClendVaultsProgram {
180
219
  vaultAssetReserve,
181
220
  userAssetAccount,
182
221
  userSharesAccount,
222
+ userSession,
183
223
  user,
184
224
  clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
185
225
  assetTokenProgram,
@@ -194,9 +234,6 @@ class ClendVaultsProgram {
194
234
  }
195
235
  return ixns;
196
236
  }
197
- // -----------------
198
- // Clend-account ops (builders; vault PDA signs via seeds)
199
- // -----------------
200
237
  async clendAccountDeposit(vault, vaultManager, clendGroup, clendAccount, assetMint, assetMintTokenProgram, amount, vaultReserve, remainingAccounts) {
201
238
  const bank = (0, clend_rpc_1.getBankPda)(clendGroup, assetMint);
202
239
  const bankLiquidityVault = (0, clend_rpc_1.getBankLiquidityVaultPda)(bank);
@@ -264,7 +301,7 @@ class ClendVaultsProgram {
264
301
  .instruction();
265
302
  return [ix];
266
303
  }
267
- async clendAccountBorrow(vault, vaultManager, clendGroup, clendAccount, assetMint, mintTokenProgram, amount, remainingAccounts) {
304
+ async clendAccountBorrow(vault, vaultManager, clendGroup, clendAccount, assetMint, assetOracle, mintTokenProgram, userSession, amount, remainingAccounts) {
268
305
  const bank = (0, clend_rpc_1.getBankPda)(clendGroup, assetMint);
269
306
  const bankLiquidityVault = (0, clend_rpc_1.getBankLiquidityVaultPda)(bank);
270
307
  const bankLiquidityVaultAuthority = (0, clend_rpc_1.getBankLiquidityVaultAuthorityPda)(bank);
@@ -274,12 +311,14 @@ class ClendVaultsProgram {
274
311
  .accountsStrict({
275
312
  vault,
276
313
  assetMint,
314
+ assetOracle,
277
315
  clendGroup,
278
316
  clendAccount,
279
317
  bank,
280
318
  destinationTokenAccount,
281
319
  bankLiquidityVaultAuthority,
282
320
  bankLiquidityVault,
321
+ userSession,
283
322
  manager: vaultManager,
284
323
  tokenProgram: mintTokenProgram,
285
324
  clendProgram: clend_rpc_1.CLEND_PROGRAM_ID,
@@ -310,17 +349,20 @@ class ClendVaultsProgram {
310
349
  .instruction();
311
350
  return ix;
312
351
  }
313
- async swap(vault, vaultManager, assetInMint, assetOutMint, vaultAssetInReserve, vaultAssetOutReserve, swapData, remainingAccounts, swapProgram = addresses_1.JUPITER_SWAP_PROGRAM_ID) {
352
+ async swap(vault, vaultManager, assetInMint, assetOutMint, vaultAssetInOracle, vaultAssetOutOracle, vaultAssetInReserve, vaultAssetOutReserve, userSession, swapData, remainingAccounts) {
314
353
  const ix = await this.program.methods
315
354
  .swap({ swapData: Buffer.from(swapData) })
316
355
  .accountsStrict({
317
356
  vault,
318
357
  assetInMint,
319
358
  assetOutMint,
359
+ vaultAssetInOracle,
360
+ vaultAssetOutOracle,
320
361
  vaultAssetInReserve,
321
362
  vaultAssetOutReserve,
363
+ userSession,
322
364
  manager: vaultManager,
323
- swapProgram,
365
+ systemProgram: anchor_1.web3.SystemProgram.programId,
324
366
  })
325
367
  .remainingAccounts(remainingAccounts)
326
368
  .instruction();
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":";;;;;;AA6qBA,gEA6BC;AAGD,0DAYC;AAztBD,kBAAkB;AAClB,8CAAsE;AACtE,iDAS2B;AAC3B,2CAAmE;AAEnE,gFAA0C;AAC1C,0DAOoC;AACpC,mCAA2C;AAE3C,MAAa,kBAAkB;IAG7B,YAAY,QAAyB;QACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAA,wBAAgB,GAAE,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAO,CAAc,2BAAG,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,SAAS,CACb,eAA+B,EAC/B,OAAuB,EACvB,gBAAwB;QAExB,MAAM,KAAK,GAAG,IAAA,uBAAW,EAAC,eAAe,CAAC,CAAC;QAE3C,MAAM,uBAAuB,GAAG,IAAA,yCAA6B,EAC3D,eAAe,EACf,OAAO,EACP,yBAAa,CAAC,UAAU,EACxB,KAAK,EACL,EAAE,EACF,iCAAqB,CACtB,CAAC;QAEF,MAAM,IAAI,GAAG;YACX,gBAAgB;SACjB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,SAAS,CAAC,IAAI,CAAC;aACf,cAAc,CAAC;YACd,OAAO;YACP,KAAK,EAAE,OAAO;YACd,KAAK;YACL,WAAW,EAAE,eAAe;YAC5B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,uBAAuB,EAAE,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,KAAqB,EACrB,OAAuB,EACvB,SAAyB,EACzB,WAA2B,EAC3B,iBAAiC,EACjC,WAAmB,EACnB,gBAAwB,EACxB,YAAoB;QAEpB,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,SAAS,EACT,KAAK,EACL,IAAI,EACJ,iBAAiB,CAClB,CAAC;QAEF,0BAA0B;QAC1B,MAAM,oBAAoB,GACxB,IAAA,6DAAiD,EAC/C,OAAO,EAAE,QAAQ;QACjB,iBAAiB,EACjB,KAAK,EACL,SAAS,EACT,iBAAiB,CAClB,CAAC;QAEJ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAC1C,QAAQ,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;aACzD,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,WAAW;YACX,iBAAiB;YACjB,OAAO;YACP,YAAY,EAAE,iBAAiB;SAChC,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAqB,EACrB,OAAuB,EACvB,UAA0B,EAC1B,YAA0B,EAC1B,WAAe;QAEf,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;aAChC,cAAc,CAAC;YACd,KAAK;YACL,YAAY,EAAE,YAAY,CAAC,SAAS;YACpC,UAAU;YACV,OAAO;YACP,YAAY,EAAE,4BAAgB;YAC9B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,KAAqB,EACrB,cAA8B,EAC9B,UAA0B;QAE1B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,kBAAkB,EAAE;aACpB,cAAc,CAAC;YACd,KAAK;YACL,UAAU;YACV,OAAO,EAAE,cAAc;SACxB,CAAC;aACD,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,KAAK,CAAC,eAAe,CACnB,KAAqB,EACrB,OAAuB,EACvB,gBAAwB;QAExB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,eAAe,CAAC,EAAE,gBAAgB,EAAE,CAAC;aACrC,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;aAClC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAqB,EACrB,OAAuB,EACvB,SAAyB,EACzB,WAA0B,EAC1B,gBAA+B;QAE/B,MAAM,IAAI,GAAG;YACX,WAAW;YACX,gBAAgB;SACjB,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,eAAe,CAAC,IAAI,CAAC;aACrB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;aAC7C,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,KAAqB,EACrB,OAAuB,EACvB,SAAyB,EACzB,QAAY;QAEZ,MAAM,IAAI,GAAG;YACX,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SAC5B,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,gBAAgB,CAAC,IAAI,CAAC;aACtB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;aAC7C,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,KAAqB,EACrB,OAAuB,EACvB,YAA4B,EAC5B,QAAY;QAEZ,MAAM,IAAI,GAAG;YACX,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SAC5B,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,uBAAuB,CAAC,IAAI,CAAC;aAC7B,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;aAChD,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,KAAqB,EACrB,OAAuB,EACvB,QAAY;QAEZ,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,gBAAgB,CAAC,IAAI,CAAC;aACtB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;aAClC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,oBAAoB;IACpB,aAAa;IACb,oBAAoB;IAEpB,KAAK,CAAC,KAAK,CACT,KAAqB,EACrB,UAA0B,EAC1B,IAAoB,EACpB,SAAyB,EACzB,WAA2B,EAC3B,MAAU,EACV,YAAgB,EAChB,iBAAiC,EACjC,kBAAkC,EAClC,iBAAqC;QAErC,qCAAqC;QACrC,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,SAAS,EACT,KAAK,EACL,IAAI,EACJ,iBAAiB,CAClB,CAAC;QAEF,4BAA4B;QAC5B,MAAM,gBAAgB,GAAG,IAAA,yCAA6B,EACpD,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,iBAAiB,CAClB,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,kBAAkB,CACnB,CAAC;QAEF,MAAM,IAAI,GAAkC,EAAE,CAAC;QAC/C,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,4CAA4C;YAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,sBAAsB;QACtB,MAAM,kBAAkB,GACtB,IAAA,6DAAiD,EAC/C,IAAI,EACJ,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACV,kBAAkB,CACnB,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE9B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;aAC/B,cAAc,CAAC;YACd,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,SAAS;YACT,WAAW;YACX,iBAAiB;YACjB,gBAAgB;YAChB,iBAAiB;YACjB,IAAI;YACJ,YAAY,EAAE,4BAAgB;YAC9B,iBAAiB;YACjB,kBAAkB;SACnB,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAqB,EACrB,UAA0B,EAC1B,IAAoB,EACpB,SAAyB,EACzB,WAA2B,EAC3B,MAAU,EACV,YAAgB,EAChB,iBAAiC,EACjC,kBAAkC,EAClC,iBAAqC;QAErC,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,SAAS,EACT,KAAK,EACL,IAAI,EACJ,iBAAiB,CAClB,CAAC;QACF,MAAM,gBAAgB,GAAG,IAAA,yCAA6B,EACpD,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,iBAAiB,CAClB,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,kBAAkB,CACnB,CAAC;QAEF,sCAAsC;QACtC,MAAM,iBAAiB,GAAG,IAAA,6DAAiD,EACzE,IAAI,EACJ,gBAAgB,EAChB,IAAI,EACJ,SAAS,EACT,iBAAiB,CAClB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;aAChC,cAAc,CAAC;YACd,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,SAAS;YACT,WAAW;YACX,iBAAiB;YACjB,gBAAgB;YAChB,iBAAiB;YACjB,IAAI;YACJ,YAAY,EAAE,4BAAgB;YAC9B,iBAAiB;YACjB,kBAAkB;SACnB,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,MAAM,IAAI,GAAkC,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,8EAA8E;YAC9E,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB;IACpB,0DAA0D;IAC1D,oBAAoB;IAEpB,KAAK,CAAC,mBAAmB,CACvB,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,SAAyB,EACzB,qBAAqC,EACrC,MAAU,EACV,YAA4B,EAC5B,iBAAqC;QAErC,MAAM,IAAI,GAAG,IAAA,sBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC;QAE1D,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;aAC/B,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,YAAY;YACZ,kBAAkB;YAClB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,qBAAqB;YACnC,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,SAAyB,EACzB,qBAAqC,EACrC,MAAU,EACV,iBAAqC;QAErC,MAAM,IAAI,GAAG,IAAA,sBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,2BAA2B,GAAG,IAAA,6CAAiC,EAAC,IAAI,CAAC,CAAC;QAE5E,MAAM,uBAAuB,GAAG,IAAA,yCAA6B,EAC3D,SAAS,EACT,KAAK,EACL,IAAI,EACJ,qBAAqB,CACtB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;aAChC,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,uBAAuB;YACvB,2BAA2B;YAC3B,kBAAkB;YAClB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,qBAAqB;YACnC,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,SAAyB,EACzB,gBAAgC,EAChC,MAAU,EACV,iBAAqC;QAErC,MAAM,IAAI,GAAG,IAAA,sBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC;QAE1D,MAAM,kBAAkB,GAAG,IAAA,yCAA6B,EACtD,SAAS,EACT,KAAK,EACL,IAAI,EACJ,gBAAgB,CACjB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;aAC7B,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,kBAAkB;YAClB,kBAAkB;YAClB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,gBAAgB;YAC9B,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,SAAyB,EACzB,gBAAgC,EAChC,MAAU,EACV,iBAAqC;QAErC,MAAM,IAAI,GAAG,IAAA,sBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,kBAAkB,GAAG,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,2BAA2B,GAAG,IAAA,6CAAiC,EAAC,IAAI,CAAC,CAAC;QAE5E,MAAM,uBAAuB,GAAG,IAAA,yCAA6B,EAC3D,SAAS,EACT,KAAK,EACL,IAAI,EACJ,gBAAgB,CACjB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;aAC9B,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,uBAAuB;YACvB,2BAA2B;YAC3B,kBAAkB;YAClB,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,gBAAgB;YAC9B,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,6BAA6B,CACjC,KAAqB,EACrB,YAA4B,EAC5B,UAA0B,EAC1B,YAA4B,EAC5B,SAAyB,EACzB,SAAyB,EACzB,iBAAiC;QAEjC,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,SAAS,EACT,KAAK,EACL,IAAI,EACJ,iBAAiB,CAClB,CAAC;QACF,MAAM,aAAa,GAAG,IAAA,+BAAmB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,IAAA,uCAA2B,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEzE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,6BAA6B,EAAE;aAC/B,cAAc,CAAC;YACd,KAAK;YACL,SAAS;YACT,UAAU;YACV,YAAY;YACZ,IAAI,EAAE,SAAS;YACf,aAAa;YACb,cAAc;YACd,kBAAkB,EAAE,iBAAiB;YACrC,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,iBAAiB;YAC/B,YAAY,EAAE,4BAAgB;SAC/B,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,IAAI,CACR,KAAqB,EACrB,YAA4B,EAC5B,WAA2B,EAC3B,YAA4B,EAC5B,mBAAmC,EACnC,oBAAoC,EACpC,QAAgB,EAChB,iBAAqC,EACrC,cAA8B,mCAAuB;QAErD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;aACzC,cAAc,CAAC;YACd,KAAK;YACL,WAAW;YACX,YAAY;YACZ,mBAAmB;YACnB,oBAAoB;YACpB,OAAO,EAAE,YAAY;YACrB,WAAW;SACZ,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,KAAqB,EACrB,OAAuB,EACvB,MAAsB,EACtB,sBAAsC;QAEtC,MAAM,iBAAiB,GAAG,IAAA,yCAA6B,EACrD,MAAM,EACN,sBAAsB,EACtB,IAAI,EACJ,iCAAqB,CACtB,CAAC;QACF,MAAM,yBAAyB,GAC7B,IAAA,6DAAiD,EAC/C,OAAO,EACP,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,EACN,iCAAqB,CACtB,CAAC;QACJ,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,cAAc,EAAE;aAChB,cAAc,CAAC;YACd,KAAK;YACL,OAAO;YACP,MAAM;YACN,iBAAiB;YACjB,YAAY,EAAE,iCAAqB;SACpC,CAAC;aACD,WAAW,EAAE,CAAC;QAEjB,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,KAAqB,EACrB,MAAsB,EACtB,KAAqB,EACrB,IAAoB,EACpB,iBAAqC;QAErC,MAAM,YAAY,GAAG,IAAI,aAAI,CAAC,SAAS,CACrC,8CAA8C,CAC/C,CAAC;QACF,MAAM,WAAW,GAAG,IAAA,yCAA6B,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,aAAI,CAAC,SAAS,CAClC,6CAA6C,CAC9C,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,mBAAmB,EAAE;aACrB,cAAc,CAAC;YACd,KAAK;YACL,MAAM;YACN,IAAI;YACJ,KAAK;YACL,YAAY;YACZ,WAAW;YACX,SAAS,EAAE,QAAQ;YACnB,gBAAgB,EAAE,aAAI,CAAC,yBAAyB;YAChD,YAAY,EAAE,4BAAgB;YAC9B,0BAA0B,EAAE,SAAS;YACrC,YAAY,EAAE,4BAAgB;YAC9B,aAAa,EAAE,aAAI,CAAC,aAAa,CAAC,SAAS;SAC5C,CAAC;aACD,iBAAiB,CAAC,iBAAiB,CAAC;aACpC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,KAAK,CAAC,iBAAiB,CACrB,KAAqB,EACrB,OAAuB,EACvB,SAAyB,EACzB,YAA2B,EAC3B,MAA6B;QAE7B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO;aAClC,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAC;aACnC,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;aACrD,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AA3oBD,gDA2oBC;AAED,MAAM,QAAQ,GAAG,IAAI,aAAI,CAAC,SAAS,CACjC,6CAA6C,CAC9C,CAAC;AAEF,mCAAmC;AACnC,+BAA+B;AAC/B,oBAAoB;AACpB,SAAgB,0BAA0B,CACxC,MAAsB,EACtB,MAAU;IAEV,MAAM,sBAAsB,GAAG,IAAA,yCAA6B,EAC1D,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,4BAAgB,CACjB,CAAC;IAEF,MAAM,wBAAwB,GAC5B,IAAA,6DAAiD,EAC/C,MAAM,EACN,sBAAsB,EACtB,MAAM,EACN,QAAQ,EACR,4BAAgB,CACjB,CAAC;IAEJ,MAAM,aAAa,GAAG,aAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QAChD,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,sBAAsB;QAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KACpC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAA,uCAA2B,EAAC,sBAAsB,CAAC,CAAC;IAEzE,OAAO,CAAC,wBAAwB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;AACjE,CAAC;AAED,qCAAqC;AACrC,SAAgB,uBAAuB,CACrC,MAAsB,EACtB,sBAAsC;IAEtC,MAAM,EAAE,GAAG,IAAA,yCAA6B,EACtC,sBAAsB,EACtB,MAAM,EACN,MAAM,EACN,EAAE,EACF,4BAAgB,CACjB,CAAC;IACF,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
package/dist/rpc.d.ts CHANGED
@@ -33,10 +33,10 @@ export declare class ClendVaultsClient {
33
33
  updateAssetFlags(vault: web3.PublicKey, assetMint: web3.PublicKey, newFlags: BN): Promise<string>;
34
34
  updateClendAccountFlags(vault: web3.PublicKey, clendAccount: web3.PublicKey, newFlags: BN): Promise<string>;
35
35
  updateVaultFlags(vault: web3.PublicKey, newFlags: BN): Promise<string>;
36
- issue(vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN): Promise<string>;
37
- prepareIssueIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN): Promise<web3.TransactionInstruction[]>;
38
- redeem(vault: web3.PublicKey, assetMint: web3.PublicKey, sharesAmount: BN, minAmountOut: BN): Promise<string>;
39
- prepareRedeemIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN): Promise<web3.TransactionInstruction[]>;
36
+ issue(vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN, vaultManager?: web3.Signer): Promise<string>;
37
+ prepareIssueIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN, additionalIxnCount: number): Promise<web3.TransactionInstruction[]>;
38
+ redeem(vault: web3.PublicKey, assetMint: web3.PublicKey, sharesAmount: BN, minAmountOut: BN, vaultManager?: web3.Signer): Promise<string>;
39
+ prepareRedeemIxns(user: web3.PublicKey, vault: web3.PublicKey, assetMint: web3.PublicKey, amount: BN, minAmountOut: BN, additionalIxnCount: number): Promise<web3.TransactionInstruction[]>;
40
40
  clendAccountDeposit(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<string>;
41
41
  clendAccountWithdraw(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN): Promise<string>;
42
42
  clendAccountRepay(vault: web3.PublicKey, clendAccount: web3.PublicKey, assetMint: web3.PublicKey, amount: BN | number): Promise<string>;
package/dist/rpc.js CHANGED
@@ -128,29 +128,52 @@ class ClendVaultsClient {
128
128
  const txSig = await this.send([ix]);
129
129
  return txSig;
130
130
  }
131
- async issue(vault, assetMint, amount, minAmountOut) {
132
- const ixns = await this.prepareIssueIxns(this.address(), vault, assetMint, amount, minAmountOut);
133
- const txSig = await this.send(ixns);
131
+ async issue(vault, assetMint, amount, minAmountOut, vaultManager) {
132
+ const ixns = await this.prepareIssueIxns(this.address(), vault, assetMint, amount, minAmountOut, 2);
133
+ const additionalSigners = vaultManager ? [vaultManager] : [];
134
+ const txSig = await this.send(ixns, additionalSigners);
134
135
  return txSig;
135
136
  }
136
- async prepareIssueIxns(user, vault, assetMint, amount, minAmountOut) {
137
+ async prepareIssueIxns(user, vault, assetMint, amount, minAmountOut, additionalIxnCount) {
137
138
  // get vault and asset data
138
139
  const vaultState = await this.getVault(vault);
139
140
  const assetData = vaultState.assets.find((a) => a.mint.address.equals(assetMint));
140
141
  const remainingAccounts = await buildEquityRemainingAccounts(vaultState, this.clendClient);
141
- const ixns = await this.program.issue(vault, vaultState.sharesMint, user, assetMint, assetData.oracle.address, amount, minAmountOut, assetData.mint.tokenProgram, spl_token_1.TOKEN_2022_PROGRAM_ID, remainingAccounts);
142
+ const { issueStartIxns, issueEndIxns } = await this.program.issue(vault, vaultState.sharesMint, user, assetMint, assetData.oracle.address, amount, minAmountOut, assetData.mint.tokenProgram, spl_token_1.TOKEN_2022_PROGRAM_ID, remainingAccounts);
143
+ const endSessionIxIndex = additionalIxnCount +
144
+ 1 + // userSessionStartIx
145
+ issueStartIxns.length +
146
+ issueEndIxns.length;
147
+ const { startIx: userSessionStartIx, endIx: userSessionEndIx } = await this.program.userSession(vault, vaultState.manager, user, "issue", endSessionIxIndex);
148
+ const ixns = [
149
+ userSessionStartIx,
150
+ ...issueStartIxns,
151
+ ...issueEndIxns,
152
+ userSessionEndIx,
153
+ ];
142
154
  return ixns;
143
155
  }
144
- async redeem(vault, assetMint, sharesAmount, minAmountOut) {
145
- const ixns = await this.prepareRedeemIxns(this.address(), vault, assetMint, sharesAmount, minAmountOut);
146
- const txSig = await this.send(ixns);
156
+ async redeem(vault, assetMint, sharesAmount, minAmountOut, vaultManager) {
157
+ const ixns = await this.prepareRedeemIxns(this.address(), vault, assetMint, sharesAmount, minAmountOut, 2);
158
+ const additionalSigners = vaultManager ? [vaultManager] : [];
159
+ const txSig = await this.send(ixns, additionalSigners);
147
160
  return txSig;
148
161
  }
149
- async prepareRedeemIxns(user, vault, assetMint, amount, minAmountOut) {
162
+ async prepareRedeemIxns(user, vault, assetMint, amount, minAmountOut, additionalIxnCount) {
150
163
  const vaultState = await this.getVault(vault);
151
164
  const assetData = vaultState.assets.find((a) => a.mint.address.equals(assetMint));
152
165
  const remainingAccounts = await buildEquityRemainingAccounts(vaultState, this.clendClient);
153
- return this.program.redeem(vault, vaultState.sharesMint, user, assetMint, assetData.oracle.address, amount, minAmountOut, assetData.mint.tokenProgram, spl_token_1.TOKEN_2022_PROGRAM_ID, remainingAccounts);
166
+ const redeemIxns = await this.program.redeem(vault, vaultState.sharesMint, user, assetMint, assetData.oracle.address, amount, minAmountOut, assetData.mint.tokenProgram, spl_token_1.TOKEN_2022_PROGRAM_ID, remainingAccounts);
167
+ const endSessionIxIndex = additionalIxnCount +
168
+ 1 + // userSessionStartIx
169
+ redeemIxns.length;
170
+ const { startIx: userSessionStartIx, endIx: userSessionEndIx } = await this.program.userSession(vault, vaultState.manager, user, "redeem", endSessionIxIndex);
171
+ const ixns = [
172
+ userSessionStartIx,
173
+ ...redeemIxns,
174
+ userSessionEndIx,
175
+ ];
176
+ return ixns;
154
177
  }
155
178
  async clendAccountDeposit(vault, clendAccount, assetMint, amount) {
156
179
  // fetch clend account data
@@ -219,7 +242,7 @@ class ClendVaultsClient {
219
242
  }
220
243
  const activeBankData = await this.clendClient.getBanks(clendAccountActiveBanks);
221
244
  const ra = (0, clend_rpc_1.getClendAccountRemainingAccounts)(activeBankData);
222
- const ixns = await this.program.clendAccountBorrow(vault, this.address(), clendAccountData.group, clendAccount, assetMint, assetData.mint.tokenProgram, amount, ra);
245
+ const ixns = await this.program.clendAccountBorrow(vault, this.address(), clendAccountData.group, clendAccount, assetMint, assetData.oracle.address, assetData.mint.tokenProgram, null, amount, ra);
223
246
  const txSig = await this.send(ixns);
224
247
  return txSig;
225
248
  }
@@ -409,9 +432,9 @@ class ClendVaultsClient {
409
432
  if (isIncrease && finalDebtDeltaUi > 0) {
410
433
  // how much debt is actually borrowable in UI terms
411
434
  const availableDebtUiRaw = (0, math_1.amountToUi)(debtBankData.availableSupply, debtDecimals);
412
- // leave a tiny buffer so we don't try to consume the very last lamport
413
- const MIN_REMAINING_UI = 0.01; // e.g. 1 cent of USDC
414
- const maxUsableDebtUi = Math.max(0, availableDebtUiRaw - MIN_REMAINING_UI);
435
+ // calculate the max usable debt based on the target pool utilization
436
+ const targetUtilFactor = 0.85; // target pool utilization is 85%
437
+ const maxUsableDebtUi = availableDebtUiRaw * targetUtilFactor;
415
438
  if (maxUsableDebtUi <= 0) {
416
439
  // error if there's literally no debt available to borrow
417
440
  throw new Error("Not enough debt available to adjust leverage");
@@ -503,7 +526,11 @@ class ClendVaultsClient {
503
526
  });
504
527
  const swapIxns = await this.swapper.getSwapIxns(swapQuote);
505
528
  const debtTokenProgram = await (0, clend_rpc_1.getTokenProgramForMintFromRpc)(this.program.program.provider.connection, debtBankData.mint);
506
- const borrowIxns = await this.program.clendAccountBorrow(vault, vaultManager, clendAccountState.group, clendAccount, debtBankData.mint, debtTokenProgram, additionalDebtAmount, remainingAccounts);
529
+ const debtVaultAssetState = vaultState.assets.find((a) => a.mint.address.equals(debtBankData.mint));
530
+ if (!debtVaultAssetState) {
531
+ throw new Error(`Vault asset not found: ${debtBankData.mint.toString()}`);
532
+ }
533
+ const borrowIxns = await this.program.clendAccountBorrow(vault, vaultManager, clendAccountState.group, clendAccount, debtBankData.mint, debtVaultAssetState.oracle.address, debtTokenProgram, null, additionalDebtAmount, remainingAccounts);
507
534
  const additionalCollateralAmount = swapQuote.outAmount;
508
535
  const depositIxns = await this.program.clendAccountDeposit(vault, vaultManager, clendAccountState.group, clendAccount, collateralBankData.mint, collateralTokenProgram, additionalCollateralAmount, userCollateralAta, remainingAccounts);
509
536
  instructions.push(...borrowIxns, ...swapIxns.ixns, ...depositIxns);
@@ -578,7 +605,8 @@ class ClendVaultsClient {
578
605
  prependedIxCount += cuIxCount;
579
606
  // get the redemption ixns
580
607
  // these are run after the withdraw leverage ixns
581
- const redeemIxns = await this.prepareRedeemIxns(user, vault, outputAssetMint, totalSharesToRedeem, new anchor_1.BN(0));
608
+ const redeemIxns = await this.prepareRedeemIxns(user, vault, outputAssetMint, totalSharesToRedeem, new anchor_1.BN(0), // TODO, maybe base this off slippage?
609
+ 2);
582
610
  // calculate parameters for withdraw leverage
583
611
  // based on output asset mint
584
612
  let debtToRepay;
@@ -665,11 +693,7 @@ class ClendVaultsClient {
665
693
  const debtToRepayUi = new decimal_js_1.Decimal((0, math_1.amountToUi)(debtToRepay, debtDecimals).toString());
666
694
  const collateralToSwapUi_ideal = debtToRepayUi.div(outAmountUi);
667
695
  const collateralToSwap_ideal = (0, math_1.uiToAmount)(collateralToSwapUi_ideal.toNumber(), collateralDecimals);
668
- collateralToSwap = collateralToSwap_ideal;
669
- //collateralToSwap = adjustAmountForSlippage(
670
- // collateralToSwap_ideal,
671
- // slippageBps,
672
- //);
696
+ collateralToSwap = (0, math_1.adjustAmountForSlippage)(collateralToSwap_ideal, slippageBps);
673
697
  // Step 4 (Final Quote): Get the real quote for the buffered amount.
674
698
  swapQuote = await this.swapper.getQuote(vault, {
675
699
  payer: vaultManager,
@@ -877,10 +901,8 @@ class ClendVaultsClient {
877
901
  return { ixns: instructions, luts: swapIxns.luts };
878
902
  }
879
903
  async swap(vault, inputMint, outputMint, inAmount) {
880
- const { state: inputMintState, tokenProgram: inputMintTokenProgram } = await (0, state_1.getMintState)(inputMint, this.connection);
881
- const { state: outputMintState, tokenProgram: outputMintTokenProgram } = await (0, state_1.getMintState)(outputMint, this.connection);
882
- const vaultAssetInReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(inputMint, vault, true, inputMintTokenProgram);
883
- const vaultAssetOutReserve = (0, spl_token_1.getAssociatedTokenAddressSync)(outputMint, vault, true, outputMintTokenProgram);
904
+ const { state: inputMintState, tokenProgram: _inputMintTokenProgram } = await (0, state_1.getMintState)(inputMint, this.connection);
905
+ const { state: outputMintState, tokenProgram: _outputMintTokenProgram } = await (0, state_1.getMintState)(outputMint, this.connection);
884
906
  const quote = await this.swapper.getQuote(vault, {
885
907
  payer: this.address(),
886
908
  inputMint: inputMint,
@@ -892,35 +914,6 @@ class ClendVaultsClient {
892
914
  slippageBps: 30,
893
915
  });
894
916
  const swapIxns = await this.swapper.getSwapIxns(quote);
895
- //const swapIx = swapIxns.ixns[0];
896
- ////const swapIx = swapIxns.ixns.find((ix) =>
897
- //// ix.programId.equals(JUPITER_SWAP_PROGRAM_ID),
898
- ////);
899
- ////if (!swapIx) {
900
- //// throw new Error(
901
- //// `Swap ix not found in swapIxns, programIds: ${JSON.stringify(swapIxns.ixns.map((ix) => ix.programId.toString()))}`,
902
- //// );
903
- ////}
904
- //const swapRemainingAccounts: web3.AccountMeta[] = swapIx.keys.map(
905
- // (key) => ({
906
- // pubkey: key.pubkey,
907
- // // If the account is the vault PDA, mark it as NOT a signer for the client transaction.
908
- // isSigner: key.pubkey.equals(vault) ? false : key.isSigner,
909
- // isWritable: key.isWritable,
910
- // }),
911
- //);
912
- //const swapData = swapIx.data;
913
- //const ixns = await this.program.swap(
914
- // vault,
915
- // this.address(),
916
- // inputMint,
917
- // outputMint,
918
- // vaultAssetInReserve,
919
- // vaultAssetOutReserve,
920
- // swapData,
921
- // swapRemainingAccounts,
922
- // JUPITER_SWAP_PROGRAM_ID,
923
- //);
924
917
  const txSig = await this.send(swapIxns.ixns, [], swapIxns.luts);
925
918
  return txSig;
926
919
  }