ETH Price: $3,474.51 (+0.77%)

Contract

0x1EBFC81474eAeA77bD6caCcB90E3d309d3a1Ac2C
 

Overview

ETH Balance

0.0004375 ETH

Eth Value

$1.52 (@ $3,474.51/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Share180389692023-09-01 3:17:59481 days ago1693538279IN
0x1EBFC814...9d3a1Ac2C
0 ETH0.0008115811.77713452
Sell Shares180378882023-08-31 23:40:11481 days ago1693525211IN
0x1EBFC814...9d3a1Ac2C
0 ETH0.0014732221.0140146
Buy Shares180377892023-08-31 23:20:11481 days ago1693524011IN
0x1EBFC814...9d3a1Ac2C
0.000275 ETH0.0016338619.15976488
Claim Share180377752023-08-31 23:17:11481 days ago1693523831IN
0x1EBFC814...9d3a1Ac2C
0 ETH0.0011358716.48301096
Buy Shares180351702023-08-31 14:31:23482 days ago1693492283IN
0x1EBFC814...9d3a1Ac2C
0.00006875 ETH0.0033317726.69500138
Buy Shares180349472023-08-31 13:46:47482 days ago1693489607IN
0x1EBFC814...9d3a1Ac2C
0.00006875 ETH0.0029526419.70942295
Buy Shares180349332023-08-31 13:43:59482 days ago1693489439IN
0x1EBFC814...9d3a1Ac2C
0.00006875 ETH0.0016466419.30963876
Buy Shares180349222023-08-31 13:41:47482 days ago1693489307IN
0x1EBFC814...9d3a1Ac2C
0.00006875 ETH0.0027577418.40843324
Sell Shares180349172023-08-31 13:40:47482 days ago1693489247IN
0x1EBFC814...9d3a1Ac2C
0 ETH0.0013459319.19834186
Buy Shares180349102023-08-31 13:39:23482 days ago1693489163IN
0x1EBFC814...9d3a1Ac2C
0.00006875 ETH0.003092620.64365282
Buy Shares180349032023-08-31 13:37:59482 days ago1693489079IN
0x1EBFC814...9d3a1Ac2C
0.00006875 ETH0.0034275622.87958988
Buy Shares180348982023-08-31 13:36:59482 days ago1693489019IN
0x1EBFC814...9d3a1Ac2C
0.00006875 ETH0.0027845122.31023238
Buy Shares180304812023-08-30 22:46:59482 days ago1693435619IN
0x1EBFC814...9d3a1Ac2C
0.00006875 ETH0.0020900816.74625306
Set Fee Destinat...180301782023-08-30 21:45:59482 days ago1693431959IN
0x1EBFC814...9d3a1Ac2C
0 ETH0.0008820419.10139608

Latest 24 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
180378882023-08-31 23:40:11481 days ago1693525211
0x1EBFC814...9d3a1Ac2C
0.0000125 ETH
180378882023-08-31 23:40:11481 days ago1693525211
0x1EBFC814...9d3a1Ac2C
0.0000125 ETH
180378882023-08-31 23:40:11481 days ago1693525211
0x1EBFC814...9d3a1Ac2C
0.000225 ETH
180377892023-08-31 23:20:11481 days ago1693524011
0x1EBFC814...9d3a1Ac2C
0.0000125 ETH
180377892023-08-31 23:20:11481 days ago1693524011
0x1EBFC814...9d3a1Ac2C
0.0000125 ETH
180351702023-08-31 14:31:23482 days ago1693492283
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180351702023-08-31 14:31:23482 days ago1693492283
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349472023-08-31 13:46:47482 days ago1693489607
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349472023-08-31 13:46:47482 days ago1693489607
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349332023-08-31 13:43:59482 days ago1693489439
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349332023-08-31 13:43:59482 days ago1693489439
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349222023-08-31 13:41:47482 days ago1693489307
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349222023-08-31 13:41:47482 days ago1693489307
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349172023-08-31 13:40:47482 days ago1693489247
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349172023-08-31 13:40:47482 days ago1693489247
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349172023-08-31 13:40:47482 days ago1693489247
0x1EBFC814...9d3a1Ac2C
0.00005625 ETH
180349102023-08-31 13:39:23482 days ago1693489163
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349102023-08-31 13:39:23482 days ago1693489163
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349032023-08-31 13:37:59482 days ago1693489079
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180349032023-08-31 13:37:59482 days ago1693489079
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180348982023-08-31 13:36:59482 days ago1693489019
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180348982023-08-31 13:36:59482 days ago1693489019
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180304812023-08-30 22:46:59482 days ago1693435619
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
180304812023-08-30 22:46:59482 days ago1693435619
0x1EBFC814...9d3a1Ac2C
0.00000312 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FriendShares_io

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-08-31
*/

/**
 *Submitted for verification at basescan.org on 2023-08-31
*/

// File: contracts/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: contracts/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/FriendtechShares.sol



pragma solidity >=0.8.2 <0.9.0;


// TODO: Events, final pricing model, 

contract FriendShares_io is Ownable {
    address public protocolFeeDestination;
    uint256 public protocolFeePercent = 50000000000000000;
    uint256 public subjectFeePercent = 50000000000000000;
    mapping(address => uint256) public subjectFeePercentMapping;
    mapping(address => uint256) public protocolFeePercentMapping;
    uint256 public maxFeePercent = 100000000000000000;


    event Trade(address trader, address subject, bool isBuy, uint256 shareAmount, uint256 ethAmount, uint256 protocolEthAmount, uint256 subjectEthAmount, uint256 supply);

    // SharesSubject => (Holder => Balance)
    mapping(address => mapping(address => uint256)) public sharesBalance;

    // SharesSubject => Supply
    mapping(address => uint256) public sharesSupply;

    function setFeeDestination(address _feeDestination) public onlyOwner {
        protocolFeeDestination = _feeDestination;
    }

    function setProtocolFeePercent(uint256 _feePercent) public onlyOwner {
        protocolFeePercent = _feePercent;
    }

    function setSubjectFeePercent(uint256 _feePercent) public onlyOwner {
        subjectFeePercent = _feePercent;
    }

    function getPrice(uint256 supply, uint256 amount) public pure returns (uint256) {
    uint256 sum1 = supply == 0 ? 0 : (supply - 1) * supply * (2 * (supply - 1) + 1) / 6;
    uint256 sum2 = (supply == 0 && amount == 1) ? 0 : (supply - 1 + amount) * (supply + amount) * (2 * (supply - 1 + amount) + 1) / 6;
    return (sum2 - sum1) * 1 ether / 16000;
    }

    function getBuyPrice(address sharesSubject, uint256 amount) public view returns (uint256) {
    uint256 adjustedSupply = (sharesSupply[sharesSubject] == 0) ? 1 : sharesSupply[sharesSubject];
    return getPrice(adjustedSupply, amount);
    }

    function getSellPrice(address sharesSubject, uint256 amount) public view returns (uint256) {
    return getPrice(sharesSupply[sharesSubject] - amount, amount);
    }

    function getBuyPriceAfterFee(address sharesSubject, uint256 amount) public view returns (uint256) {
        uint256 price = getBuyPrice(sharesSubject, amount);
        uint256 protocolFeeCalc = protocolFeePercentMapping[sharesSubject] == 0 ? protocolFeePercent : protocolFeePercentMapping[sharesSubject];
        uint256 protocolFee = price * protocolFeeCalc / 1 ether;
        uint256 subjectFeeCalc = subjectFeePercentMapping[sharesSubject] == 0 ? subjectFeePercent : subjectFeePercentMapping[sharesSubject];
        uint256 subjectFee = price * subjectFeeCalc / 1 ether;
        return price + protocolFee + subjectFee;
    }

    function getSellPriceAfterFee(address sharesSubject, uint256 amount) public view returns (uint256) {
        uint256 price = getSellPrice(sharesSubject, amount);
        uint256 protocolFeeCalc = protocolFeePercentMapping[sharesSubject] == 0 ? protocolFeePercent : protocolFeePercentMapping[sharesSubject];
        uint256 protocolFee = price * protocolFeeCalc / 1 ether;
        uint256 subjectFeeCalc = subjectFeePercentMapping[sharesSubject] == 0 ? subjectFeePercent : subjectFeePercentMapping[sharesSubject];
        uint256 subjectFee = price * subjectFeeCalc / 1 ether;
       return price - protocolFee - subjectFee;
    } 

    function buyShares(address sharesSubject, uint256 amount) public payable {
        uint256 supply = sharesSupply[sharesSubject];
        if (supply == 0) {
        // Reserve the first share for the sharesSubject 
        sharesBalance[sharesSubject][sharesSubject] = 1;
        sharesSupply[sharesSubject] = 1;
        supply = 1;  
        }
        uint256 price = getBuyPrice(sharesSubject, amount);
        uint256 protocolFeeCalc = protocolFeePercentMapping[sharesSubject] == 0 ? protocolFeePercent : protocolFeePercentMapping[sharesSubject];
        uint256 protocolFee = price * protocolFeeCalc / 1 ether;
        uint256 subjectFeeCalc = subjectFeePercentMapping[sharesSubject] == 0 ? subjectFeePercent : subjectFeePercentMapping[sharesSubject];
        uint256 subjectFee = price * subjectFeeCalc / 1 ether;
        require(msg.value >= price + protocolFee + subjectFee, "Insufficient payment");
        sharesBalance[sharesSubject][msg.sender] += amount;
        sharesSupply[sharesSubject] += amount;
        emit Trade(msg.sender, sharesSubject, true, amount, price, protocolFee, subjectFee, supply + amount);
        (bool success1, ) = protocolFeeDestination.call{value: protocolFee}("");
        (bool success2, ) = sharesSubject.call{value: subjectFee}("");
        require(success1 && success2, "Unable to send funds");
    }


    function sellShares(address sharesSubject, uint256 amount) public payable {
        uint256 supply = sharesSupply[sharesSubject];
        require(supply > amount, "Cannot sell the last share");
        uint256 price = getPrice(supply - amount, amount);
        uint256 protocolFeeCalc = protocolFeePercentMapping[sharesSubject] == 0 ? protocolFeePercent : protocolFeePercentMapping[sharesSubject];
        uint256 protocolFee = price * protocolFeeCalc / 1 ether;
        uint256 subjectFeeCalc = subjectFeePercentMapping[sharesSubject] == 0 ? subjectFeePercent : subjectFeePercentMapping[sharesSubject];
        uint256 subjectFee = price * subjectFeeCalc / 1 ether;
        require(sharesBalance[sharesSubject][msg.sender] >= amount, "Insufficient shares");
        sharesBalance[sharesSubject][msg.sender] = sharesBalance[sharesSubject][msg.sender] - amount;
        sharesSupply[sharesSubject] = supply - amount;
        emit Trade(msg.sender, sharesSubject, false, amount, price, protocolFee, subjectFee, supply - amount);
        (bool success1, ) = msg.sender.call{value: price - protocolFee - subjectFee}("");
        (bool success2, ) = protocolFeeDestination.call{value: protocolFee}("");
        (bool success3, ) = sharesSubject.call{value: subjectFee}("");
        require(success1 && success2 && success3, "Unable to send funds");
    }

    function setFeePercentForSubject(uint256 _feePercent) public {
        require(_feePercent <= maxFeePercent, "Fee percent cannot be greater than the maximum allowed");
        subjectFeePercentMapping[msg.sender] = _feePercent;
    }

    function setcustomprotocolFeePercent(uint256 _feePercent, address sharesSubject) public onlyOwner {
        require(_feePercent <= maxFeePercent, "Fee percent cannot be greater than the maximum allowed");
        protocolFeePercentMapping[sharesSubject] = _feePercent;
    }

    function setMaxFeePercent(uint256 _newMaxFeePercent) public onlyOwner {
        maxFeePercent = _newMaxFeePercent;
    }



    function claimShare() public {
    uint256 supply = sharesSupply[msg.sender];
    require(supply == 0, "First share already claimed");
    sharesBalance[msg.sender][msg.sender] = 1;
    sharesSupply[msg.sender] = 1;
    supply = 1;  

    emit Trade(msg.sender, msg.sender, true, 1, 0, 0, 0, supply);
    }



}

Contract Security Audit

Contract ABI

[{"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":"trader","type":"address"},{"indexed":false,"internalType":"address","name":"subject","type":"address"},{"indexed":false,"internalType":"bool","name":"isBuy","type":"bool"},{"indexed":false,"internalType":"uint256","name":"shareAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"subjectEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"}],"name":"Trade","type":"event"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyShares","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFeePercent","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":"protocolFeeDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"protocolFeePercentMapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sellShares","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeDestination","type":"address"}],"name":"setFeeDestination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"}],"name":"setFeePercentForSubject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxFeePercent","type":"uint256"}],"name":"setMaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"}],"name":"setProtocolFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"}],"name":"setSubjectFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"},{"internalType":"address","name":"sharesSubject","type":"address"}],"name":"setcustomprotocolFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"sharesBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sharesSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subjectFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subjectFeePercentMapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266b1a2bc2ec5000060025566b1a2bc2ec5000060035567016345785d8a000060065534801561003257600080fd5b5061003c33610041565b610091565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611470806100a06000396000f3fe6080604052600436106101665760003560e01c8063715018a6116100d1578063b51d05341161008a578063f2fde38b11610064578063f2fde38b1461041a578063f518fbdd1461043a578063f9931be01461045a578063fbe532341461048757600080fd5b8063b51d0534146103db578063d6e6eb9f146103ee578063d830a05b1461040457600080fd5b8063715018a61461031b5780637219839d14610330578063787305aa1461035d5780638da5cb5b1461037d5780639ae717811461039b578063a4983421146103bb57600080fd5b80634ce7957c116101235780634ce7957c1461025957806351e22ec1146102915780635a8a764e146102b35780635cf4ee91146102d3578063666da64f146102f35780636945b1231461030857600080fd5b8063020235ff1461016b5780630f026f6d146101b65780632267a89c146101d657806324dc441d146101f657806333d18bcd1461020c5780634635256e14610239575b600080fd5b34801561017757600080fd5b506101a3610186366004611255565b600760209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156101c257600080fd5b506101a36101d1366004611288565b6104a7565b3480156101e257600080fd5b506101a36101f1366004611288565b6105a3565b34801561020257600080fd5b506101a360035481565b34801561021857600080fd5b506101a36102273660046112b2565b60046020526000908152604090205481565b34801561024557600080fd5b506101a3610254366004611288565b610691565b34801561026557600080fd5b50600154610279906001600160a01b031681565b6040516001600160a01b0390911681526020016101ad565b34801561029d57600080fd5b506102b16102ac3660046112cd565b6106e6565b005b3480156102bf57600080fd5b506102b16102ce3660046112cd565b610723565b3480156102df57600080fd5b506101a36102ee3660046112e6565b610730565b3480156102ff57600080fd5b506102b161084c565b6102b1610316366004611288565b610919565b34801561032757600080fd5b506102b1610c5a565b34801561033c57600080fd5b506101a361034b3660046112b2565b60056020526000908152604090205481565b34801561036957600080fd5b506102b1610378366004611308565b610c6e565b34801561038957600080fd5b506000546001600160a01b0316610279565b3480156103a757600080fd5b506101a36103b6366004611288565b610cb2565b3480156103c757600080fd5b506102b16103d63660046112cd565b610ce7565b6102b16103e9366004611288565b610cf4565b3480156103fa57600080fd5b506101a360025481565b34801561041057600080fd5b506101a360065481565b34801561042657600080fd5b506102b16104353660046112b2565b6110df565b34801561044657600080fd5b506102b16104553660046112cd565b611158565b34801561046657600080fd5b506101a36104753660046112b2565b60086020526000908152604090205481565b34801561049357600080fd5b506102b16104a23660046112b2565b611165565b6000806104b48484610691565b6001600160a01b03851660009081526005602052604081205491925090156104f4576001600160a01b0385166000908152600560205260409020546104f8565b6002545b90506000670de0b6b3a764000061050f8385611341565b6105199190611358565b6001600160a01b0387166000908152600460205260408120549192509015610559576001600160a01b03871660009081526004602052604090205461055d565b6003545b90506000670de0b6b3a76400006105748387611341565b61057e9190611358565b90508061058b848761137a565b610595919061137a565b955050505050505b92915050565b6000806105b08484610cb2565b6001600160a01b03851660009081526005602052604081205491925090156105f0576001600160a01b0385166000908152600560205260409020546105f4565b6002545b90506000670de0b6b3a764000061060b8385611341565b6106159190611358565b6001600160a01b0387166000908152600460205260408120549192509015610655576001600160a01b038716600090815260046020526040902054610659565b6003545b90506000670de0b6b3a76400006106708387611341565b61067a9190611358565b905080610687848761138d565b610595919061138d565b6001600160a01b0382166000908152600860205260408120548190156106cf576001600160a01b0384166000908152600860205260409020546106d2565b60015b90506106de8184610730565b949350505050565b6006548111156107115760405162461bcd60e51b8152600401610708906113a0565b60405180910390fd5b33600090815260046020526040902055565b61072b61118f565b600355565b600080831561078b57600661074660018661138d565b610751906002611341565b61075c90600161137a565b8561076860018261138d565b6107729190611341565b61077c9190611341565b6107869190611358565b61078e565b60005b90506000841580156107a05750836001145b610815576006846107b260018861138d565b6107bc919061137a565b6107c7906002611341565b6107d290600161137a565b6107dc868861137a565b866107e860018a61138d565b6107f2919061137a565b6107fc9190611341565b6108069190611341565b6108109190611358565b610818565b60005b9050613e80610827838361138d565b61083990670de0b6b3a7640000611341565b6108439190611358565b95945050505050565b3360009081526008602052604090205480156108aa5760405162461bcd60e51b815260206004820152601b60248201527f466972737420736861726520616c726561647920636c61696d656400000000006044820152606401610708565b50336000818152600760209081526040808320825280832060019081905560089092528083208290555190927f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c39261090e92829186918291908190819084906113f6565b60405180910390a150565b6001600160a01b0382166000908152600860205260408120549081900361096d57506001600160a01b0382166000908152600760209081526040808320825280832060019081905560089092529091208190555b60006109798484610691565b6001600160a01b03851660009081526005602052604081205491925090156109b9576001600160a01b0385166000908152600560205260409020546109bd565b6002545b90506000670de0b6b3a76400006109d48385611341565b6109de9190611358565b6001600160a01b0387166000908152600460205260408120549192509015610a1e576001600160a01b038716600090815260046020526040902054610a22565b6003545b90506000670de0b6b3a7640000610a398387611341565b610a439190611358565b905080610a50848761137a565b610a5a919061137a565b341015610aa05760405162461bcd60e51b8152602060048201526014602482015273125b9cdd59999a58da595b9d081c185e5b595b9d60621b6044820152606401610708565b6001600160a01b038816600090815260076020908152604080832033845290915281208054899290610ad390849061137a565b90915550506001600160a01b03881660009081526008602052604081208054899290610b0090849061137a565b909155507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c39050338960018a898887610b39848f61137a565b604051610b4d9897969594939291906113f6565b60405180910390a16001546040516000916001600160a01b03169085908381818185875af1925050503d8060008114610ba2576040519150601f19603f3d011682016040523d82523d6000602084013e610ba7565b606091505b505090506000896001600160a01b03168360405160006040518083038185875af1925050503d8060008114610bf8576040519150601f19603f3d011682016040523d82523d6000602084013e610bfd565b606091505b50509050818015610c0b5750805b610c4e5760405162461bcd60e51b8152602060048201526014602482015273556e61626c6520746f2073656e642066756e647360601b6044820152606401610708565b50505050505050505050565b610c6261118f565b610c6c60006111e9565b565b610c7661118f565b600654821115610c985760405162461bcd60e51b8152600401610708906113a0565b6001600160a01b0316600090815260056020526040902055565b6001600160a01b038216600090815260086020526040812054610ce090610cda90849061138d565b83610730565b9392505050565b610cef61118f565b600255565b6001600160a01b038216600090815260086020526040902054818111610d5c5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f742073656c6c20746865206c6173742073686172650000000000006044820152606401610708565b6000610d71610d6b848461138d565b84610730565b6001600160a01b0385166000908152600560205260408120549192509015610db1576001600160a01b038516600090815260056020526040902054610db5565b6002545b90506000670de0b6b3a7640000610dcc8385611341565b610dd69190611358565b6001600160a01b0387166000908152600460205260408120549192509015610e16576001600160a01b038716600090815260046020526040902054610e1a565b6003545b90506000670de0b6b3a7640000610e318387611341565b610e3b9190611358565b6001600160a01b0389166000908152600760209081526040808320338452909152902054909150871115610ea75760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742073686172657360681b6044820152606401610708565b6001600160a01b0388166000908152600760209081526040808320338452909152902054610ed690889061138d565b6001600160a01b0389166000908152600760209081526040808320338452909152902055610f04878761138d565b6001600160a01b0389166000908152600860205260408120919091557f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c39033908a908a898887610f54848f61138d565b604051610f689897969594939291906113f6565b60405180910390a160003382610f7e868961138d565b610f88919061138d565b604051600081818185875af1925050503d8060008114610fc4576040519150601f19603f3d011682016040523d82523d6000602084013e610fc9565b606091505b50506001546040519192506000916001600160a01b039091169086908381818185875af1925050503d806000811461101d576040519150601f19603f3d011682016040523d82523d6000602084013e611022565b606091505b5050905060008a6001600160a01b03168460405160006040518083038185875af1925050503d8060008114611073576040519150601f19603f3d011682016040523d82523d6000602084013e611078565b606091505b505090508280156110865750815b801561108f5750805b6110d25760405162461bcd60e51b8152602060048201526014602482015273556e61626c6520746f2073656e642066756e647360601b6044820152606401610708565b5050505050505050505050565b6110e761118f565b6001600160a01b03811661114c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610708565b611155816111e9565b50565b61116061118f565b600655565b61116d61118f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c6c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610708565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461125057600080fd5b919050565b6000806040838503121561126857600080fd5b61127183611239565b915061127f60208401611239565b90509250929050565b6000806040838503121561129b57600080fd5b6112a483611239565b946020939093013593505050565b6000602082840312156112c457600080fd5b610ce082611239565b6000602082840312156112df57600080fd5b5035919050565b600080604083850312156112f957600080fd5b50508035926020909101359150565b6000806040838503121561131b57600080fd5b8235915061127f60208401611239565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761059d5761059d61132b565b60008261137557634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561059d5761059d61132b565b8181038181111561059d5761059d61132b565b60208082526036908201527f4665652070657263656e742063616e6e6f742062652067726561746572207468604082015275185b881d1a19481b585e1a5b5d5b48185b1b1bddd95960521b606082015260800190565b6001600160a01b03988916815296909716602087015293151560408601526060850192909252608084015260a083015260c082015260e0810191909152610100019056fea2646970667358221220f130a5b7c2b8e2a5f60b503bc9d9fc6e0b7c35adcfcb68107ea01b535a8188a064736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101665760003560e01c8063715018a6116100d1578063b51d05341161008a578063f2fde38b11610064578063f2fde38b1461041a578063f518fbdd1461043a578063f9931be01461045a578063fbe532341461048757600080fd5b8063b51d0534146103db578063d6e6eb9f146103ee578063d830a05b1461040457600080fd5b8063715018a61461031b5780637219839d14610330578063787305aa1461035d5780638da5cb5b1461037d5780639ae717811461039b578063a4983421146103bb57600080fd5b80634ce7957c116101235780634ce7957c1461025957806351e22ec1146102915780635a8a764e146102b35780635cf4ee91146102d3578063666da64f146102f35780636945b1231461030857600080fd5b8063020235ff1461016b5780630f026f6d146101b65780632267a89c146101d657806324dc441d146101f657806333d18bcd1461020c5780634635256e14610239575b600080fd5b34801561017757600080fd5b506101a3610186366004611255565b600760209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156101c257600080fd5b506101a36101d1366004611288565b6104a7565b3480156101e257600080fd5b506101a36101f1366004611288565b6105a3565b34801561020257600080fd5b506101a360035481565b34801561021857600080fd5b506101a36102273660046112b2565b60046020526000908152604090205481565b34801561024557600080fd5b506101a3610254366004611288565b610691565b34801561026557600080fd5b50600154610279906001600160a01b031681565b6040516001600160a01b0390911681526020016101ad565b34801561029d57600080fd5b506102b16102ac3660046112cd565b6106e6565b005b3480156102bf57600080fd5b506102b16102ce3660046112cd565b610723565b3480156102df57600080fd5b506101a36102ee3660046112e6565b610730565b3480156102ff57600080fd5b506102b161084c565b6102b1610316366004611288565b610919565b34801561032757600080fd5b506102b1610c5a565b34801561033c57600080fd5b506101a361034b3660046112b2565b60056020526000908152604090205481565b34801561036957600080fd5b506102b1610378366004611308565b610c6e565b34801561038957600080fd5b506000546001600160a01b0316610279565b3480156103a757600080fd5b506101a36103b6366004611288565b610cb2565b3480156103c757600080fd5b506102b16103d63660046112cd565b610ce7565b6102b16103e9366004611288565b610cf4565b3480156103fa57600080fd5b506101a360025481565b34801561041057600080fd5b506101a360065481565b34801561042657600080fd5b506102b16104353660046112b2565b6110df565b34801561044657600080fd5b506102b16104553660046112cd565b611158565b34801561046657600080fd5b506101a36104753660046112b2565b60086020526000908152604090205481565b34801561049357600080fd5b506102b16104a23660046112b2565b611165565b6000806104b48484610691565b6001600160a01b03851660009081526005602052604081205491925090156104f4576001600160a01b0385166000908152600560205260409020546104f8565b6002545b90506000670de0b6b3a764000061050f8385611341565b6105199190611358565b6001600160a01b0387166000908152600460205260408120549192509015610559576001600160a01b03871660009081526004602052604090205461055d565b6003545b90506000670de0b6b3a76400006105748387611341565b61057e9190611358565b90508061058b848761137a565b610595919061137a565b955050505050505b92915050565b6000806105b08484610cb2565b6001600160a01b03851660009081526005602052604081205491925090156105f0576001600160a01b0385166000908152600560205260409020546105f4565b6002545b90506000670de0b6b3a764000061060b8385611341565b6106159190611358565b6001600160a01b0387166000908152600460205260408120549192509015610655576001600160a01b038716600090815260046020526040902054610659565b6003545b90506000670de0b6b3a76400006106708387611341565b61067a9190611358565b905080610687848761138d565b610595919061138d565b6001600160a01b0382166000908152600860205260408120548190156106cf576001600160a01b0384166000908152600860205260409020546106d2565b60015b90506106de8184610730565b949350505050565b6006548111156107115760405162461bcd60e51b8152600401610708906113a0565b60405180910390fd5b33600090815260046020526040902055565b61072b61118f565b600355565b600080831561078b57600661074660018661138d565b610751906002611341565b61075c90600161137a565b8561076860018261138d565b6107729190611341565b61077c9190611341565b6107869190611358565b61078e565b60005b90506000841580156107a05750836001145b610815576006846107b260018861138d565b6107bc919061137a565b6107c7906002611341565b6107d290600161137a565b6107dc868861137a565b866107e860018a61138d565b6107f2919061137a565b6107fc9190611341565b6108069190611341565b6108109190611358565b610818565b60005b9050613e80610827838361138d565b61083990670de0b6b3a7640000611341565b6108439190611358565b95945050505050565b3360009081526008602052604090205480156108aa5760405162461bcd60e51b815260206004820152601b60248201527f466972737420736861726520616c726561647920636c61696d656400000000006044820152606401610708565b50336000818152600760209081526040808320825280832060019081905560089092528083208290555190927f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c39261090e92829186918291908190819084906113f6565b60405180910390a150565b6001600160a01b0382166000908152600860205260408120549081900361096d57506001600160a01b0382166000908152600760209081526040808320825280832060019081905560089092529091208190555b60006109798484610691565b6001600160a01b03851660009081526005602052604081205491925090156109b9576001600160a01b0385166000908152600560205260409020546109bd565b6002545b90506000670de0b6b3a76400006109d48385611341565b6109de9190611358565b6001600160a01b0387166000908152600460205260408120549192509015610a1e576001600160a01b038716600090815260046020526040902054610a22565b6003545b90506000670de0b6b3a7640000610a398387611341565b610a439190611358565b905080610a50848761137a565b610a5a919061137a565b341015610aa05760405162461bcd60e51b8152602060048201526014602482015273125b9cdd59999a58da595b9d081c185e5b595b9d60621b6044820152606401610708565b6001600160a01b038816600090815260076020908152604080832033845290915281208054899290610ad390849061137a565b90915550506001600160a01b03881660009081526008602052604081208054899290610b0090849061137a565b909155507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c39050338960018a898887610b39848f61137a565b604051610b4d9897969594939291906113f6565b60405180910390a16001546040516000916001600160a01b03169085908381818185875af1925050503d8060008114610ba2576040519150601f19603f3d011682016040523d82523d6000602084013e610ba7565b606091505b505090506000896001600160a01b03168360405160006040518083038185875af1925050503d8060008114610bf8576040519150601f19603f3d011682016040523d82523d6000602084013e610bfd565b606091505b50509050818015610c0b5750805b610c4e5760405162461bcd60e51b8152602060048201526014602482015273556e61626c6520746f2073656e642066756e647360601b6044820152606401610708565b50505050505050505050565b610c6261118f565b610c6c60006111e9565b565b610c7661118f565b600654821115610c985760405162461bcd60e51b8152600401610708906113a0565b6001600160a01b0316600090815260056020526040902055565b6001600160a01b038216600090815260086020526040812054610ce090610cda90849061138d565b83610730565b9392505050565b610cef61118f565b600255565b6001600160a01b038216600090815260086020526040902054818111610d5c5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f742073656c6c20746865206c6173742073686172650000000000006044820152606401610708565b6000610d71610d6b848461138d565b84610730565b6001600160a01b0385166000908152600560205260408120549192509015610db1576001600160a01b038516600090815260056020526040902054610db5565b6002545b90506000670de0b6b3a7640000610dcc8385611341565b610dd69190611358565b6001600160a01b0387166000908152600460205260408120549192509015610e16576001600160a01b038716600090815260046020526040902054610e1a565b6003545b90506000670de0b6b3a7640000610e318387611341565b610e3b9190611358565b6001600160a01b0389166000908152600760209081526040808320338452909152902054909150871115610ea75760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742073686172657360681b6044820152606401610708565b6001600160a01b0388166000908152600760209081526040808320338452909152902054610ed690889061138d565b6001600160a01b0389166000908152600760209081526040808320338452909152902055610f04878761138d565b6001600160a01b0389166000908152600860205260408120919091557f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c39033908a908a898887610f54848f61138d565b604051610f689897969594939291906113f6565b60405180910390a160003382610f7e868961138d565b610f88919061138d565b604051600081818185875af1925050503d8060008114610fc4576040519150601f19603f3d011682016040523d82523d6000602084013e610fc9565b606091505b50506001546040519192506000916001600160a01b039091169086908381818185875af1925050503d806000811461101d576040519150601f19603f3d011682016040523d82523d6000602084013e611022565b606091505b5050905060008a6001600160a01b03168460405160006040518083038185875af1925050503d8060008114611073576040519150601f19603f3d011682016040523d82523d6000602084013e611078565b606091505b505090508280156110865750815b801561108f5750805b6110d25760405162461bcd60e51b8152602060048201526014602482015273556e61626c6520746f2073656e642066756e647360601b6044820152606401610708565b5050505050505050505050565b6110e761118f565b6001600160a01b03811661114c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610708565b611155816111e9565b50565b61116061118f565b600655565b61116d61118f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c6c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610708565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461125057600080fd5b919050565b6000806040838503121561126857600080fd5b61127183611239565b915061127f60208401611239565b90509250929050565b6000806040838503121561129b57600080fd5b6112a483611239565b946020939093013593505050565b6000602082840312156112c457600080fd5b610ce082611239565b6000602082840312156112df57600080fd5b5035919050565b600080604083850312156112f957600080fd5b50508035926020909101359150565b6000806040838503121561131b57600080fd5b8235915061127f60208401611239565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761059d5761059d61132b565b60008261137557634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561059d5761059d61132b565b8181038181111561059d5761059d61132b565b60208082526036908201527f4665652070657263656e742063616e6e6f742062652067726561746572207468604082015275185b881d1a19481b585e1a5b5d5b48185b1b1bddd95960521b606082015260800190565b6001600160a01b03988916815296909716602087015293151560408601526060850192909252608084015260a083015260c082015260e0810191909152610100019056fea2646970667358221220f130a5b7c2b8e2a5f60b503bc9d9fc6e0b7c35adcfcb68107ea01b535a8188a064736f6c63430008110033

Deployed Bytecode Sourcemap

3749:6987:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4367:68;;;;;;;;;;-1:-1:-1;4367:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;603:25:1;;;591:2;576:18;4367:68:0;;;;;;;;5716:635;;;;;;;;;;-1:-1:-1;5716:635:0;;;;;:::i;:::-;;:::i;6359:636::-;;;;;;;;;;-1:-1:-1;6359:636:0;;;;;:::i;:::-;;:::i;3896:52::-;;;;;;;;;;;;;;;;3955:59;;;;;;;;;;-1:-1:-1;3955:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;5289:244;;;;;;;;;;-1:-1:-1;5289:244:0;;;;;:::i;:::-;;:::i;3792:37::-;;;;;;;;;;-1:-1:-1;3792:37:0;;;;-1:-1:-1;;;;;3792:37:0;;;;;;-1:-1:-1;;;;;1253:32:1;;;1235:51;;1223:2;1208:18;3792:37:0;1089:203:1;9750:236:0;;;;;;;;;;-1:-1:-1;9750:236:0;;;;;:::i;:::-;;:::i;:::-;;4796:118;;;;;;;;;;-1:-1:-1;4796:118:0;;;;;:::i;:::-;;:::i;4922:359::-;;;;;;;;;;-1:-1:-1;4922:359:0;;;;;:::i;:::-;;:::i;10413:314::-;;;;;;;;;;;;;:::i;7004:1363::-;;;;;;:::i;:::-;;:::i;2806:103::-;;;;;;;;;;;;;:::i;4021:60::-;;;;;;;;;;-1:-1:-1;4021:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;9994:277;;;;;;;;;;-1:-1:-1;9994:277:0;;;;;:::i;:::-;;:::i;2158:87::-;;;;;;;;;;-1:-1:-1;2204:7:0;2231:6;-1:-1:-1;;;;;2231:6:0;2158:87;;5541:167;;;;;;;;;;-1:-1:-1;5541:167:0;;;;;:::i;:::-;;:::i;4668:120::-;;;;;;;;;;-1:-1:-1;4668:120:0;;;;;:::i;:::-;;:::i;8377:1365::-;;;;;;:::i;:::-;;:::i;3836:53::-;;;;;;;;;;;;;;;;4088:49;;;;;;;;;;;;;;;;3064:201;;;;;;;;;;-1:-1:-1;3064:201:0;;;;;:::i;:::-;;:::i;10279:122::-;;;;;;;;;;-1:-1:-1;10279:122:0;;;;;:::i;:::-;;:::i;4476:47::-;;;;;;;;;;-1:-1:-1;4476:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;4532:128;;;;;;;;;;-1:-1:-1;4532:128:0;;;;;:::i;:::-;;:::i;5716:635::-;5805:7;5825:13;5841:34;5853:13;5868:6;5841:11;:34::i;:::-;-1:-1:-1;;;;;5912:40:0;;5886:23;5912:40;;;:25;:40;;;;;;5825:50;;-1:-1:-1;5886:23:0;5912:45;:109;;-1:-1:-1;;;;;5981:40:0;;;;;;:25;:40;;;;;;5912:109;;;5960:18;;5912:109;5886:135;-1:-1:-1;6032:19:0;6080:7;6054:23;5886:135;6054:5;:23;:::i;:::-;:33;;;;:::i;:::-;-1:-1:-1;;;;;6123:39:0;;6098:22;6123:39;;;:24;:39;;;;;;6032:55;;-1:-1:-1;6098:22:0;6123:44;:106;;-1:-1:-1;;;;;6190:39:0;;;;;;:24;:39;;;;;;6123:106;;;6170:17;;6123:106;6098:131;-1:-1:-1;6240:18:0;6286:7;6261:22;6098:131;6261:5;:22;:::i;:::-;:32;;;;:::i;:::-;6240:53;-1:-1:-1;6240:53:0;6311:19;6319:11;6311:5;:19;:::i;:::-;:32;;;;:::i;:::-;6304:39;;;;;;;5716:635;;;;;:::o;6359:636::-;6449:7;6469:13;6485:35;6498:13;6513:6;6485:12;:35::i;:::-;-1:-1:-1;;;;;6557:40:0;;6531:23;6557:40;;;:25;:40;;;;;;6469:51;;-1:-1:-1;6531:23:0;6557:45;:109;;-1:-1:-1;;;;;6626:40:0;;;;;;:25;:40;;;;;;6557:109;;;6605:18;;6557:109;6531:135;-1:-1:-1;6677:19:0;6725:7;6699:23;6531:135;6699:5;:23;:::i;:::-;:33;;;;:::i;:::-;-1:-1:-1;;;;;6768:39:0;;6743:22;6768:39;;;:24;:39;;;;;;6677:55;;-1:-1:-1;6743:22:0;6768:44;:106;;-1:-1:-1;;;;;6835:39:0;;;;;;:24;:39;;;;;;6768:106;;;6815:17;;6768:106;6743:131;-1:-1:-1;6885:18:0;6931:7;6906:22;6743:131;6906:5;:22;:::i;:::-;:32;;;;:::i;:::-;6885:53;-1:-1:-1;6885:53:0;6955:19;6963:11;6955:5;:19;:::i;:::-;:32;;;;:::i;5289:244::-;-1:-1:-1;;;;;5412:27:0;;5370:7;5412:27;;;:12;:27;;;;;;5370:7;;5412:32;5411:68;;-1:-1:-1;;;;;5452:27:0;;;;;;:12;:27;;;;;;5411:68;;;5448:1;5411:68;5386:93;;5493:32;5502:14;5518:6;5493:8;:32::i;:::-;5486:39;5289:244;-1:-1:-1;;;;5289:244:0:o;9750:236::-;9845:13;;9830:11;:28;;9822:95;;;;-1:-1:-1;;;9822:95:0;;;;;;;:::i;:::-;;;;;;;;;9953:10;9928:36;;;;:24;:36;;;;;:50;9750:236::o;4796:118::-;2044:13;:11;:13::i;:::-;4875:17:::1;:31:::0;4796:118::o;4922:359::-;4993:7;;5024:11;;:68;;5091:1;5072:10;5081:1;5072:6;:10;:::i;:::-;5067:16;;:1;:16;:::i;:::-;:20;;5086:1;5067:20;:::i;:::-;5057:6;5043:10;5052:1;5057:6;5043:10;:::i;:::-;5042:21;;;;:::i;:::-;:46;;;;:::i;:::-;:50;;;;:::i;:::-;5024:68;;;5038:1;5024:68;5009:83;-1:-1:-1;5099:12:0;5115:11;;:26;;;;;5130:6;5140:1;5130:11;5115:26;5114:114;;5227:1;5212:6;5199:10;5208:1;5199:6;:10;:::i;:::-;:19;;;;:::i;:::-;5194:25;;:1;:25;:::i;:::-;:29;;5222:1;5194:29;:::i;:::-;5174:15;5183:6;5174;:15;:::i;:::-;5163:6;5150:10;5159:1;5150:6;:10;:::i;:::-;:19;;;;:::i;:::-;5149:41;;;;:::i;:::-;:75;;;;:::i;:::-;:79;;;;:::i;:::-;5114:114;;;5145:1;5114:114;5099:129;-1:-1:-1;5268:5:0;5243:11;5250:4;5099:129;5243:11;:::i;:::-;5242:23;;5258:7;5242:23;:::i;:::-;:31;;;;:::i;:::-;5235:38;4922:359;-1:-1:-1;;;;;4922:359:0:o;10413:314::-;10479:10;10449:14;10466:24;;;:12;:24;;;;;;10505:11;;10497:51;;;;-1:-1:-1;;;10497:51:0;;3409:2:1;10497:51:0;;;3391:21:1;3448:2;3428:18;;;3421:30;3487:29;3467:18;;;3460:57;3534:18;;10497:51:0;3207:351:1;10497:51:0;-1:-1:-1;10569:10:0;10555:25;;;;:13;:25;;;;;;;;:37;;;;;10595:1;10555:41;;;;10603:12;:24;;;;;;:28;;;10664:55;10595:1;;10664:55;;;;10569:10;;10595:1;;;;10555:25;;;;;10595:1;;10664:55;:::i;:::-;;;;;;;;10442:285;10413:314::o;7004:1363::-;-1:-1:-1;;;;;7105:27:0;;7088:14;7105:27;;;:12;:27;;;;;;;7147:11;;;7143:211;;-1:-1:-1;;;;;;7230:28:0;;;;;;:13;:28;;;;;;;;:43;;;;;7276:1;7230:47;;;;7288:12;:27;;;;;;:31;;;7143:211;7364:13;7380:34;7392:13;7407:6;7380:11;:34::i;:::-;-1:-1:-1;;;;;7451:40:0;;7425:23;7451:40;;;:25;:40;;;;;;7364:50;;-1:-1:-1;7425:23:0;7451:45;:109;;-1:-1:-1;;;;;7520:40:0;;;;;;:25;:40;;;;;;7451:109;;;7499:18;;7451:109;7425:135;-1:-1:-1;7571:19:0;7619:7;7593:23;7425:135;7593:5;:23;:::i;:::-;:33;;;;:::i;:::-;-1:-1:-1;;;;;7662:39:0;;7637:22;7662:39;;;:24;:39;;;;;;7571:55;;-1:-1:-1;7637:22:0;7662:44;:106;;-1:-1:-1;;;;;7729:39:0;;;;;;:24;:39;;;;;;7662:106;;;7709:17;;7662:106;7637:131;-1:-1:-1;7779:18:0;7825:7;7800:22;7637:131;7800:5;:22;:::i;:::-;:32;;;;:::i;:::-;7779:53;-1:-1:-1;7779:53:0;7864:19;7872:11;7864:5;:19;:::i;:::-;:32;;;;:::i;:::-;7851:9;:45;;7843:78;;;;-1:-1:-1;;;7843:78:0;;4547:2:1;7843:78:0;;;4529:21:1;4586:2;4566:18;;;4559:30;-1:-1:-1;;;4605:18:1;;;4598:50;4665:18;;7843:78:0;4345:344:1;7843:78:0;-1:-1:-1;;;;;7932:28:0;;;;;;:13;:28;;;;;;;;7961:10;7932:40;;;;;;;:50;;7976:6;;7932:28;:50;;7976:6;;7932:50;:::i;:::-;;;;-1:-1:-1;;;;;;;7993:27:0;;;;;;:12;:27;;;;;:37;;8024:6;;7993:27;:37;;8024:6;;7993:37;:::i;:::-;;;;-1:-1:-1;8046:95:0;;-1:-1:-1;8052:10:0;8064:13;8079:4;8085:6;8093:5;8100:11;8113:10;8125:15;8085:6;8125;:15;:::i;:::-;8046:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;8172:22;;:51;;8153:13;;-1:-1:-1;;;;;8172:22:0;;8207:11;;8153:13;8172:51;8153:13;8172:51;8207:11;8172:22;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8152:71;;;8235:13;8254;-1:-1:-1;;;;;8254:18:0;8280:10;8254:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8234:61;;;8314:8;:20;;;;;8326:8;8314:20;8306:53;;;;-1:-1:-1;;;8306:53:0;;5856:2:1;8306:53:0;;;5838:21:1;5895:2;5875:18;;;5868:30;-1:-1:-1;;;5914:18:1;;;5907:50;5974:18;;8306:53:0;5654:344:1;8306:53:0;7077:1290;;;;;;;;7004:1363;;:::o;2806:103::-;2044:13;:11;:13::i;:::-;2871:30:::1;2898:1;2871:18;:30::i;:::-;2806:103::o:0;9994:277::-;2044:13;:11;:13::i;:::-;10126::::1;;10111:11;:28;;10103:95;;;;-1:-1:-1::0;;;10103:95:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10209:40:0::1;;::::0;;;:25:::1;:40;::::0;;;;:54;9994:277::o;5541:167::-;-1:-1:-1;;;;;5655:27:0;;5623:7;5655:27;;;:12;:27;;;;;;5646:54;;5655:36;;5685:6;;5655:36;:::i;:::-;5693:6;5646:8;:54::i;:::-;5639:61;5541:167;-1:-1:-1;;;5541:167:0:o;4668:120::-;2044:13;:11;:13::i;:::-;4748:18:::1;:32:::0;4668:120::o;8377:1365::-;-1:-1:-1;;;;;8479:27:0;;8462:14;8479:27;;;:12;:27;;;;;;8525:15;;;8517:54;;;;-1:-1:-1;;;8517:54:0;;6205:2:1;8517:54:0;;;6187:21:1;6244:2;6224:18;;;6217:30;6283:28;6263:18;;;6256:56;6329:18;;8517:54:0;6003:350:1;8517:54:0;8582:13;8598:33;8607:15;8616:6;8607;:15;:::i;:::-;8624:6;8598:8;:33::i;:::-;-1:-1:-1;;;;;8668:40:0;;8642:23;8668:40;;;:25;:40;;;;;;8582:49;;-1:-1:-1;8642:23:0;8668:45;:109;;-1:-1:-1;;;;;8737:40:0;;;;;;:25;:40;;;;;;8668:109;;;8716:18;;8668:109;8642:135;-1:-1:-1;8788:19:0;8836:7;8810:23;8642:135;8810:5;:23;:::i;:::-;:33;;;;:::i;:::-;-1:-1:-1;;;;;8879:39:0;;8854:22;8879:39;;;:24;:39;;;;;;8788:55;;-1:-1:-1;8854:22:0;8879:44;:106;;-1:-1:-1;;;;;8946:39:0;;;;;;:24;:39;;;;;;8879:106;;;8926:17;;8879:106;8854:131;-1:-1:-1;8996:18:0;9042:7;9017:22;8854:131;9017:5;:22;:::i;:::-;:32;;;;:::i;:::-;-1:-1:-1;;;;;9068:28:0;;;;;;:13;:28;;;;;;;;9097:10;9068:40;;;;;;;;8996:53;;-1:-1:-1;9068:50:0;-1:-1:-1;9068:50:0;9060:82;;;;-1:-1:-1;;;9060:82:0;;6560:2:1;9060:82:0;;;6542:21:1;6599:2;6579:18;;;6572:30;-1:-1:-1;;;6618:18:1;;;6611:49;6677:18;;9060:82:0;6358:343:1;9060:82:0;-1:-1:-1;;;;;9196:28:0;;;;;;:13;:28;;;;;;;;9225:10;9196:40;;;;;;;;:49;;9239:6;;9196:49;:::i;:::-;-1:-1:-1;;;;;9153:28:0;;;;;;:13;:28;;;;;;;;9182:10;9153:40;;;;;;;:92;9286:15;9295:6;9286;:15;:::i;:::-;-1:-1:-1;;;;;9256:27:0;;;;;;:12;:27;;;;;:45;;;;9317:96;;9323:10;;9269:13;;9357:6;9365:5;9372:11;9385:10;9397:15;9357:6;9397;:15;:::i;:::-;9317:96;;;;;;;;;;;;;:::i;:::-;;;;;;;;9425:13;9444:10;9489;9467:19;9475:11;9467:5;:19;:::i;:::-;:32;;;;:::i;:::-;9444:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9535:22:0;;:51;;9424:80;;-1:-1:-1;9516:13:0;;-1:-1:-1;;;;;9535:22:0;;;;9570:11;;9516:13;9535:51;9516:13;9535:51;9570:11;9535:22;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9515:71;;;9598:13;9617;-1:-1:-1;;;;;9617:18:0;9643:10;9617:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9597:61;;;9677:8;:20;;;;;9689:8;9677:20;:32;;;;;9701:8;9677:32;9669:65;;;;-1:-1:-1;;;9669:65:0;;5856:2:1;9669:65:0;;;5838:21:1;5895:2;5875:18;;;5868:30;-1:-1:-1;;;5914:18:1;;;5907:50;5974:18;;9669:65:0;5654:344:1;9669:65:0;8451:1291;;;;;;;;;8377:1365;;:::o;3064:201::-;2044:13;:11;:13::i;:::-;-1:-1:-1;;;;;3153:22:0;::::1;3145:73;;;::::0;-1:-1:-1;;;3145:73:0;;6908:2:1;3145:73:0::1;::::0;::::1;6890:21:1::0;6947:2;6927:18;;;6920:30;6986:34;6966:18;;;6959:62;-1:-1:-1;;;7037:18:1;;;7030:36;7083:19;;3145:73:0::1;6706:402:1::0;3145:73:0::1;3229:28;3248:8;3229:18;:28::i;:::-;3064:201:::0;:::o;10279:122::-;2044:13;:11;:13::i;:::-;10360::::1;:33:::0;10279:122::o;4532:128::-;2044:13;:11;:13::i;:::-;4612:22:::1;:40:::0;;-1:-1:-1;;;;;;4612:40:0::1;-1:-1:-1::0;;;;;4612:40:0;;;::::1;::::0;;;::::1;::::0;;4532:128::o;2323:132::-;2204:7;2231:6;-1:-1:-1;;;;;2231:6:0;810:10;2387:23;2379:68;;;;-1:-1:-1;;;2379:68:0;;7315:2:1;2379:68:0;;;7297:21:1;;;7334:18;;;7327:30;7393:34;7373:18;;;7366:62;7445:18;;2379:68:0;7113:356:1;3425:191:0;3499:16;3518:6;;-1:-1:-1;;;;;3535:17:0;;;-1:-1:-1;;;;;;3535:17:0;;;;;;3568:40;;3518:6;;;;;;;3568:40;;3499:16;3568:40;3488:128;3425:191;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:260::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;;408:38;442:2;431:9;427:18;408:38;:::i;:::-;398:48;;192:260;;;;;:::o;639:254::-;707:6;715;768:2;756:9;747:7;743:23;739:32;736:52;;;784:1;781;774:12;736:52;807:29;826:9;807:29;:::i;:::-;797:39;883:2;868:18;;;;855:32;;-1:-1:-1;;;639:254:1:o;898:186::-;957:6;1010:2;998:9;989:7;985:23;981:32;978:52;;;1026:1;1023;1016:12;978:52;1049:29;1068:9;1049:29;:::i;1297:180::-;1356:6;1409:2;1397:9;1388:7;1384:23;1380:32;1377:52;;;1425:1;1422;1415:12;1377:52;-1:-1:-1;1448:23:1;;1297:180;-1:-1:-1;1297:180:1:o;1482:248::-;1550:6;1558;1611:2;1599:9;1590:7;1586:23;1582:32;1579:52;;;1627:1;1624;1617:12;1579:52;-1:-1:-1;;1650:23:1;;;1720:2;1705:18;;;1692:32;;-1:-1:-1;1482:248:1:o;1735:254::-;1803:6;1811;1864:2;1852:9;1843:7;1839:23;1835:32;1832:52;;;1880:1;1877;1870:12;1832:52;1916:9;1903:23;1893:33;;1945:38;1979:2;1968:9;1964:18;1945:38;:::i;1994:127::-;2055:10;2050:3;2046:20;2043:1;2036:31;2086:4;2083:1;2076:15;2110:4;2107:1;2100:15;2126:168;2199:9;;;2230;;2247:15;;;2241:22;;2227:37;2217:71;;2268:18;;:::i;2299:217::-;2339:1;2365;2355:132;;2409:10;2404:3;2400:20;2397:1;2390:31;2444:4;2441:1;2434:15;2472:4;2469:1;2462:15;2355:132;-1:-1:-1;2501:9:1;;2299:217::o;2521:125::-;2586:9;;;2607:10;;;2604:36;;;2620:18;;:::i;2651:128::-;2718:9;;;2739:11;;;2736:37;;;2753:18;;:::i;2784:418::-;2986:2;2968:21;;;3025:2;3005:18;;;2998:30;3064:34;3059:2;3044:18;;3037:62;-1:-1:-1;;;3130:2:1;3115:18;;3108:52;3192:3;3177:19;;2784:418::o;3563:777::-;-1:-1:-1;;;;;3988:15:1;;;3970:34;;4040:15;;;;4035:2;4020:18;;4013:43;4099:14;;4092:22;4087:2;4072:18;;4065:50;4146:2;4131:18;;4124:34;;;;4189:3;4174:19;;4167:35;3950:3;4218:19;;4211:35;4277:3;4262:19;;4255:35;4321:3;4306:19;;4299:35;;;;3919:3;3904:19;;3563:777::o

Swarm Source

ipfs://f130a5b7c2b8e2a5f60b503bc9d9fc6e0b7c35adcfcb68107ea01b535a8188a0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.