ETH Price: $1,972.27 (+0.18%)
Gas: 0.04 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Initialize240020752025-12-13 7:04:1171 days ago1765609451IN
0x0B9F13fF...C7Bd8675A
0 ETH0.000003350.05

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UserProxy

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 1000 runs

Other Settings:
istanbul EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity 0.7.6;
pragma abicoder v2;

import "./utils/UserProxyStorage.sol";
import "./utils/Multicall.sol";

/**
 * @dev UserProxy contract
 */
contract UserProxy is Multicall {
    // Below are the variables which consume storage slots.
    address public operator;
    string public version; // Current version of the contract
    address private nominatedOperator;

    // Operator events
    event OperatorNominated(address indexed newOperator);
    event OperatorChanged(address indexed oldOperator, address indexed newOperator);
    event SetAMMStatus(bool enable);
    event UpgradeAMMWrapper(address newAMMWrapper);
    event SetPMMStatus(bool enable);
    event UpgradePMM(address newPMM);
    event SetRFQStatus(bool enable);
    event UpgradeRFQ(address newRFQ);
    event SetRFQv2Status(bool enable);
    event UpgradeRFQv2(address newRFQv2);
    event SetLimitOrderStatus(bool enable);
    event UpgradeLimitOrder(address newLimitOrder);

    receive() external payable {}

    /************************************************************
     *          Access control and ownership management          *
     *************************************************************/
    modifier onlyOperator() {
        require(operator == msg.sender, "UserProxy: not the operator");
        _;
    }

    function nominateNewOperator(address _newOperator) external onlyOperator {
        require(_newOperator != address(0), "UserProxy: operator can not be zero address");
        nominatedOperator = _newOperator;

        emit OperatorNominated(_newOperator);
    }

    function acceptOwnership() external {
        require(msg.sender == nominatedOperator, "UserProxy: not nominated");
        emit OperatorChanged(operator, nominatedOperator);

        operator = nominatedOperator;
        nominatedOperator = address(0);
    }

    /************************************************************
     *              Constructor and init functions               *
     *************************************************************/
    /// @dev Replacing constructor and initialize the contract. This function should only be called once.
    function initialize(address _operator) external {
        require(keccak256(abi.encodePacked(version)) == keccak256(abi.encodePacked("")), "UserProxy: not upgrading from empty");
        require(_operator != address(0), "UserProxy: operator can not be zero address");
        operator = _operator;

        // Upgrade version
        version = "5.3.0";
    }

    /************************************************************
     *                     Getter functions                      *
     *************************************************************/
    function ammWrapperAddr() public view returns (address) {
        return AMMWrapperStorage.getStorage().ammWrapperAddr;
    }

    function isAMMEnabled() public view returns (bool) {
        return AMMWrapperStorage.getStorage().isEnabled;
    }

    function pmmAddr() public view returns (address) {
        return PMMStorage.getStorage().pmmAddr;
    }

    function isPMMEnabled() public view returns (bool) {
        return PMMStorage.getStorage().isEnabled;
    }

    function rfqAddr() public view returns (address) {
        return RFQStorage.getStorage().rfqAddr;
    }

    function isRFQEnabled() public view returns (bool) {
        return RFQStorage.getStorage().isEnabled;
    }

    function rfqv2Addr() public view returns (address) {
        return RFQv2Storage.getStorage().rfqv2Addr;
    }

    function isRFQv2Enabled() public view returns (bool) {
        return RFQv2Storage.getStorage().isEnabled;
    }

    function limitOrderAddr() public view returns (address) {
        return LimitOrderStorage.getStorage().limitOrderAddr;
    }

    function isLimitOrderEnabled() public view returns (bool) {
        return LimitOrderStorage.getStorage().isEnabled;
    }

    /************************************************************
     *           Management functions for Operator               *
     *************************************************************/
    function setAMMStatus(bool _enable) public onlyOperator {
        AMMWrapperStorage.getStorage().isEnabled = _enable;

        emit SetAMMStatus(_enable);
    }

    function upgradeAMMWrapper(address _newAMMWrapperAddr, bool _enable) external onlyOperator {
        AMMWrapperStorage.getStorage().ammWrapperAddr = _newAMMWrapperAddr;
        AMMWrapperStorage.getStorage().isEnabled = _enable;

        emit UpgradeAMMWrapper(_newAMMWrapperAddr);
        emit SetAMMStatus(_enable);
    }

    function setPMMStatus(bool _enable) public onlyOperator {
        PMMStorage.getStorage().isEnabled = _enable;

        emit SetPMMStatus(_enable);
    }

    function upgradePMM(address _newPMMAddr, bool _enable) external onlyOperator {
        PMMStorage.getStorage().pmmAddr = _newPMMAddr;
        PMMStorage.getStorage().isEnabled = _enable;

        emit UpgradePMM(_newPMMAddr);
        emit SetPMMStatus(_enable);
    }

    function setRFQStatus(bool _enable) public onlyOperator {
        RFQStorage.getStorage().isEnabled = _enable;

        emit SetRFQStatus(_enable);
    }

    function upgradeRFQ(address _newRFQAddr, bool _enable) external onlyOperator {
        RFQStorage.getStorage().rfqAddr = _newRFQAddr;
        RFQStorage.getStorage().isEnabled = _enable;

        emit UpgradeRFQ(_newRFQAddr);
        emit SetRFQStatus(_enable);
    }

    function setRFQv2Status(bool _enable) public onlyOperator {
        RFQv2Storage.getStorage().isEnabled = _enable;

        emit SetRFQv2Status(_enable);
    }

    function upgradeRFQv2(address _newRFQv2Addr, bool _enable) external onlyOperator {
        RFQv2Storage.getStorage().rfqv2Addr = _newRFQv2Addr;
        RFQv2Storage.getStorage().isEnabled = _enable;

        emit UpgradeRFQv2(_newRFQv2Addr);
        emit SetRFQv2Status(_enable);
    }

    function setLimitOrderStatus(bool _enable) public onlyOperator {
        LimitOrderStorage.getStorage().isEnabled = _enable;

        emit SetLimitOrderStatus(_enable);
    }

    function upgradeLimitOrder(address _newLimitOrderAddr, bool _enable) external onlyOperator {
        LimitOrderStorage.getStorage().limitOrderAddr = _newLimitOrderAddr;
        LimitOrderStorage.getStorage().isEnabled = _enable;

        emit UpgradeLimitOrder(_newLimitOrderAddr);
        emit SetLimitOrderStatus(_enable);
    }

    /************************************************************
     *                   External functions                      *
     *************************************************************/
    /**
     * @dev proxy the call to AMM
     */
    function toAMM(bytes calldata _payload) external payable {
        require(isAMMEnabled(), "UserProxy: AMM is disabled");

        (bool callSucceed, ) = ammWrapperAddr().call{ value: msg.value }(_payload);
        if (!callSucceed) {
            // revert with data from last call
            assembly {
                let ptr := mload(0x40)
                let size := returndatasize()
                returndatacopy(ptr, 0, size)
                revert(ptr, size)
            }
        }
    }

    /**
     * @dev proxy the call to PMM
     */
    function toPMM(bytes calldata _payload) external payable {
        require(isPMMEnabled(), "UserProxy: PMM is disabled");
        require(msg.sender == tx.origin, "UserProxy: only EOA");

        (bool callSucceed, ) = pmmAddr().call{ value: msg.value }(_payload);
        if (!callSucceed) {
            // revert with data from last call
            assembly {
                let ptr := mload(0x40)
                let size := returndatasize()
                returndatacopy(ptr, 0, size)
                revert(ptr, size)
            }
        }
    }

    /**
     * @dev proxy the call to RFQ
     */
    function toRFQ(bytes calldata _payload) external payable {
        require(isRFQEnabled(), "UserProxy: RFQ is disabled");
        require(msg.sender == tx.origin, "UserProxy: only EOA");

        (bool callSucceed, ) = rfqAddr().call{ value: msg.value }(_payload);
        if (!callSucceed) {
            // revert with data from last call
            assembly {
                let ptr := mload(0x40)
                let size := returndatasize()
                returndatacopy(ptr, 0, size)
                revert(ptr, size)
            }
        }
    }

    /**
     * @dev proxy the call to RFQv2
     */
    function toRFQv2(bytes calldata _payload) external payable {
        require(isRFQv2Enabled(), "UserProxy: RFQv2 is disabled");
        require(msg.sender == tx.origin, "UserProxy: only EOA");

        (bool callSucceed, ) = rfqv2Addr().call{ value: msg.value }(_payload);
        if (!callSucceed) {
            // revert with data from last call
            assembly {
                let ptr := mload(0x40)
                let size := returndatasize()
                returndatacopy(ptr, 0, size)
                revert(ptr, size)
            }
        }
    }

    /**
     * @dev proxy the call to Limit Order
     */
    function toLimitOrder(bytes calldata _payload) external {
        require(isLimitOrderEnabled(), "UserProxy: Limit Order is disabled");
        require(msg.sender == tx.origin, "UserProxy: only EOA");

        (bool callSucceed, ) = limitOrderAddr().call(_payload);
        if (!callSucceed) {
            // revert with data from last call
            assembly {
                let ptr := mload(0x40)
                let size := returndatasize()
                returndatacopy(ptr, 0, size)
                revert(ptr, size)
            }
        }
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

library AMMWrapperStorage {
    bytes32 private constant STORAGE_SLOT = 0xbf49677e3150252dfa801a673d2d5ec21eaa360a4674864e55e79041e3f65a6b;

    /// @dev Storage bucket for proxy contract.
    struct Storage {
        // The address of the AMMWrapper contract.
        address ammWrapperAddr;
        // Is AMM enabled
        bool isEnabled;
    }

    /// @dev Get the storage bucket for this contract.
    function getStorage() internal pure returns (Storage storage stor) {
        assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.ammwrapper.storage")) - 1));
        bytes32 slot = STORAGE_SLOT;

        // Dip into assembly to change the slot pointed to by the local
        // variable `stor`.
        // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
        assembly {
            stor.slot := slot
        }
    }
}

library PMMStorage {
    bytes32 private constant STORAGE_SLOT = 0x8f135983375ba6442123d61647e7325c1753eabc2e038e44d3b888a970def89a;

    /// @dev Storage bucket for proxy contract.
    struct Storage {
        // The address of the PMM contract.
        address pmmAddr;
        // Is PMM enabled
        bool isEnabled;
    }

    /// @dev Get the storage bucket for this contract.
    function getStorage() internal pure returns (Storage storage stor) {
        assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.pmm.storage")) - 1));
        bytes32 slot = STORAGE_SLOT;

        // Dip into assembly to change the slot pointed to by the local
        // variable `stor`.
        // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
        assembly {
            stor.slot := slot
        }
    }
}

library RFQStorage {
    bytes32 private constant STORAGE_SLOT = 0x857df08bd185dc66e3cc5e11acb4e1dd65290f3fee6426f52f84e8faccf229cf;

    /// @dev Storage bucket for proxy contract.
    struct Storage {
        // The address of the RFQ contract.
        address rfqAddr;
        // Is RFQ enabled
        bool isEnabled;
    }

    /// @dev Get the storage bucket for this contract.
    function getStorage() internal pure returns (Storage storage stor) {
        assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.rfq.storage")) - 1));
        bytes32 slot = STORAGE_SLOT;

        // Dip into assembly to change the slot pointed to by the local
        // variable `stor`.
        // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
        assembly {
            stor.slot := slot
        }
    }
}

library RFQv2Storage {
    bytes32 private constant STORAGE_SLOT = 0xd5f1768ede616e352f32123fd6fe01064898ae4e55a2678c79b8ad79680ff744;

    /// @dev Storage bucket for proxy contract.
    struct Storage {
        // The address of the RFQv2 contract.
        address rfqv2Addr;
        // Is RFQv2 enabled
        bool isEnabled;
    }

    /// @dev Get the storage bucket for this contract.
    function getStorage() internal pure returns (Storage storage stor) {
        assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.rfqv2.storage")) - 1));
        bytes32 slot = STORAGE_SLOT;

        // Dip into assembly to change the slot pointed to by the local
        // variable `stor`.
        // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
        assembly {
            stor.slot := slot
        }
    }
}

library LimitOrderStorage {
    bytes32 private constant STORAGE_SLOT = 0xf1a59a985b4002cdf0db464f05bed7182ee06372a999d820ea1883b8bf067ce5;

    /// @dev Storage bucket for proxy contract.
    struct Storage {
        // The address of the Limit Order contract.
        address limitOrderAddr;
        // Is Limit Order enabled
        bool isEnabled;
    }

    /// @dev Get the storage bucket for this contract.
    function getStorage() internal pure returns (Storage storage stor) {
        assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.limitorder.storage")) - 1));
        bytes32 slot = STORAGE_SLOT;

        // Dip into assembly to change the slot pointed to by the local
        // variable `stor`.
        // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries
        assembly {
            stor.slot := slot
        }
    }
}

File 3 of 4 : Multicall.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.6;
pragma abicoder v2;

import "../interfaces/IMulticall.sol";

// Modified from https://github.com/Uniswap/uniswap-v3-periphery/blob/v1.1.1/contracts/base/Multicall.sol
abstract contract Multicall is IMulticall {
    function multicall(bytes[] calldata data, bool revertOnFail) external override returns (bool[] memory successes, bytes[] memory results) {
        successes = new bool[](data.length);
        results = new bytes[](data.length);
        for (uint256 i = 0; i < data.length; ++i) {
            (bool success, bytes memory result) = address(this).delegatecall(data[i]);
            successes[i] = success;
            results[i] = result;

            if (!success) {
                // Get failed reason
                string memory revertReason;
                if (result.length < 68) {
                    revertReason = "Delegatecall failed";
                } else {
                    assembly {
                        result := add(result, 0x04)
                    }
                    revertReason = abi.decode(result, (string));
                }

                if (revertOnFail) {
                    revert(revertReason);
                }
                emit MulticallFailure(i, revertReason);
            }
        }
    }
}

// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0;
pragma abicoder v2;

interface IMulticall {
    event MulticallFailure(uint256 index, string reason);

    function multicall(bytes[] calldata data, bool revertOnFail) external returns (bool[] memory successes, bytes[] memory results);
}

Settings
{
  "remappings": [
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "istanbul",
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"MulticallFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetAMMStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetLimitOrderStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetPMMStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetRFQStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetRFQv2Status","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAMMWrapper","type":"address"}],"name":"UpgradeAMMWrapper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newLimitOrder","type":"address"}],"name":"UpgradeLimitOrder","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPMM","type":"address"}],"name":"UpgradePMM","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRFQ","type":"address"}],"name":"UpgradeRFQ","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRFQv2","type":"address"}],"name":"UpgradeRFQv2","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ammWrapperAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isAMMEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLimitOrderEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPMMEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRFQEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRFQv2Enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitOrderAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"bool","name":"revertOnFail","type":"bool"}],"name":"multicall","outputs":[{"internalType":"bool[]","name":"successes","type":"bool[]"},{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"nominateNewOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pmmAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rfqAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rfqv2Addr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setAMMStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setLimitOrderStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setPMMStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setRFQStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setRFQv2Status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toAMM","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toPMM","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toRFQ","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toRFQv2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAMMWrapperAddr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradeAMMWrapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newLimitOrderAddr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradeLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPMMAddr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradePMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRFQAddr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradeRFQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRFQv2Addr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradeRFQv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50611bf7806100206000396000f3fe6080604052600436106101dc5760003560e01c80638014bd9711610102578063bbd3f63811610095578063de83cd5411610064578063de83cd54146104dd578063e47d166c146104fd578063e5f23b1614610510578063ec55908414610530576101e3565b8063bbd3f63814610468578063c37197d31461047d578063c3e920751461049d578063c4d66de8146104bd576101e3565b8063a32fe0a1116100d1578063a32fe0a11461040b578063a9204ecf1461041e578063a9dc9f691461043e578063b6f732ae14610453576101e3565b80638014bd97146103b957806393811c8a146103ce578063994dd72e146103e3578063a1728b0d146103f8576101e3565b80634ff62bf51161017a578063706b4eb811610149578063706b4eb81461034f57806379ba50971461036f5780637c305b1d146103845780637f54479a146103a4576101e3565b80634ff62bf5146102e357806354fd4d5014610305578063570ca73514610327578063628930b91461033c576101e3565b8063298a91fd116101b6578063298a91fd1461026157806341fc048d1461028357806346f04170146102a35780634daadf12146102c3576101e3565b80630d6274ac146101e85780631e9701d41461020a578063223196b314610241576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611546565b610545565b005b34801561021657600080fd5b5061022a610225366004611578565b610635565b6040516102389291906117d7565b60405180910390f35b34801561024d57600080fd5b5061020861025c366004611525565b610857565b34801561026d57600080fd5b506102766108f1565b60405161023891906117c3565b34801561028f57600080fd5b5061020861029e3660046115f6565b61090a565b3480156102af57600080fd5b506102086102be366004611546565b610992565b3480156102cf57600080fd5b506102086102de3660046115f6565b610a6d565b3480156102ef57600080fd5b506102f8610aea565b604051610238919061186e565b34801561031157600080fd5b5061031a610b04565b6040516102389190611879565b34801561033357600080fd5b50610276610b91565b61020861034a366004611610565b610ba0565b34801561035b57600080fd5b5061020861036a366004611610565b610c64565b34801561037b57600080fd5b50610208610d07565b34801561039057600080fd5b5061020861039f366004611546565b610d95565b3480156103b057600080fd5b506102f8610e70565b3480156103c557600080fd5b50610276610e7a565b3480156103da57600080fd5b50610276610e84565b3480156103ef57600080fd5b50610276610e8e565b610208610406366004611610565b610e98565b610208610419366004611610565b610ee5565b34801561042a57600080fd5b506102086104393660046115f6565b610f32565b34801561044a57600080fd5b506102f8610faf565b34801561045f57600080fd5b50610276610fb9565b34801561047457600080fd5b506102f8610fc3565b34801561048957600080fd5b50610208610498366004611546565b610fcd565b3480156104a957600080fd5b506102086104b8366004611546565b6110a8565b3480156104c957600080fd5b506102086104d8366004611525565b611183565b3480156104e957600080fd5b506102086104f83660046115f6565b611276565b61020861050b366004611610565b6112f3565b34801561051c57600080fd5b5061020861052b3660046115f6565b611321565b34801561053c57600080fd5b506102f861139e565b6000546001600160a01b031633146105785760405162461bcd60e51b815260040161056f90611a59565b60405180910390fd5b816105816113a4565b80546001600160a01b0319166001600160a01b0392909216919091179055806105a86113a4565b8054911515600160a01b0260ff60a01b199092169190911790556040517f28e34087108910d7a3d1de15bdebe33e9b7ce4be78c6987103983875f4fbb903906105f29084906117c3565b60405180910390a17f85600615329dbd38415d95ab88a1870aa23283ed03ea8339bbaf7c53cb6889eb81604051610629919061186e565b60405180910390a15050565b6060808367ffffffffffffffff8111801561064f57600080fd5b50604051908082528060200260200182016040528015610679578160200160208202803683370190505b5091508367ffffffffffffffff8111801561069357600080fd5b506040519080825280602002602001820160405280156106c757816020015b60608152602001906001900390816106b25790505b50905060005b8481101561084e57600080308888858181106106e557fe5b90506020028101906106f79190611b45565b604051610705929190611740565b600060405180830381855af49150503d8060008114610740576040519150601f19603f3d011682016040523d82523d6000602084013e610745565b606091505b50915091508185848151811061075757fe5b6020026020010190151590811515815250508084848151811061077657fe5b6020026020010181905250816108445760606044825110156107cc575060408051808201909152601381527f44656c656761746563616c6c206661696c65640000000000000000000000000060208201526107e9565b600482019150818060200190518101906107e6919061167d565b90505b8615610809578060405162461bcd60e51b815260040161056f9190611879565b7f8227e69dc43e5a3dff3c9e10930295a5383b9e7736b0508e15d46d05efecb4a6848260405161083a929190611b24565b60405180910390a1505b50506001016106cd565b50935093915050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161056f90611a59565b6001600160a01b0381166108a75760405162461bcd60e51b815260040161056f9061188c565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f8cc0f93a743dada018f348511be65ee8585206ca96e058f4d70c41f276e57bde90600090a250565b60006108fb6113a4565b546001600160a01b0316905090565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161056f90611a59565b8061093d6113c8565b8054911515600160a01b0260ff60a01b199092169190911790556040517f69013db8b04c8782a3bfb1988607e4cb48e1476125c4a9f2e08199916281becf9061098790839061186e565b60405180910390a150565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260040161056f90611a59565b816109c56113ec565b80546001600160a01b0319166001600160a01b0392909216919091179055806109ec6113ec565b8054911515600160a01b0260ff60a01b199092169190911790556040517f474dbe0e44f4b1a24e66b1a543293f696f5f72651de8895adf45233e3c6948bb90610a369084906117c3565b60405180910390a17f75f3afb50142265ab5ffa96a1281463cb3a39821dfcafd44d5bcda0dbf1c482581604051610629919061186e565b6000546001600160a01b03163314610a975760405162461bcd60e51b815260040161056f90611a59565b80610aa06113ec565b8054911515600160a01b0260ff60a01b199092169190911790556040517f75f3afb50142265ab5ffa96a1281463cb3a39821dfcafd44d5bcda0dbf1c48259061098790839061186e565b6000610af4611410565b54600160a01b900460ff16919050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b895780601f10610b5e57610100808354040283529160200191610b89565b820191906000526020600020905b815481529060010190602001808311610b6c57829003601f168201915b505050505081565b6000546001600160a01b031681565b610ba8610aea565b610bc45760405162461bcd60e51b815260040161056f9061197d565b333214610be35760405162461bcd60e51b815260040161056f90611946565b6000610bed610e84565b6001600160a01b0316348484604051610c07929190611740565b60006040518083038185875af1925050503d8060008114610c44576040519150601f19603f3d011682016040523d82523d6000602084013e610c49565b606091505b5050905080610c5f576040513d806000833e8082fd5b505050565b610c6c610faf565b610c885760405162461bcd60e51b815260040161056f906118e9565b333214610ca75760405162461bcd60e51b815260040161056f90611946565b6000610cb1610e8e565b6001600160a01b03168383604051610cca929190611740565b6000604051808303816000865af19150503d8060008114610c44576040519150601f19603f3d011682016040523d82523d6000602084013e610c49565b6002546001600160a01b03163314610d315760405162461bcd60e51b815260040161056f906119eb565b600254600080546040516001600160a01b0393841693909116917fd58299b712891143e76310d5e664c4203c940a67db37cf856bdaa3c5c76a802c91a360028054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b03163314610dbf5760405162461bcd60e51b815260040161056f90611a59565b81610dc8611434565b80546001600160a01b0319166001600160a01b039290921691909117905580610def611434565b8054911515600160a01b0260ff60a01b199092169190911790556040517fc4b713388b13f13226268ec85c363aa606bfc124242892bef245909669b35d0c90610e399084906117c3565b60405180910390a17f77a57cd075e1e4d27ea05938d55fc48c8967f71d9edeeb249010daccce25e45b81604051610629919061186e565b6000610af46113ec565b60006108fb6113ec565b60006108fb611410565b60006108fb611434565b610ea061139e565b610ebc5760405162461bcd60e51b815260040161056f90611a22565b333214610edb5760405162461bcd60e51b815260040161056f90611946565b6000610bed6108f1565b610eed610e70565b610f095760405162461bcd60e51b815260040161056f906119b4565b333214610f285760405162461bcd60e51b815260040161056f90611946565b6000610bed610e7a565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b815260040161056f90611a59565b80610f65611434565b8054911515600160a01b0260ff60a01b199092169190911790556040517f77a57cd075e1e4d27ea05938d55fc48c8967f71d9edeeb249010daccce25e45b9061098790839061186e565b6000610af4611434565b60006108fb6113c8565b6000610af46113c8565b6000546001600160a01b03163314610ff75760405162461bcd60e51b815260040161056f90611a59565b81611000611410565b80546001600160a01b0319166001600160a01b039290921691909117905580611027611410565b8054911515600160a01b0260ff60a01b199092169190911790556040517fed44209623383e0a37e30095e7056f3e879411ab3edf075836dd94a2f4973580906110719084906117c3565b60405180910390a17ff39273fb8850aade529594fa8aa09c79be1dd5d16a8cff2c20496e048539e41881604051610629919061186e565b6000546001600160a01b031633146110d25760405162461bcd60e51b815260040161056f90611a59565b816110db6113c8565b80546001600160a01b0319166001600160a01b0392909216919091179055806111026113c8565b8054911515600160a01b0260ff60a01b199092169190911790556040517fe3f9ba76e59e03b4e1255783bc2d5340338b8bc071086d3e32e5ddff4fc855539061114c9084906117c3565b60405180910390a17f69013db8b04c8782a3bfb1988607e4cb48e1476125c4a9f2e08199916281becf81604051610629919061186e565b604051602001611192906117c0565b6040516020818303038152906040528051906020012060016040516020016111ba9190611750565b60405160208183030381529060405280519060200120146111ed5760405162461bcd60e51b815260040161056f90611ac7565b6001600160a01b0381166112135760405162461bcd60e51b815260040161056f9061188c565b600080546001600160a01b0319166001600160a01b0383161790556040805180820190915260058082527f352e332e30000000000000000000000000000000000000000000000000000000602090920191825261127291600191611458565b5050565b6000546001600160a01b031633146112a05760405162461bcd60e51b815260040161056f90611a59565b806112a96113a4565b8054911515600160a01b0260ff60a01b199092169190911790556040517f85600615329dbd38415d95ab88a1870aa23283ed03ea8339bbaf7c53cb6889eb9061098790839061186e565b6112fb610fc3565b6113175760405162461bcd60e51b815260040161056f90611a90565b6000610bed610fb9565b6000546001600160a01b0316331461134b5760405162461bcd60e51b815260040161056f90611a59565b80611354611410565b8054911515600160a01b0260ff60a01b199092169190911790556040517ff39273fb8850aade529594fa8aa09c79be1dd5d16a8cff2c20496e048539e4189061098790839061186e565b6000610af45b7f857df08bd185dc66e3cc5e11acb4e1dd65290f3fee6426f52f84e8faccf229cf90565b7fbf49677e3150252dfa801a673d2d5ec21eaa360a4674864e55e79041e3f65a6b90565b7f8f135983375ba6442123d61647e7325c1753eabc2e038e44d3b888a970def89a90565b7fd5f1768ede616e352f32123fd6fe01064898ae4e55a2678c79b8ad79680ff74490565b7ff1a59a985b4002cdf0db464f05bed7182ee06372a999d820ea1883b8bf067ce590565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261148e57600085556114d4565b82601f106114a757805160ff19168380011785556114d4565b828001600101855582156114d4579182015b828111156114d45782518255916020019190600101906114b9565b506114e09291506114e4565b5090565b5b808211156114e057600081556001016114e5565b80356001600160a01b038116811461151057600080fd5b919050565b8035801515811461151057600080fd5b600060208284031215611536578081fd5b61153f826114f9565b9392505050565b60008060408385031215611558578081fd5b611561836114f9565b915061156f60208401611515565b90509250929050565b60008060006040848603121561158c578081fd5b833567ffffffffffffffff808211156115a3578283fd5b818601915086601f8301126115b6578283fd5b8135818111156115c4578384fd5b87602080830285010111156115d7578384fd5b6020928301955093506115ed9186019050611515565b90509250925092565b600060208284031215611607578081fd5b61153f82611515565b60008060208385031215611622578182fd5b823567ffffffffffffffff80821115611639578384fd5b818501915085601f83011261164c578384fd5b81358181111561165a578485fd5b86602082850101111561166b578485fd5b60209290920196919550909350505050565b60006020828403121561168e578081fd5b815167ffffffffffffffff808211156116a5578283fd5b818401915084601f8301126116b8578283fd5b8151818111156116c457fe5b604051601f8201601f1916810160200183811182821017156116e257fe5b6040528181528382016020018710156116f9578485fd5b61170a826020830160208701611b91565b9695505050505050565b6000815180845261172c816020860160208601611b91565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600080835460018082166000811461176f5760018114611786576117b5565b60ff198316865260028304607f16860193506117b5565b600283048786526020808720875b838110156117ad5781548a820152908501908201611794565b505050860193505b509195945050505050565b90565b6001600160a01b0391909116815260200190565b604080825283519082018190526000906020906060840190828701845b828110156118125781511515845292840192908401906001016117f4565b5050508381038285015284518082528282019080840283018401878501865b8381101561185f57601f1986840301855261184d838351611714565b94870194925090860190600101611831565b50909998505050505050505050565b901515815260200190565b60006020825261153f6020830184611714565b6020808252602b908201527f5573657250726f78793a206f70657261746f722063616e206e6f74206265207a60408201527f65726f2061646472657373000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f5573657250726f78793a204c696d6974204f726465722069732064697361626c60408201527f6564000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526013908201527f5573657250726f78793a206f6e6c7920454f4100000000000000000000000000604082015260600190565b6020808252601c908201527f5573657250726f78793a2052465176322069732064697361626c656400000000604082015260600190565b6020808252601a908201527f5573657250726f78793a20504d4d2069732064697361626c6564000000000000604082015260600190565b60208082526018908201527f5573657250726f78793a206e6f74206e6f6d696e617465640000000000000000604082015260600190565b6020808252601a908201527f5573657250726f78793a205246512069732064697361626c6564000000000000604082015260600190565b6020808252601b908201527f5573657250726f78793a206e6f7420746865206f70657261746f720000000000604082015260600190565b6020808252601a908201527f5573657250726f78793a20414d4d2069732064697361626c6564000000000000604082015260600190565b60208082526023908201527f5573657250726f78793a206e6f7420757067726164696e672066726f6d20656d60408201527f7074790000000000000000000000000000000000000000000000000000000000606082015260800190565b600083825260406020830152611b3d6040830184611714565b949350505050565b6000808335601e19843603018112611b5b578283fd5b83018035915067ffffffffffffffff821115611b75578283fd5b602001915036819003821315611b8a57600080fd5b9250929050565b60005b83811015611bac578181015183820152602001611b94565b83811115611bbb576000848401525b5050505056fea264697066735822122073472f6f5e79471eeaf04b2ff08bab94017e08b9a37a071d37ba11168188a20664736f6c63430007060033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c80638014bd9711610102578063bbd3f63811610095578063de83cd5411610064578063de83cd54146104dd578063e47d166c146104fd578063e5f23b1614610510578063ec55908414610530576101e3565b8063bbd3f63814610468578063c37197d31461047d578063c3e920751461049d578063c4d66de8146104bd576101e3565b8063a32fe0a1116100d1578063a32fe0a11461040b578063a9204ecf1461041e578063a9dc9f691461043e578063b6f732ae14610453576101e3565b80638014bd97146103b957806393811c8a146103ce578063994dd72e146103e3578063a1728b0d146103f8576101e3565b80634ff62bf51161017a578063706b4eb811610149578063706b4eb81461034f57806379ba50971461036f5780637c305b1d146103845780637f54479a146103a4576101e3565b80634ff62bf5146102e357806354fd4d5014610305578063570ca73514610327578063628930b91461033c576101e3565b8063298a91fd116101b6578063298a91fd1461026157806341fc048d1461028357806346f04170146102a35780634daadf12146102c3576101e3565b80630d6274ac146101e85780631e9701d41461020a578063223196b314610241576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611546565b610545565b005b34801561021657600080fd5b5061022a610225366004611578565b610635565b6040516102389291906117d7565b60405180910390f35b34801561024d57600080fd5b5061020861025c366004611525565b610857565b34801561026d57600080fd5b506102766108f1565b60405161023891906117c3565b34801561028f57600080fd5b5061020861029e3660046115f6565b61090a565b3480156102af57600080fd5b506102086102be366004611546565b610992565b3480156102cf57600080fd5b506102086102de3660046115f6565b610a6d565b3480156102ef57600080fd5b506102f8610aea565b604051610238919061186e565b34801561031157600080fd5b5061031a610b04565b6040516102389190611879565b34801561033357600080fd5b50610276610b91565b61020861034a366004611610565b610ba0565b34801561035b57600080fd5b5061020861036a366004611610565b610c64565b34801561037b57600080fd5b50610208610d07565b34801561039057600080fd5b5061020861039f366004611546565b610d95565b3480156103b057600080fd5b506102f8610e70565b3480156103c557600080fd5b50610276610e7a565b3480156103da57600080fd5b50610276610e84565b3480156103ef57600080fd5b50610276610e8e565b610208610406366004611610565b610e98565b610208610419366004611610565b610ee5565b34801561042a57600080fd5b506102086104393660046115f6565b610f32565b34801561044a57600080fd5b506102f8610faf565b34801561045f57600080fd5b50610276610fb9565b34801561047457600080fd5b506102f8610fc3565b34801561048957600080fd5b50610208610498366004611546565b610fcd565b3480156104a957600080fd5b506102086104b8366004611546565b6110a8565b3480156104c957600080fd5b506102086104d8366004611525565b611183565b3480156104e957600080fd5b506102086104f83660046115f6565b611276565b61020861050b366004611610565b6112f3565b34801561051c57600080fd5b5061020861052b3660046115f6565b611321565b34801561053c57600080fd5b506102f861139e565b6000546001600160a01b031633146105785760405162461bcd60e51b815260040161056f90611a59565b60405180910390fd5b816105816113a4565b80546001600160a01b0319166001600160a01b0392909216919091179055806105a86113a4565b8054911515600160a01b0260ff60a01b199092169190911790556040517f28e34087108910d7a3d1de15bdebe33e9b7ce4be78c6987103983875f4fbb903906105f29084906117c3565b60405180910390a17f85600615329dbd38415d95ab88a1870aa23283ed03ea8339bbaf7c53cb6889eb81604051610629919061186e565b60405180910390a15050565b6060808367ffffffffffffffff8111801561064f57600080fd5b50604051908082528060200260200182016040528015610679578160200160208202803683370190505b5091508367ffffffffffffffff8111801561069357600080fd5b506040519080825280602002602001820160405280156106c757816020015b60608152602001906001900390816106b25790505b50905060005b8481101561084e57600080308888858181106106e557fe5b90506020028101906106f79190611b45565b604051610705929190611740565b600060405180830381855af49150503d8060008114610740576040519150601f19603f3d011682016040523d82523d6000602084013e610745565b606091505b50915091508185848151811061075757fe5b6020026020010190151590811515815250508084848151811061077657fe5b6020026020010181905250816108445760606044825110156107cc575060408051808201909152601381527f44656c656761746563616c6c206661696c65640000000000000000000000000060208201526107e9565b600482019150818060200190518101906107e6919061167d565b90505b8615610809578060405162461bcd60e51b815260040161056f9190611879565b7f8227e69dc43e5a3dff3c9e10930295a5383b9e7736b0508e15d46d05efecb4a6848260405161083a929190611b24565b60405180910390a1505b50506001016106cd565b50935093915050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161056f90611a59565b6001600160a01b0381166108a75760405162461bcd60e51b815260040161056f9061188c565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f8cc0f93a743dada018f348511be65ee8585206ca96e058f4d70c41f276e57bde90600090a250565b60006108fb6113a4565b546001600160a01b0316905090565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161056f90611a59565b8061093d6113c8565b8054911515600160a01b0260ff60a01b199092169190911790556040517f69013db8b04c8782a3bfb1988607e4cb48e1476125c4a9f2e08199916281becf9061098790839061186e565b60405180910390a150565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260040161056f90611a59565b816109c56113ec565b80546001600160a01b0319166001600160a01b0392909216919091179055806109ec6113ec565b8054911515600160a01b0260ff60a01b199092169190911790556040517f474dbe0e44f4b1a24e66b1a543293f696f5f72651de8895adf45233e3c6948bb90610a369084906117c3565b60405180910390a17f75f3afb50142265ab5ffa96a1281463cb3a39821dfcafd44d5bcda0dbf1c482581604051610629919061186e565b6000546001600160a01b03163314610a975760405162461bcd60e51b815260040161056f90611a59565b80610aa06113ec565b8054911515600160a01b0260ff60a01b199092169190911790556040517f75f3afb50142265ab5ffa96a1281463cb3a39821dfcafd44d5bcda0dbf1c48259061098790839061186e565b6000610af4611410565b54600160a01b900460ff16919050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b895780601f10610b5e57610100808354040283529160200191610b89565b820191906000526020600020905b815481529060010190602001808311610b6c57829003601f168201915b505050505081565b6000546001600160a01b031681565b610ba8610aea565b610bc45760405162461bcd60e51b815260040161056f9061197d565b333214610be35760405162461bcd60e51b815260040161056f90611946565b6000610bed610e84565b6001600160a01b0316348484604051610c07929190611740565b60006040518083038185875af1925050503d8060008114610c44576040519150601f19603f3d011682016040523d82523d6000602084013e610c49565b606091505b5050905080610c5f576040513d806000833e8082fd5b505050565b610c6c610faf565b610c885760405162461bcd60e51b815260040161056f906118e9565b333214610ca75760405162461bcd60e51b815260040161056f90611946565b6000610cb1610e8e565b6001600160a01b03168383604051610cca929190611740565b6000604051808303816000865af19150503d8060008114610c44576040519150601f19603f3d011682016040523d82523d6000602084013e610c49565b6002546001600160a01b03163314610d315760405162461bcd60e51b815260040161056f906119eb565b600254600080546040516001600160a01b0393841693909116917fd58299b712891143e76310d5e664c4203c940a67db37cf856bdaa3c5c76a802c91a360028054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b03163314610dbf5760405162461bcd60e51b815260040161056f90611a59565b81610dc8611434565b80546001600160a01b0319166001600160a01b039290921691909117905580610def611434565b8054911515600160a01b0260ff60a01b199092169190911790556040517fc4b713388b13f13226268ec85c363aa606bfc124242892bef245909669b35d0c90610e399084906117c3565b60405180910390a17f77a57cd075e1e4d27ea05938d55fc48c8967f71d9edeeb249010daccce25e45b81604051610629919061186e565b6000610af46113ec565b60006108fb6113ec565b60006108fb611410565b60006108fb611434565b610ea061139e565b610ebc5760405162461bcd60e51b815260040161056f90611a22565b333214610edb5760405162461bcd60e51b815260040161056f90611946565b6000610bed6108f1565b610eed610e70565b610f095760405162461bcd60e51b815260040161056f906119b4565b333214610f285760405162461bcd60e51b815260040161056f90611946565b6000610bed610e7a565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b815260040161056f90611a59565b80610f65611434565b8054911515600160a01b0260ff60a01b199092169190911790556040517f77a57cd075e1e4d27ea05938d55fc48c8967f71d9edeeb249010daccce25e45b9061098790839061186e565b6000610af4611434565b60006108fb6113c8565b6000610af46113c8565b6000546001600160a01b03163314610ff75760405162461bcd60e51b815260040161056f90611a59565b81611000611410565b80546001600160a01b0319166001600160a01b039290921691909117905580611027611410565b8054911515600160a01b0260ff60a01b199092169190911790556040517fed44209623383e0a37e30095e7056f3e879411ab3edf075836dd94a2f4973580906110719084906117c3565b60405180910390a17ff39273fb8850aade529594fa8aa09c79be1dd5d16a8cff2c20496e048539e41881604051610629919061186e565b6000546001600160a01b031633146110d25760405162461bcd60e51b815260040161056f90611a59565b816110db6113c8565b80546001600160a01b0319166001600160a01b0392909216919091179055806111026113c8565b8054911515600160a01b0260ff60a01b199092169190911790556040517fe3f9ba76e59e03b4e1255783bc2d5340338b8bc071086d3e32e5ddff4fc855539061114c9084906117c3565b60405180910390a17f69013db8b04c8782a3bfb1988607e4cb48e1476125c4a9f2e08199916281becf81604051610629919061186e565b604051602001611192906117c0565b6040516020818303038152906040528051906020012060016040516020016111ba9190611750565b60405160208183030381529060405280519060200120146111ed5760405162461bcd60e51b815260040161056f90611ac7565b6001600160a01b0381166112135760405162461bcd60e51b815260040161056f9061188c565b600080546001600160a01b0319166001600160a01b0383161790556040805180820190915260058082527f352e332e30000000000000000000000000000000000000000000000000000000602090920191825261127291600191611458565b5050565b6000546001600160a01b031633146112a05760405162461bcd60e51b815260040161056f90611a59565b806112a96113a4565b8054911515600160a01b0260ff60a01b199092169190911790556040517f85600615329dbd38415d95ab88a1870aa23283ed03ea8339bbaf7c53cb6889eb9061098790839061186e565b6112fb610fc3565b6113175760405162461bcd60e51b815260040161056f90611a90565b6000610bed610fb9565b6000546001600160a01b0316331461134b5760405162461bcd60e51b815260040161056f90611a59565b80611354611410565b8054911515600160a01b0260ff60a01b199092169190911790556040517ff39273fb8850aade529594fa8aa09c79be1dd5d16a8cff2c20496e048539e4189061098790839061186e565b6000610af45b7f857df08bd185dc66e3cc5e11acb4e1dd65290f3fee6426f52f84e8faccf229cf90565b7fbf49677e3150252dfa801a673d2d5ec21eaa360a4674864e55e79041e3f65a6b90565b7f8f135983375ba6442123d61647e7325c1753eabc2e038e44d3b888a970def89a90565b7fd5f1768ede616e352f32123fd6fe01064898ae4e55a2678c79b8ad79680ff74490565b7ff1a59a985b4002cdf0db464f05bed7182ee06372a999d820ea1883b8bf067ce590565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261148e57600085556114d4565b82601f106114a757805160ff19168380011785556114d4565b828001600101855582156114d4579182015b828111156114d45782518255916020019190600101906114b9565b506114e09291506114e4565b5090565b5b808211156114e057600081556001016114e5565b80356001600160a01b038116811461151057600080fd5b919050565b8035801515811461151057600080fd5b600060208284031215611536578081fd5b61153f826114f9565b9392505050565b60008060408385031215611558578081fd5b611561836114f9565b915061156f60208401611515565b90509250929050565b60008060006040848603121561158c578081fd5b833567ffffffffffffffff808211156115a3578283fd5b818601915086601f8301126115b6578283fd5b8135818111156115c4578384fd5b87602080830285010111156115d7578384fd5b6020928301955093506115ed9186019050611515565b90509250925092565b600060208284031215611607578081fd5b61153f82611515565b60008060208385031215611622578182fd5b823567ffffffffffffffff80821115611639578384fd5b818501915085601f83011261164c578384fd5b81358181111561165a578485fd5b86602082850101111561166b578485fd5b60209290920196919550909350505050565b60006020828403121561168e578081fd5b815167ffffffffffffffff808211156116a5578283fd5b818401915084601f8301126116b8578283fd5b8151818111156116c457fe5b604051601f8201601f1916810160200183811182821017156116e257fe5b6040528181528382016020018710156116f9578485fd5b61170a826020830160208701611b91565b9695505050505050565b6000815180845261172c816020860160208601611b91565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600080835460018082166000811461176f5760018114611786576117b5565b60ff198316865260028304607f16860193506117b5565b600283048786526020808720875b838110156117ad5781548a820152908501908201611794565b505050860193505b509195945050505050565b90565b6001600160a01b0391909116815260200190565b604080825283519082018190526000906020906060840190828701845b828110156118125781511515845292840192908401906001016117f4565b5050508381038285015284518082528282019080840283018401878501865b8381101561185f57601f1986840301855261184d838351611714565b94870194925090860190600101611831565b50909998505050505050505050565b901515815260200190565b60006020825261153f6020830184611714565b6020808252602b908201527f5573657250726f78793a206f70657261746f722063616e206e6f74206265207a60408201527f65726f2061646472657373000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f5573657250726f78793a204c696d6974204f726465722069732064697361626c60408201527f6564000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526013908201527f5573657250726f78793a206f6e6c7920454f4100000000000000000000000000604082015260600190565b6020808252601c908201527f5573657250726f78793a2052465176322069732064697361626c656400000000604082015260600190565b6020808252601a908201527f5573657250726f78793a20504d4d2069732064697361626c6564000000000000604082015260600190565b60208082526018908201527f5573657250726f78793a206e6f74206e6f6d696e617465640000000000000000604082015260600190565b6020808252601a908201527f5573657250726f78793a205246512069732064697361626c6564000000000000604082015260600190565b6020808252601b908201527f5573657250726f78793a206e6f7420746865206f70657261746f720000000000604082015260600190565b6020808252601a908201527f5573657250726f78793a20414d4d2069732064697361626c6564000000000000604082015260600190565b60208082526023908201527f5573657250726f78793a206e6f7420757067726164696e672066726f6d20656d60408201527f7074790000000000000000000000000000000000000000000000000000000000606082015260800190565b600083825260406020830152611b3d6040830184611714565b949350505050565b6000808335601e19843603018112611b5b578283fd5b83018035915067ffffffffffffffff821115611b75578283fd5b602001915036819003821315611b8a57600080fd5b9250929050565b60005b83811015611bac578181015183820152602001611b94565b83811115611bbb576000848401525b5050505056fea264697066735822122073472f6f5e79471eeaf04b2ff08bab94017e08b9a37a071d37ba11168188a20664736f6c63430007060033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.