@exponent-labs/market-math 0.0.9 → 0.1.0

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/build/bisect.js CHANGED
@@ -20,9 +20,11 @@ function bisectSearch2(func, lo, hi, epsilon = 0.0001, maxIterations = 2000) {
20
20
  }
21
21
  // Adjust the search range based on the target
22
22
  if (func(lo) * result < 0) {
23
+ // eslint-disable-next-line no-param-reassign
23
24
  hi = mid;
24
25
  }
25
26
  else {
27
+ // eslint-disable-next-line no-param-reassign
26
28
  lo = mid;
27
29
  }
28
30
  iterations++;
@@ -1 +1 @@
1
- {"version":3,"file":"bisect.js","sourceRoot":"","sources":["../src/bisect.ts"],"names":[],"mappings":";;;AAAA,SAAgB,aAAa,CAC3B,IAA2B,EAC3B,EAAU,EACV,EAAU,EACV,UAAkB,MAAM,EACxB,gBAAwB,IAAI;IAE5B,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA,CAAC,kCAAkC;IAE1D,qDAAqD;IACrD,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,iCAAiC;IACjC,OAAO,UAAU,GAAG,aAAa,EAAE,CAAC;QAClC,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QAExB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAA,CAAC,0CAA0C;QACvD,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,EAAE,GAAG,GAAG,CAAA;QACV,CAAC;aAAM,CAAC;YACN,EAAE,GAAG,GAAG,CAAA;QACV,CAAC;QAED,UAAU,EAAE,CAAA;IACd,CAAC;IAED,uEAAuE;IACvE,OAAO,GAAG,CAAA;AACZ,CAAC;AAxCD,sCAwCC"}
1
+ {"version":3,"file":"bisect.js","sourceRoot":"","sources":["../src/bisect.ts"],"names":[],"mappings":";;;AAAA,SAAgB,aAAa,CAC3B,IAA2B,EAC3B,EAAU,EACV,EAAU,EACV,UAAkB,MAAM,EACxB,gBAAwB,IAAI;IAE5B,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA,CAAC,kCAAkC;IAE1D,qDAAqD;IACrD,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,iCAAiC;IACjC,OAAO,UAAU,GAAG,aAAa,EAAE,CAAC;QAClC,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QAExB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAA,CAAC,0CAA0C;QACvD,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,6CAA6C;YAC7C,EAAE,GAAG,GAAG,CAAA;QACV,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,EAAE,GAAG,GAAG,CAAA;QACV,CAAC;QAED,UAAU,EAAE,CAAA;IACd,CAAC;IAED,uEAAuE;IACvE,OAAO,GAAG,CAAA;AACZ,CAAC;AA1CD,sCA0CC"}
package/build/index.d.ts CHANGED
@@ -81,6 +81,7 @@ export interface MarketMathState {
81
81
  maxNetBalanceChangeNegativePercentage: number;
82
82
  maxNetBalanceChangePositivePercentage: number;
83
83
  windowDurationSeconds: number;
84
+ feeTreasurySyBps: number;
84
85
  }
85
86
  export declare class MarketCalculator {
86
87
  state: MarketMathState;
@@ -89,13 +90,13 @@ export declare class MarketCalculator {
89
90
  get liquiditySy(): number;
90
91
  get liquidityPt(): number;
91
92
  get currentSyExchangeRate(): number;
92
- get liqudityAsset(): number;
93
+ get liquidityAsset(): number;
93
94
  get rateScalarRoot(): number;
94
95
  get secondsRemaining(): number;
95
96
  get proportionPtInAsset(): number;
96
97
  /** Proportion of PT in terms of SY - which is useful for computing liquidity add */
97
98
  get proportionPtInSy(): number;
98
- /** Calculate the current rate scalar, which increases hyperbolically to ininity as time remaining goes to zero */
99
+ /** Calculate the current rate scalar, which increases hyperbolically to infinity as time remaining goes to zero */
99
100
  get rateScalar(): number;
100
101
  /** Get exchange rate of asset to PT */
101
102
  get exchangeRate(): number;
@@ -178,6 +179,15 @@ export declare class MarketCalculator {
178
179
  */
179
180
  verifyNetBalanceLimits(currentTimestamp: number, proposedChange: number): void;
180
181
  get lpPriceInAsset(): number;
182
+ /** Calculate the amount of SY to strip into PT based on the current market state
183
+ * This matches the Rust implementation of calc_strip_amount
184
+ * @param totalAmountSy - The total amount of SY to be processed
185
+ * @returns The amount of SY to strip into PT
186
+ */
187
+ calcStripAmount(totalAmountSy: number): {
188
+ syToStrip: number;
189
+ pyToReceive: number;
190
+ };
181
191
  }
182
192
  export interface CalculatorTradeResult {
183
193
  feeAsset: number;
@@ -221,11 +231,11 @@ export declare function calcBalancedDeposit(c: MarketCalculator, totalSy: number
221
231
  syRemainder: number;
222
232
  };
223
233
  /** Calculate the amount of LP tokens that will be received for a wrapper_provide_liquidity_base deposit
224
- * @param c - The market calculator instance
234
+ * @param marketCalculator - The market calculator instance
225
235
  * @param baseAmount - The amount of base tokens being deposited (will be converted to SY using exchange rate)
226
236
  * @returns The amount of LP tokens that will be received and the PT trade price
227
237
  */
228
- export declare function simulateWrapperProvideLiquidityBase(c: MarketCalculator, baseAmount: number): {
238
+ export declare function simulateWrapperProvideLiquidityBase(marketCalculator: MarketCalculator, baseAmount: number): {
229
239
  lpOut: number;
230
240
  ptTradePrice: number;
231
241
  feeAsset: number;
package/build/index.js CHANGED
@@ -85,7 +85,7 @@ function tradeFee(netTraderAsset, currentFeeRate) {
85
85
  return Math.abs(-netTraderAsset * (1 - currentFeeRate));
86
86
  }
87
87
  // buying PT with asset
88
- // the fee is positve to mean they pay more asset
88
+ // the fee is positive to mean they pay more asset
89
89
  if (netTraderAsset < 0) {
90
90
  return Math.abs((netTraderAsset * (1 - currentFeeRate)) / currentFeeRate);
91
91
  }
@@ -163,7 +163,7 @@ class MarketCalculator {
163
163
  get currentSyExchangeRate() {
164
164
  return this.state.currentSyExchangeRate;
165
165
  }
166
- get liqudityAsset() {
166
+ get liquidityAsset() {
167
167
  return this.liquiditySy * this.currentSyExchangeRate;
168
168
  }
169
169
  get rateScalarRoot() {
@@ -173,13 +173,13 @@ class MarketCalculator {
173
173
  return this.state.secondsRemaining;
174
174
  }
175
175
  get proportionPtInAsset() {
176
- return proportionPt({ pt: this.liquidityPt, asset: this.liqudityAsset });
176
+ return proportionPt({ pt: this.liquidityPt, asset: this.liquidityAsset });
177
177
  }
178
178
  /** Proportion of PT in terms of SY - which is useful for computing liquidity add */
179
179
  get proportionPtInSy() {
180
180
  return this.liquidityPt / (this.liquidityPt + this.liquiditySy);
181
181
  }
182
- /** Calculate the current rate scalar, which increases hyperbolically to ininity as time remaining goes to zero */
182
+ /** Calculate the current rate scalar, which increases hyperbolically to infinity as time remaining goes to zero */
183
183
  get rateScalar() {
184
184
  return currentRateScalar({
185
185
  rateScalarRoot: this.rateScalarRoot,
@@ -252,6 +252,10 @@ class MarketCalculator {
252
252
  const mc = this.clone();
253
253
  // merge the PT & YT into SY
254
254
  const sy = ytIn / this.currentSyExchangeRate;
255
+ // Check if there's enough PT liquidity to borrow for the flash swap
256
+ if (mc.liquidityPt < ytIn * 2) {
257
+ throw new Error("not enough PT liquidity to borrow for the flash swap");
258
+ }
255
259
  // buy back PT with SY
256
260
  const tradeRes = mc.calcTradePt(ytIn, true);
257
261
  // negate the result to get the amount of asset spent
@@ -346,7 +350,7 @@ class MarketCalculator {
346
350
  const currentFeeRate = this.feeRate;
347
351
  const currentRateScalar = this.rateScalar;
348
352
  const res = tradePt({
349
- liquidityAsset: this.liqudityAsset,
353
+ liquidityAsset: this.liquidityAsset,
350
354
  liquidityPt: this.liquidityPt,
351
355
  currentRateScalar,
352
356
  currentRateAnchor,
@@ -355,8 +359,8 @@ class MarketCalculator {
355
359
  isCurrentFlashSwap,
356
360
  });
357
361
  const newLiquidityPt = this.liquidityPt - netTraderPt;
358
- const newLiqudityAsset = this.liqudityAsset - res.netTraderAsset;
359
- const newProportionPt = proportionPt({ pt: newLiquidityPt, asset: newLiqudityAsset });
362
+ const newLiquidityAsset = this.liquidityAsset - res.netTraderAsset;
363
+ const newProportionPt = proportionPt({ pt: newLiquidityPt, asset: newLiquidityAsset });
360
364
  const newExchangeRate = exchangeRate({
361
365
  proportionPt: newProportionPt,
362
366
  rateScalar: currentRateScalar,
@@ -368,7 +372,7 @@ class MarketCalculator {
368
372
  });
369
373
  const newMarketCalculator = new MarketCalculator({
370
374
  liquidityPt: newLiquidityPt,
371
- liquiditySy: newLiqudityAsset / this.currentSyExchangeRate,
375
+ liquiditySy: newLiquidityAsset / this.currentSyExchangeRate,
372
376
  currentSyExchangeRate: this.currentSyExchangeRate,
373
377
  lnFeeRateRoot: this.state.lnFeeRateRoot,
374
378
  secondsRemaining: this.secondsRemaining,
@@ -380,6 +384,7 @@ class MarketCalculator {
380
384
  maxNetBalanceChangeNegativePercentage: this.state.maxNetBalanceChangeNegativePercentage,
381
385
  maxNetBalanceChangePositivePercentage: this.state.maxNetBalanceChangePositivePercentage,
382
386
  windowDurationSeconds: this.state.windowDurationSeconds,
387
+ feeTreasurySyBps: this.state.feeTreasurySyBps,
383
388
  });
384
389
  return { ...res, newMarketCalculator };
385
390
  }
@@ -436,14 +441,14 @@ class MarketCalculator {
436
441
  });
437
442
  }
438
443
  totalAssetValue() {
439
- return this.liqudityAsset + this.liquidityPt / this.exchangeRate;
444
+ return this.liquidityAsset + this.liquidityPt / this.exchangeRate;
440
445
  }
441
446
  findRateAnchor() {
442
447
  return findRateAnchor({
443
448
  currentRateScalar: this.rateScalar,
444
449
  lastLnImpliedRate: this.state.lastLnImpliedRate,
445
450
  secondsRemaining: this.secondsRemaining,
446
- liquidityAsset: this.liqudityAsset,
451
+ liquidityAsset: this.liquidityAsset,
447
452
  liquidityPt: this.liquidityPt,
448
453
  });
449
454
  }
@@ -532,6 +537,22 @@ class MarketCalculator {
532
537
  const liquidityPoolTvl = this.liquiditySy * this.currentSyExchangeRate + this.liquidityPt / this.exchangeRate;
533
538
  return Number(this.state.lpTokenSupply) === 0 ? 0 : liquidityPoolTvl / Number(this.state.lpTokenSupply);
534
539
  }
540
+ /** Calculate the amount of SY to strip into PT based on the current market state
541
+ * This matches the Rust implementation of calc_strip_amount
542
+ * @param totalAmountSy - The total amount of SY to be processed
543
+ * @returns The amount of SY to strip into PT
544
+ */
545
+ calcStripAmount(totalAmountSy) {
546
+ // Convert inputs to numbers for calculation
547
+ const amtSy = totalAmountSy;
548
+ const curSyRate = this.currentSyExchangeRate;
549
+ const marketPtLiq = this.liquidityPt;
550
+ const marketSyLiq = this.liquiditySy;
551
+ // Calculate strip amount using the same formula as Rust implementation
552
+ const toStrip = (amtSy * marketPtLiq) / (curSyRate * marketSyLiq + marketPtLiq);
553
+ // Round up to match Rust's ceil_u64 behavior
554
+ return { syToStrip: toStrip, pyToReceive: toStrip * curSyRate };
555
+ }
535
556
  }
536
557
  exports.MarketCalculator = MarketCalculator;
537
558
  function calcExactPtForNetAsset(c, netTraderAsset) {
@@ -598,7 +619,7 @@ function estimateYtOutForExactAssetIn(c, assetIn) {
598
619
  const syIn = assetIn / c.currentSyExchangeRate;
599
620
  const targetSy = mid / c.currentSyExchangeRate;
600
621
  const syToBorrow = targetSy - syIn;
601
- if (syToBorrow > c.liquiditySy) {
622
+ if (syToBorrow + c.calcTradePt(-mid, false).netTraderAsset * c.currentSyExchangeRate > c.liquiditySy) {
602
623
  console.log("Not enough liquidity - required SY exceeds available SY");
603
624
  return null;
604
625
  }
@@ -680,7 +701,7 @@ function calcMaxYtOutForPriceImpact(c, maxPriceImpactPercentage) {
680
701
  const targetProportionPt = 1 / (1 + Math.exp(-rateScalar * (minPrice - rateAnchor)));
681
702
  // Given the current asset amount and target proportion, we can calculate how much PT we can add
682
703
  // before hitting our price impact limit
683
- const currentAsset = c.liqudityAsset;
704
+ const currentAsset = c.liquidityAsset;
684
705
  const currentPt = c.liquidityPt;
685
706
  const currentProportionPt = currentPt / (currentPt + currentAsset);
686
707
  // The maximum amount of PT we can sell is limited by:
@@ -720,7 +741,7 @@ function calcBalancedDeposit(c, totalSy) {
720
741
  syRemainder: totalSy - Math.floor(half),
721
742
  };
722
743
  }
723
- /*
744
+ /**
724
745
  We now account for the fact that executing a PT trade changes the pool state.
725
746
  Instead of using the original pool ratio (c.liquidityPt/c.liquiditySy), we simulate the trade
726
747
  for a candidate pt amount, obtain the new market state via c.calcTradePt(pt, true), and then
@@ -734,8 +755,11 @@ function calcBalancedDeposit(c, totalSy) {
734
755
  const syDeposit = totalSy - costInSY;
735
756
  if (syDeposit <= 0)
736
757
  return Infinity;
758
+ // Calculate treasury fee using the same logic as Rust
759
+ // fee_treasury_sy_bps is in basis points (10000 = 100%)
760
+ const feeInSY = (tradeResult.feeAsset * c.state.feeTreasurySyBps) / 10000 / c.currentSyExchangeRate;
737
761
  const newLiquidityPt = tradeResult.newMarketCalculator.liquidityPt;
738
- const newLiquiditySy = tradeResult.newMarketCalculator.liquiditySy;
762
+ const newLiquiditySy = tradeResult.newMarketCalculator.liquiditySy - feeInSY;
739
763
  const newRatio = newLiquidityPt / newLiquiditySy;
740
764
  return pt / syDeposit - newRatio;
741
765
  }
@@ -767,24 +791,24 @@ function calcBalancedDeposit(c, totalSy) {
767
791
  }
768
792
  exports.calcBalancedDeposit = calcBalancedDeposit;
769
793
  /** Calculate the amount of LP tokens that will be received for a wrapper_provide_liquidity_base deposit
770
- * @param c - The market calculator instance
794
+ * @param marketCalculator - The market calculator instance
771
795
  * @param baseAmount - The amount of base tokens being deposited (will be converted to SY using exchange rate)
772
796
  * @returns The amount of LP tokens that will be received and the PT trade price
773
797
  */
774
- function simulateWrapperProvideLiquidityBase(c, baseAmount) {
798
+ function simulateWrapperProvideLiquidityBase(marketCalculator, baseAmount) {
775
799
  try {
776
800
  // Convert base amount to SY using the exchange rate
777
- const syAmount = baseAmount / c.currentSyExchangeRate;
801
+ const syAmount = baseAmount / marketCalculator.currentSyExchangeRate;
778
802
  // Calculate balanced deposit amounts for PT and SY
779
- const balancedAmounts = calcBalancedDeposit(c, syAmount);
803
+ const balancedAmounts = calcBalancedDeposit(marketCalculator, syAmount);
780
804
  // If no PT is being bought, return early with just the SY deposit
781
805
  if (balancedAmounts.ptToBuy === 0) {
782
806
  const lpResult = lpOutForTokensIn({
783
807
  syIntent: syAmount,
784
808
  ptIntent: 0,
785
- lpSupply: Number(c.state.lpTokenSupply),
786
- syLiquidity: c.liquiditySy,
787
- ptLiquidity: c.liquidityPt,
809
+ lpSupply: Number(marketCalculator.state.lpTokenSupply),
810
+ syLiquidity: marketCalculator.liquiditySy,
811
+ ptLiquidity: marketCalculator.liquidityPt,
788
812
  });
789
813
  return {
790
814
  lpOut: lpResult.lpOut,
@@ -798,8 +822,8 @@ function simulateWrapperProvideLiquidityBase(c, baseAmount) {
798
822
  };
799
823
  }
800
824
  // Execute the PT trade using balancedAmounts.ptToBuy with flash swap enabled
801
- const ptTradeResult = c.calcTradePt(balancedAmounts.ptToBuy, true);
802
- console.log("new lp price after trade", ptTradeResult.newMarketCalculator.lpPriceInAsset);
825
+ const ptTradeResult = marketCalculator.calcTradePt(balancedAmounts.ptToBuy, true);
826
+ // console.log("new lp price after trade", ptTradeResult.newMarketCalculator.lpPriceInAsset)
803
827
  // Verify there's enough liquidity
804
828
  if (ptTradeResult.netTraderAsset === 0 || !ptTradeResult.newMarketCalculator) {
805
829
  return null;
@@ -812,7 +836,7 @@ function simulateWrapperProvideLiquidityBase(c, baseAmount) {
812
836
  const lpResult = lpOutForTokensIn({
813
837
  syIntent: balancedAmounts.syRemainder,
814
838
  ptIntent: balancedAmounts.ptToBuy,
815
- lpSupply: Number(c.state.lpTokenSupply),
839
+ lpSupply: Number(marketCalculator.state.lpTokenSupply),
816
840
  syLiquidity: newMarketState.liquiditySy,
817
841
  ptLiquidity: newMarketState.liquidityPt,
818
842
  });
@@ -828,7 +852,7 @@ function simulateWrapperProvideLiquidityBase(c, baseAmount) {
828
852
  };
829
853
  return result;
830
854
  }
831
- catch (error) {
855
+ catch {
832
856
  return null;
833
857
  }
834
858
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAExC,MAAM,YAAY,GAAG,QAAQ,CAAA;AAE7B,SAAS,uBAAuB,CAAC,gBAAwB;IACvD,OAAO,gBAAgB,GAAG,YAAY,CAAA;AACxC,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAiC;IAChE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,SAAgB,KAAK,CAAC,CAAS;IAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IACD,oCAAoC;IACpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAC9B,CAAC;AATD,sBASC;AAED,8DAA8D;AAC9D,SAAgB,kBAAkB,CAAC,YAAoB,EAAE,OAAe,EAAE,SAAS,GAAG,GAAG;IACvF,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IAED,sDAAsD;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAA;IAEnD,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,GAAG,YAAY,CAAC,CAAA;IAC1C,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;IAEpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACvB,CAAC;AAZD,gDAYC;AAED,qCAAqC;AACrC,SAAgB,YAAY,CAAC,EAC3B,YAAY,EACZ,UAAU,EACV,UAAU,GAKX;IACC,wCAAwC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,CAAA;IAEnC,8DAA8D;IAC9D,OAAO,OAAO,GAAG,UAAU,GAAG,UAAU,CAAA;AAC1C,CAAC;AAdD,oCAcC;AAED,SAAgB,OAAO,CAAC,EACtB,aAAa,EACb,gBAAgB,GAIjB;IACC,MAAM,SAAS,GAAG,aAAa,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,CAAA;IAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAC5B,CAAC;AATD,0BASC;AAED,SAAgB,iBAAiB,CAAC,EAChC,cAAc,EACd,gBAAgB,GAIjB;IACC,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,CAAA;IACrE,OAAO,cAAc,GAAG,mBAAmB,CAAA;AAC7C,CAAC;AAbD,8CAaC;AAED,mDAAmD;AACnD,SAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,gBAAgB,GAIjB;IACC,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,CAAA;AAC3E,CAAC;AARD,oDAQC;AAED,qDAAqD;AACrD,SAAgB,6BAA6B,CAAC,EAC5C,aAAa,EACb,gBAAgB,GAIjB;IACC,MAAM,IAAI,GAAG,aAAa,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,CAAA;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC;AATD,sEASC;AAED,2DAA2D;AAC3D,SAAgB,cAAc,CAAC,EAC7B,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,WAAW,GAOZ;IACC,MAAM,eAAe,GAAG,6BAA6B,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAE7G,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;IAEzE,6CAA6C;IAC7C,qCAAqC;IACrC,qCAAqC;IAErC,OAAO,eAAe,GAAG,CAAC,GAAG,iBAAiB,CAAA;AAChD,CAAC;AAtBD,wCAsBC;AAED,6BAA6B;AAC7B,SAAgB,QAAQ,CAAC,cAAsB,EAAE,cAAsB;IACrE,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpD,CAAC;IACD,0BAA0B;IAC1B,6FAA6F;IAC7F,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,uBAAuB;IACvB,iDAAiD;IACjD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,CAAC,CAAA;AACV,CAAC;AAjBD,4BAiBC;AAED,qCAAqC;AACrC,SAAgB,OAAO,CAAC,EACtB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,kBAAkB,GAAG,KAAK,GAS3B;IACC,uDAAuD;IACvD,MAAM,KAAK,GAAG,WAAW,GAAG,WAAW,CAAA;IAEvC,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,WAAW,GAAG,cAAc,CAAC,CAAA;IAC3D,MAAM,IAAI,GAAG,YAAY,CAAC;QACxB,YAAY;QACZ,UAAU,EAAE,iBAAiB;QAC7B,UAAU,EAAE,iBAAiB;KAC9B,CAAC,CAAA;IAEF,qCAAqC;IACrC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACvD,CAAC;IAED,oFAAoF;IACpF,MAAM,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAEtD,yFAAyF;IACzF,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAA;IACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;IAElD,uDAAuD;IACvD,uDAAuD;IACvD,qFAAqF;IAErF,wDAAwD;IACxD,2DAA2D;IAC3D,MAAM,cAAc,GAAG,oBAAoB,GAAG,QAAQ,CAAA;IAEtD,OAAO;QACL,QAAQ;QACR,cAAc;QACd,WAAW;KACZ,CAAA;AACH,CAAC;AArDD,0BAqDC;AAQD,SAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,WAAW,GAcZ;IACC,MAAM,QAAQ,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,WAAW,CAAA;IACpD,MAAM,QAAQ,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,WAAW,CAAA;IAEpD,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAA;QAChD,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;SAChB,CAAA;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAA;QAChD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,KAAK,EAAE,QAAQ;SAChB,CAAA;IACH,CAAC;AACH,CAAC;AAtCD,4CAsCC;AAwBD,MAAa,gBAAgB;IACR;IAAnB,YAAmB,KAAsB;QAAtB,UAAK,GAAL,KAAK,CAAiB;IAAG,CAAC;IAE7C,KAAK;QACH,OAAO,IAAI,gBAAgB,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAA;IAC/B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAA;IAC/B,CAAC;IAED,IAAI,qBAAqB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAA;IACzC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAA;IACtD,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAA;IAClC,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAA;IACpC,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,oFAAoF;IACpF,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAA;IACjE,CAAC;IAED,kHAAkH;IAClH,IAAI,UAAU;QACZ,OAAO,iBAAiB,CAAC;YACvB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAA;IACJ,CAAC;IAED,uCAAuC;IACvC,IAAI,YAAY;QACd,OAAO,YAAY,CAAC;YAClB,YAAY,EAAE,IAAI,CAAC,mBAAmB;YACtC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE;SAClC,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO;QACT,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,CAAA;QACV,CAAC;QAED,OAAO,OAAO,CAAC;YACb,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,WAAmB;QAC7B,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,CAAA;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QACrD,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAA;QAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAA;QAElC,sCAAsC;QACtC,oEAAoE;QAEpE,qCAAqC;QACrC,6DAA6D;QAE7D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAE1C,iDAAiD;QACjD,2CAA2C;QAC3C,MAAM,aAAa,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;QAE5D,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,CAAA;QAEhE,oBAAoB;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAA;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,mBAAmB,CAAC,CAAA;QAE5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC,CAAA;IACvD,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,IAAY;QACpB,IAAI,CAAC;YACH,uEAAuE;YACvE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YAEvB,4BAA4B;YAC5B,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAA;YAE5C,sBAAsB;YACtB,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAE3C,qDAAqD;YACrD,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAA;YAE3C,wCAAwC;YACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAA;YAE1C,4CAA4C;YAC5C,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAA;YAEvD,+DAA+D;YAC/D,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAA;YACb,CAAC;YAED,6BAA6B;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAA;YAEvB,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAEnF,sCAAsC;YACtC,iDAAiD;YAEjD,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAA;YAE5D,OAAO;gBACL,QAAQ;gBACR,UAAU;gBACV,mBAAmB,EAAE,KAAK;aAC3B,CAAA;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;YACjD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,2BAA2B,CAAC,QAAgB;QAC1C,8DAA8D;QAC9D,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAEhC,kDAAkD;YAClD,6CAA6C;YAC7C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,OAAO,QAAQ,CAAA;YACjB,CAAC;YAED,OAAO,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAChC,CAAC,CAAA;QAED,uBAAuB;QACvB,gFAAgF;QAChF,MAAM,EAAE,GAAG,CAAC,CAAA;QAEZ,sEAAsE;QACtE,gDAAgD;QAChD,wCAAwC;QACxC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,SAAS,CAAA;QAE7C,OAAO,IAAA,sBAAa,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IAC7C,CAAC;IAED,yDAAyD;IACzD,SAAS,CAAC,KAAa;QACrB,wCAAwC;QACxC,MAAM,EAAE,GAAG,CAAC,OAAe,EAAE,EAAE;YAC7B,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAA;YAEjD,6CAA6C;YAC7C,sCAAsC;YACtC,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAA;YAEnD,+BAA+B;YAC/B,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAA;YAElC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;gBACpB,yFAAyF;gBACzF,2EAA2E;gBAC3E,OAAO,OAAO,CAAA;YAChB,CAAC;YAED,4BAA4B;YAC5B,iCAAiC;YACjC,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YAExC,wCAAwC;YACxC,IAAI,mBAAmB,CAAC,WAAW,GAAG,UAAU,EAAE,CAAC;gBACjD,oFAAoF;gBACpF,8EAA8E;gBAC9E,OAAO,CAAC,OAAO,CAAA;YACjB,CAAC;YAED,+BAA+B;YAC/B,6DAA6D;YAC7D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAE9D,oEAAoE;YACpE,+BAA+B;YAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAA;YAE7C,MAAM,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAA;YAE7D,OAAO,UAAU,GAAG,UAAU,CAAA;QAChC,CAAC,CAAA;QAED,uBAAuB;QACvB,uEAAuE;QACvE,MAAM,OAAO,GAAG,IAAA,sBAAa,EAAC,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAA;QAEtD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,iDAAiD;IACjD,WAAW,CAAC,WAAmB,EAAE,qBAA8B,KAAK;QAClE,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAA;QACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAA;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC;YAClB,cAAc,EAAE,IAAI,CAAC,aAAa;YAClC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB;YACjB,iBAAiB;YACjB,cAAc;YACd,WAAW;YACX,kBAAkB;SACnB,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,cAAc,CAAA;QAChE,MAAM,eAAe,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAA;QACrF,MAAM,eAAe,GAAG,YAAY,CAAC;YACnC,YAAY,EAAE,eAAe;YAC7B,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,iBAAiB;SAC9B,CAAC,CAAA;QACF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;YAC5C,YAAY,EAAE,eAAe;YAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAA;QAEF,MAAM,mBAAmB,GAAG,IAAI,gBAAgB,CAAC;YAC/C,WAAW,EAAE,cAAc;YAC3B,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC,qBAAqB;YAC1D,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;YACvC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;YACzC,iBAAiB,EAAE,gBAAgB;YACnC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB;YACrD,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,qBAAqB;YACvD,qCAAqC,EAAE,IAAI,CAAC,KAAK,CAAC,qCAAqC;YACvF,qCAAqC,EAAE,IAAI,CAAC,KAAK,CAAC,qCAAqC;YACvF,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,qBAAqB;SACxD,CAAC,CAAA;QAEF,OAAO,EAAE,GAAG,GAAG,EAAE,mBAAmB,EAAE,CAAA;IACxC,CAAC;IAED,6BAA6B,CAAC,cAAsB;QAClD,OAAO,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAA;IACpD,CAAC;IAED,yBAAyB,CAAC,EAAE,QAAQ,EAAwB;QAI1D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAA;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAA;QACvC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAEtD,mDAAmD;QACnD,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;QAC/D,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAA;QAE/D,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAA;QAEnD,OAAO;YACL,QAAQ;YACR,KAAK;SACN,CAAA;IACH,CAAC;IAED,6BAA6B,CAAC,EAAE,QAAQ,EAAwB;QAG9D,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAExE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,cAAc,CAAA;QAEjE,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAA;QAE3C,OAAO;YACL,QAAQ,EAAE,aAAa;SACxB,CAAA;IACH,CAAC;IAED,gEAAgE;IAChE,sBAAsB,CAAC,cAAsB;QAC3C,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,CAAA;QACV,CAAC;QACD,OAAO,sBAAsB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IACrD,CAAC;IAED,4BAA4B,CAAC,OAAe;QAC1C,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;QACpC,CAAC;QACD,MAAM,KAAK,GAAG,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAEzD,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAA;QACjD,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAA;QACnD,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAA;QAClC,MAAM,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAA;QAEjE,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1F,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;IAC9B,CAAC;IAED,6BAA6B,CAAC,aAAqB;QACjD,OAAO,6BAA6B,CAAC;YACnC,aAAa;YACb,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAA;IACJ,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAA;IAClE,CAAC;IAED,cAAc;QACZ,OAAO,cAAc,CAAC;YACpB,iBAAiB,EAAE,IAAI,CAAC,UAAU;YAClC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;YAC/C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,IAAI,CAAC,aAAa;YAClC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACH,wBAAwB,CAAC,OAAe,EAAE,gBAAwB;QAChE,MAAM,EACJ,oBAAoB,EACpB,qBAAqB,EACrB,qCAAqC,EACrC,qCAAqC,EACrC,qBAAqB,GACtB,GAAG,IAAI,CAAC,KAAK,CAAA;QAEd,sDAAsD;QACtD,IAAI,gBAAgB,IAAI,oBAAoB,GAAG,qBAAqB,EAAE,CAAC;YACrE,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAA;QAC1C,MAAM,aAAa,GAAG,iBAAiB,GAAG,OAAO,CAAA;QACjD,MAAM,gBAAgB,GAAG,aAAa,GAAG,qBAAqB,CAAA;QAE9D,yCAAyC;QACzC,MAAM,gBAAgB,GAAG,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,GAAG,KAAK,CAAA;QAE3E,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,qCAAqC,CAAA;QAC5E,CAAC;aAAM,CAAC;YACN,OAAO,gBAAgB,IAAI,qCAAqC,CAAA;QAClE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,gBAAwB;QAC7C,IAAI,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC;YAC3F,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,gBAAgB,CAAA;YAClD,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAA;QACrD,CAAC;IACH,CAAC;IAED,4BAA4B,CAAC,gBAAwB;QACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAA;QAC5F,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,CAAA;QAEvE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAA;QAErD,2CAA2C;QAC3C,MAAM,WAAW,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,GAAG,KAAK,CAAA;QAE7F,8CAA8C;QAC9C,MAAM,YAAY,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,GAAG,KAAK,CAAA;QAE9F,OAAO;YACL,oBAAoB,EAAE,aAAa;YACnC,aAAa,EAAE,WAAW;YAC1B,cAAc,EAAE,YAAY;YAC5B,eAAe;SAChB,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,gBAAwB,EAAE,cAAsB;QACrE,uCAAuC;QACvC,IAAI,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC;YAC1F,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,gBAAgB,CAAA;YAClD,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QACrE,CAAC;QAED,oEAAoE;QACpE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,cAAc,CAAA;QAEpE,8DAA8D;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAA;QAErD,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;YAC/B,yBAAyB;YACzB,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,CAAA;YACjD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,YAAY,CAAC,GAAG,KAAK,CAAC,CAAA;YAE/E,IAAI,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC;gBAC1E,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;YAC9D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAA;YACjD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,YAAY,CAAC,GAAG,KAAK,CAAC,CAAA;YAE/E,IAAI,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC;gBAC1E,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,cAAc;QAChB,oCAAoC;QACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAA;QAE7G,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IACzG,CAAC;CACF;AAneD,4CAmeC;AASD,SAAgB,sBAAsB,CAAC,CAAmB,EAAE,cAAsB;IAChF,MAAM,OAAO,GAAG,cAAc,GAAG,CAAC,CAAA;IAClC,IAAI,OAAO,EAAE,CAAC;QACZ,gDAAgD;QAChD,iDAAiD;QACjD,OAAO,4BAA4B,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAA;IACzD,CAAC;SAAM,CAAC;QACN,OAAO,4BAA4B,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;IACxD,CAAC;AACH,CAAC;AATD,wDASC;AAED,SAAS,4BAA4B,CAAC,CAAmB,EAAE,OAAe;IACxE,MAAM,EAAE,GAAG,CAAC,EAAU,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YACpC,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,cAAc,CAAA;YACtC,OAAO,UAAU,GAAG,OAAO,CAAA;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,4FAA4F;YAC5F,uCAAuC;YACvC,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC,CAAA;IACD,MAAM,EAAE,GAAG,CAAC,CAAA;IACZ,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,SAAS,CAAA;IACpC,OAAO,IAAA,sBAAa,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,4BAA4B,CAAC,CAAmB,EAAE,QAAgB;IACzE,MAAM,EAAE,GAAG,CAAC,EAAU,EAAE,EAAE;QACxB,oDAAoD;QACpD,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAErC,0EAA0E;QAC1E,wCAAwC;QACxC,IAAI,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,OAAO,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAA;IACtC,CAAC,CAAA;IACD,MAAM,EAAE,GAAG,CAAC,CAAA;IACZ,yDAAyD;IACzD,mFAAmF;IACnF,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAA;IACzC,MAAM,EAAE,GAAG,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAA;IACxC,OAAO,IAAA,sBAAa,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;AAC7C,CAAC;AAED,SAAgB,4BAA4B,CAAC,CAAmB,EAAE,OAAe;IAC/E,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IACjE,IAAI,EAAE,GAAG,CAAC,CAAA;IACV,IAAI,EAAE,GAAG,OAAO,GAAG,qBAAqB,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IAEhE,6CAA6C;IAC7C,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,MAAM,cAAc,GAAG,GAAG,CAAA;IAC1B,MAAM,OAAO,GAAG,SAAS,CAAA;IAEzB,IAAI,iBAAiB,GAAG,IAAI,CAAA;IAC5B,IAAI,QAAQ,GAAG,QAAQ,CAAA;IAEvB,OAAO,UAAU,GAAG,cAAc,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QACzB,MAAM,eAAe,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAExC,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,qBAAqB,CAAA;QAC9C,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,qBAAqB,CAAA;QAC9C,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAA;QAElC,IAAI,UAAU,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;YACtE,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE;YACnC,EAAE;YACF,EAAE;YACF,GAAG;YACH,eAAe;YACf,aAAa,EAAE,OAAO;YACtB,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM;SAC3D,CAAC,CAAA;QAEF,2BAA2B;QAC3B,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,CAAA;YACvD,IAAI,WAAW,GAAG,QAAQ,EAAE,CAAC;gBAC3B,QAAQ,GAAG,WAAW,CAAA;gBACtB,iBAAiB,GAAG,GAAG,CAAA;YACzB,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,IAAI,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAA;YACxE,OAAO,GAAG,CAAA;QACZ,CAAC;QAED,6DAA6D;QAC7D,mCAAmC;QACnC,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,GAAG,OAAO,EAAE,CAAC;YAC1D,EAAE,GAAG,GAAG,CAAA;QACV,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,EAAE,GAAG,GAAG,CAAA;QACV,CAAC;QAED,UAAU,EAAE,CAAA;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CACT,0BAA0B,EAC1B,cAAc,EACd,2CAA2C,EAC3C,iBAAiB,CAClB,CAAA;IACD,OAAO,iBAAiB,CAAA;AAC1B,CAAC;AAtED,oEAsEC;AAED,SAAgB,4BAA4B,CAAC,CAAmB,EAAE,OAAe;IAC/E,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,qBAAqB,CAAA;IAClD,MAAM,OAAO,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAA;IACtG,OAAO,OAAO,CAAA;AAChB,CAAC;AAJD,oEAIC;AAED,SAAgB,qBAAqB,CAAC,CAAmB,EAAE,QAAgB;IACzE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IACxE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IACxE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AACzB,CAAC;AAJD,sDAIC;AAED,SAAgB,2BAA2B,CAAC,CAAmB,EAAE,QAAgB;IAC/E,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,qBAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC3D,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,cAAc,CAAA;IAC9D,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,qBAAqB,CAAA;IAClD,MAAM,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;IACxC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;AACxC,CAAC;AAND,kEAMC;AAED;;;GAGG;AACH,SAAgB,0BAA0B,CAAC,CAAmB,EAAE,wBAAgC;IAC9F,gCAAgC;IAChC,MAAM,cAAc,GAAG,wBAAwB,GAAG,GAAG,CAAA;IAErD,6CAA6C;IAC7C,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAA;IAEjC,sEAAsE;IACtE,oEAAoE;IACpE,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAA;IAElD,2BAA2B;IAC3B,+DAA+D;IAC/D,iCAAiC;IACjC,yEAAyE;IAEzE,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAA;IAC/B,MAAM,UAAU,GAAG,CAAC,CAAC,cAAc,EAAE,CAAA;IAErC,oEAAoE;IACpE,MAAM,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;IAEpF,gGAAgG;IAChG,wCAAwC;IACxC,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,CAAA;IACpC,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAA;IAC/B,MAAM,mBAAmB,GAAG,SAAS,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC,CAAA;IAElE,sDAAsD;IACtD,uDAAuD;IACvD,4DAA4D;IAE5D,4DAA4D;IAC5D,MAAM,oBAAoB,GAAG,kBAAkB,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC,GAAG,SAAS,CAAA;IAExF,2DAA2D;IAC3D,kEAAkE;IAClE,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,qBAAqB,CAAA;IAC9D,MAAM,kBAAkB,GAAG,cAAc,GAAG,QAAQ,CAAA,CAAC,0CAA0C;IAE/F,kCAAkC;IAClC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,kBAAkB,CAAC,CAAA;IAEhF,OAAO,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAA;AAC7C,CAAC;AA5CD,gEA4CC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,mBAAmB,CAAC,CAAmB,EAAE,OAAe;IACtE,uEAAuE;IACvE,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAA;QACxB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SACxC,CAAA;IACH,CAAC;IAED;;;;;;;MAOE;IACF,SAAS,CAAC,CAAC,EAAU;QACnB,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QAC3C,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,cAAc,GAAG,CAAC,CAAC,qBAAqB,CAAA;QACtE,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;QACpC,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAA;QACnC,MAAM,cAAc,GAAG,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAA;QAClE,MAAM,cAAc,GAAG,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAA;QAClE,MAAM,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAA;QAChD,OAAO,EAAE,GAAG,SAAS,GAAG,QAAQ,CAAA;IAClC,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,IAAI,IAAI,GAAG,OAAO,CAAA,CAAC,kCAAkC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAA;IAChB,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACnB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACzB,MAAK;QACP,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,GAAG,GAAG,CAAA;QACZ,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAA;IACvB,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,GAAG,CAAC,CAAC,qBAAqB,CAAA;IACzE,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;IAEpC,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QAChC,WAAW,EAAE,SAAS;KACvB,CAAA;AACH,CAAC;AAvDD,kDAuDC;AAED;;;;GAIG;AACH,SAAgB,mCAAmC,CACjD,CAAmB,EACnB,UAAkB;IAWlB,IAAI,CAAC;QACH,oDAAoD;QACpD,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC,qBAAqB,CAAA;QAErD,mDAAmD;QACnD,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAExD,kEAAkE;QAClE,IAAI,eAAe,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,gBAAgB,CAAC;gBAChC,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;gBACvC,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAA;YAEF,OAAO;gBACL,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,YAAY,EAAE,CAAC;gBACf,QAAQ,EAAE,CAAC;gBACX,iBAAiB,EAAE,CAAC;gBACpB,cAAc,EAAE,CAAC;gBACjB,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,QAAQ;gBACjB,WAAW,EAAE,CAAC;aACf,CAAA;QACH,CAAC;QAED,6EAA6E;QAC7E,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAElE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,aAAa,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAA;QAEzF,kCAAkC;QAClC,IAAI,aAAa,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;YAC7E,OAAO,IAAI,CAAA;QACb,CAAC;QAED,gEAAgE;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QAErF,8CAA8C;QAC9C,MAAM,cAAc,GAAG,aAAa,CAAC,mBAAmB,CAAA;QAExD,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,gBAAgB,CAAC;YAChC,QAAQ,EAAE,eAAe,CAAC,WAAW;YACrC,QAAQ,EAAE,eAAe,CAAC,OAAO;YACjC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;YACvC,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,WAAW,EAAE,cAAc,CAAC,WAAW;SACxC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,YAAY;YACZ,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,iBAAiB,EAAE,CAAC,aAAa,CAAC,cAAc;YAChD,cAAc,EAAE,UAAU,GAAG,aAAa,CAAC,cAAc;YACzD,OAAO,EAAE,eAAe,CAAC,OAAO;YAChC,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,eAAe,CAAC,WAAW;SACzC,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAlFD,kFAkFC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exponent-labs/market-math",
3
- "version": "0.0.9",
3
+ "version": "0.1.0",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "license": "AGPL-3.0",
@@ -1,3 +1,5 @@
1
+ import { describe, expect, test } from "@jest/globals"
2
+
1
3
  import { bisectSearch2 } from "./bisect"
2
4
 
3
5
  describe("bisect", () => {
package/src/bisect.ts CHANGED
@@ -28,8 +28,10 @@ export function bisectSearch2(
28
28
 
29
29
  // Adjust the search range based on the target
30
30
  if (func(lo) * result < 0) {
31
+ // eslint-disable-next-line no-param-reassign
31
32
  hi = mid
32
33
  } else {
34
+ // eslint-disable-next-line no-param-reassign
33
35
  lo = mid
34
36
  }
35
37
 
package/src/index.ts CHANGED
@@ -139,7 +139,7 @@ export function tradeFee(netTraderAsset: number, currentFeeRate: number): number
139
139
  }
140
140
 
141
141
  // buying PT with asset
142
- // the fee is positve to mean they pay more asset
142
+ // the fee is positive to mean they pay more asset
143
143
  if (netTraderAsset < 0) {
144
144
  return Math.abs((netTraderAsset * (1 - currentFeeRate)) / currentFeeRate)
145
145
  }
@@ -269,6 +269,7 @@ export interface MarketMathState {
269
269
  maxNetBalanceChangeNegativePercentage: number
270
270
  maxNetBalanceChangePositivePercentage: number
271
271
  windowDurationSeconds: number
272
+ feeTreasurySyBps: number
272
273
  }
273
274
 
274
275
  export class MarketCalculator {
@@ -290,7 +291,7 @@ export class MarketCalculator {
290
291
  return this.state.currentSyExchangeRate
291
292
  }
292
293
 
293
- get liqudityAsset(): number {
294
+ get liquidityAsset(): number {
294
295
  return this.liquiditySy * this.currentSyExchangeRate
295
296
  }
296
297
 
@@ -303,7 +304,7 @@ export class MarketCalculator {
303
304
  }
304
305
 
305
306
  get proportionPtInAsset(): number {
306
- return proportionPt({ pt: this.liquidityPt, asset: this.liqudityAsset })
307
+ return proportionPt({ pt: this.liquidityPt, asset: this.liquidityAsset })
307
308
  }
308
309
 
309
310
  /** Proportion of PT in terms of SY - which is useful for computing liquidity add */
@@ -311,7 +312,7 @@ export class MarketCalculator {
311
312
  return this.liquidityPt / (this.liquidityPt + this.liquiditySy)
312
313
  }
313
314
 
314
- /** Calculate the current rate scalar, which increases hyperbolically to ininity as time remaining goes to zero */
315
+ /** Calculate the current rate scalar, which increases hyperbolically to infinity as time remaining goes to zero */
315
316
  get rateScalar(): number {
316
317
  return currentRateScalar({
317
318
  rateScalarRoot: this.rateScalarRoot,
@@ -399,6 +400,12 @@ export class MarketCalculator {
399
400
  // merge the PT & YT into SY
400
401
  const sy = ytIn / this.currentSyExchangeRate
401
402
 
403
+ // Check if there's enough PT liquidity to borrow for the flash swap
404
+
405
+ if (mc.liquidityPt < ytIn * 2) {
406
+ throw new Error("not enough PT liquidity to borrow for the flash swap")
407
+ }
408
+
402
409
  // buy back PT with SY
403
410
  const tradeRes = mc.calcTradePt(ytIn, true)
404
411
 
@@ -520,7 +527,7 @@ export class MarketCalculator {
520
527
  const currentFeeRate = this.feeRate
521
528
  const currentRateScalar = this.rateScalar
522
529
  const res = tradePt({
523
- liquidityAsset: this.liqudityAsset,
530
+ liquidityAsset: this.liquidityAsset,
524
531
  liquidityPt: this.liquidityPt,
525
532
  currentRateScalar,
526
533
  currentRateAnchor,
@@ -530,8 +537,8 @@ export class MarketCalculator {
530
537
  })
531
538
 
532
539
  const newLiquidityPt = this.liquidityPt - netTraderPt
533
- const newLiqudityAsset = this.liqudityAsset - res.netTraderAsset
534
- const newProportionPt = proportionPt({ pt: newLiquidityPt, asset: newLiqudityAsset })
540
+ const newLiquidityAsset = this.liquidityAsset - res.netTraderAsset
541
+ const newProportionPt = proportionPt({ pt: newLiquidityPt, asset: newLiquidityAsset })
535
542
  const newExchangeRate = exchangeRate({
536
543
  proportionPt: newProportionPt,
537
544
  rateScalar: currentRateScalar,
@@ -544,7 +551,7 @@ export class MarketCalculator {
544
551
 
545
552
  const newMarketCalculator = new MarketCalculator({
546
553
  liquidityPt: newLiquidityPt,
547
- liquiditySy: newLiqudityAsset / this.currentSyExchangeRate,
554
+ liquiditySy: newLiquidityAsset / this.currentSyExchangeRate,
548
555
  currentSyExchangeRate: this.currentSyExchangeRate,
549
556
  lnFeeRateRoot: this.state.lnFeeRateRoot,
550
557
  secondsRemaining: this.secondsRemaining,
@@ -556,6 +563,7 @@ export class MarketCalculator {
556
563
  maxNetBalanceChangeNegativePercentage: this.state.maxNetBalanceChangeNegativePercentage,
557
564
  maxNetBalanceChangePositivePercentage: this.state.maxNetBalanceChangePositivePercentage,
558
565
  windowDurationSeconds: this.state.windowDurationSeconds,
566
+ feeTreasurySyBps: this.state.feeTreasurySyBps,
559
567
  })
560
568
 
561
569
  return { ...res, newMarketCalculator }
@@ -634,7 +642,7 @@ export class MarketCalculator {
634
642
  }
635
643
 
636
644
  totalAssetValue() {
637
- return this.liqudityAsset + this.liquidityPt / this.exchangeRate
645
+ return this.liquidityAsset + this.liquidityPt / this.exchangeRate
638
646
  }
639
647
 
640
648
  findRateAnchor() {
@@ -642,7 +650,7 @@ export class MarketCalculator {
642
650
  currentRateScalar: this.rateScalar,
643
651
  lastLnImpliedRate: this.state.lastLnImpliedRate,
644
652
  secondsRemaining: this.secondsRemaining,
645
- liquidityAsset: this.liqudityAsset,
653
+ liquidityAsset: this.liquidityAsset,
646
654
  liquidityPt: this.liquidityPt,
647
655
  })
648
656
  }
@@ -754,6 +762,25 @@ export class MarketCalculator {
754
762
 
755
763
  return Number(this.state.lpTokenSupply) === 0 ? 0 : liquidityPoolTvl / Number(this.state.lpTokenSupply)
756
764
  }
765
+
766
+ /** Calculate the amount of SY to strip into PT based on the current market state
767
+ * This matches the Rust implementation of calc_strip_amount
768
+ * @param totalAmountSy - The total amount of SY to be processed
769
+ * @returns The amount of SY to strip into PT
770
+ */
771
+ calcStripAmount(totalAmountSy: number): { syToStrip: number; pyToReceive: number } {
772
+ // Convert inputs to numbers for calculation
773
+ const amtSy = totalAmountSy
774
+ const curSyRate = this.currentSyExchangeRate
775
+ const marketPtLiq = this.liquidityPt
776
+ const marketSyLiq = this.liquiditySy
777
+
778
+ // Calculate strip amount using the same formula as Rust implementation
779
+ const toStrip = (amtSy * marketPtLiq) / (curSyRate * marketSyLiq + marketPtLiq)
780
+
781
+ // Round up to match Rust's ceil_u64 behavior
782
+ return { syToStrip: toStrip, pyToReceive: toStrip * curSyRate }
783
+ }
757
784
  }
758
785
 
759
786
  export interface CalculatorTradeResult {
@@ -834,7 +861,7 @@ export function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: numbe
834
861
  const targetSy = mid / c.currentSyExchangeRate
835
862
  const syToBorrow = targetSy - syIn
836
863
 
837
- if (syToBorrow > c.liquiditySy) {
864
+ if (syToBorrow + c.calcTradePt(-mid, false).netTraderAsset * c.currentSyExchangeRate > c.liquiditySy) {
838
865
  console.log("Not enough liquidity - required SY exceeds available SY")
839
866
  return null
840
867
  }
@@ -881,6 +908,7 @@ export function estimateYtOutForExactAssetIn(c: MarketCalculator, assetIn: numbe
881
908
  "iterations, returning best approximation:",
882
909
  bestApproximation,
883
910
  )
911
+
884
912
  return bestApproximation
885
913
  }
886
914
 
@@ -932,7 +960,7 @@ export function calcMaxYtOutForPriceImpact(c: MarketCalculator, maxPriceImpactPe
932
960
 
933
961
  // Given the current asset amount and target proportion, we can calculate how much PT we can add
934
962
  // before hitting our price impact limit
935
- const currentAsset = c.liqudityAsset
963
+ const currentAsset = c.liquidityAsset
936
964
  const currentPt = c.liquidityPt
937
965
  const currentProportionPt = currentPt / (currentPt + currentAsset)
938
966
 
@@ -978,7 +1006,7 @@ export function calcBalancedDeposit(c: MarketCalculator, totalSy: number): { ptT
978
1006
  }
979
1007
  }
980
1008
 
981
- /*
1009
+ /**
982
1010
  We now account for the fact that executing a PT trade changes the pool state.
983
1011
  Instead of using the original pool ratio (c.liquidityPt/c.liquiditySy), we simulate the trade
984
1012
  for a candidate pt amount, obtain the new market state via c.calcTradePt(pt, true), and then
@@ -991,8 +1019,12 @@ export function calcBalancedDeposit(c: MarketCalculator, totalSy: number): { ptT
991
1019
  const costInSY = -tradeResult.netTraderAsset / c.currentSyExchangeRate
992
1020
  const syDeposit = totalSy - costInSY
993
1021
  if (syDeposit <= 0) return Infinity
1022
+
1023
+ // Calculate treasury fee using the same logic as Rust
1024
+ // fee_treasury_sy_bps is in basis points (10000 = 100%)
1025
+ const feeInSY = (tradeResult.feeAsset * c.state.feeTreasurySyBps) / 10000 / c.currentSyExchangeRate
994
1026
  const newLiquidityPt = tradeResult.newMarketCalculator.liquidityPt
995
- const newLiquiditySy = tradeResult.newMarketCalculator.liquiditySy
1027
+ const newLiquiditySy = tradeResult.newMarketCalculator.liquiditySy - feeInSY
996
1028
  const newRatio = newLiquidityPt / newLiquiditySy
997
1029
  return pt / syDeposit - newRatio
998
1030
  }
@@ -1026,12 +1058,12 @@ export function calcBalancedDeposit(c: MarketCalculator, totalSy: number): { ptT
1026
1058
  }
1027
1059
 
1028
1060
  /** Calculate the amount of LP tokens that will be received for a wrapper_provide_liquidity_base deposit
1029
- * @param c - The market calculator instance
1061
+ * @param marketCalculator - The market calculator instance
1030
1062
  * @param baseAmount - The amount of base tokens being deposited (will be converted to SY using exchange rate)
1031
1063
  * @returns The amount of LP tokens that will be received and the PT trade price
1032
1064
  */
1033
1065
  export function simulateWrapperProvideLiquidityBase(
1034
- c: MarketCalculator,
1066
+ marketCalculator: MarketCalculator,
1035
1067
  baseAmount: number,
1036
1068
  ): {
1037
1069
  lpOut: number
@@ -1045,19 +1077,19 @@ export function simulateWrapperProvideLiquidityBase(
1045
1077
  } | null {
1046
1078
  try {
1047
1079
  // Convert base amount to SY using the exchange rate
1048
- const syAmount = baseAmount / c.currentSyExchangeRate
1080
+ const syAmount = baseAmount / marketCalculator.currentSyExchangeRate
1049
1081
 
1050
1082
  // Calculate balanced deposit amounts for PT and SY
1051
- const balancedAmounts = calcBalancedDeposit(c, syAmount)
1083
+ const balancedAmounts = calcBalancedDeposit(marketCalculator, syAmount)
1052
1084
 
1053
1085
  // If no PT is being bought, return early with just the SY deposit
1054
1086
  if (balancedAmounts.ptToBuy === 0) {
1055
1087
  const lpResult = lpOutForTokensIn({
1056
1088
  syIntent: syAmount,
1057
1089
  ptIntent: 0,
1058
- lpSupply: Number(c.state.lpTokenSupply),
1059
- syLiquidity: c.liquiditySy,
1060
- ptLiquidity: c.liquidityPt,
1090
+ lpSupply: Number(marketCalculator.state.lpTokenSupply),
1091
+ syLiquidity: marketCalculator.liquiditySy,
1092
+ ptLiquidity: marketCalculator.liquidityPt,
1061
1093
  })
1062
1094
 
1063
1095
  return {
@@ -1073,9 +1105,9 @@ export function simulateWrapperProvideLiquidityBase(
1073
1105
  }
1074
1106
 
1075
1107
  // Execute the PT trade using balancedAmounts.ptToBuy with flash swap enabled
1076
- const ptTradeResult = c.calcTradePt(balancedAmounts.ptToBuy, true)
1108
+ const ptTradeResult = marketCalculator.calcTradePt(balancedAmounts.ptToBuy, true)
1077
1109
 
1078
- console.log("new lp price after trade", ptTradeResult.newMarketCalculator.lpPriceInAsset)
1110
+ // console.log("new lp price after trade", ptTradeResult.newMarketCalculator.lpPriceInAsset)
1079
1111
 
1080
1112
  // Verify there's enough liquidity
1081
1113
  if (ptTradeResult.netTraderAsset === 0 || !ptTradeResult.newMarketCalculator) {
@@ -1092,7 +1124,7 @@ export function simulateWrapperProvideLiquidityBase(
1092
1124
  const lpResult = lpOutForTokensIn({
1093
1125
  syIntent: balancedAmounts.syRemainder,
1094
1126
  ptIntent: balancedAmounts.ptToBuy,
1095
- lpSupply: Number(c.state.lpTokenSupply),
1127
+ lpSupply: Number(marketCalculator.state.lpTokenSupply),
1096
1128
  syLiquidity: newMarketState.liquiditySy,
1097
1129
  ptLiquidity: newMarketState.liquidityPt,
1098
1130
  })
@@ -1109,7 +1141,7 @@ export function simulateWrapperProvideLiquidityBase(
1109
1141
  }
1110
1142
 
1111
1143
  return result
1112
- } catch (error) {
1144
+ } catch {
1113
1145
  return null
1114
1146
  }
1115
1147
  }
package/src/math.test.ts CHANGED
@@ -1,13 +1,14 @@
1
+ import { describe, expect, test } from "@jest/globals"
2
+
1
3
  import {
4
+ MarketCalculator,
2
5
  currentLnImpliedRate,
3
6
  currentRateScalar,
4
- estimateYtOutForExactAssetIn,
5
7
  exchangeRate,
6
8
  exchangeRateFromLnImpliedRate,
7
9
  feeRate,
8
10
  findRateAnchor,
9
11
  logit,
10
- MarketCalculator,
11
12
  tradePt,
12
13
  } from "./index"
13
14
 
@@ -20,6 +21,8 @@ const WINDOW_ARGS = {
20
21
  windowDurationSeconds: 0,
21
22
  }
22
23
 
24
+ const FEE_TREASURY_SY_BPS_PLACEHOLDER = 0
25
+
23
26
  describe("market functions", () => {
24
27
  test("logit gets large as proportion = 1", () => {
25
28
  expect(logit(0.9999)).toBeGreaterThan(5)
@@ -247,28 +250,28 @@ describe("market functions", () => {
247
250
  expect(effectiveExchangeRate).toBeGreaterThan(er)
248
251
  })
249
252
 
250
- test("sells PT with fee", () => {
251
- const rs = currentRateScalar({ rateScalarRoot: 20, secondsRemaining: 3600 * 200 })
252
- const currentRateAnchor = 1.1
253
- const liquidityPt = 110_000
254
- const liquidityAsset = 100_000
255
-
256
- const er = exchangeRate({
257
- proportionPt: liquidityPt / (liquidityAsset + liquidityPt),
258
- rateAnchor: currentRateAnchor,
259
- rateScalar: rs,
260
- })
261
-
262
- const tr = tradePt({
263
- liquidityPt,
264
- liquidityAsset,
265
- currentRateScalar: rs,
266
- currentRateAnchor: 1.1,
267
- currentFeeRate: 1.01,
268
- netTraderPt: -10,
269
- })
270
- // TODO assertions
271
- })
253
+ // TODO assertions
254
+ // test("sells PT with fee", () => {
255
+ // const rs = currentRateScalar({ rateScalarRoot: 20, secondsRemaining: 3600 * 200 })
256
+ // const currentRateAnchor = 1.1
257
+ // const liquidityPt = 110_000
258
+ // const liquidityAsset = 100_000
259
+
260
+ // const er = exchangeRate({
261
+ // proportionPt: liquidityPt / (liquidityAsset + liquidityPt),
262
+ // rateAnchor: currentRateAnchor,
263
+ // rateScalar: rs,
264
+ // })
265
+
266
+ // const tr = tradePt({
267
+ // liquidityPt,
268
+ // liquidityAsset,
269
+ // currentRateScalar: rs,
270
+ // currentRateAnchor: 1.1,
271
+ // currentFeeRate: 1.01,
272
+ // netTraderPt: -10,
273
+ // })
274
+ // })
272
275
 
273
276
  test("exchange rate", () => {
274
277
  const rateScalar = 20
@@ -321,14 +324,15 @@ describe("market calculator", () => {
321
324
  lnFeeRateRoot: Math.log(1.01),
322
325
  secondsRemaining: 3600 * 24 * 300,
323
326
  rateScalarRoot: 20,
327
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
324
328
  ...WINDOW_ARGS,
325
329
  })
326
330
 
327
- expect(mc.liqudityAsset).toBe(100)
331
+ expect(mc.liquidityAsset).toBe(100)
328
332
 
329
333
  mc.state.currentSyExchangeRate = 1.5
330
334
 
331
- expect(mc.liqudityAsset).toBe(150)
335
+ expect(mc.liquidityAsset).toBe(150)
332
336
  })
333
337
 
334
338
  test("trading PT creates a new MarketCalculator which has the right exchange rate", () => {
@@ -342,6 +346,7 @@ describe("market calculator", () => {
342
346
  lnFeeRateRoot: Math.log(1),
343
347
  secondsRemaining: 3600 * 24 * 365,
344
348
  rateScalarRoot: 20,
349
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
345
350
  ...WINDOW_ARGS,
346
351
  })
347
352
 
@@ -360,7 +365,7 @@ describe("market calculator", () => {
360
365
  expect(tr1.newMarketCalculator.liquidityPt + tr1.netTraderPt).toBe(100)
361
366
 
362
367
  // the market has has the liquidity of asset equal to 100 plus the change to trader (a negative number)
363
- expect(tr1.newMarketCalculator.liqudityAsset + tr1.netTraderAsset).toBe(100)
368
+ expect(tr1.newMarketCalculator.liquidityAsset + tr1.netTraderAsset).toBe(100)
364
369
 
365
370
  // now test selling pt
366
371
  const tr2 = mc.calcTradePt(-1)
@@ -382,6 +387,7 @@ describe("market calculator", () => {
382
387
  lnFeeRateRoot: Math.log(1.01),
383
388
  secondsRemaining: 3600 * 24 * 365,
384
389
  rateScalarRoot: 20,
390
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
385
391
  ...WINDOW_ARGS,
386
392
  })
387
393
 
@@ -401,6 +407,7 @@ describe("market calculator", () => {
401
407
  lnFeeRateRoot: Math.log(1),
402
408
  secondsRemaining: 3600 * 24 * 365,
403
409
  rateScalarRoot: 20,
410
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
404
411
  ...WINDOW_ARGS,
405
412
  })
406
413
 
@@ -429,6 +436,7 @@ describe("market calculator", () => {
429
436
  lnFeeRateRoot: Math.log(1),
430
437
  secondsRemaining: 3600 * 24 * 365,
431
438
  rateScalarRoot: 20,
439
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
432
440
  ...WINDOW_ARGS,
433
441
  })
434
442
 
@@ -464,6 +472,7 @@ describe("market calculator", () => {
464
472
  lnFeeRateRoot: Math.log(1.01),
465
473
  secondsRemaining: 3600 * 24 * 365,
466
474
  rateScalarRoot: 20,
475
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
467
476
  ...WINDOW_ARGS,
468
477
  })
469
478
 
@@ -497,6 +506,7 @@ describe("market calculator", () => {
497
506
  lnFeeRateRoot: Math.log(1.01),
498
507
  secondsRemaining: 3600 * 24 * 365,
499
508
  rateScalarRoot: 20,
509
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
500
510
  ...WINDOW_ARGS,
501
511
  })
502
512
 
@@ -530,6 +540,7 @@ describe("market calculator", () => {
530
540
  lnFeeRateRoot: Math.log(1),
531
541
  secondsRemaining: 3600 * 24 * 365,
532
542
  rateScalarRoot: 20,
543
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
533
544
  ...WINDOW_ARGS,
534
545
  })
535
546
 
@@ -558,6 +569,7 @@ describe("market calculator", () => {
558
569
  lnFeeRateRoot: Math.log(1),
559
570
  secondsRemaining: 3600 * 24 * 365,
560
571
  rateScalarRoot: 20,
572
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
561
573
  ...WINDOW_ARGS,
562
574
  })
563
575
 
@@ -584,6 +596,7 @@ describe("market calculator", () => {
584
596
  lnFeeRateRoot: Math.log(1),
585
597
  secondsRemaining: 3600 * 24 * 365,
586
598
  rateScalarRoot: 20,
599
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
587
600
  ...WINDOW_ARGS,
588
601
  })
589
602
 
@@ -602,6 +615,7 @@ describe("market calculator", () => {
602
615
  lnFeeRateRoot: Math.log(1),
603
616
  secondsRemaining: 3600 * 24 * 365,
604
617
  rateScalarRoot: 20,
618
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
605
619
  ...WINDOW_ARGS,
606
620
  })
607
621
 
@@ -624,6 +638,7 @@ describe("market calculator", () => {
624
638
  lnFeeRateRoot: Math.log(1),
625
639
  secondsRemaining: 3600 * 24 * 365,
626
640
  rateScalarRoot: 20,
641
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
627
642
  ...WINDOW_ARGS,
628
643
  })
629
644
 
@@ -648,6 +663,7 @@ describe("market calculator", () => {
648
663
  lnFeeRateRoot: Math.log(1),
649
664
  secondsRemaining: 3600 * 24 * 365,
650
665
  rateScalarRoot: 20,
666
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
651
667
  ...WINDOW_ARGS,
652
668
  })
653
669
 
@@ -666,6 +682,7 @@ describe("market calculator", () => {
666
682
  lnFeeRateRoot: Math.log(1),
667
683
  secondsRemaining: 3600 * 24 * 365,
668
684
  rateScalarRoot: 20,
685
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
669
686
  ...WINDOW_ARGS,
670
687
  })
671
688
 
@@ -683,6 +700,7 @@ describe("market calculator", () => {
683
700
  lnFeeRateRoot: Math.log(1),
684
701
  secondsRemaining: 3600 * 24 * 365,
685
702
  rateScalarRoot: 20,
703
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
686
704
  ...WINDOW_ARGS,
687
705
  })
688
706
 
@@ -705,7 +723,7 @@ describe("market calculator", () => {
705
723
  const ytIn2 = 10
706
724
  const res2 = mc.simSellYt(ytIn2)
707
725
  expect(res2).not.toBeNull()
708
- const { newMarketCalculator: mc3, assetOut: assetOut2 } = res2!
726
+ const { assetOut: assetOut2 } = res2!
709
727
  const ytPrice2 = assetOut2 / ytIn2
710
728
  // the price of YT should be lower with selling 10 than 1
711
729
  // because of the price impact
@@ -723,6 +741,7 @@ describe("market calculator", () => {
723
741
  lnFeeRateRoot: Math.log(1),
724
742
  secondsRemaining: 3600 * 24 * 180,
725
743
  rateScalarRoot: 20,
744
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
726
745
  ...WINDOW_ARGS,
727
746
  })
728
747
 
@@ -754,6 +773,7 @@ describe("market calculator", () => {
754
773
  lnFeeRateRoot: Math.log(1),
755
774
  secondsRemaining: 3600 * 24 * 365,
756
775
  rateScalarRoot: 20,
776
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
757
777
  ...WINDOW_ARGS,
758
778
  })
759
779
 
@@ -774,6 +794,7 @@ describe("market calculator", () => {
774
794
  lnFeeRateRoot: Math.log(1),
775
795
  secondsRemaining: 3600 * 24 * 365,
776
796
  rateScalarRoot: 20,
797
+ feeTreasurySyBps: FEE_TREASURY_SY_BPS_PLACEHOLDER,
777
798
  ...WINDOW_ARGS,
778
799
  })
779
800