github.com/cwntr/go-defi@v0.0.0-20210629134751-07f9ec2f7e66/binding/compound/cToken/cToken.go (about)

     1  // Code generated - DO NOT EDIT.
     2  // This file is a generated binding and any manual changes will be lost.
     3  
     4  package cToken
     5  
     6  import (
     7  	"math/big"
     8  	"strings"
     9  
    10  	ethereum "github.com/ethereum/go-ethereum"
    11  	"github.com/ethereum/go-ethereum/accounts/abi"
    12  	"github.com/ethereum/go-ethereum/accounts/abi/bind"
    13  	"github.com/ethereum/go-ethereum/common"
    14  	"github.com/ethereum/go-ethereum/core/types"
    15  	"github.com/ethereum/go-ethereum/event"
    16  )
    17  
    18  // Reference imports to suppress errors if they are not otherwise used.
    19  var (
    20  	_ = big.NewInt
    21  	_ = strings.NewReader
    22  	_ = ethereum.NotFound
    23  	_ = bind.Bind
    24  	_ = common.Big1
    25  	_ = types.BloomLookup
    26  	_ = event.NewSubscription
    27  )
    28  
    29  // CTokenABI is the input ABI used to generate the binding from.
    30  const CTokenABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying_\",\"type\":\"address\"},{\"internalType\":\"contractComptrollerInterface\",\"name\":\"comptroller_\",\"type\":\"address\"},{\"internalType\":\"contractInterestRateModel\",\"name\":\"interestRateModel_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialExchangeRateMantissa_\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"},{\"internalType\":\"addresspayable\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"becomeImplementationData\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\",\"signature\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cashPrior\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"interestAccumulated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"AccrueInterest\",\"type\":\"event\",\"signature\":\"0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\",\"signature\":\"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\",\"signature\":\"0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"error\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"info\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"detail\",\"type\":\"uint256\"}],\"name\":\"Failure\",\"type\":\"event\",\"signature\":\"0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"cTokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"LiquidateBorrow\",\"type\":\"event\",\"signature\":\"0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintTokens\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\",\"signature\":\"0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"NewAdmin\",\"type\":\"event\",\"signature\":\"0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractComptrollerInterface\",\"name\":\"oldComptroller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractComptrollerInterface\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"NewComptroller\",\"type\":\"event\",\"signature\":\"0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"NewImplementation\",\"type\":\"event\",\"signature\":\"0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contractInterestRateModel\",\"name\":\"oldInterestRateModel\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contractInterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"NewMarketInterestRateModel\",\"type\":\"event\",\"signature\":\"0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldPendingAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"NewPendingAdmin\",\"type\":\"event\",\"signature\":\"0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveFactorMantissa\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"NewReserveFactor\",\"type\":\"event\",\"signature\":\"0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"redeemer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\",\"signature\":\"0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accountBorrows\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalBorrows\",\"type\":\"uint256\"}],\"name\":\"RepayBorrow\",\"type\":\"event\",\"signature\":\"0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"benefactor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"addAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalReserves\",\"type\":\"uint256\"}],\"name\":\"ReservesAdded\",\"type\":\"event\",\"signature\":\"0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalReserves\",\"type\":\"uint256\"}],\"name\":\"ReservesReduced\",\"type\":\"event\",\"signature\":\"0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\",\"signature\":\"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[],\"name\":\"_acceptAdmin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xe9c714f2\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"addAmount\",\"type\":\"uint256\"}],\"name\":\"_addReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x3e941010\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reduceAmount\",\"type\":\"uint256\"}],\"name\":\"_reduceReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x601a0bf1\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contractComptrollerInterface\",\"name\":\"newComptroller\",\"type\":\"address\"}],\"name\":\"_setComptroller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x4576b5db\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowResign\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"becomeImplementationData\",\"type\":\"bytes\"}],\"name\":\"_setImplementation\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x555bcc40\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contractInterestRateModel\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"_setInterestRateModel\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xf2b3abbd\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"_setPendingAdmin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xb71d1a0c\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newReserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"_setReserveFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xfca7820b\"},{\"constant\":true,\"inputs\":[],\"name\":\"accrualBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x6c540baf\"},{\"constant\":false,\"inputs\":[],\"name\":\"accrueInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xa6afed95\"},{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0xf851a440\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0xdd62ed3e\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x095ea7b3\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x70a08231\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOfUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x3af9e669\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"}],\"name\":\"borrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xc5ebeaec\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x17bfdfbc\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"borrowBalanceStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x95dd9193\"},{\"constant\":true,\"inputs\":[],\"name\":\"borrowIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0xaa5af0fd\"},{\"constant\":true,\"inputs\":[],\"name\":\"borrowRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0xf8f9da28\"},{\"constant\":true,\"inputs\":[],\"name\":\"comptroller\",\"outputs\":[{\"internalType\":\"contractComptrollerInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x5fe3b567\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x313ce567\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"delegateToImplementation\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x0933c1ed\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"delegateToViewImplementation\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x4487152f\"},{\"constant\":false,\"inputs\":[],\"name\":\"exchangeRateCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xbd6d894d\"},{\"constant\":true,\"inputs\":[],\"name\":\"exchangeRateStored\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x182df0f5\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getAccountSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0xc37f68e2\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x3b1d21a2\"},{\"constant\":true,\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x5c60da1b\"},{\"constant\":true,\"inputs\":[],\"name\":\"interestRateModel\",\"outputs\":[{\"internalType\":\"contractInterestRateModel\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0xf3fdb15a\"},{\"constant\":true,\"inputs\":[],\"name\":\"isCToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0xfe9c44ae\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"contractCTokenInterface\",\"name\":\"cTokenCollateral\",\"type\":\"address\"}],\"name\":\"liquidateBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xf5e3c462\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mintAmount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xa0712d68\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x06fdde03\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x26782247\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemTokens\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xdb006a75\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemAmount\",\"type\":\"uint256\"}],\"name\":\"redeemUnderlying\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x852a12e3\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"repayBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x0e752702\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"}],\"name\":\"repayBorrowBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x2608f818\"},{\"constant\":true,\"inputs\":[],\"name\":\"reserveFactorMantissa\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x173b9904\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"seizeTokens\",\"type\":\"uint256\"}],\"name\":\"seize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xb2a02ff1\"},{\"constant\":true,\"inputs\":[],\"name\":\"supplyRatePerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0xae9d70b0\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x95d89b41\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalBorrows\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x47bd3718\"},{\"constant\":false,\"inputs\":[],\"name\":\"totalBorrowsCurrent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x73acee98\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x8f840ddd\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x18160ddd\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0xa9059cbb\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"signature\":\"0x23b872dd\"},{\"constant\":true,\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\",\"signature\":\"0x6f307dc3\"}]"
    31  
    32  // CToken is an auto generated Go binding around an Ethereum contract.
    33  type CToken struct {
    34  	CTokenCaller     // Read-only binding to the contract
    35  	CTokenTransactor // Write-only binding to the contract
    36  	CTokenFilterer   // Log filterer for contract events
    37  }
    38  
    39  // CTokenCaller is an auto generated read-only Go binding around an Ethereum contract.
    40  type CTokenCaller struct {
    41  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    42  }
    43  
    44  // CTokenTransactor is an auto generated write-only Go binding around an Ethereum contract.
    45  type CTokenTransactor struct {
    46  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    47  }
    48  
    49  // CTokenFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
    50  type CTokenFilterer struct {
    51  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    52  }
    53  
    54  // CTokenSession is an auto generated Go binding around an Ethereum contract,
    55  // with pre-set call and transact options.
    56  type CTokenSession struct {
    57  	Contract     *CToken           // Generic contract binding to set the session for
    58  	CallOpts     bind.CallOpts     // Call options to use throughout this session
    59  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
    60  }
    61  
    62  // CTokenCallerSession is an auto generated read-only Go binding around an Ethereum contract,
    63  // with pre-set call options.
    64  type CTokenCallerSession struct {
    65  	Contract *CTokenCaller // Generic contract caller binding to set the session for
    66  	CallOpts bind.CallOpts // Call options to use throughout this session
    67  }
    68  
    69  // CTokenTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
    70  // with pre-set transact options.
    71  type CTokenTransactorSession struct {
    72  	Contract     *CTokenTransactor // Generic contract transactor binding to set the session for
    73  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
    74  }
    75  
    76  // CTokenRaw is an auto generated low-level Go binding around an Ethereum contract.
    77  type CTokenRaw struct {
    78  	Contract *CToken // Generic contract binding to access the raw methods on
    79  }
    80  
    81  // CTokenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
    82  type CTokenCallerRaw struct {
    83  	Contract *CTokenCaller // Generic read-only contract binding to access the raw methods on
    84  }
    85  
    86  // CTokenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
    87  type CTokenTransactorRaw struct {
    88  	Contract *CTokenTransactor // Generic write-only contract binding to access the raw methods on
    89  }
    90  
    91  // NewCToken creates a new instance of CToken, bound to a specific deployed contract.
    92  func NewCToken(address common.Address, backend bind.ContractBackend) (*CToken, error) {
    93  	contract, err := bindCToken(address, backend, backend, backend)
    94  	if err != nil {
    95  		return nil, err
    96  	}
    97  	return &CToken{CTokenCaller: CTokenCaller{contract: contract}, CTokenTransactor: CTokenTransactor{contract: contract}, CTokenFilterer: CTokenFilterer{contract: contract}}, nil
    98  }
    99  
   100  // NewCTokenCaller creates a new read-only instance of CToken, bound to a specific deployed contract.
   101  func NewCTokenCaller(address common.Address, caller bind.ContractCaller) (*CTokenCaller, error) {
   102  	contract, err := bindCToken(address, caller, nil, nil)
   103  	if err != nil {
   104  		return nil, err
   105  	}
   106  	return &CTokenCaller{contract: contract}, nil
   107  }
   108  
   109  // NewCTokenTransactor creates a new write-only instance of CToken, bound to a specific deployed contract.
   110  func NewCTokenTransactor(address common.Address, transactor bind.ContractTransactor) (*CTokenTransactor, error) {
   111  	contract, err := bindCToken(address, nil, transactor, nil)
   112  	if err != nil {
   113  		return nil, err
   114  	}
   115  	return &CTokenTransactor{contract: contract}, nil
   116  }
   117  
   118  // NewCTokenFilterer creates a new log filterer instance of CToken, bound to a specific deployed contract.
   119  func NewCTokenFilterer(address common.Address, filterer bind.ContractFilterer) (*CTokenFilterer, error) {
   120  	contract, err := bindCToken(address, nil, nil, filterer)
   121  	if err != nil {
   122  		return nil, err
   123  	}
   124  	return &CTokenFilterer{contract: contract}, nil
   125  }
   126  
   127  // bindCToken binds a generic wrapper to an already deployed contract.
   128  func bindCToken(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   129  	parsed, err := abi.JSON(strings.NewReader(CTokenABI))
   130  	if err != nil {
   131  		return nil, err
   132  	}
   133  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   134  }
   135  
   136  // Call invokes the (constant) contract method with params as input values and
   137  // sets the output to result. The result type might be a single field for simple
   138  // returns, a slice of interfaces for anonymous returns and a struct for named
   139  // returns.
   140  func (_CToken *CTokenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   141  	return _CToken.Contract.CTokenCaller.contract.Call(opts, result, method, params...)
   142  }
   143  
   144  // Transfer initiates a plain transaction to move funds to the contract, calling
   145  // its default method if one is available.
   146  func (_CToken *CTokenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   147  	return _CToken.Contract.CTokenTransactor.contract.Transfer(opts)
   148  }
   149  
   150  // Transact invokes the (paid) contract method with params as input values.
   151  func (_CToken *CTokenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   152  	return _CToken.Contract.CTokenTransactor.contract.Transact(opts, method, params...)
   153  }
   154  
   155  // Call invokes the (constant) contract method with params as input values and
   156  // sets the output to result. The result type might be a single field for simple
   157  // returns, a slice of interfaces for anonymous returns and a struct for named
   158  // returns.
   159  func (_CToken *CTokenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   160  	return _CToken.Contract.contract.Call(opts, result, method, params...)
   161  }
   162  
   163  // Transfer initiates a plain transaction to move funds to the contract, calling
   164  // its default method if one is available.
   165  func (_CToken *CTokenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   166  	return _CToken.Contract.contract.Transfer(opts)
   167  }
   168  
   169  // Transact invokes the (paid) contract method with params as input values.
   170  func (_CToken *CTokenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   171  	return _CToken.Contract.contract.Transact(opts, method, params...)
   172  }
   173  
   174  // AccrualBlockNumber is a free data retrieval call binding the contract method 0x6c540baf.
   175  //
   176  // Solidity: function accrualBlockNumber() view returns(uint256)
   177  func (_CToken *CTokenCaller) AccrualBlockNumber(opts *bind.CallOpts) (*big.Int, error) {
   178  	var out []interface{}
   179  	err := _CToken.contract.Call(opts, &out, "accrualBlockNumber")
   180  
   181  	if err != nil {
   182  		return *new(*big.Int), err
   183  	}
   184  
   185  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   186  
   187  	return out0, err
   188  
   189  }
   190  
   191  // AccrualBlockNumber is a free data retrieval call binding the contract method 0x6c540baf.
   192  //
   193  // Solidity: function accrualBlockNumber() view returns(uint256)
   194  func (_CToken *CTokenSession) AccrualBlockNumber() (*big.Int, error) {
   195  	return _CToken.Contract.AccrualBlockNumber(&_CToken.CallOpts)
   196  }
   197  
   198  // AccrualBlockNumber is a free data retrieval call binding the contract method 0x6c540baf.
   199  //
   200  // Solidity: function accrualBlockNumber() view returns(uint256)
   201  func (_CToken *CTokenCallerSession) AccrualBlockNumber() (*big.Int, error) {
   202  	return _CToken.Contract.AccrualBlockNumber(&_CToken.CallOpts)
   203  }
   204  
   205  // Admin is a free data retrieval call binding the contract method 0xf851a440.
   206  //
   207  // Solidity: function admin() view returns(address)
   208  func (_CToken *CTokenCaller) Admin(opts *bind.CallOpts) (common.Address, error) {
   209  	var out []interface{}
   210  	err := _CToken.contract.Call(opts, &out, "admin")
   211  
   212  	if err != nil {
   213  		return *new(common.Address), err
   214  	}
   215  
   216  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   217  
   218  	return out0, err
   219  
   220  }
   221  
   222  // Admin is a free data retrieval call binding the contract method 0xf851a440.
   223  //
   224  // Solidity: function admin() view returns(address)
   225  func (_CToken *CTokenSession) Admin() (common.Address, error) {
   226  	return _CToken.Contract.Admin(&_CToken.CallOpts)
   227  }
   228  
   229  // Admin is a free data retrieval call binding the contract method 0xf851a440.
   230  //
   231  // Solidity: function admin() view returns(address)
   232  func (_CToken *CTokenCallerSession) Admin() (common.Address, error) {
   233  	return _CToken.Contract.Admin(&_CToken.CallOpts)
   234  }
   235  
   236  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   237  //
   238  // Solidity: function allowance(address owner, address spender) view returns(uint256)
   239  func (_CToken *CTokenCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
   240  	var out []interface{}
   241  	err := _CToken.contract.Call(opts, &out, "allowance", owner, spender)
   242  
   243  	if err != nil {
   244  		return *new(*big.Int), err
   245  	}
   246  
   247  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   248  
   249  	return out0, err
   250  
   251  }
   252  
   253  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   254  //
   255  // Solidity: function allowance(address owner, address spender) view returns(uint256)
   256  func (_CToken *CTokenSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
   257  	return _CToken.Contract.Allowance(&_CToken.CallOpts, owner, spender)
   258  }
   259  
   260  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   261  //
   262  // Solidity: function allowance(address owner, address spender) view returns(uint256)
   263  func (_CToken *CTokenCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
   264  	return _CToken.Contract.Allowance(&_CToken.CallOpts, owner, spender)
   265  }
   266  
   267  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   268  //
   269  // Solidity: function balanceOf(address owner) view returns(uint256)
   270  func (_CToken *CTokenCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
   271  	var out []interface{}
   272  	err := _CToken.contract.Call(opts, &out, "balanceOf", owner)
   273  
   274  	if err != nil {
   275  		return *new(*big.Int), err
   276  	}
   277  
   278  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   279  
   280  	return out0, err
   281  
   282  }
   283  
   284  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   285  //
   286  // Solidity: function balanceOf(address owner) view returns(uint256)
   287  func (_CToken *CTokenSession) BalanceOf(owner common.Address) (*big.Int, error) {
   288  	return _CToken.Contract.BalanceOf(&_CToken.CallOpts, owner)
   289  }
   290  
   291  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   292  //
   293  // Solidity: function balanceOf(address owner) view returns(uint256)
   294  func (_CToken *CTokenCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
   295  	return _CToken.Contract.BalanceOf(&_CToken.CallOpts, owner)
   296  }
   297  
   298  // BorrowBalanceStored is a free data retrieval call binding the contract method 0x95dd9193.
   299  //
   300  // Solidity: function borrowBalanceStored(address account) view returns(uint256)
   301  func (_CToken *CTokenCaller) BorrowBalanceStored(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
   302  	var out []interface{}
   303  	err := _CToken.contract.Call(opts, &out, "borrowBalanceStored", account)
   304  
   305  	if err != nil {
   306  		return *new(*big.Int), err
   307  	}
   308  
   309  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   310  
   311  	return out0, err
   312  
   313  }
   314  
   315  // BorrowBalanceStored is a free data retrieval call binding the contract method 0x95dd9193.
   316  //
   317  // Solidity: function borrowBalanceStored(address account) view returns(uint256)
   318  func (_CToken *CTokenSession) BorrowBalanceStored(account common.Address) (*big.Int, error) {
   319  	return _CToken.Contract.BorrowBalanceStored(&_CToken.CallOpts, account)
   320  }
   321  
   322  // BorrowBalanceStored is a free data retrieval call binding the contract method 0x95dd9193.
   323  //
   324  // Solidity: function borrowBalanceStored(address account) view returns(uint256)
   325  func (_CToken *CTokenCallerSession) BorrowBalanceStored(account common.Address) (*big.Int, error) {
   326  	return _CToken.Contract.BorrowBalanceStored(&_CToken.CallOpts, account)
   327  }
   328  
   329  // BorrowIndex is a free data retrieval call binding the contract method 0xaa5af0fd.
   330  //
   331  // Solidity: function borrowIndex() view returns(uint256)
   332  func (_CToken *CTokenCaller) BorrowIndex(opts *bind.CallOpts) (*big.Int, error) {
   333  	var out []interface{}
   334  	err := _CToken.contract.Call(opts, &out, "borrowIndex")
   335  
   336  	if err != nil {
   337  		return *new(*big.Int), err
   338  	}
   339  
   340  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   341  
   342  	return out0, err
   343  
   344  }
   345  
   346  // BorrowIndex is a free data retrieval call binding the contract method 0xaa5af0fd.
   347  //
   348  // Solidity: function borrowIndex() view returns(uint256)
   349  func (_CToken *CTokenSession) BorrowIndex() (*big.Int, error) {
   350  	return _CToken.Contract.BorrowIndex(&_CToken.CallOpts)
   351  }
   352  
   353  // BorrowIndex is a free data retrieval call binding the contract method 0xaa5af0fd.
   354  //
   355  // Solidity: function borrowIndex() view returns(uint256)
   356  func (_CToken *CTokenCallerSession) BorrowIndex() (*big.Int, error) {
   357  	return _CToken.Contract.BorrowIndex(&_CToken.CallOpts)
   358  }
   359  
   360  // BorrowRatePerBlock is a free data retrieval call binding the contract method 0xf8f9da28.
   361  //
   362  // Solidity: function borrowRatePerBlock() view returns(uint256)
   363  func (_CToken *CTokenCaller) BorrowRatePerBlock(opts *bind.CallOpts) (*big.Int, error) {
   364  	var out []interface{}
   365  	err := _CToken.contract.Call(opts, &out, "borrowRatePerBlock")
   366  
   367  	if err != nil {
   368  		return *new(*big.Int), err
   369  	}
   370  
   371  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   372  
   373  	return out0, err
   374  
   375  }
   376  
   377  // BorrowRatePerBlock is a free data retrieval call binding the contract method 0xf8f9da28.
   378  //
   379  // Solidity: function borrowRatePerBlock() view returns(uint256)
   380  func (_CToken *CTokenSession) BorrowRatePerBlock() (*big.Int, error) {
   381  	return _CToken.Contract.BorrowRatePerBlock(&_CToken.CallOpts)
   382  }
   383  
   384  // BorrowRatePerBlock is a free data retrieval call binding the contract method 0xf8f9da28.
   385  //
   386  // Solidity: function borrowRatePerBlock() view returns(uint256)
   387  func (_CToken *CTokenCallerSession) BorrowRatePerBlock() (*big.Int, error) {
   388  	return _CToken.Contract.BorrowRatePerBlock(&_CToken.CallOpts)
   389  }
   390  
   391  // Comptroller is a free data retrieval call binding the contract method 0x5fe3b567.
   392  //
   393  // Solidity: function comptroller() view returns(address)
   394  func (_CToken *CTokenCaller) Comptroller(opts *bind.CallOpts) (common.Address, error) {
   395  	var out []interface{}
   396  	err := _CToken.contract.Call(opts, &out, "comptroller")
   397  
   398  	if err != nil {
   399  		return *new(common.Address), err
   400  	}
   401  
   402  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   403  
   404  	return out0, err
   405  
   406  }
   407  
   408  // Comptroller is a free data retrieval call binding the contract method 0x5fe3b567.
   409  //
   410  // Solidity: function comptroller() view returns(address)
   411  func (_CToken *CTokenSession) Comptroller() (common.Address, error) {
   412  	return _CToken.Contract.Comptroller(&_CToken.CallOpts)
   413  }
   414  
   415  // Comptroller is a free data retrieval call binding the contract method 0x5fe3b567.
   416  //
   417  // Solidity: function comptroller() view returns(address)
   418  func (_CToken *CTokenCallerSession) Comptroller() (common.Address, error) {
   419  	return _CToken.Contract.Comptroller(&_CToken.CallOpts)
   420  }
   421  
   422  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
   423  //
   424  // Solidity: function decimals() view returns(uint8)
   425  func (_CToken *CTokenCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
   426  	var out []interface{}
   427  	err := _CToken.contract.Call(opts, &out, "decimals")
   428  
   429  	if err != nil {
   430  		return *new(uint8), err
   431  	}
   432  
   433  	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
   434  
   435  	return out0, err
   436  
   437  }
   438  
   439  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
   440  //
   441  // Solidity: function decimals() view returns(uint8)
   442  func (_CToken *CTokenSession) Decimals() (uint8, error) {
   443  	return _CToken.Contract.Decimals(&_CToken.CallOpts)
   444  }
   445  
   446  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
   447  //
   448  // Solidity: function decimals() view returns(uint8)
   449  func (_CToken *CTokenCallerSession) Decimals() (uint8, error) {
   450  	return _CToken.Contract.Decimals(&_CToken.CallOpts)
   451  }
   452  
   453  // DelegateToViewImplementation is a free data retrieval call binding the contract method 0x4487152f.
   454  //
   455  // Solidity: function delegateToViewImplementation(bytes data) view returns(bytes)
   456  func (_CToken *CTokenCaller) DelegateToViewImplementation(opts *bind.CallOpts, data []byte) ([]byte, error) {
   457  	var out []interface{}
   458  	err := _CToken.contract.Call(opts, &out, "delegateToViewImplementation", data)
   459  
   460  	if err != nil {
   461  		return *new([]byte), err
   462  	}
   463  
   464  	out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte)
   465  
   466  	return out0, err
   467  
   468  }
   469  
   470  // DelegateToViewImplementation is a free data retrieval call binding the contract method 0x4487152f.
   471  //
   472  // Solidity: function delegateToViewImplementation(bytes data) view returns(bytes)
   473  func (_CToken *CTokenSession) DelegateToViewImplementation(data []byte) ([]byte, error) {
   474  	return _CToken.Contract.DelegateToViewImplementation(&_CToken.CallOpts, data)
   475  }
   476  
   477  // DelegateToViewImplementation is a free data retrieval call binding the contract method 0x4487152f.
   478  //
   479  // Solidity: function delegateToViewImplementation(bytes data) view returns(bytes)
   480  func (_CToken *CTokenCallerSession) DelegateToViewImplementation(data []byte) ([]byte, error) {
   481  	return _CToken.Contract.DelegateToViewImplementation(&_CToken.CallOpts, data)
   482  }
   483  
   484  // ExchangeRateStored is a free data retrieval call binding the contract method 0x182df0f5.
   485  //
   486  // Solidity: function exchangeRateStored() view returns(uint256)
   487  func (_CToken *CTokenCaller) ExchangeRateStored(opts *bind.CallOpts) (*big.Int, error) {
   488  	var out []interface{}
   489  	err := _CToken.contract.Call(opts, &out, "exchangeRateStored")
   490  
   491  	if err != nil {
   492  		return *new(*big.Int), err
   493  	}
   494  
   495  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   496  
   497  	return out0, err
   498  
   499  }
   500  
   501  // ExchangeRateStored is a free data retrieval call binding the contract method 0x182df0f5.
   502  //
   503  // Solidity: function exchangeRateStored() view returns(uint256)
   504  func (_CToken *CTokenSession) ExchangeRateStored() (*big.Int, error) {
   505  	return _CToken.Contract.ExchangeRateStored(&_CToken.CallOpts)
   506  }
   507  
   508  // ExchangeRateStored is a free data retrieval call binding the contract method 0x182df0f5.
   509  //
   510  // Solidity: function exchangeRateStored() view returns(uint256)
   511  func (_CToken *CTokenCallerSession) ExchangeRateStored() (*big.Int, error) {
   512  	return _CToken.Contract.ExchangeRateStored(&_CToken.CallOpts)
   513  }
   514  
   515  // GetAccountSnapshot is a free data retrieval call binding the contract method 0xc37f68e2.
   516  //
   517  // Solidity: function getAccountSnapshot(address account) view returns(uint256, uint256, uint256, uint256)
   518  func (_CToken *CTokenCaller) GetAccountSnapshot(opts *bind.CallOpts, account common.Address) (*big.Int, *big.Int, *big.Int, *big.Int, error) {
   519  	var out []interface{}
   520  	err := _CToken.contract.Call(opts, &out, "getAccountSnapshot", account)
   521  
   522  	if err != nil {
   523  		return *new(*big.Int), *new(*big.Int), *new(*big.Int), *new(*big.Int), err
   524  	}
   525  
   526  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   527  	out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
   528  	out2 := *abi.ConvertType(out[2], new(*big.Int)).(**big.Int)
   529  	out3 := *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
   530  
   531  	return out0, out1, out2, out3, err
   532  
   533  }
   534  
   535  // GetAccountSnapshot is a free data retrieval call binding the contract method 0xc37f68e2.
   536  //
   537  // Solidity: function getAccountSnapshot(address account) view returns(uint256, uint256, uint256, uint256)
   538  func (_CToken *CTokenSession) GetAccountSnapshot(account common.Address) (*big.Int, *big.Int, *big.Int, *big.Int, error) {
   539  	return _CToken.Contract.GetAccountSnapshot(&_CToken.CallOpts, account)
   540  }
   541  
   542  // GetAccountSnapshot is a free data retrieval call binding the contract method 0xc37f68e2.
   543  //
   544  // Solidity: function getAccountSnapshot(address account) view returns(uint256, uint256, uint256, uint256)
   545  func (_CToken *CTokenCallerSession) GetAccountSnapshot(account common.Address) (*big.Int, *big.Int, *big.Int, *big.Int, error) {
   546  	return _CToken.Contract.GetAccountSnapshot(&_CToken.CallOpts, account)
   547  }
   548  
   549  // GetCash is a free data retrieval call binding the contract method 0x3b1d21a2.
   550  //
   551  // Solidity: function getCash() view returns(uint256)
   552  func (_CToken *CTokenCaller) GetCash(opts *bind.CallOpts) (*big.Int, error) {
   553  	var out []interface{}
   554  	err := _CToken.contract.Call(opts, &out, "getCash")
   555  
   556  	if err != nil {
   557  		return *new(*big.Int), err
   558  	}
   559  
   560  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   561  
   562  	return out0, err
   563  
   564  }
   565  
   566  // GetCash is a free data retrieval call binding the contract method 0x3b1d21a2.
   567  //
   568  // Solidity: function getCash() view returns(uint256)
   569  func (_CToken *CTokenSession) GetCash() (*big.Int, error) {
   570  	return _CToken.Contract.GetCash(&_CToken.CallOpts)
   571  }
   572  
   573  // GetCash is a free data retrieval call binding the contract method 0x3b1d21a2.
   574  //
   575  // Solidity: function getCash() view returns(uint256)
   576  func (_CToken *CTokenCallerSession) GetCash() (*big.Int, error) {
   577  	return _CToken.Contract.GetCash(&_CToken.CallOpts)
   578  }
   579  
   580  // Implementation is a free data retrieval call binding the contract method 0x5c60da1b.
   581  //
   582  // Solidity: function implementation() view returns(address)
   583  func (_CToken *CTokenCaller) Implementation(opts *bind.CallOpts) (common.Address, error) {
   584  	var out []interface{}
   585  	err := _CToken.contract.Call(opts, &out, "implementation")
   586  
   587  	if err != nil {
   588  		return *new(common.Address), err
   589  	}
   590  
   591  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   592  
   593  	return out0, err
   594  
   595  }
   596  
   597  // Implementation is a free data retrieval call binding the contract method 0x5c60da1b.
   598  //
   599  // Solidity: function implementation() view returns(address)
   600  func (_CToken *CTokenSession) Implementation() (common.Address, error) {
   601  	return _CToken.Contract.Implementation(&_CToken.CallOpts)
   602  }
   603  
   604  // Implementation is a free data retrieval call binding the contract method 0x5c60da1b.
   605  //
   606  // Solidity: function implementation() view returns(address)
   607  func (_CToken *CTokenCallerSession) Implementation() (common.Address, error) {
   608  	return _CToken.Contract.Implementation(&_CToken.CallOpts)
   609  }
   610  
   611  // InterestRateModel is a free data retrieval call binding the contract method 0xf3fdb15a.
   612  //
   613  // Solidity: function interestRateModel() view returns(address)
   614  func (_CToken *CTokenCaller) InterestRateModel(opts *bind.CallOpts) (common.Address, error) {
   615  	var out []interface{}
   616  	err := _CToken.contract.Call(opts, &out, "interestRateModel")
   617  
   618  	if err != nil {
   619  		return *new(common.Address), err
   620  	}
   621  
   622  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   623  
   624  	return out0, err
   625  
   626  }
   627  
   628  // InterestRateModel is a free data retrieval call binding the contract method 0xf3fdb15a.
   629  //
   630  // Solidity: function interestRateModel() view returns(address)
   631  func (_CToken *CTokenSession) InterestRateModel() (common.Address, error) {
   632  	return _CToken.Contract.InterestRateModel(&_CToken.CallOpts)
   633  }
   634  
   635  // InterestRateModel is a free data retrieval call binding the contract method 0xf3fdb15a.
   636  //
   637  // Solidity: function interestRateModel() view returns(address)
   638  func (_CToken *CTokenCallerSession) InterestRateModel() (common.Address, error) {
   639  	return _CToken.Contract.InterestRateModel(&_CToken.CallOpts)
   640  }
   641  
   642  // IsCToken is a free data retrieval call binding the contract method 0xfe9c44ae.
   643  //
   644  // Solidity: function isCToken() view returns(bool)
   645  func (_CToken *CTokenCaller) IsCToken(opts *bind.CallOpts) (bool, error) {
   646  	var out []interface{}
   647  	err := _CToken.contract.Call(opts, &out, "isCToken")
   648  
   649  	if err != nil {
   650  		return *new(bool), err
   651  	}
   652  
   653  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
   654  
   655  	return out0, err
   656  
   657  }
   658  
   659  // IsCToken is a free data retrieval call binding the contract method 0xfe9c44ae.
   660  //
   661  // Solidity: function isCToken() view returns(bool)
   662  func (_CToken *CTokenSession) IsCToken() (bool, error) {
   663  	return _CToken.Contract.IsCToken(&_CToken.CallOpts)
   664  }
   665  
   666  // IsCToken is a free data retrieval call binding the contract method 0xfe9c44ae.
   667  //
   668  // Solidity: function isCToken() view returns(bool)
   669  func (_CToken *CTokenCallerSession) IsCToken() (bool, error) {
   670  	return _CToken.Contract.IsCToken(&_CToken.CallOpts)
   671  }
   672  
   673  // Name is a free data retrieval call binding the contract method 0x06fdde03.
   674  //
   675  // Solidity: function name() view returns(string)
   676  func (_CToken *CTokenCaller) Name(opts *bind.CallOpts) (string, error) {
   677  	var out []interface{}
   678  	err := _CToken.contract.Call(opts, &out, "name")
   679  
   680  	if err != nil {
   681  		return *new(string), err
   682  	}
   683  
   684  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
   685  
   686  	return out0, err
   687  
   688  }
   689  
   690  // Name is a free data retrieval call binding the contract method 0x06fdde03.
   691  //
   692  // Solidity: function name() view returns(string)
   693  func (_CToken *CTokenSession) Name() (string, error) {
   694  	return _CToken.Contract.Name(&_CToken.CallOpts)
   695  }
   696  
   697  // Name is a free data retrieval call binding the contract method 0x06fdde03.
   698  //
   699  // Solidity: function name() view returns(string)
   700  func (_CToken *CTokenCallerSession) Name() (string, error) {
   701  	return _CToken.Contract.Name(&_CToken.CallOpts)
   702  }
   703  
   704  // PendingAdmin is a free data retrieval call binding the contract method 0x26782247.
   705  //
   706  // Solidity: function pendingAdmin() view returns(address)
   707  func (_CToken *CTokenCaller) PendingAdmin(opts *bind.CallOpts) (common.Address, error) {
   708  	var out []interface{}
   709  	err := _CToken.contract.Call(opts, &out, "pendingAdmin")
   710  
   711  	if err != nil {
   712  		return *new(common.Address), err
   713  	}
   714  
   715  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   716  
   717  	return out0, err
   718  
   719  }
   720  
   721  // PendingAdmin is a free data retrieval call binding the contract method 0x26782247.
   722  //
   723  // Solidity: function pendingAdmin() view returns(address)
   724  func (_CToken *CTokenSession) PendingAdmin() (common.Address, error) {
   725  	return _CToken.Contract.PendingAdmin(&_CToken.CallOpts)
   726  }
   727  
   728  // PendingAdmin is a free data retrieval call binding the contract method 0x26782247.
   729  //
   730  // Solidity: function pendingAdmin() view returns(address)
   731  func (_CToken *CTokenCallerSession) PendingAdmin() (common.Address, error) {
   732  	return _CToken.Contract.PendingAdmin(&_CToken.CallOpts)
   733  }
   734  
   735  // ReserveFactorMantissa is a free data retrieval call binding the contract method 0x173b9904.
   736  //
   737  // Solidity: function reserveFactorMantissa() view returns(uint256)
   738  func (_CToken *CTokenCaller) ReserveFactorMantissa(opts *bind.CallOpts) (*big.Int, error) {
   739  	var out []interface{}
   740  	err := _CToken.contract.Call(opts, &out, "reserveFactorMantissa")
   741  
   742  	if err != nil {
   743  		return *new(*big.Int), err
   744  	}
   745  
   746  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   747  
   748  	return out0, err
   749  
   750  }
   751  
   752  // ReserveFactorMantissa is a free data retrieval call binding the contract method 0x173b9904.
   753  //
   754  // Solidity: function reserveFactorMantissa() view returns(uint256)
   755  func (_CToken *CTokenSession) ReserveFactorMantissa() (*big.Int, error) {
   756  	return _CToken.Contract.ReserveFactorMantissa(&_CToken.CallOpts)
   757  }
   758  
   759  // ReserveFactorMantissa is a free data retrieval call binding the contract method 0x173b9904.
   760  //
   761  // Solidity: function reserveFactorMantissa() view returns(uint256)
   762  func (_CToken *CTokenCallerSession) ReserveFactorMantissa() (*big.Int, error) {
   763  	return _CToken.Contract.ReserveFactorMantissa(&_CToken.CallOpts)
   764  }
   765  
   766  // SupplyRatePerBlock is a free data retrieval call binding the contract method 0xae9d70b0.
   767  //
   768  // Solidity: function supplyRatePerBlock() view returns(uint256)
   769  func (_CToken *CTokenCaller) SupplyRatePerBlock(opts *bind.CallOpts) (*big.Int, error) {
   770  	var out []interface{}
   771  	err := _CToken.contract.Call(opts, &out, "supplyRatePerBlock")
   772  
   773  	if err != nil {
   774  		return *new(*big.Int), err
   775  	}
   776  
   777  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   778  
   779  	return out0, err
   780  
   781  }
   782  
   783  // SupplyRatePerBlock is a free data retrieval call binding the contract method 0xae9d70b0.
   784  //
   785  // Solidity: function supplyRatePerBlock() view returns(uint256)
   786  func (_CToken *CTokenSession) SupplyRatePerBlock() (*big.Int, error) {
   787  	return _CToken.Contract.SupplyRatePerBlock(&_CToken.CallOpts)
   788  }
   789  
   790  // SupplyRatePerBlock is a free data retrieval call binding the contract method 0xae9d70b0.
   791  //
   792  // Solidity: function supplyRatePerBlock() view returns(uint256)
   793  func (_CToken *CTokenCallerSession) SupplyRatePerBlock() (*big.Int, error) {
   794  	return _CToken.Contract.SupplyRatePerBlock(&_CToken.CallOpts)
   795  }
   796  
   797  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
   798  //
   799  // Solidity: function symbol() view returns(string)
   800  func (_CToken *CTokenCaller) Symbol(opts *bind.CallOpts) (string, error) {
   801  	var out []interface{}
   802  	err := _CToken.contract.Call(opts, &out, "symbol")
   803  
   804  	if err != nil {
   805  		return *new(string), err
   806  	}
   807  
   808  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
   809  
   810  	return out0, err
   811  
   812  }
   813  
   814  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
   815  //
   816  // Solidity: function symbol() view returns(string)
   817  func (_CToken *CTokenSession) Symbol() (string, error) {
   818  	return _CToken.Contract.Symbol(&_CToken.CallOpts)
   819  }
   820  
   821  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
   822  //
   823  // Solidity: function symbol() view returns(string)
   824  func (_CToken *CTokenCallerSession) Symbol() (string, error) {
   825  	return _CToken.Contract.Symbol(&_CToken.CallOpts)
   826  }
   827  
   828  // TotalBorrows is a free data retrieval call binding the contract method 0x47bd3718.
   829  //
   830  // Solidity: function totalBorrows() view returns(uint256)
   831  func (_CToken *CTokenCaller) TotalBorrows(opts *bind.CallOpts) (*big.Int, error) {
   832  	var out []interface{}
   833  	err := _CToken.contract.Call(opts, &out, "totalBorrows")
   834  
   835  	if err != nil {
   836  		return *new(*big.Int), err
   837  	}
   838  
   839  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   840  
   841  	return out0, err
   842  
   843  }
   844  
   845  // TotalBorrows is a free data retrieval call binding the contract method 0x47bd3718.
   846  //
   847  // Solidity: function totalBorrows() view returns(uint256)
   848  func (_CToken *CTokenSession) TotalBorrows() (*big.Int, error) {
   849  	return _CToken.Contract.TotalBorrows(&_CToken.CallOpts)
   850  }
   851  
   852  // TotalBorrows is a free data retrieval call binding the contract method 0x47bd3718.
   853  //
   854  // Solidity: function totalBorrows() view returns(uint256)
   855  func (_CToken *CTokenCallerSession) TotalBorrows() (*big.Int, error) {
   856  	return _CToken.Contract.TotalBorrows(&_CToken.CallOpts)
   857  }
   858  
   859  // TotalReserves is a free data retrieval call binding the contract method 0x8f840ddd.
   860  //
   861  // Solidity: function totalReserves() view returns(uint256)
   862  func (_CToken *CTokenCaller) TotalReserves(opts *bind.CallOpts) (*big.Int, error) {
   863  	var out []interface{}
   864  	err := _CToken.contract.Call(opts, &out, "totalReserves")
   865  
   866  	if err != nil {
   867  		return *new(*big.Int), err
   868  	}
   869  
   870  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   871  
   872  	return out0, err
   873  
   874  }
   875  
   876  // TotalReserves is a free data retrieval call binding the contract method 0x8f840ddd.
   877  //
   878  // Solidity: function totalReserves() view returns(uint256)
   879  func (_CToken *CTokenSession) TotalReserves() (*big.Int, error) {
   880  	return _CToken.Contract.TotalReserves(&_CToken.CallOpts)
   881  }
   882  
   883  // TotalReserves is a free data retrieval call binding the contract method 0x8f840ddd.
   884  //
   885  // Solidity: function totalReserves() view returns(uint256)
   886  func (_CToken *CTokenCallerSession) TotalReserves() (*big.Int, error) {
   887  	return _CToken.Contract.TotalReserves(&_CToken.CallOpts)
   888  }
   889  
   890  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
   891  //
   892  // Solidity: function totalSupply() view returns(uint256)
   893  func (_CToken *CTokenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
   894  	var out []interface{}
   895  	err := _CToken.contract.Call(opts, &out, "totalSupply")
   896  
   897  	if err != nil {
   898  		return *new(*big.Int), err
   899  	}
   900  
   901  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   902  
   903  	return out0, err
   904  
   905  }
   906  
   907  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
   908  //
   909  // Solidity: function totalSupply() view returns(uint256)
   910  func (_CToken *CTokenSession) TotalSupply() (*big.Int, error) {
   911  	return _CToken.Contract.TotalSupply(&_CToken.CallOpts)
   912  }
   913  
   914  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
   915  //
   916  // Solidity: function totalSupply() view returns(uint256)
   917  func (_CToken *CTokenCallerSession) TotalSupply() (*big.Int, error) {
   918  	return _CToken.Contract.TotalSupply(&_CToken.CallOpts)
   919  }
   920  
   921  // Underlying is a free data retrieval call binding the contract method 0x6f307dc3.
   922  //
   923  // Solidity: function underlying() view returns(address)
   924  func (_CToken *CTokenCaller) Underlying(opts *bind.CallOpts) (common.Address, error) {
   925  	var out []interface{}
   926  	err := _CToken.contract.Call(opts, &out, "underlying")
   927  
   928  	if err != nil {
   929  		return *new(common.Address), err
   930  	}
   931  
   932  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   933  
   934  	return out0, err
   935  
   936  }
   937  
   938  // Underlying is a free data retrieval call binding the contract method 0x6f307dc3.
   939  //
   940  // Solidity: function underlying() view returns(address)
   941  func (_CToken *CTokenSession) Underlying() (common.Address, error) {
   942  	return _CToken.Contract.Underlying(&_CToken.CallOpts)
   943  }
   944  
   945  // Underlying is a free data retrieval call binding the contract method 0x6f307dc3.
   946  //
   947  // Solidity: function underlying() view returns(address)
   948  func (_CToken *CTokenCallerSession) Underlying() (common.Address, error) {
   949  	return _CToken.Contract.Underlying(&_CToken.CallOpts)
   950  }
   951  
   952  // AcceptAdmin is a paid mutator transaction binding the contract method 0xe9c714f2.
   953  //
   954  // Solidity: function _acceptAdmin() returns(uint256)
   955  func (_CToken *CTokenTransactor) AcceptAdmin(opts *bind.TransactOpts) (*types.Transaction, error) {
   956  	return _CToken.contract.Transact(opts, "_acceptAdmin")
   957  }
   958  
   959  // AcceptAdmin is a paid mutator transaction binding the contract method 0xe9c714f2.
   960  //
   961  // Solidity: function _acceptAdmin() returns(uint256)
   962  func (_CToken *CTokenSession) AcceptAdmin() (*types.Transaction, error) {
   963  	return _CToken.Contract.AcceptAdmin(&_CToken.TransactOpts)
   964  }
   965  
   966  // AcceptAdmin is a paid mutator transaction binding the contract method 0xe9c714f2.
   967  //
   968  // Solidity: function _acceptAdmin() returns(uint256)
   969  func (_CToken *CTokenTransactorSession) AcceptAdmin() (*types.Transaction, error) {
   970  	return _CToken.Contract.AcceptAdmin(&_CToken.TransactOpts)
   971  }
   972  
   973  // AddReserves is a paid mutator transaction binding the contract method 0x3e941010.
   974  //
   975  // Solidity: function _addReserves(uint256 addAmount) returns(uint256)
   976  func (_CToken *CTokenTransactor) AddReserves(opts *bind.TransactOpts, addAmount *big.Int) (*types.Transaction, error) {
   977  	return _CToken.contract.Transact(opts, "_addReserves", addAmount)
   978  }
   979  
   980  // AddReserves is a paid mutator transaction binding the contract method 0x3e941010.
   981  //
   982  // Solidity: function _addReserves(uint256 addAmount) returns(uint256)
   983  func (_CToken *CTokenSession) AddReserves(addAmount *big.Int) (*types.Transaction, error) {
   984  	return _CToken.Contract.AddReserves(&_CToken.TransactOpts, addAmount)
   985  }
   986  
   987  // AddReserves is a paid mutator transaction binding the contract method 0x3e941010.
   988  //
   989  // Solidity: function _addReserves(uint256 addAmount) returns(uint256)
   990  func (_CToken *CTokenTransactorSession) AddReserves(addAmount *big.Int) (*types.Transaction, error) {
   991  	return _CToken.Contract.AddReserves(&_CToken.TransactOpts, addAmount)
   992  }
   993  
   994  // ReduceReserves is a paid mutator transaction binding the contract method 0x601a0bf1.
   995  //
   996  // Solidity: function _reduceReserves(uint256 reduceAmount) returns(uint256)
   997  func (_CToken *CTokenTransactor) ReduceReserves(opts *bind.TransactOpts, reduceAmount *big.Int) (*types.Transaction, error) {
   998  	return _CToken.contract.Transact(opts, "_reduceReserves", reduceAmount)
   999  }
  1000  
  1001  // ReduceReserves is a paid mutator transaction binding the contract method 0x601a0bf1.
  1002  //
  1003  // Solidity: function _reduceReserves(uint256 reduceAmount) returns(uint256)
  1004  func (_CToken *CTokenSession) ReduceReserves(reduceAmount *big.Int) (*types.Transaction, error) {
  1005  	return _CToken.Contract.ReduceReserves(&_CToken.TransactOpts, reduceAmount)
  1006  }
  1007  
  1008  // ReduceReserves is a paid mutator transaction binding the contract method 0x601a0bf1.
  1009  //
  1010  // Solidity: function _reduceReserves(uint256 reduceAmount) returns(uint256)
  1011  func (_CToken *CTokenTransactorSession) ReduceReserves(reduceAmount *big.Int) (*types.Transaction, error) {
  1012  	return _CToken.Contract.ReduceReserves(&_CToken.TransactOpts, reduceAmount)
  1013  }
  1014  
  1015  // SetComptroller is a paid mutator transaction binding the contract method 0x4576b5db.
  1016  //
  1017  // Solidity: function _setComptroller(address newComptroller) returns(uint256)
  1018  func (_CToken *CTokenTransactor) SetComptroller(opts *bind.TransactOpts, newComptroller common.Address) (*types.Transaction, error) {
  1019  	return _CToken.contract.Transact(opts, "_setComptroller", newComptroller)
  1020  }
  1021  
  1022  // SetComptroller is a paid mutator transaction binding the contract method 0x4576b5db.
  1023  //
  1024  // Solidity: function _setComptroller(address newComptroller) returns(uint256)
  1025  func (_CToken *CTokenSession) SetComptroller(newComptroller common.Address) (*types.Transaction, error) {
  1026  	return _CToken.Contract.SetComptroller(&_CToken.TransactOpts, newComptroller)
  1027  }
  1028  
  1029  // SetComptroller is a paid mutator transaction binding the contract method 0x4576b5db.
  1030  //
  1031  // Solidity: function _setComptroller(address newComptroller) returns(uint256)
  1032  func (_CToken *CTokenTransactorSession) SetComptroller(newComptroller common.Address) (*types.Transaction, error) {
  1033  	return _CToken.Contract.SetComptroller(&_CToken.TransactOpts, newComptroller)
  1034  }
  1035  
  1036  // SetImplementation is a paid mutator transaction binding the contract method 0x555bcc40.
  1037  //
  1038  // Solidity: function _setImplementation(address implementation_, bool allowResign, bytes becomeImplementationData) returns()
  1039  func (_CToken *CTokenTransactor) SetImplementation(opts *bind.TransactOpts, implementation_ common.Address, allowResign bool, becomeImplementationData []byte) (*types.Transaction, error) {
  1040  	return _CToken.contract.Transact(opts, "_setImplementation", implementation_, allowResign, becomeImplementationData)
  1041  }
  1042  
  1043  // SetImplementation is a paid mutator transaction binding the contract method 0x555bcc40.
  1044  //
  1045  // Solidity: function _setImplementation(address implementation_, bool allowResign, bytes becomeImplementationData) returns()
  1046  func (_CToken *CTokenSession) SetImplementation(implementation_ common.Address, allowResign bool, becomeImplementationData []byte) (*types.Transaction, error) {
  1047  	return _CToken.Contract.SetImplementation(&_CToken.TransactOpts, implementation_, allowResign, becomeImplementationData)
  1048  }
  1049  
  1050  // SetImplementation is a paid mutator transaction binding the contract method 0x555bcc40.
  1051  //
  1052  // Solidity: function _setImplementation(address implementation_, bool allowResign, bytes becomeImplementationData) returns()
  1053  func (_CToken *CTokenTransactorSession) SetImplementation(implementation_ common.Address, allowResign bool, becomeImplementationData []byte) (*types.Transaction, error) {
  1054  	return _CToken.Contract.SetImplementation(&_CToken.TransactOpts, implementation_, allowResign, becomeImplementationData)
  1055  }
  1056  
  1057  // SetInterestRateModel is a paid mutator transaction binding the contract method 0xf2b3abbd.
  1058  //
  1059  // Solidity: function _setInterestRateModel(address newInterestRateModel) returns(uint256)
  1060  func (_CToken *CTokenTransactor) SetInterestRateModel(opts *bind.TransactOpts, newInterestRateModel common.Address) (*types.Transaction, error) {
  1061  	return _CToken.contract.Transact(opts, "_setInterestRateModel", newInterestRateModel)
  1062  }
  1063  
  1064  // SetInterestRateModel is a paid mutator transaction binding the contract method 0xf2b3abbd.
  1065  //
  1066  // Solidity: function _setInterestRateModel(address newInterestRateModel) returns(uint256)
  1067  func (_CToken *CTokenSession) SetInterestRateModel(newInterestRateModel common.Address) (*types.Transaction, error) {
  1068  	return _CToken.Contract.SetInterestRateModel(&_CToken.TransactOpts, newInterestRateModel)
  1069  }
  1070  
  1071  // SetInterestRateModel is a paid mutator transaction binding the contract method 0xf2b3abbd.
  1072  //
  1073  // Solidity: function _setInterestRateModel(address newInterestRateModel) returns(uint256)
  1074  func (_CToken *CTokenTransactorSession) SetInterestRateModel(newInterestRateModel common.Address) (*types.Transaction, error) {
  1075  	return _CToken.Contract.SetInterestRateModel(&_CToken.TransactOpts, newInterestRateModel)
  1076  }
  1077  
  1078  // SetPendingAdmin is a paid mutator transaction binding the contract method 0xb71d1a0c.
  1079  //
  1080  // Solidity: function _setPendingAdmin(address newPendingAdmin) returns(uint256)
  1081  func (_CToken *CTokenTransactor) SetPendingAdmin(opts *bind.TransactOpts, newPendingAdmin common.Address) (*types.Transaction, error) {
  1082  	return _CToken.contract.Transact(opts, "_setPendingAdmin", newPendingAdmin)
  1083  }
  1084  
  1085  // SetPendingAdmin is a paid mutator transaction binding the contract method 0xb71d1a0c.
  1086  //
  1087  // Solidity: function _setPendingAdmin(address newPendingAdmin) returns(uint256)
  1088  func (_CToken *CTokenSession) SetPendingAdmin(newPendingAdmin common.Address) (*types.Transaction, error) {
  1089  	return _CToken.Contract.SetPendingAdmin(&_CToken.TransactOpts, newPendingAdmin)
  1090  }
  1091  
  1092  // SetPendingAdmin is a paid mutator transaction binding the contract method 0xb71d1a0c.
  1093  //
  1094  // Solidity: function _setPendingAdmin(address newPendingAdmin) returns(uint256)
  1095  func (_CToken *CTokenTransactorSession) SetPendingAdmin(newPendingAdmin common.Address) (*types.Transaction, error) {
  1096  	return _CToken.Contract.SetPendingAdmin(&_CToken.TransactOpts, newPendingAdmin)
  1097  }
  1098  
  1099  // SetReserveFactor is a paid mutator transaction binding the contract method 0xfca7820b.
  1100  //
  1101  // Solidity: function _setReserveFactor(uint256 newReserveFactorMantissa) returns(uint256)
  1102  func (_CToken *CTokenTransactor) SetReserveFactor(opts *bind.TransactOpts, newReserveFactorMantissa *big.Int) (*types.Transaction, error) {
  1103  	return _CToken.contract.Transact(opts, "_setReserveFactor", newReserveFactorMantissa)
  1104  }
  1105  
  1106  // SetReserveFactor is a paid mutator transaction binding the contract method 0xfca7820b.
  1107  //
  1108  // Solidity: function _setReserveFactor(uint256 newReserveFactorMantissa) returns(uint256)
  1109  func (_CToken *CTokenSession) SetReserveFactor(newReserveFactorMantissa *big.Int) (*types.Transaction, error) {
  1110  	return _CToken.Contract.SetReserveFactor(&_CToken.TransactOpts, newReserveFactorMantissa)
  1111  }
  1112  
  1113  // SetReserveFactor is a paid mutator transaction binding the contract method 0xfca7820b.
  1114  //
  1115  // Solidity: function _setReserveFactor(uint256 newReserveFactorMantissa) returns(uint256)
  1116  func (_CToken *CTokenTransactorSession) SetReserveFactor(newReserveFactorMantissa *big.Int) (*types.Transaction, error) {
  1117  	return _CToken.Contract.SetReserveFactor(&_CToken.TransactOpts, newReserveFactorMantissa)
  1118  }
  1119  
  1120  // AccrueInterest is a paid mutator transaction binding the contract method 0xa6afed95.
  1121  //
  1122  // Solidity: function accrueInterest() returns(uint256)
  1123  func (_CToken *CTokenTransactor) AccrueInterest(opts *bind.TransactOpts) (*types.Transaction, error) {
  1124  	return _CToken.contract.Transact(opts, "accrueInterest")
  1125  }
  1126  
  1127  // AccrueInterest is a paid mutator transaction binding the contract method 0xa6afed95.
  1128  //
  1129  // Solidity: function accrueInterest() returns(uint256)
  1130  func (_CToken *CTokenSession) AccrueInterest() (*types.Transaction, error) {
  1131  	return _CToken.Contract.AccrueInterest(&_CToken.TransactOpts)
  1132  }
  1133  
  1134  // AccrueInterest is a paid mutator transaction binding the contract method 0xa6afed95.
  1135  //
  1136  // Solidity: function accrueInterest() returns(uint256)
  1137  func (_CToken *CTokenTransactorSession) AccrueInterest() (*types.Transaction, error) {
  1138  	return _CToken.Contract.AccrueInterest(&_CToken.TransactOpts)
  1139  }
  1140  
  1141  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1142  //
  1143  // Solidity: function approve(address spender, uint256 amount) returns(bool)
  1144  func (_CToken *CTokenTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) {
  1145  	return _CToken.contract.Transact(opts, "approve", spender, amount)
  1146  }
  1147  
  1148  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1149  //
  1150  // Solidity: function approve(address spender, uint256 amount) returns(bool)
  1151  func (_CToken *CTokenSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
  1152  	return _CToken.Contract.Approve(&_CToken.TransactOpts, spender, amount)
  1153  }
  1154  
  1155  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1156  //
  1157  // Solidity: function approve(address spender, uint256 amount) returns(bool)
  1158  func (_CToken *CTokenTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
  1159  	return _CToken.Contract.Approve(&_CToken.TransactOpts, spender, amount)
  1160  }
  1161  
  1162  // BalanceOfUnderlying is a paid mutator transaction binding the contract method 0x3af9e669.
  1163  //
  1164  // Solidity: function balanceOfUnderlying(address owner) returns(uint256)
  1165  func (_CToken *CTokenTransactor) BalanceOfUnderlying(opts *bind.TransactOpts, owner common.Address) (*types.Transaction, error) {
  1166  	return _CToken.contract.Transact(opts, "balanceOfUnderlying", owner)
  1167  }
  1168  
  1169  // BalanceOfUnderlying is a paid mutator transaction binding the contract method 0x3af9e669.
  1170  //
  1171  // Solidity: function balanceOfUnderlying(address owner) returns(uint256)
  1172  func (_CToken *CTokenSession) BalanceOfUnderlying(owner common.Address) (*types.Transaction, error) {
  1173  	return _CToken.Contract.BalanceOfUnderlying(&_CToken.TransactOpts, owner)
  1174  }
  1175  
  1176  // BalanceOfUnderlying is a paid mutator transaction binding the contract method 0x3af9e669.
  1177  //
  1178  // Solidity: function balanceOfUnderlying(address owner) returns(uint256)
  1179  func (_CToken *CTokenTransactorSession) BalanceOfUnderlying(owner common.Address) (*types.Transaction, error) {
  1180  	return _CToken.Contract.BalanceOfUnderlying(&_CToken.TransactOpts, owner)
  1181  }
  1182  
  1183  // Borrow is a paid mutator transaction binding the contract method 0xc5ebeaec.
  1184  //
  1185  // Solidity: function borrow(uint256 borrowAmount) returns(uint256)
  1186  func (_CToken *CTokenTransactor) Borrow(opts *bind.TransactOpts, borrowAmount *big.Int) (*types.Transaction, error) {
  1187  	return _CToken.contract.Transact(opts, "borrow", borrowAmount)
  1188  }
  1189  
  1190  // Borrow is a paid mutator transaction binding the contract method 0xc5ebeaec.
  1191  //
  1192  // Solidity: function borrow(uint256 borrowAmount) returns(uint256)
  1193  func (_CToken *CTokenSession) Borrow(borrowAmount *big.Int) (*types.Transaction, error) {
  1194  	return _CToken.Contract.Borrow(&_CToken.TransactOpts, borrowAmount)
  1195  }
  1196  
  1197  // Borrow is a paid mutator transaction binding the contract method 0xc5ebeaec.
  1198  //
  1199  // Solidity: function borrow(uint256 borrowAmount) returns(uint256)
  1200  func (_CToken *CTokenTransactorSession) Borrow(borrowAmount *big.Int) (*types.Transaction, error) {
  1201  	return _CToken.Contract.Borrow(&_CToken.TransactOpts, borrowAmount)
  1202  }
  1203  
  1204  // BorrowBalanceCurrent is a paid mutator transaction binding the contract method 0x17bfdfbc.
  1205  //
  1206  // Solidity: function borrowBalanceCurrent(address account) returns(uint256)
  1207  func (_CToken *CTokenTransactor) BorrowBalanceCurrent(opts *bind.TransactOpts, account common.Address) (*types.Transaction, error) {
  1208  	return _CToken.contract.Transact(opts, "borrowBalanceCurrent", account)
  1209  }
  1210  
  1211  // BorrowBalanceCurrent is a paid mutator transaction binding the contract method 0x17bfdfbc.
  1212  //
  1213  // Solidity: function borrowBalanceCurrent(address account) returns(uint256)
  1214  func (_CToken *CTokenSession) BorrowBalanceCurrent(account common.Address) (*types.Transaction, error) {
  1215  	return _CToken.Contract.BorrowBalanceCurrent(&_CToken.TransactOpts, account)
  1216  }
  1217  
  1218  // BorrowBalanceCurrent is a paid mutator transaction binding the contract method 0x17bfdfbc.
  1219  //
  1220  // Solidity: function borrowBalanceCurrent(address account) returns(uint256)
  1221  func (_CToken *CTokenTransactorSession) BorrowBalanceCurrent(account common.Address) (*types.Transaction, error) {
  1222  	return _CToken.Contract.BorrowBalanceCurrent(&_CToken.TransactOpts, account)
  1223  }
  1224  
  1225  // DelegateToImplementation is a paid mutator transaction binding the contract method 0x0933c1ed.
  1226  //
  1227  // Solidity: function delegateToImplementation(bytes data) returns(bytes)
  1228  func (_CToken *CTokenTransactor) DelegateToImplementation(opts *bind.TransactOpts, data []byte) (*types.Transaction, error) {
  1229  	return _CToken.contract.Transact(opts, "delegateToImplementation", data)
  1230  }
  1231  
  1232  // DelegateToImplementation is a paid mutator transaction binding the contract method 0x0933c1ed.
  1233  //
  1234  // Solidity: function delegateToImplementation(bytes data) returns(bytes)
  1235  func (_CToken *CTokenSession) DelegateToImplementation(data []byte) (*types.Transaction, error) {
  1236  	return _CToken.Contract.DelegateToImplementation(&_CToken.TransactOpts, data)
  1237  }
  1238  
  1239  // DelegateToImplementation is a paid mutator transaction binding the contract method 0x0933c1ed.
  1240  //
  1241  // Solidity: function delegateToImplementation(bytes data) returns(bytes)
  1242  func (_CToken *CTokenTransactorSession) DelegateToImplementation(data []byte) (*types.Transaction, error) {
  1243  	return _CToken.Contract.DelegateToImplementation(&_CToken.TransactOpts, data)
  1244  }
  1245  
  1246  // ExchangeRateCurrent is a paid mutator transaction binding the contract method 0xbd6d894d.
  1247  //
  1248  // Solidity: function exchangeRateCurrent() returns(uint256)
  1249  func (_CToken *CTokenTransactor) ExchangeRateCurrent(opts *bind.TransactOpts) (*types.Transaction, error) {
  1250  	return _CToken.contract.Transact(opts, "exchangeRateCurrent")
  1251  }
  1252  
  1253  // ExchangeRateCurrent is a paid mutator transaction binding the contract method 0xbd6d894d.
  1254  //
  1255  // Solidity: function exchangeRateCurrent() returns(uint256)
  1256  func (_CToken *CTokenSession) ExchangeRateCurrent() (*types.Transaction, error) {
  1257  	return _CToken.Contract.ExchangeRateCurrent(&_CToken.TransactOpts)
  1258  }
  1259  
  1260  // ExchangeRateCurrent is a paid mutator transaction binding the contract method 0xbd6d894d.
  1261  //
  1262  // Solidity: function exchangeRateCurrent() returns(uint256)
  1263  func (_CToken *CTokenTransactorSession) ExchangeRateCurrent() (*types.Transaction, error) {
  1264  	return _CToken.Contract.ExchangeRateCurrent(&_CToken.TransactOpts)
  1265  }
  1266  
  1267  // LiquidateBorrow is a paid mutator transaction binding the contract method 0xf5e3c462.
  1268  //
  1269  // Solidity: function liquidateBorrow(address borrower, uint256 repayAmount, address cTokenCollateral) returns(uint256)
  1270  func (_CToken *CTokenTransactor) LiquidateBorrow(opts *bind.TransactOpts, borrower common.Address, repayAmount *big.Int, cTokenCollateral common.Address) (*types.Transaction, error) {
  1271  	return _CToken.contract.Transact(opts, "liquidateBorrow", borrower, repayAmount, cTokenCollateral)
  1272  }
  1273  
  1274  // LiquidateBorrow is a paid mutator transaction binding the contract method 0xf5e3c462.
  1275  //
  1276  // Solidity: function liquidateBorrow(address borrower, uint256 repayAmount, address cTokenCollateral) returns(uint256)
  1277  func (_CToken *CTokenSession) LiquidateBorrow(borrower common.Address, repayAmount *big.Int, cTokenCollateral common.Address) (*types.Transaction, error) {
  1278  	return _CToken.Contract.LiquidateBorrow(&_CToken.TransactOpts, borrower, repayAmount, cTokenCollateral)
  1279  }
  1280  
  1281  // LiquidateBorrow is a paid mutator transaction binding the contract method 0xf5e3c462.
  1282  //
  1283  // Solidity: function liquidateBorrow(address borrower, uint256 repayAmount, address cTokenCollateral) returns(uint256)
  1284  func (_CToken *CTokenTransactorSession) LiquidateBorrow(borrower common.Address, repayAmount *big.Int, cTokenCollateral common.Address) (*types.Transaction, error) {
  1285  	return _CToken.Contract.LiquidateBorrow(&_CToken.TransactOpts, borrower, repayAmount, cTokenCollateral)
  1286  }
  1287  
  1288  // Mint is a paid mutator transaction binding the contract method 0xa0712d68.
  1289  //
  1290  // Solidity: function mint(uint256 mintAmount) returns(uint256)
  1291  func (_CToken *CTokenTransactor) Mint(opts *bind.TransactOpts, mintAmount *big.Int) (*types.Transaction, error) {
  1292  	return _CToken.contract.Transact(opts, "mint", mintAmount)
  1293  }
  1294  
  1295  // Mint is a paid mutator transaction binding the contract method 0xa0712d68.
  1296  //
  1297  // Solidity: function mint(uint256 mintAmount) returns(uint256)
  1298  func (_CToken *CTokenSession) Mint(mintAmount *big.Int) (*types.Transaction, error) {
  1299  	return _CToken.Contract.Mint(&_CToken.TransactOpts, mintAmount)
  1300  }
  1301  
  1302  // Mint is a paid mutator transaction binding the contract method 0xa0712d68.
  1303  //
  1304  // Solidity: function mint(uint256 mintAmount) returns(uint256)
  1305  func (_CToken *CTokenTransactorSession) Mint(mintAmount *big.Int) (*types.Transaction, error) {
  1306  	return _CToken.Contract.Mint(&_CToken.TransactOpts, mintAmount)
  1307  }
  1308  
  1309  // Redeem is a paid mutator transaction binding the contract method 0xdb006a75.
  1310  //
  1311  // Solidity: function redeem(uint256 redeemTokens) returns(uint256)
  1312  func (_CToken *CTokenTransactor) Redeem(opts *bind.TransactOpts, redeemTokens *big.Int) (*types.Transaction, error) {
  1313  	return _CToken.contract.Transact(opts, "redeem", redeemTokens)
  1314  }
  1315  
  1316  // Redeem is a paid mutator transaction binding the contract method 0xdb006a75.
  1317  //
  1318  // Solidity: function redeem(uint256 redeemTokens) returns(uint256)
  1319  func (_CToken *CTokenSession) Redeem(redeemTokens *big.Int) (*types.Transaction, error) {
  1320  	return _CToken.Contract.Redeem(&_CToken.TransactOpts, redeemTokens)
  1321  }
  1322  
  1323  // Redeem is a paid mutator transaction binding the contract method 0xdb006a75.
  1324  //
  1325  // Solidity: function redeem(uint256 redeemTokens) returns(uint256)
  1326  func (_CToken *CTokenTransactorSession) Redeem(redeemTokens *big.Int) (*types.Transaction, error) {
  1327  	return _CToken.Contract.Redeem(&_CToken.TransactOpts, redeemTokens)
  1328  }
  1329  
  1330  // RedeemUnderlying is a paid mutator transaction binding the contract method 0x852a12e3.
  1331  //
  1332  // Solidity: function redeemUnderlying(uint256 redeemAmount) returns(uint256)
  1333  func (_CToken *CTokenTransactor) RedeemUnderlying(opts *bind.TransactOpts, redeemAmount *big.Int) (*types.Transaction, error) {
  1334  	return _CToken.contract.Transact(opts, "redeemUnderlying", redeemAmount)
  1335  }
  1336  
  1337  // RedeemUnderlying is a paid mutator transaction binding the contract method 0x852a12e3.
  1338  //
  1339  // Solidity: function redeemUnderlying(uint256 redeemAmount) returns(uint256)
  1340  func (_CToken *CTokenSession) RedeemUnderlying(redeemAmount *big.Int) (*types.Transaction, error) {
  1341  	return _CToken.Contract.RedeemUnderlying(&_CToken.TransactOpts, redeemAmount)
  1342  }
  1343  
  1344  // RedeemUnderlying is a paid mutator transaction binding the contract method 0x852a12e3.
  1345  //
  1346  // Solidity: function redeemUnderlying(uint256 redeemAmount) returns(uint256)
  1347  func (_CToken *CTokenTransactorSession) RedeemUnderlying(redeemAmount *big.Int) (*types.Transaction, error) {
  1348  	return _CToken.Contract.RedeemUnderlying(&_CToken.TransactOpts, redeemAmount)
  1349  }
  1350  
  1351  // RepayBorrow is a paid mutator transaction binding the contract method 0x0e752702.
  1352  //
  1353  // Solidity: function repayBorrow(uint256 repayAmount) returns(uint256)
  1354  func (_CToken *CTokenTransactor) RepayBorrow(opts *bind.TransactOpts, repayAmount *big.Int) (*types.Transaction, error) {
  1355  	return _CToken.contract.Transact(opts, "repayBorrow", repayAmount)
  1356  }
  1357  
  1358  // RepayBorrow is a paid mutator transaction binding the contract method 0x0e752702.
  1359  //
  1360  // Solidity: function repayBorrow(uint256 repayAmount) returns(uint256)
  1361  func (_CToken *CTokenSession) RepayBorrow(repayAmount *big.Int) (*types.Transaction, error) {
  1362  	return _CToken.Contract.RepayBorrow(&_CToken.TransactOpts, repayAmount)
  1363  }
  1364  
  1365  // RepayBorrow is a paid mutator transaction binding the contract method 0x0e752702.
  1366  //
  1367  // Solidity: function repayBorrow(uint256 repayAmount) returns(uint256)
  1368  func (_CToken *CTokenTransactorSession) RepayBorrow(repayAmount *big.Int) (*types.Transaction, error) {
  1369  	return _CToken.Contract.RepayBorrow(&_CToken.TransactOpts, repayAmount)
  1370  }
  1371  
  1372  // RepayBorrowBehalf is a paid mutator transaction binding the contract method 0x2608f818.
  1373  //
  1374  // Solidity: function repayBorrowBehalf(address borrower, uint256 repayAmount) returns(uint256)
  1375  func (_CToken *CTokenTransactor) RepayBorrowBehalf(opts *bind.TransactOpts, borrower common.Address, repayAmount *big.Int) (*types.Transaction, error) {
  1376  	return _CToken.contract.Transact(opts, "repayBorrowBehalf", borrower, repayAmount)
  1377  }
  1378  
  1379  // RepayBorrowBehalf is a paid mutator transaction binding the contract method 0x2608f818.
  1380  //
  1381  // Solidity: function repayBorrowBehalf(address borrower, uint256 repayAmount) returns(uint256)
  1382  func (_CToken *CTokenSession) RepayBorrowBehalf(borrower common.Address, repayAmount *big.Int) (*types.Transaction, error) {
  1383  	return _CToken.Contract.RepayBorrowBehalf(&_CToken.TransactOpts, borrower, repayAmount)
  1384  }
  1385  
  1386  // RepayBorrowBehalf is a paid mutator transaction binding the contract method 0x2608f818.
  1387  //
  1388  // Solidity: function repayBorrowBehalf(address borrower, uint256 repayAmount) returns(uint256)
  1389  func (_CToken *CTokenTransactorSession) RepayBorrowBehalf(borrower common.Address, repayAmount *big.Int) (*types.Transaction, error) {
  1390  	return _CToken.Contract.RepayBorrowBehalf(&_CToken.TransactOpts, borrower, repayAmount)
  1391  }
  1392  
  1393  // Seize is a paid mutator transaction binding the contract method 0xb2a02ff1.
  1394  //
  1395  // Solidity: function seize(address liquidator, address borrower, uint256 seizeTokens) returns(uint256)
  1396  func (_CToken *CTokenTransactor) Seize(opts *bind.TransactOpts, liquidator common.Address, borrower common.Address, seizeTokens *big.Int) (*types.Transaction, error) {
  1397  	return _CToken.contract.Transact(opts, "seize", liquidator, borrower, seizeTokens)
  1398  }
  1399  
  1400  // Seize is a paid mutator transaction binding the contract method 0xb2a02ff1.
  1401  //
  1402  // Solidity: function seize(address liquidator, address borrower, uint256 seizeTokens) returns(uint256)
  1403  func (_CToken *CTokenSession) Seize(liquidator common.Address, borrower common.Address, seizeTokens *big.Int) (*types.Transaction, error) {
  1404  	return _CToken.Contract.Seize(&_CToken.TransactOpts, liquidator, borrower, seizeTokens)
  1405  }
  1406  
  1407  // Seize is a paid mutator transaction binding the contract method 0xb2a02ff1.
  1408  //
  1409  // Solidity: function seize(address liquidator, address borrower, uint256 seizeTokens) returns(uint256)
  1410  func (_CToken *CTokenTransactorSession) Seize(liquidator common.Address, borrower common.Address, seizeTokens *big.Int) (*types.Transaction, error) {
  1411  	return _CToken.Contract.Seize(&_CToken.TransactOpts, liquidator, borrower, seizeTokens)
  1412  }
  1413  
  1414  // TotalBorrowsCurrent is a paid mutator transaction binding the contract method 0x73acee98.
  1415  //
  1416  // Solidity: function totalBorrowsCurrent() returns(uint256)
  1417  func (_CToken *CTokenTransactor) TotalBorrowsCurrent(opts *bind.TransactOpts) (*types.Transaction, error) {
  1418  	return _CToken.contract.Transact(opts, "totalBorrowsCurrent")
  1419  }
  1420  
  1421  // TotalBorrowsCurrent is a paid mutator transaction binding the contract method 0x73acee98.
  1422  //
  1423  // Solidity: function totalBorrowsCurrent() returns(uint256)
  1424  func (_CToken *CTokenSession) TotalBorrowsCurrent() (*types.Transaction, error) {
  1425  	return _CToken.Contract.TotalBorrowsCurrent(&_CToken.TransactOpts)
  1426  }
  1427  
  1428  // TotalBorrowsCurrent is a paid mutator transaction binding the contract method 0x73acee98.
  1429  //
  1430  // Solidity: function totalBorrowsCurrent() returns(uint256)
  1431  func (_CToken *CTokenTransactorSession) TotalBorrowsCurrent() (*types.Transaction, error) {
  1432  	return _CToken.Contract.TotalBorrowsCurrent(&_CToken.TransactOpts)
  1433  }
  1434  
  1435  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  1436  //
  1437  // Solidity: function transfer(address dst, uint256 amount) returns(bool)
  1438  func (_CToken *CTokenTransactor) Transfer(opts *bind.TransactOpts, dst common.Address, amount *big.Int) (*types.Transaction, error) {
  1439  	return _CToken.contract.Transact(opts, "transfer", dst, amount)
  1440  }
  1441  
  1442  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  1443  //
  1444  // Solidity: function transfer(address dst, uint256 amount) returns(bool)
  1445  func (_CToken *CTokenSession) Transfer(dst common.Address, amount *big.Int) (*types.Transaction, error) {
  1446  	return _CToken.Contract.Transfer(&_CToken.TransactOpts, dst, amount)
  1447  }
  1448  
  1449  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  1450  //
  1451  // Solidity: function transfer(address dst, uint256 amount) returns(bool)
  1452  func (_CToken *CTokenTransactorSession) Transfer(dst common.Address, amount *big.Int) (*types.Transaction, error) {
  1453  	return _CToken.Contract.Transfer(&_CToken.TransactOpts, dst, amount)
  1454  }
  1455  
  1456  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1457  //
  1458  // Solidity: function transferFrom(address src, address dst, uint256 amount) returns(bool)
  1459  func (_CToken *CTokenTransactor) TransferFrom(opts *bind.TransactOpts, src common.Address, dst common.Address, amount *big.Int) (*types.Transaction, error) {
  1460  	return _CToken.contract.Transact(opts, "transferFrom", src, dst, amount)
  1461  }
  1462  
  1463  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1464  //
  1465  // Solidity: function transferFrom(address src, address dst, uint256 amount) returns(bool)
  1466  func (_CToken *CTokenSession) TransferFrom(src common.Address, dst common.Address, amount *big.Int) (*types.Transaction, error) {
  1467  	return _CToken.Contract.TransferFrom(&_CToken.TransactOpts, src, dst, amount)
  1468  }
  1469  
  1470  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1471  //
  1472  // Solidity: function transferFrom(address src, address dst, uint256 amount) returns(bool)
  1473  func (_CToken *CTokenTransactorSession) TransferFrom(src common.Address, dst common.Address, amount *big.Int) (*types.Transaction, error) {
  1474  	return _CToken.Contract.TransferFrom(&_CToken.TransactOpts, src, dst, amount)
  1475  }
  1476  
  1477  // Fallback is a paid mutator transaction binding the contract fallback function.
  1478  //
  1479  // Solidity: fallback() payable returns()
  1480  func (_CToken *CTokenTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
  1481  	return _CToken.contract.RawTransact(opts, calldata)
  1482  }
  1483  
  1484  // Fallback is a paid mutator transaction binding the contract fallback function.
  1485  //
  1486  // Solidity: fallback() payable returns()
  1487  func (_CToken *CTokenSession) Fallback(calldata []byte) (*types.Transaction, error) {
  1488  	return _CToken.Contract.Fallback(&_CToken.TransactOpts, calldata)
  1489  }
  1490  
  1491  // Fallback is a paid mutator transaction binding the contract fallback function.
  1492  //
  1493  // Solidity: fallback() payable returns()
  1494  func (_CToken *CTokenTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
  1495  	return _CToken.Contract.Fallback(&_CToken.TransactOpts, calldata)
  1496  }
  1497  
  1498  // CTokenAccrueInterestIterator is returned from FilterAccrueInterest and is used to iterate over the raw logs and unpacked data for AccrueInterest events raised by the CToken contract.
  1499  type CTokenAccrueInterestIterator struct {
  1500  	Event *CTokenAccrueInterest // Event containing the contract specifics and raw log
  1501  
  1502  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1503  	event    string              // Event name to use for unpacking event data
  1504  
  1505  	logs chan types.Log        // Log channel receiving the found contract events
  1506  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1507  	done bool                  // Whether the subscription completed delivering logs
  1508  	fail error                 // Occurred error to stop iteration
  1509  }
  1510  
  1511  // Next advances the iterator to the subsequent event, returning whether there
  1512  // are any more events found. In case of a retrieval or parsing error, false is
  1513  // returned and Error() can be queried for the exact failure.
  1514  func (it *CTokenAccrueInterestIterator) Next() bool {
  1515  	// If the iterator failed, stop iterating
  1516  	if it.fail != nil {
  1517  		return false
  1518  	}
  1519  	// If the iterator completed, deliver directly whatever's available
  1520  	if it.done {
  1521  		select {
  1522  		case log := <-it.logs:
  1523  			it.Event = new(CTokenAccrueInterest)
  1524  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1525  				it.fail = err
  1526  				return false
  1527  			}
  1528  			it.Event.Raw = log
  1529  			return true
  1530  
  1531  		default:
  1532  			return false
  1533  		}
  1534  	}
  1535  	// Iterator still in progress, wait for either a data or an error event
  1536  	select {
  1537  	case log := <-it.logs:
  1538  		it.Event = new(CTokenAccrueInterest)
  1539  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1540  			it.fail = err
  1541  			return false
  1542  		}
  1543  		it.Event.Raw = log
  1544  		return true
  1545  
  1546  	case err := <-it.sub.Err():
  1547  		it.done = true
  1548  		it.fail = err
  1549  		return it.Next()
  1550  	}
  1551  }
  1552  
  1553  // Error returns any retrieval or parsing error occurred during filtering.
  1554  func (it *CTokenAccrueInterestIterator) Error() error {
  1555  	return it.fail
  1556  }
  1557  
  1558  // Close terminates the iteration process, releasing any pending underlying
  1559  // resources.
  1560  func (it *CTokenAccrueInterestIterator) Close() error {
  1561  	it.sub.Unsubscribe()
  1562  	return nil
  1563  }
  1564  
  1565  // CTokenAccrueInterest represents a AccrueInterest event raised by the CToken contract.
  1566  type CTokenAccrueInterest struct {
  1567  	CashPrior           *big.Int
  1568  	InterestAccumulated *big.Int
  1569  	BorrowIndex         *big.Int
  1570  	TotalBorrows        *big.Int
  1571  	Raw                 types.Log // Blockchain specific contextual infos
  1572  }
  1573  
  1574  // FilterAccrueInterest is a free log retrieval operation binding the contract event 0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04.
  1575  //
  1576  // Solidity: event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows)
  1577  func (_CToken *CTokenFilterer) FilterAccrueInterest(opts *bind.FilterOpts) (*CTokenAccrueInterestIterator, error) {
  1578  
  1579  	logs, sub, err := _CToken.contract.FilterLogs(opts, "AccrueInterest")
  1580  	if err != nil {
  1581  		return nil, err
  1582  	}
  1583  	return &CTokenAccrueInterestIterator{contract: _CToken.contract, event: "AccrueInterest", logs: logs, sub: sub}, nil
  1584  }
  1585  
  1586  // WatchAccrueInterest is a free log subscription operation binding the contract event 0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04.
  1587  //
  1588  // Solidity: event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows)
  1589  func (_CToken *CTokenFilterer) WatchAccrueInterest(opts *bind.WatchOpts, sink chan<- *CTokenAccrueInterest) (event.Subscription, error) {
  1590  
  1591  	logs, sub, err := _CToken.contract.WatchLogs(opts, "AccrueInterest")
  1592  	if err != nil {
  1593  		return nil, err
  1594  	}
  1595  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1596  		defer sub.Unsubscribe()
  1597  		for {
  1598  			select {
  1599  			case log := <-logs:
  1600  				// New log arrived, parse the event and forward to the user
  1601  				event := new(CTokenAccrueInterest)
  1602  				if err := _CToken.contract.UnpackLog(event, "AccrueInterest", log); err != nil {
  1603  					return err
  1604  				}
  1605  				event.Raw = log
  1606  
  1607  				select {
  1608  				case sink <- event:
  1609  				case err := <-sub.Err():
  1610  					return err
  1611  				case <-quit:
  1612  					return nil
  1613  				}
  1614  			case err := <-sub.Err():
  1615  				return err
  1616  			case <-quit:
  1617  				return nil
  1618  			}
  1619  		}
  1620  	}), nil
  1621  }
  1622  
  1623  // ParseAccrueInterest is a log parse operation binding the contract event 0x4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04.
  1624  //
  1625  // Solidity: event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows)
  1626  func (_CToken *CTokenFilterer) ParseAccrueInterest(log types.Log) (*CTokenAccrueInterest, error) {
  1627  	event := new(CTokenAccrueInterest)
  1628  	if err := _CToken.contract.UnpackLog(event, "AccrueInterest", log); err != nil {
  1629  		return nil, err
  1630  	}
  1631  	return event, nil
  1632  }
  1633  
  1634  // CTokenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the CToken contract.
  1635  type CTokenApprovalIterator struct {
  1636  	Event *CTokenApproval // Event containing the contract specifics and raw log
  1637  
  1638  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1639  	event    string              // Event name to use for unpacking event data
  1640  
  1641  	logs chan types.Log        // Log channel receiving the found contract events
  1642  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1643  	done bool                  // Whether the subscription completed delivering logs
  1644  	fail error                 // Occurred error to stop iteration
  1645  }
  1646  
  1647  // Next advances the iterator to the subsequent event, returning whether there
  1648  // are any more events found. In case of a retrieval or parsing error, false is
  1649  // returned and Error() can be queried for the exact failure.
  1650  func (it *CTokenApprovalIterator) Next() bool {
  1651  	// If the iterator failed, stop iterating
  1652  	if it.fail != nil {
  1653  		return false
  1654  	}
  1655  	// If the iterator completed, deliver directly whatever's available
  1656  	if it.done {
  1657  		select {
  1658  		case log := <-it.logs:
  1659  			it.Event = new(CTokenApproval)
  1660  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1661  				it.fail = err
  1662  				return false
  1663  			}
  1664  			it.Event.Raw = log
  1665  			return true
  1666  
  1667  		default:
  1668  			return false
  1669  		}
  1670  	}
  1671  	// Iterator still in progress, wait for either a data or an error event
  1672  	select {
  1673  	case log := <-it.logs:
  1674  		it.Event = new(CTokenApproval)
  1675  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1676  			it.fail = err
  1677  			return false
  1678  		}
  1679  		it.Event.Raw = log
  1680  		return true
  1681  
  1682  	case err := <-it.sub.Err():
  1683  		it.done = true
  1684  		it.fail = err
  1685  		return it.Next()
  1686  	}
  1687  }
  1688  
  1689  // Error returns any retrieval or parsing error occurred during filtering.
  1690  func (it *CTokenApprovalIterator) Error() error {
  1691  	return it.fail
  1692  }
  1693  
  1694  // Close terminates the iteration process, releasing any pending underlying
  1695  // resources.
  1696  func (it *CTokenApprovalIterator) Close() error {
  1697  	it.sub.Unsubscribe()
  1698  	return nil
  1699  }
  1700  
  1701  // CTokenApproval represents a Approval event raised by the CToken contract.
  1702  type CTokenApproval struct {
  1703  	Owner   common.Address
  1704  	Spender common.Address
  1705  	Amount  *big.Int
  1706  	Raw     types.Log // Blockchain specific contextual infos
  1707  }
  1708  
  1709  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1710  //
  1711  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 amount)
  1712  func (_CToken *CTokenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*CTokenApprovalIterator, error) {
  1713  
  1714  	var ownerRule []interface{}
  1715  	for _, ownerItem := range owner {
  1716  		ownerRule = append(ownerRule, ownerItem)
  1717  	}
  1718  	var spenderRule []interface{}
  1719  	for _, spenderItem := range spender {
  1720  		spenderRule = append(spenderRule, spenderItem)
  1721  	}
  1722  
  1723  	logs, sub, err := _CToken.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
  1724  	if err != nil {
  1725  		return nil, err
  1726  	}
  1727  	return &CTokenApprovalIterator{contract: _CToken.contract, event: "Approval", logs: logs, sub: sub}, nil
  1728  }
  1729  
  1730  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1731  //
  1732  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 amount)
  1733  func (_CToken *CTokenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *CTokenApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
  1734  
  1735  	var ownerRule []interface{}
  1736  	for _, ownerItem := range owner {
  1737  		ownerRule = append(ownerRule, ownerItem)
  1738  	}
  1739  	var spenderRule []interface{}
  1740  	for _, spenderItem := range spender {
  1741  		spenderRule = append(spenderRule, spenderItem)
  1742  	}
  1743  
  1744  	logs, sub, err := _CToken.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
  1745  	if err != nil {
  1746  		return nil, err
  1747  	}
  1748  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1749  		defer sub.Unsubscribe()
  1750  		for {
  1751  			select {
  1752  			case log := <-logs:
  1753  				// New log arrived, parse the event and forward to the user
  1754  				event := new(CTokenApproval)
  1755  				if err := _CToken.contract.UnpackLog(event, "Approval", log); err != nil {
  1756  					return err
  1757  				}
  1758  				event.Raw = log
  1759  
  1760  				select {
  1761  				case sink <- event:
  1762  				case err := <-sub.Err():
  1763  					return err
  1764  				case <-quit:
  1765  					return nil
  1766  				}
  1767  			case err := <-sub.Err():
  1768  				return err
  1769  			case <-quit:
  1770  				return nil
  1771  			}
  1772  		}
  1773  	}), nil
  1774  }
  1775  
  1776  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1777  //
  1778  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 amount)
  1779  func (_CToken *CTokenFilterer) ParseApproval(log types.Log) (*CTokenApproval, error) {
  1780  	event := new(CTokenApproval)
  1781  	if err := _CToken.contract.UnpackLog(event, "Approval", log); err != nil {
  1782  		return nil, err
  1783  	}
  1784  	return event, nil
  1785  }
  1786  
  1787  // CTokenBorrowIterator is returned from FilterBorrow and is used to iterate over the raw logs and unpacked data for Borrow events raised by the CToken contract.
  1788  type CTokenBorrowIterator struct {
  1789  	Event *CTokenBorrow // Event containing the contract specifics and raw log
  1790  
  1791  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1792  	event    string              // Event name to use for unpacking event data
  1793  
  1794  	logs chan types.Log        // Log channel receiving the found contract events
  1795  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1796  	done bool                  // Whether the subscription completed delivering logs
  1797  	fail error                 // Occurred error to stop iteration
  1798  }
  1799  
  1800  // Next advances the iterator to the subsequent event, returning whether there
  1801  // are any more events found. In case of a retrieval or parsing error, false is
  1802  // returned and Error() can be queried for the exact failure.
  1803  func (it *CTokenBorrowIterator) Next() bool {
  1804  	// If the iterator failed, stop iterating
  1805  	if it.fail != nil {
  1806  		return false
  1807  	}
  1808  	// If the iterator completed, deliver directly whatever's available
  1809  	if it.done {
  1810  		select {
  1811  		case log := <-it.logs:
  1812  			it.Event = new(CTokenBorrow)
  1813  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1814  				it.fail = err
  1815  				return false
  1816  			}
  1817  			it.Event.Raw = log
  1818  			return true
  1819  
  1820  		default:
  1821  			return false
  1822  		}
  1823  	}
  1824  	// Iterator still in progress, wait for either a data or an error event
  1825  	select {
  1826  	case log := <-it.logs:
  1827  		it.Event = new(CTokenBorrow)
  1828  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1829  			it.fail = err
  1830  			return false
  1831  		}
  1832  		it.Event.Raw = log
  1833  		return true
  1834  
  1835  	case err := <-it.sub.Err():
  1836  		it.done = true
  1837  		it.fail = err
  1838  		return it.Next()
  1839  	}
  1840  }
  1841  
  1842  // Error returns any retrieval or parsing error occurred during filtering.
  1843  func (it *CTokenBorrowIterator) Error() error {
  1844  	return it.fail
  1845  }
  1846  
  1847  // Close terminates the iteration process, releasing any pending underlying
  1848  // resources.
  1849  func (it *CTokenBorrowIterator) Close() error {
  1850  	it.sub.Unsubscribe()
  1851  	return nil
  1852  }
  1853  
  1854  // CTokenBorrow represents a Borrow event raised by the CToken contract.
  1855  type CTokenBorrow struct {
  1856  	Borrower       common.Address
  1857  	BorrowAmount   *big.Int
  1858  	AccountBorrows *big.Int
  1859  	TotalBorrows   *big.Int
  1860  	Raw            types.Log // Blockchain specific contextual infos
  1861  }
  1862  
  1863  // FilterBorrow is a free log retrieval operation binding the contract event 0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80.
  1864  //
  1865  // Solidity: event Borrow(address borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows)
  1866  func (_CToken *CTokenFilterer) FilterBorrow(opts *bind.FilterOpts) (*CTokenBorrowIterator, error) {
  1867  
  1868  	logs, sub, err := _CToken.contract.FilterLogs(opts, "Borrow")
  1869  	if err != nil {
  1870  		return nil, err
  1871  	}
  1872  	return &CTokenBorrowIterator{contract: _CToken.contract, event: "Borrow", logs: logs, sub: sub}, nil
  1873  }
  1874  
  1875  // WatchBorrow is a free log subscription operation binding the contract event 0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80.
  1876  //
  1877  // Solidity: event Borrow(address borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows)
  1878  func (_CToken *CTokenFilterer) WatchBorrow(opts *bind.WatchOpts, sink chan<- *CTokenBorrow) (event.Subscription, error) {
  1879  
  1880  	logs, sub, err := _CToken.contract.WatchLogs(opts, "Borrow")
  1881  	if err != nil {
  1882  		return nil, err
  1883  	}
  1884  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1885  		defer sub.Unsubscribe()
  1886  		for {
  1887  			select {
  1888  			case log := <-logs:
  1889  				// New log arrived, parse the event and forward to the user
  1890  				event := new(CTokenBorrow)
  1891  				if err := _CToken.contract.UnpackLog(event, "Borrow", log); err != nil {
  1892  					return err
  1893  				}
  1894  				event.Raw = log
  1895  
  1896  				select {
  1897  				case sink <- event:
  1898  				case err := <-sub.Err():
  1899  					return err
  1900  				case <-quit:
  1901  					return nil
  1902  				}
  1903  			case err := <-sub.Err():
  1904  				return err
  1905  			case <-quit:
  1906  				return nil
  1907  			}
  1908  		}
  1909  	}), nil
  1910  }
  1911  
  1912  // ParseBorrow is a log parse operation binding the contract event 0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80.
  1913  //
  1914  // Solidity: event Borrow(address borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows)
  1915  func (_CToken *CTokenFilterer) ParseBorrow(log types.Log) (*CTokenBorrow, error) {
  1916  	event := new(CTokenBorrow)
  1917  	if err := _CToken.contract.UnpackLog(event, "Borrow", log); err != nil {
  1918  		return nil, err
  1919  	}
  1920  	return event, nil
  1921  }
  1922  
  1923  // CTokenFailureIterator is returned from FilterFailure and is used to iterate over the raw logs and unpacked data for Failure events raised by the CToken contract.
  1924  type CTokenFailureIterator struct {
  1925  	Event *CTokenFailure // Event containing the contract specifics and raw log
  1926  
  1927  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1928  	event    string              // Event name to use for unpacking event data
  1929  
  1930  	logs chan types.Log        // Log channel receiving the found contract events
  1931  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1932  	done bool                  // Whether the subscription completed delivering logs
  1933  	fail error                 // Occurred error to stop iteration
  1934  }
  1935  
  1936  // Next advances the iterator to the subsequent event, returning whether there
  1937  // are any more events found. In case of a retrieval or parsing error, false is
  1938  // returned and Error() can be queried for the exact failure.
  1939  func (it *CTokenFailureIterator) Next() bool {
  1940  	// If the iterator failed, stop iterating
  1941  	if it.fail != nil {
  1942  		return false
  1943  	}
  1944  	// If the iterator completed, deliver directly whatever's available
  1945  	if it.done {
  1946  		select {
  1947  		case log := <-it.logs:
  1948  			it.Event = new(CTokenFailure)
  1949  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1950  				it.fail = err
  1951  				return false
  1952  			}
  1953  			it.Event.Raw = log
  1954  			return true
  1955  
  1956  		default:
  1957  			return false
  1958  		}
  1959  	}
  1960  	// Iterator still in progress, wait for either a data or an error event
  1961  	select {
  1962  	case log := <-it.logs:
  1963  		it.Event = new(CTokenFailure)
  1964  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1965  			it.fail = err
  1966  			return false
  1967  		}
  1968  		it.Event.Raw = log
  1969  		return true
  1970  
  1971  	case err := <-it.sub.Err():
  1972  		it.done = true
  1973  		it.fail = err
  1974  		return it.Next()
  1975  	}
  1976  }
  1977  
  1978  // Error returns any retrieval or parsing error occurred during filtering.
  1979  func (it *CTokenFailureIterator) Error() error {
  1980  	return it.fail
  1981  }
  1982  
  1983  // Close terminates the iteration process, releasing any pending underlying
  1984  // resources.
  1985  func (it *CTokenFailureIterator) Close() error {
  1986  	it.sub.Unsubscribe()
  1987  	return nil
  1988  }
  1989  
  1990  // CTokenFailure represents a Failure event raised by the CToken contract.
  1991  type CTokenFailure struct {
  1992  	Error  *big.Int
  1993  	Info   *big.Int
  1994  	Detail *big.Int
  1995  	Raw    types.Log // Blockchain specific contextual infos
  1996  }
  1997  
  1998  // FilterFailure is a free log retrieval operation binding the contract event 0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0.
  1999  //
  2000  // Solidity: event Failure(uint256 error, uint256 info, uint256 detail)
  2001  func (_CToken *CTokenFilterer) FilterFailure(opts *bind.FilterOpts) (*CTokenFailureIterator, error) {
  2002  
  2003  	logs, sub, err := _CToken.contract.FilterLogs(opts, "Failure")
  2004  	if err != nil {
  2005  		return nil, err
  2006  	}
  2007  	return &CTokenFailureIterator{contract: _CToken.contract, event: "Failure", logs: logs, sub: sub}, nil
  2008  }
  2009  
  2010  // WatchFailure is a free log subscription operation binding the contract event 0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0.
  2011  //
  2012  // Solidity: event Failure(uint256 error, uint256 info, uint256 detail)
  2013  func (_CToken *CTokenFilterer) WatchFailure(opts *bind.WatchOpts, sink chan<- *CTokenFailure) (event.Subscription, error) {
  2014  
  2015  	logs, sub, err := _CToken.contract.WatchLogs(opts, "Failure")
  2016  	if err != nil {
  2017  		return nil, err
  2018  	}
  2019  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2020  		defer sub.Unsubscribe()
  2021  		for {
  2022  			select {
  2023  			case log := <-logs:
  2024  				// New log arrived, parse the event and forward to the user
  2025  				event := new(CTokenFailure)
  2026  				if err := _CToken.contract.UnpackLog(event, "Failure", log); err != nil {
  2027  					return err
  2028  				}
  2029  				event.Raw = log
  2030  
  2031  				select {
  2032  				case sink <- event:
  2033  				case err := <-sub.Err():
  2034  					return err
  2035  				case <-quit:
  2036  					return nil
  2037  				}
  2038  			case err := <-sub.Err():
  2039  				return err
  2040  			case <-quit:
  2041  				return nil
  2042  			}
  2043  		}
  2044  	}), nil
  2045  }
  2046  
  2047  // ParseFailure is a log parse operation binding the contract event 0x45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0.
  2048  //
  2049  // Solidity: event Failure(uint256 error, uint256 info, uint256 detail)
  2050  func (_CToken *CTokenFilterer) ParseFailure(log types.Log) (*CTokenFailure, error) {
  2051  	event := new(CTokenFailure)
  2052  	if err := _CToken.contract.UnpackLog(event, "Failure", log); err != nil {
  2053  		return nil, err
  2054  	}
  2055  	return event, nil
  2056  }
  2057  
  2058  // CTokenLiquidateBorrowIterator is returned from FilterLiquidateBorrow and is used to iterate over the raw logs and unpacked data for LiquidateBorrow events raised by the CToken contract.
  2059  type CTokenLiquidateBorrowIterator struct {
  2060  	Event *CTokenLiquidateBorrow // Event containing the contract specifics and raw log
  2061  
  2062  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2063  	event    string              // Event name to use for unpacking event data
  2064  
  2065  	logs chan types.Log        // Log channel receiving the found contract events
  2066  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2067  	done bool                  // Whether the subscription completed delivering logs
  2068  	fail error                 // Occurred error to stop iteration
  2069  }
  2070  
  2071  // Next advances the iterator to the subsequent event, returning whether there
  2072  // are any more events found. In case of a retrieval or parsing error, false is
  2073  // returned and Error() can be queried for the exact failure.
  2074  func (it *CTokenLiquidateBorrowIterator) Next() bool {
  2075  	// If the iterator failed, stop iterating
  2076  	if it.fail != nil {
  2077  		return false
  2078  	}
  2079  	// If the iterator completed, deliver directly whatever's available
  2080  	if it.done {
  2081  		select {
  2082  		case log := <-it.logs:
  2083  			it.Event = new(CTokenLiquidateBorrow)
  2084  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2085  				it.fail = err
  2086  				return false
  2087  			}
  2088  			it.Event.Raw = log
  2089  			return true
  2090  
  2091  		default:
  2092  			return false
  2093  		}
  2094  	}
  2095  	// Iterator still in progress, wait for either a data or an error event
  2096  	select {
  2097  	case log := <-it.logs:
  2098  		it.Event = new(CTokenLiquidateBorrow)
  2099  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2100  			it.fail = err
  2101  			return false
  2102  		}
  2103  		it.Event.Raw = log
  2104  		return true
  2105  
  2106  	case err := <-it.sub.Err():
  2107  		it.done = true
  2108  		it.fail = err
  2109  		return it.Next()
  2110  	}
  2111  }
  2112  
  2113  // Error returns any retrieval or parsing error occurred during filtering.
  2114  func (it *CTokenLiquidateBorrowIterator) Error() error {
  2115  	return it.fail
  2116  }
  2117  
  2118  // Close terminates the iteration process, releasing any pending underlying
  2119  // resources.
  2120  func (it *CTokenLiquidateBorrowIterator) Close() error {
  2121  	it.sub.Unsubscribe()
  2122  	return nil
  2123  }
  2124  
  2125  // CTokenLiquidateBorrow represents a LiquidateBorrow event raised by the CToken contract.
  2126  type CTokenLiquidateBorrow struct {
  2127  	Liquidator       common.Address
  2128  	Borrower         common.Address
  2129  	RepayAmount      *big.Int
  2130  	CTokenCollateral common.Address
  2131  	SeizeTokens      *big.Int
  2132  	Raw              types.Log // Blockchain specific contextual infos
  2133  }
  2134  
  2135  // FilterLiquidateBorrow is a free log retrieval operation binding the contract event 0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52.
  2136  //
  2137  // Solidity: event LiquidateBorrow(address liquidator, address borrower, uint256 repayAmount, address cTokenCollateral, uint256 seizeTokens)
  2138  func (_CToken *CTokenFilterer) FilterLiquidateBorrow(opts *bind.FilterOpts) (*CTokenLiquidateBorrowIterator, error) {
  2139  
  2140  	logs, sub, err := _CToken.contract.FilterLogs(opts, "LiquidateBorrow")
  2141  	if err != nil {
  2142  		return nil, err
  2143  	}
  2144  	return &CTokenLiquidateBorrowIterator{contract: _CToken.contract, event: "LiquidateBorrow", logs: logs, sub: sub}, nil
  2145  }
  2146  
  2147  // WatchLiquidateBorrow is a free log subscription operation binding the contract event 0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52.
  2148  //
  2149  // Solidity: event LiquidateBorrow(address liquidator, address borrower, uint256 repayAmount, address cTokenCollateral, uint256 seizeTokens)
  2150  func (_CToken *CTokenFilterer) WatchLiquidateBorrow(opts *bind.WatchOpts, sink chan<- *CTokenLiquidateBorrow) (event.Subscription, error) {
  2151  
  2152  	logs, sub, err := _CToken.contract.WatchLogs(opts, "LiquidateBorrow")
  2153  	if err != nil {
  2154  		return nil, err
  2155  	}
  2156  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2157  		defer sub.Unsubscribe()
  2158  		for {
  2159  			select {
  2160  			case log := <-logs:
  2161  				// New log arrived, parse the event and forward to the user
  2162  				event := new(CTokenLiquidateBorrow)
  2163  				if err := _CToken.contract.UnpackLog(event, "LiquidateBorrow", log); err != nil {
  2164  					return err
  2165  				}
  2166  				event.Raw = log
  2167  
  2168  				select {
  2169  				case sink <- event:
  2170  				case err := <-sub.Err():
  2171  					return err
  2172  				case <-quit:
  2173  					return nil
  2174  				}
  2175  			case err := <-sub.Err():
  2176  				return err
  2177  			case <-quit:
  2178  				return nil
  2179  			}
  2180  		}
  2181  	}), nil
  2182  }
  2183  
  2184  // ParseLiquidateBorrow is a log parse operation binding the contract event 0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52.
  2185  //
  2186  // Solidity: event LiquidateBorrow(address liquidator, address borrower, uint256 repayAmount, address cTokenCollateral, uint256 seizeTokens)
  2187  func (_CToken *CTokenFilterer) ParseLiquidateBorrow(log types.Log) (*CTokenLiquidateBorrow, error) {
  2188  	event := new(CTokenLiquidateBorrow)
  2189  	if err := _CToken.contract.UnpackLog(event, "LiquidateBorrow", log); err != nil {
  2190  		return nil, err
  2191  	}
  2192  	return event, nil
  2193  }
  2194  
  2195  // CTokenMintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the CToken contract.
  2196  type CTokenMintIterator struct {
  2197  	Event *CTokenMint // Event containing the contract specifics and raw log
  2198  
  2199  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2200  	event    string              // Event name to use for unpacking event data
  2201  
  2202  	logs chan types.Log        // Log channel receiving the found contract events
  2203  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2204  	done bool                  // Whether the subscription completed delivering logs
  2205  	fail error                 // Occurred error to stop iteration
  2206  }
  2207  
  2208  // Next advances the iterator to the subsequent event, returning whether there
  2209  // are any more events found. In case of a retrieval or parsing error, false is
  2210  // returned and Error() can be queried for the exact failure.
  2211  func (it *CTokenMintIterator) Next() bool {
  2212  	// If the iterator failed, stop iterating
  2213  	if it.fail != nil {
  2214  		return false
  2215  	}
  2216  	// If the iterator completed, deliver directly whatever's available
  2217  	if it.done {
  2218  		select {
  2219  		case log := <-it.logs:
  2220  			it.Event = new(CTokenMint)
  2221  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2222  				it.fail = err
  2223  				return false
  2224  			}
  2225  			it.Event.Raw = log
  2226  			return true
  2227  
  2228  		default:
  2229  			return false
  2230  		}
  2231  	}
  2232  	// Iterator still in progress, wait for either a data or an error event
  2233  	select {
  2234  	case log := <-it.logs:
  2235  		it.Event = new(CTokenMint)
  2236  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2237  			it.fail = err
  2238  			return false
  2239  		}
  2240  		it.Event.Raw = log
  2241  		return true
  2242  
  2243  	case err := <-it.sub.Err():
  2244  		it.done = true
  2245  		it.fail = err
  2246  		return it.Next()
  2247  	}
  2248  }
  2249  
  2250  // Error returns any retrieval or parsing error occurred during filtering.
  2251  func (it *CTokenMintIterator) Error() error {
  2252  	return it.fail
  2253  }
  2254  
  2255  // Close terminates the iteration process, releasing any pending underlying
  2256  // resources.
  2257  func (it *CTokenMintIterator) Close() error {
  2258  	it.sub.Unsubscribe()
  2259  	return nil
  2260  }
  2261  
  2262  // CTokenMint represents a Mint event raised by the CToken contract.
  2263  type CTokenMint struct {
  2264  	Minter     common.Address
  2265  	MintAmount *big.Int
  2266  	MintTokens *big.Int
  2267  	Raw        types.Log // Blockchain specific contextual infos
  2268  }
  2269  
  2270  // FilterMint is a free log retrieval operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  2271  //
  2272  // Solidity: event Mint(address minter, uint256 mintAmount, uint256 mintTokens)
  2273  func (_CToken *CTokenFilterer) FilterMint(opts *bind.FilterOpts) (*CTokenMintIterator, error) {
  2274  
  2275  	logs, sub, err := _CToken.contract.FilterLogs(opts, "Mint")
  2276  	if err != nil {
  2277  		return nil, err
  2278  	}
  2279  	return &CTokenMintIterator{contract: _CToken.contract, event: "Mint", logs: logs, sub: sub}, nil
  2280  }
  2281  
  2282  // WatchMint is a free log subscription operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  2283  //
  2284  // Solidity: event Mint(address minter, uint256 mintAmount, uint256 mintTokens)
  2285  func (_CToken *CTokenFilterer) WatchMint(opts *bind.WatchOpts, sink chan<- *CTokenMint) (event.Subscription, error) {
  2286  
  2287  	logs, sub, err := _CToken.contract.WatchLogs(opts, "Mint")
  2288  	if err != nil {
  2289  		return nil, err
  2290  	}
  2291  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2292  		defer sub.Unsubscribe()
  2293  		for {
  2294  			select {
  2295  			case log := <-logs:
  2296  				// New log arrived, parse the event and forward to the user
  2297  				event := new(CTokenMint)
  2298  				if err := _CToken.contract.UnpackLog(event, "Mint", log); err != nil {
  2299  					return err
  2300  				}
  2301  				event.Raw = log
  2302  
  2303  				select {
  2304  				case sink <- event:
  2305  				case err := <-sub.Err():
  2306  					return err
  2307  				case <-quit:
  2308  					return nil
  2309  				}
  2310  			case err := <-sub.Err():
  2311  				return err
  2312  			case <-quit:
  2313  				return nil
  2314  			}
  2315  		}
  2316  	}), nil
  2317  }
  2318  
  2319  // ParseMint is a log parse operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  2320  //
  2321  // Solidity: event Mint(address minter, uint256 mintAmount, uint256 mintTokens)
  2322  func (_CToken *CTokenFilterer) ParseMint(log types.Log) (*CTokenMint, error) {
  2323  	event := new(CTokenMint)
  2324  	if err := _CToken.contract.UnpackLog(event, "Mint", log); err != nil {
  2325  		return nil, err
  2326  	}
  2327  	return event, nil
  2328  }
  2329  
  2330  // CTokenNewAdminIterator is returned from FilterNewAdmin and is used to iterate over the raw logs and unpacked data for NewAdmin events raised by the CToken contract.
  2331  type CTokenNewAdminIterator struct {
  2332  	Event *CTokenNewAdmin // Event containing the contract specifics and raw log
  2333  
  2334  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2335  	event    string              // Event name to use for unpacking event data
  2336  
  2337  	logs chan types.Log        // Log channel receiving the found contract events
  2338  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2339  	done bool                  // Whether the subscription completed delivering logs
  2340  	fail error                 // Occurred error to stop iteration
  2341  }
  2342  
  2343  // Next advances the iterator to the subsequent event, returning whether there
  2344  // are any more events found. In case of a retrieval or parsing error, false is
  2345  // returned and Error() can be queried for the exact failure.
  2346  func (it *CTokenNewAdminIterator) Next() bool {
  2347  	// If the iterator failed, stop iterating
  2348  	if it.fail != nil {
  2349  		return false
  2350  	}
  2351  	// If the iterator completed, deliver directly whatever's available
  2352  	if it.done {
  2353  		select {
  2354  		case log := <-it.logs:
  2355  			it.Event = new(CTokenNewAdmin)
  2356  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2357  				it.fail = err
  2358  				return false
  2359  			}
  2360  			it.Event.Raw = log
  2361  			return true
  2362  
  2363  		default:
  2364  			return false
  2365  		}
  2366  	}
  2367  	// Iterator still in progress, wait for either a data or an error event
  2368  	select {
  2369  	case log := <-it.logs:
  2370  		it.Event = new(CTokenNewAdmin)
  2371  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2372  			it.fail = err
  2373  			return false
  2374  		}
  2375  		it.Event.Raw = log
  2376  		return true
  2377  
  2378  	case err := <-it.sub.Err():
  2379  		it.done = true
  2380  		it.fail = err
  2381  		return it.Next()
  2382  	}
  2383  }
  2384  
  2385  // Error returns any retrieval or parsing error occurred during filtering.
  2386  func (it *CTokenNewAdminIterator) Error() error {
  2387  	return it.fail
  2388  }
  2389  
  2390  // Close terminates the iteration process, releasing any pending underlying
  2391  // resources.
  2392  func (it *CTokenNewAdminIterator) Close() error {
  2393  	it.sub.Unsubscribe()
  2394  	return nil
  2395  }
  2396  
  2397  // CTokenNewAdmin represents a NewAdmin event raised by the CToken contract.
  2398  type CTokenNewAdmin struct {
  2399  	OldAdmin common.Address
  2400  	NewAdmin common.Address
  2401  	Raw      types.Log // Blockchain specific contextual infos
  2402  }
  2403  
  2404  // FilterNewAdmin is a free log retrieval operation binding the contract event 0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc.
  2405  //
  2406  // Solidity: event NewAdmin(address oldAdmin, address newAdmin)
  2407  func (_CToken *CTokenFilterer) FilterNewAdmin(opts *bind.FilterOpts) (*CTokenNewAdminIterator, error) {
  2408  
  2409  	logs, sub, err := _CToken.contract.FilterLogs(opts, "NewAdmin")
  2410  	if err != nil {
  2411  		return nil, err
  2412  	}
  2413  	return &CTokenNewAdminIterator{contract: _CToken.contract, event: "NewAdmin", logs: logs, sub: sub}, nil
  2414  }
  2415  
  2416  // WatchNewAdmin is a free log subscription operation binding the contract event 0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc.
  2417  //
  2418  // Solidity: event NewAdmin(address oldAdmin, address newAdmin)
  2419  func (_CToken *CTokenFilterer) WatchNewAdmin(opts *bind.WatchOpts, sink chan<- *CTokenNewAdmin) (event.Subscription, error) {
  2420  
  2421  	logs, sub, err := _CToken.contract.WatchLogs(opts, "NewAdmin")
  2422  	if err != nil {
  2423  		return nil, err
  2424  	}
  2425  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2426  		defer sub.Unsubscribe()
  2427  		for {
  2428  			select {
  2429  			case log := <-logs:
  2430  				// New log arrived, parse the event and forward to the user
  2431  				event := new(CTokenNewAdmin)
  2432  				if err := _CToken.contract.UnpackLog(event, "NewAdmin", log); err != nil {
  2433  					return err
  2434  				}
  2435  				event.Raw = log
  2436  
  2437  				select {
  2438  				case sink <- event:
  2439  				case err := <-sub.Err():
  2440  					return err
  2441  				case <-quit:
  2442  					return nil
  2443  				}
  2444  			case err := <-sub.Err():
  2445  				return err
  2446  			case <-quit:
  2447  				return nil
  2448  			}
  2449  		}
  2450  	}), nil
  2451  }
  2452  
  2453  // ParseNewAdmin is a log parse operation binding the contract event 0xf9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc.
  2454  //
  2455  // Solidity: event NewAdmin(address oldAdmin, address newAdmin)
  2456  func (_CToken *CTokenFilterer) ParseNewAdmin(log types.Log) (*CTokenNewAdmin, error) {
  2457  	event := new(CTokenNewAdmin)
  2458  	if err := _CToken.contract.UnpackLog(event, "NewAdmin", log); err != nil {
  2459  		return nil, err
  2460  	}
  2461  	return event, nil
  2462  }
  2463  
  2464  // CTokenNewComptrollerIterator is returned from FilterNewComptroller and is used to iterate over the raw logs and unpacked data for NewComptroller events raised by the CToken contract.
  2465  type CTokenNewComptrollerIterator struct {
  2466  	Event *CTokenNewComptroller // Event containing the contract specifics and raw log
  2467  
  2468  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2469  	event    string              // Event name to use for unpacking event data
  2470  
  2471  	logs chan types.Log        // Log channel receiving the found contract events
  2472  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2473  	done bool                  // Whether the subscription completed delivering logs
  2474  	fail error                 // Occurred error to stop iteration
  2475  }
  2476  
  2477  // Next advances the iterator to the subsequent event, returning whether there
  2478  // are any more events found. In case of a retrieval or parsing error, false is
  2479  // returned and Error() can be queried for the exact failure.
  2480  func (it *CTokenNewComptrollerIterator) Next() bool {
  2481  	// If the iterator failed, stop iterating
  2482  	if it.fail != nil {
  2483  		return false
  2484  	}
  2485  	// If the iterator completed, deliver directly whatever's available
  2486  	if it.done {
  2487  		select {
  2488  		case log := <-it.logs:
  2489  			it.Event = new(CTokenNewComptroller)
  2490  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2491  				it.fail = err
  2492  				return false
  2493  			}
  2494  			it.Event.Raw = log
  2495  			return true
  2496  
  2497  		default:
  2498  			return false
  2499  		}
  2500  	}
  2501  	// Iterator still in progress, wait for either a data or an error event
  2502  	select {
  2503  	case log := <-it.logs:
  2504  		it.Event = new(CTokenNewComptroller)
  2505  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2506  			it.fail = err
  2507  			return false
  2508  		}
  2509  		it.Event.Raw = log
  2510  		return true
  2511  
  2512  	case err := <-it.sub.Err():
  2513  		it.done = true
  2514  		it.fail = err
  2515  		return it.Next()
  2516  	}
  2517  }
  2518  
  2519  // Error returns any retrieval or parsing error occurred during filtering.
  2520  func (it *CTokenNewComptrollerIterator) Error() error {
  2521  	return it.fail
  2522  }
  2523  
  2524  // Close terminates the iteration process, releasing any pending underlying
  2525  // resources.
  2526  func (it *CTokenNewComptrollerIterator) Close() error {
  2527  	it.sub.Unsubscribe()
  2528  	return nil
  2529  }
  2530  
  2531  // CTokenNewComptroller represents a NewComptroller event raised by the CToken contract.
  2532  type CTokenNewComptroller struct {
  2533  	OldComptroller common.Address
  2534  	NewComptroller common.Address
  2535  	Raw            types.Log // Blockchain specific contextual infos
  2536  }
  2537  
  2538  // FilterNewComptroller is a free log retrieval operation binding the contract event 0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d.
  2539  //
  2540  // Solidity: event NewComptroller(address oldComptroller, address newComptroller)
  2541  func (_CToken *CTokenFilterer) FilterNewComptroller(opts *bind.FilterOpts) (*CTokenNewComptrollerIterator, error) {
  2542  
  2543  	logs, sub, err := _CToken.contract.FilterLogs(opts, "NewComptroller")
  2544  	if err != nil {
  2545  		return nil, err
  2546  	}
  2547  	return &CTokenNewComptrollerIterator{contract: _CToken.contract, event: "NewComptroller", logs: logs, sub: sub}, nil
  2548  }
  2549  
  2550  // WatchNewComptroller is a free log subscription operation binding the contract event 0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d.
  2551  //
  2552  // Solidity: event NewComptroller(address oldComptroller, address newComptroller)
  2553  func (_CToken *CTokenFilterer) WatchNewComptroller(opts *bind.WatchOpts, sink chan<- *CTokenNewComptroller) (event.Subscription, error) {
  2554  
  2555  	logs, sub, err := _CToken.contract.WatchLogs(opts, "NewComptroller")
  2556  	if err != nil {
  2557  		return nil, err
  2558  	}
  2559  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2560  		defer sub.Unsubscribe()
  2561  		for {
  2562  			select {
  2563  			case log := <-logs:
  2564  				// New log arrived, parse the event and forward to the user
  2565  				event := new(CTokenNewComptroller)
  2566  				if err := _CToken.contract.UnpackLog(event, "NewComptroller", log); err != nil {
  2567  					return err
  2568  				}
  2569  				event.Raw = log
  2570  
  2571  				select {
  2572  				case sink <- event:
  2573  				case err := <-sub.Err():
  2574  					return err
  2575  				case <-quit:
  2576  					return nil
  2577  				}
  2578  			case err := <-sub.Err():
  2579  				return err
  2580  			case <-quit:
  2581  				return nil
  2582  			}
  2583  		}
  2584  	}), nil
  2585  }
  2586  
  2587  // ParseNewComptroller is a log parse operation binding the contract event 0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d.
  2588  //
  2589  // Solidity: event NewComptroller(address oldComptroller, address newComptroller)
  2590  func (_CToken *CTokenFilterer) ParseNewComptroller(log types.Log) (*CTokenNewComptroller, error) {
  2591  	event := new(CTokenNewComptroller)
  2592  	if err := _CToken.contract.UnpackLog(event, "NewComptroller", log); err != nil {
  2593  		return nil, err
  2594  	}
  2595  	return event, nil
  2596  }
  2597  
  2598  // CTokenNewImplementationIterator is returned from FilterNewImplementation and is used to iterate over the raw logs and unpacked data for NewImplementation events raised by the CToken contract.
  2599  type CTokenNewImplementationIterator struct {
  2600  	Event *CTokenNewImplementation // Event containing the contract specifics and raw log
  2601  
  2602  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2603  	event    string              // Event name to use for unpacking event data
  2604  
  2605  	logs chan types.Log        // Log channel receiving the found contract events
  2606  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2607  	done bool                  // Whether the subscription completed delivering logs
  2608  	fail error                 // Occurred error to stop iteration
  2609  }
  2610  
  2611  // Next advances the iterator to the subsequent event, returning whether there
  2612  // are any more events found. In case of a retrieval or parsing error, false is
  2613  // returned and Error() can be queried for the exact failure.
  2614  func (it *CTokenNewImplementationIterator) Next() bool {
  2615  	// If the iterator failed, stop iterating
  2616  	if it.fail != nil {
  2617  		return false
  2618  	}
  2619  	// If the iterator completed, deliver directly whatever's available
  2620  	if it.done {
  2621  		select {
  2622  		case log := <-it.logs:
  2623  			it.Event = new(CTokenNewImplementation)
  2624  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2625  				it.fail = err
  2626  				return false
  2627  			}
  2628  			it.Event.Raw = log
  2629  			return true
  2630  
  2631  		default:
  2632  			return false
  2633  		}
  2634  	}
  2635  	// Iterator still in progress, wait for either a data or an error event
  2636  	select {
  2637  	case log := <-it.logs:
  2638  		it.Event = new(CTokenNewImplementation)
  2639  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2640  			it.fail = err
  2641  			return false
  2642  		}
  2643  		it.Event.Raw = log
  2644  		return true
  2645  
  2646  	case err := <-it.sub.Err():
  2647  		it.done = true
  2648  		it.fail = err
  2649  		return it.Next()
  2650  	}
  2651  }
  2652  
  2653  // Error returns any retrieval or parsing error occurred during filtering.
  2654  func (it *CTokenNewImplementationIterator) Error() error {
  2655  	return it.fail
  2656  }
  2657  
  2658  // Close terminates the iteration process, releasing any pending underlying
  2659  // resources.
  2660  func (it *CTokenNewImplementationIterator) Close() error {
  2661  	it.sub.Unsubscribe()
  2662  	return nil
  2663  }
  2664  
  2665  // CTokenNewImplementation represents a NewImplementation event raised by the CToken contract.
  2666  type CTokenNewImplementation struct {
  2667  	OldImplementation common.Address
  2668  	NewImplementation common.Address
  2669  	Raw               types.Log // Blockchain specific contextual infos
  2670  }
  2671  
  2672  // FilterNewImplementation is a free log retrieval operation binding the contract event 0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a.
  2673  //
  2674  // Solidity: event NewImplementation(address oldImplementation, address newImplementation)
  2675  func (_CToken *CTokenFilterer) FilterNewImplementation(opts *bind.FilterOpts) (*CTokenNewImplementationIterator, error) {
  2676  
  2677  	logs, sub, err := _CToken.contract.FilterLogs(opts, "NewImplementation")
  2678  	if err != nil {
  2679  		return nil, err
  2680  	}
  2681  	return &CTokenNewImplementationIterator{contract: _CToken.contract, event: "NewImplementation", logs: logs, sub: sub}, nil
  2682  }
  2683  
  2684  // WatchNewImplementation is a free log subscription operation binding the contract event 0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a.
  2685  //
  2686  // Solidity: event NewImplementation(address oldImplementation, address newImplementation)
  2687  func (_CToken *CTokenFilterer) WatchNewImplementation(opts *bind.WatchOpts, sink chan<- *CTokenNewImplementation) (event.Subscription, error) {
  2688  
  2689  	logs, sub, err := _CToken.contract.WatchLogs(opts, "NewImplementation")
  2690  	if err != nil {
  2691  		return nil, err
  2692  	}
  2693  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2694  		defer sub.Unsubscribe()
  2695  		for {
  2696  			select {
  2697  			case log := <-logs:
  2698  				// New log arrived, parse the event and forward to the user
  2699  				event := new(CTokenNewImplementation)
  2700  				if err := _CToken.contract.UnpackLog(event, "NewImplementation", log); err != nil {
  2701  					return err
  2702  				}
  2703  				event.Raw = log
  2704  
  2705  				select {
  2706  				case sink <- event:
  2707  				case err := <-sub.Err():
  2708  					return err
  2709  				case <-quit:
  2710  					return nil
  2711  				}
  2712  			case err := <-sub.Err():
  2713  				return err
  2714  			case <-quit:
  2715  				return nil
  2716  			}
  2717  		}
  2718  	}), nil
  2719  }
  2720  
  2721  // ParseNewImplementation is a log parse operation binding the contract event 0xd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a.
  2722  //
  2723  // Solidity: event NewImplementation(address oldImplementation, address newImplementation)
  2724  func (_CToken *CTokenFilterer) ParseNewImplementation(log types.Log) (*CTokenNewImplementation, error) {
  2725  	event := new(CTokenNewImplementation)
  2726  	if err := _CToken.contract.UnpackLog(event, "NewImplementation", log); err != nil {
  2727  		return nil, err
  2728  	}
  2729  	return event, nil
  2730  }
  2731  
  2732  // CTokenNewMarketInterestRateModelIterator is returned from FilterNewMarketInterestRateModel and is used to iterate over the raw logs and unpacked data for NewMarketInterestRateModel events raised by the CToken contract.
  2733  type CTokenNewMarketInterestRateModelIterator struct {
  2734  	Event *CTokenNewMarketInterestRateModel // Event containing the contract specifics and raw log
  2735  
  2736  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2737  	event    string              // Event name to use for unpacking event data
  2738  
  2739  	logs chan types.Log        // Log channel receiving the found contract events
  2740  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2741  	done bool                  // Whether the subscription completed delivering logs
  2742  	fail error                 // Occurred error to stop iteration
  2743  }
  2744  
  2745  // Next advances the iterator to the subsequent event, returning whether there
  2746  // are any more events found. In case of a retrieval or parsing error, false is
  2747  // returned and Error() can be queried for the exact failure.
  2748  func (it *CTokenNewMarketInterestRateModelIterator) Next() bool {
  2749  	// If the iterator failed, stop iterating
  2750  	if it.fail != nil {
  2751  		return false
  2752  	}
  2753  	// If the iterator completed, deliver directly whatever's available
  2754  	if it.done {
  2755  		select {
  2756  		case log := <-it.logs:
  2757  			it.Event = new(CTokenNewMarketInterestRateModel)
  2758  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2759  				it.fail = err
  2760  				return false
  2761  			}
  2762  			it.Event.Raw = log
  2763  			return true
  2764  
  2765  		default:
  2766  			return false
  2767  		}
  2768  	}
  2769  	// Iterator still in progress, wait for either a data or an error event
  2770  	select {
  2771  	case log := <-it.logs:
  2772  		it.Event = new(CTokenNewMarketInterestRateModel)
  2773  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2774  			it.fail = err
  2775  			return false
  2776  		}
  2777  		it.Event.Raw = log
  2778  		return true
  2779  
  2780  	case err := <-it.sub.Err():
  2781  		it.done = true
  2782  		it.fail = err
  2783  		return it.Next()
  2784  	}
  2785  }
  2786  
  2787  // Error returns any retrieval or parsing error occurred during filtering.
  2788  func (it *CTokenNewMarketInterestRateModelIterator) Error() error {
  2789  	return it.fail
  2790  }
  2791  
  2792  // Close terminates the iteration process, releasing any pending underlying
  2793  // resources.
  2794  func (it *CTokenNewMarketInterestRateModelIterator) Close() error {
  2795  	it.sub.Unsubscribe()
  2796  	return nil
  2797  }
  2798  
  2799  // CTokenNewMarketInterestRateModel represents a NewMarketInterestRateModel event raised by the CToken contract.
  2800  type CTokenNewMarketInterestRateModel struct {
  2801  	OldInterestRateModel common.Address
  2802  	NewInterestRateModel common.Address
  2803  	Raw                  types.Log // Blockchain specific contextual infos
  2804  }
  2805  
  2806  // FilterNewMarketInterestRateModel is a free log retrieval operation binding the contract event 0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926.
  2807  //
  2808  // Solidity: event NewMarketInterestRateModel(address oldInterestRateModel, address newInterestRateModel)
  2809  func (_CToken *CTokenFilterer) FilterNewMarketInterestRateModel(opts *bind.FilterOpts) (*CTokenNewMarketInterestRateModelIterator, error) {
  2810  
  2811  	logs, sub, err := _CToken.contract.FilterLogs(opts, "NewMarketInterestRateModel")
  2812  	if err != nil {
  2813  		return nil, err
  2814  	}
  2815  	return &CTokenNewMarketInterestRateModelIterator{contract: _CToken.contract, event: "NewMarketInterestRateModel", logs: logs, sub: sub}, nil
  2816  }
  2817  
  2818  // WatchNewMarketInterestRateModel is a free log subscription operation binding the contract event 0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926.
  2819  //
  2820  // Solidity: event NewMarketInterestRateModel(address oldInterestRateModel, address newInterestRateModel)
  2821  func (_CToken *CTokenFilterer) WatchNewMarketInterestRateModel(opts *bind.WatchOpts, sink chan<- *CTokenNewMarketInterestRateModel) (event.Subscription, error) {
  2822  
  2823  	logs, sub, err := _CToken.contract.WatchLogs(opts, "NewMarketInterestRateModel")
  2824  	if err != nil {
  2825  		return nil, err
  2826  	}
  2827  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2828  		defer sub.Unsubscribe()
  2829  		for {
  2830  			select {
  2831  			case log := <-logs:
  2832  				// New log arrived, parse the event and forward to the user
  2833  				event := new(CTokenNewMarketInterestRateModel)
  2834  				if err := _CToken.contract.UnpackLog(event, "NewMarketInterestRateModel", log); err != nil {
  2835  					return err
  2836  				}
  2837  				event.Raw = log
  2838  
  2839  				select {
  2840  				case sink <- event:
  2841  				case err := <-sub.Err():
  2842  					return err
  2843  				case <-quit:
  2844  					return nil
  2845  				}
  2846  			case err := <-sub.Err():
  2847  				return err
  2848  			case <-quit:
  2849  				return nil
  2850  			}
  2851  		}
  2852  	}), nil
  2853  }
  2854  
  2855  // ParseNewMarketInterestRateModel is a log parse operation binding the contract event 0xedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926.
  2856  //
  2857  // Solidity: event NewMarketInterestRateModel(address oldInterestRateModel, address newInterestRateModel)
  2858  func (_CToken *CTokenFilterer) ParseNewMarketInterestRateModel(log types.Log) (*CTokenNewMarketInterestRateModel, error) {
  2859  	event := new(CTokenNewMarketInterestRateModel)
  2860  	if err := _CToken.contract.UnpackLog(event, "NewMarketInterestRateModel", log); err != nil {
  2861  		return nil, err
  2862  	}
  2863  	return event, nil
  2864  }
  2865  
  2866  // CTokenNewPendingAdminIterator is returned from FilterNewPendingAdmin and is used to iterate over the raw logs and unpacked data for NewPendingAdmin events raised by the CToken contract.
  2867  type CTokenNewPendingAdminIterator struct {
  2868  	Event *CTokenNewPendingAdmin // Event containing the contract specifics and raw log
  2869  
  2870  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2871  	event    string              // Event name to use for unpacking event data
  2872  
  2873  	logs chan types.Log        // Log channel receiving the found contract events
  2874  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2875  	done bool                  // Whether the subscription completed delivering logs
  2876  	fail error                 // Occurred error to stop iteration
  2877  }
  2878  
  2879  // Next advances the iterator to the subsequent event, returning whether there
  2880  // are any more events found. In case of a retrieval or parsing error, false is
  2881  // returned and Error() can be queried for the exact failure.
  2882  func (it *CTokenNewPendingAdminIterator) Next() bool {
  2883  	// If the iterator failed, stop iterating
  2884  	if it.fail != nil {
  2885  		return false
  2886  	}
  2887  	// If the iterator completed, deliver directly whatever's available
  2888  	if it.done {
  2889  		select {
  2890  		case log := <-it.logs:
  2891  			it.Event = new(CTokenNewPendingAdmin)
  2892  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2893  				it.fail = err
  2894  				return false
  2895  			}
  2896  			it.Event.Raw = log
  2897  			return true
  2898  
  2899  		default:
  2900  			return false
  2901  		}
  2902  	}
  2903  	// Iterator still in progress, wait for either a data or an error event
  2904  	select {
  2905  	case log := <-it.logs:
  2906  		it.Event = new(CTokenNewPendingAdmin)
  2907  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2908  			it.fail = err
  2909  			return false
  2910  		}
  2911  		it.Event.Raw = log
  2912  		return true
  2913  
  2914  	case err := <-it.sub.Err():
  2915  		it.done = true
  2916  		it.fail = err
  2917  		return it.Next()
  2918  	}
  2919  }
  2920  
  2921  // Error returns any retrieval or parsing error occurred during filtering.
  2922  func (it *CTokenNewPendingAdminIterator) Error() error {
  2923  	return it.fail
  2924  }
  2925  
  2926  // Close terminates the iteration process, releasing any pending underlying
  2927  // resources.
  2928  func (it *CTokenNewPendingAdminIterator) Close() error {
  2929  	it.sub.Unsubscribe()
  2930  	return nil
  2931  }
  2932  
  2933  // CTokenNewPendingAdmin represents a NewPendingAdmin event raised by the CToken contract.
  2934  type CTokenNewPendingAdmin struct {
  2935  	OldPendingAdmin common.Address
  2936  	NewPendingAdmin common.Address
  2937  	Raw             types.Log // Blockchain specific contextual infos
  2938  }
  2939  
  2940  // FilterNewPendingAdmin is a free log retrieval operation binding the contract event 0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9.
  2941  //
  2942  // Solidity: event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin)
  2943  func (_CToken *CTokenFilterer) FilterNewPendingAdmin(opts *bind.FilterOpts) (*CTokenNewPendingAdminIterator, error) {
  2944  
  2945  	logs, sub, err := _CToken.contract.FilterLogs(opts, "NewPendingAdmin")
  2946  	if err != nil {
  2947  		return nil, err
  2948  	}
  2949  	return &CTokenNewPendingAdminIterator{contract: _CToken.contract, event: "NewPendingAdmin", logs: logs, sub: sub}, nil
  2950  }
  2951  
  2952  // WatchNewPendingAdmin is a free log subscription operation binding the contract event 0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9.
  2953  //
  2954  // Solidity: event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin)
  2955  func (_CToken *CTokenFilterer) WatchNewPendingAdmin(opts *bind.WatchOpts, sink chan<- *CTokenNewPendingAdmin) (event.Subscription, error) {
  2956  
  2957  	logs, sub, err := _CToken.contract.WatchLogs(opts, "NewPendingAdmin")
  2958  	if err != nil {
  2959  		return nil, err
  2960  	}
  2961  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2962  		defer sub.Unsubscribe()
  2963  		for {
  2964  			select {
  2965  			case log := <-logs:
  2966  				// New log arrived, parse the event and forward to the user
  2967  				event := new(CTokenNewPendingAdmin)
  2968  				if err := _CToken.contract.UnpackLog(event, "NewPendingAdmin", log); err != nil {
  2969  					return err
  2970  				}
  2971  				event.Raw = log
  2972  
  2973  				select {
  2974  				case sink <- event:
  2975  				case err := <-sub.Err():
  2976  					return err
  2977  				case <-quit:
  2978  					return nil
  2979  				}
  2980  			case err := <-sub.Err():
  2981  				return err
  2982  			case <-quit:
  2983  				return nil
  2984  			}
  2985  		}
  2986  	}), nil
  2987  }
  2988  
  2989  // ParseNewPendingAdmin is a log parse operation binding the contract event 0xca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9.
  2990  //
  2991  // Solidity: event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin)
  2992  func (_CToken *CTokenFilterer) ParseNewPendingAdmin(log types.Log) (*CTokenNewPendingAdmin, error) {
  2993  	event := new(CTokenNewPendingAdmin)
  2994  	if err := _CToken.contract.UnpackLog(event, "NewPendingAdmin", log); err != nil {
  2995  		return nil, err
  2996  	}
  2997  	return event, nil
  2998  }
  2999  
  3000  // CTokenNewReserveFactorIterator is returned from FilterNewReserveFactor and is used to iterate over the raw logs and unpacked data for NewReserveFactor events raised by the CToken contract.
  3001  type CTokenNewReserveFactorIterator struct {
  3002  	Event *CTokenNewReserveFactor // Event containing the contract specifics and raw log
  3003  
  3004  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3005  	event    string              // Event name to use for unpacking event data
  3006  
  3007  	logs chan types.Log        // Log channel receiving the found contract events
  3008  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3009  	done bool                  // Whether the subscription completed delivering logs
  3010  	fail error                 // Occurred error to stop iteration
  3011  }
  3012  
  3013  // Next advances the iterator to the subsequent event, returning whether there
  3014  // are any more events found. In case of a retrieval or parsing error, false is
  3015  // returned and Error() can be queried for the exact failure.
  3016  func (it *CTokenNewReserveFactorIterator) Next() bool {
  3017  	// If the iterator failed, stop iterating
  3018  	if it.fail != nil {
  3019  		return false
  3020  	}
  3021  	// If the iterator completed, deliver directly whatever's available
  3022  	if it.done {
  3023  		select {
  3024  		case log := <-it.logs:
  3025  			it.Event = new(CTokenNewReserveFactor)
  3026  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3027  				it.fail = err
  3028  				return false
  3029  			}
  3030  			it.Event.Raw = log
  3031  			return true
  3032  
  3033  		default:
  3034  			return false
  3035  		}
  3036  	}
  3037  	// Iterator still in progress, wait for either a data or an error event
  3038  	select {
  3039  	case log := <-it.logs:
  3040  		it.Event = new(CTokenNewReserveFactor)
  3041  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3042  			it.fail = err
  3043  			return false
  3044  		}
  3045  		it.Event.Raw = log
  3046  		return true
  3047  
  3048  	case err := <-it.sub.Err():
  3049  		it.done = true
  3050  		it.fail = err
  3051  		return it.Next()
  3052  	}
  3053  }
  3054  
  3055  // Error returns any retrieval or parsing error occurred during filtering.
  3056  func (it *CTokenNewReserveFactorIterator) Error() error {
  3057  	return it.fail
  3058  }
  3059  
  3060  // Close terminates the iteration process, releasing any pending underlying
  3061  // resources.
  3062  func (it *CTokenNewReserveFactorIterator) Close() error {
  3063  	it.sub.Unsubscribe()
  3064  	return nil
  3065  }
  3066  
  3067  // CTokenNewReserveFactor represents a NewReserveFactor event raised by the CToken contract.
  3068  type CTokenNewReserveFactor struct {
  3069  	OldReserveFactorMantissa *big.Int
  3070  	NewReserveFactorMantissa *big.Int
  3071  	Raw                      types.Log // Blockchain specific contextual infos
  3072  }
  3073  
  3074  // FilterNewReserveFactor is a free log retrieval operation binding the contract event 0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460.
  3075  //
  3076  // Solidity: event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa)
  3077  func (_CToken *CTokenFilterer) FilterNewReserveFactor(opts *bind.FilterOpts) (*CTokenNewReserveFactorIterator, error) {
  3078  
  3079  	logs, sub, err := _CToken.contract.FilterLogs(opts, "NewReserveFactor")
  3080  	if err != nil {
  3081  		return nil, err
  3082  	}
  3083  	return &CTokenNewReserveFactorIterator{contract: _CToken.contract, event: "NewReserveFactor", logs: logs, sub: sub}, nil
  3084  }
  3085  
  3086  // WatchNewReserveFactor is a free log subscription operation binding the contract event 0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460.
  3087  //
  3088  // Solidity: event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa)
  3089  func (_CToken *CTokenFilterer) WatchNewReserveFactor(opts *bind.WatchOpts, sink chan<- *CTokenNewReserveFactor) (event.Subscription, error) {
  3090  
  3091  	logs, sub, err := _CToken.contract.WatchLogs(opts, "NewReserveFactor")
  3092  	if err != nil {
  3093  		return nil, err
  3094  	}
  3095  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3096  		defer sub.Unsubscribe()
  3097  		for {
  3098  			select {
  3099  			case log := <-logs:
  3100  				// New log arrived, parse the event and forward to the user
  3101  				event := new(CTokenNewReserveFactor)
  3102  				if err := _CToken.contract.UnpackLog(event, "NewReserveFactor", log); err != nil {
  3103  					return err
  3104  				}
  3105  				event.Raw = log
  3106  
  3107  				select {
  3108  				case sink <- event:
  3109  				case err := <-sub.Err():
  3110  					return err
  3111  				case <-quit:
  3112  					return nil
  3113  				}
  3114  			case err := <-sub.Err():
  3115  				return err
  3116  			case <-quit:
  3117  				return nil
  3118  			}
  3119  		}
  3120  	}), nil
  3121  }
  3122  
  3123  // ParseNewReserveFactor is a log parse operation binding the contract event 0xaaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460.
  3124  //
  3125  // Solidity: event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa)
  3126  func (_CToken *CTokenFilterer) ParseNewReserveFactor(log types.Log) (*CTokenNewReserveFactor, error) {
  3127  	event := new(CTokenNewReserveFactor)
  3128  	if err := _CToken.contract.UnpackLog(event, "NewReserveFactor", log); err != nil {
  3129  		return nil, err
  3130  	}
  3131  	return event, nil
  3132  }
  3133  
  3134  // CTokenRedeemIterator is returned from FilterRedeem and is used to iterate over the raw logs and unpacked data for Redeem events raised by the CToken contract.
  3135  type CTokenRedeemIterator struct {
  3136  	Event *CTokenRedeem // Event containing the contract specifics and raw log
  3137  
  3138  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3139  	event    string              // Event name to use for unpacking event data
  3140  
  3141  	logs chan types.Log        // Log channel receiving the found contract events
  3142  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3143  	done bool                  // Whether the subscription completed delivering logs
  3144  	fail error                 // Occurred error to stop iteration
  3145  }
  3146  
  3147  // Next advances the iterator to the subsequent event, returning whether there
  3148  // are any more events found. In case of a retrieval or parsing error, false is
  3149  // returned and Error() can be queried for the exact failure.
  3150  func (it *CTokenRedeemIterator) Next() bool {
  3151  	// If the iterator failed, stop iterating
  3152  	if it.fail != nil {
  3153  		return false
  3154  	}
  3155  	// If the iterator completed, deliver directly whatever's available
  3156  	if it.done {
  3157  		select {
  3158  		case log := <-it.logs:
  3159  			it.Event = new(CTokenRedeem)
  3160  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3161  				it.fail = err
  3162  				return false
  3163  			}
  3164  			it.Event.Raw = log
  3165  			return true
  3166  
  3167  		default:
  3168  			return false
  3169  		}
  3170  	}
  3171  	// Iterator still in progress, wait for either a data or an error event
  3172  	select {
  3173  	case log := <-it.logs:
  3174  		it.Event = new(CTokenRedeem)
  3175  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3176  			it.fail = err
  3177  			return false
  3178  		}
  3179  		it.Event.Raw = log
  3180  		return true
  3181  
  3182  	case err := <-it.sub.Err():
  3183  		it.done = true
  3184  		it.fail = err
  3185  		return it.Next()
  3186  	}
  3187  }
  3188  
  3189  // Error returns any retrieval or parsing error occurred during filtering.
  3190  func (it *CTokenRedeemIterator) Error() error {
  3191  	return it.fail
  3192  }
  3193  
  3194  // Close terminates the iteration process, releasing any pending underlying
  3195  // resources.
  3196  func (it *CTokenRedeemIterator) Close() error {
  3197  	it.sub.Unsubscribe()
  3198  	return nil
  3199  }
  3200  
  3201  // CTokenRedeem represents a Redeem event raised by the CToken contract.
  3202  type CTokenRedeem struct {
  3203  	Redeemer     common.Address
  3204  	RedeemAmount *big.Int
  3205  	RedeemTokens *big.Int
  3206  	Raw          types.Log // Blockchain specific contextual infos
  3207  }
  3208  
  3209  // FilterRedeem is a free log retrieval operation binding the contract event 0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929.
  3210  //
  3211  // Solidity: event Redeem(address redeemer, uint256 redeemAmount, uint256 redeemTokens)
  3212  func (_CToken *CTokenFilterer) FilterRedeem(opts *bind.FilterOpts) (*CTokenRedeemIterator, error) {
  3213  
  3214  	logs, sub, err := _CToken.contract.FilterLogs(opts, "Redeem")
  3215  	if err != nil {
  3216  		return nil, err
  3217  	}
  3218  	return &CTokenRedeemIterator{contract: _CToken.contract, event: "Redeem", logs: logs, sub: sub}, nil
  3219  }
  3220  
  3221  // WatchRedeem is a free log subscription operation binding the contract event 0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929.
  3222  //
  3223  // Solidity: event Redeem(address redeemer, uint256 redeemAmount, uint256 redeemTokens)
  3224  func (_CToken *CTokenFilterer) WatchRedeem(opts *bind.WatchOpts, sink chan<- *CTokenRedeem) (event.Subscription, error) {
  3225  
  3226  	logs, sub, err := _CToken.contract.WatchLogs(opts, "Redeem")
  3227  	if err != nil {
  3228  		return nil, err
  3229  	}
  3230  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3231  		defer sub.Unsubscribe()
  3232  		for {
  3233  			select {
  3234  			case log := <-logs:
  3235  				// New log arrived, parse the event and forward to the user
  3236  				event := new(CTokenRedeem)
  3237  				if err := _CToken.contract.UnpackLog(event, "Redeem", log); err != nil {
  3238  					return err
  3239  				}
  3240  				event.Raw = log
  3241  
  3242  				select {
  3243  				case sink <- event:
  3244  				case err := <-sub.Err():
  3245  					return err
  3246  				case <-quit:
  3247  					return nil
  3248  				}
  3249  			case err := <-sub.Err():
  3250  				return err
  3251  			case <-quit:
  3252  				return nil
  3253  			}
  3254  		}
  3255  	}), nil
  3256  }
  3257  
  3258  // ParseRedeem is a log parse operation binding the contract event 0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929.
  3259  //
  3260  // Solidity: event Redeem(address redeemer, uint256 redeemAmount, uint256 redeemTokens)
  3261  func (_CToken *CTokenFilterer) ParseRedeem(log types.Log) (*CTokenRedeem, error) {
  3262  	event := new(CTokenRedeem)
  3263  	if err := _CToken.contract.UnpackLog(event, "Redeem", log); err != nil {
  3264  		return nil, err
  3265  	}
  3266  	return event, nil
  3267  }
  3268  
  3269  // CTokenRepayBorrowIterator is returned from FilterRepayBorrow and is used to iterate over the raw logs and unpacked data for RepayBorrow events raised by the CToken contract.
  3270  type CTokenRepayBorrowIterator struct {
  3271  	Event *CTokenRepayBorrow // Event containing the contract specifics and raw log
  3272  
  3273  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3274  	event    string              // Event name to use for unpacking event data
  3275  
  3276  	logs chan types.Log        // Log channel receiving the found contract events
  3277  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3278  	done bool                  // Whether the subscription completed delivering logs
  3279  	fail error                 // Occurred error to stop iteration
  3280  }
  3281  
  3282  // Next advances the iterator to the subsequent event, returning whether there
  3283  // are any more events found. In case of a retrieval or parsing error, false is
  3284  // returned and Error() can be queried for the exact failure.
  3285  func (it *CTokenRepayBorrowIterator) Next() bool {
  3286  	// If the iterator failed, stop iterating
  3287  	if it.fail != nil {
  3288  		return false
  3289  	}
  3290  	// If the iterator completed, deliver directly whatever's available
  3291  	if it.done {
  3292  		select {
  3293  		case log := <-it.logs:
  3294  			it.Event = new(CTokenRepayBorrow)
  3295  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3296  				it.fail = err
  3297  				return false
  3298  			}
  3299  			it.Event.Raw = log
  3300  			return true
  3301  
  3302  		default:
  3303  			return false
  3304  		}
  3305  	}
  3306  	// Iterator still in progress, wait for either a data or an error event
  3307  	select {
  3308  	case log := <-it.logs:
  3309  		it.Event = new(CTokenRepayBorrow)
  3310  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3311  			it.fail = err
  3312  			return false
  3313  		}
  3314  		it.Event.Raw = log
  3315  		return true
  3316  
  3317  	case err := <-it.sub.Err():
  3318  		it.done = true
  3319  		it.fail = err
  3320  		return it.Next()
  3321  	}
  3322  }
  3323  
  3324  // Error returns any retrieval or parsing error occurred during filtering.
  3325  func (it *CTokenRepayBorrowIterator) Error() error {
  3326  	return it.fail
  3327  }
  3328  
  3329  // Close terminates the iteration process, releasing any pending underlying
  3330  // resources.
  3331  func (it *CTokenRepayBorrowIterator) Close() error {
  3332  	it.sub.Unsubscribe()
  3333  	return nil
  3334  }
  3335  
  3336  // CTokenRepayBorrow represents a RepayBorrow event raised by the CToken contract.
  3337  type CTokenRepayBorrow struct {
  3338  	Payer          common.Address
  3339  	Borrower       common.Address
  3340  	RepayAmount    *big.Int
  3341  	AccountBorrows *big.Int
  3342  	TotalBorrows   *big.Int
  3343  	Raw            types.Log // Blockchain specific contextual infos
  3344  }
  3345  
  3346  // FilterRepayBorrow is a free log retrieval operation binding the contract event 0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1.
  3347  //
  3348  // Solidity: event RepayBorrow(address payer, address borrower, uint256 repayAmount, uint256 accountBorrows, uint256 totalBorrows)
  3349  func (_CToken *CTokenFilterer) FilterRepayBorrow(opts *bind.FilterOpts) (*CTokenRepayBorrowIterator, error) {
  3350  
  3351  	logs, sub, err := _CToken.contract.FilterLogs(opts, "RepayBorrow")
  3352  	if err != nil {
  3353  		return nil, err
  3354  	}
  3355  	return &CTokenRepayBorrowIterator{contract: _CToken.contract, event: "RepayBorrow", logs: logs, sub: sub}, nil
  3356  }
  3357  
  3358  // WatchRepayBorrow is a free log subscription operation binding the contract event 0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1.
  3359  //
  3360  // Solidity: event RepayBorrow(address payer, address borrower, uint256 repayAmount, uint256 accountBorrows, uint256 totalBorrows)
  3361  func (_CToken *CTokenFilterer) WatchRepayBorrow(opts *bind.WatchOpts, sink chan<- *CTokenRepayBorrow) (event.Subscription, error) {
  3362  
  3363  	logs, sub, err := _CToken.contract.WatchLogs(opts, "RepayBorrow")
  3364  	if err != nil {
  3365  		return nil, err
  3366  	}
  3367  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3368  		defer sub.Unsubscribe()
  3369  		for {
  3370  			select {
  3371  			case log := <-logs:
  3372  				// New log arrived, parse the event and forward to the user
  3373  				event := new(CTokenRepayBorrow)
  3374  				if err := _CToken.contract.UnpackLog(event, "RepayBorrow", log); err != nil {
  3375  					return err
  3376  				}
  3377  				event.Raw = log
  3378  
  3379  				select {
  3380  				case sink <- event:
  3381  				case err := <-sub.Err():
  3382  					return err
  3383  				case <-quit:
  3384  					return nil
  3385  				}
  3386  			case err := <-sub.Err():
  3387  				return err
  3388  			case <-quit:
  3389  				return nil
  3390  			}
  3391  		}
  3392  	}), nil
  3393  }
  3394  
  3395  // ParseRepayBorrow is a log parse operation binding the contract event 0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1.
  3396  //
  3397  // Solidity: event RepayBorrow(address payer, address borrower, uint256 repayAmount, uint256 accountBorrows, uint256 totalBorrows)
  3398  func (_CToken *CTokenFilterer) ParseRepayBorrow(log types.Log) (*CTokenRepayBorrow, error) {
  3399  	event := new(CTokenRepayBorrow)
  3400  	if err := _CToken.contract.UnpackLog(event, "RepayBorrow", log); err != nil {
  3401  		return nil, err
  3402  	}
  3403  	return event, nil
  3404  }
  3405  
  3406  // CTokenReservesAddedIterator is returned from FilterReservesAdded and is used to iterate over the raw logs and unpacked data for ReservesAdded events raised by the CToken contract.
  3407  type CTokenReservesAddedIterator struct {
  3408  	Event *CTokenReservesAdded // Event containing the contract specifics and raw log
  3409  
  3410  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3411  	event    string              // Event name to use for unpacking event data
  3412  
  3413  	logs chan types.Log        // Log channel receiving the found contract events
  3414  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3415  	done bool                  // Whether the subscription completed delivering logs
  3416  	fail error                 // Occurred error to stop iteration
  3417  }
  3418  
  3419  // Next advances the iterator to the subsequent event, returning whether there
  3420  // are any more events found. In case of a retrieval or parsing error, false is
  3421  // returned and Error() can be queried for the exact failure.
  3422  func (it *CTokenReservesAddedIterator) Next() bool {
  3423  	// If the iterator failed, stop iterating
  3424  	if it.fail != nil {
  3425  		return false
  3426  	}
  3427  	// If the iterator completed, deliver directly whatever's available
  3428  	if it.done {
  3429  		select {
  3430  		case log := <-it.logs:
  3431  			it.Event = new(CTokenReservesAdded)
  3432  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3433  				it.fail = err
  3434  				return false
  3435  			}
  3436  			it.Event.Raw = log
  3437  			return true
  3438  
  3439  		default:
  3440  			return false
  3441  		}
  3442  	}
  3443  	// Iterator still in progress, wait for either a data or an error event
  3444  	select {
  3445  	case log := <-it.logs:
  3446  		it.Event = new(CTokenReservesAdded)
  3447  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3448  			it.fail = err
  3449  			return false
  3450  		}
  3451  		it.Event.Raw = log
  3452  		return true
  3453  
  3454  	case err := <-it.sub.Err():
  3455  		it.done = true
  3456  		it.fail = err
  3457  		return it.Next()
  3458  	}
  3459  }
  3460  
  3461  // Error returns any retrieval or parsing error occurred during filtering.
  3462  func (it *CTokenReservesAddedIterator) Error() error {
  3463  	return it.fail
  3464  }
  3465  
  3466  // Close terminates the iteration process, releasing any pending underlying
  3467  // resources.
  3468  func (it *CTokenReservesAddedIterator) Close() error {
  3469  	it.sub.Unsubscribe()
  3470  	return nil
  3471  }
  3472  
  3473  // CTokenReservesAdded represents a ReservesAdded event raised by the CToken contract.
  3474  type CTokenReservesAdded struct {
  3475  	Benefactor       common.Address
  3476  	AddAmount        *big.Int
  3477  	NewTotalReserves *big.Int
  3478  	Raw              types.Log // Blockchain specific contextual infos
  3479  }
  3480  
  3481  // FilterReservesAdded is a free log retrieval operation binding the contract event 0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5.
  3482  //
  3483  // Solidity: event ReservesAdded(address benefactor, uint256 addAmount, uint256 newTotalReserves)
  3484  func (_CToken *CTokenFilterer) FilterReservesAdded(opts *bind.FilterOpts) (*CTokenReservesAddedIterator, error) {
  3485  
  3486  	logs, sub, err := _CToken.contract.FilterLogs(opts, "ReservesAdded")
  3487  	if err != nil {
  3488  		return nil, err
  3489  	}
  3490  	return &CTokenReservesAddedIterator{contract: _CToken.contract, event: "ReservesAdded", logs: logs, sub: sub}, nil
  3491  }
  3492  
  3493  // WatchReservesAdded is a free log subscription operation binding the contract event 0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5.
  3494  //
  3495  // Solidity: event ReservesAdded(address benefactor, uint256 addAmount, uint256 newTotalReserves)
  3496  func (_CToken *CTokenFilterer) WatchReservesAdded(opts *bind.WatchOpts, sink chan<- *CTokenReservesAdded) (event.Subscription, error) {
  3497  
  3498  	logs, sub, err := _CToken.contract.WatchLogs(opts, "ReservesAdded")
  3499  	if err != nil {
  3500  		return nil, err
  3501  	}
  3502  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3503  		defer sub.Unsubscribe()
  3504  		for {
  3505  			select {
  3506  			case log := <-logs:
  3507  				// New log arrived, parse the event and forward to the user
  3508  				event := new(CTokenReservesAdded)
  3509  				if err := _CToken.contract.UnpackLog(event, "ReservesAdded", log); err != nil {
  3510  					return err
  3511  				}
  3512  				event.Raw = log
  3513  
  3514  				select {
  3515  				case sink <- event:
  3516  				case err := <-sub.Err():
  3517  					return err
  3518  				case <-quit:
  3519  					return nil
  3520  				}
  3521  			case err := <-sub.Err():
  3522  				return err
  3523  			case <-quit:
  3524  				return nil
  3525  			}
  3526  		}
  3527  	}), nil
  3528  }
  3529  
  3530  // ParseReservesAdded is a log parse operation binding the contract event 0xa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5.
  3531  //
  3532  // Solidity: event ReservesAdded(address benefactor, uint256 addAmount, uint256 newTotalReserves)
  3533  func (_CToken *CTokenFilterer) ParseReservesAdded(log types.Log) (*CTokenReservesAdded, error) {
  3534  	event := new(CTokenReservesAdded)
  3535  	if err := _CToken.contract.UnpackLog(event, "ReservesAdded", log); err != nil {
  3536  		return nil, err
  3537  	}
  3538  	return event, nil
  3539  }
  3540  
  3541  // CTokenReservesReducedIterator is returned from FilterReservesReduced and is used to iterate over the raw logs and unpacked data for ReservesReduced events raised by the CToken contract.
  3542  type CTokenReservesReducedIterator struct {
  3543  	Event *CTokenReservesReduced // Event containing the contract specifics and raw log
  3544  
  3545  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3546  	event    string              // Event name to use for unpacking event data
  3547  
  3548  	logs chan types.Log        // Log channel receiving the found contract events
  3549  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3550  	done bool                  // Whether the subscription completed delivering logs
  3551  	fail error                 // Occurred error to stop iteration
  3552  }
  3553  
  3554  // Next advances the iterator to the subsequent event, returning whether there
  3555  // are any more events found. In case of a retrieval or parsing error, false is
  3556  // returned and Error() can be queried for the exact failure.
  3557  func (it *CTokenReservesReducedIterator) Next() bool {
  3558  	// If the iterator failed, stop iterating
  3559  	if it.fail != nil {
  3560  		return false
  3561  	}
  3562  	// If the iterator completed, deliver directly whatever's available
  3563  	if it.done {
  3564  		select {
  3565  		case log := <-it.logs:
  3566  			it.Event = new(CTokenReservesReduced)
  3567  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3568  				it.fail = err
  3569  				return false
  3570  			}
  3571  			it.Event.Raw = log
  3572  			return true
  3573  
  3574  		default:
  3575  			return false
  3576  		}
  3577  	}
  3578  	// Iterator still in progress, wait for either a data or an error event
  3579  	select {
  3580  	case log := <-it.logs:
  3581  		it.Event = new(CTokenReservesReduced)
  3582  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3583  			it.fail = err
  3584  			return false
  3585  		}
  3586  		it.Event.Raw = log
  3587  		return true
  3588  
  3589  	case err := <-it.sub.Err():
  3590  		it.done = true
  3591  		it.fail = err
  3592  		return it.Next()
  3593  	}
  3594  }
  3595  
  3596  // Error returns any retrieval or parsing error occurred during filtering.
  3597  func (it *CTokenReservesReducedIterator) Error() error {
  3598  	return it.fail
  3599  }
  3600  
  3601  // Close terminates the iteration process, releasing any pending underlying
  3602  // resources.
  3603  func (it *CTokenReservesReducedIterator) Close() error {
  3604  	it.sub.Unsubscribe()
  3605  	return nil
  3606  }
  3607  
  3608  // CTokenReservesReduced represents a ReservesReduced event raised by the CToken contract.
  3609  type CTokenReservesReduced struct {
  3610  	Admin            common.Address
  3611  	ReduceAmount     *big.Int
  3612  	NewTotalReserves *big.Int
  3613  	Raw              types.Log // Blockchain specific contextual infos
  3614  }
  3615  
  3616  // FilterReservesReduced is a free log retrieval operation binding the contract event 0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e.
  3617  //
  3618  // Solidity: event ReservesReduced(address admin, uint256 reduceAmount, uint256 newTotalReserves)
  3619  func (_CToken *CTokenFilterer) FilterReservesReduced(opts *bind.FilterOpts) (*CTokenReservesReducedIterator, error) {
  3620  
  3621  	logs, sub, err := _CToken.contract.FilterLogs(opts, "ReservesReduced")
  3622  	if err != nil {
  3623  		return nil, err
  3624  	}
  3625  	return &CTokenReservesReducedIterator{contract: _CToken.contract, event: "ReservesReduced", logs: logs, sub: sub}, nil
  3626  }
  3627  
  3628  // WatchReservesReduced is a free log subscription operation binding the contract event 0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e.
  3629  //
  3630  // Solidity: event ReservesReduced(address admin, uint256 reduceAmount, uint256 newTotalReserves)
  3631  func (_CToken *CTokenFilterer) WatchReservesReduced(opts *bind.WatchOpts, sink chan<- *CTokenReservesReduced) (event.Subscription, error) {
  3632  
  3633  	logs, sub, err := _CToken.contract.WatchLogs(opts, "ReservesReduced")
  3634  	if err != nil {
  3635  		return nil, err
  3636  	}
  3637  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3638  		defer sub.Unsubscribe()
  3639  		for {
  3640  			select {
  3641  			case log := <-logs:
  3642  				// New log arrived, parse the event and forward to the user
  3643  				event := new(CTokenReservesReduced)
  3644  				if err := _CToken.contract.UnpackLog(event, "ReservesReduced", log); err != nil {
  3645  					return err
  3646  				}
  3647  				event.Raw = log
  3648  
  3649  				select {
  3650  				case sink <- event:
  3651  				case err := <-sub.Err():
  3652  					return err
  3653  				case <-quit:
  3654  					return nil
  3655  				}
  3656  			case err := <-sub.Err():
  3657  				return err
  3658  			case <-quit:
  3659  				return nil
  3660  			}
  3661  		}
  3662  	}), nil
  3663  }
  3664  
  3665  // ParseReservesReduced is a log parse operation binding the contract event 0x3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e.
  3666  //
  3667  // Solidity: event ReservesReduced(address admin, uint256 reduceAmount, uint256 newTotalReserves)
  3668  func (_CToken *CTokenFilterer) ParseReservesReduced(log types.Log) (*CTokenReservesReduced, error) {
  3669  	event := new(CTokenReservesReduced)
  3670  	if err := _CToken.contract.UnpackLog(event, "ReservesReduced", log); err != nil {
  3671  		return nil, err
  3672  	}
  3673  	return event, nil
  3674  }
  3675  
  3676  // CTokenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the CToken contract.
  3677  type CTokenTransferIterator struct {
  3678  	Event *CTokenTransfer // Event containing the contract specifics and raw log
  3679  
  3680  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3681  	event    string              // Event name to use for unpacking event data
  3682  
  3683  	logs chan types.Log        // Log channel receiving the found contract events
  3684  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3685  	done bool                  // Whether the subscription completed delivering logs
  3686  	fail error                 // Occurred error to stop iteration
  3687  }
  3688  
  3689  // Next advances the iterator to the subsequent event, returning whether there
  3690  // are any more events found. In case of a retrieval or parsing error, false is
  3691  // returned and Error() can be queried for the exact failure.
  3692  func (it *CTokenTransferIterator) Next() bool {
  3693  	// If the iterator failed, stop iterating
  3694  	if it.fail != nil {
  3695  		return false
  3696  	}
  3697  	// If the iterator completed, deliver directly whatever's available
  3698  	if it.done {
  3699  		select {
  3700  		case log := <-it.logs:
  3701  			it.Event = new(CTokenTransfer)
  3702  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3703  				it.fail = err
  3704  				return false
  3705  			}
  3706  			it.Event.Raw = log
  3707  			return true
  3708  
  3709  		default:
  3710  			return false
  3711  		}
  3712  	}
  3713  	// Iterator still in progress, wait for either a data or an error event
  3714  	select {
  3715  	case log := <-it.logs:
  3716  		it.Event = new(CTokenTransfer)
  3717  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3718  			it.fail = err
  3719  			return false
  3720  		}
  3721  		it.Event.Raw = log
  3722  		return true
  3723  
  3724  	case err := <-it.sub.Err():
  3725  		it.done = true
  3726  		it.fail = err
  3727  		return it.Next()
  3728  	}
  3729  }
  3730  
  3731  // Error returns any retrieval or parsing error occurred during filtering.
  3732  func (it *CTokenTransferIterator) Error() error {
  3733  	return it.fail
  3734  }
  3735  
  3736  // Close terminates the iteration process, releasing any pending underlying
  3737  // resources.
  3738  func (it *CTokenTransferIterator) Close() error {
  3739  	it.sub.Unsubscribe()
  3740  	return nil
  3741  }
  3742  
  3743  // CTokenTransfer represents a Transfer event raised by the CToken contract.
  3744  type CTokenTransfer struct {
  3745  	From   common.Address
  3746  	To     common.Address
  3747  	Amount *big.Int
  3748  	Raw    types.Log // Blockchain specific contextual infos
  3749  }
  3750  
  3751  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  3752  //
  3753  // Solidity: event Transfer(address indexed from, address indexed to, uint256 amount)
  3754  func (_CToken *CTokenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CTokenTransferIterator, error) {
  3755  
  3756  	var fromRule []interface{}
  3757  	for _, fromItem := range from {
  3758  		fromRule = append(fromRule, fromItem)
  3759  	}
  3760  	var toRule []interface{}
  3761  	for _, toItem := range to {
  3762  		toRule = append(toRule, toItem)
  3763  	}
  3764  
  3765  	logs, sub, err := _CToken.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
  3766  	if err != nil {
  3767  		return nil, err
  3768  	}
  3769  	return &CTokenTransferIterator{contract: _CToken.contract, event: "Transfer", logs: logs, sub: sub}, nil
  3770  }
  3771  
  3772  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  3773  //
  3774  // Solidity: event Transfer(address indexed from, address indexed to, uint256 amount)
  3775  func (_CToken *CTokenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *CTokenTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {
  3776  
  3777  	var fromRule []interface{}
  3778  	for _, fromItem := range from {
  3779  		fromRule = append(fromRule, fromItem)
  3780  	}
  3781  	var toRule []interface{}
  3782  	for _, toItem := range to {
  3783  		toRule = append(toRule, toItem)
  3784  	}
  3785  
  3786  	logs, sub, err := _CToken.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
  3787  	if err != nil {
  3788  		return nil, err
  3789  	}
  3790  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3791  		defer sub.Unsubscribe()
  3792  		for {
  3793  			select {
  3794  			case log := <-logs:
  3795  				// New log arrived, parse the event and forward to the user
  3796  				event := new(CTokenTransfer)
  3797  				if err := _CToken.contract.UnpackLog(event, "Transfer", log); err != nil {
  3798  					return err
  3799  				}
  3800  				event.Raw = log
  3801  
  3802  				select {
  3803  				case sink <- event:
  3804  				case err := <-sub.Err():
  3805  					return err
  3806  				case <-quit:
  3807  					return nil
  3808  				}
  3809  			case err := <-sub.Err():
  3810  				return err
  3811  			case <-quit:
  3812  				return nil
  3813  			}
  3814  		}
  3815  	}), nil
  3816  }
  3817  
  3818  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  3819  //
  3820  // Solidity: event Transfer(address indexed from, address indexed to, uint256 amount)
  3821  func (_CToken *CTokenFilterer) ParseTransfer(log types.Log) (*CTokenTransfer, error) {
  3822  	event := new(CTokenTransfer)
  3823  	if err := _CToken.contract.UnpackLog(event, "Transfer", log); err != nil {
  3824  		return nil, err
  3825  	}
  3826  	return event, nil
  3827  }