@wireio/stake 0.0.6 → 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/README.md +203 -13
- package/lib/stake.browser.js +2800 -3329
- package/lib/stake.browser.js.map +1 -1
- package/lib/stake.d.ts +376 -6261
- package/lib/stake.js +2937 -3476
- package/lib/stake.js.map +1 -1
- package/lib/stake.m.js +2800 -3329
- package/lib/stake.m.js.map +1 -1
- package/package.json +2 -2
- package/src/assets/solana/idl/deposit.json +46 -10
- package/src/assets/solana/idl/distribution.json +40 -8
- package/src/assets/solana/idl/liq_sol_token.json +25 -2
- package/src/assets/solana/idl/mint_helper.json +110 -0
- package/src/assets/solana/idl/read_tracked_balance.json +140 -0
- package/src/assets/solana/idl/stake_controller.json +1141 -780
- package/src/assets/solana/idl/treasury.json +1 -227
- package/src/assets/solana/idl/validator_leaderboard.json +88 -47
- package/src/assets/solana/idl/validator_registry.json +115 -46
- package/src/assets/solana/idl/yield_oracle.json +1 -1
- package/src/assets/solana/types/deposit.ts +46 -10
- package/src/assets/solana/types/distribution.ts +40 -8
- package/src/assets/solana/types/liq_sol_token.ts +25 -2
- package/src/assets/solana/types/mint_helper.ts +116 -0
- package/src/assets/solana/types/read_tracked_balance.ts +146 -0
- package/src/assets/solana/types/stake_controller.ts +1141 -780
- package/src/assets/solana/types/treasury.ts +1 -227
- package/src/assets/solana/types/validator_leaderboard.ts +88 -47
- package/src/assets/solana/types/validator_registry.ts +115 -46
- package/src/assets/solana/types/yield_oracle.ts +1 -1
- package/src/index.ts +3 -4
- package/src/networks/ethereum/ethereum.ts +2 -2
- package/src/networks/solana/clients/deposit.client.ts +71 -80
- package/src/networks/solana/clients/distribution.client.ts +392 -141
- package/src/networks/solana/clients/leaderboard.client.ts +82 -107
- package/src/networks/solana/constants.ts +141 -56
- package/src/networks/solana/program.ts +36 -89
- package/src/networks/solana/solana.ts +168 -34
- package/src/networks/solana/types.ts +57 -0
- package/src/scripts/fetch-artifacts.sh +24 -0
- package/src/staker/staker.ts +32 -28
- package/src/staker/types.ts +24 -21
- package/src/assets/solana/idl/stake_registry.json +0 -435
- package/src/networks/solana/utils.ts +0 -122
- /package/src/{utils.ts → common/utils.ts} +0 -0
package/lib/stake.m.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stake.m.js","sources":["../src/utils.ts","../src/networks/solana/constants.ts","../src/networks/solana/utils.ts","../src/networks/solana/program.ts","../src/networks/solana/clients/deposit.client.ts","../src/networks/solana/clients/distribution.client.ts","../src/networks/solana/clients/leaderboard.client.ts","../src/networks/solana/solana.ts","../src/staker/staker.ts","../src/networks/ethereum/contract.ts","../src/networks/ethereum/ethereum.ts","../src/networks/ethereum/types.ts"],"sourcesContent":["/**\n * Static utility functions for working with Wire Network Staking Protocol.\n * \n * @module utils\n */\n\nexport const hi = (name: string): string => {\n return `Hello, ${name}!`;\n}","// src/networks/solana/constants.ts\n\nimport { PublicKey } from '@solana/web3.js';\nimport { TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token';\n\n// — IDLs — (must match your filesystem: src/assets/solana/idl/*.json)\nimport DepositIDL from '../../assets/solana/idl/deposit.json';\nimport DistributionIDL from '../../assets/solana/idl/distribution.json';\nimport LiqSolTokenIDL from '../../assets/solana/idl/liq_sol_token.json';\nimport StakeControllerIDL from '../../assets/solana/idl/stake_controller.json';\nimport StakeRegistryIDL from '../../assets/solana/idl/stake_registry.json';\nimport TreasuryIDL from '../../assets/solana/idl/treasury.json';\nimport ValidatorLeaderboardIDL from '../../assets/solana/idl/validator_leaderboard.json';\nimport ValidatorRegistryIDL from '../../assets/solana/idl/validator_registry.json';\nimport YieldOracleIDL from '../../assets/solana/idl/yield_oracle.json';\n\n// — Types — for your clients\nimport type { Deposit } from '../../assets/solana/types/deposit';\nimport type { Distribution } from '../../assets/solana/types/distribution';\nimport type { ValidatorLeaderboard } from '../../assets/solana/types/validator_leaderboard';\nimport type { LiqSolToken } from '../../assets/solana/types/liq_sol_token';\nimport type { StakeController } from '../../assets/solana/types/stake_controller';\nimport type { StakeRegistry } from '../../assets/solana/types/stake_registry';\nimport type { Treasury } from '../../assets/solana/types/treasury';\nimport type { ValidatorRegistry } from '../../assets/solana/types/validator_registry';\nimport type { YieldOracle } from '../../assets/solana/types/yield_oracle';\n\n// Re-export for easy import elsewhere:\nexport {\n Deposit,\n DepositIDL,\n Distribution,\n DistributionIDL,\n LiqSolToken,\n LiqSolTokenIDL,\n StakeController,\n StakeControllerIDL,\n StakeRegistry,\n StakeRegistryIDL,\n Treasury,\n TreasuryIDL,\n ValidatorLeaderboard,\n ValidatorLeaderboardIDL,\n ValidatorRegistry,\n ValidatorRegistryIDL,\n YieldOracle,\n YieldOracleIDL,\n};\n\n// — Program IDs — anchor “address” fields inside each IDL must match these:\nexport const DEPOSIT_PROGRAM_ID = new PublicKey(DepositIDL.address);\nexport const DISTRIBUTION_PROGRAM_ID = new PublicKey(DistributionIDL.address);\nexport const LIQSOL_TOKEN_PROGRAM_ID = new PublicKey(LiqSolTokenIDL.address);\nexport const STAKE_CONTROLLER_PROGRAM_ID = new PublicKey(StakeControllerIDL.address);\nexport const STAKE_REGISTRY_PROGRAM_ID = new PublicKey(StakeRegistryIDL.address);\nexport const TREASURY_PROGRAM_ID = new PublicKey(TreasuryIDL.address);\nexport const VALIDATOR_LEADERBOARD_PROGRAM_ID = new PublicKey(ValidatorLeaderboardIDL.address);\nexport const VALIDATOR_REGISTRY_PROGRAM_ID = new PublicKey(ValidatorRegistryIDL.address);\nexport const YIELD_ORACLE_PROGRAM_ID = new PublicKey(YieldOracleIDL.address);\n\n// — Protocol constants — tweak as needed:\nexport const MIN_SOL_TO_PARTICIPATE = 1_000_000_000; // 1 SOL in lamports\nexport const MIN_FUNDS_THRESHOLD = 10_000_000_000; // 10 SOL in lamports\nexport const RESERVE_FOR_FEES = 1_000_000_000; // 1 SOL\n\n// — Pre-derived PDA seeds for your convenience — \n// (you can still use your utils.ts helpers instead)\nexport const TREASURY_WALLET_PDA = new PublicKey('9gLj1MRrm66GNYqnMLPGUzyYqYJpVLQgFSbtCQV9Ta4G');\nexport const LIQSOL_MINT_ADDRESS = new PublicKey('B2XtJABkc6eUoYUNgSfZVb3kYckmbh2zxp4rp2hX2Xwa');\nexport const STAKE_VAULT_PDA = new PublicKey('AY83EfU5LXJGDhbLeP45H3tLKisGZgSe2G4mGYfPimqN');\n\n// re-export SPL token constants:\nexport { TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID };","// src/solana/utils.ts\nimport { AnchorProvider, Program } from '@coral-xyz/anchor'\nimport { PublicKey } from '@solana/web3.js'\nimport { getAssociatedTokenAddressSync, TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport {\n DEPOSIT_PROGRAM_ID,\n DISTRIBUTION_PROGRAM_ID,\n STAKE_CONTROLLER_PROGRAM_ID,\n VALIDATOR_LEADERBOARD_PROGRAM_ID,\n LIQSOL_MINT_ADDRESS,\n DepositIDL,\n Deposit\n} from './constants'\n\n// -- Program factories ------------------------------------------------------\n/**\n * Create an Anchor Program client for the Deposit program\n */\nexport function getDepositProgram(provider: AnchorProvider): Program<Deposit> {\n // Ensure the IDL has the correct program address\n const idlWithAddress = {\n ...JSON.parse(JSON.stringify(DepositIDL)),\n address: DEPOSIT_PROGRAM_ID.toString(),\n }\n return new Program(idlWithAddress as any, provider) as Program<Deposit>\n}\n\n// (Other program factories can go here if needed)\n\n// -- PDA derivation helpers ------------------------------------------------\nexport function deriveDepositAuthorityPDA(\n programId: PublicKey = DEPOSIT_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('program_authority')],\n programId\n )\n}\n\nexport function deriveLiqsolMintAuthorityPDA(\n programId: PublicKey = LIQSOL_MINT_ADDRESS\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('mint_authority')],\n programId\n )\n}\n\nexport function deriveStakeControllerVaultPDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('vault')],\n STAKE_CONTROLLER_PROGRAM_ID\n )\n}\n\nexport function deriveStakeControllerReservePoolPDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('reserve_pool')],\n STAKE_CONTROLLER_PROGRAM_ID\n )\n}\n\nexport function deriveStakeControllerStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')],\n STAKE_CONTROLLER_PROGRAM_ID\n )\n}\n\nexport function deriveDistributionStatePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('distribution_state')],\n DISTRIBUTION_PROGRAM_ID\n )\n}\n\nexport function deriveUserRecordPDA(\n user: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('user_record'), user.toBuffer()],\n DISTRIBUTION_PROGRAM_ID\n )\n}\n\nexport function deriveLeaderboardHeadPDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('leaderboard_head')],\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n )\n}\n\nexport function deriveValidatorRecordPDA(\n voteAccount: PublicKey\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('validator_record'), voteAccount.toBuffer()],\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n )\n}\n\nexport function deriveTop10CachePDA(): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from('top_10_cache')],\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n )\n}\n\n// -- SPL Token helper -------------------------------------------------------\nexport function getUserLiqsolATA(\n user: PublicKey\n): PublicKey {\n return getAssociatedTokenAddressSync(\n LIQSOL_MINT_ADDRESS,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n )\n}\n\n// seedToPID(seed: string): PublicKey ","// src/solana/programService.ts\n\nimport { AnchorProvider, Program } from '@coral-xyz/anchor';\nimport { PublicKey } from '@solana/web3.js';\n\n// 1) pull in all your on-chain IDLs (must match lowercase `src/assets/solana/idl`)\nimport depositJson from '../../assets/solana/idl/deposit.json';\nimport distributionJson from '../../assets/solana/idl/distribution.json';\nimport liqSolTokenJson from '../../assets/solana/idl/liq_sol_token.json';\nimport stakeControllerJson from '../../assets/solana/idl/stake_controller.json';\nimport stakeRegistryJson from '../../assets/solana/idl/stake_registry.json';\nimport treasuryJson from '../../assets/solana/idl/treasury.json';\nimport validatorLeaderboardJson from '../../assets/solana/idl/validator_leaderboard.json';\nimport validatorRegistryJson from '../../assets/solana/idl/validator_registry.json';\nimport yieldOracleJson from '../../assets/solana/idl/yield_oracle.json';\n\n// 2) import their companion TS types\nimport type { Deposit } from '../../assets/solana/types/deposit';\nimport type { Distribution } from '../../assets/solana/types/distribution';\nimport type { LiqSolToken } from '../../assets/solana/types/liq_sol_token';\nimport type { StakeController } from '../../assets/solana/types/stake_controller';\nimport type { StakeRegistry } from '../../assets/solana/types/stake_registry';\nimport type { Treasury } from '../../assets/solana/types/treasury';\nimport type { ValidatorLeaderboard } from '../../assets/solana/types/validator_leaderboard';\nimport type { ValidatorRegistry } from '../../assets/solana/types/validator_registry';\nimport type { YieldOracle } from '../../assets/solana/types/yield_oracle';\n\ntype IdlEntry<IDL> = {\n idl: IDL & { address: string };\n address: PublicKey;\n};\n\nexport const PROGRAM_IDLS = {\n deposit: {\n idl: depositJson,\n address: new PublicKey(depositJson.address),\n } as IdlEntry<Deposit>,\n\n distribution: {\n idl: distributionJson,\n address: new PublicKey(distributionJson.address),\n } as IdlEntry<Distribution>,\n\n liqSolToken: {\n idl: liqSolTokenJson,\n address: new PublicKey(liqSolTokenJson.address),\n } as IdlEntry<LiqSolToken>,\n\n stakeController: {\n idl: stakeControllerJson,\n address: new PublicKey(stakeControllerJson.address),\n } as IdlEntry<StakeController>,\n\n stakeRegistry: {\n idl: stakeRegistryJson,\n address: new PublicKey(stakeRegistryJson.address),\n } as IdlEntry<StakeRegistry>,\n\n treasury: {\n idl: treasuryJson,\n address: new PublicKey(treasuryJson.address),\n } as IdlEntry<Treasury>,\n\n validatorLeaderboard: {\n idl: validatorLeaderboardJson,\n address: new PublicKey(validatorLeaderboardJson.address),\n } as IdlEntry<ValidatorLeaderboard>,\n\n validatorRegistry: {\n idl: validatorRegistryJson,\n address: new PublicKey(validatorRegistryJson.address),\n } as IdlEntry<ValidatorRegistry>,\n\n yieldOracle: {\n idl: yieldOracleJson,\n address: new PublicKey(yieldOracleJson.address),\n } as IdlEntry<YieldOracle>,\n};\n\n/**\n * Factory for Anchor Program clients.\n *\n * Anchor v0.28+ reads the program ID from `idl.address`, so\n * we call the 2-arg constructor: `new Program(idl, provider)`.\n */\nexport class SolanaProgramService {\n constructor(private provider: AnchorProvider) { }\n\n /**\n * Returns a typed Anchor Program instance for the given key.\n */\n getProgram<K extends keyof typeof PROGRAM_IDLS>(\n name: K\n ): Program<(typeof PROGRAM_IDLS)[K]['idl']> {\n const entry = PROGRAM_IDLS[name];\n // stamp the correct address into a fresh copy of the IDL\n const idlWithAddr = { ...entry.idl, address: entry.address.toString() };\n // use the two-arg signature: (idl, provider)\n return new Program(idlWithAddr as any, this.provider) as Program<\n (typeof PROGRAM_IDLS)[K]['idl']\n >;\n }\n\n /** List all program keys */\n listProgramNames(): Array<keyof typeof PROGRAM_IDLS> {\n return Object.keys(PROGRAM_IDLS) as Array<keyof typeof PROGRAM_IDLS>;\n }\n\n /** Raw PublicKey of a program */\n getProgramId(name: keyof typeof PROGRAM_IDLS): PublicKey {\n return PROGRAM_IDLS[name].address;\n }\n}","import { AnchorProvider } from '@coral-xyz/anchor';\nimport { BN } from '@coral-xyz/anchor';\nimport {\n PublicKey,\n Transaction,\n SystemProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n SYSVAR_STAKE_HISTORY_PUBKEY,\n StakeProgram,\n ComputeBudgetProgram,\n VersionedTransaction,\n Signer,\n TransactionSignature,\n} from '@solana/web3.js';\nimport {\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n} from '@solana/spl-token';\n\nimport {\n deriveDepositAuthorityPDA,\n deriveLiqsolMintAuthorityPDA,\n deriveStakeControllerVaultPDA,\n deriveStakeControllerReservePoolPDA,\n deriveStakeControllerStatePDA,\n deriveDistributionStatePDA,\n deriveUserRecordPDA,\n getUserLiqsolATA,\n} from '../utils';\nimport {\n LIQSOL_MINT_ADDRESS,\n TREASURY_WALLET_PDA,\n STAKE_CONTROLLER_PROGRAM_ID,\n LIQSOL_TOKEN_PROGRAM_ID,\n YIELD_ORACLE_PROGRAM_ID,\n DISTRIBUTION_PROGRAM_ID,\n MIN_SOL_TO_PARTICIPATE,\n} from '../constants';\nimport { SolanaProgramService } from '../program';\n\n/**\n * DepositClient provides methods for building, simulating, and sending deposit transactions\n * to the Solana blockchain using the Anchor framework. It handles the creation of ephemeral\n * stake accounts, derives necessary PDAs and ATAs, and manages transaction construction\n * with compute budget adjustments. This client is designed to facilitate deposits into\n * the Liqsol staking protocol, ensuring all required accounts and instructions are included.\n *\n * @remarks\n * - Uses AnchorProvider for network interactions.\n * - Enforces minimum deposit requirements.\n * - Supports dry-run simulation for transaction debugging.\n * - Provides high-level helper for building and sending deposit transactions.\n */\nexport class DepositClient {\n private program = new SolanaProgramService(this.provider);\n\n constructor(private provider: AnchorProvider) { }\n\n /** Minimum lamports (1 SOL) */\n static readonly MIN_DEPOSIT = MIN_SOL_TO_PARTICIPATE;\n\n /**\n * Build the deposit transaction (compute-budget bump + deposit Ix).\n * Returns both the Transaction and the ephemeral stake account Pubkey.\n */\n async buildDepositTx(\n user: PublicKey,\n amount: number\n ): Promise<{ transaction: Transaction; ephemeralStakePubkey: PublicKey }> {\n if (amount < MIN_SOL_TO_PARTICIPATE) {\n throw new Error(\n `Minimum deposit is ${MIN_SOL_TO_PARTICIPATE / 1e9} SOL`\n );\n }\n\n // 1) grab your typed Anchor program\n const program = this.program.getProgram('deposit');\n\n // 2) PDAs & ATAs\n const userAta = getUserLiqsolATA(user);\n const [depositAuthPDA] = deriveDepositAuthorityPDA();\n const [mintAuthPDA] = deriveLiqsolMintAuthorityPDA();\n const [vaultPDA] = deriveStakeControllerVaultPDA();\n const [reservePoolPDA] = deriveStakeControllerReservePoolPDA();\n const [controllerStatePDA] = deriveStakeControllerStatePDA();\n const [distStatePDA] = deriveDistributionStatePDA();\n const [userRecordPDA] = deriveUserRecordPDA(user);\n\n // 3) ephemeral stake account\n const seed = Math.floor(Math.random() * 0xffffffff);\n const ephemeralSeed = `ephemeral_${seed}`;\n const ephemeralStakePubkey = await PublicKey.createWithSeed(\n user,\n ephemeralSeed,\n StakeProgram.programId\n );\n\n // 4) build deposit instruction\n const depositIx = await program.methods\n .deposit(new BN(amount), seed)\n .accounts({\n user,\n programAuthority: depositAuthPDA,\n treasuryWallet: TREASURY_WALLET_PDA,\n systemProgram: SystemProgram.programId,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n liqsolProgram: LIQSOL_TOKEN_PROGRAM_ID,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n stakeProgram: StakeProgram.programId,\n distributionProgram: DISTRIBUTION_PROGRAM_ID,\n liqsolMint: LIQSOL_MINT_ADDRESS,\n userAta,\n liqsolMintAuthority: mintAuthPDA,\n reservePool: reservePoolPDA,\n vault: vaultPDA,\n ephemeralStake: ephemeralStakePubkey,\n controllerState: controllerStatePDA,\n userRecord: userRecordPDA,\n distributionState: distStatePDA,\n instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,\n clock: SYSVAR_CLOCK_PUBKEY,\n stakeHistory: SYSVAR_STAKE_HISTORY_PUBKEY,\n rent: SYSVAR_RENT_PUBKEY,\n } as any)\n .instruction();\n\n // 5) prepend compute-budget bump\n const computeIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: 400_000,\n });\n\n const tx = new Transaction().add(computeIx, depositIx);\n return { transaction: tx, ephemeralStakePubkey };\n }\n\n /**\n * Simulate (dry-run) a built transaction.\n * Returns any error plus the total compute-units consumed.\n */\n async simulate(\n tx: Transaction\n ): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(\n versioned,\n { sigVerify: false }\n );\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n\n /**\n * High-level “build & send” helper.\n * Returns the confirmed signature.\n */\n async deposit(\n user: PublicKey,\n amount: number,\n signers: Signer[] = []\n ): Promise<TransactionSignature> {\n const { transaction } = await this.buildDepositTx(user, amount);\n\n // set feePayer & recent blockhash\n transaction.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n\n // send + confirm\n return this.provider.sendAndConfirm(transaction, signers);\n }\n}","// src/solana/clients/DistributionClient.ts\nimport { AnchorProvider, Program, BN, web3 } from '@coral-xyz/anchor';\nimport {\n PublicKey,\n Transaction,\n TransactionInstruction,\n SystemProgram,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from '@solana/spl-token';\nimport {\n DISTRIBUTION_PROGRAM_ID,\n STAKE_CONTROLLER_PROGRAM_ID,\n DistributionIDL,\n Distribution,\n YIELD_ORACLE_PROGRAM_ID,\n LIQSOL_TOKEN_PROGRAM_ID,\n} from '../constants';\nimport {\n deriveDistributionStatePDA,\n deriveUserRecordPDA,\n deriveLiqsolMintAuthorityPDA,\n} from '../utils';\n\nexport class DistributionClient {\n constructor(private provider: AnchorProvider) { }\n\n /** Wrapped Anchor Program for Distribution */\n private get program(): Program<Distribution> {\n const idlWithAddress = {\n ...JSON.parse(JSON.stringify(DistributionIDL)),\n address: DISTRIBUTION_PROGRAM_ID.toString(),\n };\n return new Program(idlWithAddress as any, this.provider) as Program<Distribution>;\n }\n\n /** Derive the PDA for global distribution state */\n deriveStatePDA(): PublicKey {\n return deriveDistributionStatePDA()[0];\n }\n\n /** Derive the PDA for a user’s record */\n deriveUserRecordPDA(user: PublicKey): PublicKey {\n return deriveUserRecordPDA(user)[0];\n }\n\n /** Fetch on-chain distribution state */\n async getState(): Promise<any> {\n return this.program.account.distributionState.fetch(this.deriveStatePDA());\n }\n\n /** Fetch a user’s record or return null if it doesn’t exist */\n async getUserRecord(user: PublicKey): Promise<any | null> {\n try {\n return await this.program.account.userRecord.fetch(\n this.deriveUserRecordPDA(user)\n );\n } catch {\n return null;\n }\n }\n\n /** Build an `initialize` transaction for the distribution program */\n async buildInitializeTransaction(user: PublicKey): Promise<Transaction> {\n const [statePda] = deriveDistributionStatePDA();\n const ix = await this.program.methods\n .initialize()\n .accounts({\n authority: user,\n distributionState: statePda,\n systemProgram: SystemProgram.programId,\n rent: web3.SYSVAR_RENT_PUBKEY,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Build an `updateUser` transaction (register or refresh a user record) */\n async buildUpdateUserTransaction(user: PublicKey): Promise<Transaction> {\n const statePda = this.deriveStatePDA();\n const userPda = this.deriveUserRecordPDA(user);\n\n // Fetch state to get the liqSOL mint address\n const state: any = await this.getState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const [stakeControllerStatePda] = PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n\n const ix = await this.program.methods\n .updateUser()\n .accounts({\n user,\n userAta,\n userRecord: userPda,\n authority: user,\n payer: user,\n distributionState: statePda,\n stakeControllerState: stakeControllerStatePda,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Build a `withdraw` transaction */\n async buildWithdrawTransaction(user: PublicKey, amount: number): Promise<Transaction> {\n const statePda = this.deriveStatePDA();\n const userPda = this.deriveUserRecordPDA(user);\n\n // Fetch state for the mint\n const state: any = await this.getState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const [stakeControllerStatePda] = PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n const [controllerAuthPda] = PublicKey.findProgramAddressSync(\n [Buffer.from('stake_authority')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n\n const ix = await this.program.methods\n .withdraw(new BN(amount))\n .accounts({\n user,\n userAta,\n userRecord: userPda,\n distributionState: statePda,\n liqsolMint,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n stakeControllerState: stakeControllerStatePda,\n controllerAuthority: controllerAuthPda,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Build a `claimRewards` transaction */\n async buildClaimRewardsTransaction(user: PublicKey): Promise<Transaction> {\n const statePda = this.deriveStatePDA();\n const userPda = this.deriveUserRecordPDA(user);\n\n // Fetch state for the mint\n const state: any = await this.getState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n const [mintAuthPda] = deriveLiqsolMintAuthorityPDA();\n\n const ix = await this.program.methods\n .claimRewards()\n .accounts({\n user,\n userAta,\n userRecord: userPda,\n distributionState: statePda,\n liqsolMint,\n liqsolProgram: LIQSOL_TOKEN_PROGRAM_ID,\n liqsolMintAuthority: mintAuthPda,\n instructionsSysvar: web3.SYSVAR_INSTRUCTIONS_PUBKEY,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /** Send & confirm a single-IX transaction; returns the tx signature */\n async sendTransaction(\n tx: Transaction,\n signers: import('@solana/web3.js').Signer[] = []\n ): Promise<string> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n return this.provider.sendAndConfirm(tx, signers);\n }\n\n /** Simulate a single-IX transaction; returns error (if any) + compute units used */\n async simulateTransaction(\n tx: Transaction\n ): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(versioned, {\n sigVerify: false,\n });\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n}","// src/solana/clients/ValidatorLeaderboardClient.ts\nimport { AnchorProvider, Program, BN } from '@coral-xyz/anchor';\nimport { PublicKey, Transaction, TransactionInstruction, SystemProgram, VersionedTransaction } from '@solana/web3.js';\nimport {\n deriveLeaderboardHeadPDA,\n deriveValidatorRecordPDA,\n deriveTop10CachePDA,\n} from '../utils';\nimport { VALIDATOR_LEADERBOARD_PROGRAM_ID, ValidatorLeaderboard, ValidatorLeaderboardIDL } from '../constants';\n\nexport class ValidatorLeaderboardClient {\n constructor(private provider: AnchorProvider) { }\n\n /**\n * Wrapped Anchor Program for ValidatorLeaderboard\n */\n private get program(): Program<ValidatorLeaderboard> {\n const idlWithAddress = {\n ...JSON.parse(JSON.stringify(ValidatorLeaderboardIDL)),\n address: VALIDATOR_LEADERBOARD_PROGRAM_ID.toString(),\n };\n return new Program(idlWithAddress as any, this.provider) as Program<ValidatorLeaderboard>;\n }\n\n /** Derive the PDA for the leaderboard head */\n deriveHeadPDA(): PublicKey {\n return deriveLeaderboardHeadPDA()[0];\n }\n\n /** Derive the PDA for a given validator record */\n deriveRecordPDA(voteAccount: PublicKey): PublicKey {\n return deriveValidatorRecordPDA(voteAccount)[0];\n }\n\n /**\n * Build the initialize instruction as a Transaction\n */\n async buildInitializeTransaction(authority: PublicKey): Promise<Transaction> {\n const [headPda] = deriveLeaderboardHeadPDA();\n const ix = await this.program.methods\n .initialize()\n .accounts({\n authority,\n leaderboardHead: headPda,\n systemProgram: SystemProgram.programId,\n } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /**\n * Build an updateValidator transaction\n */\n async buildUpdateValidatorTransaction(params: {\n authority: PublicKey;\n registrant: PublicKey;\n voteAccount: PublicKey;\n vpp: number;\n insertAfter?: PublicKey;\n insertBefore?: PublicKey;\n currentPrev?: PublicKey;\n currentNext?: PublicKey;\n }): Promise<Transaction> {\n const { authority, registrant, voteAccount, vpp, insertAfter, insertBefore, currentPrev, currentNext } = params;\n const [headPda] = deriveLeaderboardHeadPDA();\n const [recPda] = deriveValidatorRecordPDA(voteAccount);\n\n const accounts: any = {\n registrant,\n voteAccount,\n validatorRecord: recPda,\n leaderboardHead: headPda,\n systemProgram: SystemProgram.programId,\n ...(insertAfter && { insertAfter }),\n ...(insertBefore && { insertBefore }),\n ...(currentPrev && { currentPrev }),\n ...(currentNext && { currentNext }),\n };\n\n const ix = await this.program.methods\n .updateValidator(new BN(vpp))\n .accounts(accounts)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /**\n * Build an updateTop10Cache transaction\n */\n async buildUpdateTop10CacheTransaction(params: {\n authority: PublicKey;\n top10Validators: PublicKey[];\n }): Promise<Transaction> {\n const { authority, top10Validators } = params;\n if (top10Validators.length !== 10) {\n throw new Error('Must supply exactly 10 validators');\n }\n const [cachePda] = deriveTop10CachePDA();\n const ix = await this.program.methods\n .updateTop10Cache(top10Validators)\n .accounts({ authority, cache: cachePda, systemProgram: SystemProgram.programId } as any)\n .instruction();\n\n return new Transaction().add(ix);\n }\n\n /**\n * Fetch the cached top 10 validators via a view call\n */\n async getCachedTop10(): Promise<PublicKey[]> {\n const [cachePda] = deriveTop10CachePDA();\n return this.program.methods\n .getCachedTop10()\n .accounts({ cache: cachePda } as any)\n .view();\n }\n\n /**\n * Traverse the on-chain linked list and return the sequence of PublicKeys\n */\n async getLeaderboard(): Promise<PublicKey[]> {\n const [headPda] = deriveLeaderboardHeadPDA();\n let headAccount;\n try {\n headAccount = await this.program.account.leaderboardHead.fetch(headPda);\n } catch {\n return [];\n }\n const result: PublicKey[] = [];\n let cursor: PublicKey = headAccount.nextValidator;\n while (cursor && !cursor.equals(PublicKey.default)) {\n result.push(cursor);\n const rec = await this.program.account.validatorRecord.fetch(cursor);\n cursor = rec.nextValidator;\n }\n return result;\n }\n\n /**\n * Fetch a single validator record or null\n */\n async getRecord(voteAccount: PublicKey): Promise<any | null> {\n const [recPda] = deriveValidatorRecordPDA(voteAccount);\n try {\n return await this.program.account.validatorRecord.fetch(recPda);\n } catch {\n return null;\n }\n }\n\n /**\n * Send & confirm a single-IX Transaction; returns the signature\n */\n async sendTransaction(\n tx: Transaction,\n signers: import('@solana/web3.js').Signer[] = []\n ): Promise<string> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n return this.provider.sendAndConfirm(tx, signers);\n }\n\n /**\n * Simulate a single-IX Transaction; returns any err + compute units consumed\n */\n async simulateTransaction(\n tx: Transaction\n ): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(versioned, { sigVerify: false });\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n}\n","import {\n Connection,\n PublicKey as SolPubKey,\n Transaction,\n VersionedTransaction,\n TransactionSignature,\n Commitment,\n} from '@solana/web3.js';\nimport { AnchorProvider } from '@coral-xyz/anchor';\nimport { BaseSignerWalletAdapter } from '@solana/wallet-adapter-base';\nimport { IStakingClient, SolanaTransaction, StakerConfig } from '../../staker/types';\nimport { ChainID, ExternalNetwork, KeyType, PublicKey } from '@wireio/core';\nimport { DepositClient } from './clients/deposit.client';\nimport { DistributionClient } from './clients/distribution.client';\nimport { ValidatorLeaderboardClient } from './clients/leaderboard.client';\n\nconst commitment: Commitment = 'confirmed';\n\nexport class SolanaStakingClient implements IStakingClient {\n public pubKey: PublicKey;\n public network: ExternalNetwork;\n\n public connection: Connection;\n public anchor: AnchorProvider;\n\n private depositClient: DepositClient;\n private distributionClient: DistributionClient;\n private leaderboardClient: ValidatorLeaderboardClient;\n\n balanceNative: number = 0;\n balanceLiquid: number = 0;\n\n get solPubKey(): SolPubKey {\n return new SolPubKey(this.pubKey.data.array);\n }\n\n constructor(private config: StakerConfig) {\n // 1) unwrap & validate wallet adapter\n const adapter = config.provider as BaseSignerWalletAdapter;\n if (!adapter.publicKey) {\n throw new Error('Solana wallet adapter not connected');\n }\n\n // 2) sanity‐check wire ↔ solana pubkey\n const publicKey = adapter.publicKey;\n const wirePub = new PublicKey(KeyType.ED, publicKey.toBytes());\n if (!wirePub.equals(config.pubKey)) {\n throw new Error('Passed-in pubKey doesn\\'t match adapter.publicKey');\n }\n\n this.network = config.network;\n this.pubKey = wirePub;\n this.connection = new Connection(config.network.rpcUrls[0], commitment);\n this.setBalances();\n\n const anchorWallet = {\n publicKey,\n async signTransaction<T extends SolanaTransaction>(tx: T): Promise<T> {\n return adapter.signTransaction(tx);\n },\n async signAllTransactions<T extends SolanaTransaction>(txs: T[]): Promise<T[]> {\n return Promise.all(txs.map((tx) => adapter.signTransaction(tx)));\n },\n };\n\n this.anchor = new AnchorProvider(\n this.connection,\n anchorWallet,\n { commitment }\n );\n\n // 4) staking clients\n this.depositClient = new DepositClient(this.anchor);\n this.distributionClient = new DistributionClient(this.anchor);\n this.leaderboardClient = new ValidatorLeaderboardClient(this.anchor);\n }\n\n /**\n * Update the native and liquid balances.\n * @returns The updated balances.\n */\n async setBalances() {\n this.balanceNative = await this.connection.getBalance(this.solPubKey);\n this.balanceLiquid = 0; // TODO fetch liq balance\n\n return { native: this.balanceNative, liquid: this.balanceLiquid };\n }\n\n /**\n * Deposit funds into the staking pool.\n * @param lamports The amount to deposit (in lamports).\n * @returns The transaction signature.\n */\n async deposit(lamports: number): Promise<string> {\n const tx = await this.depositClient.buildDepositTx(\n this.solPubKey,\n lamports,\n );\n const signed = await this.signTransaction(tx.transaction);\n return this.sendTransaction(signed);\n }\n\n async signTransaction(tx: SolanaTransaction): Promise<SolanaTransaction> {\n return await this.anchor.wallet.signTransaction(tx);\n }\n\n async sendTransaction(signed: SolanaTransaction): Promise<TransactionSignature> {\n return await this.anchor.sendAndConfirm(signed);\n }\n}","// src/staker/staker.ts\n\nimport { ChainID, Curve, EvmChainID, SolChainID } from '@wireio/core';\nimport { IStakingClient, StakeBalance, StakerConfig } from './types';\nimport { SolanaStakingClient } from '../networks/solana/solana';\nimport { EthereumStakingClient } from '../networks/ethereum/ethereum';\n\nexport class Staker {\n private clients: Map<ChainID, IStakingClient> = new Map();\n\n constructor(config: StakerConfig | StakerConfig[]) {\n if (!Array.isArray(config)) config = [config];\n\n config.forEach((cfg) => {\n switch (cfg.network.chainId) {\n case SolChainID.WireTestnet:\n this.clients.set(cfg.network.chainId, new SolanaStakingClient(cfg));\n break;\n\n // case EvmChainID.Sepolia:\n // this.clients.set(EvmChainID.Sepolia, new EthereumStakingClient(cfg));\n // break;\n default:\n throw new Error(`Unsupported network curve: ${cfg.network.name}`);\n }\n });\n }\n\n /** Return the raw client (if any) for a chain */\n getClient(chainId: ChainID): IStakingClient | undefined {\n return this.clients.get(chainId);\n }\n\n /** Convenience: ensure a client exists or throw a friendly error */\n private ensureClient(chainId: ChainID): IStakingClient {\n const c = this.clients.get(chainId);\n if (!c) throw new Error(`Staker not initialized for chain ${chainId}`);\n return c;\n }\n\n /**\n * Deposit funds into the staking pool.\n * @param chainId The chain ID to deposit into.\n * @param amount The amount to deposit (in smallest unit i.e. Lamport or Wei).\n * @returns The transaction signature.\n */\n deposit(chainId: ChainID, amount: number): Promise<string> {\n return this.ensureClient(chainId).deposit(amount);\n }\n\n getBalance(chainId: ChainID): Promise<StakeBalance> {\n return this.ensureClient(chainId).setBalances();\n }\n\n // …withdraw, claimRewards, etc…\n}","/**\n * @module EthereumContractService\n * \n * Provides a unified service for interacting with Ethereum smart contracts using ethers.js.\n * \n * This module includes:\n * - ABI imports for ERC20, ERC721, and ERC1155 token standards.\n * - Address book and contract configuration types.\n * - A service class for managing contract instances, interfaces, and utility methods for read/write access.\n * - Utility for decoding custom errors and events using a combined interface of all known ABIs.\n * \n * @remarks\n * - Update the `ADDRESSES` and `CONTRACTS` objects to match your deployment.\n * - The service supports both read-only and write-enabled contract handles, depending on the presence of a signer.\n * - The `omniInterface` property allows decoding of errors and events across all included ABIs.\n * \n * @example\n * ```typescript\n * const service = new EthereumContractService({ provider, signer });\n * const stakeContract = service.getContract('Stake');\n * const address = service.getAddress('Stake');\n * ```\n */\n\nimport ERC20Artifact from '../../assets/ethereum/ABI/token/ERC20Token.sol/ERC20Token.json';\nimport ERC721Artifact from '../../assets/ethereum/ABI/token/ERC721Token.sol/ERC721Token.json';\nimport ERC1155Artifact from '../../assets/ethereum/ABI/token/ERC1155Token.sol/ERC1155Token.json';\nimport { AddressBook, ContractName } from './types';\nimport { Contract, ethers, providers, Signer } from 'ethers';\nimport { JsonFragment } from '@ethersproject/abi';\nimport { ErrorDescription } from '@ethersproject/abi/lib/interface';\n\nexport const ERC20Abi = ERC20Artifact.abi;\nexport const ERC721Abi = ERC721Artifact.abi;\nexport const ERC1155Abi = ERC1155Artifact.abi;\n\n// Update this to be your staking contract address book\nexport const ADDRESSES: AddressBook = {\n Stake: '0xEeaCBa95852324eAc63fE2711aFe0283adf3bC93',\n};\n\nexport type Contracts<T extends string = ContractName> = Record<T, ContractConfig>;\n\nexport type ContractConfig = {\n address: string;\n abi: JsonFragment[];\n}\n\nexport const CONTRACTS: Contracts<ContractName> = {\n Stake: { address: ADDRESSES.Stake, abi: undefined as any }, // Replace with actual ABI artifact when available\n // Stake: { address: ADDRESSES.Stake, abi: Stake.abi },\n}\n\nexport interface ContractOptions {\n /** RPC endpoint or injected EIP-1193 provider */\n provider?: ethers.providers.Provider;\n /** Only required if you need to send txns */\n signer?: Signer;\n}\n\n\nexport class EthereumContractService {\n private provider?: providers.Provider;\n private signer?: Signer;\n\n public readonly contract: { [N in ContractName]: ethers.Contract } = {} as any;\n public readonly iface: { [N in ContractName]: ethers.utils.Interface } = {} as any;\n\n constructor(opts: ContractOptions) {\n this.provider = opts.provider;\n this.signer = opts.signer;\n\n (Object.keys(CONTRACTS) as ContractName[]).forEach((name) => {\n const { address, abi } = CONTRACTS[name];\n this.iface[name] = new ethers.utils.Interface(abi);\n this.contract[name] = new ethers.Contract(address, abi, this.signer ?? this.provider);\n });\n }\n\n /** Get raw address for a contract */\n public getAddress(name: ContractName): string {\n return CONTRACTS[name].address;\n }\n\n /** Utility: get a read-only handle even if signer is present */\n getReadOnly(name: ContractName): Contract {\n const { address, abi } = CONTRACTS[name];\n return new Contract(address, abi, this.provider);\n }\n\n /** Utility: get a write-enabled handle (throws if no signer) */\n getWrite(name: ContractName): Contract {\n if (!this.signer) throw new Error('No signer available for write calls');\n const { address, abi } = CONTRACTS[name];\n return new Contract(address, abi, this.signer);\n }\n\n /** Expose network info */\n async getNetwork() {\n return this.provider?.getNetwork();\n }\n\n /** List all known contract names */\n public listContractNames(): ContractName[] {\n return Object.keys(CONTRACTS) as ContractName[];\n }\n\n /** Get Interface instance for a contract */\n public getInterface(name: ContractName): ethers.utils.Interface {\n const iface = this.iface[name];\n if (!iface) throw new Error(`Interface not initialized for ${name}`);\n return iface;\n }\n\n /** Get live Contract instance */\n public getContract(name: ContractName): ethers.Contract {\n const ctr = this.contract[name];\n if (!ctr) throw new Error(`Contract not initialized for ${name}`);\n return ctr;\n }\n\n /** A unified Interface containing all ABIs (addresses + extra decoding-only)\n * to parse custom errors or events. */\n public get omniInterface(): ethers.utils.Interface {\n const all: any[] = [];\n\n // Add all artifacts to the interface\n const allArtifacts = [\n ERC20Artifact,\n ERC721Artifact,\n ERC1155Artifact,\n // Add more artifacts as needed\n ];\n\n // Add all ABIs to the omnibus interface\n allArtifacts.forEach(artifact => {\n if (artifact && artifact.abi) {\n all.push(...artifact.abi);\n }\n });\n\n // dedupe\n const seen = new Set<string>();\n const dedup: any[] = [];\n for (const item of all) {\n try {\n const frag = ethers.utils.Fragment.from(item);\n const key = `${frag.type}:${frag.format(ethers.utils.FormatTypes.full)}`.toLowerCase();\n if (!seen.has(key)) {\n seen.add(key);\n dedup.push(item);\n }\n } catch { }\n }\n\n return new ethers.utils.Interface(dedup);\n }\n\n /** Decode a revert or custom error payload */\n public parseError(revertData: string): ErrorDescription {\n try {\n return this.omniInterface.parseError(revertData);\n } catch {\n throw new Error(`Unable to parse error data: ${revertData}`);\n }\n }\n}","// src/networks/ethereum/ethereum.ts\n\nimport { ethers } from 'ethers';\nimport { IStakingClient, StakerConfig } from '../../staker/types';\nimport { PublicKey as WirePubKey } from '@wireio/core';\nimport { ERC20Abi } from './contract'; // TODO replace with staking contract ABI\nimport axios from 'axios';\n\n// — replace with your actual staking contract ABI & address —\nconst STAKING_CONTRACT_ADDRESS = '0xYourStakingContractAddress';\n\nexport class EthereumStakingClient implements IStakingClient {\n public readonly pubKey: WirePubKey;\n private readonly provider: ethers.providers.Web3Provider;\n private readonly signer: ethers.Signer;\n private readonly contract: ethers.Contract;\n\n constructor(private config: StakerConfig) {\n // 1) unwrap & validate Ethers provider\n if (!ethers.providers.Web3Provider.isProvider(config.provider as any)) {\n throw new Error('Expected a Web3Provider for Ethereum');\n }\n this.provider = config.provider as ethers.providers.Web3Provider;\n\n // 2) signer\n this.signer = this.provider.getSigner();\n this.pubKey = config.pubKey as WirePubKey;\n\n // 4) instantiate your contract wrapper\n this.contract = new ethers.Contract(\n STAKING_CONTRACT_ADDRESS,\n ERC20Abi,\n this.signer\n );\n }\n\n /** Submit a deposit; returns the transaction hash */\n async deposit(amount: number): Promise<string> {\n // build & send in one go\n const txResponse = await this.contract.deposit(\n ethers.BigNumber.from(amount),\n {\n // if your contract needs ETH value:\n // value: ethers.BigNumber.from(amount),\n }\n );\n\n // wait for on-chain confirmation (optional)\n await txResponse.wait();\n return txResponse.hash;\n }\n\n /** (Optional) dry-run via eth_call */\n async simulateDeposit(amount: number): Promise<any> {\n return this.provider.call({\n to: STAKING_CONTRACT_ADDRESS,\n data: this.contract.interface.encodeFunctionData('deposit', [\n ethers.BigNumber.from(amount)\n ]),\n });\n }\n\n // TODO: implement withdraw, claimRewards, etc.\n}","export const CONTRACT_NAMES = [\n 'Stake',\n] as const;\n\nexport type ContractName = typeof CONTRACT_NAMES[number];\nexport type AddressBook = Record<ContractName, string>;"],"names":["DepositIDL","LiqSolTokenIDL","StakeControllerIDL","StakeRegistryIDL","TreasuryIDL","ValidatorRegistryIDL","YieldOracleIDL","distributionJson","validatorLeaderboardJson","PublicKey","SolPubKey"],"mappings":";;;;;;;AAMa,MAAA,EAAA,GAAK,CAAC,IAAyB,KAAA;AACxC,EAAA,OAAO,UAAU,IAAI,CAAA,CAAA,CAAA,CAAA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"stake.m.js","sources":["../src/common/utils.ts","../src/networks/solana/constants.ts","../src/networks/solana/program.ts","../src/networks/solana/clients/deposit.client.ts","../src/networks/solana/clients/distribution.client.ts","../src/networks/solana/solana.ts","../src/staker/staker.ts","../src/networks/ethereum/contract.ts","../src/networks/ethereum/ethereum.ts","../src/networks/ethereum/types.ts","../src/networks/solana/clients/leaderboard.client.ts"],"sourcesContent":["/**\n * Static utility functions for working with Wire Network Staking Protocol.\n * \n * @module utils\n */\n\nexport const hi = (name: string): string => {\n return `Hello, ${name}!`;\n}","// src/networks/solana/constants.ts\nimport { PublicKey } from '@solana/web3.js';\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from '@solana/spl-token';\nimport { AnchorProvider, Program } from '@coral-xyz/anchor';\n\n// IDLs (as generated artifacts)\nimport DepositIDL from '../../assets/solana/idl/deposit.json';\nimport StakeControllerIDL from '../../assets/solana/idl/stake_controller.json';\nimport ValidatorLeaderboardIDL from '../../assets/solana/idl/validator_leaderboard.json';\nimport LiqSolTokenIDL from '../../assets/solana/idl/liq_sol_token.json';\nimport DistributionIDL from '../../assets/solana/idl/distribution.json';\nimport YieldOracleIDL from '../../assets/solana/idl/yield_oracle.json';\n\n// Types (optional; keep the ones you use)\nimport type { Deposit } from '../../assets/solana/types/deposit';\n\n// ---------- Program IDs (from IDL.address) ----------\nexport const DEPOSIT_PROGRAM_ID = new PublicKey(DepositIDL.address);\nexport const STAKE_CONTROLLER_PROGRAM_ID = new PublicKey(StakeControllerIDL.address);\nexport const VALIDATOR_LEADERBOARD_PROGRAM_ID = new PublicKey(ValidatorLeaderboardIDL.address);\nexport const LIQSOL_TOKEN_PROGRAM_ID = new PublicKey(LiqSolTokenIDL.address);\nexport const DISTRIBUTION_PROGRAM_ID = new PublicKey(DistributionIDL.address);\nexport const YIELD_ORACLE_PROGRAM_ID = new PublicKey(YieldOracleIDL.address);\n\n// ---------- Protocol constants ----------\nexport const MIN_SOL_TO_PARTICIPATE = 1_000_000_000; // 1 SOL (lamports)\n\n// The liqSOL Mint is a PDA on the LiqSOL token program\nexport const LIQSOL_MINT_ADDRESS: PublicKey = PublicKey.findProgramAddressSync(\n [Buffer.from('liq_sol_mint')],\n LIQSOL_TOKEN_PROGRAM_ID\n)[0];\n\n// Re-export SPL ids\nexport { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID };\n\n// ---------- Program factories ----------\n/** Create Anchor Program client for the Deposit program (with correct address) */\nexport const getDepositProgram = (provider: AnchorProvider): Program<Deposit> => {\n const idlWithAddress = { ...JSON.parse(JSON.stringify(DepositIDL)), address: DEPOSIT_PROGRAM_ID.toString() };\n return new Program(idlWithAddress as any, provider) as Program<Deposit>;\n};\n\n// You can add similar helpers for other programs if you want:\n// export const getDistributionProgram = <T>(provider: AnchorProvider) => { ... }\n\n// ---------- PDA helpers ----------\n\n// Deposit\nexport const deriveDepositAuthorityPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('program_authority')], \n DEPOSIT_PROGRAM_ID\n );\n\n// LiqSOL Token program\nexport const deriveLiqsolMintPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('liq_sol_mint')], \n LIQSOL_TOKEN_PROGRAM_ID\n );\n\n/** ✅ FIXED: this must be derived with the LiqSOL token **program id**, not the mint address */\nexport const deriveLiqsolMintAuthorityPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('mint_authority')], \n LIQSOL_TOKEN_PROGRAM_ID\n );\n\n// Stake Controller\nexport const deriveStakeControllerVaultPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('vault')], \n STAKE_CONTROLLER_PROGRAM_ID\n );\n\nexport const deriveStakeControllerReservePoolPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('reserve_pool')], \n STAKE_CONTROLLER_PROGRAM_ID\n );\n\nexport const deriveStakeControllerStatePDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('stake_controller')], \n STAKE_CONTROLLER_PROGRAM_ID\n );\n\nexport const deriveGlobalStakeInfoPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('global_stake_info')], \n STAKE_CONTROLLER_PROGRAM_ID\n );\n\nexport const deriveBucketAuthorityPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('liqsol_bucket')], \n STAKE_CONTROLLER_PROGRAM_ID\n );\n\nexport const derivePayRateHistoryPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('pay_rate_history')], \n STAKE_CONTROLLER_PROGRAM_ID\n );\n\n// Distribution\nexport const deriveDistributionStatePDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('distribution_state')], \n DISTRIBUTION_PROGRAM_ID\n );\n\nexport const deriveUserRecordPDA = (user: PublicKey): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('user_record'), user.toBuffer()], \n DISTRIBUTION_PROGRAM_ID\n );\n\n// Validator Leaderboard\nexport const deriveLeaderboardHeadPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('leaderboard_head')], \n VALIDATOR_LEADERBOARD_PROGRAM_ID\n );\n\nexport const deriveValidatorRecordPDA = (voteAccount: PublicKey): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('validator_record'), voteAccount.toBuffer()], \n VALIDATOR_LEADERBOARD_PROGRAM_ID\n );\n\nexport const deriveTop10CachePDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('top_10_cache')], \n VALIDATOR_LEADERBOARD_PROGRAM_ID\n );\n\nexport const deriveStakeControllerAuthorityPDA = (): [PublicKey, number] =>\n PublicKey.findProgramAddressSync(\n [Buffer.from('stake_authority')],\n STAKE_CONTROLLER_PROGRAM_ID\n );\n\n// ---------- SPL helper ----------\n/** User’s liqSOL ATA (Token-2022) */\nexport const getUserLiqsolATA = (user: PublicKey): PublicKey =>\n getAssociatedTokenAddressSync(\n LIQSOL_MINT_ADDRESS,\n user,\n /* owner is PDA? */ false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );","import { AnchorProvider, Program } from '@coral-xyz/anchor';\nimport depositJson from '../../assets/solana/idl/deposit.json';\nimport stakeControllerJson from '../../assets/solana/idl/stake_controller.json';\nimport liqSolTokenJson from '../../assets/solana/idl/liq_sol_token.json';\nimport distributionJson from '../../assets/solana/idl/distribution.json';\nimport validatorLeaderboardJson from '../../assets/solana/idl/validator_leaderboard.json';\n\nimport type { Deposit } from '../../assets/solana/types/deposit';\nimport type { StakeController } from '../../assets/solana/types/stake_controller';\nimport type { LiqSolToken } from '../../assets/solana/types/liq_sol_token';\nimport type { Distribution } from '../../assets/solana/types/distribution';\nimport type { ValidatorLeaderboard } from '../../assets/solana/types/validator_leaderboard';\n\nimport {\n DEPOSIT_PROGRAM_ID,\n STAKE_CONTROLLER_PROGRAM_ID,\n LIQSOL_TOKEN_PROGRAM_ID,\n DISTRIBUTION_PROGRAM_ID,\n VALIDATOR_LEADERBOARD_PROGRAM_ID\n} from '../solana/constants';\n\ntype Entry<IDL> = { idl: IDL & { address: string }, address: string };\n\nconst PROGRAMS = {\n deposit: {\n idl: depositJson,\n address: DEPOSIT_PROGRAM_ID.toBase58()\n } as Entry<Deposit>,\n stakeController: {\n idl: stakeControllerJson,\n address: STAKE_CONTROLLER_PROGRAM_ID.toBase58()\n } as Entry<StakeController>,\n liqSolToken: {\n idl: liqSolTokenJson,\n address: LIQSOL_TOKEN_PROGRAM_ID.toBase58()\n } as Entry<LiqSolToken>,\n distribution: {\n idl: distributionJson,\n address: DISTRIBUTION_PROGRAM_ID.toBase58()\n } as Entry<Distribution>,\n validatorLeaderboard: {\n idl: validatorLeaderboardJson,\n address:VALIDATOR_LEADERBOARD_PROGRAM_ID.toBase58()\n } as Entry<ValidatorLeaderboard>,\n} as const;\n\nexport class SolanaProgramService {\n constructor(private provider: AnchorProvider) { }\n\n getProgram<K extends keyof typeof PROGRAMS>(name: K): Program<(typeof PROGRAMS)[K]['idl']> {\n const { idl, address } = PROGRAMS[name];\n // Ensure the IDL has the right address (avoid drift)\n const idlWithAddr = { ...idl, address };\n return new Program(idlWithAddr as any, this.provider) as Program<(typeof PROGRAMS)[K]['idl']>;\n }\n\n listProgramNames(): Array<keyof typeof PROGRAMS> {\n return Object.keys(PROGRAMS) as Array<keyof typeof PROGRAMS>;\n }\n}","import { AnchorProvider, BN } from '@coral-xyz/anchor';\nimport {\n PublicKey,\n Transaction,\n SystemProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n SYSVAR_STAKE_HISTORY_PUBKEY,\n StakeProgram,\n ComputeBudgetProgram,\n VersionedTransaction,\n Signer,\n TransactionSignature,\n} from '@solana/web3.js';\n\nimport {\n getAssociatedTokenAddress,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID\n} from '@solana/spl-token';\n\nimport {\n STAKE_CONTROLLER_PROGRAM_ID,\n LIQSOL_TOKEN_PROGRAM_ID,\n DISTRIBUTION_PROGRAM_ID,\n MIN_SOL_TO_PARTICIPATE,\n deriveDepositAuthorityPDA,\n deriveLiqsolMintPDA,\n deriveLiqsolMintAuthorityPDA,\n deriveStakeControllerReservePoolPDA,\n deriveStakeControllerVaultPDA,\n deriveStakeControllerStatePDA,\n deriveGlobalStakeInfoPDA,\n deriveBucketAuthorityPDA,\n deriveDistributionStatePDA,\n deriveUserRecordPDA,\n derivePayRateHistoryPDA,\n} from '../constants';\nimport { SolanaProgramService } from '../program';\n\n/**\n * DepositClient: builds, simulates, and sends deposit txns matching the latest IDL.\n *\n */\nexport class DepositClient {\n private programs = new SolanaProgramService(this.provider);\n\n constructor(private provider: AnchorProvider) { }\n\n /**\n * Build the deposit transaction (compute-budget bump + deposit Ix).\n * Returns the Transaction and the derived ephemeral stake pubkey.\n */\n async buildDepositTx(\n user: PublicKey,\n amount: number\n ): Promise<{ transaction: Transaction; ephemeralStakePubkey: PublicKey }> {\n if (amount < MIN_SOL_TO_PARTICIPATE) {\n throw new Error(`Minimum deposit is ${MIN_SOL_TO_PARTICIPATE / 1e9} SOL`);\n }\n\n const program = this.programs.getProgram('deposit');\n\n // PDAs\n const [programAuthority] = deriveDepositAuthorityPDA();\n const [liqsolMint] = deriveLiqsolMintPDA();\n const [liqsolMintAuthority] = deriveLiqsolMintAuthorityPDA();\n const [reservePool] = deriveStakeControllerReservePoolPDA();\n const [vault] = deriveStakeControllerVaultPDA();\n const [controllerState] = deriveStakeControllerStatePDA();\n const [globalStakeInfo] = deriveGlobalStakeInfoPDA();\n const [bucketAuthority] = deriveBucketAuthorityPDA();\n const [distributionState] = deriveDistributionStatePDA();\n const [userRecord] = deriveUserRecordPDA(user);\n const [payRateHistory] = derivePayRateHistoryPDA();\n\n // Token-2022 ATAs\n const userAta = await getAssociatedTokenAddress(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID\n );\n const bucketTokenAccount = await getAssociatedTokenAddress(\n liqsolMint,\n bucketAuthority,\n /* allowOwnerOffCurve */ true,\n TOKEN_2022_PROGRAM_ID\n );\n\n // Ephemeral stake account\n const seed = Math.floor(Math.random() * 0xffffffff);\n const ephemeralSeed = `ephemeral_${seed}`;\n const ephemeralStakePubkey = await PublicKey.createWithSeed(\n user,\n ephemeralSeed,\n StakeProgram.programId\n );\n\n // Build the deposit instruction\n const depositIx = await program.methods\n .deposit(new BN(amount), seed)\n .accounts({\n user,\n programAuthority,\n systemProgram: SystemProgram.programId,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n liqsolProgram: LIQSOL_TOKEN_PROGRAM_ID,\n payRateHistory,\n stakeProgram: StakeProgram.programId,\n distributionProgram: DISTRIBUTION_PROGRAM_ID,\n\n // mints / ATAs / PDAs\n liqsolMint,\n userAta,\n liqsolMintAuthority,\n reservePool,\n vault,\n ephemeralStake: ephemeralStakePubkey,\n controllerState,\n globalStakeInfo,\n bucketAuthority,\n bucketTokenAccount,\n userRecord,\n distributionState,\n\n // sysvars\n instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,\n clock: SYSVAR_CLOCK_PUBKEY,\n stakeHistory: SYSVAR_STAKE_HISTORY_PUBKEY,\n rent: SYSVAR_RENT_PUBKEY,\n } as any)\n .instruction();\n\n // Prepend compute-budget bump\n const computeIx = ComputeBudgetProgram.setComputeUnitLimit({ units: 400_000 });\n const tx = new Transaction().add(computeIx, depositIx);\n return { transaction: tx, ephemeralStakePubkey };\n }\n\n /** Simulate a transaction (dry-run). */\n async simulate(tx: Transaction): Promise<{ err: any; unitsConsumed: number }> {\n tx.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n tx.recentBlockhash = blockhash;\n\n const versioned = new VersionedTransaction(tx.compileMessage());\n const sim = await this.provider.connection.simulateTransaction(versioned, {\n sigVerify: false,\n });\n return { err: sim.value.err, unitsConsumed: sim.value.unitsConsumed! };\n }\n\n /** Build + send. Returns confirmed signature. */\n async deposit(\n user: PublicKey,\n amount: number,\n signers: Signer[] = []\n ): Promise<TransactionSignature> {\n const { transaction } = await this.buildDepositTx(user, amount);\n transaction.feePayer = this.provider.wallet.publicKey;\n const { blockhash } = await this.provider.connection.getLatestBlockhash();\n transaction.recentBlockhash = blockhash;\n return this.provider.sendAndConfirm(transaction, signers);\n }\n}","import { AnchorProvider, Program, BN } from '@coral-xyz/anchor';\nimport {\n PublicKey,\n SystemProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n Transaction,\n TransactionInstruction,\n} from '@solana/web3.js';\nimport {\n getAccount,\n getAssociatedTokenAddressSync,\n} from '@solana/spl-token';\n\nimport { SolanaProgramService } from '../program';\nimport {\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n STAKE_CONTROLLER_PROGRAM_ID,\n YIELD_ORACLE_PROGRAM_ID,\n deriveDistributionStatePDA,\n deriveUserRecordPDA,\n deriveStakeControllerStatePDA,\n deriveBucketAuthorityPDA,\n derivePayRateHistoryPDA,\n deriveStakeControllerAuthorityPDA,\n} from '../constants';\nimport { Distribution } from '../../../assets/solana/types/distribution';\nimport { MismatchCandidate, CorrectAndRegisterBuild, CorrectionPlan } from '../types';\n\nexport class DistributionClient {\n private programs: SolanaProgramService;\n\n constructor(private provider: AnchorProvider) {\n this.programs = new SolanaProgramService(provider);\n }\n\n /** Anchor Program<Distribution> (address comes from SolanaProgramService) */\n private get program(): Program<Distribution> {\n return this.programs.getProgram('distribution') as Program<Distribution>;\n }\n\n // ───────────────────────────────────────────────────────────────────────────────\n // BASIC READS\n // ───────────────────────────────────────────────────────────────────────────────\n\n /**\n * Fetch Distribution global state.\n */\n async getDistributionState(): Promise<any> {\n const [pda] = deriveDistributionStatePDA();\n return this.program.account.distributionState.fetch(pda);\n }\n\n /**\n * Fetch a user’s UserRecord or null if it doesn’t exist yet.\n */\n async getUserRecord(user: PublicKey): Promise<any | null> {\n const [pda] = deriveUserRecordPDA(user);\n try { return await this.program.account.userRecord.fetch(pda); }\n catch { return null; }\n }\n\n /**\n * Read protocol-tracked balance for a user (from userRecord).\n * Returns (amount, decimals).\n * @default decimals=9\n */\n async getTrackedBalance(user: PublicKey): Promise<{ amount: bigint; decimals: number }> {\n const rec = await this.getUserRecord(user);\n if (!rec) return { amount: ZERO, decimals: 9 };\n const amountStr: string = rec.trackedBalance?.toString?.() ?? '0';\n return { amount: BigInt(amountStr), decimals: 9 };\n }\n\n /**\n * Read *actual* liqSOL token balance (ATA) for a user.\n * If user has no ATA yet, returns 0.\n * @returns { amount, decimals, ata }\n */\n async getActualBalance(user: PublicKey): Promise<{ amount: bigint; decimals: number; ata: PublicKey }> {\n const state = await this.getDistributionState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const ata = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n try {\n const acc = await getAccount(this.provider.connection, ata, 'confirmed', TOKEN_2022_PROGRAM_ID);\n // spl-token returns bigint amount\n return { amount: acc.amount as unknown as bigint, decimals: 9, ata };\n } catch {\n return { amount: ZERO, decimals: 9, ata };\n }\n }\n\n // ───────────────────────────────────────────────────────────────────────────────\n // STATE-CHANGING ACTIONS (single-user)\n // ───────────────────────────────────────────────────────────────────────────────\n\n /**\n * Register / Update a user’s record.\n * - If updating someone else, pass their pubkey as `targetUser` and let the connected wallet be `authority`.\n * - Optionally pass an explicit `authorityUser` if you need to override (must be the connected wallet).\n * Returns the tx signature.\n */\n /**\n * Register / Update a user’s record with the connected wallet as authority.\n * Keeps a single source of truth via `prepareUpdateUser()`.\n */\n async updateUser(targetUser: PublicKey): Promise<string> {\n const { builder } = await this.prepareUpdateUser(targetUser);\n return builder.rpc();\n }\n\n /** Build-only variant (returns the IX) so you can batch. */\n async buildUpdateUserIx(targetUser: PublicKey): Promise<TransactionInstruction> {\n const { builder } = await this.prepareUpdateUser(targetUser);\n return builder.instruction();\n }\n\n /**\n * Claim rewards for a user.\n * @returns tx signature\n */\n async claimRewards(user: PublicKey): Promise<string> {\n const state = await this.getDistributionState();\n const liqsolMint: PublicKey = state.liqsolMint;\n\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const [userRecordPDA] = deriveUserRecordPDA(user);\n const [distributionStatePDA] = deriveDistributionStatePDA();\n const [bucketAuthority] = deriveBucketAuthorityPDA();\n const [payRateHistory] = derivePayRateHistoryPDA();\n\n const bucketTokenAccount = getAssociatedTokenAddressSync(\n liqsolMint,\n bucketAuthority,\n true,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const sig = await this.program.methods\n .claimRewards()\n .accounts({\n user,\n // @ts-ignore\n userAta,\n userRecord: userRecordPDA,\n distributionState: distributionStatePDA,\n liqsolMint,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n bucketAuthority,\n bucketTokenAccount,\n payRateHistory,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n\n return sig;\n }\n\n /**\n * Withdraw liqSOL (amount in base units; e.g. 1e9 = 1 liqSOL).\n * @returns tx signature\n */\n async withdraw(user: PublicKey, amount: bigint | number): Promise<string> {\n const state = await this.getDistributionState();\n const liqsolMint: PublicKey = state.liqsolMint;\n\n const userAta = getAssociatedTokenAddressSync(\n liqsolMint,\n user,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const [userRecordPDA] = deriveUserRecordPDA(user);\n const [distributionStatePDA] = deriveDistributionStatePDA();\n const [stakeControllerState] = deriveStakeControllerStatePDA();\n const [controllerAuthority] = deriveStakeControllerAuthorityPDA();\n\n const sig = await this.program.methods\n .withdraw(new BN(amount.toString()))\n .accounts({\n user,\n // @ts-ignore\n userAta,\n userRecord: userRecordPDA,\n distributionState: distributionStatePDA,\n liqsolMint,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n stakeControllerState,\n controllerAuthority,\n yieldOracleProgram: YIELD_ORACLE_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n\n return sig;\n }\n\n // ───────────────────────────────────────────────────────────────────────────────\n // INSTRUCTION BUILDERS (for bundling into 1 tx)\n // ───────────────────────────────────────────────────────────────────────────────\n\n /** Single prep path used by both send & build. */\n private async prepareUpdateUser(targetUser: PublicKey) {\n const authority = this.provider.wallet?.publicKey;\n if (!authority) throw new Error('Wallet not connected');\n\n const state = await this.getDistributionState();\n const liqsolMint: PublicKey = state.liqsolMint;\n\n const targetUserAta = getAssociatedTokenAddressSync(\n liqsolMint,\n targetUser,\n false,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n const [targetUserRecordPDA] = deriveUserRecordPDA(targetUser);\n const [distributionStatePDA] = deriveDistributionStatePDA();\n const [payRateHistory] = derivePayRateHistoryPDA();\n\n const accounts = {\n user: targetUser,\n userAta: targetUserAta,\n // @ts-ignore (account name casing differences)\n userRecord: targetUserRecordPDA,\n authority,\n payer: authority,\n distributionState: distributionStatePDA,\n liqsolMint,\n instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n stakeControllerProgram: STAKE_CONTROLLER_PROGRAM_ID,\n payRateHistory,\n systemProgram: SystemProgram.programId,\n };\n\n const builder = this.program.methods.updateUser().accounts(accounts as any);\n return { builder, accounts };\n }\n\n // ───────────────────────────────────────────────────────────────────────────────\n // ONE-SHOT BUILDER: correct 0..N others, then register self\n // ───────────────────────────────────────────────────────────────────────────────\n\n /**\n * Build a single transaction that:\n * 1) If self mismatch < 0 → just correct self (single updateUser).\n * 2) Else (mismatch > 0) → correct top candidates (if needed) to free “available” balance\n * and then register self (updateUser).\n *\n * It refuses to build if it can’t free enough to cover the full positive untracked amount\n * (since updateUser has no partial-amount arg).\n */\n async buildCorrectRegisterTx(opts?: {\n /** optional override of computed mismatch; may be positive (register) or negative (self-correct) */\n amount?: bigint;\n /** optionally pass pre-fetched candidates to avoid re-reading on UI flows */\n preloadCandidates?: MismatchCandidate[];\n }): Promise<CorrectAndRegisterBuild> {\n const self = this.provider.wallet?.publicKey;\n if (!self) throw new Error('Wallet not connected');\n\n const state = await this.getDistributionState();\n const liqsolMint: PublicKey = state.liqsolMint;\n const availableBefore = BigInt(state.availableBalance.toString());\n\n // self balances\n const [selfUserRecordPda] = deriveUserRecordPDA(self);\n const { amount: selfTracked } = await this.getTrackedBalance(self);\n const { amount: selfActual, ata: selfUserAta } = await this.getActualBalance(self);\n\n // True on-chain mismatch (can be negative or positive)\n const computedMismatch = selfActual - selfTracked; // + = need to register, - = need to correct self\n\n // Allow caller to suggest an amount (mainly for planning); clamp to real mismatch\n let desired = opts?.amount ?? computedMismatch;\n if (computedMismatch >= ZERO) {\n // clamp down to computedMismatch\n if (desired < ZERO) desired = ZERO;\n if (desired > computedMismatch) desired = computedMismatch;\n } else {\n // negative side: clamp up to computedMismatch (remember computedMismatch is negative)\n if (desired > ZERO) desired = ZERO;\n if (desired < computedMismatch) desired = computedMismatch;\n }\n\n // CASE A: Negative mismatch → just correct self\n if (desired < ZERO) {\n console.log('Building Correct transaction for self with amount:', desired);\n\n const tx = new Transaction().add(await this.buildUpdateUserIx(self));\n return {\n canSucceed: true,\n transaction: tx,\n liqsolMint,\n needToRegister: desired, // negative indicates self-correction\n availableBefore,\n candidates: [],\n plan: { selected: [], willFree: ZERO, deficit: ZERO },\n accounts: { selfUserRecordPda, selfUserAta },\n };\n }\n\n // Reuse the existing “positive mismatch” path\n const needToRegister = desired; // >= 0\n if (needToRegister === ZERO) {\n return {\n canSucceed: false,\n reason: 'No mismatch to resolve.',\n liqsolMint,\n needToRegister,\n availableBefore,\n candidates: [],\n plan: { selected: [], willFree: ZERO, deficit: ZERO },\n accounts: { selfUserRecordPda, selfUserAta },\n };\n }\n\n // Already enough available → just register self\n if (availableBefore >= needToRegister) {\n console.log('Available balance', availableBefore, 'is enough to register self:', needToRegister);\n const registerIx = await this.buildUpdateUserIx(self);\n const tx = new Transaction().add(registerIx);\n return {\n canSucceed: true,\n transaction: tx,\n liqsolMint,\n needToRegister,\n availableBefore,\n candidates: [],\n plan: { selected: [], willFree: ZERO, deficit: ZERO },\n accounts: { selfUserRecordPda, selfUserAta },\n };\n }\n\n // Need to free more\n const missing = needToRegister - availableBefore;\n const candidates = opts?.preloadCandidates ?? (await this.fetchMismatchCandidates());\n\n if (!candidates.length) {\n return {\n canSucceed: false,\n reason: 'No candidates to free available balance.',\n liqsolMint,\n needToRegister,\n availableBefore,\n candidates: [],\n plan: { selected: [], willFree: ZERO, deficit: missing },\n accounts: { selfUserRecordPda, selfUserAta },\n };\n }\n\n const plan = this.chooseCandidatesFor(missing, candidates);\n if (plan.deficit > ZERO) {\n return {\n canSucceed: false,\n reason: `Insufficient freeable balance (need ${missing}, can free ${plan.willFree}).`,\n liqsolMint,\n needToRegister,\n availableBefore,\n candidates,\n plan,\n accounts: { selfUserRecordPda, selfUserAta },\n };\n }\n\n // Build: correct N others, then register self\n const tx = new Transaction();\n for (const c of plan.selected) {\n tx.add(await this.buildUpdateUserIx(c.owner));\n }\n tx.add(await this.buildUpdateUserIx(self));\n\n return {\n canSucceed: true,\n transaction: tx,\n liqsolMint,\n needToRegister,\n availableBefore,\n candidates,\n plan,\n accounts: { selfUserRecordPda, selfUserAta },\n };\n }\n\n\n // ───────────────────────────────────────────────────────────────────────────────\n // MISMATCH DISCOVERY\n // ───────────────────────────────────────────────────────────────────────────────\n\n /**\n * Fetch all distribution user records and turn them into mismatch candidates:\n * rows where `tracked > actual` (delta > 0). Sorted by largest delta first.\n *\n * NOTE: This reads each user’s token account (`getAccount`) to recover\n * the owner and actual balance — simpler and reliable for Token-2022 ATAs.\n */\n async fetchMismatchCandidates(): Promise<MismatchCandidate[]> {\n const state = await this.getDistributionState();\n const liqsolMint: PublicKey = state.liqsolMint;\n\n const records = await this.program.account.userRecord.all();\n if (!records.length) return [];\n\n const out: MismatchCandidate[] = [];\n\n // For each userRecord, read its token account to recover owner + actual\n // (small N is fine; for very large N you can batch or shard).\n for (const rec of records) {\n const userRecordPda = rec.publicKey;\n const userAta: PublicKey = rec.account.userAta;\n const tracked = BigInt(rec.account.trackedBalance.toString());\n\n let actual = ZERO;\n let owner: PublicKey | null = null;\n\n try {\n const acc = await getAccount(this.provider.connection, userAta, 'confirmed', TOKEN_2022_PROGRAM_ID);\n actual = acc.amount as unknown as bigint;\n owner = acc.owner as unknown as PublicKey;\n } catch {\n // missing/closed ATA → actual = 0\n owner = null;\n }\n\n if (!owner) continue;\n\n const delta = tracked - actual;\n if (delta > ZERO) {\n // we only care about freeable deltas\n out.push({ owner, userRecordPda, userAta, tracked, actual, delta });\n }\n }\n\n // Largest first\n out.sort((a, b) => (a.delta === b.delta ? 0 : a.delta > b.delta ? -1 : 1));\n return out;\n }\n\n /**\n * Given a required amount to free (in base units), choose the\n * smallest prefix of candidates (already sorted desc) that can cover it.\n */\n chooseCandidatesFor(required: bigint, candidates: MismatchCandidate[]): CorrectionPlan {\n if (required <= ZERO) return { selected: [], willFree: ZERO, deficit: ZERO };\n\n let willFree = ZERO;\n const selected: MismatchCandidate[] = [];\n\n for (const c of candidates) {\n if (willFree >= required) break;\n selected.push(c);\n willFree += c.delta;\n }\n\n const deficit = willFree >= required ? ZERO : required - willFree;\n return { selected, willFree, deficit };\n }\n}\n\nconst ZERO = BigInt(0);\n","import {\n Connection,\n PublicKey as SolPubKey,\n TransactionSignature,\n Commitment,\n ConnectionConfig,\n Transaction,\n} from '@solana/web3.js';\nimport { AnchorProvider } from '@coral-xyz/anchor';\nimport { BaseSignerWalletAdapter } from '@solana/wallet-adapter-base';\nimport { IStakingClient, Portfolio, StakerConfig } from '../../staker/types';\nimport { ChainID, ExternalNetwork, KeyType, PublicKey } from '@wireio/core';\nimport { DepositClient } from './clients/deposit.client';\nimport { deriveStakeControllerReservePoolPDA, deriveStakeControllerVaultPDA, getUserLiqsolATA } from './constants';\nimport { DistributionClient } from './clients/distribution.client';\nimport { SolanaTransaction } from './types';\n// import { ValidatorLeaderboardClient } from './clients/leaderboard.client';\n\nconst commitment: Commitment = 'confirmed';\n\nexport class SolanaStakingClient implements IStakingClient {\n public pubKey: PublicKey;\n public connection: Connection;\n public anchor: AnchorProvider;\n\n private depositClient: DepositClient;\n private distributionClient: DistributionClient;\n // private leaderboardClient: ValidatorLeaderboardClient;\n\n get solPubKey(): SolPubKey {\n return new SolPubKey(this.pubKey.data.array);\n }\n\n get network() { return this.config.network; }\n\n constructor(private config: StakerConfig) {\n // 1) unwrap & validate wallet adapter\n const adapter = config.provider as BaseSignerWalletAdapter;\n if (!adapter.publicKey) throw new Error('Solana wallet adapter not connected');\n if (!config.network.rpcUrls.length) throw new Error('No RPC URLs provided');\n\n // 2) sanity‐check wire ↔ solana pubkey\n const publicKey = adapter.publicKey;\n const wirePub = new PublicKey(KeyType.ED, publicKey.toBytes());\n if (!wirePub.equals(config.pubKey)) {\n throw new Error('Passed-in pubKey doesn\\'t match adapter.publicKey');\n }\n\n // build connection config\n let opts: ConnectionConfig = { commitment }\n if (config.network.rpcUrls.length > 1 && config.network.rpcUrls[1].startsWith('ws')) {\n opts.wsEndpoint = config.network.rpcUrls[1];\n }\n\n this.pubKey = wirePub;\n this.connection = new Connection(config.network.rpcUrls[0], opts);\n\n const anchorWallet = {\n publicKey,\n async signTransaction<T extends SolanaTransaction>(tx: T): Promise<T> {\n return adapter.signTransaction(tx);\n },\n async signAllTransactions<T extends SolanaTransaction>(txs: T[]): Promise<T[]> {\n return Promise.all(txs.map((tx) => adapter.signTransaction(tx)));\n },\n };\n\n this.anchor = new AnchorProvider(this.connection, anchorWallet, { commitment });\n\n // 4) staking clients\n this.depositClient = new DepositClient(this.anchor);\n this.distributionClient = new DistributionClient(this.anchor);\n // this.leaderboardClient = new ValidatorLeaderboardClient(this.anchor);\n }\n\n /**\n * Resolve the user's liqSOL ATA and balances + key protocol balances.\n * native = SOL in wallet\n * actual = liqSOL token balance (from ATA)\n * tracked = liqSOL tracked balance (from Distribution.userRecord)\n */\n async getPortfolio(): Promise<Portfolio> {\n const user = this.solPubKey;\n\n // Handy PDAs & ATA\n const [reservePoolPDA] = deriveStakeControllerReservePoolPDA();\n const [vaultPDA] = deriveStakeControllerVaultPDA();\n const userLiqsolAta = getUserLiqsolATA(user);\n\n // Pull balances in parallel; ATA may not exist yet\n const [nativeLamports, actualBalResp, userRecord] = await Promise.all([\n this.connection.getBalance(user),\n this.connection.getTokenAccountBalance(userLiqsolAta).catch(() => null),\n this.distributionClient.getUserRecord(user).catch(() => null),\n ]);\n\n // Actual (LiqSOL) balance + decimals (fallback to 9 if ATA missing)\n const actualAmountStr = actualBalResp?.value?.amount ?? '0';\n const actualDecimals = actualBalResp?.value?.decimals ?? 9;\n\n // Tracked (from userRecord in Distribution program)\n const trackedAmountStr = userRecord?.trackedBalance\n ? (userRecord.trackedBalance as any).toString()\n : '0';\n const trackedDecimals = actualDecimals; // same mint as liqSOL\n\n // Assemble the portfolio\n const portfolio: Portfolio = {\n native: {\n symbol: 'SOL',\n decimals: 9,\n amount: BigInt(nativeLamports),\n },\n actual: {\n symbol: 'LiqSOL',\n decimals: actualDecimals,\n amount: BigInt(actualAmountStr),\n },\n tracked: {\n symbol: 'LiqSOL',\n decimals: trackedDecimals,\n amount: BigInt(trackedAmountStr),\n },\n extras: {\n userLiqsolAta: userLiqsolAta.toBase58(),\n reservePoolPDA: reservePoolPDA.toBase58(),\n vaultPDA: vaultPDA.toBase58(),\n },\n };\n\n // console.log('>> PORTFOLIO SET', this.network.name, this.portfolio);\n return portfolio;\n }\n /**\n * Optional: fetch your Distribution program user record\n * (often contains per-user deposit/claim state).\n */\n async getUserRecord(): Promise<any | null> {\n return this.distributionClient.getUserRecord(this.solPubKey);\n }\n\n getProtocolFee() {\n\n }\n\n /**\n * Build, sign, and submit a single transaction that:\n * - Corrects other users (if needed) to free available balance, then\n * - Registers the caller’s untracked liqSOL.\n *\n * @param amount Optional: register a smaller amount than your full untracked balance.\n * @returns signature string\n */\n async register(amount?: bigint): Promise<string> {\n try {\n console.log('Building CorrectAndRegister transaction with amount:', amount);\n\n // Build the transaction using the Distribution client (self = this.solPubKey)\n const build = await this.distributionClient.buildCorrectRegisterTx({ amount });\n if (!build.canSucceed || !build.transaction)\n throw new Error(build.reason ?? 'Unable to build Correct&Register transaction');\n\n console.log('buildCorrectRegisterTx:', build);\n\n const { tx, blockhash, lastValidBlockHeight } = await this.prepareTx(build.transaction);\n const signed = await this.signTransaction(tx);\n const result = await this.sendAndConfirmHttp(signed, { blockhash, lastValidBlockHeight });\n\n // Optionally refresh portfolio after success (non-blocking)\n console.log('Registered:', {\n needToRegister: build.needToRegister,\n freed: build.plan.willFree,\n corrected: build.plan.selected.map(c => ({\n owner: c.owner.toBase58(),\n delta: c.delta.toString(),\n }))\n });\n\n return result.signature;\n } catch (error) {\n console.error('Error in register:', error);\n throw error;\n }\n }\n\n /**\n * Deposit funds into the staking pool.\n * @param lamports The amount to deposit (in lamports).\n * @returns The transaction signature.\n */\n async deposit(lamports: number): Promise<string> {\n const { transaction } = await this.depositClient.buildDepositTx(this.solPubKey, lamports);\n const { tx, blockhash, lastValidBlockHeight } = await this.prepareTx(transaction);\n const signed = await this.signTransaction(tx);\n const result = await this.sendAndConfirmHttp(signed, { blockhash, lastValidBlockHeight });\n return result.signature;\n }\n\n private async sendAndConfirmHttp(\n signed: SolanaTransaction,\n ctx: { blockhash: string; lastValidBlockHeight: number }\n ): Promise<TxResult> {\n // sendRawTransaction is HTTP\n const signature = await this.connection.sendRawTransaction(signed.serialize(), {\n skipPreflight: false,\n preflightCommitment: commitment,\n maxRetries: 3,\n });\n\n // Poll confirmation using blockhash/lastValidBlockHeight\n const conf = await this.connection.confirmTransaction(\n { signature, blockhash: ctx.blockhash, lastValidBlockHeight: ctx.lastValidBlockHeight },\n commitment\n );\n\n const ok = !conf.value.err;\n if (!ok) {\n throw new Error(`Transaction failed: ${JSON.stringify(conf.value.err)}`);\n }\n return { signature, slot: conf.context.slot, confirmed: true };\n }\n\n async signTransaction(tx: SolanaTransaction): Promise<SolanaTransaction> {\n return await this.anchor.wallet.signTransaction(tx);\n }\n\n async sendTransaction(signed: SolanaTransaction): Promise<TransactionSignature> {\n return await this.anchor.sendAndConfirm(signed);\n }\n\n async prepareTx(tx: Transaction): Promise<{ tx: Transaction; blockhash: string; lastValidBlockHeight: number }> {\n const { blockhash, lastValidBlockHeight } = await this.connection.getLatestBlockhash('confirmed');\n tx.recentBlockhash = blockhash;\n tx.feePayer = this.solPubKey;\n\n return { tx, blockhash, lastValidBlockHeight };\n }\n}\n\nexport interface TxResult {\n signature: string;\n slot: number;\n confirmed: boolean;\n};","// src/staker/staker.ts\n\nimport { ChainID, SolChainID } from '@wireio/core';\nimport { IStakingClient, StakerConfig } from './types';\nimport { SolanaStakingClient } from '../networks/solana/solana';\n\nexport class Staker {\n public selectedChainID?: ChainID;\n private clients: Map<ChainID, IStakingClient> = new Map();\n\n /**\n * Get the staking client for the currently selected chain.\n * @returns The staking client instance.\n */\n get client(): IStakingClient | undefined {\n return this.selectedChainID && this.isConfigured(this.selectedChainID)\n ? this.clients.get(this.selectedChainID) : undefined;\n }\n\n /** Is there a client configured for this chain? */\n isConfigured(chainId: ChainID): boolean {\n return this.clients.has(chainId);\n }\n\n /** List of configured chains */\n listConfigured(): ChainID[] {\n return [...this.clients.keys()];\n }\n\n constructor(config: StakerConfig | StakerConfig[], selectedChainID?: ChainID) {\n if (!config) throw new Error('StakerConfig is required');\n if (!Array.isArray(config)) config = [config];\n\n config.forEach((cfg) => {\n switch (cfg.network.chainId) {\n case SolChainID.WireTestnet:\n this.clients.set(cfg.network.chainId, new SolanaStakingClient(cfg));\n break;\n\n // case EvmChainID.Sepolia:\n // this.clients.set(EvmChainID.Sepolia, new EthereumStakingClient(cfg));\n // break;\n default:\n // console.log(`No staking client available for chain ${cfg.network.chainId}`);\n // throw new Error(`Unsupported network curve: ${cfg.network.name}`);\n }\n });\n\n this.selectedChainID = selectedChainID;\n }\n\n /**\n * Select a chain. Returns true if a client exists for it, false otherwise.\n * (We still record the selectedChainID so the UI can reflect the chosen chain.)\n */\n setChain(chainID: ChainID): boolean {\n this.selectedChainID = chainID;\n return this.clients.has(chainID);\n }\n}","/**\n * @module EthereumContractService\n * \n * Provides a unified service for interacting with Ethereum smart contracts using ethers.js.\n * \n * This module includes:\n * - ABI imports for ERC20, ERC721, and ERC1155 token standards.\n * - Address book and contract configuration types.\n * - A service class for managing contract instances, interfaces, and utility methods for read/write access.\n * - Utility for decoding custom errors and events using a combined interface of all known ABIs.\n * \n * @remarks\n * - Update the `ADDRESSES` and `CONTRACTS` objects to match your deployment.\n * - The service supports both read-only and write-enabled contract handles, depending on the presence of a signer.\n * - The `omniInterface` property allows decoding of errors and events across all included ABIs.\n * \n * @example\n * ```typescript\n * const service = new EthereumContractService({ provider, signer });\n * const stakeContract = service.getContract('Stake');\n * const address = service.getAddress('Stake');\n * ```\n */\n\nimport ERC20Artifact from '../../assets/ethereum/ABI/token/ERC20Token.sol/ERC20Token.json';\nimport ERC721Artifact from '../../assets/ethereum/ABI/token/ERC721Token.sol/ERC721Token.json';\nimport ERC1155Artifact from '../../assets/ethereum/ABI/token/ERC1155Token.sol/ERC1155Token.json';\nimport { AddressBook, ContractName } from './types';\nimport { Contract, ethers, providers, Signer } from 'ethers';\nimport { JsonFragment } from '@ethersproject/abi';\nimport { ErrorDescription } from '@ethersproject/abi/lib/interface';\n\nexport const ERC20Abi = ERC20Artifact.abi;\nexport const ERC721Abi = ERC721Artifact.abi;\nexport const ERC1155Abi = ERC1155Artifact.abi;\n\n// Update this to be your staking contract address book\nexport const ADDRESSES: AddressBook = {\n Stake: '0xEeaCBa95852324eAc63fE2711aFe0283adf3bC93',\n};\n\nexport type Contracts<T extends string = ContractName> = Record<T, ContractConfig>;\n\nexport type ContractConfig = {\n address: string;\n abi: JsonFragment[];\n}\n\nexport const CONTRACTS: Contracts<ContractName> = {\n Stake: { address: ADDRESSES.Stake, abi: undefined as any }, // Replace with actual ABI artifact when available\n // Stake: { address: ADDRESSES.Stake, abi: Stake.abi },\n}\n\nexport interface ContractOptions {\n /** RPC endpoint or injected EIP-1193 provider */\n provider?: ethers.providers.Provider;\n /** Only required if you need to send txns */\n signer?: Signer;\n}\n\n\nexport class EthereumContractService {\n private provider?: providers.Provider;\n private signer?: Signer;\n\n public readonly contract: { [N in ContractName]: ethers.Contract } = {} as any;\n public readonly iface: { [N in ContractName]: ethers.utils.Interface } = {} as any;\n\n constructor(opts: ContractOptions) {\n this.provider = opts.provider;\n this.signer = opts.signer;\n\n (Object.keys(CONTRACTS) as ContractName[]).forEach((name) => {\n const { address, abi } = CONTRACTS[name];\n this.iface[name] = new ethers.utils.Interface(abi);\n this.contract[name] = new ethers.Contract(address, abi, this.signer ?? this.provider);\n });\n }\n\n /** Get raw address for a contract */\n public getAddress(name: ContractName): string {\n return CONTRACTS[name].address;\n }\n\n /** Utility: get a read-only handle even if signer is present */\n getReadOnly(name: ContractName): Contract {\n const { address, abi } = CONTRACTS[name];\n return new Contract(address, abi, this.provider);\n }\n\n /** Utility: get a write-enabled handle (throws if no signer) */\n getWrite(name: ContractName): Contract {\n if (!this.signer) throw new Error('No signer available for write calls');\n const { address, abi } = CONTRACTS[name];\n return new Contract(address, abi, this.signer);\n }\n\n /** Expose network info */\n async getNetwork() {\n return this.provider?.getNetwork();\n }\n\n /** List all known contract names */\n public listContractNames(): ContractName[] {\n return Object.keys(CONTRACTS) as ContractName[];\n }\n\n /** Get Interface instance for a contract */\n public getInterface(name: ContractName): ethers.utils.Interface {\n const iface = this.iface[name];\n if (!iface) throw new Error(`Interface not initialized for ${name}`);\n return iface;\n }\n\n /** Get live Contract instance */\n public getContract(name: ContractName): ethers.Contract {\n const ctr = this.contract[name];\n if (!ctr) throw new Error(`Contract not initialized for ${name}`);\n return ctr;\n }\n\n /** A unified Interface containing all ABIs (addresses + extra decoding-only)\n * to parse custom errors or events. */\n public get omniInterface(): ethers.utils.Interface {\n const all: any[] = [];\n\n // Add all artifacts to the interface\n const allArtifacts = [\n ERC20Artifact,\n ERC721Artifact,\n ERC1155Artifact,\n // Add more artifacts as needed\n ];\n\n // Add all ABIs to the omnibus interface\n allArtifacts.forEach(artifact => {\n if (artifact && artifact.abi) {\n all.push(...artifact.abi);\n }\n });\n\n // dedupe\n const seen = new Set<string>();\n const dedup: any[] = [];\n for (const item of all) {\n try {\n const frag = ethers.utils.Fragment.from(item);\n const key = `${frag.type}:${frag.format(ethers.utils.FormatTypes.full)}`.toLowerCase();\n if (!seen.has(key)) {\n seen.add(key);\n dedup.push(item);\n }\n } catch { }\n }\n\n return new ethers.utils.Interface(dedup);\n }\n\n /** Decode a revert or custom error payload */\n public parseError(revertData: string): ErrorDescription {\n try {\n return this.omniInterface.parseError(revertData);\n } catch {\n throw new Error(`Unable to parse error data: ${revertData}`);\n }\n }\n}","// src/networks/ethereum/ethereum.ts\n\nimport { ethers } from 'ethers';\nimport { IStakingClient, StakerConfig } from '../../staker/types';\nimport { PublicKey as WirePubKey } from '@wireio/core';\nimport { ERC20Abi } from './contract'; // TODO replace with staking contract ABI\n\n// — replace with your actual staking contract ABI & address —\nconst STAKING_CONTRACT_ADDRESS = '0xYourStakingContractAddress';\n\n// TODO extend to implement ISTAKINGCLIENT\nexport class EthereumStakingClient {\n public readonly pubKey: WirePubKey;\n private readonly provider: ethers.providers.Web3Provider;\n private readonly signer: ethers.Signer;\n private readonly contract: ethers.Contract;\n\n constructor(private config: StakerConfig) {\n // 1) unwrap & validate Ethers provider\n if (!ethers.providers.Web3Provider.isProvider(config.provider as any)) {\n throw new Error('Expected a Web3Provider for Ethereum');\n }\n this.provider = config.provider as ethers.providers.Web3Provider;\n\n // 2) signer\n this.signer = this.provider.getSigner();\n this.pubKey = config.pubKey as WirePubKey;\n\n // 4) instantiate your contract wrapper\n this.contract = new ethers.Contract(\n STAKING_CONTRACT_ADDRESS,\n ERC20Abi,\n this.signer\n );\n }\n\n /** Submit a deposit; returns the transaction hash */\n async deposit(amount: number): Promise<string> {\n // build & send in one go\n const txResponse = await this.contract.deposit(\n ethers.BigNumber.from(amount),\n {\n // if your contract needs ETH value:\n // value: ethers.BigNumber.from(amount),\n }\n );\n\n // wait for on-chain confirmation (optional)\n await txResponse.wait();\n return txResponse.hash;\n }\n\n /** (Optional) dry-run via eth_call */\n async simulateDeposit(amount: number): Promise<any> {\n return this.provider.call({\n to: STAKING_CONTRACT_ADDRESS,\n data: this.contract.interface.encodeFunctionData('deposit', [\n ethers.BigNumber.from(amount)\n ]),\n });\n }\n\n // TODO: implement withdraw, claimRewards, etc.\n}","export const CONTRACT_NAMES = [\n 'Stake',\n] as const;\n\nexport type ContractName = typeof CONTRACT_NAMES[number];\nexport type AddressBook = Record<ContractName, string>;","import { AnchorProvider, Program, BN } from '@coral-xyz/anchor';\nimport { PublicKey, SystemProgram, Transaction, TransactionInstruction } from '@solana/web3.js';\nimport { SolanaProgramService } from '../program';\nimport type { ValidatorLeaderboard } from '../../../assets/solana/types/validator_leaderboard';\nimport {\n deriveLeaderboardHeadPDA,\n deriveValidatorRecordPDA,\n deriveTop10CachePDA,\n} from '../constants';\n\nexport class ValidatorLeaderboardClient {\n private programs: SolanaProgramService;\n\n constructor(private provider: AnchorProvider) {\n this.programs = new SolanaProgramService(provider);\n }\n\n /** Anchor Program<ValidatorLeaderboard> via ProgramService */\n private get program(): Program<ValidatorLeaderboard> {\n return this.programs.getProgram('validatorLeaderboard') as Program<ValidatorLeaderboard>;\n }\n\n // ───────────────────────────────────────────────────────────────────────────────\n // BUILDERS (return Ixs so you can batch)\n // ───────────────────────────────────────────────────────────────────────────────\n\n /** Initialize the leaderboard head account. */\n async buildInitializeIx(authority: PublicKey): Promise<TransactionInstruction> {\n const [leaderboardHead] = deriveLeaderboardHeadPDA();\n return this.program.methods\n .initialize()\n .accounts({\n authority,\n // @ts-ignore\n leaderboardHead,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n\n /**\n * Upsert/update a validator record and (optionally) reposition it in the linked list.\n * Any of insertAfter/insertBefore/currentPrev/currentNext can be omitted.\n */\n async buildUpdateValidatorIx(params: {\n registrant: PublicKey;\n voteAccount: PublicKey;\n vpp: number; // Validator Performance Points\n insertAfter?: PublicKey;\n insertBefore?: PublicKey;\n currentPrev?: PublicKey;\n currentNext?: PublicKey;\n }): Promise<TransactionInstruction> {\n const { registrant, voteAccount, vpp, insertAfter, insertBefore, currentPrev, currentNext } = params;\n\n const [leaderboardHead] = deriveLeaderboardHeadPDA();\n const [validatorRecord] = deriveValidatorRecordPDA(voteAccount);\n\n const accounts: any = {\n registrant,\n voteAccount,\n validatorRecord,\n leaderboardHead,\n systemProgram: SystemProgram.programId,\n ...(insertAfter && { insertAfter }),\n ...(insertBefore && { insertBefore }),\n ...(currentPrev && { currentPrev }),\n ...(currentNext && { currentNext }),\n };\n\n return this.program.methods\n .updateValidator(new BN(vpp))\n .accounts(accounts)\n .instruction();\n }\n\n /** Update the Top-10 cache. Requires exactly 10 validator vote accounts. */\n async buildUpdateTop10CacheIx(params: {\n authority: PublicKey;\n top10Validators: PublicKey[];\n }): Promise<TransactionInstruction> {\n const { authority, top10Validators } = params;\n if (top10Validators.length !== 10) throw new Error('Must provide exactly 10 validators');\n\n const [cache] = deriveTop10CachePDA();\n return this.program.methods\n .updateTop10Cache(top10Validators)\n .accounts({\n // @ts-ignore\n authority,\n cache,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n\n // Convenience wrappers if you want a ready-to-send Transaction\n\n async buildInitializeTx(authority: PublicKey): Promise<Transaction> {\n return new Transaction().add(await this.buildInitializeIx(authority));\n }\n\n async buildUpdateValidatorTx(params: {\n registrant: PublicKey;\n voteAccount: PublicKey;\n vpp: number;\n insertAfter?: PublicKey;\n insertBefore?: PublicKey;\n currentPrev?: PublicKey;\n currentNext?: PublicKey;\n }): Promise<Transaction> {\n return new Transaction().add(await this.buildUpdateValidatorIx(params));\n }\n\n async buildUpdateTop10CacheTx(params: {\n authority: PublicKey;\n top10Validators: PublicKey[];\n }): Promise<Transaction> {\n return new Transaction().add(await this.buildUpdateTop10CacheIx(params));\n }\n\n // ───────────────────────────────────────────────────────────────────────────────\n // READ HELPERS\n // ───────────────────────────────────────────────────────────────────────────────\n\n /** Traverse the linked-list leaderboard, returning vote accounts in order. */\n async getLeaderboard(): Promise<PublicKey[]> {\n const [head] = deriveLeaderboardHeadPDA();\n let headAcc;\n try {\n headAcc = await this.program.account.leaderboardHead.fetch(head);\n } catch {\n return [];\n }\n const out: PublicKey[] = [];\n let cursor: PublicKey = headAcc.nextValidator;\n while (cursor && !cursor.equals(PublicKey.default)) {\n out.push(cursor);\n const rec = await this.program.account.validatorRecord.fetch(cursor);\n cursor = rec.nextValidator;\n }\n return out;\n }\n\n /** Fetch a single validator record (or null if it doesn't exist). */\n async getValidatorRecord(voteAccount: PublicKey): Promise<any | null> {\n const [recPda] = deriveValidatorRecordPDA(voteAccount);\n try {\n return await this.program.account.validatorRecord.fetch(recPda);\n } catch {\n return null;\n }\n }\n}"],"names":["DepositIDL","StakeControllerIDL","ValidatorLeaderboardIDL","LiqSolTokenIDL","DistributionIDL","tx","PublicKey","SolPubKey"],"mappings":";;;;;;;AAMa,MAAA,EAAA,GAAK,CAAC,IAAyB,KAAA;AACxC,EAAA,OAAO,UAAU,IAAI,CAAA,CAAA,CAAA,CAAA;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACaO,MAAM,kBAAqB,GAAA,IAAI,SAAU,CAAAA,WAAA,CAAW,OAAO,EAAA;AAC3D,MAAM,2BAA8B,GAAA,IAAI,SAAU,CAAAC,mBAAA,CAAmB,OAAO,EAAA;AAC5E,MAAM,gCAAmC,GAAA,IAAI,SAAU,CAAAC,wBAAA,CAAwB,OAAO,EAAA;AACtF,MAAM,uBAA0B,GAAA,IAAI,SAAU,CAAAC,eAAA,CAAe,OAAO,EAAA;AACpE,MAAM,uBAA0B,GAAA,IAAI,SAAU,CAAAC,gBAAA,CAAgB,OAAO,EAAA;AACrE,MAAM,uBAA0B,GAAA,IAAI,SAAU,CAAA,cAAA,CAAe,OAAO,EAAA;AAGpE,MAAM,sBAAyB,GAAA,IAAA;AAG/B,MAAM,sBAAiC,SAAU,CAAA,sBAAA;AAAA,EACpD,CAAC,MAAA,CAAO,IAAK,CAAA,cAAc,CAAC,CAAA;AAAA,EAC5B,uBAAA;AACJ,CAAA,CAAE,CAAC,EAAA;AAOU,MAAA,iBAAA,GAAoB,CAAC,QAA+C,KAAA;AAC7E,EAAA,MAAM,cAAiB,GAAA,EAAE,GAAG,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,SAAU,CAAAJ,WAAU,CAAC,CAAA,EAAG,OAAS,EAAA,kBAAA,CAAmB,UAAW,EAAA,CAAA;AAC3G,EAAO,OAAA,IAAI,OAAQ,CAAA,cAAA,EAAuB,QAAQ,CAAA,CAAA;AACtD,EAAA;AAQa,MAAA,yBAAA,GAA4B,MACrC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,mBAAmB,CAAC,CAAA;AAAA,EACjC,kBAAA;AACJ,EAAA;AAGS,MAAA,mBAAA,GAAsB,MAC/B,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,cAAc,CAAC,CAAA;AAAA,EAC5B,uBAAA;AACJ,EAAA;AAGS,MAAA,4BAAA,GAA+B,MACxC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,gBAAgB,CAAC,CAAA;AAAA,EAC9B,uBAAA;AACJ,EAAA;AAGS,MAAA,6BAAA,GAAgC,MACzC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,OAAO,CAAC,CAAA;AAAA,EACrB,2BAAA;AACJ,EAAA;AAES,MAAA,mCAAA,GAAsC,MAC/C,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,cAAc,CAAC,CAAA;AAAA,EAC5B,2BAAA;AACJ,EAAA;AAES,MAAA,6BAAA,GAAgC,MACzC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,kBAAkB,CAAC,CAAA;AAAA,EAChC,2BAAA;AACJ,EAAA;AAES,MAAA,wBAAA,GAA2B,MACpC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,mBAAmB,CAAC,CAAA;AAAA,EACjC,2BAAA;AACJ,EAAA;AAES,MAAA,wBAAA,GAA2B,MACpC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,eAAe,CAAC,CAAA;AAAA,EAC7B,2BAAA;AACJ,EAAA;AAES,MAAA,uBAAA,GAA0B,MACnC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,kBAAkB,CAAC,CAAA;AAAA,EAChC,2BAAA;AACJ,EAAA;AAGS,MAAA,0BAAA,GAA6B,MACtC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,oBAAoB,CAAC,CAAA;AAAA,EAClC,uBAAA;AACJ,EAAA;AAES,MAAA,mBAAA,GAAsB,CAAC,IAAA,KAChC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAO,CAAA,IAAA,CAAK,aAAa,CAAG,EAAA,IAAA,CAAK,UAAU,CAAA;AAAA,EAC5C,uBAAA;AACJ,EAAA;AAGS,MAAA,wBAAA,GAA2B,MACpC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,kBAAkB,CAAC,CAAA;AAAA,EAChC,gCAAA;AACJ,EAAA;AAES,MAAA,wBAAA,GAA2B,CAAC,WAAA,KACrC,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAO,CAAA,IAAA,CAAK,kBAAkB,CAAG,EAAA,WAAA,CAAY,UAAU,CAAA;AAAA,EACxD,gCAAA;AACJ,EAAA;AAES,MAAA,mBAAA,GAAsB,MAC/B,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,cAAc,CAAC,CAAA;AAAA,EAC5B,gCAAA;AACJ,EAAA;AAES,MAAA,iCAAA,GAAoC,MAC7C,SAAU,CAAA,sBAAA;AAAA,EACN,CAAC,MAAA,CAAO,IAAK,CAAA,iBAAiB,CAAC,CAAA;AAAA,EAC/B,2BAAA;AACJ,EAAA;AAIS,MAAA,gBAAA,GAAmB,CAAC,IAC7B,KAAA,6BAAA;AAAA,EACI,mBAAA;AAAA,EACA,IAAA;AAAA,EACgB,KAAA;AAAA,EAChB,qBAAA;AAAA,EACA,2BAAA;AACJ;;ACtIJ,MAAM,QAAW,GAAA;AAAA,EACb,OAAS,EAAA;AAAA,IACL,GAAK,EAAA,WAAA;AAAA,IACL,OAAA,EAAS,mBAAmB,QAAS,EAAA;AAAA,GACzC;AAAA,EACA,eAAiB,EAAA;AAAA,IACb,GAAK,EAAA,mBAAA;AAAA,IACL,OAAA,EAAS,4BAA4B,QAAS,EAAA;AAAA,GAClD;AAAA,EACA,WAAa,EAAA;AAAA,IACT,GAAK,EAAA,eAAA;AAAA,IACL,OAAA,EAAS,wBAAwB,QAAS,EAAA;AAAA,GAC9C;AAAA,EACA,YAAc,EAAA;AAAA,IACV,GAAK,EAAA,gBAAA;AAAA,IACL,OAAA,EAAS,wBAAwB,QAAS,EAAA;AAAA,GAC9C;AAAA,EACA,oBAAsB,EAAA;AAAA,IAClB,GAAK,EAAA,wBAAA;AAAA,IACL,OAAA,EAAQ,iCAAiC,QAAS,EAAA;AAAA,GACtD;AACJ,CAAA,CAAA;AAEO,MAAM,oBAAqB,CAAA;AAAA,EAC9B,YAAoB,QAA0B,EAAA;AAA1B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAAA,GAA4B;AAAA,EAEhD,WAA4C,IAA+C,EAAA;AACvF,IAAA,MAAM,EAAE,GAAA,EAAK,OAAQ,EAAA,GAAI,SAAS,IAAI,CAAA,CAAA;AAEtC,IAAA,MAAM,WAAc,GAAA,EAAE,GAAG,GAAA,EAAK,OAAQ,EAAA,CAAA;AACtC,IAAA,OAAO,IAAI,OAAA,CAAQ,WAAoB,EAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,GACxD;AAAA,EAEA,gBAAiD,GAAA;AAC7C,IAAO,OAAA,MAAA,CAAO,KAAK,QAAQ,CAAA,CAAA;AAAA,GAC/B;AACJ;;ACdO,MAAM,aAAc,CAAA;AAAA,EAGvB,YAAoB,QAA0B,EAAA;AAA1B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAFpB,IAAA,IAAA,CAAQ,QAAW,GAAA,IAAI,oBAAqB,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,GAET;AAAA,EAMhD,MAAM,cACF,CAAA,IAAA,EACA,MACsE,EAAA;AACtE,IAAA,IAAI,SAAS,sBAAwB,EAAA;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAsB,mBAAA,EAAA,sBAAA,GAAyB,GAAG,CAAM,IAAA,CAAA,CAAA,CAAA;AAAA,KAC5E;AAEA,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,QAAS,CAAA,UAAA,CAAW,SAAS,CAAA,CAAA;AAGlD,IAAM,MAAA,CAAC,gBAAgB,CAAA,GAAI,yBAA0B,EAAA,CAAA;AACrD,IAAM,MAAA,CAAC,UAAU,CAAA,GAAI,mBAAoB,EAAA,CAAA;AACzC,IAAM,MAAA,CAAC,mBAAmB,CAAA,GAAI,4BAA6B,EAAA,CAAA;AAC3D,IAAM,MAAA,CAAC,WAAW,CAAA,GAAI,mCAAoC,EAAA,CAAA;AAC1D,IAAM,MAAA,CAAC,KAAK,CAAA,GAAI,6BAA8B,EAAA,CAAA;AAC9C,IAAM,MAAA,CAAC,eAAe,CAAA,GAAI,6BAA8B,EAAA,CAAA;AACxD,IAAM,MAAA,CAAC,eAAe,CAAA,GAAI,wBAAyB,EAAA,CAAA;AACnD,IAAM,MAAA,CAAC,eAAe,CAAA,GAAI,wBAAyB,EAAA,CAAA;AACnD,IAAM,MAAA,CAAC,iBAAiB,CAAA,GAAI,0BAA2B,EAAA,CAAA;AACvD,IAAA,MAAM,CAAC,UAAU,CAAI,GAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AAC7C,IAAM,MAAA,CAAC,cAAc,CAAA,GAAI,uBAAwB,EAAA,CAAA;AAGjD,IAAA,MAAM,UAAU,MAAM,yBAAA;AAAA,MAClB,UAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,qBAAA;AAAA,KACJ,CAAA;AACA,IAAA,MAAM,qBAAqB,MAAM,yBAAA;AAAA,MAC7B,UAAA;AAAA,MACA,eAAA;AAAA,MACyB,IAAA;AAAA,MACzB,qBAAA;AAAA,KACJ,CAAA;AAGA,IAAA,MAAM,OAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,MAAA,KAAW,UAAU,CAAA,CAAA;AAClD,IAAM,MAAA,aAAA,GAAgB,aAAa,IAAI,CAAA,CAAA,CAAA;AACvC,IAAM,MAAA,oBAAA,GAAuB,MAAM,SAAU,CAAA,cAAA;AAAA,MACzC,IAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAa,CAAA,SAAA;AAAA,KACjB,CAAA;AAGA,IAAM,MAAA,SAAA,GAAY,MAAM,OAAA,CAAQ,OAC3B,CAAA,OAAA,CAAQ,IAAI,EAAA,CAAG,MAAM,CAAA,EAAG,IAAI,CAAA,CAC5B,QAAS,CAAA;AAAA,MACN,IAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAe,aAAc,CAAA,SAAA;AAAA,MAC7B,YAAc,EAAA,qBAAA;AAAA,MACd,sBAAwB,EAAA,2BAAA;AAAA,MACxB,sBAAwB,EAAA,2BAAA;AAAA,MACxB,aAAe,EAAA,uBAAA;AAAA,MACf,cAAA;AAAA,MACA,cAAc,YAAa,CAAA,SAAA;AAAA,MAC3B,mBAAqB,EAAA,uBAAA;AAAA,MAGrB,UAAA;AAAA,MACA,OAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,cAAgB,EAAA,oBAAA;AAAA,MAChB,eAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,UAAA;AAAA,MACA,iBAAA;AAAA,MAGA,kBAAoB,EAAA,0BAAA;AAAA,MACpB,KAAO,EAAA,mBAAA;AAAA,MACP,YAAc,EAAA,2BAAA;AAAA,MACd,IAAM,EAAA,kBAAA;AAAA,KACF,EACP,WAAY,EAAA,CAAA;AAGjB,IAAA,MAAM,YAAY,oBAAqB,CAAA,mBAAA,CAAoB,EAAE,KAAA,EAAO,KAAS,CAAA,CAAA;AAC7E,IAAA,MAAM,KAAK,IAAI,WAAA,EAAc,CAAA,GAAA,CAAI,WAAW,SAAS,CAAA,CAAA;AACrD,IAAO,OAAA,EAAE,WAAa,EAAA,EAAA,EAAI,oBAAqB,EAAA,CAAA;AAAA,GACnD;AAAA,EAGA,MAAM,SAAS,EAA+D,EAAA;AAC1E,IAAG,EAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,MAAO,CAAA,SAAA,CAAA;AACnC,IAAA,MAAM,EAAE,SAAU,EAAA,GAAI,MAAM,IAAK,CAAA,QAAA,CAAS,WAAW,kBAAmB,EAAA,CAAA;AACxE,IAAA,EAAA,CAAG,eAAkB,GAAA,SAAA,CAAA;AAErB,IAAA,MAAM,SAAY,GAAA,IAAI,oBAAqB,CAAA,EAAA,CAAG,gBAAgB,CAAA,CAAA;AAC9D,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,QAAS,CAAA,UAAA,CAAW,oBAAoB,SAAW,EAAA;AAAA,MACtE,SAAW,EAAA,KAAA;AAAA,KACd,CAAA,CAAA;AACD,IAAO,OAAA,EAAE,KAAK,GAAI,CAAA,KAAA,CAAM,KAAK,aAAe,EAAA,GAAA,CAAI,MAAM,aAAe,EAAA,CAAA;AAAA,GACzE;AAAA,EAGA,MAAM,OACF,CAAA,IAAA,EACA,MACA,EAAA,OAAA,GAAoB,EACS,EAAA;AAC7B,IAAA,MAAM,EAAE,WAAY,EAAA,GAAI,MAAM,IAAK,CAAA,cAAA,CAAe,MAAM,MAAM,CAAA,CAAA;AAC9D,IAAY,WAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,MAAO,CAAA,SAAA,CAAA;AAC5C,IAAA,MAAM,EAAE,SAAU,EAAA,GAAI,MAAM,IAAK,CAAA,QAAA,CAAS,WAAW,kBAAmB,EAAA,CAAA;AACxE,IAAA,WAAA,CAAY,eAAkB,GAAA,SAAA,CAAA;AAC9B,IAAA,OAAO,IAAK,CAAA,QAAA,CAAS,cAAe,CAAA,WAAA,EAAa,OAAO,CAAA,CAAA;AAAA,GAC5D;AACJ;;AC3IO,MAAM,kBAAmB,CAAA;AAAA,EAG5B,YAAoB,QAA0B,EAAA;AAA1B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAChB,IAAK,IAAA,CAAA,QAAA,GAAW,IAAI,oBAAA,CAAqB,QAAQ,CAAA,CAAA;AAAA,GACrD;AAAA,EAGA,IAAY,OAAiC,GAAA;AACzC,IAAO,OAAA,IAAA,CAAK,QAAS,CAAA,UAAA,CAAW,cAAc,CAAA,CAAA;AAAA,GAClD;AAAA,EASA,MAAM,oBAAqC,GAAA;AACvC,IAAM,MAAA,CAAC,GAAG,CAAA,GAAI,0BAA2B,EAAA,CAAA;AACzC,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,iBAAA,CAAkB,MAAM,GAAG,CAAA,CAAA;AAAA,GAC3D;AAAA,EAKA,MAAM,cAAc,IAAsC,EAAA;AACtD,IAAA,MAAM,CAAC,GAAG,CAAI,GAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AACtC,IAAI,IAAA;AAAE,MAAA,OAAO,MAAM,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,UAAA,CAAW,MAAM,GAAG,CAAA,CAAA;AAAA,KACtD,CAAA,MAAA;AAAE,MAAO,OAAA,IAAA,CAAA;AAAA,KAAM;AAAA,GACzB;AAAA,EAOA,MAAM,kBAAkB,IAAgE,EAAA;AACpF,IAAA,MAAM,GAAM,GAAA,MAAM,IAAK,CAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AACzC,IAAA,IAAI,CAAC,GAAK,EAAA,OAAO,EAAE,MAAQ,EAAA,IAAA,EAAM,UAAU,CAAE,EAAA,CAAA;AAC7C,IAAA,MAAM,SAAoB,GAAA,GAAA,CAAI,cAAgB,EAAA,QAAA,IAAgB,IAAA,GAAA,CAAA;AAC9D,IAAA,OAAO,EAAE,MAAQ,EAAA,MAAA,CAAO,SAAS,CAAA,EAAG,UAAU,CAAE,EAAA,CAAA;AAAA,GACpD;AAAA,EAOA,MAAM,iBAAiB,IAAgF,EAAA;AACnG,IAAM,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,oBAAqB,EAAA,CAAA;AAC9C,IAAA,MAAM,aAAwB,KAAM,CAAA,UAAA,CAAA;AACpC,IAAA,MAAM,GAAM,GAAA,6BAAA;AAAA,MACR,UAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,qBAAA;AAAA,MACA,2BAAA;AAAA,KACJ,CAAA;AACA,IAAI,IAAA;AACA,MAAM,MAAA,GAAA,GAAM,MAAM,UAAW,CAAA,IAAA,CAAK,SAAS,UAAY,EAAA,GAAA,EAAK,aAAa,qBAAqB,CAAA,CAAA;AAE9F,MAAA,OAAO,EAAE,MAAQ,EAAA,GAAA,CAAI,MAA6B,EAAA,QAAA,EAAU,GAAG,GAAI,EAAA,CAAA;AAAA,KAC/D,CAAA,MAAA;AACJ,MAAA,OAAO,EAAE,MAAA,EAAQ,IAAM,EAAA,QAAA,EAAU,GAAG,GAAI,EAAA,CAAA;AAAA,KAC5C;AAAA,GACJ;AAAA,EAgBA,MAAM,WAAW,UAAwC,EAAA;AACrD,IAAA,MAAM,EAAE,OAAQ,EAAA,GAAI,MAAM,IAAA,CAAK,kBAAkB,UAAU,CAAA,CAAA;AAC3D,IAAA,OAAO,QAAQ,GAAI,EAAA,CAAA;AAAA,GACvB;AAAA,EAGA,MAAM,kBAAkB,UAAwD,EAAA;AAC5E,IAAA,MAAM,EAAE,OAAQ,EAAA,GAAI,MAAM,IAAA,CAAK,kBAAkB,UAAU,CAAA,CAAA;AAC3D,IAAA,OAAO,QAAQ,WAAY,EAAA,CAAA;AAAA,GAC/B;AAAA,EAMA,MAAM,aAAa,IAAkC,EAAA;AACjD,IAAM,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,oBAAqB,EAAA,CAAA;AAC9C,IAAA,MAAM,aAAwB,KAAM,CAAA,UAAA,CAAA;AAEpC,IAAA,MAAM,OAAU,GAAA,6BAAA;AAAA,MACZ,UAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,qBAAA;AAAA,MACA,2BAAA;AAAA,KACJ,CAAA;AAEA,IAAA,MAAM,CAAC,aAAa,CAAI,GAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AAChD,IAAM,MAAA,CAAC,oBAAoB,CAAA,GAAI,0BAA2B,EAAA,CAAA;AAC1D,IAAM,MAAA,CAAC,eAAe,CAAA,GAAI,wBAAyB,EAAA,CAAA;AACnD,IAAM,MAAA,CAAC,cAAc,CAAA,GAAI,uBAAwB,EAAA,CAAA;AAEjD,IAAA,MAAM,kBAAqB,GAAA,6BAAA;AAAA,MACvB,UAAA;AAAA,MACA,eAAA;AAAA,MACA,IAAA;AAAA,MACA,qBAAA;AAAA,MACA,2BAAA;AAAA,KACJ,CAAA;AAEA,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,QAAQ,OAC1B,CAAA,YAAA,GACA,QAAS,CAAA;AAAA,MACN,IAAA;AAAA,MAEA,OAAA;AAAA,MACA,UAAY,EAAA,aAAA;AAAA,MACZ,iBAAmB,EAAA,oBAAA;AAAA,MACnB,UAAA;AAAA,MACA,sBAAwB,EAAA,2BAAA;AAAA,MACxB,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAc,EAAA,qBAAA;AAAA,MACd,sBAAwB,EAAA,2BAAA;AAAA,MACxB,eAAe,aAAc,CAAA,SAAA;AAAA,KAChC,EACA,GAAI,EAAA,CAAA;AAET,IAAO,OAAA,GAAA,CAAA;AAAA,GACX;AAAA,EAMA,MAAM,QAAS,CAAA,IAAA,EAAiB,MAA0C,EAAA;AACtE,IAAM,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,oBAAqB,EAAA,CAAA;AAC9C,IAAA,MAAM,aAAwB,KAAM,CAAA,UAAA,CAAA;AAEpC,IAAA,MAAM,OAAU,GAAA,6BAAA;AAAA,MACZ,UAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,qBAAA;AAAA,MACA,2BAAA;AAAA,KACJ,CAAA;AAEA,IAAA,MAAM,CAAC,aAAa,CAAI,GAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AAChD,IAAM,MAAA,CAAC,oBAAoB,CAAA,GAAI,0BAA2B,EAAA,CAAA;AAC1D,IAAM,MAAA,CAAC,oBAAoB,CAAA,GAAI,6BAA8B,EAAA,CAAA;AAC7D,IAAM,MAAA,CAAC,mBAAmB,CAAA,GAAI,iCAAkC,EAAA,CAAA;AAEhE,IAAA,MAAM,GAAM,GAAA,MAAM,IAAK,CAAA,OAAA,CAAQ,OAC1B,CAAA,QAAA,CAAS,IAAI,EAAA,CAAG,MAAO,CAAA,QAAA,EAAU,CAAC,EAClC,QAAS,CAAA;AAAA,MACN,IAAA;AAAA,MAEA,OAAA;AAAA,MACA,UAAY,EAAA,aAAA;AAAA,MACZ,iBAAmB,EAAA,oBAAA;AAAA,MACnB,UAAA;AAAA,MACA,YAAc,EAAA,qBAAA;AAAA,MACd,sBAAwB,EAAA,2BAAA;AAAA,MACxB,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,kBAAoB,EAAA,uBAAA;AAAA,MACpB,eAAe,aAAc,CAAA,SAAA;AAAA,KAChC,EACA,GAAI,EAAA,CAAA;AAET,IAAO,OAAA,GAAA,CAAA;AAAA,GACX;AAAA,EAOA,MAAc,kBAAkB,UAAuB,EAAA;AACnD,IAAM,MAAA,SAAA,GAAY,IAAK,CAAA,QAAA,CAAS,MAAQ,EAAA,SAAA,CAAA;AACxC,IAAA,IAAI,CAAC,SAAA,EAAiB,MAAA,IAAI,MAAM,sBAAsB,CAAA,CAAA;AAEtD,IAAM,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,oBAAqB,EAAA,CAAA;AAC9C,IAAA,MAAM,aAAwB,KAAM,CAAA,UAAA,CAAA;AAEpC,IAAA,MAAM,aAAgB,GAAA,6BAAA;AAAA,MAClB,UAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA,qBAAA;AAAA,MACA,2BAAA;AAAA,KACJ,CAAA;AAEA,IAAA,MAAM,CAAC,mBAAmB,CAAI,GAAA,mBAAA,CAAoB,UAAU,CAAA,CAAA;AAC5D,IAAM,MAAA,CAAC,oBAAoB,CAAA,GAAI,0BAA2B,EAAA,CAAA;AAC1D,IAAM,MAAA,CAAC,cAAc,CAAA,GAAI,uBAAwB,EAAA,CAAA;AAEjD,IAAA,MAAM,QAAW,GAAA;AAAA,MACb,IAAM,EAAA,UAAA;AAAA,MACN,OAAS,EAAA,aAAA;AAAA,MAET,UAAY,EAAA,mBAAA;AAAA,MACZ,SAAA;AAAA,MACA,KAAO,EAAA,SAAA;AAAA,MACP,iBAAmB,EAAA,oBAAA;AAAA,MACnB,UAAA;AAAA,MACA,kBAAoB,EAAA,0BAAA;AAAA,MACpB,YAAc,EAAA,qBAAA;AAAA,MACd,sBAAwB,EAAA,2BAAA;AAAA,MACxB,cAAA;AAAA,MACA,eAAe,aAAc,CAAA,SAAA;AAAA,KACjC,CAAA;AAEA,IAAA,MAAM,UAAU,IAAK,CAAA,OAAA,CAAQ,QAAQ,UAAW,EAAA,CAAE,SAAS,QAAe,CAAA,CAAA;AAC1E,IAAO,OAAA,EAAE,SAAS,QAAS,EAAA,CAAA;AAAA,GAC/B;AAAA,EAeA,MAAM,uBAAuB,IAKQ,EAAA;AACjC,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,QAAA,CAAS,MAAQ,EAAA,SAAA,CAAA;AACnC,IAAA,IAAI,CAAC,IAAA,EAAY,MAAA,IAAI,MAAM,sBAAsB,CAAA,CAAA;AAEjD,IAAM,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,oBAAqB,EAAA,CAAA;AAC9C,IAAA,MAAM,aAAwB,KAAM,CAAA,UAAA,CAAA;AACpC,IAAA,MAAM,eAAkB,GAAA,MAAA,CAAO,KAAM,CAAA,gBAAA,CAAiB,UAAU,CAAA,CAAA;AAGhE,IAAA,MAAM,CAAC,iBAAiB,CAAI,GAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AACpD,IAAA,MAAM,EAAE,MAAQ,EAAA,WAAA,KAAgB,MAAM,IAAA,CAAK,kBAAkB,IAAI,CAAA,CAAA;AACjE,IAAM,MAAA,EAAE,QAAQ,UAAY,EAAA,GAAA,EAAK,aAAgB,GAAA,MAAM,IAAK,CAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAGjF,IAAA,MAAM,mBAAmB,UAAa,GAAA,WAAA,CAAA;AAGtC,IAAI,IAAA,OAAA,GAAU,MAAM,MAAU,IAAA,gBAAA,CAAA;AAC9B,IAAA,IAAI,oBAAoB,IAAM,EAAA;AAE1B,MAAI,IAAA,OAAA,GAAU,MAAgB,OAAA,GAAA,IAAA,CAAA;AAC9B,MAAI,IAAA,OAAA,GAAU,kBAA4B,OAAA,GAAA,gBAAA,CAAA;AAAA,KACvC,MAAA;AAEH,MAAI,IAAA,OAAA,GAAU,MAAgB,OAAA,GAAA,IAAA,CAAA;AAC9B,MAAI,IAAA,OAAA,GAAU,kBAA4B,OAAA,GAAA,gBAAA,CAAA;AAAA,KAC9C;AAGA,IAAA,IAAI,UAAU,IAAM,EAAA;AAChB,MAAQ,OAAA,CAAA,GAAA,CAAI,sDAAsD,OAAO,CAAA,CAAA;AAEzE,MAAMK,MAAAA,GAAAA,GAAK,IAAI,WAAY,EAAA,CAAE,IAAI,MAAM,IAAA,CAAK,iBAAkB,CAAA,IAAI,CAAC,CAAA,CAAA;AACnE,MAAO,OAAA;AAAA,QACH,UAAY,EAAA,IAAA;AAAA,QACZ,WAAaA,EAAAA,GAAAA;AAAA,QACb,UAAA;AAAA,QACA,cAAgB,EAAA,OAAA;AAAA,QAChB,eAAA;AAAA,QACA,YAAY,EAAC;AAAA,QACb,IAAA,EAAM,EAAE,QAAU,EAAA,IAAI,QAAU,EAAA,IAAA,EAAM,SAAS,IAAK,EAAA;AAAA,QACpD,QAAA,EAAU,EAAE,iBAAA,EAAmB,WAAY,EAAA;AAAA,OAC/C,CAAA;AAAA,KACJ;AAGA,IAAA,MAAM,cAAiB,GAAA,OAAA,CAAA;AACvB,IAAA,IAAI,mBAAmB,IAAM,EAAA;AACzB,MAAO,OAAA;AAAA,QACH,UAAY,EAAA,KAAA;AAAA,QACZ,MAAQ,EAAA,yBAAA;AAAA,QACR,UAAA;AAAA,QACA,cAAA;AAAA,QACA,eAAA;AAAA,QACA,YAAY,EAAC;AAAA,QACb,IAAA,EAAM,EAAE,QAAU,EAAA,IAAI,QAAU,EAAA,IAAA,EAAM,SAAS,IAAK,EAAA;AAAA,QACpD,QAAA,EAAU,EAAE,iBAAA,EAAmB,WAAY,EAAA;AAAA,OAC/C,CAAA;AAAA,KACJ;AAGA,IAAA,IAAI,mBAAmB,cAAgB,EAAA;AACnC,MAAA,OAAA,CAAQ,GAAI,CAAA,mBAAA,EAAqB,eAAiB,EAAA,6BAAA,EAA+B,cAAc,CAAA,CAAA;AAC/F,MAAA,MAAM,UAAa,GAAA,MAAM,IAAK,CAAA,iBAAA,CAAkB,IAAI,CAAA,CAAA;AACpD,MAAA,MAAMA,GAAK,GAAA,IAAI,WAAY,EAAA,CAAE,IAAI,UAAU,CAAA,CAAA;AAC3C,MAAO,OAAA;AAAA,QACH,UAAY,EAAA,IAAA;AAAA,QACZ,WAAaA,EAAAA,GAAAA;AAAA,QACb,UAAA;AAAA,QACA,cAAA;AAAA,QACA,eAAA;AAAA,QACA,YAAY,EAAC;AAAA,QACb,IAAA,EAAM,EAAE,QAAU,EAAA,IAAI,QAAU,EAAA,IAAA,EAAM,SAAS,IAAK,EAAA;AAAA,QACpD,QAAA,EAAU,EAAE,iBAAA,EAAmB,WAAY,EAAA;AAAA,OAC/C,CAAA;AAAA,KACJ;AAGA,IAAA,MAAM,UAAU,cAAiB,GAAA,eAAA,CAAA;AACjC,IAAA,MAAM,UAAa,GAAA,IAAA,EAAM,iBAAsB,IAAA,MAAM,KAAK,uBAAwB,EAAA,CAAA;AAElF,IAAI,IAAA,CAAC,WAAW,MAAQ,EAAA;AACpB,MAAO,OAAA;AAAA,QACH,UAAY,EAAA,KAAA;AAAA,QACZ,MAAQ,EAAA,0CAAA;AAAA,QACR,UAAA;AAAA,QACA,cAAA;AAAA,QACA,eAAA;AAAA,QACA,YAAY,EAAC;AAAA,QACb,IAAA,EAAM,EAAE,QAAU,EAAA,IAAI,QAAU,EAAA,IAAA,EAAM,SAAS,OAAQ,EAAA;AAAA,QACvD,QAAA,EAAU,EAAE,iBAAA,EAAmB,WAAY,EAAA;AAAA,OAC/C,CAAA;AAAA,KACJ;AAEA,IAAA,MAAM,IAAO,GAAA,IAAA,CAAK,mBAAoB,CAAA,OAAA,EAAS,UAAU,CAAA,CAAA;AACzD,IAAI,IAAA,IAAA,CAAK,UAAU,IAAM,EAAA;AACrB,MAAO,OAAA;AAAA,QACH,UAAY,EAAA,KAAA;AAAA,QACZ,MAAQ,EAAA,CAAA,oCAAA,EAAuC,OAAO,CAAA,WAAA,EAAc,KAAK,QAAQ,CAAA,EAAA,CAAA;AAAA,QACjF,UAAA;AAAA,QACA,cAAA;AAAA,QACA,eAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA,EAAU,EAAE,iBAAA,EAAmB,WAAY,EAAA;AAAA,OAC/C,CAAA;AAAA,KACJ;AAGA,IAAM,MAAA,EAAA,GAAK,IAAI,WAAY,EAAA,CAAA;AAC3B,IAAW,KAAA,MAAA,CAAA,IAAK,KAAK,QAAU,EAAA;AAC3B,MAAA,EAAA,CAAG,IAAI,MAAM,IAAA,CAAK,iBAAkB,CAAA,CAAA,CAAE,KAAK,CAAC,CAAA,CAAA;AAAA,KAChD;AACA,IAAA,EAAA,CAAG,GAAI,CAAA,MAAM,IAAK,CAAA,iBAAA,CAAkB,IAAI,CAAC,CAAA,CAAA;AAEzC,IAAO,OAAA;AAAA,MACH,UAAY,EAAA,IAAA;AAAA,MACZ,WAAa,EAAA,EAAA;AAAA,MACb,UAAA;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA,EAAU,EAAE,iBAAA,EAAmB,WAAY,EAAA;AAAA,KAC/C,CAAA;AAAA,GACJ;AAAA,EAcA,MAAM,uBAAwD,GAAA;AAC1D,IAAM,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,oBAAqB,EAAA,CAAA;AAC9C,IAA8B,KAAM,CAAA,WAAA;AAEpC,IAAA,MAAM,UAAU,MAAM,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,WAAW,GAAI,EAAA,CAAA;AAC1D,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAQ,EAAA,OAAO,EAAC,CAAA;AAE7B,IAAA,MAAM,MAA2B,EAAC,CAAA;AAIlC,IAAA,KAAA,MAAW,OAAO,OAAS,EAAA;AACvB,MAAA,MAAM,gBAAgB,GAAI,CAAA,SAAA,CAAA;AAC1B,MAAM,MAAA,OAAA,GAAqB,IAAI,OAAQ,CAAA,OAAA,CAAA;AACvC,MAAA,MAAM,UAAU,MAAO,CAAA,GAAA,CAAI,OAAQ,CAAA,cAAA,CAAe,UAAU,CAAA,CAAA;AAE5D,MAAA,IAAI,MAAS,GAAA,IAAA,CAAA;AACb,MAAA,IAAI,KAA0B,GAAA,IAAA,CAAA;AAE9B,MAAI,IAAA;AACA,QAAM,MAAA,GAAA,GAAM,MAAM,UAAW,CAAA,IAAA,CAAK,SAAS,UAAY,EAAA,OAAA,EAAS,aAAa,qBAAqB,CAAA,CAAA;AAClG,QAAA,MAAA,GAAS,GAAI,CAAA,MAAA,CAAA;AACb,QAAA,KAAA,GAAQ,GAAI,CAAA,KAAA,CAAA;AAAA,OACR,CAAA,MAAA;AAEJ,QAAQ,KAAA,GAAA,IAAA,CAAA;AAAA,OACZ;AAEA,MAAA,IAAI,CAAC,KAAO,EAAA,SAAA;AAEZ,MAAA,MAAM,QAAQ,OAAU,GAAA,MAAA,CAAA;AACxB,MAAA,IAAI,QAAQ,IAAM,EAAA;AAEd,QAAI,GAAA,CAAA,IAAA,CAAK,EAAE,KAAO,EAAA,aAAA,EAAe,SAAS,OAAS,EAAA,MAAA,EAAQ,OAAO,CAAA,CAAA;AAAA,OACtE;AAAA,KACJ;AAGA,IAAA,GAAA,CAAI,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAO,EAAE,KAAU,KAAA,CAAA,CAAE,KAAQ,GAAA,CAAA,GAAI,CAAE,CAAA,KAAA,GAAQ,CAAE,CAAA,KAAA,GAAQ,KAAK,CAAE,CAAA,CAAA;AACzE,IAAO,OAAA,GAAA,CAAA;AAAA,GACX;AAAA,EAMA,mBAAA,CAAoB,UAAkB,UAAiD,EAAA;AACnF,IAAI,IAAA,QAAA,IAAY,IAAM,EAAA,OAAO,EAAE,QAAA,EAAU,EAAI,EAAA,QAAA,EAAU,IAAM,EAAA,OAAA,EAAS,IAAK,EAAA,CAAA;AAE3E,IAAA,IAAI,QAAW,GAAA,IAAA,CAAA;AACf,IAAA,MAAM,WAAgC,EAAC,CAAA;AAEvC,IAAA,KAAA,MAAW,KAAK,UAAY,EAAA;AACxB,MAAA,IAAI,YAAY,QAAU,EAAA,MAAA;AAC1B,MAAA,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AACf,MAAA,QAAA,IAAY,CAAE,CAAA,KAAA,CAAA;AAAA,KAClB;AAEA,IAAA,MAAM,OAAU,GAAA,QAAA,IAAY,QAAW,GAAA,IAAA,GAAO,QAAW,GAAA,QAAA,CAAA;AACzD,IAAO,OAAA,EAAE,QAAU,EAAA,QAAA,EAAU,OAAQ,EAAA,CAAA;AAAA,GACzC;AACJ,CAAA;AAEA,MAAM,IAAA,GAAO,OAAO,CAAC,CAAA;;AC9crB,MAAM,UAAyB,GAAA,WAAA,CAAA;AAExB,MAAM,mBAA8C,CAAA;AAAA,EAevD,YAAoB,MAAsB,EAAA;AAAtB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAEhB,IAAA,MAAM,UAAU,MAAO,CAAA,QAAA,CAAA;AACvB,IAAA,IAAI,CAAC,OAAQ,CAAA,SAAA,EAAiB,MAAA,IAAI,MAAM,qCAAqC,CAAA,CAAA;AAC7E,IAAI,IAAA,CAAC,OAAO,OAAQ,CAAA,OAAA,CAAQ,QAAc,MAAA,IAAI,MAAM,sBAAsB,CAAA,CAAA;AAG1E,IAAA,MAAM,YAAY,OAAQ,CAAA,SAAA,CAAA;AAC1B,IAAA,MAAM,UAAU,IAAIC,WAAA,CAAU,QAAQ,EAAI,EAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AAC7D,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,MAAM,CAAG,EAAA;AAChC,MAAM,MAAA,IAAI,MAAM,kDAAmD,CAAA,CAAA;AAAA,KACvE;AAGA,IAAI,IAAA,IAAA,GAAyB,EAAE,UAAW,EAAA,CAAA;AAC1C,IAAA,IAAI,MAAO,CAAA,OAAA,CAAQ,OAAQ,CAAA,MAAA,GAAS,CAAK,IAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,UAAW,CAAA,IAAI,CAAG,EAAA;AACjF,MAAA,IAAA,CAAK,UAAa,GAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAAA,KAC9C;AAEA,IAAA,IAAA,CAAK,MAAS,GAAA,OAAA,CAAA;AACd,IAAK,IAAA,CAAA,UAAA,GAAa,IAAI,UAAW,CAAA,MAAA,CAAO,QAAQ,OAAQ,CAAA,CAAC,GAAG,IAAI,CAAA,CAAA;AAEhE,IAAA,MAAM,YAAe,GAAA;AAAA,MACjB,SAAA;AAAA,MACA,MAAM,gBAA6C,EAAmB,EAAA;AAClE,QAAO,OAAA,OAAA,CAAQ,gBAAgB,EAAE,CAAA,CAAA;AAAA,OACrC;AAAA,MACA,MAAM,oBAAiD,GAAwB,EAAA;AAC3E,QAAO,OAAA,OAAA,CAAQ,GAAI,CAAA,GAAA,CAAI,GAAI,CAAA,CAAC,OAAO,OAAQ,CAAA,eAAA,CAAgB,EAAE,CAAC,CAAC,CAAA,CAAA;AAAA,OACnE;AAAA,KACJ,CAAA;AAEA,IAAK,IAAA,CAAA,MAAA,GAAS,IAAI,cAAe,CAAA,IAAA,CAAK,YAAY,YAAc,EAAA,EAAE,YAAY,CAAA,CAAA;AAG9E,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAI,aAAc,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAClD,IAAA,IAAA,CAAK,kBAAqB,GAAA,IAAI,kBAAmB,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,GAEhE;AAAA,EA5CA,IAAI,SAAuB,GAAA;AACvB,IAAA,OAAO,IAAIC,SAAA,CAAU,IAAK,CAAA,MAAA,CAAO,KAAK,KAAK,CAAA,CAAA;AAAA,GAC/C;AAAA,EAEA,IAAI,OAAU,GAAA;AAAE,IAAA,OAAO,KAAK,MAAO,CAAA,OAAA,CAAA;AAAA,GAAS;AAAA,EAgD5C,MAAM,YAAmC,GAAA;AACrC,IAAA,MAAM,OAAO,IAAK,CAAA,SAAA,CAAA;AAGlB,IAAM,MAAA,CAAC,cAAc,CAAA,GAAI,mCAAoC,EAAA,CAAA;AAC7D,IAAM,MAAA,CAAC,QAAQ,CAAA,GAAI,6BAA8B,EAAA,CAAA;AACjD,IAAM,MAAA,aAAA,GAAgB,iBAAiB,IAAI,CAAA,CAAA;AAG3C,IAAA,MAAM,CAAC,cAAgB,EAAA,aAAA,EAAe,UAAU,CAAI,GAAA,MAAM,QAAQ,GAAI,CAAA;AAAA,MAClE,IAAA,CAAK,UAAW,CAAA,UAAA,CAAW,IAAI,CAAA;AAAA,MAC/B,KAAK,UAAW,CAAA,sBAAA,CAAuB,aAAa,CAAE,CAAA,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MACtE,KAAK,kBAAmB,CAAA,aAAA,CAAc,IAAI,CAAE,CAAA,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,KAC/D,CAAA,CAAA;AAGD,IAAM,MAAA,eAAA,GAAkB,aAAe,EAAA,KAAA,EAAO,MAAU,IAAA,GAAA,CAAA;AACxD,IAAM,MAAA,cAAA,GAAiB,aAAe,EAAA,KAAA,EAAO,QAAY,IAAA,CAAA,CAAA;AAGzD,IAAA,MAAM,mBAAmB,UAAY,EAAA,cAAA,GAC9B,UAAW,CAAA,cAAA,CAAuB,UACnC,GAAA,GAAA,CAAA;AACN,IAAA,MAAM,eAAkB,GAAA,cAAA,CAAA;AAGxB,IAAA,MAAM,SAAuB,GAAA;AAAA,MACzB,MAAQ,EAAA;AAAA,QACJ,MAAQ,EAAA,KAAA;AAAA,QACR,QAAU,EAAA,CAAA;AAAA,QACV,MAAA,EAAQ,OAAO,cAAc,CAAA;AAAA,OACjC;AAAA,MACA,MAAQ,EAAA;AAAA,QACJ,MAAQ,EAAA,QAAA;AAAA,QACR,QAAU,EAAA,cAAA;AAAA,QACV,MAAA,EAAQ,OAAO,eAAe,CAAA;AAAA,OAClC;AAAA,MACA,OAAS,EAAA;AAAA,QACL,MAAQ,EAAA,QAAA;AAAA,QACR,QAAU,EAAA,eAAA;AAAA,QACV,MAAA,EAAQ,OAAO,gBAAgB,CAAA;AAAA,OACnC;AAAA,MACA,MAAQ,EAAA;AAAA,QACJ,aAAA,EAAe,cAAc,QAAS,EAAA;AAAA,QACtC,cAAA,EAAgB,eAAe,QAAS,EAAA;AAAA,QACxC,QAAA,EAAU,SAAS,QAAS,EAAA;AAAA,OAChC;AAAA,KACJ,CAAA;AAGA,IAAO,OAAA,SAAA,CAAA;AAAA,GACX;AAAA,EAKA,MAAM,aAAqC,GAAA;AACvC,IAAA,OAAO,IAAK,CAAA,kBAAA,CAAmB,aAAc,CAAA,IAAA,CAAK,SAAS,CAAA,CAAA;AAAA,GAC/D;AAAA,EAEA,cAAiB,GAAA;AAAA,GAEjB;AAAA,EAUA,MAAM,SAAS,MAAkC,EAAA;AAC7C,IAAI,IAAA;AACA,MAAQ,OAAA,CAAA,GAAA,CAAI,wDAAwD,MAAM,CAAA,CAAA;AAG1E,MAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,mBAAmB,sBAAuB,CAAA,EAAE,QAAQ,CAAA,CAAA;AAC7E,MAAA,IAAI,CAAC,KAAA,CAAM,UAAc,IAAA,CAAC,KAAM,CAAA,WAAA;AAC5B,QAAA,MAAM,IAAI,KAAA,CAAM,KAAM,CAAA,MAAA,IAAU,8CAA8C,CAAA,CAAA;AAElF,MAAQ,OAAA,CAAA,GAAA,CAAI,2BAA2B,KAAK,CAAA,CAAA;AAE5C,MAAM,MAAA,EAAE,IAAI,SAAW,EAAA,oBAAA,KAAyB,MAAM,IAAA,CAAK,SAAU,CAAA,KAAA,CAAM,WAAW,CAAA,CAAA;AACtF,MAAA,MAAM,MAAS,GAAA,MAAM,IAAK,CAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AAC5C,MAAM,MAAA,MAAA,GAAS,MAAM,IAAK,CAAA,kBAAA,CAAmB,QAAQ,EAAE,SAAA,EAAW,sBAAsB,CAAA,CAAA;AAGxF,MAAA,OAAA,CAAQ,IAAI,aAAe,EAAA;AAAA,QACvB,gBAAgB,KAAM,CAAA,cAAA;AAAA,QACtB,KAAA,EAAO,MAAM,IAAK,CAAA,QAAA;AAAA,QAClB,SAAW,EAAA,KAAA,CAAM,IAAK,CAAA,QAAA,CAAS,IAAI,CAAM,CAAA,MAAA;AAAA,UACrC,KAAA,EAAO,CAAE,CAAA,KAAA,CAAM,QAAS,EAAA;AAAA,UACxB,KAAA,EAAO,CAAE,CAAA,KAAA,CAAM,QAAS,EAAA;AAAA,SAC1B,CAAA,CAAA;AAAA,OACL,CAAA,CAAA;AAED,MAAA,OAAO,MAAO,CAAA,SAAA,CAAA;AAAA,aACT,KAAO,EAAA;AACZ,MAAQ,OAAA,CAAA,KAAA,CAAM,sBAAsB,KAAK,CAAA,CAAA;AACzC,MAAM,MAAA,KAAA,CAAA;AAAA,KACV;AAAA,GACJ;AAAA,EAOA,MAAM,QAAQ,QAAmC,EAAA;AAC7C,IAAM,MAAA,EAAE,aAAgB,GAAA,MAAM,KAAK,aAAc,CAAA,cAAA,CAAe,IAAK,CAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AACxF,IAAM,MAAA,EAAE,IAAI,SAAW,EAAA,oBAAA,KAAyB,MAAM,IAAA,CAAK,UAAU,WAAW,CAAA,CAAA;AAChF,IAAA,MAAM,MAAS,GAAA,MAAM,IAAK,CAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AAC5C,IAAM,MAAA,MAAA,GAAS,MAAM,IAAK,CAAA,kBAAA,CAAmB,QAAQ,EAAE,SAAA,EAAW,sBAAsB,CAAA,CAAA;AACxF,IAAA,OAAO,MAAO,CAAA,SAAA,CAAA;AAAA,GAClB;AAAA,EAEA,MAAc,kBACV,CAAA,MAAA,EACA,GACiB,EAAA;AAEjB,IAAA,MAAM,YAAY,MAAM,IAAA,CAAK,WAAW,kBAAmB,CAAA,MAAA,CAAO,WAAa,EAAA;AAAA,MAC3E,aAAe,EAAA,KAAA;AAAA,MACf,mBAAqB,EAAA,UAAA;AAAA,MACrB,UAAY,EAAA,CAAA;AAAA,KACf,CAAA,CAAA;AAGD,IAAM,MAAA,IAAA,GAAO,MAAM,IAAA,CAAK,UAAW,CAAA,kBAAA;AAAA,MAC/B,EAAE,SAAW,EAAA,SAAA,EAAW,IAAI,SAAW,EAAA,oBAAA,EAAsB,IAAI,oBAAqB,EAAA;AAAA,MACtF,UAAA;AAAA,KACJ,CAAA;AAEA,IAAM,MAAA,EAAA,GAAK,CAAC,IAAA,CAAK,KAAM,CAAA,GAAA,CAAA;AACvB,IAAA,IAAI,CAAC,EAAI,EAAA;AACL,MAAM,MAAA,IAAI,MAAM,CAAuB,oBAAA,EAAA,IAAA,CAAK,UAAU,IAAK,CAAA,KAAA,CAAM,GAAG,CAAC,CAAE,CAAA,CAAA,CAAA;AAAA,KAC3E;AACA,IAAA,OAAO,EAAE,SAAW,EAAA,IAAA,EAAM,KAAK,OAAQ,CAAA,IAAA,EAAM,WAAW,IAAK,EAAA,CAAA;AAAA,GACjE;AAAA,EAEA,MAAM,gBAAgB,EAAmD,EAAA;AACrE,IAAA,OAAO,MAAM,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,gBAAgB,EAAE,CAAA,CAAA;AAAA,GACtD;AAAA,EAEA,MAAM,gBAAgB,MAA0D,EAAA;AAC5E,IAAA,OAAO,MAAM,IAAA,CAAK,MAAO,CAAA,cAAA,CAAe,MAAM,CAAA,CAAA;AAAA,GAClD;AAAA,EAEA,MAAM,UAAU,EAAgG,EAAA;AAC5G,IAAM,MAAA,EAAE,WAAW,oBAAqB,EAAA,GAAI,MAAM,IAAK,CAAA,UAAA,CAAW,mBAAmB,WAAW,CAAA,CAAA;AAChG,IAAA,EAAA,CAAG,eAAkB,GAAA,SAAA,CAAA;AACrB,IAAA,EAAA,CAAG,WAAW,IAAK,CAAA,SAAA,CAAA;AAEnB,IAAO,OAAA,EAAE,EAAI,EAAA,SAAA,EAAW,oBAAqB,EAAA,CAAA;AAAA,GACjD;AACJ;;ACvOO,MAAM,MAAO,CAAA;AAAA,EAuBhB,WAAA,CAAY,QAAuC,eAA2B,EAAA;AArB9E,IAAQ,IAAA,CAAA,OAAA,QAA4C,GAAI,EAAA,CAAA;AAsBpD,IAAA,IAAI,CAAC,MAAA,EAAc,MAAA,IAAI,MAAM,0BAA0B,CAAA,CAAA;AACvD,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAG,EAAA,MAAA,GAAS,CAAC,MAAM,CAAA,CAAA;AAE5C,IAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACpB,MAAQ,QAAA,GAAA,CAAI,QAAQ,OAAS;AAAA,QACzB,KAAK,UAAW,CAAA,WAAA;AACZ,UAAK,IAAA,CAAA,OAAA,CAAQ,IAAI,GAAI,CAAA,OAAA,CAAQ,SAAS,IAAI,mBAAA,CAAoB,GAAG,CAAC,CAAA,CAAA;AAClE,UAAA,MAAA;AAKJ,OAGJ;AAAA,KACH,CAAA,CAAA;AAED,IAAA,IAAA,CAAK,eAAkB,GAAA,eAAA,CAAA;AAAA,GAC3B;AAAA,EAnCA,IAAI,MAAqC,GAAA;AACrC,IAAA,OAAO,IAAK,CAAA,eAAA,IAAmB,IAAK,CAAA,YAAA,CAAa,IAAK,CAAA,eAAe,CAC/D,GAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,IAAK,CAAA,eAAe,CAAI,GAAA,KAAA,CAAA,CAAA;AAAA,GACnD;AAAA,EAGA,aAAa,OAA2B,EAAA;AACpC,IAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAAA,GACnC;AAAA,EAGA,cAA4B,GAAA;AACxB,IAAA,OAAO,CAAC,GAAG,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,GAClC;AAAA,EA4BA,SAAS,OAA2B,EAAA;AAChC,IAAA,IAAA,CAAK,eAAkB,GAAA,OAAA,CAAA;AACvB,IAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAAA,GACnC;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BO,MAAM,WAAW,aAAc,CAAA,IAAA;AAC/B,MAAM,YAAY,cAAe,CAAA,IAAA;AACjC,MAAM,aAAa,eAAgB,CAAA,IAAA;AAGnC,MAAM,SAAyB,GAAA;AAAA,EAClC,KAAO,EAAA,4CAAA;AACX,EAAA;AASO,MAAM,SAAqC,GAAA;AAAA,EAC9C,OAAO,EAAE,OAAA,EAAS,SAAU,CAAA,KAAA,EAAO,KAAK,KAAiB,CAAA,EAAA;AAE7D,EAAA;AAUO,MAAM,uBAAwB,CAAA;AAAA,EAOjC,YAAY,IAAuB,EAAA;AAHnC,IAAA,IAAA,CAAgB,WAAqD,EAAC,CAAA;AACtE,IAAA,IAAA,CAAgB,QAAyD,EAAC,CAAA;AAGtE,IAAA,IAAA,CAAK,WAAW,IAAK,CAAA,QAAA,CAAA;AACrB,IAAA,IAAA,CAAK,SAAS,IAAK,CAAA,MAAA,CAAA;AAEnB,IAAC,OAAO,IAAK,CAAA,SAAS,CAAqB,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACzD,MAAA,MAAM,EAAE,OAAA,EAAS,GAAI,EAAA,GAAI,UAAU,IAAI,CAAA,CAAA;AACvC,MAAA,IAAA,CAAK,MAAM,IAAI,CAAA,GAAI,IAAI,MAAO,CAAA,KAAA,CAAM,UAAU,GAAG,CAAA,CAAA;AACjD,MAAK,IAAA,CAAA,QAAA,CAAS,IAAI,CAAA,GAAI,IAAI,MAAA,CAAO,QAAS,CAAA,OAAA,EAAS,GAAK,EAAA,IAAA,CAAK,MAAU,IAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,KACvF,CAAA,CAAA;AAAA,GACL;AAAA,EAGO,WAAW,IAA4B,EAAA;AAC1C,IAAO,OAAA,SAAA,CAAU,IAAI,CAAE,CAAA,OAAA,CAAA;AAAA,GAC3B;AAAA,EAGA,YAAY,IAA8B,EAAA;AACtC,IAAA,MAAM,EAAE,OAAA,EAAS,GAAI,EAAA,GAAI,UAAU,IAAI,CAAA,CAAA;AACvC,IAAA,OAAO,IAAI,QAAA,CAAS,OAAS,EAAA,GAAA,EAAK,KAAK,QAAQ,CAAA,CAAA;AAAA,GACnD;AAAA,EAGA,SAAS,IAA8B,EAAA;AACnC,IAAA,IAAI,CAAC,IAAK,CAAA,MAAA,EAAc,MAAA,IAAI,MAAM,qCAAqC,CAAA,CAAA;AACvE,IAAA,MAAM,EAAE,OAAA,EAAS,GAAI,EAAA,GAAI,UAAU,IAAI,CAAA,CAAA;AACvC,IAAA,OAAO,IAAI,QAAA,CAAS,OAAS,EAAA,GAAA,EAAK,KAAK,MAAM,CAAA,CAAA;AAAA,GACjD;AAAA,EAGA,MAAM,UAAa,GAAA;AACf,IAAO,OAAA,IAAA,CAAK,UAAU,UAAW,EAAA,CAAA;AAAA,GACrC;AAAA,EAGO,iBAAoC,GAAA;AACvC,IAAO,OAAA,MAAA,CAAO,KAAK,SAAS,CAAA,CAAA;AAAA,GAChC;AAAA,EAGO,aAAa,IAA4C,EAAA;AAC5D,IAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAC7B,IAAA,IAAI,CAAC,KAAO,EAAA,MAAM,IAAI,KAAM,CAAA,CAAA,8BAAA,EAAiC,IAAI,CAAE,CAAA,CAAA,CAAA;AACnE,IAAO,OAAA,KAAA,CAAA;AAAA,GACX;AAAA,EAGO,YAAY,IAAqC,EAAA;AACpD,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAC9B,IAAA,IAAI,CAAC,GAAK,EAAA,MAAM,IAAI,KAAM,CAAA,CAAA,6BAAA,EAAgC,IAAI,CAAE,CAAA,CAAA,CAAA;AAChE,IAAO,OAAA,GAAA,CAAA;AAAA,GACX;AAAA,EAIA,IAAW,aAAwC,GAAA;AAC/C,IAAA,MAAM,MAAa,EAAC,CAAA;AAGpB,IAAA,MAAM,YAAe,GAAA;AAAA,MACjB,aAAA;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,KAEJ,CAAA;AAGA,IAAA,YAAA,CAAa,QAAQ,CAAY,QAAA,KAAA;AAC7B,MAAI,IAAA,QAAA,IAAY,SAAS,GAAK,EAAA;AAC1B,QAAI,GAAA,CAAA,IAAA,CAAK,GAAG,QAAA,CAAS,GAAG,CAAA,CAAA;AAAA,OAC5B;AAAA,KACH,CAAA,CAAA;AAGD,IAAM,MAAA,IAAA,QAAW,GAAY,EAAA,CAAA;AAC7B,IAAA,MAAM,QAAe,EAAC,CAAA;AACtB,IAAA,KAAA,MAAW,QAAQ,GAAK,EAAA;AACpB,MAAI,IAAA;AACA,QAAA,MAAM,IAAO,GAAA,MAAA,CAAO,KAAM,CAAA,QAAA,CAAS,KAAK,IAAI,CAAA,CAAA;AAC5C,QAAA,MAAM,GAAM,GAAA,CAAA,EAAG,IAAK,CAAA,IAAI,CAAI,CAAA,EAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,KAAM,CAAA,WAAA,CAAY,IAAI,CAAC,GAAG,WAAY,EAAA,CAAA;AACrF,QAAA,IAAI,CAAC,IAAA,CAAK,GAAI,CAAA,GAAG,CAAG,EAAA;AAChB,UAAA,IAAA,CAAK,IAAI,GAAG,CAAA,CAAA;AACZ,UAAA,KAAA,CAAM,KAAK,IAAI,CAAA,CAAA;AAAA,SACnB;AAAA,OACI,CAAA,MAAA;AAAA,OAAE;AAAA,KACd;AAEA,IAAA,OAAO,IAAI,MAAA,CAAO,KAAM,CAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA,GAC3C;AAAA,EAGO,WAAW,UAAsC,EAAA;AACpD,IAAI,IAAA;AACA,MAAO,OAAA,IAAA,CAAK,aAAc,CAAA,UAAA,CAAW,UAAU,CAAA,CAAA;AAAA,KAC3C,CAAA,MAAA;AACJ,MAAA,MAAM,IAAI,KAAA,CAAM,CAA+B,4BAAA,EAAA,UAAU,CAAE,CAAA,CAAA,CAAA;AAAA,KAC/D;AAAA,GACJ;AACJ;;AC9JA,MAAM,wBAA2B,GAAA,8BAAA,CAAA;AAG1B,MAAM,qBAAsB,CAAA;AAAA,EAM/B,YAAoB,MAAsB,EAAA;AAAtB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAEhB,IAAA,IAAI,CAAC,MAAO,CAAA,SAAA,CAAU,aAAa,UAAW,CAAA,MAAA,CAAO,QAAe,CAAG,EAAA;AACnE,MAAM,MAAA,IAAI,MAAM,sCAAsC,CAAA,CAAA;AAAA,KAC1D;AACA,IAAA,IAAA,CAAK,WAAW,MAAO,CAAA,QAAA,CAAA;AAGvB,IAAK,IAAA,CAAA,MAAA,GAAS,IAAK,CAAA,QAAA,CAAS,SAAU,EAAA,CAAA;AACtC,IAAA,IAAA,CAAK,SAAS,MAAO,CAAA,MAAA,CAAA;AAGrB,IAAK,IAAA,CAAA,QAAA,GAAW,IAAI,MAAO,CAAA,QAAA;AAAA,MACvB,wBAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAK,CAAA,MAAA;AAAA,KACT,CAAA;AAAA,GACJ;AAAA,EAGA,MAAM,QAAQ,MAAiC,EAAA;AAE3C,IAAM,MAAA,UAAA,GAAa,MAAM,IAAA,CAAK,QAAS,CAAA,OAAA;AAAA,MACnC,MAAA,CAAO,SAAU,CAAA,IAAA,CAAK,MAAM,CAAA;AAAA,MAC5B;AAAA,OAGA;AAAA,KACJ,CAAA;AAGA,IAAA,MAAM,WAAW,IAAK,EAAA,CAAA;AACtB,IAAA,OAAO,UAAW,CAAA,IAAA,CAAA;AAAA,GACtB;AAAA,EAGA,MAAM,gBAAgB,MAA8B,EAAA;AAChD,IAAO,OAAA,IAAA,CAAK,SAAS,IAAK,CAAA;AAAA,MACtB,EAAI,EAAA,wBAAA;AAAA,MACJ,IAAM,EAAA,IAAA,CAAK,QAAS,CAAA,SAAA,CAAU,mBAAmB,SAAW,EAAA;AAAA,QACxD,MAAA,CAAO,SAAU,CAAA,IAAA,CAAK,MAAM,CAAA;AAAA,OAC/B,CAAA;AAAA,KACJ,CAAA,CAAA;AAAA,GACL;AAGJ;;AC/DO,MAAM,cAAiB,GAAA;AAAA,EAC1B,OAAA;AACJ,CAAA;;;;;;;;;;;ACQO,MAAM,0BAA2B,CAAA;AAAA,EAGpC,YAAoB,QAA0B,EAAA;AAA1B,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAChB,IAAK,IAAA,CAAA,QAAA,GAAW,IAAI,oBAAA,CAAqB,QAAQ,CAAA,CAAA;AAAA,GACrD;AAAA,EAGA,IAAY,OAAyC,GAAA;AACjD,IAAO,OAAA,IAAA,CAAK,QAAS,CAAA,UAAA,CAAW,sBAAsB,CAAA,CAAA;AAAA,GAC1D;AAAA,EAOA,MAAM,kBAAkB,SAAuD,EAAA;AAC3E,IAAM,MAAA,CAAC,eAAe,CAAA,GAAI,wBAAyB,EAAA,CAAA;AACnD,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,OACf,CAAA,UAAA,GACA,QAAS,CAAA;AAAA,MACN,SAAA;AAAA,MAEA,eAAA;AAAA,MACA,eAAe,aAAc,CAAA,SAAA;AAAA,KAChC,EACA,WAAY,EAAA,CAAA;AAAA,GACrB;AAAA,EAMA,MAAM,uBAAuB,MAQO,EAAA;AAChC,IAAM,MAAA,EAAE,YAAY,WAAa,EAAA,GAAA,EAAK,aAAa,YAAc,EAAA,WAAA,EAAa,aAAgB,GAAA,MAAA,CAAA;AAE9F,IAAM,MAAA,CAAC,eAAe,CAAA,GAAI,wBAAyB,EAAA,CAAA;AACnD,IAAA,MAAM,CAAC,eAAe,CAAI,GAAA,wBAAA,CAAyB,WAAW,CAAA,CAAA;AAE9D,IAAA,MAAM,QAAgB,GAAA;AAAA,MAClB,UAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAe,aAAc,CAAA,SAAA;AAAA,MAC7B,GAAI,WAAe,IAAA,EAAE,WAAY,EAAA;AAAA,MACjC,GAAI,YAAgB,IAAA,EAAE,YAAa,EAAA;AAAA,MACnC,GAAI,WAAe,IAAA,EAAE,WAAY,EAAA;AAAA,MACjC,GAAI,WAAe,IAAA,EAAE,WAAY,EAAA;AAAA,KACrC,CAAA;AAEA,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,OACf,CAAA,eAAA,CAAgB,IAAI,EAAA,CAAG,GAAG,CAAC,CAC3B,CAAA,QAAA,CAAS,QAAQ,CAAA,CACjB,WAAY,EAAA,CAAA;AAAA,GACrB;AAAA,EAGA,MAAM,wBAAwB,MAGM,EAAA;AAChC,IAAM,MAAA,EAAE,SAAW,EAAA,eAAA,EAAoB,GAAA,MAAA,CAAA;AACvC,IAAA,IAAI,gBAAgB,MAAW,KAAA,EAAA,EAAU,MAAA,IAAI,MAAM,oCAAoC,CAAA,CAAA;AAEvF,IAAM,MAAA,CAAC,KAAK,CAAA,GAAI,mBAAoB,EAAA,CAAA;AACpC,IAAA,OAAO,KAAK,OAAQ,CAAA,OAAA,CACf,gBAAiB,CAAA,eAAe,EAChC,QAAS,CAAA;AAAA,MAEN,SAAA;AAAA,MACA,KAAA;AAAA,MACA,eAAe,aAAc,CAAA,SAAA;AAAA,KAChC,EACA,WAAY,EAAA,CAAA;AAAA,GACrB;AAAA,EAIA,MAAM,kBAAkB,SAA4C,EAAA;AAChE,IAAO,OAAA,IAAI,aAAc,CAAA,GAAA,CAAI,MAAM,IAAK,CAAA,iBAAA,CAAkB,SAAS,CAAC,CAAA,CAAA;AAAA,GACxE;AAAA,EAEA,MAAM,uBAAuB,MAQJ,EAAA;AACrB,IAAO,OAAA,IAAI,aAAc,CAAA,GAAA,CAAI,MAAM,IAAK,CAAA,sBAAA,CAAuB,MAAM,CAAC,CAAA,CAAA;AAAA,GAC1E;AAAA,EAEA,MAAM,wBAAwB,MAGL,EAAA;AACrB,IAAO,OAAA,IAAI,aAAc,CAAA,GAAA,CAAI,MAAM,IAAK,CAAA,uBAAA,CAAwB,MAAM,CAAC,CAAA,CAAA;AAAA,GAC3E;AAAA,EAOA,MAAM,cAAuC,GAAA;AACzC,IAAM,MAAA,CAAC,IAAI,CAAA,GAAI,wBAAyB,EAAA,CAAA;AACxC,IAAI,IAAA,OAAA,CAAA;AACJ,IAAI,IAAA;AACA,MAAA,OAAA,GAAU,MAAM,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,eAAA,CAAgB,MAAM,IAAI,CAAA,CAAA;AAAA,KAC3D,CAAA,MAAA;AACJ,MAAA,OAAO,EAAC,CAAA;AAAA,KACZ;AACA,IAAA,MAAM,MAAmB,EAAC,CAAA;AAC1B,IAAA,IAAI,SAAoB,OAAQ,CAAA,aAAA,CAAA;AAChC,IAAA,OAAO,UAAU,CAAC,MAAA,CAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAG,EAAA;AAChD,MAAA,GAAA,CAAI,KAAK,MAAM,CAAA,CAAA;AACf,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,QAAQ,OAAQ,CAAA,eAAA,CAAgB,MAAM,MAAM,CAAA,CAAA;AACnE,MAAA,MAAA,GAAS,GAAI,CAAA,aAAA,CAAA;AAAA,KACjB;AACA,IAAO,OAAA,GAAA,CAAA;AAAA,GACX;AAAA,EAGA,MAAM,mBAAmB,WAA6C,EAAA;AAClE,IAAA,MAAM,CAAC,MAAM,CAAI,GAAA,wBAAA,CAAyB,WAAW,CAAA,CAAA;AACrD,IAAI,IAAA;AACA,MAAA,OAAO,MAAM,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,eAAA,CAAgB,MAAM,MAAM,CAAA,CAAA;AAAA,KAC1D,CAAA,MAAA;AACJ,MAAO,OAAA,IAAA,CAAA;AAAA,KACX;AAAA,GACJ;AACJ;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wireio/stake",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "LIQ Staking Module for Wire Network",
|
|
5
5
|
"homepage": "https://gitea.gitgo.app/Wire/sdk-stake",
|
|
6
6
|
"license": "FSL-1.1-Apache-2.0",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@types/node": "^18.19.0",
|
|
62
62
|
"@typescript-eslint/eslint-plugin": "^5.60.0",
|
|
63
63
|
"@typescript-eslint/parser": "^5.60.0",
|
|
64
|
-
"@wireio/core": "^0.2.
|
|
64
|
+
"@wireio/core": "^0.2.7",
|
|
65
65
|
"assert": "^2.0.0",
|
|
66
66
|
"chai": "^4.3.6",
|
|
67
67
|
"esbuild": "^0.25.8",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"address": "
|
|
2
|
+
"address": "GqksbjX3r7SHZ5e8c6nFyPecZNnBSUTYHbF8U2YDb5Qf",
|
|
3
3
|
"metadata": {
|
|
4
4
|
"name": "deposit",
|
|
5
5
|
"version": "0.1.0",
|
|
@@ -55,10 +55,6 @@
|
|
|
55
55
|
]
|
|
56
56
|
}
|
|
57
57
|
},
|
|
58
|
-
{
|
|
59
|
-
"name": "treasury_wallet",
|
|
60
|
-
"writable": true
|
|
61
|
-
},
|
|
62
58
|
{
|
|
63
59
|
"name": "system_program",
|
|
64
60
|
"address": "11111111111111111111111111111111"
|
|
@@ -72,14 +68,13 @@
|
|
|
72
68
|
},
|
|
73
69
|
{
|
|
74
70
|
"name": "stake_controller_program",
|
|
75
|
-
"address": "
|
|
71
|
+
"address": "4Ab1SwV6RPUN5Btnf95qvQCyNVR3iHnXjnMYaKsgimTp"
|
|
76
72
|
},
|
|
77
73
|
{
|
|
78
74
|
"name": "liqsol_program"
|
|
79
75
|
},
|
|
80
76
|
{
|
|
81
|
-
"name": "
|
|
82
|
-
"address": "ABMUzgJCoJ17WPYvxZg4Biuo5oCaEbuD4svUVGFBTWCz"
|
|
77
|
+
"name": "pay_rate_history"
|
|
83
78
|
},
|
|
84
79
|
{
|
|
85
80
|
"name": "stake_program",
|
|
@@ -87,7 +82,7 @@
|
|
|
87
82
|
},
|
|
88
83
|
{
|
|
89
84
|
"name": "distribution_program",
|
|
90
|
-
"address": "
|
|
85
|
+
"address": "26LF4typrWwBapujpvUPFpdfs4pBb6RwcWoBBy7Awf5j"
|
|
91
86
|
},
|
|
92
87
|
{
|
|
93
88
|
"name": "liqsol_mint",
|
|
@@ -166,7 +161,48 @@
|
|
|
166
161
|
"writable": true
|
|
167
162
|
},
|
|
168
163
|
{
|
|
169
|
-
"name": "controller_state"
|
|
164
|
+
"name": "controller_state",
|
|
165
|
+
"writable": true
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"name": "global_stake_info",
|
|
169
|
+
"writable": true
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "bucket_authority",
|
|
173
|
+
"pda": {
|
|
174
|
+
"seeds": [
|
|
175
|
+
{
|
|
176
|
+
"kind": "const",
|
|
177
|
+
"value": [
|
|
178
|
+
108,
|
|
179
|
+
105,
|
|
180
|
+
113,
|
|
181
|
+
115,
|
|
182
|
+
111,
|
|
183
|
+
108,
|
|
184
|
+
95,
|
|
185
|
+
98,
|
|
186
|
+
117,
|
|
187
|
+
99,
|
|
188
|
+
107,
|
|
189
|
+
101,
|
|
190
|
+
116
|
|
191
|
+
]
|
|
192
|
+
}
|
|
193
|
+
],
|
|
194
|
+
"program": {
|
|
195
|
+
"kind": "account",
|
|
196
|
+
"path": "stake_controller_program"
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"name": "bucket_token_account",
|
|
202
|
+
"docs": [
|
|
203
|
+
"The bucket's associated token account"
|
|
204
|
+
],
|
|
205
|
+
"writable": true
|
|
170
206
|
},
|
|
171
207
|
{
|
|
172
208
|
"name": "user_record",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"address": "
|
|
2
|
+
"address": "26LF4typrWwBapujpvUPFpdfs4pBb6RwcWoBBy7Awf5j",
|
|
3
3
|
"metadata": {
|
|
4
4
|
"name": "distribution",
|
|
5
5
|
"version": "0.1.0",
|
|
@@ -179,18 +179,47 @@
|
|
|
179
179
|
"writable": true
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
|
-
"name": "
|
|
183
|
-
"address": "
|
|
182
|
+
"name": "stake_controller_program",
|
|
183
|
+
"address": "4Ab1SwV6RPUN5Btnf95qvQCyNVR3iHnXjnMYaKsgimTp"
|
|
184
184
|
},
|
|
185
185
|
{
|
|
186
|
-
"name": "
|
|
186
|
+
"name": "bucket_authority",
|
|
187
|
+
"pda": {
|
|
188
|
+
"seeds": [
|
|
189
|
+
{
|
|
190
|
+
"kind": "const",
|
|
191
|
+
"value": [
|
|
192
|
+
108,
|
|
193
|
+
105,
|
|
194
|
+
113,
|
|
195
|
+
115,
|
|
196
|
+
111,
|
|
197
|
+
108,
|
|
198
|
+
95,
|
|
199
|
+
98,
|
|
200
|
+
117,
|
|
201
|
+
99,
|
|
202
|
+
107,
|
|
203
|
+
101,
|
|
204
|
+
116
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
],
|
|
208
|
+
"program": {
|
|
209
|
+
"kind": "account",
|
|
210
|
+
"path": "stake_controller_program"
|
|
211
|
+
}
|
|
212
|
+
}
|
|
187
213
|
},
|
|
188
214
|
{
|
|
189
|
-
"name": "
|
|
190
|
-
"
|
|
215
|
+
"name": "bucket_token_account",
|
|
216
|
+
"docs": [
|
|
217
|
+
"The bucket's associated token account holding liqSOL"
|
|
218
|
+
],
|
|
219
|
+
"writable": true
|
|
191
220
|
},
|
|
192
221
|
{
|
|
193
|
-
"name": "
|
|
222
|
+
"name": "pay_rate_history"
|
|
194
223
|
},
|
|
195
224
|
{
|
|
196
225
|
"name": "token_program"
|
|
@@ -380,7 +409,10 @@
|
|
|
380
409
|
"name": "token_program"
|
|
381
410
|
},
|
|
382
411
|
{
|
|
383
|
-
"name": "
|
|
412
|
+
"name": "stake_controller_program"
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"name": "pay_rate_history"
|
|
384
416
|
},
|
|
385
417
|
{
|
|
386
418
|
"name": "system_program",
|