ETH Price: $2,069.68 (+0.32%)

Contract

0x6F3F365DbFC800fC0DdCA2Ce12ee665a01Be6bfD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Exit139197622022-01-01 13:17:481531 days ago1641043068IN
0x6F3F365D...a01Be6bfD
0 ETH0.004104953.35204105
Exit136844942021-11-25 16:20:021567 days ago1637857202IN
0x6F3F365D...a01Be6bfD
0 ETH0.01593572179.59994926
Exit128857682021-07-24 0:26:491692 days ago1627086409IN
0x6F3F365D...a01Be6bfD
0 ETH0.0021225232
Exit128786072021-07-22 21:31:271693 days ago1626989487IN
0x6F3F365D...a01Be6bfD
0 ETH0.0052214685
Withdraw127388842021-07-01 1:29:501715 days ago1625102990IN
0x6F3F365D...a01Be6bfD
0 ETH0.0018402424
Sell127388742021-07-01 1:26:401715 days ago1625102800IN
0x6F3F365D...a01Be6bfD
0 ETH0.001279523.95800013
Withdraw127322732021-06-30 0:54:211716 days ago1625014461IN
0x6F3F365D...a01Be6bfD
0 ETH0.0011808215.4
Exit126985942021-06-24 19:04:501721 days ago1624561490IN
0x6F3F365D...a01Be6bfD
0 ETH0.0024571640
Exit126982022021-06-24 17:40:131721 days ago1624556413IN
0x6F3F365D...a01Be6bfD
0 ETH0.0012285820
Withdraw125335782021-05-30 4:27:041747 days ago1622348824IN
0x6F3F365D...a01Be6bfD
0 ETH0.0010723818
Sell125335552021-05-30 4:23:281747 days ago1622348608IN
0x6F3F365D...a01Be6bfD
0 ETH0.0004332418
Sell125335552021-05-30 4:23:281747 days ago1622348608IN
0x6F3F365D...a01Be6bfD
0 ETH0.0009615218
Exit108923102020-09-19 11:07:342000 days ago1600513654IN
0x6F3F365D...a01Be6bfD
0 ETH0.0071037195.7
Exit108819462020-09-17 20:38:522001 days ago1600375132IN
0x6F3F365D...a01Be6bfD
0 ETH0.0371145500
Exit106989792020-08-20 19:24:082029 days ago1597951448IN
0x6F3F365D...a01Be6bfD
0 ETH0.0063094685
Withdraw106989712020-08-20 19:22:502029 days ago1597951370IN
0x6F3F365D...a01Be6bfD
0 ETH0.0067031693
Withdraw105099072020-07-22 15:06:012058 days ago1595430361IN
0x6F3F365D...a01Be6bfD
0 ETH0.0037021680
Withdraw104747002020-07-17 4:11:232064 days ago1594959083IN
0x6F3F365D...a01Be6bfD
0 ETH0.0006278411
Withdraw104681772020-07-16 3:42:302065 days ago1594870950IN
0x6F3F365D...a01Be6bfD
0 ETH0.0013597234
Withdraw104656552020-07-15 18:19:262065 days ago1594837166IN
0x6F3F365D...a01Be6bfD
0 ETH0.0025684645
Sell104656492020-07-15 18:18:092065 days ago1594837089IN
0x6F3F365D...a01Be6bfD
0 ETH0.002095950
Withdraw104609702020-07-15 0:50:552066 days ago1594774255IN
0x6F3F365D...a01Be6bfD
0 ETH0.0005987524
Withdraw104609692020-07-15 0:50:372066 days ago1594774237IN
0x6F3F365D...a01Be6bfD
0 ETH0.0012556922
Sell104609522020-07-15 0:46:012066 days ago1594773961IN
0x6F3F365D...a01Be6bfD
0 ETH0.0009641123
Withdraw104609412020-07-15 0:42:592066 days ago1594773779IN
0x6F3F365D...a01Be6bfD
0 ETH0.0013127723
View all transactions

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

Compiler Version
v0.5.15+commit.6a57276f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-06-05
*/

pragma solidity ^0.5.15;


interface ERC20 {
    function totalSupply() external view returns (uint256 supply);

    function balanceOf(address _owner) external view returns (uint256 balance);

    function transfer(address _to, uint256 _value)
        external
        returns (bool success);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) external returns (bool success);

    function approve(address _spender, uint256 _value)
        external
        returns (bool success);

    function allowance(address _owner, address _spender)
        external
        view
        returns (uint256 remaining);

    function decimals() external view returns (uint256 digits);

    event Approval(
        address indexed _owner,
        address indexed _spender,
        uint256 _value
    );
}


contract HexDex {
    /*=================================
  =            MODIFIERS            =
  =================================*/
    // only people with tokens
    modifier onlyBagholders() {
        require(myTokens() > 0);
        _;
    }

    // only people with profits
    modifier onlyStronghands() {
        require(myDividends(true) > 0);
        _;
    }

    modifier onlyAdmin() {
        require(msg.sender == administrator);
        _;
    }

    /*==============================
  =            EVENTS            =
  ==============================*/
    event onTokenPurchase(
        address indexed customerAddress,
        bytes32 customerName,
        uint256 incomingEthereum,
        uint256 tokensMinted,
        address indexed referredBy,
        bool isReinvest
    );

    event onTokenSell(
        address indexed customerAddress,
        bytes32 customerName,
        uint256 tokensBurned,
        uint256 ethereumEarned
    );

    event onWithdraw(
        address indexed customerAddress,
        bytes32 customerName,
        uint256 ethereumWithdrawn
    );

    // ERC20
    event Transfer(address indexed from, address indexed to, uint256 tokens);

    /*=====================================
  =            CONFIGURABLES            =
  =====================================*/
    string public name = "HexDex";
    string public symbol = "H3D";
    uint8 public constant decimals = 8;
    uint8 internal constant dividendFee_ = 10; // 10%
    uint256 internal constant HEX_CENT = 1e6;
    uint256 internal constant HEX = 1e8;
    uint256 internal constant tokenPriceInitial_ = 1 * HEX;
    uint256 internal constant tokenPriceIncremental_ = 10 * HEX_CENT;
    uint256 internal constant magnitude = 2**64;
    address internal constant tokenAddress = address(
        0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39
    );

    uint256 internal cubeStartTime = now;

    // admin for premine lock
    address internal administrator;

    // ambassadors
    uint256 ambassadorLimit = HEX * 20000; // 20k hex per ambassador
    uint256 devLimit = HEX * 100000;
    mapping(address => bool) public ambassadors; // who the ambassadors are
    mapping(address => bool) public dev;

    address[33] ambassadorList = [
        0xc951D3463EbBa4e9Ec8dDfe1f42bc5895C46eC8f,
        0xe8f49490d2b172870b3B225e9fcD39b5D68b2e9E,
        0x5161e1380cd661D7d993c8a3b3E57b059Ad8d7A4,
        0x4Ca9046dcd4C8712450250208D7eD6fCEbAf75a5,
        0xC697BE0b5b82284391A878B226e2f9AfC6B94710,
        0x5cB87df0834cd82297C63eF075421401995914ae,
        0x53F403421110BA93086BCFB40e80C7346035aDF6,
        0x11ba6C4732B1a7f30deA51C23b8ED4c1F88dCD57,
        0xb7032661C1DA18A52830A5e97bdE5569ed3c2A5F,
        0x73c371F85246797e4f7f68F7F46b9261EBa2F853,
        0xffc1eD0C150890c163D940146565df6064588d3e,
        0x5DD516f5dC0E68C5A37D20284Dabd754e35AfF1c,
        0x554fdECe1B1319075d7Bf2F5137076C21A202249,
        0xcF7b442C41795e874b223D4ADeED8cda87A23d00,
        0x87cb806192eC699398511c7aB44b3595C051D13C,
        0x1c2c72269ce1aD29933F090547b4102a9c398f34,
        0x9b411116f92504562EDCf3a1b14Ae226Bc1489Fc,
        0x2E7E5DE7D87A29B16284092B19891c80B0F43eCa,
        0xada8694dd1B511E72F467e7242E7123088aED064,
        0x5269BF8720946b5c38FBf361a947bA9D30C91313,
        0x21e0111e60D5449BdBa67ee6c014B5384644a714,
        0xB96d8107D613b6b593b4531Fc353B282af7fbeF5,
        0x71A4b5895A077806E8cd9F85a5253A9DEbd593fD,
        0x73018870D10173ae6F71Cac3047ED3b6d175F274,
        0x8E2Efa9eD16f07d9B153D295d35025FD677BaE99,
        0x112b3496AAD76CD34a29C335266A968D65fBa10a,
        0x9D7a76fD386eDEB3A871c3A096Ca875aDc1a55b7,
        0x05227e4FA98a6415ef1927E902dc781AA7eD518a,
        0x18600fE707D883c1FD16f002A09241D630270233,
        0x8ec43a855007c61Ce75406DB8b2079207F7d597a,
        0x09a054B60bd3B908791B55eEE81b515B93831E99,
        0x982D72A38A2CB0ed8F2fae5B22C122f1C9c89a13,
        0xa683C1b815997a7Fa38f6178c84675FC4c79AC2B
    ];

    address[10] devList = [
        0x818F1B08E38376E9635C5bE156B8786317e833b3,
        0xa765a22C97c38c8Ce50FEA453cE92723C7637AA2,
        0xEe54D208f62368B4efFe176CB548A317dcAe963F,
        0x43678bB266e75F50Fbe5927128Ab51930b447eaB,
        0x5138240E96360ad64010C27eB0c685A8b2eDE4F2,
        0x39E00115d71313fD5983DE3Cf2b5820dd3Cc4447,
        0xcFAa3449DFfB82Bf5B37e42FbCf43170c6C8e4AD,
        0x90D20d17Cc9e07020bB490c5e34f486286d3Eeb2,
        0x074F21a36217d7615d0202faA926aEFEBB5a9999,
        0xAA7A7C2DECB180f68F11E975e6D92B5Dc06083A6
    ];

    uint256 numAmbassadorsDeposited;

    function depositPremine() public {
        require(ambassadors[msg.sender]); // require them to be an ambassador
        ambassadors[msg.sender] = false; // make them not an ambassador after this transaction! so they can't buy in twice
        ERC20 Hex = ERC20(tokenAddress);

        // you must deposit EXACTLY 20k
        Hex.transferFrom(msg.sender, address(this), ambassadorLimit);
        numAmbassadorsDeposited++;
    }

    uint256 numDevDeposited;

    function depositDevPremine() public {
        require(dev[msg.sender]);
        dev[msg.sender] = false;
        ERC20 Hex = ERC20(tokenAddress);

        Hex.transferFrom(msg.sender, address(this), devLimit);
        numDevDeposited++;
    }

    function executePremineBuy() public onlyAdmin() {
        require(now < cubeStartTime);
        ERC20 Hex = ERC20(tokenAddress);

        // first buy in with 1 hex so that we don't black hole a bunch of stuff
        Hex.transferFrom(msg.sender, address(this), 1 * HEX);
        purchaseTokens(1 * HEX, address(0x0), false);

        // then buy in the full amount with the amount of hex in the contract minus 1
        purchaseTokens(
            Hex.balanceOf(address(this)) - (1 * HEX),
            address(0x0),
            false
        );

        // now that we have a bunch of tokens, transfer them out to each ambassador fairly!
        uint256 premineTokenShare = tokenSupply_ /
            (numAmbassadorsDeposited + (numDevDeposited * 5));

        for (uint256 i = 0; i < 33; i++) {
            // if this call returns false, it means the person is NO LONGER an ambassador - which means they HAVE deposited
            // which means we SHOULD give them their token share!
            if (ambassadors[ambassadorList[i]] == false) {
                transfer(ambassadorList[i], premineTokenShare);
            }
        }

        for (uint256 j = 0; j < 10; j++) {
            // if this call returns false, it means the person is NO LONGER an ambassador - which means they HAVE deposited
            // which means we SHOULD give them their token share!
            if (dev[devList[j]] == false) {
                transfer(devList[j], premineTokenShare * 5);
            }
        }
    }

    function restart() public onlyAdmin() {
        require(now < cubeStartTime);
        // Only called if something goes wrong during premine
        ERC20 Hex = ERC20(tokenAddress);
        Hex.transfer(administrator, Hex.balanceOf(address(this)));
    }

    // username interface
    UsernameInterface private username;

    /*================================
  =            DATASETS            =
  ================================*/
    // amount of shares for each address (scaled number)
    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => uint256) internal referralBalance_;
    mapping(address => int256) internal payoutsTo_;
    mapping(address => bool) internal approvedDistributors;
    uint256 internal tokenSupply_ = 0;
    uint256 internal profitPerShare_;

    /*=======================================
  =            PUBLIC FUNCTIONS            =
  =======================================*/
    /*
     * -- APPLICATION ENTRY POINTS --
     */
    constructor(address usernameAddress, uint256 when_start) public {
        ambassadors[0xc951D3463EbBa4e9Ec8dDfe1f42bc5895C46eC8f] = true;
        ambassadors[0xe8f49490d2b172870b3B225e9fcD39b5D68b2e9E] = true;
        ambassadors[0x5161e1380cd661D7d993c8a3b3E57b059Ad8d7A4] = true;
        ambassadors[0x4Ca9046dcd4C8712450250208D7eD6fCEbAf75a5] = true;
        ambassadors[0xC697BE0b5b82284391A878B226e2f9AfC6B94710] = true;
        ambassadors[0x5cB87df0834cd82297C63eF075421401995914ae] = true;
        ambassadors[0x53F403421110BA93086BCFB40e80C7346035aDF6] = true;
        ambassadors[0x11ba6C4732B1a7f30deA51C23b8ED4c1F88dCD57] = true;
        ambassadors[0xb7032661C1DA18A52830A5e97bdE5569ed3c2A5F] = true;
        ambassadors[0x73c371F85246797e4f7f68F7F46b9261EBa2F853] = true;
        ambassadors[0xffc1eD0C150890c163D940146565df6064588d3e] = true;
        ambassadors[0x5DD516f5dC0E68C5A37D20284Dabd754e35AfF1c] = true;
        ambassadors[0x554fdECe1B1319075d7Bf2F5137076C21A202249] = true;
        ambassadors[0xcF7b442C41795e874b223D4ADeED8cda87A23d00] = true;
        ambassadors[0x87cb806192eC699398511c7aB44b3595C051D13C] = true;
        ambassadors[0x1c2c72269ce1aD29933F090547b4102a9c398f34] = true;
        ambassadors[0x9b411116f92504562EDCf3a1b14Ae226Bc1489Fc] = true;
        ambassadors[0x2E7E5DE7D87A29B16284092B19891c80B0F43eCa] = true;
        ambassadors[0xada8694dd1B511E72F467e7242E7123088aED064] = true;
        ambassadors[0x5269BF8720946b5c38FBf361a947bA9D30C91313] = true;
        ambassadors[0x21e0111e60D5449BdBa67ee6c014B5384644a714] = true;
        ambassadors[0xB96d8107D613b6b593b4531Fc353B282af7fbeF5] = true;
        ambassadors[0x71A4b5895A077806E8cd9F85a5253A9DEbd593fD] = true;
        ambassadors[0x73018870D10173ae6F71Cac3047ED3b6d175F274] = true;
        ambassadors[0x8E2Efa9eD16f07d9B153D295d35025FD677BaE99] = true;
        ambassadors[0x112b3496AAD76CD34a29C335266A968D65fBa10a] = true;
        ambassadors[0x9D7a76fD386eDEB3A871c3A096Ca875aDc1a55b7] = true;
        ambassadors[0x05227e4FA98a6415ef1927E902dc781AA7eD518a] = true;
        ambassadors[0x18600fE707D883c1FD16f002A09241D630270233] = true;
        ambassadors[0x8ec43a855007c61Ce75406DB8b2079207F7d597a] = true;
        ambassadors[0x09a054B60bd3B908791B55eEE81b515B93831E99] = true;
        ambassadors[0x982D72A38A2CB0ed8F2fae5B22C122f1C9c89a13] = true;
        ambassadors[0xa683C1b815997a7Fa38f6178c84675FC4c79AC2B] = true;

        dev[0x818F1B08E38376E9635C5bE156B8786317e833b3] = true;
        dev[0xa765a22C97c38c8Ce50FEA453cE92723C7637AA2] = true;
        dev[0xEe54D208f62368B4efFe176CB548A317dcAe963F] = true;
        dev[0x43678bB266e75F50Fbe5927128Ab51930b447eaB] = true;
        dev[0x5138240E96360ad64010C27eB0c685A8b2eDE4F2] = true;
        dev[0x39E00115d71313fD5983DE3Cf2b5820dd3Cc4447] = true;
        dev[0xcFAa3449DFfB82Bf5B37e42FbCf43170c6C8e4AD] = true;
        dev[0x90D20d17Cc9e07020bB490c5e34f486286d3Eeb2] = true;
        dev[0x074F21a36217d7615d0202faA926aEFEBB5a9999] = true;
        dev[0xAA7A7C2DECB180f68F11E975e6D92B5Dc06083A6] = true;

        username = UsernameInterface(usernameAddress);
        cubeStartTime = when_start;
        administrator = msg.sender;
    }

    function startTime() public view returns (uint256 _startTime) {
        _startTime = cubeStartTime;
    }

    function approveDistributor(address newDistributor) public onlyAdmin() {
        approvedDistributors[newDistributor] = true;
    }

    /**
     * Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
     */
    function buy(address _referredBy, uint256 amount) public returns (uint256) {
        ERC20 Hex = ERC20(tokenAddress);
        Hex.transferFrom(msg.sender, address(this), amount);
        purchaseTokens(amount, _referredBy, false);
    }

    /**
     * refuse to receive any tokens directly sent
     *
     */
    function() external payable {
        revert();
    }

    function distribute(uint256 amount) external payable {
        require(approvedDistributors[msg.sender] == true);
        ERC20 Hex = ERC20(tokenAddress);
        Hex.transferFrom(msg.sender, address(this), amount);
        profitPerShare_ = SafeMath.add(
            profitPerShare_,
            (amount * magnitude) / tokenSupply_
        );
    }

    /**
     * Converts all of caller's dividends to tokens.
     */
    function reinvest() public onlyStronghands() {
        // fetch dividends
        uint256 _dividends = myDividends(false); // retrieve ref. bonus later in the code

        // pay out the dividends virtually
        address _customerAddress = msg.sender;
        payoutsTo_[_customerAddress] += (int256)(_dividends * magnitude);

        // retrieve ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;

        // dispatch a buy order with the virtualized "withdrawn dividends"
        purchaseTokens(_dividends, address(0x0), true);
    }

    /**
     * Alias of sell() and withdraw().
     */
    function exit() public {
        // get token count for caller & sell them all
        address _customerAddress = msg.sender;
        uint256 _tokens = tokenBalanceLedger_[_customerAddress];
        if (_tokens > 0) sell(_tokens);

        withdraw();
    }

    /**
     * Withdraws all of the callers earnings.
     */
    function withdraw() public onlyStronghands() {
        // setup data
        address _customerAddress = msg.sender;
        uint256 _dividends = myDividends(false); // get ref. bonus later in the code

        // update dividend tracker
        payoutsTo_[_customerAddress] += (int256)(_dividends * magnitude);

        // add ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;

        // lambo delivery service
        ERC20 Hex = ERC20(tokenAddress);
        Hex.transfer(_customerAddress, _dividends);

        // fire event
        emit onWithdraw(
            _customerAddress,
            username.getNameByAddress(msg.sender),
            _dividends
        );
    }

    /**
     * Liquifies tokens to ethereum.
     */
    function sell(uint256 _amountOfTokens) public onlyBagholders() {
        // setup data
        address _customerAddress = msg.sender;
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);
        uint256 _dividends = SafeMath.div(_ethereum, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);

        // burn the sold tokens
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(
            tokenBalanceLedger_[_customerAddress],
            _tokens
        );

        // update dividends tracker
        int256 _updatedPayouts = (int256)(
            profitPerShare_ * _tokens + (_taxedEthereum * magnitude)
        );
        payoutsTo_[_customerAddress] -= _updatedPayouts;

        // dividing by zero is a bad idea
        if (tokenSupply_ > 0) {
            // update the amount of dividends per token
            profitPerShare_ = SafeMath.add(
                profitPerShare_,
                (_dividends * magnitude) / tokenSupply_
            );
        }

        // fire event
        emit onTokenSell(
            _customerAddress,
            username.getNameByAddress(msg.sender),
            _tokens,
            _taxedEthereum
        );
    }

    /**
     * To heck with the transfer fee
     * Who needs it
     */
    function transfer(address _toAddress, uint256 _amountOfTokens)
        public
        onlyBagholders()
        returns (bool)
    {
        // setup
        address _customerAddress = msg.sender;

        // make sure we have the requested tokens
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);

        // withdraw all outstanding dividends first
        if (myDividends(true) > 0) withdraw();

        // exchange tokens
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(
            tokenBalanceLedger_[_customerAddress],
            _amountOfTokens
        );
        tokenBalanceLedger_[_toAddress] = SafeMath.add(
            tokenBalanceLedger_[_toAddress],
            _amountOfTokens
        );

        // update dividend trackers
        payoutsTo_[_customerAddress] -= (int256)(
            profitPerShare_ * _amountOfTokens
        );
        payoutsTo_[_toAddress] += (int256)(profitPerShare_ * _amountOfTokens);

        // fire event
        emit Transfer(_customerAddress, _toAddress, _amountOfTokens);

        // ERC20
        return true;
    }

    /*----------  HELPERS AND CALCULATORS  ----------*/
    /**
     * Method to view the current Ethereum stored in the contract
     * Example: totalEthereumBalance()
     */
    function totalEthereumBalance() public view returns (uint256) {
        return address(this).balance;
    }

    /**
     * Retrieve the total token supply.
     */
    function totalSupply() public view returns (uint256) {
        return tokenSupply_;
    }

    /**
     * Retrieve the number of aambassadors deposited.
     */
    function numAmbassadorsDep() public view returns (uint256) {
        return numAmbassadorsDeposited;
    }

    /**
     * Retrieve the number of developers deposited.
     */
    function numDevDep() public view returns (uint256) {
        return numDevDeposited;
    }

    /**
     * Retrieve the tokens owned by the caller.
     */
    function myTokens() public view returns (uint256) {
        address _customerAddress = msg.sender;
        return balanceOf(_customerAddress);
    }

    /**
     * Retrieve the dividends owned by the caller.
     * If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations.
     * The reason for this, is that in the frontend, we will want to get the total divs (global + ref)
     * But in the internal calculations, we want them separate.
     */
    function myDividends(bool _includeReferralBonus)
        public
        view
        returns (uint256)
    {
        address _customerAddress = msg.sender;
        return
            _includeReferralBonus
                ? dividendsOf(_customerAddress) +
                    referralBalance_[_customerAddress]
                : dividendsOf(_customerAddress);
    }

    /**
     * Retrieve the token balance of any single address.
     */
    function balanceOf(address _customerAddress) public view returns (uint256) {
        return tokenBalanceLedger_[_customerAddress];
    }

    /**
     * Retrieve the dividend balance of any single address.
     */
    function dividendsOf(address _customerAddress)
        public
        view
        returns (uint256)
    {
        return
            (uint256)(
                (int256)(
                    profitPerShare_ * tokenBalanceLedger_[_customerAddress]
                ) - payoutsTo_[_customerAddress]
            ) / magnitude;
    }

    /**
     * Return the sell price of 1 individual token.
     */
    function sellPrice() public view returns (uint256) {
        // our calculation relies on the token supply, so we need supply.
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ - tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e8);
            uint256 _dividends = SafeMath.div(_ethereum, dividendFee_);
            uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
            return _taxedEthereum;
        }
    }

    /**
     * Return the buy price of 1 individual token.
     */
    function buyPrice() public view returns (uint256) {
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ + tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e8);
            uint256 _dividends = SafeMath.div(_ethereum, dividendFee_);
            uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends);
            return _taxedEthereum;
        }
    }

    /**
     * Function for the frontend to dynamically retrieve the price scaling of buy orders.
     */
    function calculateTokensReceived(uint256 _ethereumToSpend)
        public
        view
        returns (uint256)
    {
        uint256 _dividends = SafeMath.div(_ethereumToSpend, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);

        return _amountOfTokens;
    }

    /**
     * Function for the frontend to dynamically retrieve the price scaling of sell orders.
     */
    function calculateEthereumReceived(uint256 _tokensToSell)
        public
        view
        returns (uint256)
    {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ethereum = tokensToEthereum_(_tokensToSell);
        uint256 _dividends = SafeMath.div(_ethereum, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }

    /*==========================================
  =            INTERNAL FUNCTIONS            =
  ==========================================*/
    function purchaseTokens(
        uint256 _incomingEthereum,
        address _referredBy,
        bool isReinvest
    ) internal returns (uint256) {
        if (now < startTime()) {
            require(msg.sender == administrator);
        }

        // data setup
        uint256 _undividedDividends = SafeMath.div(
            _incomingEthereum,
            dividendFee_
        );
        uint256 _referralBonus = SafeMath.div(_undividedDividends, 3);
        uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus);
        uint256 _taxedEthereum = SafeMath.sub(
            _incomingEthereum,
            _undividedDividends
        );
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);
        uint256 _fee = _dividends * magnitude;

        require(
            _amountOfTokens > 0 &&
                (SafeMath.add(_amountOfTokens, tokenSupply_) > tokenSupply_)
        );

        // is the user referred by a masternode?
        if (
            // is this a referred purchase?
            _referredBy != 0x0000000000000000000000000000000000000000 &&
            // no cheating!
            _referredBy != msg.sender
        ) {
            // wealth redistribution
            referralBalance_[_referredBy] = SafeMath.add(
                referralBalance_[_referredBy],
                _referralBonus
            );
        } else {
            // no ref purchase
            // add the referral bonus back to the global dividends
            _dividends = SafeMath.add(_dividends, _referralBonus);
            _fee = _dividends * magnitude;
        }

        // we can't give people infinite ethereum
        if (tokenSupply_ > 0) {
            // add tokens to the pool
            tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens);

            // take the amount of dividends gained through this transaction, and allocates them evenly to each shareholder
            profitPerShare_ += ((_dividends * magnitude) / (tokenSupply_));

            // calculate the amount of tokens the customer receives over his purchase
            _fee =
                _fee -
                (_fee -
                    (_amountOfTokens *
                        ((_dividends * magnitude) / (tokenSupply_))));
        } else {
            // add tokens to the pool
            tokenSupply_ = _amountOfTokens;
        }

        // update circulating supply & the ledger address for the customer
        tokenBalanceLedger_[msg.sender] = SafeMath.add(
            tokenBalanceLedger_[msg.sender],
            _amountOfTokens
        );

        // Tells the contract that the buyer doesn't deserve dividends for the tokens before they owned them;
        //really i know you think you do but you don't
        int256 _updatedPayouts = (int256)(
            (profitPerShare_ * _amountOfTokens) - _fee
        );
        payoutsTo_[msg.sender] += _updatedPayouts;

        // fire event
        emit onTokenPurchase(
            msg.sender,
            username.getNameByAddress(msg.sender),
            _incomingEthereum,
            _amountOfTokens,
            _referredBy,
            isReinvest
        );

        return _amountOfTokens;
    }

    /**
     * Calculate Token price based on an amount of incoming ethereum
     * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function ethereumToTokens_(uint256 _ethereum)
        internal
        view
        returns (uint256)
    {
        uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e8;
        uint256 _tokensReceived = ((
            SafeMath.sub(
                (
                    sqrt(
                        (_tokenPriceInitial**2) +
                            (2 *
                                (tokenPriceIncremental_ * 1e8) *
                                (_ethereum * 1e8)) +
                            (((tokenPriceIncremental_)**2) *
                                (tokenSupply_**2)) +
                            (2 *
                                (tokenPriceIncremental_) *
                                _tokenPriceInitial *
                                tokenSupply_)
                    )
                ),
                _tokenPriceInitial
            )
        ) / (tokenPriceIncremental_)) - (tokenSupply_);

        return _tokensReceived;
    }

    /**
     * Calculate token sell value.
     * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function tokensToEthereum_(uint256 _tokens)
        internal
        view
        returns (uint256)
    {
        uint256 tokens_ = (_tokens + 1e8);
        uint256 _tokenSupply = (tokenSupply_ + 1e8);
        uint256 _etherReceived = (SafeMath.sub(
            (((tokenPriceInitial_ +
                (tokenPriceIncremental_ * (_tokenSupply / 1e8))) -
                tokenPriceIncremental_) * (tokens_ - 1e8)),
            (tokenPriceIncremental_ * ((tokens_**2 - tokens_) / 1e8)) / 2
        ) / 1e8);
        return _etherReceived;
    }

    //This is where all your gas goes apparently
    function sqrt(uint256 x) internal pure returns (uint256 y) {
        uint256 z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }
}


interface UsernameInterface {
    function getNameByAddress(address _addr) external view returns (bytes32);
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    /**
     * @dev Multiplies two numbers, throws on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b);
        return c;
    }

    /**
     * @dev Integer division of two numbers, truncating the quotient.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a / b;
        return c;
    }

    /**
     * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    /**
     * @dev Adds two numbers, throws on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);
        return c;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"usernameAddress","type":"address"},{"internalType":"uint256","name":"when_start","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"bytes32","name":"customerName","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"incomingEthereum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensMinted","type":"uint256"},{"indexed":true,"internalType":"address","name":"referredBy","type":"address"},{"indexed":false,"internalType":"bool","name":"isReinvest","type":"bool"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"bytes32","name":"customerName","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"tokensBurned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethereumEarned","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"bytes32","name":"customerName","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ambassadors","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newDistributor","type":"address"}],"name":"approveDistributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_referredBy","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"depositDevPremine","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"depositPremine","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dev","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distribute","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"executePremineBuy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bool","name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"myTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numAmbassadorsDep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numDevDep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"restart","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600681526020017f4865784465780000000000000000000000000000000000000000000000000000815250600090805190602001906200005192919062001fc1565b506040518060400160405280600381526020017f4833440000000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f92919062001fc1565b5042600255614e206305f5e10002600455620186a06305f5e1000260055560405180610420016040528073c951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173e8f49490d2b172870b3b225e9fcd39b5d68b2e9e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735161e1380cd661d7d993c8a3b3e57b059ad8d7a473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001734ca9046dcd4c8712450250208d7ed6fcebaf75a573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173c697be0b5b82284391a878b226e2f9afc6b9471073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735cb87df0834cd82297c63ef075421401995914ae73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017353f403421110ba93086bcfb40e80c7346035adf673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017311ba6c4732b1a7f30dea51c23b8ed4c1f88dcd5773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173b7032661c1da18a52830a5e97bde5569ed3c2a5f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017373c371f85246797e4f7f68f7f46b9261eba2f85373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173ffc1ed0c150890c163d940146565df6064588d3e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735dd516f5dc0e68c5a37d20284dabd754e35aff1c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173554fdece1b1319075d7bf2f5137076c21a20224973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173cf7b442c41795e874b223d4adeed8cda87a23d0073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017387cb806192ec699398511c7ab44b3595c051d13c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731c2c72269ce1ad29933f090547b4102a9c398f3473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001739b411116f92504562edcf3a1b14ae226bc1489fc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001732e7e5de7d87a29b16284092b19891c80b0f43eca73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173ada8694dd1b511e72f467e7242e7123088aed06473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735269bf8720946b5c38fbf361a947ba9d30c9131373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017321e0111e60d5449bdba67ee6c014b5384644a71473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173b96d8107d613b6b593b4531fc353b282af7fbef573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017371a4b5895a077806e8cd9f85a5253a9debd593fd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017373018870d10173ae6f71cac3047ed3b6d175f27473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738e2efa9ed16f07d9b153d295d35025fd677bae9973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173112b3496aad76cd34a29c335266a968d65fba10a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001739d7a76fd386edeb3a871c3a096ca875adc1a55b773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017305227e4fa98a6415ef1927e902dc781aa7ed518a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017318600fe707d883c1fd16f002a09241d63027023373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738ec43a855007c61ce75406db8b2079207f7d597a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017309a054b60bd3b908791b55eee81b515b93831e9973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173982d72a38a2cb0ed8f2fae5b22c122f1c9c89a1373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a683c1b815997a7fa38f6178c84675fc4c79ac2b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152506008906021620009df92919062002048565b5060405180610140016040528073818f1b08e38376e9635c5be156b8786317e833b373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a765a22c97c38c8ce50fea453ce92723c7637aa273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173ee54d208f62368b4effe176cb548a317dcae963f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017343678bb266e75f50fbe5927128ab51930b447eab73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735138240e96360ad64010c27eb0c685a8b2ede4f273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017339e00115d71313fd5983de3cf2b5820dd3cc444773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173cfaa3449dffb82bf5b37e42fbcf43170c6c8e4ad73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017390d20d17cc9e07020bb490c5e34f486286d3eeb273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173074f21a36217d7615d0202faa926aefebb5a999973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173aa7a7c2decb180f68f11e975e6d92b5dc06083a673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250602990600a62000cb8929190620020ca565b506000603a5534801562000ccb57600080fd5b5060405162004dd338038062004dd38339818101604052604081101562000cf157600080fd5b81019080805190602001909291908051906020019092919050505060016006600073c951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073e8f49490d2b172870b3b225e9fcd39b5d68b2e9e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000735161e1380cd661d7d993c8a3b3e57b059ad8d7a473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000734ca9046dcd4c8712450250208d7ed6fcebaf75a573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073c697be0b5b82284391a878b226e2f9afc6b9471073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000735cb87df0834cd82297c63ef075421401995914ae73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007353f403421110ba93086bcfb40e80c7346035adf673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007311ba6c4732b1a7f30dea51c23b8ed4c1f88dcd5773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073b7032661c1da18a52830a5e97bde5569ed3c2a5f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007373c371f85246797e4f7f68f7f46b9261eba2f85373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073ffc1ed0c150890c163d940146565df6064588d3e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000735dd516f5dc0e68c5a37d20284dabd754e35aff1c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073554fdece1b1319075d7bf2f5137076c21a20224973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073cf7b442c41795e874b223d4adeed8cda87a23d0073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007387cb806192ec699398511c7ab44b3595c051d13c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000731c2c72269ce1ad29933f090547b4102a9c398f3473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000739b411116f92504562edcf3a1b14ae226bc1489fc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000732e7e5de7d87a29b16284092b19891c80b0f43eca73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073ada8694dd1b511e72f467e7242e7123088aed06473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000735269bf8720946b5c38fbf361a947ba9d30c9131373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007321e0111e60d5449bdba67ee6c014b5384644a71473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073b96d8107d613b6b593b4531fc353b282af7fbef573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007371a4b5895a077806e8cd9f85a5253a9debd593fd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007373018870d10173ae6f71cac3047ed3b6d175f27473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000738e2efa9ed16f07d9b153d295d35025fd677bae9973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073112b3496aad76cd34a29c335266a968d65fba10a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000739d7a76fd386edeb3a871c3a096ca875adc1a55b773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007305227e4fa98a6415ef1927e902dc781aa7ed518a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007318600fe707d883c1fd16f002a09241d63027023373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000738ec43a855007c61ce75406db8b2079207f7d597a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007309a054b60bd3b908791b55eee81b515b93831e9973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073982d72a38a2cb0ed8f2fae5b22c122f1c9c89a1373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a683c1b815997a7fa38f6178c84675fc4c79ac2b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073818f1b08e38376e9635c5be156b8786317e833b373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a765a22c97c38c8ce50fea453ce92723c7637aa273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073ee54d208f62368b4effe176cb548a317dcae963f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007343678bb266e75f50fbe5927128ab51930b447eab73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000735138240e96360ad64010c27eb0c685a8b2ede4f273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007339e00115d71313fd5983de3cf2b5820dd3cc444773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073cfaa3449dffb82bf5b37e42fbcf43170c6c8e4ad73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007390d20d17cc9e07020bb490c5e34f486286d3eeb273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073074f21a36217d7615d0202faa926aefebb5a999973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073aa7a7c2decb180f68f11e975e6d92b5dc06083a673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060028190555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620021ba565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200200457805160ff191683800117855562002035565b8280016001018555821562002035579182015b828111156200203457825182559160200191906001019062002017565b5b5090506200204491906200214c565b5090565b8260218101928215620020b7579160200282015b82811115620020b65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906200205c565b5b509050620020c6919062002174565b5090565b82600a810192821562002139579160200282015b82811115620021385782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620020de565b5b50905062002148919062002174565b5090565b6200217191905b808211156200216d57600081600090555060010162002153565b5090565b90565b620021b791905b80821115620021b357600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200217b565b5090565b90565b612c0980620021ca6000396000f3fe6080604052600436106101cc5760003560e01c806370a08231116100f757806395d89b4111610095578063dc260aaa11610064578063dc260aaa146108c2578063e4849b32146108d9578063e9fad8ee14610914578063fdb5a03e1461092b576101cc565b806395d89b4114610725578063a60520c6146107b5578063a9059cbb146107e0578063cce7ec1314610853576101cc565b80638d88a90e116100d15780638d88a90e1461064c5780638e383c2e146106b557806391c05b0b146106cc578063949e8acd146106fa576101cc565b806370a082311461059157806378e97925146105f65780638620410b14610621576101cc565b80632c9d4fe41161016f5780634b7503341161013e5780634b750334146104bf57806366a7005b146104ea578063688abbf7146105155780636b2f463214610566576101cc565b80632c9d4fe41461040f578063313ce567146104265780633ccfd60b14610457578063482aede51461046e576101cc565b806318160ddd116101ab57806318160ddd146103155780631ef3755d14610340578063226093731461035757806328ce48a0146103a6576101cc565b806265318b146101d157806306fdde031461023657806310d0ffdd146102c6575b600080fd5b3480156101dd57600080fd5b50610220600480360360208110156101f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610942565b6040518082815260200191505060405180910390f35b34801561024257600080fd5b5061024b6109e2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561028b578082015181840152602081019050610270565b50505050905090810190601f1680156102b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d257600080fd5b506102ff600480360360208110156102e957600080fd5b8101908080359060200190929190505050610a80565b6040518082815260200191505060405180910390f35b34801561032157600080fd5b5061032a610ab9565b6040518082815260200191505060405180910390f35b34801561034c57600080fd5b50610355610ac3565b005b34801561036357600080fd5b506103906004803603602081101561037a57600080fd5b8101908080359060200190929190505050610ce3565b6040518082815260200191505060405180910390f35b3480156103b257600080fd5b506103f5600480360360208110156103c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d2c565b604051808215151515815260200191505060405180910390f35b34801561041b57600080fd5b50610424610d4c565b005b34801561043257600080fd5b5061043b611188565b604051808260ff1660ff16815260200191505060405180910390f35b34801561046357600080fd5b5061046c61118d565b005b34801561047a57600080fd5b506104bd6004803603602081101561049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a6565b005b3480156104cb57600080fd5b506104d461155b565b6040518082815260200191505060405180910390f35b3480156104f657600080fd5b506104ff6115b9565b6040518082815260200191505060405180910390f35b34801561052157600080fd5b506105506004803603602081101561053857600080fd5b810190808035151590602001909291905050506115c3565b6040518082815260200191505060405180910390f35b34801561057257600080fd5b5061057b61162f565b6040518082815260200191505060405180910390f35b34801561059d57600080fd5b506105e0600480360360208110156105b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611637565b6040518082815260200191505060405180910390f35b34801561060257600080fd5b5061060b611680565b6040518082815260200191505060405180910390f35b34801561062d57600080fd5b5061063661168a565b6040518082815260200191505060405180910390f35b34801561065857600080fd5b5061069b6004803603602081101561066f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e8565b604051808215151515815260200191505060405180910390f35b3480156106c157600080fd5b506106ca611708565b005b6106f8600480360360208110156106e257600080fd5b81019080803590602001909291905050506118dd565b005b34801561070657600080fd5b5061070f611a76565b6040518082815260200191505060405180910390f35b34801561073157600080fd5b5061073a611a8b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561077a57808201518184015260208101905061075f565b50505050905090810190601f1680156107a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107c157600080fd5b506107ca611b29565b6040518082815260200191505060405180910390f35b3480156107ec57600080fd5b506108396004803603604081101561080357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b33565b604051808215151515815260200191505060405180910390f35b34801561085f57600080fd5b506108ac6004803603604081101561087657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dde565b6040518082815260200191505060405180910390f35b3480156108ce57600080fd5b506108d7611f03565b005b3480156108e557600080fd5b50610912600480360360208110156108fc57600080fd5b81019080803590602001909291905050506120d8565b005b34801561092057600080fd5b506109296123e4565b005b34801561093757600080fd5b5061094061244c565b005b600068010000000000000000603860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054603660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054603b540203816109da57fe5b049050919050565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b505050505081565b600080610a9183600a60ff16612568565b90506000610a9f8483612581565b90506000610aac8261259b565b9050809350505050919050565b6000603a54905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b1d57600080fd5b6002544210610b2b57600080fd5b6000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c0057600080fd5b505afa158015610c14573d6000803e3d6000fd5b505050506040513d6020811015610c2a57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050506040513d6020811015610cce57600080fd5b81019080805190602001909291905050505050565b6000603a54821115610cf457600080fd5b6000610cff8361261c565b90506000610d1182600a60ff16612568565b90506000610d1f8383612581565b9050809350505050919050565b60066020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610da657600080fd5b6002544210610db457600080fd5b6000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306305f5e1006001026040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b505050506040513d6020811015610eb957600080fd5b810190808051906020019092919050505050610ede6305f5e1006001026000806126ad565b50610fab6305f5e1006001028273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f6757600080fd5b505afa158015610f7b573d6000803e3d6000fd5b505050506040513d6020811015610f9157600080fd5b8101908080519060200190929190505050036000806126ad565b50600060056034540260335401603a5481610fc257fe5b04905060008090505b60218110156110a257600015156006600060088460218110610fe957fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611095576110936008826021811061106b57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611b33565b505b8080600101915050610fcb565b5060008090505b600a811015611183576000151560076000602984600a81106110c757fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561117657611174602982600a811061114957fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058402611b33565b505b80806001019150506110a9565b505050565b600881565b600061119960016115c3565b116111a357600080fd5b600033905060006111b460006115c3565b9050680100000000000000008102603860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550603760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000603760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561133757600080fd5b505af115801561134b573d6000803e3d6000fd5b505050506040513d602081101561136157600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff167ee146a145d9955498f2f57f7976f0ca4b04166bcdc744667ff2291e99d43eab603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c80bb4f336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561144957600080fd5b505afa15801561145d573d6000803e3d6000fd5b505050506040513d602081101561147357600080fd5b810190808051906020019092919050505084604051808381526020018281526020019250505060405180910390a2505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461150057600080fd5b6001603960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080603a54141561157e57620f4240600a026305f5e1006001020390506115b6565b600061158d6305f5e10061261c565b9050600061159f82600a60ff16612568565b905060006115ad8383612581565b90508093505050505b90565b6000603454905090565b600080339050826115dc576115d781610942565b611627565b603760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461162582610942565b015b915050919050565b600047905090565b6000603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600254905090565b600080603a5414156116ad57620f4240600a026305f5e1006001020190506116e5565b60006116bc6305f5e10061261c565b905060006116ce82600a60ff16612568565b905060006116dc8383612b70565b90508093505050505b90565b60076020528060005260406000206000915054906101000a900460ff1681565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661175e57600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306005546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561188c57600080fd5b505af11580156118a0573d6000803e3d6000fd5b505050506040513d60208110156118b657600080fd5b81019080805190602001909291905050505060346000815480929190600101919050555050565b60011515603960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461193a57600080fd5b6000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a0e57600080fd5b505af1158015611a22573d6000803e3d6000fd5b505050506040513d6020811015611a3857600080fd5b810190808051906020019092919050505050611a6c603b54603a5468010000000000000000850281611a6657fe5b04612b70565b603b819055505050565b600080339050611a8581611637565b91505090565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b215780601f10611af657610100808354040283529160200191611b21565b820191906000526020600020905b815481529060010190602001808311611b0457829003601f168201915b505050505081565b6000603354905090565b600080611b3e611a76565b11611b4857600080fd5b6000339050603660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054831115611b9957600080fd5b6000611ba560016115c3565b1115611bb457611bb361118d565b5b611bfd603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612581565b603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c89603660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612b70565b603660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082603b5402603860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555082603b5402603860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b600080732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611eb357600080fd5b505af1158015611ec7573d6000803e3d6000fd5b505050506040513d6020811015611edd57600080fd5b810190808051906020019092919050505050611efb838560006126ad565b505092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f5957600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306004546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561208757600080fd5b505af115801561209b573d6000803e3d6000fd5b505050506040513d60208110156120b157600080fd5b81019080805190602001909291905050505060336000815480929190600101919050555050565b60006120e2611a76565b116120ec57600080fd5b6000339050603660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561213d57600080fd5b6000829050600061214d8261261c565b9050600061215f82600a60ff16612568565b9050600061216d8383612581565b905061217b603a5485612581565b603a819055506121ca603660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612581565b603660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600068010000000000000000820285603b540201905080603860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506000603a5411156122a45761229d603b54603a546801000000000000000086028161229757fe5b04612b70565b603b819055505b8573ffffffffffffffffffffffffffffffffffffffff167f2b1bab0dee4e0a50527886cb13a7c880afb5fde2e72f684c423c27865918c738603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c80bb4f336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561237b57600080fd5b505afa15801561238f573d6000803e3d6000fd5b505050506040513d60208110156123a557600080fd5b8101908080519060200190929190505050878560405180848152602001838152602001828152602001935050505060405180910390a250505050505050565b60003390506000603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156124405761243f816120d8565b5b61244861118d565b5050565b600061245860016115c3565b1161246257600080fd5b600061246e60006115c3565b90506000339050680100000000000000008202603860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550603760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054820191506000603760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061256382600060016126ad565b505050565b60008082848161257457fe5b0490508091505092915050565b60008282111561259057600080fd5b818303905092915050565b6000806305f5e100806001020290506000603a54620f4240600a02612607612601603a5486620f4240600a0260020202026002603a540a6002620f4240600a020a026305f5e1008a026305f5e100620f4240600a0202600202026002890a010101612b8f565b85612581565b8161260e57fe5b040390508092505050919050565b6000806305f5e1008301905060006305f5e100603a5401905060006305f5e1006126986305f5e1008503620f4240600a026305f5e100868161265a57fe5b04620f4240600a02026305f5e10060010201030260026305f5e100876002890a038161268257fe5b04620f4240600a02028161269257fe5b04612581565b8161269f57fe5b049050809350505050919050565b60006126b7611680565b42101561271957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461271857600080fd5b5b600061272985600a60ff16612568565b90506000612738826003612568565b905060006127468383612581565b905060006127548885612581565b905060006127618261259b565b90506000680100000000000000008402905060008211801561278f5750603a5461278d83603a54612b70565b115b61279857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415801561280157503373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156128975761284f603760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486612b70565b603760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128b2565b6128a18486612b70565b935068010000000000000000840290505b6000603a541115612919576128c9603a5483612b70565b603a81905550603a54680100000000000000008502816128e557fe5b04603b60008282540192505081905550603a546801000000000000000085028161290b57fe5b048202810381039050612921565b81603a819055505b61296a603660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612b70565b603660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008183603b540203905080603860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b60cfa34508471467f46e2e4c785fdac290ba7406e041c4defb51e25b07d5e603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c80bb4f336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612af357600080fd5b505afa158015612b07573d6000803e3d6000fd5b505050506040513d6020811015612b1d57600080fd5b81019080805190602001909291905050508e878e604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390a3829750505050505050509392505050565b600080828401905083811015612b8557600080fd5b8091505092915050565b60008060026001840181612b9f57fe5b0490508291505b81811015612bce57809150600281828581612bbd57fe5b040181612bc657fe5b049050612ba6565b5091905056fea265627a7a7231582049a571730e1d39d951adbf2d9b472eb4a42600fb8d8becec1c29f2159952bdea64736f6c634300050f003200000000000000000000000036948b2b95e9bc965a96a511bbe124ef218f8447000000000000000000000000000000000000000000000000000000005edbd9a0

Deployed Bytecode

0x6080604052600436106101cc5760003560e01c806370a08231116100f757806395d89b4111610095578063dc260aaa11610064578063dc260aaa146108c2578063e4849b32146108d9578063e9fad8ee14610914578063fdb5a03e1461092b576101cc565b806395d89b4114610725578063a60520c6146107b5578063a9059cbb146107e0578063cce7ec1314610853576101cc565b80638d88a90e116100d15780638d88a90e1461064c5780638e383c2e146106b557806391c05b0b146106cc578063949e8acd146106fa576101cc565b806370a082311461059157806378e97925146105f65780638620410b14610621576101cc565b80632c9d4fe41161016f5780634b7503341161013e5780634b750334146104bf57806366a7005b146104ea578063688abbf7146105155780636b2f463214610566576101cc565b80632c9d4fe41461040f578063313ce567146104265780633ccfd60b14610457578063482aede51461046e576101cc565b806318160ddd116101ab57806318160ddd146103155780631ef3755d14610340578063226093731461035757806328ce48a0146103a6576101cc565b806265318b146101d157806306fdde031461023657806310d0ffdd146102c6575b600080fd5b3480156101dd57600080fd5b50610220600480360360208110156101f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610942565b6040518082815260200191505060405180910390f35b34801561024257600080fd5b5061024b6109e2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561028b578082015181840152602081019050610270565b50505050905090810190601f1680156102b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d257600080fd5b506102ff600480360360208110156102e957600080fd5b8101908080359060200190929190505050610a80565b6040518082815260200191505060405180910390f35b34801561032157600080fd5b5061032a610ab9565b6040518082815260200191505060405180910390f35b34801561034c57600080fd5b50610355610ac3565b005b34801561036357600080fd5b506103906004803603602081101561037a57600080fd5b8101908080359060200190929190505050610ce3565b6040518082815260200191505060405180910390f35b3480156103b257600080fd5b506103f5600480360360208110156103c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d2c565b604051808215151515815260200191505060405180910390f35b34801561041b57600080fd5b50610424610d4c565b005b34801561043257600080fd5b5061043b611188565b604051808260ff1660ff16815260200191505060405180910390f35b34801561046357600080fd5b5061046c61118d565b005b34801561047a57600080fd5b506104bd6004803603602081101561049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a6565b005b3480156104cb57600080fd5b506104d461155b565b6040518082815260200191505060405180910390f35b3480156104f657600080fd5b506104ff6115b9565b6040518082815260200191505060405180910390f35b34801561052157600080fd5b506105506004803603602081101561053857600080fd5b810190808035151590602001909291905050506115c3565b6040518082815260200191505060405180910390f35b34801561057257600080fd5b5061057b61162f565b6040518082815260200191505060405180910390f35b34801561059d57600080fd5b506105e0600480360360208110156105b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611637565b6040518082815260200191505060405180910390f35b34801561060257600080fd5b5061060b611680565b6040518082815260200191505060405180910390f35b34801561062d57600080fd5b5061063661168a565b6040518082815260200191505060405180910390f35b34801561065857600080fd5b5061069b6004803603602081101561066f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e8565b604051808215151515815260200191505060405180910390f35b3480156106c157600080fd5b506106ca611708565b005b6106f8600480360360208110156106e257600080fd5b81019080803590602001909291905050506118dd565b005b34801561070657600080fd5b5061070f611a76565b6040518082815260200191505060405180910390f35b34801561073157600080fd5b5061073a611a8b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561077a57808201518184015260208101905061075f565b50505050905090810190601f1680156107a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107c157600080fd5b506107ca611b29565b6040518082815260200191505060405180910390f35b3480156107ec57600080fd5b506108396004803603604081101561080357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b33565b604051808215151515815260200191505060405180910390f35b34801561085f57600080fd5b506108ac6004803603604081101561087657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dde565b6040518082815260200191505060405180910390f35b3480156108ce57600080fd5b506108d7611f03565b005b3480156108e557600080fd5b50610912600480360360208110156108fc57600080fd5b81019080803590602001909291905050506120d8565b005b34801561092057600080fd5b506109296123e4565b005b34801561093757600080fd5b5061094061244c565b005b600068010000000000000000603860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054603660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054603b540203816109da57fe5b049050919050565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b505050505081565b600080610a9183600a60ff16612568565b90506000610a9f8483612581565b90506000610aac8261259b565b9050809350505050919050565b6000603a54905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b1d57600080fd5b6002544210610b2b57600080fd5b6000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c0057600080fd5b505afa158015610c14573d6000803e3d6000fd5b505050506040513d6020811015610c2a57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050506040513d6020811015610cce57600080fd5b81019080805190602001909291905050505050565b6000603a54821115610cf457600080fd5b6000610cff8361261c565b90506000610d1182600a60ff16612568565b90506000610d1f8383612581565b9050809350505050919050565b60066020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610da657600080fd5b6002544210610db457600080fd5b6000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306305f5e1006001026040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b505050506040513d6020811015610eb957600080fd5b810190808051906020019092919050505050610ede6305f5e1006001026000806126ad565b50610fab6305f5e1006001028273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f6757600080fd5b505afa158015610f7b573d6000803e3d6000fd5b505050506040513d6020811015610f9157600080fd5b8101908080519060200190929190505050036000806126ad565b50600060056034540260335401603a5481610fc257fe5b04905060008090505b60218110156110a257600015156006600060088460218110610fe957fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611095576110936008826021811061106b57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611b33565b505b8080600101915050610fcb565b5060008090505b600a811015611183576000151560076000602984600a81106110c757fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561117657611174602982600a811061114957fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058402611b33565b505b80806001019150506110a9565b505050565b600881565b600061119960016115c3565b116111a357600080fd5b600033905060006111b460006115c3565b9050680100000000000000008102603860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550603760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000603760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561133757600080fd5b505af115801561134b573d6000803e3d6000fd5b505050506040513d602081101561136157600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff167ee146a145d9955498f2f57f7976f0ca4b04166bcdc744667ff2291e99d43eab603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c80bb4f336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561144957600080fd5b505afa15801561145d573d6000803e3d6000fd5b505050506040513d602081101561147357600080fd5b810190808051906020019092919050505084604051808381526020018281526020019250505060405180910390a2505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461150057600080fd5b6001603960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080603a54141561157e57620f4240600a026305f5e1006001020390506115b6565b600061158d6305f5e10061261c565b9050600061159f82600a60ff16612568565b905060006115ad8383612581565b90508093505050505b90565b6000603454905090565b600080339050826115dc576115d781610942565b611627565b603760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461162582610942565b015b915050919050565b600047905090565b6000603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600254905090565b600080603a5414156116ad57620f4240600a026305f5e1006001020190506116e5565b60006116bc6305f5e10061261c565b905060006116ce82600a60ff16612568565b905060006116dc8383612b70565b90508093505050505b90565b60076020528060005260406000206000915054906101000a900460ff1681565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661175e57600080fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306005546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561188c57600080fd5b505af11580156118a0573d6000803e3d6000fd5b505050506040513d60208110156118b657600080fd5b81019080805190602001909291905050505060346000815480929190600101919050555050565b60011515603960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461193a57600080fd5b6000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a0e57600080fd5b505af1158015611a22573d6000803e3d6000fd5b505050506040513d6020811015611a3857600080fd5b810190808051906020019092919050505050611a6c603b54603a5468010000000000000000850281611a6657fe5b04612b70565b603b819055505050565b600080339050611a8581611637565b91505090565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b215780601f10611af657610100808354040283529160200191611b21565b820191906000526020600020905b815481529060010190602001808311611b0457829003601f168201915b505050505081565b6000603354905090565b600080611b3e611a76565b11611b4857600080fd5b6000339050603660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054831115611b9957600080fd5b6000611ba560016115c3565b1115611bb457611bb361118d565b5b611bfd603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612581565b603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c89603660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612b70565b603660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082603b5402603860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555082603b5402603860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b600080732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611eb357600080fd5b505af1158015611ec7573d6000803e3d6000fd5b505050506040513d6020811015611edd57600080fd5b810190808051906020019092919050505050611efb838560006126ad565b505092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f5957600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000732b591e99afe9f32eaa6214f7b7629768c40eeb3990508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306004546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561208757600080fd5b505af115801561209b573d6000803e3d6000fd5b505050506040513d60208110156120b157600080fd5b81019080805190602001909291905050505060336000815480929190600101919050555050565b60006120e2611a76565b116120ec57600080fd5b6000339050603660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561213d57600080fd5b6000829050600061214d8261261c565b9050600061215f82600a60ff16612568565b9050600061216d8383612581565b905061217b603a5485612581565b603a819055506121ca603660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485612581565b603660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600068010000000000000000820285603b540201905080603860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506000603a5411156122a45761229d603b54603a546801000000000000000086028161229757fe5b04612b70565b603b819055505b8573ffffffffffffffffffffffffffffffffffffffff167f2b1bab0dee4e0a50527886cb13a7c880afb5fde2e72f684c423c27865918c738603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c80bb4f336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561237b57600080fd5b505afa15801561238f573d6000803e3d6000fd5b505050506040513d60208110156123a557600080fd5b8101908080519060200190929190505050878560405180848152602001838152602001828152602001935050505060405180910390a250505050505050565b60003390506000603660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156124405761243f816120d8565b5b61244861118d565b5050565b600061245860016115c3565b1161246257600080fd5b600061246e60006115c3565b90506000339050680100000000000000008202603860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550603760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054820191506000603760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061256382600060016126ad565b505050565b60008082848161257457fe5b0490508091505092915050565b60008282111561259057600080fd5b818303905092915050565b6000806305f5e100806001020290506000603a54620f4240600a02612607612601603a5486620f4240600a0260020202026002603a540a6002620f4240600a020a026305f5e1008a026305f5e100620f4240600a0202600202026002890a010101612b8f565b85612581565b8161260e57fe5b040390508092505050919050565b6000806305f5e1008301905060006305f5e100603a5401905060006305f5e1006126986305f5e1008503620f4240600a026305f5e100868161265a57fe5b04620f4240600a02026305f5e10060010201030260026305f5e100876002890a038161268257fe5b04620f4240600a02028161269257fe5b04612581565b8161269f57fe5b049050809350505050919050565b60006126b7611680565b42101561271957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461271857600080fd5b5b600061272985600a60ff16612568565b90506000612738826003612568565b905060006127468383612581565b905060006127548885612581565b905060006127618261259b565b90506000680100000000000000008402905060008211801561278f5750603a5461278d83603a54612b70565b115b61279857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415801561280157503373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156128975761284f603760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486612b70565b603760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128b2565b6128a18486612b70565b935068010000000000000000840290505b6000603a541115612919576128c9603a5483612b70565b603a81905550603a54680100000000000000008502816128e557fe5b04603b60008282540192505081905550603a546801000000000000000085028161290b57fe5b048202810381039050612921565b81603a819055505b61296a603660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612b70565b603660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008183603b540203905080603860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f98b60cfa34508471467f46e2e4c785fdac290ba7406e041c4defb51e25b07d5e603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c80bb4f336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612af357600080fd5b505afa158015612b07573d6000803e3d6000fd5b505050506040513d6020811015612b1d57600080fd5b81019080805190602001909291905050508e878e604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390a3829750505050505050509392505050565b600080828401905083811015612b8557600080fd5b8091505092915050565b60008060026001840181612b9f57fe5b0490508291505b81811015612bce57809150600281828581612bbd57fe5b040181612bc657fe5b049050612ba6565b5091905056fea265627a7a7231582049a571730e1d39d951adbf2d9b472eb4a42600fb8d8becec1c29f2159952bdea64736f6c634300050f0032

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

00000000000000000000000036948b2b95e9bc965a96a511bbe124ef218f8447000000000000000000000000000000000000000000000000000000005edbd9a0

-----Decoded View---------------
Arg [0] : usernameAddress (address): 0x36948b2b95e9bc965A96A511bbE124eF218F8447
Arg [1] : when_start (uint256): 1591466400

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000036948b2b95e9bc965a96a511bbe124ef218f8447
Arg [1] : 000000000000000000000000000000000000000000000000000000005edbd9a0


Deployed Bytecode Sourcemap

881:27312:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12893:8;;;19927:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19927:339:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19927:339:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2254:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2254:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2254:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21470:388;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21470:388:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21470:388:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18210:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18210:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7852:258;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7852:258:0;;;:::i;:::-;;21976:412;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21976:412:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21976:412:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3052:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3052:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3052:43:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6308:1536;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6308:1536:0;;;:::i;:::-;;2325:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2325:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14375:762;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14375:762:0;;;:::i;:::-;;12262:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12262:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12262:133:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;20345:503;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20345:503:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18569:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18569:92:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19243:375;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19243:375:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19243:375:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18034:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18034:109:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19702:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19702:138:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19702:138:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12147:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12147:107:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20926:427;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20926:427:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3129:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3129:35:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3129:35:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6051:249;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6051:249:0;;;:::i;:::-;;12917:357;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12917:357:0;;;;;;;;;;;;;;;;;:::i;:::-;;18736:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18736:151:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2290:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2290:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2290:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18382:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18382:108:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16707:1137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16707:1137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16707:1137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12529:240;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12529:240:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12529:240:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5575:436;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5575:436:0;;;:::i;:::-;;15201:1421;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15201:1421:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15201:1421:0;;;;;;;;;;;;;;;;;:::i;:::-;;14038:264;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14038:264:0;;;:::i;:::-;;13354:618;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13354:618:0;;;:::i;:::-;;19927:339;20022:7;2680:5;20203:10;:28;20214:16;20203:28;;;;;;;;;;;;;;;;20144:19;:37;20164:16;20144:37;;;;;;;;;;;;;;;;20126:15;;:55;20095:136;20067:191;;;;;;20047:211;;19927:339;;;:::o;2254:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21470:388::-;21577:7;21602:18;21623:44;21636:16;2405:2;21623:44;;:12;:44::i;:::-;21602:65;;21678:22;21703:42;21716:16;21734:10;21703:12;:42::i;:::-;21678:67;;21756:23;21782:33;21800:14;21782:17;:33::i;:::-;21756:59;;21835:15;21828:22;;;;;21470:388;;;:::o;18210:91::-;18254:7;18281:12;;18274:19;;18210:91;:::o;7852:258::-;1326:13;;;;;;;;;;;1312:27;;:10;:27;;;1304:36;;;;;;7915:13;;7909:3;:19;7901:28;;;;;;8003:9;2751:42;8003:31;;8045:3;:12;;;8058:13;;;;;;;;;;;8073:3;:13;;;8095:4;8073:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8073:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8073:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8073:28:0;;;;;;;;;;;;;;;;8045:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8045:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8045:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8045:57:0;;;;;;;;;;;;;;;;;1351:1;7852:258::o;21976:412::-;22082:7;22132:12;;22115:13;:29;;22107:38;;;;;;22156:17;22176:32;22194:13;22176:17;:32::i;:::-;22156:52;;22219:18;22240:37;22253:9;2405:2;22240:37;;:12;:37::i;:::-;22219:58;;22288:22;22313:35;22326:9;22337:10;22313:12;:35::i;:::-;22288:60;;22366:14;22359:21;;;;;21976:412;;;:::o;3052:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;6308:1536::-;1326:13;;;;;;;;;;;1312:27;;:10;:27;;;1304:36;;;;;;6381:13;;6375:3;:19;6367:28;;;;;;6406:9;2751:42;6406:31;;6531:3;:16;;;6548:10;6568:4;2500:3;6575:1;:7;6531:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6531:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6531:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6531:52:0;;;;;;;;;;;;;;;;;6594:44;2500:3;6609:1;:7;6626:3;6632:5;6594:14;:44::i;:::-;;6738:127;2500:3;6799:1;:7;6767:3;:13;;;6789:4;6767:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6767:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6767:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6767:28:0;;;;;;;;;;;;;;;;:40;6830:3;6849:5;6738:14;:127::i;:::-;;6971:25;7073:1;7055:15;;:19;7028:23;;:47;6999:12;;:77;;;;;;6971:105;;7094:9;7106:1;7094:13;;7089:377;7113:2;7109:1;:6;7089:377;;;7367:5;7333:39;;:11;:30;7345:14;7360:1;7345:17;;;;;;;;;;;;;;;;;;7333:30;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;7329:126;;;7393:46;7402:14;7417:1;7402:17;;;;;;;;;;;;;;;;;;7421;7393:8;:46::i;:::-;;7329:126;7117:3;;;;;;;7089:377;;;;7483:9;7495:1;7483:13;;7478:359;7502:2;7498:1;:6;7478:359;;;7741:5;7722:24;;:3;:15;7726:7;7734:1;7726:10;;;;;;;;;;;;;;;;;;7722:15;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;7718:108;;;7767:43;7776:7;7784:1;7776:10;;;;;;;;;;;;;;;;;;7808:1;7788:17;:21;7767:8;:43::i;:::-;;7718:108;7506:3;;;;;;;7478:359;;;;1351:1;;6308:1536::o;2325:34::-;2358:1;2325:34;:::o;14375:762::-;1242:1;1222:17;1234:4;1222:11;:17::i;:::-;:21;1214:30;;;;;;14454:24;14481:10;14454:37;;14502:18;14523;14535:5;14523:11;:18::i;:::-;14502:39;;2680:5;14667:10;:22;14626:10;:28;14637:16;14626:28;;;;;;;;;;;;;;;;:64;;;;;;;;;;;14744:16;:34;14761:16;14744:34;;;;;;;;;;;;;;;;14730:48;;;;14826:1;14789:16;:34;14806:16;14789:34;;;;;;;;;;;;;;;:38;;;;14875:9;2751:42;14875:31;;14917:3;:12;;;14930:16;14948:10;14917:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14917:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14917:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14917:42:0;;;;;;;;;;;;;;;;;15025:16;15000:129;;;15056:8;;;;;;;;;;;:25;;;15082:10;15056:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15056:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15056:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15056:37:0;;;;;;;;;;;;;;;;15108:10;15000:129;;;;;;;;;;;;;;;;;;;;;;;;1255:1;;;14375:762::o;12262:133::-;1326:13;;;;;;;;;;;1312:27;;:10;:27;;;1304:36;;;;;;12383:4;12344:20;:36;12365:14;12344:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;12262:133;:::o;20345:503::-;20387:7;20502:1;20486:12;;:17;20482:359;;;2458:3;2622:2;:13;2500:3;2557:1;:7;20527:43;20520:50;;;;20482:359;20603:17;20623:22;20641:3;20623:17;:22::i;:::-;20603:42;;20660:18;20681:37;20694:9;2405:2;20681:37;;:12;:37::i;:::-;20660:58;;20733:22;20758:35;20771:9;20782:10;20758:12;:35::i;:::-;20733:60;;20815:14;20808:21;;;;;20345:503;;:::o;18569:92::-;18611:7;18638:15;;18631:22;;18569:92;:::o;19243:375::-;19340:7;19365:24;19392:10;19365:37;;19433:21;:177;;19581:29;19593:16;19581:11;:29::i;:::-;19433:177;;;19527:16;:34;19544:16;19527:34;;;;;;;;;;;;;;;;19474:29;19486:16;19474:11;:29::i;:::-;:87;19433:177;19413:197;;;19243:375;;;:::o;18034:109::-;18087:7;18114:21;18107:28;;18034:109;:::o;19702:138::-;19768:7;19795:19;:37;19815:16;19795:37;;;;;;;;;;;;;;;;19788:44;;19702:138;;;:::o;12147:107::-;12189:18;12233:13;;12220:26;;12147:107;:::o;20926:427::-;20967:7;21007:1;20991:12;;:17;20987:359;;;2458:3;2622:2;:13;2500:3;2557:1;:7;21032:43;21025:50;;;;20987:359;21108:17;21128:22;21146:3;21128:17;:22::i;:::-;21108:42;;21165:18;21186:37;21199:9;2405:2;21186:37;;:12;:37::i;:::-;21165:58;;21238:22;21263:35;21276:9;21287:10;21263:12;:35::i;:::-;21238:60;;21320:14;21313:21;;;;;20926:427;;:::o;3129:35::-;;;;;;;;;;;;;;;;;;;;;;:::o;6051:249::-;6106:3;:15;6110:10;6106:15;;;;;;;;;;;;;;;;;;;;;;;;;6098:24;;;;;;6151:5;6133:3;:15;6137:10;6133:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;6167:9;2751:42;6167:31;;6211:3;:16;;;6228:10;6248:4;6255:8;;6211:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6211:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6211:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6211:53:0;;;;;;;;;;;;;;;;;6275:15;;:17;;;;;;;;;;;;;6051:249;:::o;12917:357::-;13025:4;12989:40;;:20;:32;13010:10;12989:32;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;12981:49;;;;;;13041:9;2751:42;13041:31;;13083:3;:16;;;13100:10;13120:4;13127:6;13083:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13083:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13083:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13083:51:0;;;;;;;;;;;;;;;;;13163:103;13190:15;;13243:12;;2680:5;13221:6;:18;13220:35;;;;;;13163:12;:103::i;:::-;13145:15;:121;;;;12917:357;;:::o;18736:151::-;18777:7;18797:24;18824:10;18797:37;;18852:27;18862:16;18852:9;:27::i;:::-;18845:34;;;18736:151;:::o;2290:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18382:108::-;18432:7;18459:23;;18452:30;;18382:108;:::o;16707:1137::-;16830:4;1113:1;1100:10;:8;:10::i;:::-;:14;1092:23;;;;;;16870:24;16897:10;16870:37;;16998:19;:37;17018:16;16998:37;;;;;;;;;;;;;;;;16979:15;:56;;16971:65;;;;;;17126:1;17106:17;17118:4;17106:11;:17::i;:::-;:21;17102:37;;;17129:10;:8;:10::i;:::-;17102:37;17220:105;17247:19;:37;17267:16;17247:37;;;;;;;;;;;;;;;;17299:15;17220:12;:105::i;:::-;17180:19;:37;17200:16;17180:37;;;;;;;;;;;;;;;:145;;;;17370:99;17397:19;:31;17417:10;17397:31;;;;;;;;;;;;;;;;17443:15;17370:12;:99::i;:::-;17336:19;:31;17356:10;17336:31;;;;;;;;;;;;;;;:133;;;;17592:15;17574;;:33;17519:10;:28;17530:16;17519:28;;;;;;;;;;;;;;;;:99;;;;;;;;;;;17682:15;17664;;:33;17629:10;:22;17640:10;17629:22;;;;;;;;;;;;;;;;:69;;;;;;;;;;;17766:10;17739:55;;17748:16;17739:55;;;17778:15;17739:55;;;;;;;;;;;;;;;;;;17832:4;17825:11;;;16707:1137;;;;:::o;12529:240::-;12595:7;12615:9;2751:42;12615:31;;12657:3;:16;;;12674:10;12694:4;12701:6;12657:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12657:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12657:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12657:51:0;;;;;;;;;;;;;;;;;12719:42;12734:6;12742:11;12755:5;12719:14;:42::i;:::-;;12529:240;;;;;:::o;5575:436::-;5627:11;:23;5639:10;5627:23;;;;;;;;;;;;;;;;;;;;;;;;;5619:32;;;;;;5724:5;5698:11;:23;5710:10;5698:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;5822:9;2751:42;5822:31;;5907:3;:16;;;5924:10;5944:4;5951:15;;5907:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5907:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5907:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5907:60:0;;;;;;;;;;;;;;;;;5978:23;;:25;;;;;;;;;;;;;5575:436;:::o;15201:1421::-;1113:1;1100:10;:8;:10::i;:::-;:14;1092:23;;;;;;15298:24;15325:10;15298:37;;15373:19;:37;15393:16;15373:37;;;;;;;;;;;;;;;;15354:15;:56;;15346:65;;;;;;15422:15;15440;15422:33;;15466:17;15486:26;15504:7;15486:17;:26::i;:::-;15466:46;;15523:18;15544:37;15557:9;2405:2;15544:37;;:12;:37::i;:::-;15523:58;;15592:22;15617:35;15630:9;15641:10;15617:12;:35::i;:::-;15592:60;;15713:35;15726:12;;15740:7;15713:12;:35::i;:::-;15698:12;:50;;;;15799:97;15826:19;:37;15846:16;15826:37;;;;;;;;;;;;;;;;15878:7;15799:12;:97::i;:::-;15759:19;:37;15779:16;15759:37;;;;;;;;;;;;;;;:137;;;;15946:22;2680:5;16023:14;:26;16012:7;15994:15;;:25;:56;15946:115;;16104:15;16072:10;:28;16083:16;16072:28;;;;;;;;;;;;;;;;:47;;;;;;;;;;;16194:1;16179:12;;:16;16175:243;;;16287:119;16318:15;;16379:12;;2680:5;16353:10;:22;16352:39;;;;;;16287:12;:119::i;:::-;16269:15;:137;;;;16175:243;16484:16;16458:156;;;16515:8;;;;;;;;;;;:25;;;16541:10;16515:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16515:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16515:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16515:37:0;;;;;;;;;;;;;;;;16567:7;16589:14;16458:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1126:1;;;;;;15201:1421;:::o;14038:264::-;14127:24;14154:10;14127:37;;14175:15;14193:19;:37;14213:16;14193:37;;;;;;;;;;;;;;;;14175:55;;14255:1;14245:7;:11;14241:30;;;14258:13;14263:7;14258:4;:13::i;:::-;14241:30;14284:10;:8;:10::i;:::-;14038:264;;:::o;13354:618::-;1242:1;1222:17;1234:4;1222:11;:17::i;:::-;:21;1214:30;;;;;;13438:18;13459;13471:5;13459:11;:18::i;:::-;13438:39;;13575:24;13602:10;13575:37;;2680:5;13664:10;:22;13623:10;:28;13634:16;13623:28;;;;;;;;;;;;;;;;:64;;;;;;;;;;;13746:16;:34;13763:16;13746:34;;;;;;;;;;;;;;;;13732:48;;;;13828:1;13791:16;:34;13808:16;13791:34;;;;;;;;;;;;;;;:38;;;;13918:46;13933:10;13953:3;13959:4;13918:14;:46::i;:::-;;1255:1;;13354:618::o;28815:122::-;28873:7;28893:9;28909:1;28905;:5;;;;;;28893:17;;28928:1;28921:8;;;28815:122;;;;:::o;29065:124::-;29123:7;29156:1;29151;:6;;29143:15;;;;;;29180:1;29176;:5;29169:12;;29065:124;;;;:::o;26113:995::-;26209:7;26234:26;26284:3;2500;2557:1;:7;26263:24;26234:53;;26298:23;27052:12;;2458:3;2622:2;:13;26340:669;26394:544;26902:12;;26848:18;2458:3;2622:2;:13;26751:1;:61;:115;:163;26715:1;26701:12;;:15;26662:1;2458:3;2622:2;:13;26636:27;26635:82;26597:3;26585:9;:15;26544:3;2458;2622:2;:13;26519:28;26481:1;:67;:120;26446:1;26426:18;:21;26425:177;:293;:490;26394:4;:544::i;:::-;26976:18;26340:12;:669::i;:::-;26325:722;;;;;;26324:741;26298:767;;27085:15;27078:22;;;;26113:995;;;:::o;27370:555::-;27464:7;27489:15;27518:3;27508:7;:13;27489:33;;27533:20;27572:3;27557:12;;:18;27533:43;;27587:22;27881:3;27613:265;27786:3;27776:7;:13;2458:3;2622:2;:13;27723:3;27708:12;:18;;;;;;2458:3;2622:2;:13;27682:45;2500:3;2557:1;:7;27643:85;27642:129;27641:149;27866:1;27858:3;27847:7;27843:1;27834:7;:10;:20;27833:28;;;;;;2458:3;2622:2;:13;27807:55;27806:61;;;;;;27613:12;:265::i;:::-;:271;;;;;;27587:298;;27903:14;27896:21;;;;;27370:555;;;:::o;22542:3275::-;22683:7;22713:11;:9;:11::i;:::-;22707:3;:17;22703:86;;;22763:13;;;;;;;;;;;22749:27;;:10;:27;;;22741:36;;;;;;22703:86;22824:27;22854:82;22881:17;2405:2;22854:82;;:12;:82::i;:::-;22824:112;;22947:22;22972:36;22985:19;23006:1;22972:12;:36::i;:::-;22947:61;;23019:18;23040:49;23053:19;23074:14;23040:12;:49::i;:::-;23019:70;;23100:22;23125:89;23152:17;23184:19;23125:12;:89::i;:::-;23100:114;;23225:23;23251:33;23269:14;23251:17;:33::i;:::-;23225:59;;23295:12;2680:5;23310:10;:22;23295:37;;23385:1;23367:15;:19;:100;;;;;23454:12;;23408:43;23421:15;23438:12;;23408;:43::i;:::-;:58;23367:100;23345:133;;;;;;23619:42;23604:57;;:11;:57;;;;:128;;;;;23722:10;23707:25;;:11;:25;;;;23604:128;23541:638;;;23829:108;23860:16;:29;23877:11;23860:29;;;;;;;;;;;;;;;;23908:14;23829:12;:108::i;:::-;23797:16;:29;23814:11;23797:29;;;;;;;;;;;;;;;:140;;;;23541:638;;;24083:40;24096:10;24108:14;24083:12;:40::i;:::-;24070:53;;2680:5;24145:10;:22;24138:29;;23541:638;24261:1;24246:12;;:16;24242:721;;;24333:43;24346:12;;24360:15;24333:12;:43::i;:::-;24318:12;:58;;;;24565:12;;2680:5;24538:10;:22;24537:41;;;;;;24517:15;;:62;;;;;;;;;;;24833:12;;2680:5;24806:10;:22;24805:41;;;;;;24761:15;:86;24732:4;:116;24707:4;:142;24683:166;;24242:721;;;24936:15;24921:12;:30;;;;24242:721;25085:99;25112:19;:31;25132:10;25112:31;;;;;;;;;;;;;;;;25158:15;25085:12;:99::i;:::-;25051:19;:31;25071:10;25051:31;;;;;;;;;;;;;;;:133;;;;25364:22;25450:4;25431:15;25413;;:33;25412:42;25364:101;;25502:15;25476:10;:22;25487:10;25476:22;;;;;;;;;;;;;;;;:41;;;;;;;;;;;25727:11;25558:216;;25588:10;25558:216;;;25613:8;;;;;;;;;;;:25;;;25639:10;25613:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25613:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25613:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25613:37:0;;;;;;;;;;;;;;;;25665:17;25697:15;25753:10;25558:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25794:15;25787:22;;;;;;;;;22542:3275;;;;;:::o;29266:148::-;29324:7;29344:9;29360:1;29356;:5;29344:17;;29385:1;29380;:6;;29372:15;;;;;;29405:1;29398:8;;;29266:148;;;;:::o;27983:207::-;28031:9;28053;28075:1;28070;28066;:5;28065:11;;;;;;28053:23;;28091:1;28087:5;;28103:80;28114:1;28110;:5;28103:80;;;28136:1;28132:5;;28170:1;28165;28161;28157;:5;;;;;;:9;28156:15;;;;;;28152:19;;28103:80;;;27983:207;;;;:::o

Swarm Source

bzzr://49a571730e1d39d951adbf2d9b472eb4a42600fb8d8becec1c29f2159952bdea

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.