{
  "version": "0.1.0",
  "name": "kamino_vault",
  "instructions": [
    {
      "name": "initVault",
      "accounts": [
        {
          "name": "adminAuthority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "baseVaultAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "baseTokenMint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "sharesMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "adminTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "sharesTokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateReserveAllocation",
      "accounts": [
        {
          "name": "signer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "baseVaultAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "reserveCollateralMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserve",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "ctokenVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveCollateralTokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "weight",
          "type": "u64"
        },
        {
          "name": "cap",
          "type": "u64"
        }
      ]
    },
    {
      "name": "deposit",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenMint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "baseVaultAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "sharesMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userTokenAta",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userSharesAta",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "klendProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "sharesTokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "eventAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "program",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "maxAmount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "withdraw",
      "accounts": [
        {
          "name": "withdrawFromAvailable",
          "accounts": [
            {
              "name": "user",
              "isMut": true,
              "isSigner": true
            },
            {
              "name": "vaultState",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "tokenVault",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "baseVaultAuthority",
              "isMut": false,
              "isSigner": false
            },
            {
              "name": "userTokenAta",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "tokenMint",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "userSharesAta",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "sharesMint",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "tokenProgram",
              "isMut": false,
              "isSigner": false
            },
            {
              "name": "sharesTokenProgram",
              "isMut": false,
              "isSigner": false
            },
            {
              "name": "klendProgram",
              "isMut": false,
              "isSigner": false
            },
            {
              "name": "eventAuthority",
              "isMut": false,
              "isSigner": false
            },
            {
              "name": "program",
              "isMut": false,
              "isSigner": false
            }
          ]
        },
        {
          "name": "withdrawFromReserveAccounts",
          "accounts": [
            {
              "name": "vaultState",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "reserve",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "ctokenVault",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "lendingMarket",
              "isMut": false,
              "isSigner": false
            },
            {
              "name": "lendingMarketAuthority",
              "isMut": false,
              "isSigner": false
            },
            {
              "name": "reserveLiquiditySupply",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "reserveCollateralMint",
              "isMut": true,
              "isSigner": false
            },
            {
              "name": "reserveCollateralTokenProgram",
              "isMut": false,
              "isSigner": false
            },
            {
              "name": "instructionSysvarAccount",
              "isMut": false,
              "isSigner": false
            }
          ]
        },
        {
          "name": "eventAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "program",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "sharesAmount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "invest",
      "accounts": [
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "payerTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "baseVaultAuthority",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "ctokenVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserve",
          "isMut": true,
          "isSigner": false,
          "docs": [
            "CPI accounts"
          ]
        },
        {
          "name": "lendingMarket",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "lendingMarketAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "reserveLiquiditySupply",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveCollateralMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "klendProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "reserveCollateralTokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "instructionSysvarAccount",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateVaultConfig",
      "accounts": [
        {
          "name": "vaultAdminAuthority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "klendProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "entry",
          "type": {
            "defined": "VaultConfigField"
          }
        },
        {
          "name": "data",
          "type": "bytes"
        }
      ]
    },
    {
      "name": "withdrawPendingFees",
      "accounts": [
        {
          "name": "vaultAdminAuthority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserve",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "ctokenVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "baseVaultAuthority",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenAta",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "lendingMarket",
          "isMut": false,
          "isSigner": false,
          "docs": [
            "CPI accounts"
          ]
        },
        {
          "name": "lendingMarketAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "reserveLiquiditySupply",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveCollateralMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "klendProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "reserveCollateralTokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "instructionSysvarAccount",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "updateAdmin",
      "accounts": [
        {
          "name": "pendingAdmin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "giveUpPendingFees",
      "accounts": [
        {
          "name": "vaultAdminAuthority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "klendProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "maxAmountToGiveUp",
          "type": "u64"
        }
      ]
    },
    {
      "name": "initializeSharesMetadata",
      "accounts": [
        {
          "name": "vaultAdminAuthority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "sharesMint",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "baseVaultAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "sharesMetadata",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "metadataProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "symbol",
          "type": "string"
        },
        {
          "name": "uri",
          "type": "string"
        }
      ]
    },
    {
      "name": "updateSharesMetadata",
      "accounts": [
        {
          "name": "vaultAdminAuthority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "baseVaultAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "sharesMetadata",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "metadataProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "symbol",
          "type": "string"
        },
        {
          "name": "uri",
          "type": "string"
        }
      ]
    },
    {
      "name": "withdrawFromAvailable",
      "accounts": [
        {
          "name": "user",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenVault",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "baseVaultAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "userTokenAta",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "userSharesAta",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "sharesMint",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "sharesTokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "klendProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "eventAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "program",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "sharesAmount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "removeAllocation",
      "accounts": [
        {
          "name": "vaultAdminAuthority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "vaultState",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserve",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    }
  ],
  "accounts": [
    {
      "name": "Reserve",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "version",
            "docs": [
              "Version of the reserve"
            ],
            "type": "u64"
          },
          {
            "name": "lastUpdate",
            "docs": [
              "Last slot when supply and rates updated"
            ],
            "type": {
              "defined": "LastUpdate"
            }
          },
          {
            "name": "lendingMarket",
            "docs": [
              "Lending market address"
            ],
            "type": "publicKey"
          },
          {
            "name": "farmCollateral",
            "type": "publicKey"
          },
          {
            "name": "farmDebt",
            "type": "publicKey"
          },
          {
            "name": "liquidity",
            "docs": [
              "Reserve liquidity"
            ],
            "type": {
              "defined": "ReserveLiquidity"
            }
          },
          {
            "name": "reserveLiquidityPadding",
            "type": {
              "array": [
                "u64",
                150
              ]
            }
          },
          {
            "name": "collateral",
            "docs": [
              "Reserve collateral"
            ],
            "type": {
              "defined": "ReserveCollateral"
            }
          },
          {
            "name": "reserveCollateralPadding",
            "type": {
              "array": [
                "u64",
                150
              ]
            }
          },
          {
            "name": "config",
            "docs": [
              "Reserve configuration values"
            ],
            "type": {
              "defined": "ReserveConfig"
            }
          },
          {
            "name": "configPadding",
            "type": {
              "array": [
                "u64",
                116
              ]
            }
          },
          {
            "name": "borrowedAmountOutsideElevationGroup",
            "type": "u64"
          },
          {
            "name": "borrowedAmountsAgainstThisReserveInElevationGroups",
            "docs": [
              "Amount of token borrowed in lamport of debt asset in the given",
              "elevation group when this reserve is part of the collaterals."
            ],
            "type": {
              "array": [
                "u64",
                32
              ]
            }
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u64",
                207
              ]
            }
          }
        ]
      }
    },
    {
      "name": "VaultState",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "vaultAdminAuthority",
            "type": "publicKey"
          },
          {
            "name": "baseVaultAuthority",
            "type": "publicKey"
          },
          {
            "name": "baseVaultAuthorityBump",
            "type": "u64"
          },
          {
            "name": "tokenMint",
            "type": "publicKey"
          },
          {
            "name": "tokenMintDecimals",
            "type": "u64"
          },
          {
            "name": "tokenVault",
            "type": "publicKey"
          },
          {
            "name": "tokenProgram",
            "type": "publicKey"
          },
          {
            "name": "sharesMint",
            "type": "publicKey"
          },
          {
            "name": "sharesMintDecimals",
            "type": "u64"
          },
          {
            "name": "tokenAvailable",
            "type": "u64"
          },
          {
            "name": "sharesIssued",
            "type": "u64"
          },
          {
            "name": "availableCrankFunds",
            "type": "u64"
          },
          {
            "name": "padding0",
            "type": "u64"
          },
          {
            "name": "performanceFeeBps",
            "type": "u64"
          },
          {
            "name": "managementFeeBps",
            "type": "u64"
          },
          {
            "name": "lastFeeChargeTimestamp",
            "type": "u64"
          },
          {
            "name": "prevAumSf",
            "type": "u128"
          },
          {
            "name": "pendingFeesSf",
            "type": "u128"
          },
          {
            "name": "vaultAllocationStrategy",
            "type": {
              "array": [
                {
                  "defined": "VaultAllocation"
                },
                25
              ]
            }
          },
          {
            "name": "padding1",
            "type": {
              "array": [
                "u128",
                256
              ]
            }
          },
          {
            "name": "minDepositAmount",
            "type": "u64"
          },
          {
            "name": "minWithdrawAmount",
            "type": "u64"
          },
          {
            "name": "minInvestAmount",
            "type": "u64"
          },
          {
            "name": "minInvestDelaySlots",
            "type": "u64"
          },
          {
            "name": "crankFundFeePerReserve",
            "type": "u64"
          },
          {
            "name": "pendingAdmin",
            "type": "publicKey"
          },
          {
            "name": "cumulativeEarnedInterestSf",
            "type": "u128"
          },
          {
            "name": "cumulativeMgmtFeesSf",
            "type": "u128"
          },
          {
            "name": "cumulativePerfFeesSf",
            "type": "u128"
          },
          {
            "name": "name",
            "type": {
              "array": [
                "u8",
                40
              ]
            }
          },
          {
            "name": "vaultLookupTable",
            "type": "publicKey"
          },
          {
            "name": "vaultFarm",
            "type": "publicKey"
          },
          {
            "name": "creationTimestamp",
            "type": "u64"
          },
          {
            "name": "padding2",
            "type": "u64"
          },
          {
            "name": "allocationAdmin",
            "type": "publicKey"
          },
          {
            "name": "padding3",
            "type": {
              "array": [
                "u128",
                242
              ]
            }
          }
        ]
      }
    }
  ],
  "types": [
    {
      "name": "LastUpdate",
      "docs": [
        "Last update state"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "slot",
            "docs": [
              "Last slot when updated"
            ],
            "type": "u64"
          },
          {
            "name": "stale",
            "docs": [
              "True when marked stale, false when slot updated"
            ],
            "type": "u8"
          },
          {
            "name": "priceStatus",
            "docs": [
              "Status of the prices used to calculate the last update"
            ],
            "type": "u8"
          },
          {
            "name": "placeholder",
            "type": {
              "array": [
                "u8",
                6
              ]
            }
          }
        ]
      }
    },
    {
      "name": "BigFractionBytes",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "value",
            "type": {
              "array": [
                "u64",
                4
              ]
            }
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u64",
                2
              ]
            }
          }
        ]
      }
    },
    {
      "name": "ReserveCollateral",
      "docs": [
        "Reserve collateral"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mintPubkey",
            "docs": [
              "Reserve collateral mint address"
            ],
            "type": "publicKey"
          },
          {
            "name": "mintTotalSupply",
            "docs": [
              "Reserve collateral mint supply, used for exchange rate"
            ],
            "type": "u64"
          },
          {
            "name": "supplyVault",
            "docs": [
              "Reserve collateral supply address"
            ],
            "type": "publicKey"
          },
          {
            "name": "padding1",
            "type": {
              "array": [
                "u128",
                32
              ]
            }
          },
          {
            "name": "padding2",
            "type": {
              "array": [
                "u128",
                32
              ]
            }
          }
        ]
      }
    },
    {
      "name": "ReserveConfig",
      "docs": [
        "Reserve configuration values"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "status",
            "docs": [
              "Status of the reserve Active/Obsolete/Hidden"
            ],
            "type": "u8"
          },
          {
            "name": "assetTier",
            "docs": [
              "Asset tier -> 0 - regular (collateral & debt), 1 - isolated collateral, 2 - isolated debt"
            ],
            "type": "u8"
          },
          {
            "name": "hostFixedInterestRateBps",
            "docs": [
              "Flat rate that goes to the host"
            ],
            "type": "u16"
          },
          {
            "name": "reserved2",
            "docs": [
              "[DEPRECATED] Space that used to hold 2 fields:",
              "- Boost for side (debt or collateral)",
              "- Reward points multiplier per obligation type",
              "Can be re-used after making sure all underlying production account data is zeroed."
            ],
            "type": {
              "array": [
                "u8",
                9
              ]
            }
          },
          {
            "name": "protocolOrderExecutionFeePct",
            "docs": [
              "Cut of the order execution bonus that the protocol receives, as a percentage"
            ],
            "type": "u8"
          },
          {
            "name": "protocolTakeRatePct",
            "docs": [
              "Protocol take rate is the amount borrowed interest protocol receives, as a percentage"
            ],
            "type": "u8"
          },
          {
            "name": "protocolLiquidationFeePct",
            "docs": [
              "Cut of the liquidation bonus that the protocol receives, as a percentage"
            ],
            "type": "u8"
          },
          {
            "name": "loanToValuePct",
            "docs": [
              "Target ratio of the value of borrows to deposits, as a percentage",
              "0 if use as collateral is disabled"
            ],
            "type": "u8"
          },
          {
            "name": "liquidationThresholdPct",
            "docs": [
              "Loan to value ratio at which an obligation can be liquidated, as percentage"
            ],
            "type": "u8"
          },
          {
            "name": "minLiquidationBonusBps",
            "docs": [
              "Minimum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps"
            ],
            "type": "u16"
          },
          {
            "name": "maxLiquidationBonusBps",
            "docs": [
              "Maximum bonus a liquidator receives when repaying part of an unhealthy obligation, as bps"
            ],
            "type": "u16"
          },
          {
            "name": "badDebtLiquidationBonusBps",
            "docs": [
              "Bad debt liquidation bonus for an undercollateralized obligation, as bps"
            ],
            "type": "u16"
          },
          {
            "name": "deleveragingMarginCallPeriodSecs",
            "docs": [
              "Time in seconds that must pass before redemptions are enabled after the deposit limit is",
              "crossed.",
              "Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case."
            ],
            "type": "u64"
          },
          {
            "name": "deleveragingThresholdDecreaseBpsPerDay",
            "docs": [
              "The rate at which the deleveraging threshold decreases, in bps per day.",
              "Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case."
            ],
            "type": "u64"
          },
          {
            "name": "fees",
            "docs": [
              "Program owner fees assessed, separate from gains due to interest accrual"
            ],
            "type": {
              "defined": "ReserveFees"
            }
          },
          {
            "name": "borrowRateCurve",
            "docs": [
              "Borrow rate curve based on utilization"
            ],
            "type": {
              "defined": "BorrowRateCurve"
            }
          },
          {
            "name": "borrowFactorPct",
            "docs": [
              "Borrow factor in percentage - used for risk adjustment"
            ],
            "type": "u64"
          },
          {
            "name": "depositLimit",
            "docs": [
              "Maximum deposit limit of liquidity in native units, u64::MAX for inf"
            ],
            "type": "u64"
          },
          {
            "name": "borrowLimit",
            "docs": [
              "Maximum amount borrowed, u64::MAX for inf, 0 to disable borrows (protected deposits)"
            ],
            "type": "u64"
          },
          {
            "name": "tokenInfo",
            "docs": [
              "Token id from TokenInfos struct"
            ],
            "type": {
              "defined": "TokenInfo"
            }
          },
          {
            "name": "depositWithdrawalCap",
            "docs": [
              "Deposit withdrawal caps - deposit & redeem"
            ],
            "type": {
              "defined": "WithdrawalCaps"
            }
          },
          {
            "name": "debtWithdrawalCap",
            "docs": [
              "Debt withdrawal caps - borrow & repay"
            ],
            "type": {
              "defined": "WithdrawalCaps"
            }
          },
          {
            "name": "elevationGroups",
            "type": {
              "array": [
                "u8",
                20
              ]
            }
          },
          {
            "name": "disableUsageAsCollOutsideEmode",
            "type": "u8"
          },
          {
            "name": "utilizationLimitBlockBorrowingAbovePct",
            "docs": [
              "Utilization (in percentage) above which borrowing is blocked. 0 to disable."
            ],
            "type": "u8"
          },
          {
            "name": "autodeleverageEnabled",
            "docs": [
              "Whether this reserve should be subject to auto-deleveraging after deposit or borrow limit is",
              "crossed.",
              "Besides this flag, the lending market's flag also needs to be enabled (logical `AND`).",
              "**NOTE:** the manual \"target LTV\" deleveraging (enabled by the risk council for individual",
              "obligations) is NOT affected by this flag."
            ],
            "type": "u8"
          },
          {
            "name": "reserved1",
            "type": {
              "array": [
                "u8",
                1
              ]
            }
          },
          {
            "name": "borrowLimitOutsideElevationGroup",
            "docs": [
              "Maximum amount liquidity of this reserve borrowed outside all elevation groups",
              "- u64::MAX for inf",
              "- 0 to disable borrows outside elevation groups"
            ],
            "type": "u64"
          },
          {
            "name": "borrowLimitAgainstThisCollateralInElevationGroup",
            "docs": [
              "Defines the maximum amount (in lamports of elevation group debt asset)",
              "that can be borrowed when this reserve is used as collateral.",
              "- u64::MAX for inf",
              "- 0 to disable borrows in this elevation group (expected value for the debt asset)"
            ],
            "type": {
              "array": [
                "u64",
                32
              ]
            }
          },
          {
            "name": "deleveragingBonusIncreaseBpsPerDay",
            "docs": [
              "The rate at which the deleveraging-related liquidation bonus increases, in bps per day.",
              "Only relevant when `autodeleverage_enabled == 1`, and must not be 0 in such case."
            ],
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "ReserveFees",
      "docs": [
        "Additional fee information on a reserve",
        "",
        "These exist separately from interest accrual fees, and are specifically for the program owner",
        "and referral fee. The fees are paid out as a percentage of liquidity token amounts during",
        "repayments and liquidations."
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "borrowFeeSf",
            "docs": [
              "Fee assessed on `BorrowObligationLiquidity`, as scaled fraction (60 bits fractional part)",
              "Must be between `0` and `2^60`, such that `2^60 = 1`.  A few examples for",
              "clarity:",
              "1% = (1 << 60) / 100 = 11529215046068470",
              "0.01% (1 basis point) = 115292150460685",
              "0.00001% (Aave borrow fee) = 115292150461"
            ],
            "type": "u64"
          },
          {
            "name": "flashLoanFeeSf",
            "docs": [
              "Fee for flash loan, expressed as scaled fraction.",
              "0.3% (Aave flash loan fee) = 0.003 * 2^60 = 3458764513820541"
            ],
            "type": "u64"
          },
          {
            "name": "padding",
            "docs": [
              "Used for allignment"
            ],
            "type": {
              "array": [
                "u8",
                8
              ]
            }
          }
        ]
      }
    },
    {
      "name": "ReserveLiquidity",
      "docs": [
        "Reserve liquidity"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "mintPubkey",
            "docs": [
              "Reserve liquidity mint address"
            ],
            "type": "publicKey"
          },
          {
            "name": "supplyVault",
            "docs": [
              "Reserve liquidity supply address"
            ],
            "type": "publicKey"
          },
          {
            "name": "feeVault",
            "docs": [
              "Reserve liquidity fee collection address"
            ],
            "type": "publicKey"
          },
          {
            "name": "availableAmount",
            "docs": [
              "Reserve liquidity available"
            ],
            "type": "u64"
          },
          {
            "name": "borrowedAmountSf",
            "docs": [
              "Reserve liquidity borrowed (scaled fraction)"
            ],
            "type": "u128"
          },
          {
            "name": "marketPriceSf",
            "docs": [
              "Reserve liquidity market price in quote currency (scaled fraction)"
            ],
            "type": "u128"
          },
          {
            "name": "marketPriceLastUpdatedTs",
            "docs": [
              "Unix timestamp of the market price (from the oracle)"
            ],
            "type": "u64"
          },
          {
            "name": "mintDecimals",
            "docs": [
              "Reserve liquidity mint decimals"
            ],
            "type": "u64"
          },
          {
            "name": "depositLimitCrossedTimestamp",
            "docs": [
              "Timestamp when the last refresh reserve detected that the liquidity amount is above the deposit cap. When this threshold is crossed, then redemptions (auto-deleverage) are enabled.",
              "If the threshold is not crossed, then the timestamp is set to 0"
            ],
            "type": "u64"
          },
          {
            "name": "borrowLimitCrossedTimestamp",
            "docs": [
              "Timestamp when the last refresh reserve detected that the borrowed amount is above the borrow cap. When this threshold is crossed, then redemptions (auto-deleverage) are enabled.",
              "If the threshold is not crossed, then the timestamp is set to 0"
            ],
            "type": "u64"
          },
          {
            "name": "cumulativeBorrowRateBsf",
            "docs": [
              "Reserve liquidity cumulative borrow rate (scaled fraction)"
            ],
            "type": {
              "defined": "BigFractionBytes"
            }
          },
          {
            "name": "accumulatedProtocolFeesSf",
            "docs": [
              "Reserve cumulative protocol fees (scaled fraction)"
            ],
            "type": "u128"
          },
          {
            "name": "accumulatedReferrerFeesSf",
            "docs": [
              "Reserve cumulative referrer fees (scaled fraction)"
            ],
            "type": "u128"
          },
          {
            "name": "pendingReferrerFeesSf",
            "docs": [
              "Reserve pending referrer fees, to be claimed in refresh_obligation by referrer or protocol (scaled fraction)"
            ],
            "type": "u128"
          },
          {
            "name": "absoluteReferralRateSf",
            "docs": [
              "Reserve referrer fee absolute rate calculated at each refresh_reserve operation (scaled fraction)"
            ],
            "type": "u128"
          },
          {
            "name": "tokenProgram",
            "docs": [
              "Token program of the liquidity mint"
            ],
            "type": "publicKey"
          },
          {
            "name": "padding2",
            "type": {
              "array": [
                "u64",
                51
              ]
            }
          },
          {
            "name": "padding3",
            "type": {
              "array": [
                "u128",
                32
              ]
            }
          }
        ]
      }
    },
    {
      "name": "WithdrawalCaps",
      "docs": [
        "Reserve Withdrawal Caps State"
      ],
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "configCapacity",
            "type": "i64"
          },
          {
            "name": "currentTotal",
            "type": "i64"
          },
          {
            "name": "lastIntervalStartTimestamp",
            "type": "u64"
          },
          {
            "name": "configIntervalLengthSeconds",
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "PriceHeuristic",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "lower",
            "docs": [
              "Lower value of acceptable price"
            ],
            "type": "u64"
          },
          {
            "name": "upper",
            "docs": [
              "Upper value of acceptable price"
            ],
            "type": "u64"
          },
          {
            "name": "exp",
            "docs": [
              "Number of decimals of the previously defined values"
            ],
            "type": "u64"
          }
        ]
      }
    },
    {
      "name": "PythConfiguration",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "price",
            "docs": [
              "Pubkey of the base price feed (disabled if `null` or `default`)"
            ],
            "type": "publicKey"
          }
        ]
      }
    },
    {
      "name": "ScopeConfiguration",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "priceFeed",
            "docs": [
              "Pubkey of the scope price feed (disabled if `null` or `default`)"
            ],
            "type": "publicKey"
          },
          {
            "name": "priceChain",
            "docs": [
              "This is the scope_id price chain that results in a price for the token"
            ],
            "type": {
              "array": [
                "u16",
                4
              ]
            }
          },
          {
            "name": "twapChain",
            "docs": [
              "This is the scope_id price chain for the twap"
            ],
            "type": {
              "array": [
                "u16",
                4
              ]
            }
          }
        ]
      }
    },
    {
      "name": "SwitchboardConfiguration",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "priceAggregator",
            "docs": [
              "Pubkey of the base price feed (disabled if `null` or `default`)"
            ],
            "type": "publicKey"
          },
          {
            "name": "twapAggregator",
            "type": "publicKey"
          }
        ]
      }
    },
    {
      "name": "TokenInfo",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "name",
            "docs": [
              "UTF-8 encoded name of the token (null-terminated)"
            ],
            "type": {
              "array": [
                "u8",
                32
              ]
            }
          },
          {
            "name": "heuristic",
            "docs": [
              "Heuristics limits of acceptable price"
            ],
            "type": {
              "defined": "PriceHeuristic"
            }
          },
          {
            "name": "maxTwapDivergenceBps",
            "docs": [
              "Max divergence between twap and price in bps"
            ],
            "type": "u64"
          },
          {
            "name": "maxAgePriceSeconds",
            "type": "u64"
          },
          {
            "name": "maxAgeTwapSeconds",
            "type": "u64"
          },
          {
            "name": "scopeConfiguration",
            "docs": [
              "Scope price configuration"
            ],
            "type": {
              "defined": "ScopeConfiguration"
            }
          },
          {
            "name": "switchboardConfiguration",
            "docs": [
              "Switchboard configuration"
            ],
            "type": {
              "defined": "SwitchboardConfiguration"
            }
          },
          {
            "name": "pythConfiguration",
            "docs": [
              "Pyth configuration"
            ],
            "type": {
              "defined": "PythConfiguration"
            }
          },
          {
            "name": "blockPriceUsage",
            "type": "u8"
          },
          {
            "name": "reserved",
            "type": {
              "array": [
                "u8",
                7
              ]
            }
          },
          {
            "name": "padding",
            "type": {
              "array": [
                "u64",
                19
              ]
            }
          }
        ]
      }
    },
    {
      "name": "BorrowRateCurve",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "points",
            "type": {
              "array": [
                {
                  "defined": "CurvePoint"
                },
                11
              ]
            }
          }
        ]
      }
    },
    {
      "name": "CurvePoint",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "utilizationRateBps",
            "type": "u32"
          },
          {
            "name": "borrowRateBps",
            "type": "u32"
          }
        ]
      }
    },
    {
      "name": "VaultConfigField",
      "type": {
        "kind": "enum",
        "variants": [
          {
            "name": "PerformanceFeeBps"
          },
          {
            "name": "ManagementFeeBps"
          },
          {
            "name": "MinDepositAmount"
          },
          {
            "name": "MinWithdrawAmount"
          },
          {
            "name": "MinInvestAmount"
          },
          {
            "name": "MinInvestDelaySlots"
          },
          {
            "name": "CrankFundFeePerReserve"
          },
          {
            "name": "PendingVaultAdmin"
          },
          {
            "name": "Name"
          },
          {
            "name": "LookupTable"
          },
          {
            "name": "Farm"
          },
          {
            "name": "AllocationAdmin"
          }
        ]
      }
    },
    {
      "name": "VaultAllocation",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "reserve",
            "type": "publicKey"
          },
          {
            "name": "ctokenVault",
            "type": "publicKey"
          },
          {
            "name": "targetAllocationWeight",
            "type": "u64"
          },
          {
            "name": "tokenAllocationCap",
            "docs": [
              "Maximum token invested in this reserve"
            ],
            "type": "u64"
          },
          {
            "name": "ctokenVaultBump",
            "type": "u64"
          },
          {
            "name": "configPadding",
            "type": {
              "array": [
                "u64",
                127
              ]
            }
          },
          {
            "name": "ctokenAllocation",
            "type": "u64"
          },
          {
            "name": "lastInvestSlot",
            "type": "u64"
          },
          {
            "name": "tokenTargetAllocationSf",
            "type": "u128"
          },
          {
            "name": "statePadding",
            "type": {
              "array": [
                "u64",
                128
              ]
            }
          }
        ]
      }
    }
  ],
  "events": [
    {
      "name": "DepositResultEvent",
      "fields": [
        {
          "name": "sharesToMint",
          "type": "u64",
          "index": false
        },
        {
          "name": "tokenToDeposit",
          "type": "u64",
          "index": false
        },
        {
          "name": "crankFundsToDeposit",
          "type": "u64",
          "index": false
        }
      ]
    },
    {
      "name": "DepositUserAtaBalanceEvent",
      "fields": [
        {
          "name": "userAtaBalance",
          "type": "u64",
          "index": false
        }
      ]
    },
    {
      "name": "SharesToWithdrawEvent",
      "fields": [
        {
          "name": "sharesAmount",
          "type": "u64",
          "index": false
        },
        {
          "name": "userSharesBefore",
          "type": "u64",
          "index": false
        }
      ]
    },
    {
      "name": "WithdrawResultEvent",
      "fields": [
        {
          "name": "sharesToBurn",
          "type": "u64",
          "index": false
        },
        {
          "name": "availableToSendToUser",
          "type": "u64",
          "index": false
        },
        {
          "name": "investedToDisinvestCtokens",
          "type": "u64",
          "index": false
        },
        {
          "name": "investedLiquidityToSendToUser",
          "type": "u64",
          "index": false
        }
      ]
    }
  ],
  "errors": [
    {
      "code": 7000,
      "name": "DepositAmountsZero",
      "msg": "DepositAmountsZero"
    },
    {
      "code": 7001,
      "name": "SharesIssuedAmountDoesNotMatch",
      "msg": "SharesIssuedAmountDoesNotMatch"
    },
    {
      "code": 7002,
      "name": "MathOverflow",
      "msg": "MathOverflow"
    },
    {
      "code": 7003,
      "name": "IntegerOverflow",
      "msg": "IntegerOverflow"
    },
    {
      "code": 7004,
      "name": "WithdrawAmountBelowMinimum",
      "msg": "Withdrawn amount is below minimum"
    },
    {
      "code": 7005,
      "name": "TooMuchLiquidityToWithdraw",
      "msg": "TooMuchLiquidityToWithdraw"
    },
    {
      "code": 7006,
      "name": "ReserveAlreadyExists",
      "msg": "ReserveAlreadyExists"
    },
    {
      "code": 7007,
      "name": "ReserveNotPartOfAllocations",
      "msg": "ReserveNotPartOfAllocations"
    },
    {
      "code": 7008,
      "name": "CouldNotDeserializeAccountAsReserve",
      "msg": "CouldNotDeserializeAccountAsReserve"
    },
    {
      "code": 7009,
      "name": "ReserveNotProvidedInTheAccounts",
      "msg": "ReserveNotProvidedInTheAccounts"
    },
    {
      "code": 7010,
      "name": "ReserveAccountAndKeyMismatch",
      "msg": "ReserveAccountAndKeyMismatch"
    },
    {
      "code": 7011,
      "name": "OutOfRangeOfReserveIndex",
      "msg": "OutOfRangeOfReserveIndex"
    },
    {
      "code": 7012,
      "name": "CannotFindReserveInAllocations",
      "msg": "OutOfRangeOfReserveIndex"
    },
    {
      "code": 7013,
      "name": "InvestAmountBelowMinimum",
      "msg": "Invested amount is below minimum"
    },
    {
      "code": 7014,
      "name": "AdminAuthorityIncorrect",
      "msg": "AdminAuthorityIncorrect"
    },
    {
      "code": 7015,
      "name": "BaseVaultAuthorityIncorrect",
      "msg": "BaseVaultAuthorityIncorrect"
    },
    {
      "code": 7016,
      "name": "BaseVaultAuthorityBumpIncorrect",
      "msg": "BaseVaultAuthorityBumpIncorrect"
    },
    {
      "code": 7017,
      "name": "TokenMintIncorrect",
      "msg": "TokenMintIncorrect"
    },
    {
      "code": 7018,
      "name": "TokenMintDecimalsIncorrect",
      "msg": "TokenMintDecimalsIncorrect"
    },
    {
      "code": 7019,
      "name": "TokenVaultIncorrect",
      "msg": "TokenVaultIncorrect"
    },
    {
      "code": 7020,
      "name": "SharesMintDecimalsIncorrect",
      "msg": "SharesMintDecimalsIncorrect"
    },
    {
      "code": 7021,
      "name": "SharesMintIncorrect",
      "msg": "SharesMintIncorrect"
    },
    {
      "code": 7022,
      "name": "InitialAccountingIncorrect",
      "msg": "InitialAccountingIncorrect"
    },
    {
      "code": 7023,
      "name": "ReserveIsStale",
      "msg": "Reserve is stale and must be refreshed before any operation"
    },
    {
      "code": 7024,
      "name": "NotEnoughLiquidityDisinvestedToSendToUser",
      "msg": "Not enough liquidity disinvested to send to user"
    },
    {
      "code": 7025,
      "name": "BPSValueTooBig",
      "msg": "BPS value is greater than 10000"
    },
    {
      "code": 7026,
      "name": "DepositAmountBelowMinimum",
      "msg": "Deposited amount is below minimum"
    },
    {
      "code": 7027,
      "name": "ReserveSpaceExhausted",
      "msg": "Vault have no space for new reserves"
    },
    {
      "code": 7028,
      "name": "CannotWithdrawFromEmptyVault",
      "msg": "Cannot withdraw from empty vault"
    },
    {
      "code": 7029,
      "name": "TokensDepositedAmountDoesNotMatch",
      "msg": "TokensDepositedAmountDoesNotMatch"
    },
    {
      "code": 7030,
      "name": "AmountToWithdrawDoesNotMatch",
      "msg": "Amount to withdraw does not match"
    },
    {
      "code": 7031,
      "name": "LiquidityToWithdrawDoesNotMatch",
      "msg": "Liquidity to withdraw does not match"
    },
    {
      "code": 7032,
      "name": "UserReceivedAmountDoesNotMatch",
      "msg": "User received amount does not match"
    },
    {
      "code": 7033,
      "name": "SharesBurnedAmountDoesNotMatch",
      "msg": "Shares burned amount does not match"
    },
    {
      "code": 7034,
      "name": "DisinvestedLiquidityAmountDoesNotMatch",
      "msg": "Disinvested liquidity amount does not match"
    },
    {
      "code": 7035,
      "name": "SharesMintedAmountDoesNotMatch",
      "msg": "SharesMintedAmountDoesNotMatch"
    },
    {
      "code": 7036,
      "name": "AUMDecreasedAfterInvest",
      "msg": "AUM decreased after invest"
    },
    {
      "code": 7037,
      "name": "AUMBelowPendingFees",
      "msg": "AUM is below pending fees"
    },
    {
      "code": 7038,
      "name": "DepositAmountsZeroShares",
      "msg": "Deposit amount results in 0 shares"
    },
    {
      "code": 7039,
      "name": "WithdrawResultsInZeroShares",
      "msg": "Withdraw amount results in 0 shares"
    },
    {
      "code": 7040,
      "name": "CannotWithdrawZeroShares",
      "msg": "Cannot withdraw zero shares"
    },
    {
      "code": 7041,
      "name": "ManagementFeeGreaterThanMaxAllowed",
      "msg": "Management fee is greater than maximum allowed"
    },
    {
      "code": 7042,
      "name": "VaultAUMZero",
      "msg": "Vault assets under management are empty"
    },
    {
      "code": 7043,
      "name": "MissingReserveForBatchRefresh",
      "msg": "Missing reserve for batch refresh"
    },
    {
      "code": 7044,
      "name": "MinWithdrawAmountTooBig",
      "msg": "Min withdraw amount is too big"
    },
    {
      "code": 7045,
      "name": "InvestTooSoon",
      "msg": "Invest is called too soon after last invest"
    },
    {
      "code": 7046,
      "name": "WrongAdminOrAllocationAdmin",
      "msg": "Wrong admin or allocation admin"
    },
    {
      "code": 7047,
      "name": "ReserveHasNonZeroAllocationOrCTokens",
      "msg": "Reserve has non-zero allocation or ctokens so cannot be removed"
    }
  ]
}