{ "address": "0xf0b280cCa857E0580a0aE13fbd8e7c7Ec71bfc38", "abi": [ { "inputs": [ { "internalType": "contract IFluidStETHQueue", "name": "stEthQueue_", "type": "address" }, { "internalType": "contract IFluidLiquidityResolver", "name": "liquidityResolver_", "type": "address" }, { "internalType": "contract ILidoWithdrawalQueue", "name": "lidoWithdrawalQueue_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "FluidStETHResolver__AddressZero", "type": "error" }, { "inputs": [], "name": "FluidStETHResolver__NoClaimQueued", "type": "error" }, { "inputs": [], "name": "LIDO_WITHDRAWAL_QUEUE", "outputs": [ { "internalType": "contract ILidoWithdrawalQueue", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LIQUIDITY_RESOLVER", "outputs": [ { "internalType": "contract IFluidLiquidityResolver", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STETH_QUEUE", "outputs": [ { "internalType": "contract IFluidStETHQueue", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "claimTo_", "type": "address" }, { "internalType": "uint256", "name": "requestIdFrom_", "type": "uint256" } ], "name": "claim", "outputs": [ { "components": [ { "internalType": "uint128", "name": "borrowAmountRaw", "type": "uint128" }, { "internalType": "uint48", "name": "checkpoint", "type": "uint48" }, { "internalType": "uint40", "name": "requestIdTo", "type": "uint40" } ], "internalType": "struct Structs.Claim", "name": "claim_", "type": "tuple" }, { "internalType": "bool", "name": "isClaimable_", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "config", "outputs": [ { "internalType": "contract IFluidLiquidity", "name": "liquidity_", "type": "address" }, { "internalType": "contract ILidoWithdrawalQueue", "name": "lidoWithdrawalQueue_", "type": "address" }, { "internalType": "contract IERC20", "name": "stETH_", "type": "address" }, { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "uint16", "name": "maxLTV_", "type": "uint16" }, { "internalType": "bool", "name": "allowListActive_", "type": "bool" }, { "internalType": "bool", "name": "isPaused_", "type": "bool" }, { "components": [ { "internalType": "bool", "name": "modeWithInterest", "type": "bool" }, { "internalType": "uint256", "name": "borrow", "type": "uint256" }, { "internalType": "uint256", "name": "borrowLimit", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdateTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "expandPercent", "type": "uint256" }, { "internalType": "uint256", "name": "expandDuration", "type": "uint256" }, { "internalType": "uint256", "name": "baseBorrowLimit", "type": "uint256" }, { "internalType": "uint256", "name": "maxBorrowLimit", "type": "uint256" }, { "internalType": "uint256", "name": "borrowableUntilLimit", "type": "uint256" }, { "internalType": "uint256", "name": "borrowable", "type": "uint256" } ], "internalType": "struct Structs.UserBorrowData", "name": "userBorrowData_", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "borrowRate", "type": "uint256" }, { "internalType": "uint256", "name": "supplyRate", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "lastStoredUtilization", "type": "uint256" }, { "internalType": "uint256", "name": "storageUpdateThreshold", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdateTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "supplyExchangePrice", "type": "uint256" }, { "internalType": "uint256", "name": "borrowExchangePrice", "type": "uint256" }, { "internalType": "uint256", "name": "supplyRawInterest", "type": "uint256" }, { "internalType": "uint256", "name": "supplyInterestFree", "type": "uint256" }, { "internalType": "uint256", "name": "borrowRawInterest", "type": "uint256" }, { "internalType": "uint256", "name": "borrowInterestFree", "type": "uint256" }, { "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "totalBorrow", "type": "uint256" }, { "internalType": "uint256", "name": "revenue", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "version", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "kink", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationZero", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationKink", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationMax", "type": "uint256" } ], "internalType": "struct Structs.RateDataV1Params", "name": "rateDataV1", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "kink1", "type": "uint256" }, { "internalType": "uint256", "name": "kink2", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationZero", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationKink1", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationKink2", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationMax", "type": "uint256" } ], "internalType": "struct Structs.RateDataV2Params", "name": "rateDataV2", "type": "tuple" } ], "internalType": "struct Structs.RateData", "name": "rateData", "type": "tuple" } ], "internalType": "struct Structs.OverallTokenData", "name": "overallTokenData_", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUserBorrowData", "outputs": [ { "components": [ { "internalType": "bool", "name": "modeWithInterest", "type": "bool" }, { "internalType": "uint256", "name": "borrow", "type": "uint256" }, { "internalType": "uint256", "name": "borrowLimit", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdateTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "expandPercent", "type": "uint256" }, { "internalType": "uint256", "name": "expandDuration", "type": "uint256" }, { "internalType": "uint256", "name": "baseBorrowLimit", "type": "uint256" }, { "internalType": "uint256", "name": "maxBorrowLimit", "type": "uint256" }, { "internalType": "uint256", "name": "borrowableUntilLimit", "type": "uint256" }, { "internalType": "uint256", "name": "borrowable", "type": "uint256" } ], "internalType": "struct Structs.UserBorrowData", "name": "userBorrowData_", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "borrowRate", "type": "uint256" }, { "internalType": "uint256", "name": "supplyRate", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "lastStoredUtilization", "type": "uint256" }, { "internalType": "uint256", "name": "storageUpdateThreshold", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdateTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "supplyExchangePrice", "type": "uint256" }, { "internalType": "uint256", "name": "borrowExchangePrice", "type": "uint256" }, { "internalType": "uint256", "name": "supplyRawInterest", "type": "uint256" }, { "internalType": "uint256", "name": "supplyInterestFree", "type": "uint256" }, { "internalType": "uint256", "name": "borrowRawInterest", "type": "uint256" }, { "internalType": "uint256", "name": "borrowInterestFree", "type": "uint256" }, { "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "totalBorrow", "type": "uint256" }, { "internalType": "uint256", "name": "revenue", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "version", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "kink", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationZero", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationKink", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationMax", "type": "uint256" } ], "internalType": "struct Structs.RateDataV1Params", "name": "rateDataV1", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "kink1", "type": "uint256" }, { "internalType": "uint256", "name": "kink2", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationZero", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationKink1", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationKink2", "type": "uint256" }, { "internalType": "uint256", "name": "rateAtUtilizationMax", "type": "uint256" } ], "internalType": "struct Structs.RateDataV2Params", "name": "rateDataV2", "type": "tuple" } ], "internalType": "struct Structs.RateData", "name": "rateData", "type": "tuple" } ], "internalType": "struct Structs.OverallTokenData", "name": "overallTokenData_", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "auth_", "type": "address" } ], "name": "isAuth", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "claimTo_", "type": "address" }, { "internalType": "uint256", "name": "requestIdFrom_", "type": "uint256" } ], "name": "isClaimable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "guardian_", "type": "address" } ], "name": "isGuardian", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user_", "type": "address" } ], "name": "isUserAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ], "transactionHash": "0x083febd7b61c2e9a10d570dda7b47d51ccedf3ec2cf610f75dffb25353b5ed67", "receipt": { "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", "from": "0x0Ed35B1609Ec45c7079E80d11149a52717e4859A", "contractAddress": null, "transactionIndex": 86, "gasUsed": "1539069", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "blockHash": "0x066ce82bce61d1bb19428ce4155d142b52468ae48b655db4758b4b2ff48a6f5c", "transactionHash": "0x083febd7b61c2e9a10d570dda7b47d51ccedf3ec2cf610f75dffb25353b5ed67", "logs": [], "blockNumber": 19353420, "cumulativeGasUsed": "9382064", "status": 1, "byzantium": true }, "args": [ "0x1F6B2bFDd5D1e6AdE7B17027ff5300419a56Ad6b", "0x741c2Cd25f053a55fd94afF1afAEf146523E1249", "0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1" ], "numDeployments": 1, "solcInputHash": "087d48b3af206e71af8d7e1bd3c0e081", "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IFluidStETHQueue\",\"name\":\"stEthQueue_\",\"type\":\"address\"},{\"internalType\":\"contract IFluidLiquidityResolver\",\"name\":\"liquidityResolver_\",\"type\":\"address\"},{\"internalType\":\"contract ILidoWithdrawalQueue\",\"name\":\"lidoWithdrawalQueue_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"FluidStETHResolver__AddressZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FluidStETHResolver__NoClaimQueued\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LIDO_WITHDRAWAL_QUEUE\",\"outputs\":[{\"internalType\":\"contract ILidoWithdrawalQueue\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIQUIDITY_RESOLVER\",\"outputs\":[{\"internalType\":\"contract IFluidLiquidityResolver\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STETH_QUEUE\",\"outputs\":[{\"internalType\":\"contract IFluidStETHQueue\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"claimTo_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestIdFrom_\",\"type\":\"uint256\"}],\"name\":\"claim\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"borrowAmountRaw\",\"type\":\"uint128\"},{\"internalType\":\"uint48\",\"name\":\"checkpoint\",\"type\":\"uint48\"},{\"internalType\":\"uint40\",\"name\":\"requestIdTo\",\"type\":\"uint40\"}],\"internalType\":\"struct Structs.Claim\",\"name\":\"claim_\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isClaimable_\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"contract IFluidLiquidity\",\"name\":\"liquidity_\",\"type\":\"address\"},{\"internalType\":\"contract ILidoWithdrawalQueue\",\"name\":\"lidoWithdrawalQueue_\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"stETH_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxLTV_\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"allowListActive_\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPaused_\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"modeWithInterest\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expandPercent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expandDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseBorrowLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxBorrowLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowableUntilLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowable\",\"type\":\"uint256\"}],\"internalType\":\"struct Structs.UserBorrowData\",\"name\":\"userBorrowData_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastStoredUtilization\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"storageUpdateThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyExchangePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowExchangePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyRawInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyInterestFree\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRawInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowInterestFree\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revenue\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"kink\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationZero\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationKink\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationMax\",\"type\":\"uint256\"}],\"internalType\":\"struct Structs.RateDataV1Params\",\"name\":\"rateDataV1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"kink1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"kink2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationZero\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationKink1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationKink2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationMax\",\"type\":\"uint256\"}],\"internalType\":\"struct Structs.RateDataV2Params\",\"name\":\"rateDataV2\",\"type\":\"tuple\"}],\"internalType\":\"struct Structs.RateData\",\"name\":\"rateData\",\"type\":\"tuple\"}],\"internalType\":\"struct Structs.OverallTokenData\",\"name\":\"overallTokenData_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUserBorrowData\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"modeWithInterest\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expandPercent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expandDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseBorrowLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxBorrowLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowableUntilLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowable\",\"type\":\"uint256\"}],\"internalType\":\"struct Structs.UserBorrowData\",\"name\":\"userBorrowData_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastStoredUtilization\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"storageUpdateThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyExchangePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowExchangePrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyRawInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyInterestFree\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRawInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowInterestFree\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revenue\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"kink\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationZero\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationKink\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationMax\",\"type\":\"uint256\"}],\"internalType\":\"struct Structs.RateDataV1Params\",\"name\":\"rateDataV1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"kink1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"kink2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationZero\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationKink1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationKink2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateAtUtilizationMax\",\"type\":\"uint256\"}],\"internalType\":\"struct Structs.RateDataV2Params\",\"name\":\"rateDataV2\",\"type\":\"tuple\"}],\"internalType\":\"struct Structs.RateData\",\"name\":\"rateData\",\"type\":\"tuple\"}],\"internalType\":\"struct Structs.OverallTokenData\",\"name\":\"overallTokenData_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"auth_\",\"type\":\"address\"}],\"name\":\"isAuth\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"claimTo_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestIdFrom_\",\"type\":\"uint256\"}],\"name\":\"isClaimable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guardian_\",\"type\":\"address\"}],\"name\":\"isGuardian\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user_\",\"type\":\"address\"}],\"name\":\"isUserAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isClaimable(address,uint256)\":{\"params\":{\"claimTo_\":\"claimTo receiver to process the claim for\",\"requestIdFrom_\":\"Lido requestId from (start), as emitted at time of queuing via `LogQueue`\"}}},\"stateVariables\":{\"NATIVE_TOKEN_ADDRESS\":{\"details\":\"address that is mapped to the chain native token at Liquidity\"}},\"version\":1},\"userdoc\":{\"errors\":{\"FluidStETHResolver__AddressZero()\":[{\"notice\":\"thrown if an input param address is zero\"}],\"FluidStETHResolver__NoClaimQueued()\":[{\"notice\":\"thrown if there is no Claim queued for the given input data\"}]},\"kind\":\"user\",\"methods\":{\"LIDO_WITHDRAWAL_QUEUE()\":{\"notice\":\"address of the Lido Withdrawal Queue contract (0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1)\"},\"LIQUIDITY_RESOLVER()\":{\"notice\":\"address of the LiquidityResolver\"},\"STETH_QUEUE()\":{\"notice\":\"address of the stETHQueue contract\"},\"claim(address,uint256)\":{\"notice\":\"reads a Claim struct containing necessary information for executing the claim process from the mapping claimTo and requestIdFrom -> claims and the claimable status.\"},\"config()\":{\"notice\":\"returns all constants and config values\"},\"getUserBorrowData()\":{\"notice\":\"returns borrow data and general data (such as rates, exchange prices, utilization, fee, total amounts etc.) for native token\"},\"isAuth(address)\":{\"notice\":\"reads if a certain `auth_` address is an allowed auth or not\"},\"isClaimable(address,uint256)\":{\"notice\":\"checks if a linked claim for `claimTo_` and `claimTo_` is ready to be processed at Lido Withdrawal Queue\"},\"isGuardian(address)\":{\"notice\":\"reads if a certain `guardian_` address is an allowed guardian or not\"},\"isPaused()\":{\"notice\":\"reads if the protocol is paused or not\"},\"isUserAllowed(address)\":{\"notice\":\"reads if a certain `user_` address is an allowed user or not\"}},\"notice\":\"Fluid StETH protocol resolver Implements various view-only methods to give easy access to StETH protocol data.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/periphery/resolvers/steth/main.sol\":\"FluidStETHResolver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"contracts/infiniteProxy/interfaces/iProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.21;\\n\\ninterface IProxy {\\n function setAdmin(address newAdmin_) external;\\n\\n function setDummyImplementation(address newDummyImplementation_) external;\\n\\n function addImplementation(address implementation_, bytes4[] calldata sigs_) external;\\n\\n function removeImplementation(address implementation_) external;\\n\\n function getAdmin() external view returns (address);\\n\\n function getDummyImplementation() external view returns (address);\\n\\n function getImplementationSigs(address impl_) external view returns (bytes4[] memory);\\n\\n function getSigsImplementation(bytes4 sig_) external view returns (address);\\n\\n function readFromStorage(bytes32 slot_) external view returns (uint256 result_);\\n}\\n\",\"keccak256\":\"0xbb605491d4bac08e816248feecae7dd17cfc1877c88b2e555abece2970f5ea00\",\"license\":\"MIT\"},\"contracts/liquidity/adminModule/structs.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity 0.8.21;\\n\\nabstract contract Structs {\\n struct AddressBool {\\n address addr;\\n bool value;\\n }\\n\\n struct AddressUint256 {\\n address addr;\\n uint256 value;\\n }\\n\\n /// @notice struct to set borrow rate data for version 1\\n struct RateDataV1Params {\\n ///\\n /// @param token for rate data\\n address token;\\n ///\\n /// @param kink in borrow rate. in 1e2: 100% = 10_000; 1% = 100\\n /// utilization below kink usually means slow increase in rate, once utilization is above kink borrow rate increases fast\\n uint256 kink;\\n ///\\n /// @param rateAtUtilizationZero desired borrow rate when utilization is zero. in 1e2: 100% = 10_000; 1% = 100\\n /// i.e. constant minimum borrow rate\\n /// e.g. at utilization = 0.01% rate could still be at least 4% (rateAtUtilizationZero would be 400 then)\\n uint256 rateAtUtilizationZero;\\n ///\\n /// @param rateAtUtilizationKink borrow rate when utilization is at kink. in 1e2: 100% = 10_000; 1% = 100\\n /// e.g. when rate should be 7% at kink then rateAtUtilizationKink would be 700\\n uint256 rateAtUtilizationKink;\\n ///\\n /// @param rateAtUtilizationMax borrow rate when utilization is maximum at 100%. in 1e2: 100% = 10_000; 1% = 100\\n /// e.g. when rate should be 125% at 100% then rateAtUtilizationMax would be 12_500\\n uint256 rateAtUtilizationMax;\\n }\\n\\n /// @notice struct to set borrow rate data for version 2\\n struct RateDataV2Params {\\n ///\\n /// @param token for rate data\\n address token;\\n ///\\n /// @param kink1 first kink in borrow rate. in 1e2: 100% = 10_000; 1% = 100\\n /// utilization below kink 1 usually means slow increase in rate, once utilization is above kink 1 borrow rate increases faster\\n uint256 kink1;\\n ///\\n /// @param kink2 second kink in borrow rate. in 1e2: 100% = 10_000; 1% = 100\\n /// utilization below kink 2 usually means slow / medium increase in rate, once utilization is above kink 2 borrow rate increases fast\\n uint256 kink2;\\n ///\\n /// @param rateAtUtilizationZero desired borrow rate when utilization is zero. in 1e2: 100% = 10_000; 1% = 100\\n /// i.e. constant minimum borrow rate\\n /// e.g. at utilization = 0.01% rate could still be at least 4% (rateAtUtilizationZero would be 400 then)\\n uint256 rateAtUtilizationZero;\\n ///\\n /// @param rateAtUtilizationKink1 desired borrow rate when utilization is at first kink. in 1e2: 100% = 10_000; 1% = 100\\n /// e.g. when rate should be 7% at first kink then rateAtUtilizationKink would be 700\\n uint256 rateAtUtilizationKink1;\\n ///\\n /// @param rateAtUtilizationKink2 desired borrow rate when utilization is at second kink. in 1e2: 100% = 10_000; 1% = 100\\n /// e.g. when rate should be 7% at second kink then rateAtUtilizationKink would be 1_200\\n uint256 rateAtUtilizationKink2;\\n ///\\n /// @param rateAtUtilizationMax desired borrow rate when utilization is maximum at 100%. in 1e2: 100% = 10_000; 1% = 100\\n /// e.g. when rate should be 125% at 100% then rateAtUtilizationMax would be 12_500\\n uint256 rateAtUtilizationMax;\\n }\\n\\n /// @notice struct to set token config\\n struct TokenConfig {\\n ///\\n /// @param token address\\n address token;\\n ///\\n /// @param fee charges on borrower's interest. in 1e2: 100% = 10_000; 1% = 100\\n uint256 fee;\\n ///\\n /// @param threshold on when to update the storage slot. in 1e2: 100% = 10_000; 1% = 100\\n uint256 threshold;\\n }\\n\\n /// @notice struct to set user supply & withdrawal config\\n struct UserSupplyConfig {\\n ///\\n /// @param user address\\n address user;\\n ///\\n /// @param token address\\n address token;\\n ///\\n /// @param mode: 0 = without interest. 1 = with interest\\n uint8 mode;\\n ///\\n /// @param expandPercent withdrawal limit expand percent. in 1e2: 100% = 10_000; 1% = 100\\n /// Also used to calculate rate at which withdrawal limit should decrease (instant).\\n uint256 expandPercent;\\n ///\\n /// @param expandDuration withdrawal limit expand duration in seconds.\\n /// used to calculate rate together with expandPercent\\n uint256 expandDuration;\\n ///\\n /// @param baseWithdrawalLimit base limit, below this, user can withdraw the entire amount.\\n /// amount in raw (to be multiplied with exchange price) or normal depends on configured mode in user config for the token:\\n /// with interest -> raw, without interest -> normal\\n uint256 baseWithdrawalLimit;\\n }\\n\\n /// @notice struct to set user borrow & payback config\\n struct UserBorrowConfig {\\n ///\\n /// @param user address\\n address user;\\n ///\\n /// @param token address\\n address token;\\n ///\\n /// @param mode: 0 = without interest. 1 = with interest\\n uint8 mode;\\n ///\\n /// @param expandPercent debt limit expand percent. in 1e2: 100% = 10_000; 1% = 100\\n /// Also used to calculate rate at which debt limit should decrease (instant).\\n uint256 expandPercent;\\n ///\\n /// @param expandDuration debt limit expand duration in seconds.\\n /// used to calculate rate together with expandPercent\\n uint256 expandDuration;\\n ///\\n /// @param baseDebtCeiling base borrow limit. until here, borrow limit remains as baseDebtCeiling\\n /// (user can borrow until this point at once without stepped expansion). Above this, automated limit comes in place.\\n /// amount in raw (to be multiplied with exchange price) or normal depends on configured mode in user config for the token:\\n /// with interest -> raw, without interest -> normal\\n uint256 baseDebtCeiling;\\n ///\\n /// @param maxDebtCeiling max borrow ceiling, maximum amount the user can borrow.\\n /// amount in raw (to be multiplied with exchange price) or normal depends on configured mode in user config for the token:\\n /// with interest -> raw, without interest -> normal\\n uint256 maxDebtCeiling;\\n }\\n}\\n\",\"keccak256\":\"0xcacc14afd7880d3179d0089d65dad6714c377df4801a9ad79a499d0d079124c0\",\"license\":\"BUSL-1.1\"},\"contracts/liquidity/interfaces/iLiquidity.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity 0.8.21;\\n\\nimport { IProxy } from \\\"../../infiniteProxy/interfaces/iProxy.sol\\\";\\nimport { Structs as AdminModuleStructs } from \\\"../adminModule/structs.sol\\\";\\n\\ninterface IFluidLiquidityAdmin {\\n /// @notice adds/removes auths. Auths generally could be contracts which can have restricted actions defined on contract.\\n /// auths can be helpful in reducing governance overhead where it's not needed.\\n /// @param authsStatus_ array of structs setting allowed status for an address.\\n /// status true => add auth, false => remove auth\\n function updateAuths(AdminModuleStructs.AddressBool[] calldata authsStatus_) external;\\n\\n /// @notice adds/removes guardians. Only callable by Governance.\\n /// @param guardiansStatus_ array of structs setting allowed status for an address.\\n /// status true => add guardian, false => remove guardian\\n function updateGuardians(AdminModuleStructs.AddressBool[] calldata guardiansStatus_) external;\\n\\n /// @notice changes the revenue collector address (contract that is sent revenue). Only callable by Governance.\\n /// @param revenueCollector_ new revenue collector address\\n function updateRevenueCollector(address revenueCollector_) external;\\n\\n /// @notice changes current status, e.g. for pausing or unpausing all user operations. Only callable by Auths.\\n /// @param newStatus_ new status\\n /// status = 2 -> pause, status = 1 -> resume.\\n function changeStatus(uint256 newStatus_) external;\\n\\n /// @notice update tokens rate data version 1. Only callable by Auths.\\n /// @param tokensRateData_ array of RateDataV1Params with rate data to set for each token\\n function updateRateDataV1s(AdminModuleStructs.RateDataV1Params[] calldata tokensRateData_) external;\\n\\n /// @notice update tokens rate data version 2. Only callable by Auths.\\n /// @param tokensRateData_ array of RateDataV2Params with rate data to set for each token\\n function updateRateDataV2s(AdminModuleStructs.RateDataV2Params[] calldata tokensRateData_) external;\\n\\n /// @notice updates token configs: fee charge on borrowers interest & storage update utilization threshold.\\n /// Only callable by Auths.\\n /// @param tokenConfigs_ contains token address, fee & utilization threshold\\n function updateTokenConfigs(AdminModuleStructs.TokenConfig[] calldata tokenConfigs_) external;\\n\\n /// @notice updates user classes: 0 is for new protocols, 1 is for established protocols.\\n /// Only callable by Auths.\\n /// @param userClasses_ struct array of uint256 value to assign for each user address\\n function updateUserClasses(AdminModuleStructs.AddressUint256[] calldata userClasses_) external;\\n\\n /// @notice sets user supply configs per token basis. Eg: with interest or interest-free and automated limits.\\n /// Only callable by Auths.\\n /// @param userSupplyConfigs_ struct array containing user supply config, see `UserSupplyConfig` struct for more info\\n function updateUserSupplyConfigs(AdminModuleStructs.UserSupplyConfig[] memory userSupplyConfigs_) external;\\n\\n /// @notice setting user borrow configs per token basis. Eg: with interest or interest-free and automated limits.\\n /// Only callable by Auths.\\n /// @param userBorrowConfigs_ struct array containing user borrow config, see `UserBorrowConfig` struct for more info\\n function updateUserBorrowConfigs(AdminModuleStructs.UserBorrowConfig[] memory userBorrowConfigs_) external;\\n\\n /// @notice pause operations for a particular user in class 0 (class 1 users can't be paused by guardians).\\n /// Only callable by Guardians.\\n /// @param user_ address of user to pause operations for\\n /// @param supplyTokens_ token addresses to pause withdrawals for\\n /// @param borrowTokens_ token addresses to pause borrowings for\\n function pauseUser(address user_, address[] calldata supplyTokens_, address[] calldata borrowTokens_) external;\\n\\n /// @notice unpause operations for a particular user in class 0 (class 1 users can't be paused by guardians).\\n /// Only callable by Guardians.\\n /// @param user_ address of user to unpause operations for\\n /// @param supplyTokens_ token addresses to unpause withdrawals for\\n /// @param borrowTokens_ token addresses to unpause borrowings for\\n function unpauseUser(address user_, address[] calldata supplyTokens_, address[] calldata borrowTokens_) external;\\n\\n /// @notice collects revenue for tokens to configured revenueCollector address.\\n /// @param tokens_ array of tokens to collect revenue for\\n /// @dev Note that this can revert if token balance is < revenueAmount (utilization > 100%)\\n function collectRevenue(address[] calldata tokens_) external;\\n\\n /// @notice gets the current updated exchange prices for n tokens and updates all prices, rates related data in storage.\\n /// @param tokens_ tokens to update exchange prices for\\n /// @return supplyExchangePrices_ new supply rates of overall system for each token\\n /// @return borrowExchangePrices_ new borrow rates of overall system for each token\\n function updateExchangePrices(\\n address[] calldata tokens_\\n ) external returns (uint256[] memory supplyExchangePrices_, uint256[] memory borrowExchangePrices_);\\n}\\n\\ninterface IFluidLiquidityLogic is IFluidLiquidityAdmin {\\n /// @notice Single function which handles supply, withdraw, borrow & payback\\n /// @param token_ address of token (0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE for native)\\n /// @param supplyAmount_ if +ve then supply, if -ve then withdraw, if 0 then nothing\\n /// @param borrowAmount_ if +ve then borrow, if -ve then payback, if 0 then nothing\\n /// @param withdrawTo_ if withdrawal then to which address\\n /// @param borrowTo_ if borrow then to which address\\n /// @param callbackData_ callback data passed to `liquidityCallback` method of protocol\\n /// @return memVar3_ updated supplyExchangePrice\\n /// @return memVar4_ updated borrowExchangePrice\\n /// @dev to trigger skipping in / out transfers when in&out amounts balance themselves out (gas optimization):\\n /// - supply(+) == borrow(+), withdraw(-) == payback(-).\\n /// - `withdrawTo_` / `borrowTo_` must be msg.sender (protocol)\\n /// - `callbackData_` MUST be encoded so that \\\"from\\\" address is at last 20 bytes (if this optimization is desired),\\n /// also for native token operations where liquidityCallback is not triggered!\\n /// from address must come at last position if there is more data. I.e. encode like:\\n /// abi.encode(otherVar1, otherVar2, FROM_ADDRESS). Note dynamic types used with abi.encode come at the end\\n /// so if dynamic types are needed, you must use abi.encodePacked to ensure the from address is at the end.\\n function operate(\\n address token_,\\n int256 supplyAmount_,\\n int256 borrowAmount_,\\n address withdrawTo_,\\n address borrowTo_,\\n bytes calldata callbackData_\\n ) external payable returns (uint256 memVar3_, uint256 memVar4_);\\n}\\n\\ninterface IFluidLiquidity is IProxy, IFluidLiquidityLogic {}\\n\",\"keccak256\":\"0xc81ac0cfc8183ec57ec4e488b07a4f6d1ecd79787e0aaf0dcfdd0b9b7ac0fc84\",\"license\":\"MIT\"},\"contracts/periphery/resolvers/liquidity/iLiquidityResolver.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity 0.8.21;\\n\\nimport { Structs as LiquidityStructs } from \\\"../../../periphery/resolvers/liquidity/structs.sol\\\";\\n\\ninterface IFluidLiquidityResolver {\\n /// @notice gets the `revenueAmount_` for a `token_`.\\n function getRevenue(address token_) external view returns (uint256 revenueAmount_);\\n\\n /// @notice address of contract that gets sent the revenue. Configurable by governance\\n function getRevenueCollector() external view returns (address);\\n\\n /// @notice Liquidity contract paused status: status = 1 -> normal. status = 2 -> paused.\\n function getStatus() external view returns (uint256);\\n\\n /// @notice checks if `auth_` is an allowed auth on Liquidity.\\n /// Auths can set most config values. E.g. contracts that automate certain flows like e.g. adding a new fToken.\\n /// Governance can add/remove auths. Governance is auth by default.\\n function isAuth(address auth_) external view returns (uint256);\\n\\n /// @notice checks if `guardian_` is an allowed Guardian on Liquidity.\\n /// Guardians can pause lower class users.\\n /// Governance can add/remove guardians. Governance is guardian by default.\\n function isGuardian(address guardian_) external view returns (uint256);\\n\\n /// @notice gets user class for `user_`. Class defines which protocols can be paused by guardians.\\n /// Currently there are 2 classes: 0 can be paused by guardians. 1 cannot be paused by guardians.\\n /// New protocols are added as class 0 and will be upgraded to 1 over time.\\n function getUserClass(address user_) external view returns (uint256);\\n\\n /// @notice gets exchangePricesAndConfig packed uint256 storage slot for `token_`.\\n function getExchangePricesAndConfig(address token_) external view returns (uint256);\\n\\n /// @notice gets rateConfig packed uint256 storage slot for `token_`.\\n function getRateConfig(address token_) external view returns (uint256);\\n\\n /// @notice gets totalAmounts packed uint256 storage slot for `token_`.\\n function getTotalAmounts(address token_) external view returns (uint256);\\n\\n /// @notice gets userSupply data packed uint256 storage slot for `user_` and `token_`.\\n function getUserSupply(address user_, address token_) external view returns (uint256);\\n\\n /// @notice gets userBorrow data packed uint256 storage slot for `user_` and `token_`.\\n function getUserBorrow(address user_, address token_) external view returns (uint256);\\n\\n /// @notice returns all `listedTokens_` at the Liquidity contract. Once configured, a token can never be removed.\\n function listedTokens() external view returns (address[] memory listedTokens_);\\n\\n /// @notice get the Rate config data `rateData_` for a `token_` compiled from the packed uint256 rateConfig storage slot\\n function getTokenRateData(address token_) external view returns (LiquidityStructs.RateData memory rateData_);\\n\\n /// @notice get the Rate config datas `rateDatas_` for multiple `tokens_` compiled from the packed uint256 rateConfig storage slot\\n function getTokensRateData(\\n address[] calldata tokens_\\n ) external view returns (LiquidityStructs.RateData[] memory rateDatas_);\\n\\n /// @notice returns general data for `token_` such as rates, exchange prices, utilization, fee, total amounts etc.\\n function getOverallTokenData(\\n address token_\\n ) external view returns (LiquidityStructs.OverallTokenData memory overallTokenData_);\\n\\n /// @notice returns general data for multiple `tokens_` such as rates, exchange prices, utilization, fee, total amounts etc.\\n function getOverallTokensData(\\n address[] calldata tokens_\\n ) external view returns (LiquidityStructs.OverallTokenData[] memory overallTokensData_);\\n\\n /// @notice returns `user_` supply data and general data (such as rates, exchange prices, utilization, fee, total amounts etc.) for `token_`\\n function getUserSupplyData(\\n address user_,\\n address token_\\n )\\n external\\n view\\n returns (\\n LiquidityStructs.UserSupplyData memory userSupplyData_,\\n LiquidityStructs.OverallTokenData memory overallTokenData_\\n );\\n\\n /// @notice returns `user_` supply data and general data (such as rates, exchange prices, utilization, fee, total amounts etc.) for multiple `tokens_`\\n function getUserMultipleSupplyData(\\n address user_,\\n address[] calldata tokens_\\n )\\n external\\n view\\n returns (\\n LiquidityStructs.UserSupplyData[] memory userSuppliesData_,\\n LiquidityStructs.OverallTokenData[] memory overallTokensData_\\n );\\n\\n /// @notice returns `user_` borrow data and general data (such as rates, exchange prices, utilization, fee, total amounts etc.) for `token_`\\n function getUserBorrowData(\\n address user_,\\n address token_\\n )\\n external\\n view\\n returns (\\n LiquidityStructs.UserBorrowData memory userBorrowData_,\\n LiquidityStructs.OverallTokenData memory overallTokenData_\\n );\\n\\n /// @notice returns `user_` borrow data and general data (such as rates, exchange prices, utilization, fee, total amounts etc.) for multiple `tokens_`\\n function getUserMultipleBorrowData(\\n address user_,\\n address[] calldata tokens_\\n )\\n external\\n view\\n returns (\\n LiquidityStructs.UserBorrowData[] memory userBorrowingsData_,\\n LiquidityStructs.OverallTokenData[] memory overallTokensData_\\n );\\n\\n /// @notice returns `user_` supply data and general data (such as rates, exchange prices, utilization, fee, total amounts etc.) for multiple `supplyTokens_`\\n /// and returns `user_` borrow data and general data (such as rates, exchange prices, utilization, fee, total amounts etc.) for multiple `borrowTokens_`\\n function getUserMultipleBorrowSupplyData(\\n address user_,\\n address[] calldata supplyTokens_,\\n address[] calldata borrowTokens_\\n )\\n external\\n view\\n returns (\\n LiquidityStructs.UserSupplyData[] memory userSuppliesData_,\\n LiquidityStructs.OverallTokenData[] memory overallSupplyTokensData_,\\n LiquidityStructs.UserBorrowData[] memory userBorrowingsData_,\\n LiquidityStructs.OverallTokenData[] memory overallBorrowTokensData_\\n );\\n}\\n\",\"keccak256\":\"0xb446bc409296f5e761f9d2038ce93511c13745683191caa1d9781d58e68ba3eb\",\"license\":\"MIT\"},\"contracts/periphery/resolvers/liquidity/structs.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity 0.8.21;\\n\\nimport { Structs as AdminModuleStructs } from \\\"../../../liquidity/adminModule/structs.sol\\\";\\n\\nabstract contract Structs {\\n struct RateData {\\n uint256 version;\\n AdminModuleStructs.RateDataV1Params rateDataV1;\\n AdminModuleStructs.RateDataV2Params rateDataV2;\\n }\\n\\n struct OverallTokenData {\\n uint256 borrowRate;\\n uint256 supplyRate;\\n uint256 fee; // revenue fee\\n uint256 lastStoredUtilization;\\n uint256 storageUpdateThreshold;\\n uint256 lastUpdateTimestamp;\\n uint256 supplyExchangePrice;\\n uint256 borrowExchangePrice;\\n uint256 supplyRawInterest;\\n uint256 supplyInterestFree;\\n uint256 borrowRawInterest;\\n uint256 borrowInterestFree;\\n uint256 totalSupply;\\n uint256 totalBorrow;\\n uint256 revenue;\\n RateData rateData;\\n }\\n\\n // amounts are always in normal (for withInterest already multiplied with exchange price)\\n struct UserSupplyData {\\n bool modeWithInterest; // true if mode = with interest, false = without interest\\n uint256 supply; // user supply amount\\n // the withdrawal limit (e.g. if 10% is the limit, and 100M is supplied, it would be 90M)\\n uint256 withdrawalLimit;\\n uint256 lastUpdateTimestamp;\\n uint256 expandPercent; // withdrawal limit expand percent in 1e2\\n uint256 expandDuration; // withdrawal limit expand duration in seconds\\n uint256 baseWithdrawalLimit;\\n // the current actual max withdrawable amount (e.g. if 10% is the limit, and 100M is supplied, it would be 10M)\\n uint256 withdrawableUntilLimit;\\n uint256 withdrawable; // actual currently withdrawable amount (supply - withdrawal Limit) & considering balance\\n }\\n\\n // amounts are always in normal (for withInterest already multiplied with exchange price)\\n struct UserBorrowData {\\n bool modeWithInterest; // true if mode = with interest, false = without interest\\n uint256 borrow; // user borrow amount\\n uint256 borrowLimit;\\n uint256 lastUpdateTimestamp;\\n uint256 expandPercent;\\n uint256 expandDuration;\\n uint256 baseBorrowLimit;\\n uint256 maxBorrowLimit;\\n uint256 borrowableUntilLimit;\\n uint256 borrowable; // actual currently borrowable amount (borrow limit - already borrowed) & considering balance\\n }\\n}\\n\",\"keccak256\":\"0x4a935db0fd6fee3a9a9456b0655953ee03158a975ef77faa5d390e4066f1ee89\",\"license\":\"BUSL-1.1\"},\"contracts/periphery/resolvers/steth/iStETHResolver.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity 0.8.21;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\nimport { IFluidLiquidityResolver } from \\\"../liquidity/iLiquidityResolver.sol\\\";\\nimport { IFluidStETHQueue } from \\\"../../../protocols/steth/interfaces/iStETHQueue.sol\\\";\\nimport { ILidoWithdrawalQueue } from \\\"../../../protocols/steth/interfaces/external/iLidoWithdrawalQueue.sol\\\";\\nimport { IFluidLiquidity } from \\\"../../../liquidity/interfaces/iLiquidity.sol\\\";\\nimport { Structs as StETHQueueStructs } from \\\"../../../protocols/steth/structs.sol\\\";\\nimport { Structs as LiquidityStructs } from \\\"../liquidity/structs.sol\\\";\\n\\ninterface IFluidStETHResolver {\\n /// @notice address of the stETHQueue contract\\n function STETH_QUEUE() external view returns (IFluidStETHQueue);\\n\\n /// @notice address of the Lido Withdrawal Queue contract (0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1)\\n function LIDO_WITHDRAWAL_QUEUE() external view returns (ILidoWithdrawalQueue);\\n\\n /// @notice address of the LiquidityResolver\\n function LIQUIDITY_RESOLVER() external view returns (IFluidLiquidityResolver);\\n\\n /// @notice returns all constants and config values\\n function config()\\n external\\n view\\n returns (\\n IFluidLiquidity liquidity_,\\n ILidoWithdrawalQueue lidoWithdrawalQueue_,\\n IERC20 stETH_,\\n address owner_,\\n uint16 maxLTV_,\\n bool allowListActive_,\\n bool isPaused_,\\n LiquidityStructs.UserBorrowData memory userBorrowData_,\\n LiquidityStructs.OverallTokenData memory overallTokenData_\\n );\\n\\n /// @notice checks if a linked claim for `claimTo_` and `claimTo_` is ready to be processed at Lido Withdrawal Queue\\n /// @param claimTo_ claimTo receiver to process the claim for\\n /// @param requestIdFrom_ Lido requestId from (start), as emitted at time of queuing via `LogQueue`\\n function isClaimable(address claimTo_, uint256 requestIdFrom_) external view returns (bool);\\n\\n /// @notice reads if a certain `auth_` address is an allowed auth or not\\n function isAuth(address auth_) external view returns (bool);\\n\\n /// @notice reads if a certain `guardian_` address is an allowed guardian or not\\n function isGuardian(address guardian_) external view returns (bool);\\n\\n /// @notice reads if a certain `user_` address is an allowed user or not\\n function isUserAllowed(address user_) external view returns (bool);\\n\\n /// @notice reads if the protocol is paused or not\\n function isPaused() external view returns (bool);\\n\\n /// @notice reads a Claim struct containing necessary information for executing the claim process from the mapping\\n /// claimTo and requestIdFrom -> claims and the claimable status.\\n function claim(\\n address claimTo_,\\n uint256 requestIdFrom_\\n ) external view returns (StETHQueueStructs.Claim memory claim_, bool isClaimable_);\\n\\n /// @notice returns borrow data and general data (such as rates, exchange prices, utilization, fee, total amounts etc.) for native token\\n function getUserBorrowData()\\n external\\n view\\n returns (\\n LiquidityStructs.UserBorrowData memory userBorrowData_,\\n LiquidityStructs.OverallTokenData memory overallTokenData_\\n );\\n}\\n\",\"keccak256\":\"0x6675673c6fac72d2b06176393ebb2cceb773e5fd237f2c7f7841316b47b9d457\",\"license\":\"MIT\"},\"contracts/periphery/resolvers/steth/main.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity 0.8.21;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\nimport { IFluidLiquidityResolver } from \\\"../liquidity/iLiquidityResolver.sol\\\";\\nimport { IFluidStETHResolver } from \\\"./iStETHResolver.sol\\\";\\nimport { IFluidStETHQueue } from \\\"../../../protocols/steth/interfaces/iStETHQueue.sol\\\";\\nimport { Structs as StETHQueueStructs } from \\\"../../../protocols/steth/structs.sol\\\";\\nimport { ILidoWithdrawalQueue } from \\\"../../../protocols/steth/interfaces/external/iLidoWithdrawalQueue.sol\\\";\\nimport { IFluidLiquidity } from \\\"../../../liquidity/interfaces/iLiquidity.sol\\\";\\nimport { Structs as LiquidityStructs } from \\\"../liquidity/structs.sol\\\";\\n\\n/// @notice Fluid StETH protocol resolver\\n/// Implements various view-only methods to give easy access to StETH protocol data.\\ncontract FluidStETHResolver is IFluidStETHResolver {\\n /// @inheritdoc IFluidStETHResolver\\n IFluidStETHQueue public immutable STETH_QUEUE;\\n\\n /// @inheritdoc IFluidStETHResolver\\n ILidoWithdrawalQueue public immutable LIDO_WITHDRAWAL_QUEUE;\\n\\n /// @inheritdoc IFluidStETHResolver\\n IFluidLiquidityResolver public immutable LIQUIDITY_RESOLVER;\\n\\n /// @dev address that is mapped to the chain native token at Liquidity\\n address internal constant NATIVE_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n /// @notice thrown if an input param address is zero\\n error FluidStETHResolver__AddressZero();\\n /// @notice thrown if there is no Claim queued for the given input data\\n error FluidStETHResolver__NoClaimQueued();\\n\\n constructor(IFluidStETHQueue stEthQueue_, IFluidLiquidityResolver liquidityResolver_, ILidoWithdrawalQueue lidoWithdrawalQueue_) {\\n if (address(stEthQueue_) == address(0) || address(liquidityResolver_) == address(0) || address(lidoWithdrawalQueue_) == address(0)) {\\n revert FluidStETHResolver__AddressZero();\\n }\\n\\n STETH_QUEUE = stEthQueue_;\\n LIQUIDITY_RESOLVER = liquidityResolver_;\\n LIDO_WITHDRAWAL_QUEUE = lidoWithdrawalQueue_;\\n }\\n\\n /// @inheritdoc IFluidStETHResolver\\n function isClaimable(address claimTo_, uint256 requestIdFrom_) public view returns (bool) {\\n StETHQueueStructs.Claim memory claim_ = STETH_QUEUE.claims(claimTo_, requestIdFrom_);\\n\\n if (claim_.checkpoint == 0) {\\n revert FluidStETHResolver__NoClaimQueued();\\n }\\n\\n uint256 requestsLength_ = claim_.requestIdTo - requestIdFrom_ + 1;\\n uint256[] memory requestIds_;\\n if (requestsLength_ == 1) {\\n // only one request id\\n requestIds_ = new uint256[](1);\\n requestIds_[0] = requestIdFrom_;\\n return LIDO_WITHDRAWAL_QUEUE.getWithdrawalStatus(requestIds_)[0].isFinalized;\\n }\\n\\n // build requestIds array from `requestIdFrom` to `requestIdTo`\\n uint256 curRequest_ = requestIdFrom_;\\n for (uint256 i; i < requestsLength_; ) {\\n requestIds_[i] = curRequest_;\\n\\n unchecked {\\n ++i;\\n ++curRequest_;\\n }\\n }\\n\\n // get requests statuses\\n ILidoWithdrawalQueue.WithdrawalRequestStatus[] memory statuses_ = LIDO_WITHDRAWAL_QUEUE.getWithdrawalStatus(\\n requestIds_\\n );\\n\\n // check for each status that it is finalized\\n for (uint256 i; i < requestsLength_; ) {\\n if (!statuses_[i].isFinalized) {\\n return false;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n return true;\\n }\\n\\n /// @inheritdoc IFluidStETHResolver\\n function config()\\n public\\n view\\n returns (\\n IFluidLiquidity liquidity_,\\n ILidoWithdrawalQueue lidoWithdrawalQueue_,\\n IERC20 stETH_,\\n address owner_,\\n uint16 maxLTV_,\\n bool allowListActive_,\\n bool isPaused_,\\n LiquidityStructs.UserBorrowData memory userBorrowData_,\\n LiquidityStructs.OverallTokenData memory overallTokenData_\\n )\\n {\\n (liquidity_, lidoWithdrawalQueue_, stETH_) = STETH_QUEUE.constantsView();\\n maxLTV_ = STETH_QUEUE.maxLTV();\\n allowListActive_ = STETH_QUEUE.allowListActive();\\n owner_ = STETH_QUEUE.owner();\\n isPaused_ = STETH_QUEUE.isPaused();\\n (userBorrowData_, overallTokenData_) = getUserBorrowData();\\n }\\n\\n /// @inheritdoc IFluidStETHResolver\\n function isAuth(address auth_) public view returns (bool) {\\n return STETH_QUEUE.isAuth(auth_);\\n }\\n\\n /// @inheritdoc IFluidStETHResolver\\n function isGuardian(address guardian_) public view returns (bool) {\\n return STETH_QUEUE.isGuardian(guardian_);\\n }\\n\\n /// @inheritdoc IFluidStETHResolver\\n function isUserAllowed(address user_) public view returns (bool) {\\n return STETH_QUEUE.isUserAllowed(user_);\\n }\\n\\n /// @inheritdoc IFluidStETHResolver\\n function isPaused() public view returns (bool) {\\n return STETH_QUEUE.isPaused();\\n }\\n\\n /// @inheritdoc IFluidStETHResolver\\n function claim(\\n address claimTo_,\\n uint256 requestIdFrom_\\n ) public view returns (StETHQueueStructs.Claim memory claim_, bool isClaimable_) {\\n claim_ = STETH_QUEUE.claims(claimTo_, requestIdFrom_);\\n isClaimable_ = isClaimable(claimTo_, requestIdFrom_);\\n }\\n\\n /// @inheritdoc IFluidStETHResolver\\n function getUserBorrowData()\\n public\\n view\\n returns (\\n LiquidityStructs.UserBorrowData memory userBorrowData_,\\n LiquidityStructs.OverallTokenData memory overallTokenData_\\n )\\n {\\n (userBorrowData_, overallTokenData_) = LIQUIDITY_RESOLVER.getUserBorrowData(\\n address(STETH_QUEUE),\\n NATIVE_TOKEN_ADDRESS\\n );\\n }\\n}\\n\",\"keccak256\":\"0xa93c95b9af5f95a6bc9e67036c4c6b9c82850c177a08a0b25f6927454d107d37\",\"license\":\"BUSL-1.1\"},\"contracts/protocols/steth/interfaces/external/iLidoWithdrawalQueue.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity 0.8.21;\\n\\ninterface ILidoWithdrawalQueue {\\n function balanceOf(address) external view returns (uint);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n // code below based on Lido WithdrawalQueueBase.sol\\n // see https://github.com/lidofinance/lido-dao/blob/v2.0.0/contracts/0.8.9/WithdrawalQueueBase.sol\\n\\n /// @notice output format struct for `_getWithdrawalStatus()` method\\n struct WithdrawalRequestStatus {\\n /// @notice stETH token amount that was locked on withdrawal queue for this request\\n uint256 amountOfStETH;\\n /// @notice amount of stETH shares locked on withdrawal queue for this request\\n uint256 amountOfShares;\\n /// @notice address that can claim or transfer this request\\n address owner;\\n /// @notice timestamp of when the request was created, in seconds\\n uint256 timestamp;\\n /// @notice true, if request is finalized\\n bool isFinalized;\\n /// @notice true, if request is claimed. Request is claimable if (isFinalized && !isClaimed)\\n bool isClaimed;\\n }\\n\\n /// @notice length of the checkpoint array. Last possible value for the hint.\\n /// NB! checkpoints are indexed from 1, so it returns 0 if there is no checkpoints\\n function getLastCheckpointIndex() external view returns (uint256);\\n\\n // code below based on Lido WithdrawalQueue.sol\\n // see https://github.com/lidofinance/lido-dao/blob/v2.0.0/contracts/0.8.9/WithdrawalQueue.sol\\n\\n /// @notice Request the batch of stETH for withdrawal. Approvals for the passed amounts should be done before.\\n /// @param _amounts an array of stETH amount values.\\n /// The standalone withdrawal request will be created for each item in the passed list.\\n /// @param _owner address that will be able to manage the created requests.\\n /// If `address(0)` is passed, `msg.sender` will be used as owner.\\n /// @return requestIds an array of the created withdrawal request ids\\n function requestWithdrawals(\\n uint256[] calldata _amounts,\\n address _owner\\n ) external returns (uint256[] memory requestIds);\\n\\n /// @notice Claim one`_requestId` request once finalized sending locked ether to the owner\\n /// @param _requestId request id to claim\\n /// @dev use unbounded loop to find a hint, which can lead to OOG\\n /// @dev\\n /// Reverts if requestId or hint are not valid\\n /// Reverts if request is not finalized or already claimed\\n /// Reverts if msg sender is not an owner of request\\n function claimWithdrawal(uint256 _requestId) external;\\n\\n /// @notice Claim a batch of withdrawal requests if they are finalized sending locked ether to the owner\\n /// @param _requestIds array of request ids to claim\\n /// @param _hints checkpoint hint for each id. Can be obtained with `findCheckpointHints()`\\n /// @dev\\n /// Reverts if requestIds and hints arrays length differs\\n /// Reverts if any requestId or hint in arguments are not valid\\n /// Reverts if any request is not finalized or already claimed\\n /// Reverts if msg sender is not an owner of the requests\\n function claimWithdrawals(uint256[] calldata _requestIds, uint256[] calldata _hints) external;\\n\\n //// @notice Returns all withdrawal requests that belongs to the `_owner` address\\n ///\\n /// WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n /// to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n /// this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n /// uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n function getWithdrawalRequests(address _owner) external view returns (uint256[] memory requestsIds);\\n\\n /// @notice Finds the list of hints for the given `_requestIds` searching among the checkpoints with indices\\n /// in the range `[_firstIndex, _lastIndex]`.\\n /// NB! Array of request ids should be sorted\\n /// NB! `_firstIndex` should be greater than 0, because checkpoint list is 1-based array\\n /// Usage: findCheckpointHints(_requestIds, 1, getLastCheckpointIndex())\\n /// @param _requestIds ids of the requests sorted in the ascending order to get hints for\\n /// @param _firstIndex left boundary of the search range. Should be greater than 0\\n /// @param _lastIndex right boundary of the search range. Should be less than or equal to getLastCheckpointIndex()\\n /// @return hintIds array of hints used to find required checkpoint for the request\\n function findCheckpointHints(\\n uint256[] calldata _requestIds,\\n uint256 _firstIndex,\\n uint256 _lastIndex\\n ) external view returns (uint256[] memory hintIds);\\n\\n /// @notice Returns status for requests with provided ids\\n /// @param _requestIds array of withdrawal request ids\\n function getWithdrawalStatus(\\n uint256[] calldata _requestIds\\n ) external view returns (WithdrawalRequestStatus[] memory statuses);\\n\\n /// @notice maximum amount of stETH that is possible to withdraw by a single request\\n /// Prevents accumulating too much funds per single request fulfillment in the future.\\n /// @dev To withdraw larger amounts, it's recommended to split it to several requests\\n function MAX_STETH_WITHDRAWAL_AMOUNT() external view returns (uint256);\\n\\n /// @notice minimum amount of stETH that is possible to withdraw by a single request\\n function MIN_STETH_WITHDRAWAL_AMOUNT() external view returns (uint256);\\n\\n // code below based on Lido WithdrawalQueueERC721.sol\\n // see https://github.com/lidofinance/lido-dao/blob/v2.0.0/contracts/0.8.9/WithdrawalQueueERC721.sol\\n\\n /// @notice Finalize requests from last finalized one up to `_lastRequestIdToBeFinalized`\\n /// @dev ether to finalize all the requests should be calculated using `prefinalize()` and sent along\\n function finalize(uint256 _lastRequestIdToBeFinalized, uint256 _maxShareRate) external payable;\\n}\\n\",\"keccak256\":\"0x9e1912b988a0076746564086faf9ebfb604a2acb7ebeb5ee28e8e72dd330ae63\",\"license\":\"MIT\"},\"contracts/protocols/steth/interfaces/iStETHQueue.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity 0.8.21;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\nimport { Structs } from \\\"../structs.sol\\\";\\nimport { IFluidLiquidity } from \\\"../../../liquidity/interfaces/iLiquidity.sol\\\";\\nimport { ILidoWithdrawalQueue } from \\\"../interfaces/external/iLidoWithdrawalQueue.sol\\\";\\n\\ninterface IFluidStETHQueue {\\n /// @notice returns the constant values for LIQUIDITY, LIDO_WITHDRAWAL_QUEUE, STETH\\n function constantsView() external view returns (IFluidLiquidity, ILidoWithdrawalQueue, IERC20);\\n\\n /// @notice gets an open Claim for `claimTo_` and `requestIdFrom_`\\n function claims(address claimTo_, uint256 requestIdFrom_) external view returns (Structs.Claim memory);\\n\\n /// @notice reads if a certain `auth_` address is an allowed auth or not\\n function isAuth(address auth_) external view returns (bool);\\n\\n /// @notice reads if a certain `guardian_` address is an allowed guardian or not\\n function isGuardian(address guardian_) external view returns (bool);\\n\\n /// @notice reads if a certain `user_` address is an allowed user or not\\n function isUserAllowed(address user_) external view returns (bool);\\n\\n /// @notice maximum allowed percentage of LTV (loan-to-value). E.g. 90% -> max. 90 ETH can be borrowed with 100 stETH\\n /// as collateral in withdrawal queue. ETH will be received at time of claim to cover the paid borrowed ETH amount.\\n /// In 1e2 (1% = 100, 90% = 9_000, 100% = 10_000).\\n /// Configurable by auths.\\n function maxLTV() external view returns (uint16);\\n\\n /// @notice flag whether allow list behavior is enabled or not.\\n function allowListActive() external view returns (bool);\\n\\n /// @notice reads if the protocol is paused or not\\n function isPaused() external view returns (bool);\\n\\n /// @notice reads owner address\\n function owner() external view returns (address);\\n}\\n\",\"keccak256\":\"0x93c3424f7533228ff0c3a3b81af8a1aa65dbd4c6efa3068ca4ee7438d9551355\",\"license\":\"MIT\"},\"contracts/protocols/steth/structs.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity 0.8.21;\\n\\nabstract contract Structs {\\n /// @notice Claim data struct for storage link to owner address\\n struct Claim {\\n /// @param borrowAmountRaw raw borrow amount at Liquidity. Multiply with borrowExchangePrice to get normal borrow amount\\n uint128 borrowAmountRaw;\\n /// @param checkpoint checkpoint at time of queue. optimizes finding checkpoint hints range at claim time.\\n uint48 checkpoint;\\n /// @param requestIdTo last request Id linked to the claim\\n uint40 requestIdTo;\\n // 5 bytes empty\\n }\\n}\\n\",\"keccak256\":\"0x343943168af0e9e5ce5b9e3c536c19f1cb5c4402c9cea3e63aa7deca70ad507f\",\"license\":\"BUSL-1.1\"}},\"version\":1}", "bytecode": "0x60e06040523480156200001157600080fd5b5060405162001c8738038062001c878339810160408190526200003491620000bb565b6001600160a01b03831615806200005257506001600160a01b038216155b806200006557506001600160a01b038116155b15620000845760405163431ad5b760e11b815260040160405180910390fd5b6001600160a01b0392831660805290821660c0521660a0526200010f565b6001600160a01b0381168114620000b857600080fd5b50565b600080600060608486031215620000d157600080fd5b8351620000de81620000a2565b6020850151909350620000f181620000a2565b60408501519092506200010481620000a2565b809150509250925092565b60805160a05160c051611adf620001a86000396000818161016d0152610da701526000818161022901528181610546015261067d015260008181610121015281816102a901528181610365015281816103e7015281816107d701528181610872015281816109030152818161099401528181610a2501528181610b1701528181610bb201528181610c360152610d650152611adf6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806379502c5511610081578063b187bd261161005b578063b187bd261461021c578063b8c7777414610224578063de4f12271461024b57600080fd5b806379502c551461018f578063a52ba4e8146101ac578063aad3ec96146101bf57600080fd5b8063408e5df6116100b2578063408e5df614610109578063532139a31461011c5780636902f79f1461016857600080fd5b80630c68ba21146100ce5780632520e7ff146100f6575b600080fd5b6100e16100dc366004610f78565b610261565b60405190151581526020015b60405180910390f35b6100e1610104366004610f78565b61031d565b6100e1610117366004610f9c565b610396565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ed565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b61019761076a565b6040516100ed99989796959493929190610fc8565b6100e16101ba366004610f78565b610acf565b6101d26101cd366004610f9c565b610b48565b6040805183516fffffffffffffffffffffffffffffffff16815260208085015165ffffffffffff16908201529281015164ffffffffff1690830152151560608201526080016100ed565b6100e1610c32565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b610253610cc8565b6040516100ed9291906111e6565b6040517f0c68ba2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690630c68ba21906024015b602060405180830381865afa1580156102f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031791906113b3565b92915050565b6040517f2520e7ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690632520e7ff906024016102d6565b6040517fab541a8500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905260009182917f0000000000000000000000000000000000000000000000000000000000000000169063ab541a8590604401606060405180830381865afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190611503565b9050806020015165ffffffffffff1660000361049a576040517f953186f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083826040015164ffffffffff166104b391906115b0565b6104be9060016115c3565b905060608160010361060657604080516001808252818301909252906020808301908036833701905050905084816000815181106104fe576104fe6115d6565b60209081029190910101526040517fb8c4b85a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8c4b85a9061057b908490600401611605565b600060405180830381865afa158015610598573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105de9190810190611649565b6000815181106105f0576105f06115d6565b6020026020010151608001519350505050610317565b8460005b8381101561063c5781838281518110610625576106256115d6565b60209081029190910101526001918201910161060a565b506040517fb8c4b85a00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8c4b85a906106b2908690600401611605565b600060405180830381865afa1580156106cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107159190810190611649565b905060005b8481101561075b57818181518110610734576107346115d6565b6020026020010151608001516107535760009650505050505050610317565b60010161071a565b50600198975050505050505050565b60008060008060008060006107cd6040518061014001604052806000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6107d5610e1c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b7791bf26040518163ffffffff1660e01b8152600401606060405180830381865afa158015610840573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108649190611752565b809950819a50829b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff919061179f565b94507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663457dbf216040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099091906113b3565b93507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2191906117c3565b95507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab291906113b3565b9250610abc610cc8565b8092508193505050909192939495969798565b6040517fa52ba4e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a52ba4e8906024016102d6565b6040805160608101825260008082526020820181905281830181905291517fab541a8500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529192917f0000000000000000000000000000000000000000000000000000000000000000169063ab541a8590604401606060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d9190611503565b9150610c298484610396565b90509250929050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc391906113b3565b905090565b610d206040518061014001604052806000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610d28610e1c565b6040517f967915d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60248301527f0000000000000000000000000000000000000000000000000000000000000000169063967915d6906044016104c060405180830381865afa158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1391906119f7565b90939092509050565b604051806102000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001610e99610e9e565b905290565b604051806060016040528060008152602001610ef86040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b8152602001610e996040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7557600080fd5b50565b600060208284031215610f8a57600080fd5b8135610f9581610f53565b9392505050565b60008060408385031215610faf57600080fd5b8235610fba81610f53565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff8a81168252898116602083015288811660408301528716606082015261ffff8616608082015284151560a082015283151560c08201526105a0810161108860e08301858051151582526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152505050565b82516102208301526020808401516102408401526040808501516102608501526060808601516102808601526080808701516102a087015260a0808801516102c088015260c0808901516102e089015260e08901516103008901526101008901516103208901526101208901516103408901526101408901516103608901526101608901516103808901526101808901516103a08901526101a08901516103c08901526101c08901516103e08901526101e089015180516104008a015280870151805173ffffffffffffffffffffffffffffffffffffffff9081166104208c0152818901516104408c0152818801516104608c0152818701516104808c0152908501516104a08b01529086015180519091166104c08a0152958601516104e0890152938501516105008801529184015161052087015283015161054086015282015161056085015201516105808301529a9950505050505050505050565b6104c0810161125882858051151582526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152505050565b610f95610140830184805182526020808201518184015260408083015181850152606080840151818601526080808501518187015260a0808601518188015260c0808701518189015260e08088015190890152610100808801519089015261012080880151908901526101408088015190890152610160808801519089015261018080880151908901526101a080880151908901526101c080880151908901526101e09687015180519789019790975286860151805173ffffffffffffffffffffffffffffffffffffffff9081166102008b0152818801516102208b0152818701516102408b0152818601516102608b0152908401516102808a01529685015180519097166102a0890152948601516102c0880152928501516102e087015290840151610300860152830151610320850152820151610340840152015161036090910152565b805180151581146113ae57600080fd5b919050565b6000602082840312156113c557600080fd5b610f958261139e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611420576114206113ce565b60405290565b60405160c0810167ffffffffffffffff81118282101715611420576114206113ce565b60405160a0810167ffffffffffffffff81118282101715611420576114206113ce565b604051610200810167ffffffffffffffff81118282101715611420576114206113ce565b604051610140810167ffffffffffffffff81118282101715611420576114206113ce565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156114fb576114fb6113ce565b604052919050565b60006060828403121561151557600080fd5b61151d6113fd565b82516fffffffffffffffffffffffffffffffff8116811461153d57600080fd5b8152602083015165ffffffffffff8116811461155857600080fd5b6020820152604083015164ffffffffff8116811461157557600080fd5b60408201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561031757610317611581565b8082018082111561031757610317611581565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561163d57835183529284019291840191600101611621565b50909695505050505050565b6000602080838503121561165c57600080fd5b825167ffffffffffffffff8082111561167457600080fd5b818501915085601f83011261168857600080fd5b81518181111561169a5761169a6113ce565b6116a8848260051b016114b4565b818152848101925060c09182028401850191888311156116c757600080fd5b938501935b828510156117465780858a0312156116e45760008081fd5b6116ec611426565b85518152868601518782015260408087015161170781610f53565b9082015260608681015190820152608061172281880161139e565b9082015260a061173387820161139e565b90820152845293840193928501926116cc565b50979650505050505050565b60008060006060848603121561176757600080fd5b835161177281610f53565b602085015190935061178381610f53565b604085015190925061179481610f53565b809150509250925092565b6000602082840312156117b157600080fd5b815161ffff81168114610f9557600080fd5b6000602082840312156117d557600080fd5b8151610f9581610f53565b600060e082840312156117f257600080fd5b60405160e0810181811067ffffffffffffffff82111715611815576118156113ce565b8060405250809150825161182881610f53565b808252506020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c08201525092915050565b60008183036101a081121561188357600080fd5b61188b6113fd565b91508251825260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156118c157600080fd5b506118ca611449565b60208301516118d881610f53565b8082525060408301516020820152606083015160408201526080830151606082015260a08301516080820152806020830152506119188360c084016117e0565b604082015292915050565b6000610380828403121561193657600080fd5b61193e61146c565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015181830152506101608083015181830152506101808083015181830152506101a08083015181830152506101c08083015181830152506101e06119ed8482850161186f565b9082015292915050565b6000808284036104c0811215611a0c57600080fd5b61014080821215611a1c57600080fd5b611a24611490565b9150611a2f8561139e565b82526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c085015160c083015260e085015160e0830152610100808601518184015250610120808601518184015250819350611a9e86828701611923565b92505050925092905056fea26469706673582212200662d73bfd6f47cb4cc4226b072c185daa5db6a2abf68117c5c32125fbc095d164736f6c63430008150033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c806379502c5511610081578063b187bd261161005b578063b187bd261461021c578063b8c7777414610224578063de4f12271461024b57600080fd5b806379502c551461018f578063a52ba4e8146101ac578063aad3ec96146101bf57600080fd5b8063408e5df6116100b2578063408e5df614610109578063532139a31461011c5780636902f79f1461016857600080fd5b80630c68ba21146100ce5780632520e7ff146100f6575b600080fd5b6100e16100dc366004610f78565b610261565b60405190151581526020015b60405180910390f35b6100e1610104366004610f78565b61031d565b6100e1610117366004610f9c565b610396565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ed565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b61019761076a565b6040516100ed99989796959493929190610fc8565b6100e16101ba366004610f78565b610acf565b6101d26101cd366004610f9c565b610b48565b6040805183516fffffffffffffffffffffffffffffffff16815260208085015165ffffffffffff16908201529281015164ffffffffff1690830152151560608201526080016100ed565b6100e1610c32565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b610253610cc8565b6040516100ed9291906111e6565b6040517f0c68ba2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690630c68ba21906024015b602060405180830381865afa1580156102f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031791906113b3565b92915050565b6040517f2520e7ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690632520e7ff906024016102d6565b6040517fab541a8500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905260009182917f0000000000000000000000000000000000000000000000000000000000000000169063ab541a8590604401606060405180830381865afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190611503565b9050806020015165ffffffffffff1660000361049a576040517f953186f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083826040015164ffffffffff166104b391906115b0565b6104be9060016115c3565b905060608160010361060657604080516001808252818301909252906020808301908036833701905050905084816000815181106104fe576104fe6115d6565b60209081029190910101526040517fb8c4b85a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8c4b85a9061057b908490600401611605565b600060405180830381865afa158015610598573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105de9190810190611649565b6000815181106105f0576105f06115d6565b6020026020010151608001519350505050610317565b8460005b8381101561063c5781838281518110610625576106256115d6565b60209081029190910101526001918201910161060a565b506040517fb8c4b85a00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b8c4b85a906106b2908690600401611605565b600060405180830381865afa1580156106cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107159190810190611649565b905060005b8481101561075b57818181518110610734576107346115d6565b6020026020010151608001516107535760009650505050505050610317565b60010161071a565b50600198975050505050505050565b60008060008060008060006107cd6040518061014001604052806000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6107d5610e1c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b7791bf26040518163ffffffff1660e01b8152600401606060405180830381865afa158015610840573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108649190611752565b809950819a50829b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff919061179f565b94507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663457dbf216040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099091906113b3565b93507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2191906117c3565b95507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab291906113b3565b9250610abc610cc8565b8092508193505050909192939495969798565b6040517fa52ba4e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a52ba4e8906024016102d6565b6040805160608101825260008082526020820181905281830181905291517fab541a8500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529192917f0000000000000000000000000000000000000000000000000000000000000000169063ab541a8590604401606060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d9190611503565b9150610c298484610396565b90509250929050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc391906113b3565b905090565b610d206040518061014001604052806000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610d28610e1c565b6040517f967915d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60248301527f0000000000000000000000000000000000000000000000000000000000000000169063967915d6906044016104c060405180830381865afa158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1391906119f7565b90939092509050565b604051806102000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001610e99610e9e565b905290565b604051806060016040528060008152602001610ef86040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b8152602001610e996040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7557600080fd5b50565b600060208284031215610f8a57600080fd5b8135610f9581610f53565b9392505050565b60008060408385031215610faf57600080fd5b8235610fba81610f53565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff8a81168252898116602083015288811660408301528716606082015261ffff8616608082015284151560a082015283151560c08201526105a0810161108860e08301858051151582526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152505050565b82516102208301526020808401516102408401526040808501516102608501526060808601516102808601526080808701516102a087015260a0808801516102c088015260c0808901516102e089015260e08901516103008901526101008901516103208901526101208901516103408901526101408901516103608901526101608901516103808901526101808901516103a08901526101a08901516103c08901526101c08901516103e08901526101e089015180516104008a015280870151805173ffffffffffffffffffffffffffffffffffffffff9081166104208c0152818901516104408c0152818801516104608c0152818701516104808c0152908501516104a08b01529086015180519091166104c08a0152958601516104e0890152938501516105008801529184015161052087015283015161054086015282015161056085015201516105808301529a9950505050505050505050565b6104c0810161125882858051151582526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152505050565b610f95610140830184805182526020808201518184015260408083015181850152606080840151818601526080808501518187015260a0808601518188015260c0808701518189015260e08088015190890152610100808801519089015261012080880151908901526101408088015190890152610160808801519089015261018080880151908901526101a080880151908901526101c080880151908901526101e09687015180519789019790975286860151805173ffffffffffffffffffffffffffffffffffffffff9081166102008b0152818801516102208b0152818701516102408b0152818601516102608b0152908401516102808a01529685015180519097166102a0890152948601516102c0880152928501516102e087015290840151610300860152830151610320850152820151610340840152015161036090910152565b805180151581146113ae57600080fd5b919050565b6000602082840312156113c557600080fd5b610f958261139e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611420576114206113ce565b60405290565b60405160c0810167ffffffffffffffff81118282101715611420576114206113ce565b60405160a0810167ffffffffffffffff81118282101715611420576114206113ce565b604051610200810167ffffffffffffffff81118282101715611420576114206113ce565b604051610140810167ffffffffffffffff81118282101715611420576114206113ce565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156114fb576114fb6113ce565b604052919050565b60006060828403121561151557600080fd5b61151d6113fd565b82516fffffffffffffffffffffffffffffffff8116811461153d57600080fd5b8152602083015165ffffffffffff8116811461155857600080fd5b6020820152604083015164ffffffffff8116811461157557600080fd5b60408201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561031757610317611581565b8082018082111561031757610317611581565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561163d57835183529284019291840191600101611621565b50909695505050505050565b6000602080838503121561165c57600080fd5b825167ffffffffffffffff8082111561167457600080fd5b818501915085601f83011261168857600080fd5b81518181111561169a5761169a6113ce565b6116a8848260051b016114b4565b818152848101925060c09182028401850191888311156116c757600080fd5b938501935b828510156117465780858a0312156116e45760008081fd5b6116ec611426565b85518152868601518782015260408087015161170781610f53565b9082015260608681015190820152608061172281880161139e565b9082015260a061173387820161139e565b90820152845293840193928501926116cc565b50979650505050505050565b60008060006060848603121561176757600080fd5b835161177281610f53565b602085015190935061178381610f53565b604085015190925061179481610f53565b809150509250925092565b6000602082840312156117b157600080fd5b815161ffff81168114610f9557600080fd5b6000602082840312156117d557600080fd5b8151610f9581610f53565b600060e082840312156117f257600080fd5b60405160e0810181811067ffffffffffffffff82111715611815576118156113ce565b8060405250809150825161182881610f53565b808252506020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c08201525092915050565b60008183036101a081121561188357600080fd5b61188b6113fd565b91508251825260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156118c157600080fd5b506118ca611449565b60208301516118d881610f53565b8082525060408301516020820152606083015160408201526080830151606082015260a08301516080820152806020830152506119188360c084016117e0565b604082015292915050565b6000610380828403121561193657600080fd5b61193e61146c565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015181830152506101608083015181830152506101808083015181830152506101a08083015181830152506101c08083015181830152506101e06119ed8482850161186f565b9082015292915050565b6000808284036104c0811215611a0c57600080fd5b61014080821215611a1c57600080fd5b611a24611490565b9150611a2f8561139e565b82526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c085015160c083015260e085015160e0830152610100808601518184015250610120808601518184015250819350611a9e86828701611923565b92505050925092905056fea26469706673582212200662d73bfd6f47cb4cc4226b072c185daa5db6a2abf68117c5c32125fbc095d164736f6c63430008150033", "devdoc": { "kind": "dev", "methods": { "isClaimable(address,uint256)": { "params": { "claimTo_": "claimTo receiver to process the claim for", "requestIdFrom_": "Lido requestId from (start), as emitted at time of queuing via `LogQueue`" } } }, "stateVariables": { "NATIVE_TOKEN_ADDRESS": { "details": "address that is mapped to the chain native token at Liquidity" } }, "version": 1 }, "userdoc": { "errors": { "FluidStETHResolver__AddressZero()": [ { "notice": "thrown if an input param address is zero" } ], "FluidStETHResolver__NoClaimQueued()": [ { "notice": "thrown if there is no Claim queued for the given input data" } ] }, "kind": "user", "methods": { "LIDO_WITHDRAWAL_QUEUE()": { "notice": "address of the Lido Withdrawal Queue contract (0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1)" }, "LIQUIDITY_RESOLVER()": { "notice": "address of the LiquidityResolver" }, "STETH_QUEUE()": { "notice": "address of the stETHQueue contract" }, "claim(address,uint256)": { "notice": "reads a Claim struct containing necessary information for executing the claim process from the mapping claimTo and requestIdFrom -> claims and the claimable status." }, "config()": { "notice": "returns all constants and config values" }, "getUserBorrowData()": { "notice": "returns borrow data and general data (such as rates, exchange prices, utilization, fee, total amounts etc.) for native token" }, "isAuth(address)": { "notice": "reads if a certain `auth_` address is an allowed auth or not" }, "isClaimable(address,uint256)": { "notice": "checks if a linked claim for `claimTo_` and `claimTo_` is ready to be processed at Lido Withdrawal Queue" }, "isGuardian(address)": { "notice": "reads if a certain `guardian_` address is an allowed guardian or not" }, "isPaused()": { "notice": "reads if the protocol is paused or not" }, "isUserAllowed(address)": { "notice": "reads if a certain `user_` address is an allowed user or not" } }, "notice": "Fluid StETH protocol resolver Implements various view-only methods to give easy access to StETH protocol data.", "version": 1 }, "storageLayout": { "storage": [], "types": null } }