ETH Price: $2,115.16 (-1.73%)
Gas: 0.19 Gwei

Contract

0x1663647389993181D13CB45E2113C5d92Fa89e70
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add Dapp115742102021-01-02 9:35:401907 days ago1609580140IN
0x16636473...92Fa89e70
0 ETH0.0028573936
Add Dapp112153462020-11-08 7:09:201962 days ago1604819360IN
0x16636473...92Fa89e70
0 ETH0.0019686918
Add Manager112153452020-11-08 7:09:171962 days ago1604819357IN
0x16636473...92Fa89e70
0 ETH0.0019621418

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:
WhitelistStore

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, Apache-2.0 license
/**
 *Submitted for verification at Etherscan.io on 2020-11-08
*/

// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.7.0;
// File: contracts/iface/Wallet.sol

// Copyright 2017 Loopring Technology Limited.


/// @title Wallet
/// @dev Base contract for smart wallets.
///      Sub-contracts must NOT use non-default constructor to initialize
///      wallet states, instead, `init` shall be used. This is to enable
///      proxies to be deployed in front of the real wallet contract for
///      saving gas.
///
/// @author Daniel Wang - <daniel@loopring.org>
interface Wallet
{
    function version() external pure returns (string memory);

    function owner() external view returns (address);

    /// @dev Set a new owner.
    function setOwner(address newOwner) external;

    /// @dev Adds a new module. The `init` method of the module
    ///      will be called with `address(this)` as the parameter.
    ///      This method must throw if the module has already been added.
    /// @param _module The module's address.
    function addModule(address _module) external;

    /// @dev Removes an existing module. This method must throw if the module
    ///      has NOT been added or the module is the wallet's only module.
    /// @param _module The module's address.
    function removeModule(address _module) external;

    /// @dev Checks if a module has been added to this wallet.
    /// @param _module The module to check.
    /// @return True if the module exists; False otherwise.
    function hasModule(address _module) external view returns (bool);

    /// @dev Binds a method from the given module to this
    ///      wallet so the method can be invoked using this wallet's default
    ///      function.
    ///      Note that this method must throw when the given module has
    ///      not been added to this wallet.
    /// @param _method The method's 4-byte selector.
    /// @param _module The module's address. Use address(0) to unbind the method.
    function bindMethod(bytes4 _method, address _module) external;

    /// @dev Returns the module the given method has been bound to.
    /// @param _method The method's 4-byte selector.
    /// @return _module The address of the bound module. If no binding exists,
    ///                 returns address(0) instead.
    function boundMethodModule(bytes4 _method) external view returns (address _module);

    /// @dev Performs generic transactions. Any module that has been added to this
    ///      wallet can use this method to transact on any third-party contract with
    ///      msg.sender as this wallet itself.
    ///
    ///      Note: 1) this method must ONLY allow invocations from a module that has
    ///      been added to this wallet. The wallet owner shall NOT be permitted
    ///      to call this method directly. 2) Reentrancy inside this function should
    ///      NOT cause any problems.
    ///
    /// @param mode The transaction mode, 1 for CALL, 2 for DELEGATECALL.
    /// @param to The desitination address.
    /// @param value The amount of Ether to transfer.
    /// @param data The data to send over using `to.call{value: value}(data)`
    /// @return returnData The transaction's return value.
    function transact(
        uint8    mode,
        address  to,
        uint     value,
        bytes    calldata data
        )
        external
        returns (bytes memory returnData);
}

// File: contracts/base/DataStore.sol

// Copyright 2017 Loopring Technology Limited.



/// @title DataStore
/// @dev Modules share states by accessing the same storage instance.
///      Using ModuleStorage will achieve better module decoupling.
///
/// @author Daniel Wang - <daniel@loopring.org>
abstract contract DataStore
{
    modifier onlyWalletModule(address wallet)
    {
        requireWalletModule(wallet);
        _;
    }

    function requireWalletModule(address wallet) view internal
    {
        require(Wallet(wallet).hasModule(msg.sender), "UNAUTHORIZED");
    }
}

// File: contracts/lib/AddressSet.sol

// Copyright 2017 Loopring Technology Limited.


/// @title AddressSet
/// @author Daniel Wang - <daniel@loopring.org>
contract AddressSet
{
    struct Set
    {
        address[] addresses;
        mapping (address => uint) positions;
        uint count;
    }
    mapping (bytes32 => Set) private sets;

    function addAddressToSet(
        bytes32 key,
        address addr,
        bool    maintainList
        ) internal
    {
        Set storage set = sets[key];
        require(set.positions[addr] == 0, "ALREADY_IN_SET");

        if (maintainList) {
            require(set.addresses.length == set.count, "PREVIOUSLY_NOT_MAINTAILED");
            set.addresses.push(addr);
        } else {
            require(set.addresses.length == 0, "MUST_MAINTAIN");
        }

        set.count += 1;
        set.positions[addr] = set.count;
    }

    function removeAddressFromSet(
        bytes32 key,
        address addr
        )
        internal
    {
        Set storage set = sets[key];
        uint pos = set.positions[addr];
        require(pos != 0, "NOT_IN_SET");

        delete set.positions[addr];
        set.count -= 1;

        if (set.addresses.length > 0) {
            address lastAddr = set.addresses[set.count];
            if (lastAddr != addr) {
                set.addresses[pos - 1] = lastAddr;
                set.positions[lastAddr] = pos;
            }
            set.addresses.pop();
        }
    }

    function removeSet(bytes32 key)
        internal
    {
        delete sets[key];
    }

    function isAddressInSet(
        bytes32 key,
        address addr
        )
        internal
        view
        returns (bool)
    {
        return sets[key].positions[addr] != 0;
    }

    function numAddressesInSet(bytes32 key)
        internal
        view
        returns (uint)
    {
        Set storage set = sets[key];
        return set.count;
    }

    function addressesInSet(bytes32 key)
        internal
        view
        returns (address[] memory)
    {
        Set storage set = sets[key];
        require(set.count == set.addresses.length, "NOT_MAINTAINED");
        return sets[key].addresses;
    }
}

// File: contracts/lib/Ownable.sol

// Copyright 2017 Loopring Technology Limited.


/// @title Ownable
/// @author Brecht Devos - <brecht@loopring.org>
/// @dev The Ownable contract has an owner address, and provides basic
///      authorization control functions, this simplifies the implementation of
///      "user permissions".
contract Ownable
{
    address public owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /// @dev The Ownable constructor sets the original `owner` of the contract
    ///      to the sender.
    constructor()
    {
        owner = msg.sender;
    }

    /// @dev Throws if called by any account other than the owner.
    modifier onlyOwner()
    {
        require(msg.sender == owner, "UNAUTHORIZED");
        _;
    }

    /// @dev Allows the current owner to transfer control of the contract to a
    ///      new owner.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(
        address newOwner
        )
        public
        virtual
        onlyOwner
    {
        require(newOwner != address(0), "ZERO_ADDRESS");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    function renounceOwnership()
        public
        onlyOwner
    {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }
}

// File: contracts/lib/Claimable.sol

// Copyright 2017 Loopring Technology Limited.



/// @title Claimable
/// @author Brecht Devos - <brecht@loopring.org>
/// @dev Extension for the Ownable contract, where the ownership needs
///      to be claimed. This allows the new owner to accept the transfer.
contract Claimable is Ownable
{
    address public pendingOwner;

    /// @dev Modifier throws if called by any account other than the pendingOwner.
    modifier onlyPendingOwner() {
        require(msg.sender == pendingOwner, "UNAUTHORIZED");
        _;
    }

    /// @dev Allows the current owner to set the pendingOwner address.
    /// @param newOwner The address to transfer ownership to.
    function transferOwnership(
        address newOwner
        )
        public
        override
        onlyOwner
    {
        require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS");
        pendingOwner = newOwner;
    }

    /// @dev Allows the pendingOwner address to finalize the transfer.
    function claimOwnership()
        public
        onlyPendingOwner
    {
        emit OwnershipTransferred(owner, pendingOwner);
        owner = pendingOwner;
        pendingOwner = address(0);
    }
}

// File: contracts/lib/OwnerManagable.sol

// Copyright 2017 Loopring Technology Limited.




contract OwnerManagable is Claimable, AddressSet
{
    bytes32 internal constant MANAGER = keccak256("__MANAGED__");

    event ManagerAdded  (address indexed manager);
    event ManagerRemoved(address indexed manager);

    modifier onlyManager
    {
        require(isManager(msg.sender), "NOT_MANAGER");
        _;
    }

    modifier onlyOwnerOrManager
    {
        require(msg.sender == owner || isManager(msg.sender), "NOT_OWNER_OR_MANAGER");
        _;
    }

    constructor() Claimable() {}

    /// @dev Gets the managers.
    /// @return The list of managers.
    function managers()
        public
        view
        returns (address[] memory)
    {
        return addressesInSet(MANAGER);
    }

    /// @dev Gets the number of managers.
    /// @return The numer of managers.
    function numManagers()
        public
        view
        returns (uint)
    {
        return numAddressesInSet(MANAGER);
    }

    /// @dev Checks if an address is a manger.
    /// @param addr The address to check.
    /// @return True if the address is a manager, False otherwise.
    function isManager(address addr)
        public
        view
        returns (bool)
    {
        return isAddressInSet(MANAGER, addr);
    }

    /// @dev Adds a new manager.
    /// @param manager The new address to add.
    function addManager(address manager)
        public
        onlyOwner
    {
        addManagerInternal(manager);
    }

    /// @dev Removes a manager.
    /// @param manager The manager to remove.
    function removeManager(address manager)
        public
        onlyOwner
    {
        removeAddressFromSet(MANAGER, manager);
        emit ManagerRemoved(manager);
    }

    function addManagerInternal(address manager)
        internal
    {
        addAddressToSet(MANAGER, manager, true);
        emit ManagerAdded(manager);
    }
}

// File: contracts/stores/WhitelistStore.sol

// Copyright 2017 Loopring Technology Limited.





/// @title WhitelistStore
/// @dev This store maintains a wallet's whitelisted addresses.
contract WhitelistStore is DataStore, AddressSet, OwnerManagable
{
    bytes32 internal constant DAPPS = keccak256("__DAPPS__");

    // wallet => whitelisted_addr => effective_since
    mapping(address => mapping(address => uint)) public effectiveTimeMap;

    event Whitelisted(
        address wallet,
        address addr,
        bool    whitelisted,
        uint    effectiveTime
    );

    event DappWhitelisted(
        address addr,
        bool    whitelisted
    );

    constructor() DataStore() {}

    function addToWhitelist(
        address wallet,
        address addr,
        uint    effectiveTime
        )
        external
        onlyWalletModule(wallet)
    {
        addAddressToSet(_walletKey(wallet), addr, true);
        uint effective = effectiveTime >= block.timestamp ? effectiveTime : block.timestamp;
        effectiveTimeMap[wallet][addr] = effective;
        emit Whitelisted(wallet, addr, true, effective);
    }

    function removeFromWhitelist(
        address wallet,
        address addr
        )
        external
        onlyWalletModule(wallet)
    {
        removeAddressFromSet(_walletKey(wallet), addr);
        delete effectiveTimeMap[wallet][addr];
        emit Whitelisted(wallet, addr, false, 0);
    }

    function addDapp(address addr)
        external
        onlyManager
    {
        addAddressToSet(DAPPS, addr, true);
        emit DappWhitelisted(addr, true);
    }

    function removeDapp(address addr)
        external
        onlyManager
    {
        removeAddressFromSet(DAPPS, addr);
        emit DappWhitelisted(addr, false);
    }

    function whitelist(address wallet)
        public
        view
        returns (
            address[] memory addresses,
            uint[]    memory effectiveTimes
        )
    {
        addresses = addressesInSet(_walletKey(wallet));
        effectiveTimes = new uint[](addresses.length);
        for (uint i = 0; i < addresses.length; i++) {
            effectiveTimes[i] = effectiveTimeMap[wallet][addresses[i]];
        }
    }

    function isWhitelisted(
        address wallet,
        address addr
        )
        public
        view
        returns (
            bool isWhitelistedAndEffective,
            uint effectiveTime
        )
    {
        effectiveTime = effectiveTimeMap[wallet][addr];
        isWhitelistedAndEffective = effectiveTime > 0 && effectiveTime <= block.timestamp;
    }

    function whitelistSize(address wallet)
        public
        view
        returns (uint)
    {
        return numAddressesInSet(_walletKey(wallet));
    }

    function dapps()
        public
        view
        returns (
            address[] memory addresses
        )
    {
        return addressesInSet(DAPPS);
    }

    function isDapp(
        address addr
        )
        public
        view
        returns (bool)
    {
        return isAddressInSet(DAPPS, addr);
    }

    function numDapps()
        public
        view
        returns (uint)
    {
        return numAddressesInSet(DAPPS);
    }

    function isDappOrWhitelisted(
        address wallet,
        address addr
        )
        public
        view
        returns (bool res)
    {
        (res,) = isWhitelisted(wallet, addr);
        return res || isAddressInSet(DAPPS, addr);
    }

    function _walletKey(address addr)
        private
        pure
        returns (bytes32)
    {
        return keccak256(abi.encodePacked("__WHITELIST__", addr));
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"DappWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"whitelisted","type":"bool"},{"indexed":false,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"Whitelisted","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"addManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dapps","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"effectiveTimeMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isDapp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"isDappOrWhitelisted","outputs":[{"internalType":"bool","name":"res","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"isWhitelistedAndEffective","type":"bool"},{"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numDapps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numManagers","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":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"removeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"whitelist","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"effectiveTimes","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"whitelistSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50600080546001600160a01b03191633179055611914806100326000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063b6b35272116100d8578063e52c35581161008c578063f3ae241511610066578063f3ae2415146105a0578063f8d3277d146105d3578063ff2120ef1461060e57610182565b8063e52c355814610532578063e68777d714610565578063f2fde38b1461056d57610182565b8063ce7eaf01116100bd578063ce7eaf01146104ac578063e09e83e3146104e7578063e30c39781461052a57610182565b8063b6b3527214610411578063cbb3dc3e1461046757610182565b806365a6e9db1161013a5780638da5cb5b116101145780638da5cb5b146102e15780639b19251a14610312578063ac18de43146103de57610182565b806365a6e9db14610279578063715018a6146102d157806372311705146102d957610182565b8063439b7b7d1161016b578063439b7b7d146101ef5780634e71e0c81461023e578063627c55f61461024657610182565b806327b7ca5f146101875780632d06177a146101bc575b600080fd5b6101ba6004803603602081101561019d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610616565b005b6101ba600480360360208110156101d257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661070a565b61022a6004803603604081101561020557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661079c565b604080519115158252519081900360200190f35b6101ba6107e3565b6101ba6004803603602081101561025c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166108ff565b6102816109f1565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102bd5781810151838201526020016102a5565b505050509050019250505060405180910390f35b6101ba610a21565b610281610b16565b6102e9610b41565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103456004803603602081101561032857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b5d565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610389578181015183820152602001610371565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156103c85781810151838201526020016103b0565b5050505090500194505050505060405180910390f35b6101ba600480360360208110156103f457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c62565b61044c6004803603604081101561042757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610d56565b60408051921515835260208301919091528051918290030190f35b61049a6004803603602081101561047d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610da3565b60408051918252519081900360200190f35b61049a600480360360408110156104c257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610dbc565b6101ba600480360360608110156104fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610dd9565b6102e9610e91565b61022a6004803603602081101561054857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ead565b61049a610ed9565b6101ba6004803603602081101561058357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f04565b61022a600480360360208110156105b657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661107c565b6101ba600480360360408110156105e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166110a8565b61049a611144565b61061f3361107c565b61068a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f545f4d414e41474552000000000000000000000000000000000000000000604482015290519081900360640190fd5b6106b67fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d804833482600161116f565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526001602082015281517fb42e48248460da8b1c3bdf7b9d87ec3bacce70f1df93f67d63b75ae90c5862f2929181900390910190a150565b60005473ffffffffffffffffffffffffffffffffffffffff16331461079057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6107998161138b565b50565b60006107a88383610d56565b50905080806107dc57506107dc7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334836113fb565b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461086957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b6109083361107c565b61097357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f545f4d414e41474552000000000000000000000000000000000000000000604482015290519081900360640190fd5b61099d7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d804833482611436565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526000602082015281517fb42e48248460da8b1c3bdf7b9d87ec3bacce70f1df93f67d63b75ae90c5862f2929181900390910190a150565b6060610a1c7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334611652565b905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610aa757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6060610a1c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8611652565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b606080610b71610b6c84611750565b611652565b9150815167ffffffffffffffff81118015610b8b57600080fd5b50604051908082528060200260200182016040528015610bb5578160200160208202803683370190505b50905060005b8251811015610c5c5773ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208451909190859084908110610bfa57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610c4957fe5b6020908102919091010152600101610bbb565b50915091565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ce857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b610d127fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882611436565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526003602090815260408083209385168352929052908120548015801590610d9a5750428111155b91509250929050565b6000610db6610db183611750565b6117c5565b92915050565b600360209081526000928352604080842090915290825290205481565b82610de3816117db565b610df7610def85611750565b84600161116f565b600042831015610e075742610e09565b825b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600360209081526040808320948a168084529482529182902085905581519283528201929092526001818301526060810183905290519192507fd7a53629773662075985a51ef3a24a90133adb7ccc8e2b26402b8376964d0845919081900360800190a15050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000610db67fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334836113fb565b6000610a1c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f86117c5565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f8a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615801590610fca575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b61103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f414444524553530000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610db67fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8836113fb565b816110b2816117db565b6110c46110be84611750565b83611436565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152600360209081526040808320948716808452948252808320839055805193845290830193909352818301819052606082015290517fd7a53629773662075985a51ef3a24a90133adb7ccc8e2b26402b8376964d08459181900360800190a1505050565b6000610a1c7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d80483346117c5565b600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845260018101909252909120541561121057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f494e5f534554000000000000000000000000000000000000604482015290519081900360640190fd5b81156112de57600281015481541461128957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c454400000000000000604482015290519081900360640190fd5b80546001810182556000828152602090200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905561134c565b80541561134c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d5553545f4d41494e5441494e00000000000000000000000000000000000000604482015290519081900360640190fd5b60028101805460019081019182905573ffffffffffffffffffffffffffffffffffffffff90941660009081529190930160205260409020919091555050565b6113b77fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882600161116f565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600101909152902054151592915050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff851684526001810190925290912054806114d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f494e5f53455400000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001830160205260408120556002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905581541561164c5760008260000183600201548154811061154557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff9081169150841681146115e7578083600001600184038154811061158657fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918316815260018501909152604090208290555b82548390806115f257fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505b50505050565b6000818152600260208190526040909120805491810154606092146116d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4d41494e5441494e4544000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600260209081526040918290208054835181840281018401909452808452909183018282801561174357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611718575b5050505050915050919050565b604080517f5f5f57484954454c4953545f5f0000000000000000000000000000000000000060208083019190915260609390931b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602d820152815180820360210181526041909101909152805191012090565b6000908152600260208190526040909120015490565b604080517fc7b2e596000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff83169163c7b2e596916024808301926020929190829003018186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d602081101561187157600080fd5b505161079957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fdfea2646970667358221220ac5fd440c97a4885ba3e5f3a27bce9a396ed292b35ee6fb9fb98a324fcd3a51164736f6c63430007000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101825760003560e01c8063b6b35272116100d8578063e52c35581161008c578063f3ae241511610066578063f3ae2415146105a0578063f8d3277d146105d3578063ff2120ef1461060e57610182565b8063e52c355814610532578063e68777d714610565578063f2fde38b1461056d57610182565b8063ce7eaf01116100bd578063ce7eaf01146104ac578063e09e83e3146104e7578063e30c39781461052a57610182565b8063b6b3527214610411578063cbb3dc3e1461046757610182565b806365a6e9db1161013a5780638da5cb5b116101145780638da5cb5b146102e15780639b19251a14610312578063ac18de43146103de57610182565b806365a6e9db14610279578063715018a6146102d157806372311705146102d957610182565b8063439b7b7d1161016b578063439b7b7d146101ef5780634e71e0c81461023e578063627c55f61461024657610182565b806327b7ca5f146101875780632d06177a146101bc575b600080fd5b6101ba6004803603602081101561019d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610616565b005b6101ba600480360360208110156101d257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661070a565b61022a6004803603604081101561020557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661079c565b604080519115158252519081900360200190f35b6101ba6107e3565b6101ba6004803603602081101561025c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166108ff565b6102816109f1565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102bd5781810151838201526020016102a5565b505050509050019250505060405180910390f35b6101ba610a21565b610281610b16565b6102e9610b41565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103456004803603602081101561032857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b5d565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610389578181015183820152602001610371565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156103c85781810151838201526020016103b0565b5050505090500194505050505060405180910390f35b6101ba600480360360208110156103f457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c62565b61044c6004803603604081101561042757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610d56565b60408051921515835260208301919091528051918290030190f35b61049a6004803603602081101561047d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610da3565b60408051918252519081900360200190f35b61049a600480360360408110156104c257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610dbc565b6101ba600480360360608110156104fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610dd9565b6102e9610e91565b61022a6004803603602081101561054857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ead565b61049a610ed9565b6101ba6004803603602081101561058357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f04565b61022a600480360360208110156105b657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661107c565b6101ba600480360360408110156105e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166110a8565b61049a611144565b61061f3361107c565b61068a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f545f4d414e41474552000000000000000000000000000000000000000000604482015290519081900360640190fd5b6106b67fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d804833482600161116f565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526001602082015281517fb42e48248460da8b1c3bdf7b9d87ec3bacce70f1df93f67d63b75ae90c5862f2929181900390910190a150565b60005473ffffffffffffffffffffffffffffffffffffffff16331461079057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6107998161138b565b50565b60006107a88383610d56565b50905080806107dc57506107dc7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334836113fb565b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461086957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b6109083361107c565b61097357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f545f4d414e41474552000000000000000000000000000000000000000000604482015290519081900360640190fd5b61099d7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d804833482611436565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526000602082015281517fb42e48248460da8b1c3bdf7b9d87ec3bacce70f1df93f67d63b75ae90c5862f2929181900390910190a150565b6060610a1c7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334611652565b905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610aa757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6060610a1c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8611652565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b606080610b71610b6c84611750565b611652565b9150815167ffffffffffffffff81118015610b8b57600080fd5b50604051908082528060200260200182016040528015610bb5578160200160208202803683370190505b50905060005b8251811015610c5c5773ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208451909190859084908110610bfa57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610c4957fe5b6020908102919091010152600101610bbb565b50915091565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ce857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b610d127fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882611436565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526003602090815260408083209385168352929052908120548015801590610d9a5750428111155b91509250929050565b6000610db6610db183611750565b6117c5565b92915050565b600360209081526000928352604080842090915290825290205481565b82610de3816117db565b610df7610def85611750565b84600161116f565b600042831015610e075742610e09565b825b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600360209081526040808320948a168084529482529182902085905581519283528201929092526001818301526060810183905290519192507fd7a53629773662075985a51ef3a24a90133adb7ccc8e2b26402b8376964d0845919081900360800190a15050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000610db67fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334836113fb565b6000610a1c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f86117c5565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f8a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615801590610fca575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b61103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f414444524553530000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610db67fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8836113fb565b816110b2816117db565b6110c46110be84611750565b83611436565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152600360209081526040808320948716808452948252808320839055805193845290830193909352818301819052606082015290517fd7a53629773662075985a51ef3a24a90133adb7ccc8e2b26402b8376964d08459181900360800190a1505050565b6000610a1c7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d80483346117c5565b600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845260018101909252909120541561121057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f494e5f534554000000000000000000000000000000000000604482015290519081900360640190fd5b81156112de57600281015481541461128957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c454400000000000000604482015290519081900360640190fd5b80546001810182556000828152602090200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905561134c565b80541561134c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d5553545f4d41494e5441494e00000000000000000000000000000000000000604482015290519081900360640190fd5b60028101805460019081019182905573ffffffffffffffffffffffffffffffffffffffff90941660009081529190930160205260409020919091555050565b6113b77fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882600161116f565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600101909152902054151592915050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff851684526001810190925290912054806114d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f494e5f53455400000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001830160205260408120556002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905581541561164c5760008260000183600201548154811061154557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff9081169150841681146115e7578083600001600184038154811061158657fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918316815260018501909152604090208290555b82548390806115f257fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505b50505050565b6000818152600260208190526040909120805491810154606092146116d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4d41494e5441494e4544000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600260209081526040918290208054835181840281018401909452808452909183018282801561174357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611718575b5050505050915050919050565b604080517f5f5f57484954454c4953545f5f0000000000000000000000000000000000000060208083019190915260609390931b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602d820152815180820360210181526041909101909152805191012090565b6000908152600260208190526040909120015490565b604080517fc7b2e596000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff83169163c7b2e596916024808301926020929190829003018186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d602081101561187157600080fd5b505161079957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fdfea2646970667358221220ac5fd440c97a4885ba3e5f3a27bce9a396ed292b35ee6fb9fb98a324fcd3a51164736f6c63430007000033

Deployed Bytecode Sourcemap

11304:3607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12610:171;;;;;;;;;;;;;;;;-1:-1:-1;12610:171:0;;;;:::i;:::-;;10541:123;;;;;;;;;;;;;;;;-1:-1:-1;10541:123:0;;;;:::i;14467:258::-;;;;;;;;;;;;;;;;-1:-1:-1;14467:258:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8860:205;;;:::i;12789:174::-;;;;;;;;;;;;;;;;-1:-1:-1;12789:174:0;;;;:::i;13983:169::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7641:161;;;:::i;9772:140::-;;;:::i;6701:20::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12971:446;;;;;;;;;;;;;;;;-1:-1:-1;12971:446:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10752:176;;;;;;;;;;;;;;;;-1:-1:-1;10752:176:0;;;;:::i;13425:381::-;;;;;;;;;;;;;;;;-1:-1:-1;13425:381:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;13814:161;;;;;;;;;;;;;;;;-1:-1:-1;13814:161:0;;;;:::i;:::-;;;;;;;;;;;;;;;;11496:68;;;;;;;;;;;;;;;;-1:-1:-1;11496:68:0;;;;;;;;;;;:::i;11842:443::-;;;;;;;;;;;;;;;;-1:-1:-1;11842:443:0;;;;;;;;;;;;;;;;;;:::i;8160:27::-;;;:::i;14160:162::-;;;;;;;;;;;;;;;;-1:-1:-1;14160:162:0;;;;:::i;10003:134::-;;;:::i;8533:247::-;;;;;;;;;;;;;;;;-1:-1:-1;8533:247:0;;;;:::i;10304:147::-;;;;;;;;;;;;;;;;-1:-1:-1;10304:147:0;;;;:::i;12293:309::-;;;;;;;;;;;;;;;;-1:-1:-1;12293:309:0;;;;;;;;;;;:::i;14330:129::-;;;:::i;12610:171::-;9450:21;9460:10;9450:9;:21::i;:::-;9442:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12696:34:::1;11411:22;12719:4;12725;12696:15;:34::i;:::-;12746:27;::::0;;::::1;::::0;::::1;::::0;;12768:4:::1;12746:27;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;12610:171:::0;:::o;10541:123::-;7147:5;;;;7133:10;:19;7125:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10629:27:::1;10648:7;10629:18;:27::i;:::-;10541:123:::0;:::o;14467:258::-;14603:8;14638:27;14652:6;14660:4;14638:13;:27::i;:::-;-1:-1:-1;14629:36:0;-1:-1:-1;14629:36:0;;14683:34;;;14690:27;11411:22;14712:4;14690:14;:27::i;:::-;14676:41;14467:258;-1:-1:-1;;;14467:258:0:o;8860:205::-;8341:12;;;;8327:10;:26;8319:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8977:12:::1;::::0;::::1;8970:5:::0;;8949:41:::1;::::0;8977:12:::1;::::0;;::::1;::::0;8970:5;;::::1;::::0;8949:41:::1;::::0;::::1;9009:12;::::0;;::::1;9001:20:::0;;;;;::::1;9009:12;::::0;::::1;9001:20;::::0;;;9032:25:::1;::::0;;8860:205::o;12789:174::-;9450:21;9460:10;9450:9;:21::i;:::-;9442:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12878:33:::1;11411:22;12906:4;12878:20;:33::i;:::-;12927:28;::::0;;::::1;::::0;::::1;::::0;;12949:5:::1;12927:28;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;12789:174:::0;:::o;13983:169::-;14062:26;14123:21;11411:22;14123:14;:21::i;:::-;14116:28;;13983:169;:::o;7641:161::-;7147:5;;;;7133:10;:19;7125:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7762:1:::1;7747:5:::0;;7726:39:::1;::::0;::::1;7747:5:::0;;::::1;::::0;7726:39:::1;::::0;7762:1;;7726:39:::1;7792:1;7776:18:::0;;;::::1;::::0;;7641:161::o;9772:140::-;9840:16;9881:23;9266:24;9881:14;:23::i;6701:20::-;;;;;;:::o;12971:446::-;13068:26;13109:31;13180:34;13195:18;13206:6;13195:10;:18::i;:::-;13180:14;:34::i;:::-;13168:46;;13253:9;:16;13242:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13242:28:0;;13225:45;;13286:6;13281:129;13302:9;:16;13298:1;:20;13281:129;;;13360:24;;;;;;;:16;:24;;;;;13385:12;;13360:24;;;13385:9;;13395:1;;13385:12;;;;;;;;;;;;13360:38;;;;;;;;;;;;;;;;13340:14;13355:1;13340:17;;;;;;;;;;;;;;;;;:58;13320:3;;13281:129;;;;12971:446;;;:::o;10752:176::-;7147:5;;;;7133:10;:19;7125:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10843:38:::1;9266:24;10873:7;10843:20;:38::i;:::-;10897:23;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;10752:176:::0;:::o;13425:381::-;13676:24;;;;13569:30;13676:24;;;:16;:24;;;;;;;;:30;;;;;;;;;;;;13745:17;;;;;:53;;;13783:15;13766:13;:32;;13745:53;13717:81;;13425:381;;;;;:::o;13814:161::-;13901:4;13930:37;13948:18;13959:6;13948:10;:18::i;:::-;13930:17;:37::i;:::-;13923:44;13814:161;-1:-1:-1;;13814:161:0:o;11496:68::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;11842:443::-;12001:6;3835:27;3855:6;3835:19;:27::i;:::-;12025:47:::1;12041:18;12052:6;12041:10;:18::i;:::-;12061:4;12067;12025:15;:47::i;:::-;12083:14;12117:15;12100:13;:32;;:66;;12151:15;12100:66;;;12135:13;12100:66;12177:24;::::0;;::::1;;::::0;;;:16:::1;:24;::::0;;;;;;;:30;;::::1;::::0;;;;;;;;;;:42;;;12235;;;;;;::::1;::::0;;;;12261:4:::1;12235:42:::0;;;;;;;;;;;;12083:83;;-1:-1:-1;12235:42:0::1;::::0;;;;;;;;::::1;3873:1;11842:443:::0;;;;:::o;8160:27::-;;;;;;:::o;14160:162::-;14258:4;14287:27;11411:22;14309:4;14287:14;:27::i;10003:134::-;10074:4;10103:26;9266:24;10103:17;:26::i;8533:247::-;7147:5;;;;7133:10;:19;7125:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8675:22:::1;::::0;::::1;::::0;;::::1;::::0;:43:::1;;-1:-1:-1::0;8713:5:0::1;::::0;::::1;8701:17:::0;;::::1;8713:5:::0;::::1;8701:17;;8675:43;8667:71;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8749:12;:23:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;8533:247::o;10304:147::-;10385:4;10414:29;9266:24;10438:4;10414:14;:29::i;12293:309::-;12425:6;3835:27;3855:6;3835:19;:27::i;:::-;12449:46:::1;12470:18;12481:6;12470:10;:18::i;:::-;12490:4;12449:20;:46::i;:::-;12513:24;::::0;;::::1;;::::0;;;:16:::1;:24;::::0;;;;;;;:30;;::::1;::::0;;;;;;;;;12506:37;;;12559:35;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;12293:309:::0;;;:::o;14330:129::-;14398:4;14427:24;11411:22;14427:17;:24::i;4407:554::-;4544:15;4562:9;;;:4;:9;;;;;;;;4590:19;;;;;:13;;;:19;;;;;;;:24;4582:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4650:12;4646:239;;;4711:9;;;;4687:20;;:33;4679:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4765:24;;;;;;;-1:-1:-1;4765:24:0;;;;;;;;;;;;;;;;;4646:239;;;4830:20;;:25;4822:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4897:9;;;:14;;4910:1;4897:14;;;;;;;4922:19;;;;4897:9;4922:19;;;:13;;;;:19;;;;;:31;;;;-1:-1:-1;;4407:554:0:o;10936:163::-;11015:39;9266:24;11040:7;11049:4;11015:15;:39::i;:::-;11070:21;;;;;;;;;;;10936:163;:::o;5675:197::-;5805:4;5834:9;;;:4;:9;;;;;;;;:25;;;;;:19;;:25;;;;;;:30;;5675:197;;;;:::o;4969:600::-;5089:15;5107:9;;;:4;:9;;;;;;;;5138:19;;;;;:13;;;:19;;;;;;;5176:8;5168:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5219:19;;;;;;;:13;;;:19;;;;;5212:26;5249:9;;;:14;;;;;;5280:20;;:24;5276:286;;5321:16;5340:3;:13;;5354:3;:9;;;5340:24;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5383:16:0;;;;5379:138;;5445:8;5420:3;:13;;5440:1;5434:3;:7;5420:22;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;5472:23;;;;;-1:-1:-1;5472:13:0;;:23;;;;;;:29;;;5379:138;5531:19;;:3;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5276:286:0;4969:600;;;;:::o;6062:264::-;6183:15;6201:9;;;:4;:9;;;;;;;;6242:20;;6229:9;;;;6149:16;;6229:33;6221:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6299:9;;;;:4;:9;;;;;;;;;6292:26;;;;;;;;;;;;;;;;;6299:9;;6292:26;;6299:9;6292:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6062:264;;;:::o;14733:173::-;14858:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14848:50;;;;;;14733:173::o;5880:174::-;5970:4;6010:9;;;:4;:9;;;;;;;;6037;;;5880:174::o;3890:144::-;3973:36;;;;;;3998:10;3973:36;;;;;;:24;;;;;;:36;;;;;;;;;;;;;;:24;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3973:36:0;3965:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://ac5fd440c97a4885ba3e5f3a27bce9a396ed292b35ee6fb9fb98a324fcd3a511

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.