ETH Price: $3,761.28 (-2.31%)

Token

Hundred Finance (HND)

Overview

Max Total Supply

100,000,000 HND

Holders

699

Market

Price

$0.021 @ 0.000006 ETH (-5.05%)

Onchain Market Cap

$2,104,248.00

Circulating Supply Market Cap

$654,756.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000…000
Balance
90,696,689 HND

Value
$1,908,483.26 ( ~507.4025 ETH) [90.6967%]
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Hundred Finance is a decentralized application (dApp) that enables the lending and borrowing of cryptocurrencies.

Market

Volume (24H):$66.09
Market Capitalization:$654,756.00
Circulating Supply:30,985,328.00 HND
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
Hundred

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : Hundred.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.7;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface of the ERC2612 standard as defined in the EIP.
 *
 * Adds the {permit} method, which can be used to change one's
 * {IERC20-allowance} without having to send a transaction, by signing a
 * message. This allows users to spend tokens without having to hold Ether.
 *
 * See https://eips.ethereum.org/EIPS/eip-2612.
 */
interface IERC2612 {

    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);
}

/// @dev Wrapped ERC-20 v10 (AnyswapV3ERC20) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an AnyswapV3ERC20 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from AnyswapV3ERC20, which will then burn AnyswapV3ERC20 token in your wallet. The amount of AnyswapV3ERC20 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IAnyswapV3ERC20 is IERC20, IERC2612 {

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}

interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AnyswapV5ERC20 is IAnyswapV3ERC20 {
    using SafeERC20 for IERC20;
    string public name;
    string public symbol;
    uint8  public immutable override decimals;

    address public immutable underlying;

    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public immutable DOMAIN_SEPARATOR;

    /// @dev Records amount of AnyswapV3ERC20 token owned by account.
    mapping (address => uint256) public override balanceOf;
    uint256 private _totalSupply;

    // init flag for setting immediate vault, needed for CREATE2 support
    bool private _init;

    // flag to enable/disable swapout vs vault.burn so multiple events are triggered
    bool private _vaultOnly;

    // configurable delay for timelock functions
    uint public delay = 2*24*3600;


    // set of minters, can be this bridge or other bridges
    mapping(address => bool) public isMinter;
    address[] public minters;

    // primary controller of the token contract
    address public vault;

    address public pendingMinter;
    uint public delayMinter;

    address public pendingVault;
    uint public delayVault;

    uint public pendingDelay;
    uint public delayDelay;


    modifier onlyAuth() {
        require(isMinter[msg.sender], "AnyswapV4ERC20: FORBIDDEN");
        _;
    }

    modifier onlyVault() {
        require(msg.sender == mpc(), "AnyswapV3ERC20: FORBIDDEN");
        _;
    }

    function owner() public view returns (address) {
        return mpc();
    }

    function mpc() public view returns (address) {
        if (block.timestamp >= delayVault) {
            return pendingVault;
        }
        return vault;
    }

    function setVaultOnly(bool enabled) external onlyVault {
        _vaultOnly = enabled;
    }

    function initVault(address _vault) external onlyVault {
        require(_init);
        vault = _vault;
        pendingVault = _vault;
        isMinter[_vault] = true;
        minters.push(_vault);
        delayVault = block.timestamp;
        _init = false;
    }

    function setMinter(address _auth) external onlyVault {
        pendingMinter = _auth;
        delayMinter = block.timestamp + delay;
    }

    function setVault(address _vault) external onlyVault {
        pendingVault = _vault;
        delayVault = block.timestamp + delay;
    }

    function applyVault() external onlyVault {
        require(block.timestamp >= delayVault);
        vault = pendingVault;
    }

    function applyMinter() external onlyVault {
        require(block.timestamp >= delayMinter);
        isMinter[pendingMinter] = true;
        minters.push(pendingMinter);
    }

    // No time delay revoke minter emergency function
    function revokeMinter(address _auth) external onlyVault {
        isMinter[_auth] = false;
    }

    function getAllMinters() external view returns (address[] memory) {
        return minters;
    }


    function changeVault(address newVault) external onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeVault(vault, pendingVault, delayVault);
        return true;
    }

    function changeMPCOwner(address newVault) public onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeMPCOwner(vault, pendingVault, delayVault);
        return true;
    }

    function mint(address to, uint256 amount) external onlyAuth returns (bool) {
        _mint(to, amount);
        return true;
    }

    function burn(address from, uint256 amount) external onlyAuth returns (bool) {
        require(from != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(from, amount);
        return true;
    }

    function Swapin(bytes32 txhash, address account, uint256 amount) public onlyAuth returns (bool) {
        _mint(account, amount);
        emit LogSwapin(txhash, account, amount);
        return true;
    }

    function Swapout(uint256 amount, address bindaddr) public returns (bool) {
        require(!_vaultOnly, "AnyswapV4ERC20: onlyAuth");
        require(bindaddr != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(msg.sender, amount);
        emit LogSwapout(msg.sender, bindaddr, amount);
        return true;
    }

    /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
    /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
    mapping (address => uint256) public override nonces;

    /// @dev Records number of AnyswapV3ERC20 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping (address => mapping (address => uint256)) public override allowance;

    event LogChangeVault(address indexed oldVault, address indexed newVault, uint indexed effectiveTime);
    event LogChangeMPCOwner(address indexed oldOwner, address indexed newOwner, uint indexed effectiveHeight);
    event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
    event LogSwapout(address indexed account, address indexed bindaddr, uint amount);
    event LogAddAuth(address indexed auth, uint timestamp);

    constructor(string memory _name, string memory _symbol, uint8 _decimals, address _underlying, address _vault) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        underlying = _underlying;
        if (_underlying != address(0x0)) {
            require(_decimals == IERC20(_underlying).decimals());
        }

        // Use init to allow for CREATE2 accross all chains
        _init = true;

        // Disable/Enable swapout for v1 tokens vs mint/burn for v3 tokens
        _vaultOnly = false;

        vault = _vault;
        pendingVault = _vault;
        delayVault = block.timestamp;

        uint256 chainId;
        assembly {chainId := chainid()}
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));
    }

    /// @dev Returns the total supply of AnyswapV3ERC20 token as the ETH held in this contract.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function depositWithPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).permit(target, address(this), value, deadline, v, r, s);
        IERC20(underlying).safeTransferFrom(target, address(this), value);
        return _deposit(value, to);
    }

    function depositWithTransferPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).transferWithPermit(target, address(this), value, deadline, v, r, s);
        return _deposit(value, to);
    }

    function deposit() external returns (uint) {
        uint _amount = IERC20(underlying).balanceOf(msg.sender);
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), _amount);
        return _deposit(_amount, msg.sender);
    }

    function deposit(uint amount) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, msg.sender);
    }

    function deposit(uint amount, address to) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, to);
    }

    function depositVault(uint amount, address to) external onlyVault returns (uint) {
        return _deposit(amount, to);
    }

    function _deposit(uint amount, address to) internal returns (uint) {
        require(underlying != address(0x0) && underlying != address(this));
        _mint(to, amount);
        return amount;
    }

    function withdraw() external returns (uint) {
        return _withdraw(msg.sender, balanceOf[msg.sender], msg.sender);
    }

    function withdraw(uint amount) external returns (uint) {
        return _withdraw(msg.sender, amount, msg.sender);
    }

    function withdraw(uint amount, address to) external returns (uint) {
        return _withdraw(msg.sender, amount, to);
    }

    function withdrawVault(address from, uint amount, address to) external onlyVault returns (uint) {
        return _withdraw(from, amount, to);
    }

    function _withdraw(address from, uint amount, address to) internal returns (uint) {
        _burn(from, amount);
        IERC20(underlying).safeTransfer(to, amount);
        return amount;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        balanceOf[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        balanceOf[account] -= amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
    }

    /// @dev Sets `value` as allowance of `spender` account over `owner` account's AnyswapV3ERC20 token, given `owner` account's signed approval.
    /// Emits {Approval} event.
    /// Requirements:
    ///   - `deadline` must be timestamp in future.
    ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
    ///   - the signature must use `owner` account's current nonce (see {nonces}).
    ///   - the signer cannot be zero address and must be `owner` account.
    /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
    /// AnyswapV3ERC20 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                target,
                spender,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        // _approve(owner, spender, value);
        allowance[target][spender] = value;
        emit Approval(target, spender, value);
    }

    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override returns (bool) {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                TRANSFER_TYPEHASH,
                target,
                to,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[target];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[target] = balance - value;
        balanceOf[to] += value;
        emit Transfer(target, to, value);

        return true;
    }

    function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashStruct));
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = prefixed(hashStruct);
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    // Builds a prefixed hash to mimic the behavior of eth_sign.
    function prefixed(bytes32 hash) internal view returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", DOMAIN_SEPARATOR, hash));
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    function transfer(address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of AnyswapV3ERC20 token.
    ///   - `from` account must have approved caller to spend at least `value` of AnyswapV3ERC20 token, unless `from` and caller are the same account.
    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "AnyswapV3ERC20: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }

        uint256 balance = balanceOf[from];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[from] = balance - value;
        balanceOf[to] += value;
        emit Transfer(from, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
    }

    function rescueERC20(address token, uint tokenAmount) external onlyVault {
        IERC20(token).transfer(vault, tokenAmount);
    }
}

contract Hundred is AnyswapV5ERC20 {
    constructor(address ownerAddress) 
        AnyswapV5ERC20("Hundred Finance", "HND", 18, address(0x0), ownerAddress) {
        _mint(ownerAddress, 100e24);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"auth","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LogAddAuth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveHeight","type":"uint256"}],"name":"LogChangeMPCOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeMPCOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMinter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithTransferPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"initVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setVaultOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60e06040526202a3006005553480156200001857600080fd5b50604051620030b1380380620030b18339810160408190526200003b9162000430565b6040518060400160405280600f81526020016e48756e647265642046696e616e636560881b8152506040518060400160405280600381526020016212139160ea1b815250601260008484600090805190602001906200009c9291906200038a565b508351620000b29060019060208701906200038a565b507fff0000000000000000000000000000000000000000000000000000000000000060f884901b166080526001600160601b0319606083901b1660a0526001600160a01b038216156200018657816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200013957600080fd5b505afa1580156200014e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000174919062000462565b60ff168360ff16146200018657600080fd5b6004805461ffff19166001179055600880546001600160a01b0383166001600160a01b03199182168117909255600b8054909116909117905542600c5560405146907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90620001f89060009062000487565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c0016040516020818303038152906040528051906020012060c081815250505050505050506200029b816a52b7d2dcc80cd2e4000000620002a260201b60201c565b506200058f565b6001600160a01b038216620002fd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600360008282546200031191906200052b565b90915550506001600160a01b03821660009081526002602052604081208054839290620003409084906200052b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620003989062000552565b90600052602060002090601f016020900481019282620003bc576000855562000407565b82601f10620003d757805160ff191683800117855562000407565b8280016001018555821562000407579182015b8281111562000407578251825591602001919060010190620003ea565b506200041592915062000419565b5090565b5b808211156200041557600081556001016200041a565b6000602082840312156200044357600080fd5b81516001600160a01b03811681146200045b57600080fd5b9392505050565b6000602082840312156200047557600080fd5b815160ff811681146200045b57600080fd5b600080835481600182811c915080831680620004a457607f831692505b6020808410821415620004c557634e487b7160e01b86526022600452602486fd5b818015620004dc5760018114620004ee576200051d565b60ff198616895284890196506200051d565b60008a81526020902060005b86811015620005155781548b820152908501908301620004fa565b505084890196505b509498975050505050505050565b600082198211156200054d57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200056757607f821691505b602082108114156200058957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160f81c60a05160601c60c051612a9862000619600039600081816104a701528181611ec10152611fd30152600081816105ab01528181611378015281816113c4015281816114440152818161172e01528181611943015281816119cc01528181611c9701528181611db4015281816121a301526121d60152600061046e0152612a986000f3fe608060405234801561001057600080fd5b506004361061035a5760003560e01c80637ecebe00116101d3578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c2664146107a2578063f954734e146107aa578063fbfa77cf146107bd578063fca3b5aa146107d057600080fd5b8063d93f24451461075c578063dd62ed3e14610764578063ec126c771461078f57600080fd5b8063cae9ca51116100de578063cae9ca511461071b578063cfbd48851461072e578063d0e30db014610741578063d505accf1461074957600080fd5b8063bebbf4d0146106ec578063c3081240146106ff578063c4b740f51461070857600080fd5b806395d89b4111610171578063a29dff721161014b578063a29dff721461069a578063a9059cbb146106a3578063aa271e1a146106b6578063b6b55f25146106d957600080fd5b806395d89b411461066a5780639dc29fac14610672578063a045442c1461068557600080fd5b806387689e28116101ad57806387689e28146106335780638cd4426d1461063c5780638da5cb5b1461064f57806391c5df491461065757600080fd5b80637ecebe00146105ed57806381a37c181461060d5780638623ec7b1461062057600080fd5b80633ccfd60b116102ad57806360e232a91161024b5780636a42b8f8116102255780636a42b8f81461058a5780636e553f65146105935780636f307dc3146105a657806370a08231146105cd57600080fd5b806360e232a914610551578063628d6cba146105645780636817031b1461057757600080fd5b80634ca8f0ed116102875780634ca8f0ed146104f757806352113ba7146105005780635f9b105d1461052b578063605629d61461053e57600080fd5b80633ccfd60b146104c95780634000aea0146104d157806340c10f19146104e457600080fd5b806318160ddd1161031a5780632ebe3fbb116102f45780632ebe3fbb1461042f57806330adf81f14610442578063313ce567146104695780633644e515146104a257600080fd5b806318160ddd1461040157806323b872dd146104095780632e1a7d4d1461041c57600080fd5b806239d6ec1461035f578062bf26f414610385578062f714ce146103ac57806306fdde03146103bf578063095ea7b3146103d45780630d707df8146103f7575b600080fd5b61037261036d366004612550565b6107e3565b6040519081526020015b60405180910390f35b6103727f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b6103726103ba36600461270e565b610839565b6103c761084d565b60405161037c9190612823565b6103e76103e2366004612526565b6108db565b604051901515815260200161037c565b6103ff610935565b005b600354610372565b6103e7610417366004612480565b6109f1565b61037261042a3660046126dc565b610bdc565b6103ff61043d366004612432565b610bef565b6103727f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104907f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161037c565b6103727f000000000000000000000000000000000000000000000000000000000000000081565b610372610cc6565b6103e76104df36600461258c565b610ce7565b6103e76104f2366004612526565b610e40565b610372600d5481565b600b54610513906001600160a01b031681565b6040516001600160a01b03909116815260200161037c565b6103e7610539366004612432565b610e82565b6103e761054c3660046124bc565b610f57565b6103e761055f366004612432565b611167565b6103e761057236600461270e565b61123b565b6103ff610585366004612432565b611303565b61037260055481565b6103726105a136600461270e565b611369565b6105137f000000000000000000000000000000000000000000000000000000000000000081565b6103726105db366004612432565b60026020526000908152604090205481565b6103726105fb366004612432565b600f6020526000908152604090205481565b61037261061b366004612613565b6113aa565b61051361062e3660046126dc565b611484565b610372600c5481565b6103ff61064a366004612526565b6114ae565b610513611571565b600954610513906001600160a01b031681565b6103c761157b565b6103e7610680366004612526565b611588565b61068d6115e7565b60405161037c91906127d6565b610372600e5481565b6103e76106b1366004612526565b611649565b6103e76106c4366004612432565b60066020526000908152604090205460ff1681565b6103726106e73660046126dc565b61171f565b6103726106fa36600461270e565b611760565b610372600a5481565b6103ff61071636600461267d565b61179a565b6103e761072936600461258c565b6117ec565b6103ff61073c366004612432565b6118c8565b610372611921565b6103ff6107573660046124bc565b611a04565b6103ff611b72565b61037261077236600461244d565b601060209081526000928352604080842090915290825290205481565b6103e761079d3660046126b7565b611bdd565b610513611c52565b6103726107b8366004612613565b611c7d565b600854610513906001600160a01b031681565b6103ff6107de366004612432565b611d35565b60006107ed611c52565b6001600160a01b0316336001600160a01b0316146108265760405162461bcd60e51b815260040161081d90612856565b60405180910390fd5b610831848484611d9b565b949350505050565b6000610846338484611d9b565b9392505050565b6000805461085a906129a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610886906129a5565b80156108d35780601f106108a8576101008083540402835291602001916108d3565b820191906000526020600020905b8154815290600101906020018083116108b657829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612a43833981519152906109249086815260200190565b60405180910390a350600192915050565b61093d611c52565b6001600160a01b0316336001600160a01b03161461096d5760405162461bcd60e51b815260040161081d90612856565b600a5442101561097c57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b60006001600160a01b038316151580610a1357506001600160a01b0383163014155b610a1c57600080fd5b6001600160a01b0384163314610b16576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610b145782811015610abb5760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b606482015260840161081d565b6000610ac78483612962565b6001600160a01b03871660008181526010602090815260408083203380855290835292819020859055518481529394509092600080516020612a43833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b4f5760405162461bcd60e51b815260040161081d906128c4565b610b598382612962565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b8f90849061294a565b92505081905550836001600160a01b0316856001600160a01b0316600080516020612a2383398151915285604051610bc991815260200190565b60405180910390a3506001949350505050565b6000610be9338333611d9b565b92915050565b610bf7611c52565b6001600160a01b0316336001600160a01b031614610c275760405162461bcd60e51b815260040161081d90612856565b60045460ff16610c3657600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610ce29181611d9b565b905090565b60006001600160a01b038516151580610d0957506001600160a01b0385163014155b610d1257600080fd5b3360009081526002602052604090205484811015610d425760405162461bcd60e51b815260040161081d906128c4565b610d4c8582612962565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d7f90849061294a565b90915550506040518581526001600160a01b038716903390600080516020612a238339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610de490339089908990899060040161278e565b602060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e36919061269a565b9695505050505050565b3360009081526006602052604081205460ff16610e6f5760405162461bcd60e51b815260040161081d90612913565b610e798383611de3565b50600192915050565b6000610e8c611c52565b6001600160a01b0316336001600160a01b031614610ebc5760405162461bcd60e51b815260040161081d90612856565b6001600160a01b038216610ee25760405162461bcd60e51b815260040161081d9061288d565b600b80546001600160a01b0319166001600160a01b038416179055600554610f0a904261294a565b600c819055600b546008546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a45060015b919050565b600084421115610fa95760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d69740000604482015260640161081d565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610ff6836129e0565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110578982878787611eb1565b8061106a575061106a8982878787611fa1565b61107357600080fd5b6001600160a01b03881615158061109357506001600160a01b0388163014155b61109c57600080fd5b6001600160a01b038916600090815260026020526040902054878110156110d55760405162461bcd60e51b815260040161081d906128c4565b6110df8882612962565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a929061111590849061294a565b92505081905550886001600160a01b03168a6001600160a01b0316600080516020612a238339815191528a60405161114f91815260200190565b60405180910390a35060019998505050505050505050565b6000611171611c52565b6001600160a01b0316336001600160a01b0316146111a15760405162461bcd60e51b815260040161081d90612856565b6001600160a01b0382166111c75760405162461bcd60e51b815260040161081d9061288d565b600b80546001600160a01b0319166001600160a01b0384161790556005546111ef904261294a565b600c819055600b546008546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600454600090610100900460ff16156112965760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c79417574680000000000000000604482015260640161081d565b6001600160a01b0382166112bc5760405162461bcd60e51b815260040161081d9061288d565b6112c6338461205c565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c88890602001610924565b61130b611c52565b6001600160a01b0316336001600160a01b03161461133b5760405162461bcd60e51b815260040161081d90612856565b600b80546001600160a01b0319166001600160a01b038316179055600554611363904261294a565b600c5550565b60006113a06001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308661212e565b610846838361219f565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf90611405908b9030908c908c908c908c908c9060040161274d565b600060405180830381600087803b15801561141f57600080fd5b505af1158015611433573d6000803e3d6000fd5b5061146e9250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905089308a61212e565b611478878361219f565b98975050505050505050565b6007818154811061149457600080fd5b6000918252602090912001546001600160a01b0316905081565b6114b6611c52565b6001600160a01b0316336001600160a01b0316146114e65760405162461bcd60e51b815260040161081d90612856565b60085460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b15801561153457600080fd5b505af1158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c919061269a565b505050565b6000610ce2611c52565b6001805461085a906129a5565b3360009081526006602052604081205460ff166115b75760405162461bcd60e51b815260040161081d90612913565b6001600160a01b0383166115dd5760405162461bcd60e51b815260040161081d9061288d565b610e79838361205c565b6060600780548060200260200160405190810160405280929190818152602001828054801561163f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611621575b5050505050905090565b60006001600160a01b03831615158061166b57506001600160a01b0383163014155b61167457600080fd5b33600090815260026020526040902054828110156116a45760405162461bcd60e51b815260040161081d906128c4565b6116ae8382612962565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906116e190849061294a565b90915550506040518381526001600160a01b038516903390600080516020612a23833981519152906020015b60405180910390a35060019392505050565b60006117566001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561212e565b610be9823361219f565b600061176a611c52565b6001600160a01b0316336001600160a01b0316146113a05760405162461bcd60e51b815260040161081d90612856565b6117a2611c52565b6001600160a01b0316336001600160a01b0316146117d25760405162461bcd60e51b815260040161081d90612856565b600480549115156101000261ff0019909216919091179055565b3360008181526010602090815260408083206001600160a01b03891680855292528083208790555191929091600080516020612a43833981519152906118359088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f9061186d90339088908890889060040161278e565b602060405180830381600087803b15801561188757600080fd5b505af115801561189b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bf919061269a565b95945050505050565b6118d0611c52565b6001600160a01b0316336001600160a01b0316146119005760405162461bcd60e51b815260040161081d90612856565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561198557600080fd5b505afa158015611999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bd91906126f5565b90506119f46001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308461212e565b6119fe813361219f565b91505090565b83421115611a545760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d69740000604482015260640161081d565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086611aa1836129e0565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611b028882868686611eb1565b80611b155750611b158882868686611fa1565b611b1e57600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a90559051898152600080516020612a43833981519152910160405180910390a35050505050505050565b611b7a611c52565b6001600160a01b0316336001600160a01b031614611baa5760405162461bcd60e51b815260040161081d90612856565b600c54421015611bb957600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff16611c0c5760405162461bcd60e51b815260040161081d90612913565b611c168383611de3565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161170d91815260200190565b6000600c544210611c6d5750600b546001600160a01b031690565b506008546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063605629d690611cd8908b9030908c908c908c908c908c9060040161274d565b602060405180830381600087803b158015611cf257600080fd5b505af1158015611d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2a919061269a565b50611478878361219f565b611d3d611c52565b6001600160a01b0316336001600160a01b031614611d6d5760405162461bcd60e51b815260040161081d90612856565b600980546001600160a01b0319166001600160a01b038316179055600554611d95904261294a565b600a5550565b6000611da7848461205c565b611ddb6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838561221c565b509092915050565b6001600160a01b038216611e395760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161081d565b8060036000828254611e4b919061294a565b90915550506001600160a01b03821660009081526002602052604081208054839290611e7890849061294a565b90915550506040518181526001600160a01b03831690600090600080516020612a23833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527f0000000000000000000000000000000000000000000000000000000000000000602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611f60573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114785750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080612021866040517f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208201527f0000000000000000000000000000000000000000000000000000000000000000603c820152605c8101829052600090607c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611f3e565b6001600160a01b0382166120bc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161081d565b6001600160a01b038216600090815260026020526040812080548392906120e4908490612962565b9250508190555080600360008282546120fd9190612962565b90915550506040518181526000906001600160a01b03841690600080516020612a2383398151915290602001611ea5565b6040516001600160a01b03808516602483015283166044820152606481018290526121999085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261224c565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580159061220257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b61220b57600080fd5b6122158284611de3565b5090919050565b6040516001600160a01b03831660248201526044810182905261156c90849063a9059cbb60e01b90606401612162565b61225e826001600160a01b03166123d3565b6122aa5760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015260640161081d565b600080836001600160a01b0316836040516122c59190612731565b6000604051808303816000865af19150503d8060008114612302576040519150601f19603f3d011682016040523d82523d6000602084013e612307565b606091505b5091509150816123595760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015260640161081d565b8051156121995780806020019051810190612374919061269a565b6121995760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161081d565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108315750141592915050565b80356001600160a01b0381168114610f5257600080fd5b803560ff81168114610f5257600080fd5b60006020828403121561244457600080fd5b6108468261240a565b6000806040838503121561246057600080fd5b6124698361240a565b91506124776020840161240a565b90509250929050565b60008060006060848603121561249557600080fd5b61249e8461240a565b92506124ac6020850161240a565b9150604084013590509250925092565b600080600080600080600060e0888a0312156124d757600080fd5b6124e08861240a565b96506124ee6020890161240a565b9550604088013594506060880135935061250a60808901612421565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561253957600080fd5b6125428361240a565b946020939093013593505050565b60008060006060848603121561256557600080fd5b61256e8461240a565b9250602084013591506125836040850161240a565b90509250925092565b600080600080606085870312156125a257600080fd5b6125ab8561240a565b935060208501359250604085013567ffffffffffffffff808211156125cf57600080fd5b818701915087601f8301126125e357600080fd5b8135818111156125f257600080fd5b88602082850101111561260457600080fd5b95989497505060200194505050565b600080600080600080600060e0888a03121561262e57600080fd5b6126378861240a565b9650602088013595506040880135945061265360608901612421565b93506080880135925060a0880135915061266f60c0890161240a565b905092959891949750929550565b60006020828403121561268f57600080fd5b813561084681612a11565b6000602082840312156126ac57600080fd5b815161084681612a11565b6000806000606084860312156126cc57600080fd5b833592506124ac6020850161240a565b6000602082840312156126ee57600080fd5b5035919050565b60006020828403121561270757600080fd5b5051919050565b6000806040838503121561272157600080fd5b823591506124776020840161240a565b60008251612743818460208701612979565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b818110156128175783516001600160a01b0316835292840192918401916001016127f2565b50909695505050505050565b6020815260008251806020840152612842816040850160208701612979565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b6000821982111561295d5761295d6129fb565b500190565b600082821015612974576129746129fb565b500390565b60005b8381101561299457818101518382015260200161297c565b838111156121995750506000910152565b600181811c908216806129b957607f821691505b602082108114156129da57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156129f4576129f46129fb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114612a1f57600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122063dbb12d256e1924222a5249b86d18293ce044face1a0615f02207047a68d64564736f6c634300080700330000000000000000000000001001009911e3fe1d5b45ff8efea7732c33a6c012

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061035a5760003560e01c80637ecebe00116101d3578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c2664146107a2578063f954734e146107aa578063fbfa77cf146107bd578063fca3b5aa146107d057600080fd5b8063d93f24451461075c578063dd62ed3e14610764578063ec126c771461078f57600080fd5b8063cae9ca51116100de578063cae9ca511461071b578063cfbd48851461072e578063d0e30db014610741578063d505accf1461074957600080fd5b8063bebbf4d0146106ec578063c3081240146106ff578063c4b740f51461070857600080fd5b806395d89b4111610171578063a29dff721161014b578063a29dff721461069a578063a9059cbb146106a3578063aa271e1a146106b6578063b6b55f25146106d957600080fd5b806395d89b411461066a5780639dc29fac14610672578063a045442c1461068557600080fd5b806387689e28116101ad57806387689e28146106335780638cd4426d1461063c5780638da5cb5b1461064f57806391c5df491461065757600080fd5b80637ecebe00146105ed57806381a37c181461060d5780638623ec7b1461062057600080fd5b80633ccfd60b116102ad57806360e232a91161024b5780636a42b8f8116102255780636a42b8f81461058a5780636e553f65146105935780636f307dc3146105a657806370a08231146105cd57600080fd5b806360e232a914610551578063628d6cba146105645780636817031b1461057757600080fd5b80634ca8f0ed116102875780634ca8f0ed146104f757806352113ba7146105005780635f9b105d1461052b578063605629d61461053e57600080fd5b80633ccfd60b146104c95780634000aea0146104d157806340c10f19146104e457600080fd5b806318160ddd1161031a5780632ebe3fbb116102f45780632ebe3fbb1461042f57806330adf81f14610442578063313ce567146104695780633644e515146104a257600080fd5b806318160ddd1461040157806323b872dd146104095780632e1a7d4d1461041c57600080fd5b806239d6ec1461035f578062bf26f414610385578062f714ce146103ac57806306fdde03146103bf578063095ea7b3146103d45780630d707df8146103f7575b600080fd5b61037261036d366004612550565b6107e3565b6040519081526020015b60405180910390f35b6103727f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b6103726103ba36600461270e565b610839565b6103c761084d565b60405161037c9190612823565b6103e76103e2366004612526565b6108db565b604051901515815260200161037c565b6103ff610935565b005b600354610372565b6103e7610417366004612480565b6109f1565b61037261042a3660046126dc565b610bdc565b6103ff61043d366004612432565b610bef565b6103727f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104907f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff909116815260200161037c565b6103727fb33dd8b5471a2e9c0130d6104438b7c9f333975aa2d749871cdf88cf1fe1900d81565b610372610cc6565b6103e76104df36600461258c565b610ce7565b6103e76104f2366004612526565b610e40565b610372600d5481565b600b54610513906001600160a01b031681565b6040516001600160a01b03909116815260200161037c565b6103e7610539366004612432565b610e82565b6103e761054c3660046124bc565b610f57565b6103e761055f366004612432565b611167565b6103e761057236600461270e565b61123b565b6103ff610585366004612432565b611303565b61037260055481565b6103726105a136600461270e565b611369565b6105137f000000000000000000000000000000000000000000000000000000000000000081565b6103726105db366004612432565b60026020526000908152604090205481565b6103726105fb366004612432565b600f6020526000908152604090205481565b61037261061b366004612613565b6113aa565b61051361062e3660046126dc565b611484565b610372600c5481565b6103ff61064a366004612526565b6114ae565b610513611571565b600954610513906001600160a01b031681565b6103c761157b565b6103e7610680366004612526565b611588565b61068d6115e7565b60405161037c91906127d6565b610372600e5481565b6103e76106b1366004612526565b611649565b6103e76106c4366004612432565b60066020526000908152604090205460ff1681565b6103726106e73660046126dc565b61171f565b6103726106fa36600461270e565b611760565b610372600a5481565b6103ff61071636600461267d565b61179a565b6103e761072936600461258c565b6117ec565b6103ff61073c366004612432565b6118c8565b610372611921565b6103ff6107573660046124bc565b611a04565b6103ff611b72565b61037261077236600461244d565b601060209081526000928352604080842090915290825290205481565b6103e761079d3660046126b7565b611bdd565b610513611c52565b6103726107b8366004612613565b611c7d565b600854610513906001600160a01b031681565b6103ff6107de366004612432565b611d35565b60006107ed611c52565b6001600160a01b0316336001600160a01b0316146108265760405162461bcd60e51b815260040161081d90612856565b60405180910390fd5b610831848484611d9b565b949350505050565b6000610846338484611d9b565b9392505050565b6000805461085a906129a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610886906129a5565b80156108d35780601f106108a8576101008083540402835291602001916108d3565b820191906000526020600020905b8154815290600101906020018083116108b657829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612a43833981519152906109249086815260200190565b60405180910390a350600192915050565b61093d611c52565b6001600160a01b0316336001600160a01b03161461096d5760405162461bcd60e51b815260040161081d90612856565b600a5442101561097c57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b60006001600160a01b038316151580610a1357506001600160a01b0383163014155b610a1c57600080fd5b6001600160a01b0384163314610b16576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610b145782811015610abb5760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b606482015260840161081d565b6000610ac78483612962565b6001600160a01b03871660008181526010602090815260408083203380855290835292819020859055518481529394509092600080516020612a43833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b4f5760405162461bcd60e51b815260040161081d906128c4565b610b598382612962565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b8f90849061294a565b92505081905550836001600160a01b0316856001600160a01b0316600080516020612a2383398151915285604051610bc991815260200190565b60405180910390a3506001949350505050565b6000610be9338333611d9b565b92915050565b610bf7611c52565b6001600160a01b0316336001600160a01b031614610c275760405162461bcd60e51b815260040161081d90612856565b60045460ff16610c3657600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610ce29181611d9b565b905090565b60006001600160a01b038516151580610d0957506001600160a01b0385163014155b610d1257600080fd5b3360009081526002602052604090205484811015610d425760405162461bcd60e51b815260040161081d906128c4565b610d4c8582612962565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d7f90849061294a565b90915550506040518581526001600160a01b038716903390600080516020612a238339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610de490339089908990899060040161278e565b602060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e36919061269a565b9695505050505050565b3360009081526006602052604081205460ff16610e6f5760405162461bcd60e51b815260040161081d90612913565b610e798383611de3565b50600192915050565b6000610e8c611c52565b6001600160a01b0316336001600160a01b031614610ebc5760405162461bcd60e51b815260040161081d90612856565b6001600160a01b038216610ee25760405162461bcd60e51b815260040161081d9061288d565b600b80546001600160a01b0319166001600160a01b038416179055600554610f0a904261294a565b600c819055600b546008546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a45060015b919050565b600084421115610fa95760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d69740000604482015260640161081d565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610ff6836129e0565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110578982878787611eb1565b8061106a575061106a8982878787611fa1565b61107357600080fd5b6001600160a01b03881615158061109357506001600160a01b0388163014155b61109c57600080fd5b6001600160a01b038916600090815260026020526040902054878110156110d55760405162461bcd60e51b815260040161081d906128c4565b6110df8882612962565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a929061111590849061294a565b92505081905550886001600160a01b03168a6001600160a01b0316600080516020612a238339815191528a60405161114f91815260200190565b60405180910390a35060019998505050505050505050565b6000611171611c52565b6001600160a01b0316336001600160a01b0316146111a15760405162461bcd60e51b815260040161081d90612856565b6001600160a01b0382166111c75760405162461bcd60e51b815260040161081d9061288d565b600b80546001600160a01b0319166001600160a01b0384161790556005546111ef904261294a565b600c819055600b546008546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600454600090610100900460ff16156112965760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c79417574680000000000000000604482015260640161081d565b6001600160a01b0382166112bc5760405162461bcd60e51b815260040161081d9061288d565b6112c6338461205c565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c88890602001610924565b61130b611c52565b6001600160a01b0316336001600160a01b03161461133b5760405162461bcd60e51b815260040161081d90612856565b600b80546001600160a01b0319166001600160a01b038316179055600554611363904261294a565b600c5550565b60006113a06001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308661212e565b610846838361219f565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf90611405908b9030908c908c908c908c908c9060040161274d565b600060405180830381600087803b15801561141f57600080fd5b505af1158015611433573d6000803e3d6000fd5b5061146e9250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905089308a61212e565b611478878361219f565b98975050505050505050565b6007818154811061149457600080fd5b6000918252602090912001546001600160a01b0316905081565b6114b6611c52565b6001600160a01b0316336001600160a01b0316146114e65760405162461bcd60e51b815260040161081d90612856565b60085460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b15801561153457600080fd5b505af1158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c919061269a565b505050565b6000610ce2611c52565b6001805461085a906129a5565b3360009081526006602052604081205460ff166115b75760405162461bcd60e51b815260040161081d90612913565b6001600160a01b0383166115dd5760405162461bcd60e51b815260040161081d9061288d565b610e79838361205c565b6060600780548060200260200160405190810160405280929190818152602001828054801561163f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611621575b5050505050905090565b60006001600160a01b03831615158061166b57506001600160a01b0383163014155b61167457600080fd5b33600090815260026020526040902054828110156116a45760405162461bcd60e51b815260040161081d906128c4565b6116ae8382612962565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906116e190849061294a565b90915550506040518381526001600160a01b038516903390600080516020612a23833981519152906020015b60405180910390a35060019392505050565b60006117566001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561212e565b610be9823361219f565b600061176a611c52565b6001600160a01b0316336001600160a01b0316146113a05760405162461bcd60e51b815260040161081d90612856565b6117a2611c52565b6001600160a01b0316336001600160a01b0316146117d25760405162461bcd60e51b815260040161081d90612856565b600480549115156101000261ff0019909216919091179055565b3360008181526010602090815260408083206001600160a01b03891680855292528083208790555191929091600080516020612a43833981519152906118359088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f9061186d90339088908890889060040161278e565b602060405180830381600087803b15801561188757600080fd5b505af115801561189b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bf919061269a565b95945050505050565b6118d0611c52565b6001600160a01b0316336001600160a01b0316146119005760405162461bcd60e51b815260040161081d90612856565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561198557600080fd5b505afa158015611999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bd91906126f5565b90506119f46001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308461212e565b6119fe813361219f565b91505090565b83421115611a545760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d69740000604482015260640161081d565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086611aa1836129e0565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611b028882868686611eb1565b80611b155750611b158882868686611fa1565b611b1e57600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a90559051898152600080516020612a43833981519152910160405180910390a35050505050505050565b611b7a611c52565b6001600160a01b0316336001600160a01b031614611baa5760405162461bcd60e51b815260040161081d90612856565b600c54421015611bb957600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff16611c0c5760405162461bcd60e51b815260040161081d90612913565b611c168383611de3565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161170d91815260200190565b6000600c544210611c6d5750600b546001600160a01b031690565b506008546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063605629d690611cd8908b9030908c908c908c908c908c9060040161274d565b602060405180830381600087803b158015611cf257600080fd5b505af1158015611d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2a919061269a565b50611478878361219f565b611d3d611c52565b6001600160a01b0316336001600160a01b031614611d6d5760405162461bcd60e51b815260040161081d90612856565b600980546001600160a01b0319166001600160a01b038316179055600554611d95904261294a565b600a5550565b6000611da7848461205c565b611ddb6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838561221c565b509092915050565b6001600160a01b038216611e395760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161081d565b8060036000828254611e4b919061294a565b90915550506001600160a01b03821660009081526002602052604081208054839290611e7890849061294a565b90915550506040518181526001600160a01b03831690600090600080516020612a23833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527fb33dd8b5471a2e9c0130d6104438b7c9f333975aa2d749871cdf88cf1fe1900d602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611f60573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114785750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080612021866040517f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208201527fb33dd8b5471a2e9c0130d6104438b7c9f333975aa2d749871cdf88cf1fe1900d603c820152605c8101829052600090607c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611f3e565b6001600160a01b0382166120bc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161081d565b6001600160a01b038216600090815260026020526040812080548392906120e4908490612962565b9250508190555080600360008282546120fd9190612962565b90915550506040518181526000906001600160a01b03841690600080516020612a2383398151915290602001611ea5565b6040516001600160a01b03808516602483015283166044820152606481018290526121999085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261224c565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580159061220257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b61220b57600080fd5b6122158284611de3565b5090919050565b6040516001600160a01b03831660248201526044810182905261156c90849063a9059cbb60e01b90606401612162565b61225e826001600160a01b03166123d3565b6122aa5760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015260640161081d565b600080836001600160a01b0316836040516122c59190612731565b6000604051808303816000865af19150503d8060008114612302576040519150601f19603f3d011682016040523d82523d6000602084013e612307565b606091505b5091509150816123595760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015260640161081d565b8051156121995780806020019051810190612374919061269a565b6121995760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161081d565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108315750141592915050565b80356001600160a01b0381168114610f5257600080fd5b803560ff81168114610f5257600080fd5b60006020828403121561244457600080fd5b6108468261240a565b6000806040838503121561246057600080fd5b6124698361240a565b91506124776020840161240a565b90509250929050565b60008060006060848603121561249557600080fd5b61249e8461240a565b92506124ac6020850161240a565b9150604084013590509250925092565b600080600080600080600060e0888a0312156124d757600080fd5b6124e08861240a565b96506124ee6020890161240a565b9550604088013594506060880135935061250a60808901612421565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561253957600080fd5b6125428361240a565b946020939093013593505050565b60008060006060848603121561256557600080fd5b61256e8461240a565b9250602084013591506125836040850161240a565b90509250925092565b600080600080606085870312156125a257600080fd5b6125ab8561240a565b935060208501359250604085013567ffffffffffffffff808211156125cf57600080fd5b818701915087601f8301126125e357600080fd5b8135818111156125f257600080fd5b88602082850101111561260457600080fd5b95989497505060200194505050565b600080600080600080600060e0888a03121561262e57600080fd5b6126378861240a565b9650602088013595506040880135945061265360608901612421565b93506080880135925060a0880135915061266f60c0890161240a565b905092959891949750929550565b60006020828403121561268f57600080fd5b813561084681612a11565b6000602082840312156126ac57600080fd5b815161084681612a11565b6000806000606084860312156126cc57600080fd5b833592506124ac6020850161240a565b6000602082840312156126ee57600080fd5b5035919050565b60006020828403121561270757600080fd5b5051919050565b6000806040838503121561272157600080fd5b823591506124776020840161240a565b60008251612743818460208701612979565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b818110156128175783516001600160a01b0316835292840192918401916001016127f2565b50909695505050505050565b6020815260008251806020840152612842816040850160208701612979565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b6000821982111561295d5761295d6129fb565b500190565b600082821015612974576129746129fb565b500390565b60005b8381101561299457818101518382015260200161297c565b838111156121995750506000910152565b600181811c908216806129b957607f821691505b602082108114156129da57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156129f4576129f46129fb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b8015158114612a1f57600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122063dbb12d256e1924222a5249b86d18293ce044face1a0615f02207047a68d64564736f6c63430008070033

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

0000000000000000000000001001009911e3fe1d5b45ff8efea7732c33a6c012

-----Decoded View---------------
Arg [0] : ownerAddress (address): 0x1001009911e3FE1d5B45FF8Efea7732C33a6C012

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001001009911e3fe1d5b45ff8efea7732c33a6c012


[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.