Contract 0xA683fdfD9286eeDfeA81CF6dA14703DA683c44E5

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdba878e8aa322a0d327e9a0ed934d3a082a7b950877021fd37680a5d97914d75Repay Borrow76519572023-03-31 17:20:0141 mins ago0xe6d71f321a2b194086b182ace53e238cfba4dbcc IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7506254305850
0xc2303333988999b187824420e9bb77d7e428aefd6d94256a704161f3d85074f6Borrow76517422023-03-31 16:59:411 hr 1 min ago0x930715929a28f977be9f150bd4181da727a43811 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO2.269997512629 4,781.680272976
0xcf314d04f1a6681b00cc9e6ee8da68447549b50bd475d46f602d4a5e51babe64Repay Borrow76512772023-03-31 16:15:431 hr 45 mins ago0xad8054d4922c24523f02b2cd04798cff88fbfa33 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.752548877484 4,781.700951734
0x6bbbaf18c4d6ee157022775c2de8ee9a28079f721a728839e40fec6072149497Redeem Underlyin...76510892023-03-31 15:57:502 hrs 3 mins ago0xad8054d4922c24523f02b2cd04798cff88fbfa33 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO1.85536986298 4,781.708554279
0xd85576c5ae43e54ffdfe8d60daa988c8e5968ae781d442131abc5a7d9ae1930fRedeem Underlyin...76510122023-03-31 15:50:362 hrs 10 mins ago0xad8054d4922c24523f02b2cd04798cff88fbfa33 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO1.855371228518 4,781.712073582
0xb86c7c09b7a3c15b99ccd81db71c326bd412bd260d0dbb303a5bef1983e02075Redeem Underlyin...76508822023-03-31 15:38:222 hrs 22 mins ago0xad8054d4922c24523f02b2cd04798cff88fbfa33 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO1.855373546795 4,781.718048305
0x8f3746533918eb39f2d008535624cbeff13e2cda3bd27c42bdc3cfe0777e488aRedeem Underlyin...76508412023-03-31 15:34:312 hrs 26 mins ago0xad8054d4922c24523f02b2cd04798cff88fbfa33 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO1.937141676598 4,781.719902542
0x743b60d2a31c0245077bc45cfa8d6566c15d9ef8aca1f8c2ddf0d460b4e8982fMint76505392023-03-31 15:06:012 hrs 55 mins ago0xed01e37566d48a830a0618172ef9c8ce496729b4 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7943362075780
0x4dc2135fb778be1c4ff7abcdec87a1a3c05a112af75fbbff9651cf547ad1b3faBorrow76498452023-03-31 14:00:384 hrs ago0x5c1b78f5e13b84a570313ff6d52d5d0ee9fe6e4e IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO2.5495686371130
0x3f86935ffd7ebb14dbf2324a7cb48cb55ed6539077446936cac87b177e0b1e14Repay Borrow76492462023-03-31 13:04:154 hrs 57 mins ago0x1a2bf941927c84eff5d0ec48ec5f801b4eeff7b4 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.773832602919 4,781.791909483
0x258d28838487f4bace664defe7cef46871476287fc422612e8df995529bf5860Repay Borrow76485422023-03-31 11:57:596 hrs 3 mins ago0xb90db6d813065b1baae323b6b19e1da47db66713 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7505921940210
0xd5d1d8c2c3eb1516fb284a4c3494e0b01e574aeaaf74385d34acc6342cc39819Borrow76485382023-03-31 11:57:376 hrs 3 mins ago0x9c4e581940a267b39a0c2147e3ad730e8c9d2a22 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO1.7972012648240
0x3f0df0d66de7504577c6afa5aa00d3e48e74c5444c131ae801c5b1bdbcb7d9f4Repay Borrow76480102023-03-31 11:07:566 hrs 53 mins ago0x097ee2b2a6d25b362c8d12991856798fb274be3f IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7507107958330
0x43cbf58aaf697494ffa444d1422ebf625017e9b95a739caf4b88f9731324ed52Repay Borrow76473072023-03-31 10:01:487 hrs 59 mins ago0xe8898285388a5fe2632db474b2739363824464d6 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7523412478980
0x91d0b2ca92bc2f178a8fd7f421382330ea04bcb7ccb9044286cf58b5b8660baeBorrow76462862023-03-31 8:25:509 hrs 35 mins ago0xb2840e30aaeb36e74efdc18be57981102e2f070d IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO2.5501056406650
0x8c749e3057bb7eb08b79c962e750bd2699b1341b3397651d67eb8ca5043b7ea7Repay Borrow76457192023-03-31 7:32:3310 hrs 28 mins ago0xc265a526f733d4554740ea7d6c846e7263020685 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7523528708980
0x2d875a21b65577a00f4e6d512f6720a0edc3b4b31ee71f3e1566e44314b9d20eRepay Borrow76453602023-03-31 6:58:4411 hrs 2 mins ago0x313e1060a83ca55e37e5535285aa29e3863d5db6 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7523554661580
0x149f3652474f960dd91355fb7bb645bc4824f6b2e394895014764fd6db32e181Redeem76450262023-03-31 6:27:1811 hrs 34 mins ago0x07195f6dbac033152904747ca22d4debad682ad7 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.842087662040
0x8a67a7cf97be93cc33afa5eb36f4e110d2b6bb2343ddc961b58df9d3afd5b5b9Mint76450002023-03-31 6:24:5111 hrs 36 mins ago0x07195f6dbac033152904747ca22d4debad682ad7 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7943212305060
0x7b3aca469f3b95d7d5e174c5cbfaee4be97395a7d403150b1d82c6380878d2fbBorrow76444472023-03-31 5:32:4812 hrs 28 mins ago0xcfd63875461ad237a97f91bf9604b4cca827c730 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO2.701151806348 4,825.398294231
0x218730cf2e5c7c42b9dc1dcca6b9c02c4a311d7a6d3a3a2a76090ecd5b78a18fRepay Borrow76443832023-03-31 5:26:4612 hrs 34 mins ago0x6e65cf29f793dbbf8b4b73f9e4f51999055ce839 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7523625502840
0x31b294a4151391a37b5c3ab06dbd103d5b96e3589014d8313506f1fd8593ae47Redeem76440952023-03-31 4:59:4013 hrs 1 min ago0x03849fb9e8f428419cbcaa9f313d39a625679a61 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO2.747859754555 4,782.030194729
0xadc55b5525770dff920534158b92bb4f319e4a1046faed0790f5b7f0fc86bf0bRepay Borrow76434022023-03-31 3:54:3414 hrs 6 mins ago0x123ba127746d9ba6748eb73eb8027d5c02c48cd5 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.7506869391640
0x1f74275fe04dff273ec0d55fc291b813ca249d1d410d1573b13215a2f2e3f5fcMint76426622023-03-31 2:45:0215 hrs 16 mins ago0x07195f6dbac033152904747ca22d4debad682ad7 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.8172286730440
0x7ce4cc50f3880f1512ba009e6695675201bc1c2dc49d7518a264f3530227cc92Mint76426062023-03-31 2:39:4715 hrs 21 mins ago0x07195f6dbac033152904747ca22d4debad682ad7 IN  0xa683fdfd9286eedfea81cf6da14703da683c44e50 CRO0.8172291133990
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TErc20Delegator

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 10 runs

Other Settings:
default evmVersion, BSD-3-Clause license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-01-17
*/

// Sources flattened with hardhat v2.6.4 https://hardhat.org

// File contracts/Interfaces/EIP20NonStandardInterface.sol

pragma solidity ^0.5.16;

/**
 * @title EIP20NonStandardInterface
 * @dev Version of ERC20 with no return values for `transfer` and `transferFrom`
 *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
 */
interface EIP20NonStandardInterface {

    /**
     * @notice Get the total number of tokens in circulation
     * @return The supply of tokens
     */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Gets the balance of the specified address
     * @param owner The address from which the balance will be retrieved
     * @return The balance
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    ///
    /// !!!!!!!!!!!!!!
    /// !!! NOTICE !!! `transfer` does not return a value, in violation of the ERC-20 specification
    /// !!!!!!!!!!!!!!
    ///

    /**
      * @notice Transfer `amount` tokens from `msg.sender` to `dst`
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      */
    function transfer(address dst, uint256 amount) external;

    ///
    /// !!!!!!!!!!!!!!
    /// !!! NOTICE !!! `transferFrom` does not return a value, in violation of the ERC-20 specification
    /// !!!!!!!!!!!!!!
    ///

    /**
      * @notice Transfer `amount` tokens from `src` to `dst`
      * @param src The address of the source account
      * @param dst The address of the destination account
      * @param amount The number of tokens to transfer
      */
    function transferFrom(address src, address dst, uint256 amount) external;

    /**
      * @notice Approve `spender` to transfer up to `amount` from `src`
      * @dev This will overwrite the approval amount for `spender`
      *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
      * @param spender The address of the account which may transfer tokens
      * @param amount The number of tokens that are approved
      * @return Whether or not the approval succeeded
      */
    function approve(address spender, uint256 amount) external returns (bool success);

    /**
      * @notice Get the current allowance from `owner` for `spender`
      * @param owner The address of the account which owns the tokens to be spent
      * @param spender The address of the account which may transfer tokens
      * @return The number of tokens allowed to be spent
      */
    function allowance(address owner, address spender) external view returns (uint256 remaining);

    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(address indexed owner, address indexed spender, uint256 amount);
}


// File contracts/TectonicCoreInterface.sol

pragma solidity ^0.5.16;

contract TectonicCoreInterface {
    /// @notice Indicator that this is a TectonicCore contract (for inspection)
    bool public constant isTectonicCore = true;

    /*** Assets You Are In ***/

    function enterMarkets(address[] calldata tTokens) external returns (uint[] memory);
    function exitMarket(address tToken) external returns (uint);

    /*** Policy Hooks ***/

    function mintAllowed(address tToken, address minter, uint mintAmount) external returns (uint);
    function mintVerify(address tToken, address minter, uint mintAmount, uint mintTokens) external;

    function redeemAllowed(address tToken, address redeemer, uint redeemTokens) external returns (uint);
    function redeemVerify(address tToken, address redeemer, uint redeemAmount, uint redeemTokens) external;

    function borrowAllowed(address tToken, address borrower, uint borrowAmount) external returns (uint);
    function borrowVerify(address tToken, address borrower, uint borrowAmount) external;

    function repayBorrowAllowed(
        address tToken,
        address payer,
        address borrower,
        uint repayAmount) external returns (uint);
    function repayBorrowVerify(
        address tToken,
        address payer,
        address borrower,
        uint repayAmount,
        uint borrowerIndex) external;

    function liquidateBorrowAllowed(
        address tTokenBorrowed,
        address tTokenCollateral,
        address liquidator,
        address borrower,
        uint repayAmount) external returns (uint);
    function liquidateBorrowVerify(
        address tTokenBorrowed,
        address tTokenCollateral,
        address liquidator,
        address borrower,
        uint repayAmount,
        uint seizeTokens) external;

    function seizeAllowed(
        address tTokenCollateral,
        address tTokenBorrowed,
        address liquidator,
        address borrower,
        uint seizeTokens) external returns (uint);
    function seizeVerify(
        address tTokenCollateral,
        address tTokenBorrowed,
        address liquidator,
        address borrower,
        uint seizeTokens) external;

    function transferAllowed(address tToken, address src, address dst, uint transferTokens) external returns (uint);
    function transferVerify(address tToken, address src, address dst, uint transferTokens) external;

    /*** Liquidity/Liquidation Calculations ***/

    function liquidateCalculateSeizeTokens(
        address tTokenBorrowed,
        address tTokenCollateral,
        uint repayAmount) external view returns (uint, uint);
}


// File contracts/InterestModels/InterestRateModel.sol

pragma solidity ^0.5.16;

/**
  * @title Tectonic's InterestRateModel Interface
  * @author Tectonic
  */
contract InterestRateModel {
    /// @notice Indicator that this is an InterestRateModel contract (for inspection)
    bool public constant isInterestRateModel = true;

    /**
      * @notice Calculates the current borrow interest rate per block
      * @param cash The total amount of cash the market has
      * @param borrows The total amount of borrows the market has outstanding
      * @param reserves The total amount of reserves the market has
      * @return The borrow rate per block (as a percentage, and scaled by 1e18)
      */
    function getBorrowRate(uint cash, uint borrows, uint reserves) external view returns (uint);

    /**
      * @notice Calculates the current supply interest rate per block
      * @param cash The total amount of cash the market has
      * @param borrows The total amount of borrows the market has outstanding
      * @param reserves The total amount of reserves the market has
      * @param reserveFactorMantissa The current reserve factor the market has
      * @return The supply rate per block (as a percentage, and scaled by 1e18)
      */
    function getSupplyRate(uint cash, uint borrows, uint reserves, uint reserveFactorMantissa) external view returns (uint);

}


// File contracts/TTokenInterfaces.sol

pragma solidity ^0.5.16;



contract TTokenStorage {
    /**
     * @dev Guard variable for re-entrancy checks
     */
    bool internal _notEntered;

    /**
     * @notice EIP-20 token name for this token
     */
    string public name;

    /**
     * @notice EIP-20 token symbol for this token
     */
    string public symbol;

    /**
     * @notice EIP-20 token decimals for this token
     */
    uint8 public decimals;

    /**
     * @notice Maximum borrow rate that can ever be applied (.0005% / block)
     */

    uint internal constant borrowRateMaxMantissa = 0.0005e16;

    /**
     * @notice Maximum fraction of interest that can be set aside for reserves
     */
    uint internal constant reserveFactorMaxMantissa = 1e18;

    /**
     * @notice Administrator for this contract
     */
    address payable public admin;

    /**
     * @notice Pending administrator for this contract
     */
    address payable public pendingAdmin;

    /**
     * @notice Contract which oversees inter-tToken operations
     */
    TectonicCoreInterface public tectonicCore;

    /**
     * @notice Model which tells what the current interest rate should be
     */
    InterestRateModel public interestRateModel;

    /**
     * @notice Initial exchange rate used when minting the first TTokens (used when totalSupply = 0)
     */
    uint internal initialExchangeRateMantissa;

    /**
     * @notice Fraction of interest currently set aside for reserves
     */
    uint public reserveFactorMantissa;

    /**
     * @notice Block number that interest was last accrued at
     */
    uint public accrualBlockNumber;

    /**
     * @notice Accumulator of the total earned interest rate since the opening of the market
     */
    uint public borrowIndex;

    /**
     * @notice Total amount of outstanding borrows of the underlying in this market
     */
    uint public totalBorrows;

    /**
     * @notice Total amount of reserves of the underlying held in this market
     */
    uint public totalReserves;

    /**
     * @notice Total number of tokens in circulation
     */
    uint public totalSupply;

    /**
     * @notice Official record of token balances for each account
     */
    mapping (address => uint) internal accountTokens;

    /**
     * @notice Approved token transfer amounts on behalf of others
     */
    mapping (address => mapping (address => uint)) internal transferAllowances;

    /**
     * @notice Container for borrow balance information
     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action
     * @member interestIndex Global borrowIndex as of the most recent balance-changing action
     */
    struct BorrowSnapshot {
        uint principal;
        uint interestIndex;
    }

    /**
     * @notice Mapping of account addresses to outstanding borrow balances
     */
    mapping(address => BorrowSnapshot) internal accountBorrows;

    /**
     * @notice Share of seized collateral that is added to reserves
     */
    uint public constant protocolSeizeShareMantissa = 2.8e16; //2.8%

}

contract TTokenInterface is TTokenStorage {
    /**
     * @notice Indicator that this is a TToken contract (for inspection)
     */
    bool public constant isTToken = true;


    /*** Market Events ***/

    /**
     * @notice Event emitted when interest is accrued
     */
    event AccrueInterest(uint cashPrior, uint interestAccumulated, uint borrowIndex, uint totalBorrows);

    /**
     * @notice Event emitted when tokens are minted
     */
    event Mint(address minter, uint mintAmount, uint mintTokens);

    /**
     * @notice Event emitted when tokens are redeemed
     */
    event Redeem(address redeemer, uint redeemAmount, uint redeemTokens);

    /**
     * @notice Event emitted when underlying is borrowed
     */
    event Borrow(address borrower, uint borrowAmount, uint accountBorrows, uint totalBorrows);

    /**
     * @notice Event emitted when a borrow is repaid
     */
    event RepayBorrow(address payer, address borrower, uint repayAmount, uint accountBorrows, uint totalBorrows);

    /**
     * @notice Event emitted when a borrow is liquidated
     */
    event LiquidateBorrow(address liquidator, address borrower, uint repayAmount, address tTokenCollateral, uint seizeTokens);


    /*** Admin Events ***/

    /**
     * @notice Event emitted when pendingAdmin is changed
     */
    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);

    /**
     * @notice Event emitted when pendingAdmin is accepted, which means admin is updated
     */
    event NewAdmin(address oldAdmin, address newAdmin);

    /**
     * @notice Event emitted when tectonicCore is changed
     */
    event NewTectonicCore(TectonicCoreInterface oldTectonicCore, TectonicCoreInterface newTectonicCore);

    /**
     * @notice Event emitted when interestRateModel is changed
     */
    event NewMarketInterestRateModel(InterestRateModel oldInterestRateModel, InterestRateModel newInterestRateModel);

    /**
     * @notice Event emitted when the reserve factor is changed
     */
    event NewReserveFactor(uint oldReserveFactorMantissa, uint newReserveFactorMantissa);

    /**
     * @notice Event emitted when the reserves are added
     */
    event ReservesAdded(address benefactor, uint addAmount, uint newTotalReserves);

    /**
     * @notice Event emitted when the reserves are reduced
     */
    event ReservesReduced(address admin, uint reduceAmount, uint newTotalReserves);

    /**
     * @notice EIP20 Transfer event
     */
    event Transfer(address indexed from, address indexed to, uint amount);

    /**
     * @notice EIP20 Approval event
     */
    event Approval(address indexed owner, address indexed spender, uint amount);

    /**
     * @notice Failure event
     */
    event Failure(uint error, uint info, uint detail);


    /*** User Interface ***/

    function transfer(address dst, uint amount) external returns (bool);
    function transferFrom(address src, address dst, uint amount) external returns (bool);
    function approve(address spender, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function balanceOfUnderlying(address owner) external returns (uint);
    function getAccountSnapshot(address account) external view returns (uint, uint, uint, uint);
    function borrowRatePerBlock() external view returns (uint);
    function supplyRatePerBlock() external view returns (uint);
    function totalBorrowsCurrent() external returns (uint);
    function borrowBalanceCurrent(address account) external returns (uint);
    function borrowBalanceStored(address account) public view returns (uint);
    function exchangeRateCurrent() public returns (uint);
    function exchangeRateStored() public view returns (uint);
    function getCash() external view returns (uint);
    function accrueInterest() public returns (uint);
    function seize(address liquidator, address borrower, uint seizeTokens) external returns (uint);


    /*** Admin Functions ***/

    function _setPendingAdmin(address payable newPendingAdmin) external returns (uint);
    function _acceptAdmin() external returns (uint);
    function _setTectonicCore(TectonicCoreInterface newTectonicCore) public returns (uint);
    function _setReserveFactor(uint newReserveFactorMantissa) external returns (uint);
    function _reduceReserves(uint reduceAmount) external returns (uint);
    function _setInterestRateModel(InterestRateModel newInterestRateModel) public returns (uint);
}

contract TErc20Storage {
    /**
     * @notice Underlying asset for this TToken
     */
    address public underlying;
}

contract TErc20Interface is TErc20Storage {

    /*** User Interface ***/

    function mint(uint mintAmount) external returns (uint);
    function redeem(uint redeemTokens) external returns (uint);
    function redeemUnderlying(uint redeemAmount) external returns (uint);
    function borrow(uint borrowAmount) external returns (uint);
    function repayBorrow(uint repayAmount) external returns (uint);
    function repayBorrowBehalf(address borrower, uint repayAmount) external returns (uint);
    function liquidateBorrow(address borrower, uint repayAmount, TTokenInterface tTokenCollateral) external returns (uint);
    function sweepToken(EIP20NonStandardInterface token) external;


    /*** Admin Functions ***/

    function _addReserves(uint addAmount) external returns (uint);
}

contract TDelegationStorage {
    /**
     * @notice Implementation address for this contract
     */
    address public implementation;
}

contract TDelegatorInterface is TDelegationStorage {
    /**
     * @notice Emitted when implementation is changed
     */
    event NewImplementation(address oldImplementation, address newImplementation);

    /**
     * @notice Called by the admin to update the implementation of the delegator
     * @param implementation_ The address of the new implementation for delegation
     * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
     * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
     */
    function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) public;
}

contract TDelegateInterface is TDelegationStorage {
    /**
     * @notice Called by the delegator on a delegate to initialize it for duty
     * @dev Should revert if any issues arise which make it unfit for delegation
     * @param data The encoded bytes data for any initialization
     */
    function _becomeImplementation(bytes memory data) public;

    /**
     * @notice Called by the delegator on a delegate to forfeit its responsibility
     */
    function _resignImplementation() public;
}


// File contracts/TErc20Delegator.sol

pragma solidity ^0.5.16;

/**
 * @title Tectonic's TErc20Delegator Contract
 * @notice TTokens which wrap an EIP-20 underlying and delegate to an implementation
 * @author Tectonic
 */
contract TErc20Delegator is TTokenInterface, TErc20Interface, TDelegatorInterface {
    /**
     * @notice Construct a new money market
     * @param underlying_ The address of the underlying asset
     * @param tcore_ The address of the TectonicCore
     * @param interestRateModel_ The address of the interest rate model
     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18
     * @param name_ ERC-20 name of this token
     * @param symbol_ ERC-20 symbol of this token
     * @param decimals_ ERC-20 decimal precision of this token
     * @param admin_ Address of the administrator of this token
     * @param implementation_ The address of the implementation the contract delegates to
     * @param becomeImplementationData The encoded args for becomeImplementation
     */
    constructor(address underlying_,
                TectonicCoreInterface tcore_,
                InterestRateModel interestRateModel_,
                uint initialExchangeRateMantissa_,
                string memory name_,
                string memory symbol_,
                uint8 decimals_,
                address payable admin_,
                address implementation_,
                bytes memory becomeImplementationData) public {
        // Creator of the contract is admin during initialization
        admin = msg.sender;

        // First delegate gets to initialize the delegator (i.e. storage contract)
        delegateTo(implementation_, abi.encodeWithSignature("initialize(address,address,address,uint256,string,string,uint8)",
                                                            underlying_,
                                                            tcore_,
                                                            interestRateModel_,
                                                            initialExchangeRateMantissa_,
                                                            name_,
                                                            symbol_,
                                                            decimals_));

        // New implementations always get set via the settor (post-initialize)
        _setImplementation(implementation_, false, becomeImplementationData);

        // Set the proper admin now that initialization is done
        admin = admin_;
    }

    /**
     * @notice Called by the admin to update the implementation of the delegator
     * @param implementation_ The address of the new implementation for delegation
     * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
     * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
     */
    function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) public {
        require(msg.sender == admin, "TErc20Delegator::_setImplementation: Caller must be admin");

        if (allowResign) {
            delegateToImplementation(abi.encodeWithSignature("_resignImplementation()"));
        }

        address oldImplementation = implementation;
        implementation = implementation_;

        delegateToImplementation(abi.encodeWithSignature("_becomeImplementation(bytes)", becomeImplementationData));

        emit NewImplementation(oldImplementation, implementation);
    }

    /**
     * @notice Sender supplies assets into the market and receives tTokens in exchange
     * @dev Accrues interest whether or not the operation succeeds, unless reverted
     * @param mintAmount The amount of the underlying asset to supply
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function mint(uint mintAmount) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("mint(uint256)", mintAmount));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Sender redeems tTokens in exchange for the underlying asset
     * @dev Accrues interest whether or not the operation succeeds, unless reverted
     * @param redeemTokens The number of tTokens to redeem into underlying
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function redeem(uint redeemTokens) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeem(uint256)", redeemTokens));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Sender redeems tTokens in exchange for a specified amount of underlying asset
     * @dev Accrues interest whether or not the operation succeeds, unless reverted
     * @param redeemAmount The amount of underlying to redeem
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function redeemUnderlying(uint redeemAmount) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeemUnderlying(uint256)", redeemAmount));
        return abi.decode(data, (uint));
    }

    /**
      * @notice Sender borrows assets from the protocol to their own address
      * @param borrowAmount The amount of the underlying asset to borrow
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function borrow(uint borrowAmount) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrow(uint256)", borrowAmount));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Sender repays their own borrow
     * @param repayAmount The amount to repay
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function repayBorrow(uint repayAmount) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrow(uint256)", repayAmount));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Sender repays a borrow belonging to borrower
     * @param borrower the account with the debt being payed off
     * @param repayAmount The amount to repay
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function repayBorrowBehalf(address borrower, uint repayAmount) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrowBehalf(address,uint256)", borrower, repayAmount));
        return abi.decode(data, (uint));
    }

    /**
     * @notice The sender liquidates the borrowers collateral.
     *  The collateral seized is transferred to the liquidator.
     * @param borrower The borrower of this tToken to be liquidated
     * @param tTokenCollateral The market in which to seize collateral from the borrower
     * @param repayAmount The amount of the underlying borrowed asset to repay
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function liquidateBorrow(address borrower, uint repayAmount, TTokenInterface tTokenCollateral) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("liquidateBorrow(address,uint256,address)", borrower, repayAmount, tTokenCollateral));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint amount) external returns (bool) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("transfer(address,uint256)", dst, amount));
        return abi.decode(data, (bool));
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("transferFrom(address,address,uint256)", src, dst, amount));
        return abi.decode(data, (bool));
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param amount The number of tokens that are approved (-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint256 amount) external returns (bool) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("approve(address,uint256)", spender, amount));
        return abi.decode(data, (bool));
    }

    /**
     * @notice Get the current allowance from `owner` for `spender`
     * @param owner The address of the account which owns the tokens to be spent
     * @param spender The address of the account which may transfer tokens
     * @return The number of tokens allowed to be spent (-1 means infinite)
     */
    function allowance(address owner, address spender) external view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("allowance(address,address)", owner, spender));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Get the token balance of the `owner`
     * @param owner The address of the account to query
     * @return The number of tokens owned by `owner`
     */
    function balanceOf(address owner) external view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("balanceOf(address)", owner));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Get the underlying balance of the `owner`
     * @dev This also accrues interest in a transaction
     * @param owner The address of the account to query
     * @return The amount of underlying owned by `owner`
     */
    function balanceOfUnderlying(address owner) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("balanceOfUnderlying(address)", owner));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Get a snapshot of the account's balances, and the cached exchange rate
     * @dev This is used by tectonicCore to more efficiently perform liquidity checks.
     * @param account Address of the account to snapshot
     * @return (possible error, token balance, borrow balance, exchange rate mantissa)
     */
    function getAccountSnapshot(address account) external view returns (uint, uint, uint, uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getAccountSnapshot(address)", account));
        return abi.decode(data, (uint, uint, uint, uint));
    }

    /**
     * @notice Returns the current per-block borrow interest rate for this tToken
     * @return The borrow interest rate per block, scaled by 1e18
     */
    function borrowRatePerBlock() external view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowRatePerBlock()"));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Returns the current per-block supply interest rate for this tToken
     * @return The supply interest rate per block, scaled by 1e18
     */
    function supplyRatePerBlock() external view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("supplyRatePerBlock()"));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Returns the current total borrows plus accrued interest
     * @return The total borrows with interest
     */
    function totalBorrowsCurrent() external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("totalBorrowsCurrent()"));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex
     * @param account The address whose balance should be calculated after updating borrowIndex
     * @return The calculated balance
     */
    function borrowBalanceCurrent(address account) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrowBalanceCurrent(address)", account));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Return the borrow balance of account based on stored data
     * @param account The address whose balance should be calculated
     * @return The calculated balance
     */
    function borrowBalanceStored(address account) public view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowBalanceStored(address)", account));
        return abi.decode(data, (uint));
    }

   /**
     * @notice Accrue interest then return the up-to-date exchange rate
     * @return Calculated exchange rate scaled by 1e18
     */
    function exchangeRateCurrent() public returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("exchangeRateCurrent()"));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Calculates the exchange rate from the underlying to the TToken
     * @dev This function does not accrue interest before calculating the exchange rate
     * @return Calculated exchange rate scaled by 1e18
     */
    function exchangeRateStored() public view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("exchangeRateStored()"));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Get cash balance of this tToken in the underlying asset
     * @return The quantity of underlying asset owned by this contract
     */
    function getCash() external view returns (uint) {
        bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getCash()"));
        return abi.decode(data, (uint));
    }

    /**
      * @notice Applies accrued interest to total borrows and reserves.
      * @dev This calculates interest accrued from the last checkpointed block
      *      up to the current block and writes new checkpoint to storage.
      */
    function accrueInterest() public returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("accrueInterest()"));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Transfers collateral tokens (this market) to the liquidator.
     * @dev Will fail unless called by another tToken during the process of liquidation.
     *  Its absolutely critical to use msg.sender as the borrowed tToken and not a parameter.
     * @param liquidator The account receiving seized collateral
     * @param borrower The account having collateral seized
     * @param seizeTokens The number of tTokens to seize
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function seize(address liquidator, address borrower, uint seizeTokens) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("seize(address,address,uint256)", liquidator, borrower, seizeTokens));
        return abi.decode(data, (uint));
    }

    /**
     * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)
     * @param token The address of the ERC-20 token to sweep
     */
    function sweepToken(EIP20NonStandardInterface token) external {
        delegateToImplementation(abi.encodeWithSignature("sweepToken(address)", token));
    }


    /*** Admin Functions ***/

    /**
      * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @param newPendingAdmin New pending admin.
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _setPendingAdmin(address payable newPendingAdmin) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setPendingAdmin(address)", newPendingAdmin));
        return abi.decode(data, (uint));
    }

    /**
      * @notice Sets a new tectonicCore for the market
      * @dev Admin function to set a new tectonicCore
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _setTectonicCore(TectonicCoreInterface newTectonicCore) public returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setTectonicCore(address)", newTectonicCore));
        return abi.decode(data, (uint));
    }

    /**
      * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh
      * @dev Admin function to accrue interest and set a new reserve factor
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _setReserveFactor(uint newReserveFactorMantissa) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setReserveFactor(uint256)", newReserveFactorMantissa));
        return abi.decode(data, (uint));
    }

    /**
      * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin
      * @dev Admin function for pending admin to accept role and update admin
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _acceptAdmin() external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("_acceptAdmin()"));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Accrues interest and adds reserves by transferring from admin
     * @param addAmount Amount of reserves to add
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function _addReserves(uint addAmount) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("_addReserves(uint256)", addAmount));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Accrues interest and reduces reserves by transferring to admin
     * @param reduceAmount Amount of reduction to reserves
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function _reduceReserves(uint reduceAmount) external returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("_reduceReserves(uint256)", reduceAmount));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Accrues interest and updates the interest rate model using _setInterestRateModelFresh
     * @dev Admin function to accrue interest and update the interest rate model
     * @param newInterestRateModel the new interest rate model to use
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function _setInterestRateModel(InterestRateModel newInterestRateModel) public returns (uint) {
        bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setInterestRateModel(address)", newInterestRateModel));
        return abi.decode(data, (uint));
    }

    /**
     * @notice Internal method to delegate execution to another contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     * @param callee The contract to delegatecall
     * @param data The raw data to delegatecall
     * @return The returned bytes from the delegatecall
     */
    function delegateTo(address callee, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returnData) = callee.delegatecall(data);
        assembly {
            if eq(success, 0) {
                revert(add(returnData, 0x20), returndatasize)
            }
        }
        return returnData;
    }

    /**
     * @notice Delegates execution to the implementation contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     * @param data The raw data to delegatecall
     * @return The returned bytes from the delegatecall
     */
    function delegateToImplementation(bytes memory data) public returns (bytes memory) {
        return delegateTo(implementation, data);
    }

    /**
     * @notice Delegates execution to an implementation contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     *  There are an additional 2 prefix uints from the wrapper returndata, which we ignore since we make an extra hop.
     * @param data The raw data to delegatecall
     * @return The returned bytes from the delegatecall
     */
    function delegateToViewImplementation(bytes memory data) public view returns (bytes memory) {
        (bool success, bytes memory returnData) = address(this).staticcall(abi.encodeWithSignature("delegateToImplementation(bytes)", data));
        assembly {
            if eq(success, 0) {
                revert(add(returnData, 0x20), returndatasize)
            }
        }
        return abi.decode(returnData, (bytes));
    }

    /**
     * @notice Delegates execution to an implementation contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     */
    function () external payable {
        require(msg.value == 0,"TErc20Delegator:fallback: cannot send value to fallback");

        // delegate all other functions to current implementation
        (bool success, ) = implementation.delegatecall(msg.data);

        assembly {
            let free_mem_ptr := mload(0x40)
            returndatacopy(free_mem_ptr, 0, returndatasize)

            switch success
            case 0 { revert(free_mem_ptr, returndatasize) }
            default { return(free_mem_ptr, returndatasize) }
        }
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"underlying_","type":"address"},{"internalType":"contract TectonicCoreInterface","name":"tcore_","type":"address"},{"internalType":"contract InterestRateModel","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":"address payable","name":"admin_","type":"address"},{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"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"},{"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"},{"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"},{"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"},{"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":"tTokenCollateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"LiquidateBorrow","type":"event"},{"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract InterestRateModel","name":"oldInterestRateModel","type":"address"},{"indexed":false,"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"NewMarketInterestRateModel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReserveFactorMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"NewReserveFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract TectonicCoreInterface","name":"oldTectonicCore","type":"address"},{"indexed":false,"internalType":"contract TectonicCoreInterface","name":"newTectonicCore","type":"address"}],"name":"NewTectonicCore","type":"event"},{"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"},{"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"},{"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"},{"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"},{"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"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"addAmount","type":"uint256"}],"name":"_addReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reduceAmount","type":"uint256"}],"name":"_reduceReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"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"},{"constant":false,"inputs":[{"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"_setInterestRateModel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"_setReserveFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract TectonicCoreInterface","name":"newTectonicCore","type":"address"}],"name":"_setTectonicCore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"accrueInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"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"},{"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"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"borrowIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"borrowRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToViewImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"exchangeRateStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"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"},{"constant":true,"inputs":[],"name":"getCash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"interestRateModel","outputs":[{"internalType":"contract InterestRateModel","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isTToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"contract TTokenInterface","name":"tTokenCollateral","type":"address"}],"name":"liquidateBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"protocolSeizeShareMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"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"},{"constant":true,"inputs":[],"name":"reserveFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"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"},{"constant":true,"inputs":[],"name":"supplyRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract EIP20NonStandardInterface","name":"token","type":"address"}],"name":"sweepToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tectonicCore","outputs":[{"internalType":"contract TectonicCoreInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalBorrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"totalBorrowsCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"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"},{"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"},{"constant":true,"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620025433803806200254383398181016040526101408110156200003857600080fd5b81516020830151604080850151606086015160808701805193519597949692959194919392820192846401000000008211156200007457600080fd5b9083019060208201858111156200008a57600080fd5b8251640100000000811182820188101715620000a557600080fd5b82525081516020918201929091019080838360005b83811015620000d4578181015183820152602001620000ba565b50505050905090810190601f168015620001025780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200012657600080fd5b9083019060208201858111156200013c57600080fd5b82516401000000008111828201881017156200015757600080fd5b82525081516020918201929091019080838360005b83811015620001865781810151838201526020016200016c565b50505050905090810190601f168015620001b45780820380516001836020036101000a031916815260200191505b50604081815260208301519083015160608401516080909401805192969195919284640100000000821115620001e957600080fd5b908301906020820185811115620001ff57600080fd5b82516401000000008111828201881017156200021a57600080fd5b82525081516020918201929091019080838360005b83811015620002495781810151838201526020016200022f565b50505050905090810190601f168015620002775780820380516001836020036101000a031916815260200191505b5060405250505033600360016101000a8154816001600160a01b0302191690836001600160a01b0316021790555062000424828b8b8b8b8b8b8b60405160240180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b0316815260200185815260200180602001806020018460ff1660ff168152602001838103835286818151815260200191508051906020019080838360005b838110156200035157818101518382015260200162000337565b50505050905090810190601f1680156200037f5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015620003b45781810151838201526020016200039a565b50505050905090810190601f168015620003e25780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116631a31d46560e01b17909152909a50620004721698505050505050505050565b506200043c826000836001600160e01b036200053916565b5050600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055506200071a95505050505050565b606060006060846001600160a01b0316846040518082805190602001908083835b60208310620004b45780518252601f19909201916020918201910162000493565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811462000516576040519150601f19603f3d011682016040523d82523d6000602084013e6200051b565b606091505b5091509150600082141562000531573d60208201fd5b949350505050565b60035461010090046001600160a01b03163314620005895760405162461bcd60e51b81526004018080602001828103825260398152602001806200250a6039913960400191505060405180910390fd5b8115620005cb576040805160048152602481019091526020810180516001600160e01b0390811663153ab50560e01b17909152620005c99190620006f016565b505b601280546001600160a01b038581166001600160a01b03198316179092556040516020602482018181528551604484015285519490931693620006a1938693909283926064909201919085019080838360005b83811015620006385781810151838201526020016200061e565b50505050905090810190601f168015620006665780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116630adccee560e31b17909152909350620006f016915050565b50601254604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b60125460609062000714906001600160a01b0316836001600160e01b036200047216565b92915050565b611de0806200072a6000396000f3fe60806040526004361061024f5760003560e01c806306fdde031461030f5780630933c1ed14610399578063095ea7b31461044a5780630e75270214610497578063173b9904146104d357806317bfdfbc146104e857806318160ddd1461051b578063182df0f5146105305780631be195601461054557806323b872dd1461057a5780632608f818146105bd57806326782247146105f6578063313ce567146106275780633af9e669146106525780633b1d21a2146106855780633e9410101461069a5780634487152f146106c457806347bd371814610775578063555bcc401461078a5780635c60da1b14610852578063601a0bf1146108675780636752e702146108915780636c540baf146108a65780636f307dc3146108bb57806370a08231146108d057806373acee9814610903578063852a12e3146109185780638f840ddd1461094257806395d89b411461095757806395dd91931461096c578063a0097b581461099f578063a0712d68146109b4578063a6afed95146109de578063a9059cbb146109f3578063aa5af0fd14610a2c578063ae9d70b014610a41578063b2a02ff114610a56578063b71d1a0c14610a99578063b79b3c8a14610acc578063bd6d894d14610aff578063c16a61ec14610b14578063c37f68e214610b29578063c5ebeaec14610b82578063db006a7514610bac578063dd62ed3e14610bd6578063e9c714f214610c11578063f2b3abbd14610c26578063f3fdb15a14610c59578063f5e3c46214610c6e578063f851a44014610cb1578063f8f9da2814610cc6578063fca7820b14610cdb575b341561028c5760405162461bcd60e51b8152600401808060200182810382526037815260200180611d3c6037913960400191505060405180910390fd5b6012546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d80600081146102ef576040519150601f19603f3d011682016040523d82523d6000602084013e6102f4565b606091505b505090506040513d6000823e81801561030b573d82f35b3d82fd5b34801561031b57600080fd5b50610324610d05565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561035e578181015183820152602001610346565b50505050905090810190601f16801561038b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103a557600080fd5b50610324600480360360208110156103bc57600080fd5b810190602081018135600160201b8111156103d657600080fd5b8201836020820111156103e857600080fd5b803590602001918460018302840111600160201b8311171561040957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d92945050505050565b34801561045657600080fd5b506104836004803603604081101561046d57600080fd5b506001600160a01b038135169060200135610db1565b604080519115158252519081900360200190f35b3480156104a357600080fd5b506104c1600480360360208110156104ba57600080fd5b5035610e28565b60408051918252519081900360200190f35b3480156104df57600080fd5b506104c1610e8f565b3480156104f457600080fd5b506104c16004803603602081101561050b57600080fd5b50356001600160a01b0316610e95565b34801561052757600080fd5b506104c1610ee7565b34801561053c57600080fd5b506104c1610eed565b34801561055157600080fd5b506105786004803603602081101561056857600080fd5b50356001600160a01b0316610f44565b005b34801561058657600080fd5b506104836004803603606081101561059d57600080fd5b506001600160a01b03813581169160208101359091169060400135610f93565b3480156105c957600080fd5b506104c1600480360360408110156105e057600080fd5b506001600160a01b038135169060200135611013565b34801561060257600080fd5b5061060b611069565b604080516001600160a01b039092168252519081900360200190f35b34801561063357600080fd5b5061063c611078565b6040805160ff9092168252519081900360200190f35b34801561065e57600080fd5b506104c16004803603602081101561067557600080fd5b50356001600160a01b0316611081565b34801561069157600080fd5b506104c16110d3565b3480156106a657600080fd5b506104c1600480360360208110156106bd57600080fd5b503561110b565b3480156106d057600080fd5b50610324600480360360208110156106e757600080fd5b810190602081018135600160201b81111561070157600080fd5b82018360208201111561071357600080fd5b803590602001918460018302840111600160201b8311171561073457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611152945050505050565b34801561078157600080fd5b506104c1611371565b34801561079657600080fd5b50610578600480360360608110156107ad57600080fd5b6001600160a01b03823516916020810135151591810190606081016040820135600160201b8111156107de57600080fd5b8201836020820111156107f057600080fd5b803590602001918460018302840111600160201b8311171561081157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611377945050505050565b34801561085e57600080fd5b5061060b61151a565b34801561087357600080fd5b506104c16004803603602081101561088a57600080fd5b5035611529565b34801561089d57600080fd5b506104c1611570565b3480156108b257600080fd5b506104c161157b565b3480156108c757600080fd5b5061060b611581565b3480156108dc57600080fd5b506104c1600480360360208110156108f357600080fd5b50356001600160a01b0316611590565b34801561090f57600080fd5b506104c16115e2565b34801561092457600080fd5b506104c16004803603602081101561093b57600080fd5b503561161a565b34801561094e57600080fd5b506104c1611661565b34801561096357600080fd5b50610324611667565b34801561097857600080fd5b506104c16004803603602081101561098f57600080fd5b50356001600160a01b03166116bf565b3480156109ab57600080fd5b50610483611711565b3480156109c057600080fd5b506104c1600480360360208110156109d757600080fd5b5035611716565b3480156109ea57600080fd5b506104c161175d565b3480156109ff57600080fd5b5061048360048036036040811015610a1657600080fd5b506001600160a01b038135169060200135611795565b348015610a3857600080fd5b506104c16117eb565b348015610a4d57600080fd5b506104c16117f1565b348015610a6257600080fd5b506104c160048036036060811015610a7957600080fd5b506001600160a01b03813581169160208101359091169060400135611829565b348015610aa557600080fd5b506104c160048036036020811015610abc57600080fd5b50356001600160a01b0316611887565b348015610ad857600080fd5b506104c160048036036020811015610aef57600080fd5b50356001600160a01b03166118d9565b348015610b0b57600080fd5b506104c161192b565b348015610b2057600080fd5b5061060b611963565b348015610b3557600080fd5b50610b5c60048036036020811015610b4c57600080fd5b50356001600160a01b0316611972565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610b8e57600080fd5b506104c160048036036020811015610ba557600080fd5b5035611a04565b348015610bb857600080fd5b506104c160048036036020811015610bcf57600080fd5b5035611a4b565b348015610be257600080fd5b506104c160048036036040811015610bf957600080fd5b506001600160a01b0381358116916020013516611a92565b348015610c1d57600080fd5b506104c1611aec565b348015610c3257600080fd5b506104c160048036036020811015610c4957600080fd5b50356001600160a01b0316611b24565b348015610c6557600080fd5b5061060b611b76565b348015610c7a57600080fd5b506104c160048036036060811015610c9157600080fd5b506001600160a01b03813581169160208101359160409091013516611b85565b348015610cbd57600080fd5b5061060b611be6565b348015610cd257600080fd5b506104c1611bfa565b348015610ce757600080fd5b506104c160048036036020811015610cfe57600080fd5b5035611c32565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d8a5780601f10610d5f57610100808354040283529160200191610d8a565b820191906000526020600020905b815481529060010190602001808311610d6d57829003601f168201915b505050505081565b601254606090610dab906001600160a01b031683611c79565b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052600090606090610e0790610d92565b9050808060200190516020811015610e1e57600080fd5b5051949350505050565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663073a938160e11b179052600090606090610e6f90610d92565b9050808060200190516020811015610e8657600080fd5b50519392505050565b60085481565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166305eff7ef60e21b179052600090606090610e6f90610d92565b600d5481565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b179052600090606090610f2590611152565b9050808060200190516020811015610f3c57600080fd5b505191505090565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b031662df0cab60e51b179052610f8f90610d92565b5050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052600090606090610ff190610d92565b905080806020019051602081101561100857600080fd5b505195945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03166304c11f0360e31b179052600090606090610e0790610d92565b6004546001600160a01b031681565b60035460ff1681565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316633af9e66960e01b179052600090606090610e6f90610d92565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b179052600090606090610f2590611152565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b03166303e9410160e41b179052600090606090610e6f90610d92565b606060006060306001600160a01b0316846040516024018080602001828103825283818151815260200191508051906020019080838360005b838110156111a357818101518382015260200161118b565b50505050905090810190601f1680156111d05780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b178152905182519295509350839250908083835b6020831061122b5780518252601f19909201916020918201910161120c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461128b576040519150601f19603f3d011682016040523d82523d6000602084013e611290565b606091505b509150915060008214156112a5573d60208201fd5b8080602001905160208110156112ba57600080fd5b8101908080516040519392919084600160201b8211156112d957600080fd5b9083019060208201858111156112ee57600080fd5b8251600160201b81118282018810171561130757600080fd5b82525081516020918201929091019080838360005b8381101561133457818101518382015260200161131c565b50505050905090810190601f1680156113615780820380516001836020036101000a031916815260200191505b5060405250505092505050919050565b600b5481565b60035461010090046001600160a01b031633146113c55760405162461bcd60e51b8152600401808060200182810382526039815260200180611d736039913960400191505060405180910390fd5b81156113ff576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b1790526113fd90610d92565b505b601280546001600160a01b038581166001600160a01b031983161790925560405160206024820181815285516044840152855194909316936114cb938693909283926064909201919085019080838360005b83811015611469578181015183820152602001611451565b50505050905090810190601f1680156114965780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b1790529250610d92915050565b50601254604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b6012546001600160a01b031681565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663601a0bf160e01b179052600090606090610e6f90610d92565b666379da05b6000081565b60095481565b6011546001600160a01b031681565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166370a0823160e01b179052600090606090610e6f90611152565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b179052600090606090610f2590610d92565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663852a12e360e01b179052600090606090610e6f90610d92565b600c5481565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610d8a5780601f10610d5f57610100808354040283529160200191610d8a565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166395dd919360e01b179052600090606090610e6f90611152565b600181565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663140e25ad60e31b179052600090606090610e6f90610d92565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b179052600090606090610f2590610d92565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052600090606090610e0790610d92565b600a5481565b6040805160048152602481019091526020810180516001600160e01b0316630ae9d70b60e41b179052600090606090610f2590611152565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b031663b2a02ff160e01b179052600090606090610ff190610d92565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316632dc7468360e21b179052600090606090610e6f90610d92565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316635bcd9e4560e11b179052600090606090610e6f90610d92565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b179052600090606090610f2590610d92565b6005546001600160a01b031681565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166361bfb47160e11b1790526000908190819081906060906119ca90611152565b90508080602001905160808110156119e157600080fd5b508051602082015160408301516060909301519199909850919650945092505050565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663317afabb60e21b179052600090606090610e6f90610d92565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663db006a7560e01b179052600090606090610e6f90610d92565b604080516001600160a01b03808516602483015283166044808301919091528251808303909101815260649091019091526020810180516001600160e01b0316636eb1769f60e11b179052600090606090610e0790611152565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b179052600090606090610f2590610d92565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b031663f2b3abbd60e01b179052600090606090610e6f90610d92565b6006546001600160a01b031681565b604080516001600160a01b0380861660248301526044820185905283166064808301919091528251808303909101815260849091019091526020810180516001600160e01b0316637af1e23160e11b179052600090606090610ff190610d92565b60035461010090046001600160a01b031681565b6040805160048152602481019091526020810180516001600160e01b0316631f1f3b4560e31b179052600090606090610f2590611152565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663fca7820b60e01b179052600090606090610e6f90610d92565b606060006060846001600160a01b0316846040518082805190602001908083835b60208310611cb95780518252601f199092019160209182019101611c9a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611d19576040519150601f19603f3d011682016040523d82523d6000602084013e611d1e565b606091505b50915091506000821415611d33573d60208201fd5b94935050505056fe54457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f742073656e642076616c756520746f2066616c6c6261636b54457263323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696ea265627a7a72315820b2c4de3fea5d4f33663c2de1caf70fd8670b8ebcf658de8427a8f2a8e0a39a6a64736f6c6343000510003254457263323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696e00000000000000000000000066e428c3f67a68878562e79a0234c1f83c208770000000000000000000000000b3831584acb95ed9ccb0c11f677b5ad01deaeec000000000000000000000000047db169cff785286966ca2acc90a8395a736649000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000957896fcb916bacccfdb55caecfaecfb58700000000000000000000000041c0b4c878eec90b256eec2521c1c9aeb443c7ea00000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000d546563746f6e6963205553445400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000574555344540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000066e428c3f67a68878562e79a0234c1f83c208770000000000000000000000000b3831584acb95ed9ccb0c11f677b5ad01deaeec000000000000000000000000047db169cff785286966ca2acc90a8395a736649000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000957896fcb916bacccfdb55caecfaecfb58700000000000000000000000041c0b4c878eec90b256eec2521c1c9aeb443c7ea00000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000d546563746f6e6963205553445400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000574555344540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : underlying_ (address): 0x66e428c3f67a68878562e79a0234c1f83c208770
Arg [1] : tcore_ (address): 0xb3831584acb95ed9ccb0c11f677b5ad01deaeec0
Arg [2] : interestRateModel_ (address): 0x47db169cff785286966ca2acc90a8395a7366490
Arg [3] : initialExchangeRateMantissa_ (uint256): 1000000000000000
Arg [4] : name_ (string): Tectonic USDT
Arg [5] : symbol_ (string): tUSDT
Arg [6] : decimals_ (uint8): 8
Arg [7] : admin_ (address): 0x00000957896fcb916bacccfdb55caecfaecfb587
Arg [8] : implementation_ (address): 0x41c0b4c878eec90b256eec2521c1c9aeb443c7ea
Arg [9] : becomeImplementationData (bytes): 0x

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000066e428c3f67a68878562e79a0234c1f83c208770
Arg [1] : 000000000000000000000000b3831584acb95ed9ccb0c11f677b5ad01deaeec0
Arg [2] : 00000000000000000000000047db169cff785286966ca2acc90a8395a7366490
Arg [3] : 00000000000000000000000000000000000000000000000000038d7ea4c68000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 00000000000000000000000000000957896fcb916bacccfdb55caecfaecfb587
Arg [8] : 00000000000000000000000041c0b4c878eec90b256eec2521c1c9aeb443c7ea
Arg [9] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [11] : 546563746f6e6963205553445400000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [13] : 7455534454000000000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

17601:23023:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40112:9;:14;40104:81;;;;-1:-1:-1;;;40104:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40284:14;;:37;;40266:12;;-1:-1:-1;;;;;40284:14:0;;40266:12;;40312:8;;40284:37;40266:12;40312:8;;40266:12;40284:37;1:33:-1;40284:37:0;;45:16:-1;;;-1:-1;40284:37:0;;-1:-1:-1;40284:37:0;;-1:-1:-1;;40284:37:0;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;40265:56:0;;;40384:4;40378:11;40435:14;40432:1;40418:12;40403:47;40473:7;40494:47;;;;40586:14;40572:12;40565:36;40494:47;40524:14;40510:12;40503:36;7331:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7331:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7331:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38872:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38872:141:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38872:141:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;38872:141:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38872:141:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;38872:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38872:141:0;;-1:-1:-1;38872:141:0;;-1:-1:-1;;;;;38872:141:0:i;26626:249::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26626:249:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;26626:249:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;23459:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23459:230:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23459:230:0;;:::i;:::-;;;;;;;;;;;;;;;;8636:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8636:33:0;;;:::i;30438:243::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30438:243:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30438:243:0;-1:-1:-1;;;;;30438:243:0;;:::i;9281:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9281:23:0;;;:::i;31750:215::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31750:215:0;;;:::i;33852:160::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33852:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33852:160:0;-1:-1:-1;;;;;33852:160:0;;:::i;:::-;;25879:277;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25879:277:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25879:277:0;;;;;;;;;;;;;;;;;:::i;23977:278::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23977:278:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23977:278:0;;;;;;;;:::i;8058:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8058:35:0;;;:::i;:::-;;;;-1:-1:-1;;;;;8058:35:0;;;;;;;;;;;;;;7527:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7527:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28137:237;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28137:237:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28137:237:0;-1:-1:-1;;;;;28137:237:0;;:::i;32135:195::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32135:195:0;;;:::i;36498:228::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36498:228:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36498:228:0;;:::i;39435:434::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39435:434:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39435:434:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;39435:434:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39435:434:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;39435:434:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39435:434:0;;-1:-1:-1;39435:434:0;;-1:-1:-1;;;;;39435:434:0:i;9045:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9045:24:0;;;:::i;20373:645::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20373:645:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;20373:645:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;20373:645:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20373:645:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20373:645:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;20373:645:0;;-1:-1:-1;20373:645:0;;-1:-1:-1;;;;;20373:645:0:i;16078:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16078:29:0;;;:::i;36979:240::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36979:240:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36979:240:0;;:::i;10254:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10254:56:0;;;:::i;8759:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8759:30:0;;;:::i;15125:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15125:25:0;;;:::i;27655:226::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27655:226:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27655:226:0;-1:-1:-1;;;;;27655:226:0;;:::i;29937:210::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29937:210:0;;;:::i;22519:242::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22519:242:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22519:242:0;;:::i;9175:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9175:25:0;;;:::i;7427:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7427:20:0;;;:::i;30890:248::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30890:248:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30890:248:0;-1:-1:-1;;;;;30890:248:0;;:::i;10468:36::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10468:36:0;;;:::i;21376:214::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21376:214:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21376:214:0;;:::i;32586:198::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32586:198:0;;;:::i;25332:240::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25332:240:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25332:240:0;;;;;;;;:::i;8910:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8910:23:0;;;:::i;29574:217::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29574:217:0;;;:::i;33345:294::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33345:294:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;33345:294:0;;;;;;;;;;;;;;;;;:::i;34461:259::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34461:259:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34461:259:0;-1:-1:-1;;;;;34461:259:0;;:::i;34947:263::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34947:263:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34947:263:0;-1:-1:-1;;;;;34947:263:0;;:::i;31292:208::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31292:208:0;;;:::i;8184:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8184:41:0;;;:::i;28721:284::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28721:284:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28721:284:0;-1:-1:-1;;;;;28721:284:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23029:222;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23029:222:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23029:222:0;;:::i;21941:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21941:222:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21941:222:0;;:::i;27205:260::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27205:260:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27205:260:0;;;;;;;;;;:::i;36059:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36059:196:0;;;:::i;37588:279::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37588:279:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37588:279:0;-1:-1:-1;;;;;37588:279:0;;:::i;8327:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8327:42:0;;;:::i;24737:334::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24737:334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24737:334:0;;;;;;;;;;;;;;;;;:::i;7947:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7947:28:0;;;:::i;29181:217::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29181:217:0;;;:::i;35513:268::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35513:268:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35513:268:0;;:::i;7331:18::-;;;;;;;;;;;;;;;-1:-1:-1;;7331:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38872:141::-;38984:14;;38941:12;;38973:32;;-1:-1:-1;;;;;38984:14:0;39000:4;38973:10;:32::i;:::-;38966:39;38872:141;-1:-1:-1;;38872:141:0:o;26626:249::-;26756:68;;;-1:-1:-1;;;;;26756:68:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;26756:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;26694:4:0;;26711:17;;26731:94;;:24;:94::i;:::-;26711:114;;26854:4;26843:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26843:24:0;;26626:249;-1:-1:-1;;;;26626:249:0:o;23459:230::-;23578:60;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23578:60:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;23516:4:0;;23533:17;;23553:86;;:24;:86::i;:::-;23533:106;;23668:4;23657:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23657:24:0;;23459:230;-1:-1:-1;;;23459:230:0:o;8636:33::-;;;;:::o;30438:243::-;30565:65;;;-1:-1:-1;;;;;30565:65:0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;30565:65:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;30503:4:0;;30520:17;;30540:91;;:24;:91::i;9281:23::-;;;;:::o;31750:215::-;31867:47;;;22:32:-1;6:49;;31867:47:0;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;31801:4:0;;31818:17;;31838:77;;:28;:77::i;:::-;31818:97;;31944:4;31933:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31933:24:0;;-1:-1:-1;;31750:215:0;:::o;33852:160::-;33950:53;;;-1:-1:-1;;;;;33950:53:0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;33950:53:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;33925:79:0;;:24;:79::i;:::-;;33852:160;:::o;25879:277::-;26023:82;;;-1:-1:-1;;;;;26023:82:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;26023:82:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;25961:4:0;;25978:17;;25998:108;;:24;:108::i;:::-;25978:128;;26135:4;26124:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26124:24:0;;25879:277;-1:-1:-1;;;;;25879:277:0:o;23977:278::-;24120:84;;;-1:-1:-1;;;;;24120:84:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;24120:84:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;24058:4:0;;24075:17;;24095:110;;:24;:110::i;8058:35::-;;;-1:-1:-1;;;;;8058:35:0;;:::o;7527:21::-;;;;;;:::o;28137:237::-;28261:62;;;-1:-1:-1;;;;;28261:62:0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28261:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;28199:4:0;;28216:17;;28236:88;;:24;:88::i;32135:195::-;32243:36;;;22:32:-1;6:49;;32243:36:0;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;32177:4:0;;32194:17;;32214:66;;:28;:66::i;36498:228::-;36616:59;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;36616:59:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;36554:4:0;;36571:17;;36591:85;;:24;:85::i;39435:434::-;39513:12;39539;39553:23;39588:4;-1:-1:-1;;;;;39580:24:0;39664:4;39605:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39605:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39605:64:0;;;-1:-1:-1;;26:21;;;22:32;6:49;;39605:64:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;39580:90:0;;;;39605:64;;-1:-1:-1;39580:90:0;-1:-1:-1;39580:90:0;;-1:-1:-1;25:18;39580:90:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;39580:90:0;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;39538:132:0;;;;39720:1;39711:7;39708:14;39705:2;;;39772:14;39765:4;39753:10;39749:21;39742:45;39705:2;39841:10;39830:31;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39830:31:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;39830:31:0;;420:4:-1;411:14;;;;39830:31:0;;;;;411:14:-1;39830:31:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39830:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39823:38;;;;39435:434;;;:::o;9045:24::-;;;;:::o;20373:645::-;20523:5;;;;;-1:-1:-1;;;;;20523:5:0;20509:10;:19;20501:89;;;;-1:-1:-1;;;20501:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20607:11;20603:120;;;20660:50;;;22:32:-1;6:49;;20660:50:0;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20635:76:0;;:24;:76::i;:::-;;20603:120;20763:14;;;-1:-1:-1;;;;;20788:32:0;;;-1:-1:-1;;;;;;20788:32:0;;;;;;20858:81;;;;;;;;;;;;;;;;;20763:14;;;;;20833:107;;20914:24;;20858:81;;;;;;;;;;;;;;;;20735:25;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20858:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20858:81:0;;;-1:-1:-1;;26:21;;;22:32;6:49;;20858:81:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20858:81:0;-1:-1:-1;20833:24:0;;-1:-1:-1;;20833:107:0:i;:::-;-1:-1:-1;20995:14:0;;20958:52;;;-1:-1:-1;;;;;20958:52:0;;;;;20995:14;;;20958:52;;;;;;;;;;;;;;;;20373:645;;;;:::o;16078:29::-;;;-1:-1:-1;;;;;16078:29:0;;:::o;36979:240::-;37103:65;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;37103:65:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;37041:4:0;;37058:17;;37078:91;;:24;:91::i;10254:56::-;10304:6;10254:56;:::o;8759:30::-;;;;:::o;15125:25::-;;;-1:-1:-1;;;;;15125:25:0;;:::o;27655:226::-;27778:52;;;-1:-1:-1;;;;;27778:52:0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;27778:52:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;27712:4:0;;27729:17;;27749:82;;:28;:82::i;29937:210::-;30048:48;;;22:32:-1;6:49;;30048:48:0;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;29986:4:0;;30003:17;;30023:74;;:24;:74::i;22519:242::-;22644:66;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22644:66:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;22582:4:0;;22599:17;;22619:92;;:24;:92::i;9175:25::-;;;;:::o;7427:20::-;;;;;;;;;;;;;;-1:-1:-1;;7427:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30890:248;31023:64;;;-1:-1:-1;;;;;31023:64:0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;31023:64:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;30957:4:0;;30974:17;;30994:94;;:28;:94::i;10468:36::-;10500:4;10468:36;:::o;21376:214::-;21487:52;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21487:52:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21425:4:0;;21442:17;;21462:78;;:24;:78::i;32586:198::-;32690:43;;;22:32:-1;6:49;;32690:43:0;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;32628:4:0;;32645:17;;32665:69;;:24;:69::i;25332:240::-;25456:65;;;-1:-1:-1;;;;;25456:65:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;25456:65:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;25394:4:0;;25411:17;;25431:91;;:24;:91::i;8910:23::-;;;;:::o;29574:217::-;29693:47;;;22:32:-1;6:49;;29693:47:0;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;29627:4:0;;29644:17;;29664:77;;:28;:77::i;33345:294::-;33496:92;;;-1:-1:-1;;;;;33496:92:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;33496:92:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;33434:4:0;;33451:17;;33471:118;;:24;:118::i;34461:259::-;34600:69;;;-1:-1:-1;;;;;34600:69:0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;34600:69:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;34538:4:0;;34555:17;;34575:95;;:24;:95::i;34947:263::-;35090:69;;;-1:-1:-1;;;;;35090:69:0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;35090:69:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;35028:4:0;;35045:17;;35065:95;;:24;:95::i;31292:208::-;31401:48;;;22:32:-1;6:49;;31401:48:0;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;31339:4:0;;31356:17;;31376:74;;:24;:74::i;8184:41::-;;;-1:-1:-1;;;;;8184:41:0;;:::o;28721:284::-;28873:63;;;-1:-1:-1;;;;;28873:63:0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28873:63:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;28789:4:0;;;;;;;;28824:17;;28844:93;;:28;:93::i;:::-;28824:113;;28966:4;28955:42;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;28955:42:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;28955:42:0;;-1:-1:-1;28955:42:0;-1:-1:-1;28721:284:0;-1:-1:-1;;;28721:284:0:o;23029:222::-;23144:56;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23144:56:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;23082:4:0;;23099:17;;23119:82;;:24;:82::i;21941:222::-;22056:56;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22056:56:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21994:4:0;;22011:17;;22031:82;;:24;:82::i;27205:260::-;27345:69;;;-1:-1:-1;;;;;27345:69:0;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;27345:69:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;27279:4:0;;27296:17;;27316:99;;:28;:99::i;36059:196::-;36163:41;;;22:32:-1;6:49;;36163:41:0;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;36101:4:0;;36118:17;;36138:67;;:24;:67::i;37588:279::-;37737:79;;;-1:-1:-1;;;;;37737:79:0;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;37737:79:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;37675:4:0;;37692:17;;37712:105;;:24;:105::i;8327:42::-;;;-1:-1:-1;;;;;8327:42:0;;:::o;24737:334::-;24912:108;;;-1:-1:-1;;;;;24912:108:0;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;24912:108:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;24850:4:0;;24867:17;;24887:134;;:24;:134::i;7947:28::-;;;;;;-1:-1:-1;;;;;7947:28:0;;:::o;29181:217::-;29300:47;;;22:32:-1;6:49;;29300:47:0;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;29234:4:0;;29251:17;;29271:77;;:28;:77::i;35513:268::-;35651:79;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;35651:79:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;35589:4:0;;35606:17;;35626:105;;:24;:105::i;38227:343::-;38300:12;38326;38340:23;38367:6;-1:-1:-1;;;;;38367:19:0;38387:4;38367:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38367:25:0;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;38325:67:0;;;;38442:1;38433:7;38430:14;38427:2;;;38494:14;38487:4;38475:10;38471:21;38464:45;38427:2;38552:10;38227:343;-1:-1:-1;;;;38227:343:0:o

Swarm Source

bzzr://b2c4de3fea5d4f33663c2de1caf70fd8670b8ebcf658de8427a8f2a8e0a39a6a
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.