ETH Price: $3,253.76 (-2.87%)

Token

BlueChipExchange (BCHIP)
 

Overview

Max Total Supply

14,531.294995468497310221 BCHIP

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
85.118621877752349098 BCHIP

Value
$0.00
0xc92fd0e554b12eb10f584819eec2394a9a6f3d1d
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BlueChipGame

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-09-24
*/

pragma solidity ^0.4.24;

/*
* Wall Street Market presents......

.______    __       __    __   _______      ______  __    __   __  .______        _______      ___      .___  ___.  _______ 
|   _  \  |  |     |  |  |  | |   ____|    /      ||  |  |  | |  | |   _  \      /  _____|    /   \     |   \/   | |   ____|
|  |_)  | |  |     |  |  |  | |  |__      |  ,----'|  |__|  | |  | |  |_)  |    |  |  __     /  ^  \    |  \  /  | |  |__   
|   _  <  |  |     |  |  |  | |   __|     |  |     |   __   | |  | |   ___/     |  | |_ |   /  /_\  \   |  |\/|  | |   __|  
|  |_)  | |  `----.|  `--'  | |  |____    |  `----.|  |  |  | |  | |  |         |  |__| |  /  _____  \  |  |  |  | |  |____ 
|______/  |_______| \______/  |_______|    \______||__|  |__| |__| | _|          \______| /__/     \__\ |__|  |__| |_______|
                                                                                                                            
(BCHIP)

website:    https://wallstreetmarket.tk

discord:    https://discord.gg/8AFP9gS

25% Dividends Fees/Payouts

5% of Buy In Fee Will Go into Buying Tokens from the contract for "THE 82" group until 
400,000 tokens have been distributed.  25% Fee will apply for these transactions.

After this the 5% fee will be reserved for use in additional card and lending games using BCHIP tokens.

Referral Program pays out 33% of Buy-in/Sell Fees to user of masternode link

*/





contract AcceptsExchange {
    BlueChipGame public tokenContract;

    function AcceptsExchange(address _tokenContract) public {
        tokenContract = BlueChipGame(_tokenContract);
    }

    modifier onlyTokenContract {
        require(msg.sender == address(tokenContract));
        _;
    }

    /**
    * @dev Standard ERC677 function that will handle incoming token transfers.
    *
    * @param _from  Token sender address.
    * @param _value Amount of tokens.
    * @param _data  Transaction metadata.
    */
    function tokenFallback(address _from, uint256 _value, bytes _data) external returns (bool);
    function tokenFallbackExpanded(address _from, uint256 _value, bytes _data, address _sender, address _referrer) external returns (bool);
}


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

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

    modifier notContract() {
      require (msg.sender == tx.origin);
      _;
    }

    // administrators can:
    // -> change the name of the contract
    // -> change the name of the token
    // -> change the PoS difficulty (How many tokens it costs to hold a masternode, in case it gets crazy high later)
    // they CANNOT:
    // -> take funds
    // -> disable withdrawals
    // -> kill the contract
    // -> change the price of tokens
    modifier onlyAdministrator(){
        address _customerAddress = msg.sender;
        require(administrators[_customerAddress]);
        _;
    }


    modifier onlyActive(){
        
        require(boolContractActive);
        _;
    }

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

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

    event onReinvestment(
        address indexed customerAddress,
        uint256 ethereumReinvested,
        uint256 tokensMinted
    );

    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );

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


    /*=====================================
    =            CONFIGURABLES            =
    =====================================*/
    string public name = "BlueChipExchange";
    string public symbol = "BCHIP";
    uint8 constant public decimals = 18;

    uint256 constant internal tokenPriceInitial_ = 0.00000001 ether;
    uint256 constant internal tokenPriceIncremental_ = 0.000000001 ether;
    uint256 constant internal magnitude = 2**64;

   
    uint256 public totalEthFundRecieved; // total ETH Bond recieved from this contract
    uint256 public totalEthFundCollected; // total ETH Bond collected in this contract

    // proof of stake (defaults at 25 tokens)
    uint256 public stakingRequirement = 25e18;

    // ambassador program
    mapping(address => bool) internal ambassadors_;
    uint256 constant internal ambassadorMaxPurchase_ = 2.5 ether;
    uint256 constant internal ambassadorQuota_ = 2.5 ether;

    uint constant internal total82Tokens = 390148;



   /*================================
    =            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 => uint256) internal ambassadorAccumulatedQuota_;
    mapping(uint => address) internal theGroupofEightyTwo;
    mapping(uint => uint) internal theGroupofEightyTwoAmount;

    uint256 internal tokenSupply_ = 0;
    uint256 internal profitPerShare_;


    uint8 public dividendFee_ = 20; // 20% dividend fee on each buy and sell
    uint8 public fundFee_ = 0; // 5% bond fund fee on each buy and sell
    uint8 public altFundFee_ = 5; // Fund fee rate on each buy and sell for future game

    bool boolPay82 = false;
    bool bool82Mode = true;
    bool boolContractActive = true;

    uint bondFund = 0;


    // administrator list (see above on what they can do)
    mapping(address => bool) public administrators;

    // when this is set to true, only ambassadors can purchase tokens (this prevents a whale premine, it ensures a fairly distributed upper pyramid)
    bool public onlyAmbassadors = true;

    // Special Wall Street Market Platform control from scam game contracts on Wall Street Market platform
    mapping(address => bool) public canAcceptTokens_; // contracts, which can accept Wall Street tokens

    mapping(address => address) public stickyRef;

     address public bondFundAddress = 0x1822435de9b923a7a8c4fbd2f6d0aa8f743d3010;   //Bond Fund
     address public altFundAddress = 0x1822435de9b923a7a8c4fbd2f6d0aa8f743d3010;    //Alternate Fund for Future Game

    /*=======================================
    =            PUBLIC FUNCTIONS            =
    =======================================*/
    /*
    * -- APPLICATION ENTRY POINTS --
    */
    function BlueChipGame()
        public
    {
        // add administrators here
        administrators[msg.sender] = true;

    //*  Populate the 82 Mappings 
        theGroupofEightyTwo[1] = 0x41fe3738b503cbafd01c1fd8dd66b7fe6ec11b01;
        theGroupofEightyTwo[2] = 0x96762288ebb2560a19f8eadaaa2012504f64278b;
        theGroupofEightyTwo[3] = 0xc29a6dd21801e58566df9f003b7011e30724543e;
        theGroupofEightyTwo[4] = 0xc63ea85cc823c440319013d4b30e19b66466642d;
        theGroupofEightyTwo[5] = 0xc6f827796a2e1937fd7f97c4e0a4906c476794f6;
        theGroupofEightyTwo[6] = 0xe74b1ea522b9d558c8e8719c3b1c4a9050b531ca;
        theGroupofEightyTwo[7] = 0x6b90d498062140c607d03fd642377eeaa325703e;
        theGroupofEightyTwo[8] = 0x5f1088110edcba27fc206cdcc326b413b5867361;
        theGroupofEightyTwo[9] = 0xc92fd0e554b12eb10f584819eec2394a9a6f3d1d;
        theGroupofEightyTwo[10] = 0xb62a0ac2338c227748e3ce16d137c6282c9870cf;
        theGroupofEightyTwo[11] = 0x3f6c42409da6faf117095131168949ab81d5947d;
        theGroupofEightyTwo[12] = 0xd54c47b3165508fb5418dbdec59a0d2448eeb3d7;
        theGroupofEightyTwo[13] = 0x285d366834afaa8628226e65913e0dd1aa26b1f8;
        theGroupofEightyTwo[14] = 0x285d366834afaa8628226e65913e0dd1aa26b1f8;
        theGroupofEightyTwo[15] = 0x5f5996f9e1960655d6fc00b945fef90672370d9f;
        theGroupofEightyTwo[16] = 0x3825c8ba07166f34ce9a2cd1e08a68b105c82cb9;
        theGroupofEightyTwo[17] = 0x7f3e05b4f258e1c15a0ef49894cffa1d89ceb9d3;
        theGroupofEightyTwo[18] = 0x3191acf877495e5f4e619ec722f6f38839182660;
        theGroupofEightyTwo[19] = 0x14f981ec7b0f59df6e1c56502e272298f221d763;
        theGroupofEightyTwo[20] = 0xae817ec70d8b621bb58a047e63c31445f79e20dc;
        theGroupofEightyTwo[21] = 0xc43af3becac9c810384b69cf061f2d7ec73105c4;
        theGroupofEightyTwo[22] = 0x0743469569ed5cc44a51216a1bf5ad7e7f90f40e;
        theGroupofEightyTwo[23] = 0xff6a4d0ed374ba955048664d6ef5448c6cd1d56a;
        theGroupofEightyTwo[24] = 0x62358a483311b3de29ae987b990e19de6259fa9c;
        theGroupofEightyTwo[25] = 0xa0fea1bcfa32713afdb73b9908f6cb055022e95f;
        theGroupofEightyTwo[26] = 0xb2af816608e1a4d0fb12b81028f32bac76256eba;
        theGroupofEightyTwo[27] = 0x977193d601b364f38ab1a832dbaef69ca7833992;
        theGroupofEightyTwo[28] = 0xed3547f0ed028361685b39cd139aa841df6629ab;
        theGroupofEightyTwo[29] = 0xe40ff298079493cba637d92089e3d1db403974cb;
        theGroupofEightyTwo[30] = 0xae3dc7fa07f9dd030fa56c027e90998ed9fe9d61;
        theGroupofEightyTwo[31] = 0x2dd35e7a6f5fcc28d146c04be641f969f6d1e403;
        theGroupofEightyTwo[32] = 0x2afe21ec5114339922d38546a3be7a0b871d3a0d;
        theGroupofEightyTwo[33] = 0x6696fee394bb224d0154ea6b58737dca827e1960;
        theGroupofEightyTwo[34] = 0xccdf159b1340a35c3567b669c836a88070051314;
        theGroupofEightyTwo[35] = 0x1c3416a34c86f9ddcd05c7828bf5693308d19e0b;
        theGroupofEightyTwo[36] = 0x846dedb19b105edafac2c9410fa2b5e73b596a14;
        theGroupofEightyTwo[37] = 0x3e9294f9b01bc0bcb91413112c75c3225c65d0b3;
        theGroupofEightyTwo[38] = 0x3a5ce61c74343dde474bad4210cccf1dac7b1934;
        theGroupofEightyTwo[39] = 0x38e123f89a7576b2942010ad1f468cc0ea8f9f4b;
        theGroupofEightyTwo[40] = 0xdcd8bad894035b5c554ad450ca84ae6be0b73122;
        theGroupofEightyTwo[41] = 0xcfab320d4379a84fe3736eccf56b09916e35097b;
        theGroupofEightyTwo[42] = 0x12f53c1d7caea0b41010a0e53d89c801ed579b5a;
        theGroupofEightyTwo[43] = 0x5145a296e1bb9d4cf468d6d97d7b6d15700f39ef;
        theGroupofEightyTwo[44] = 0xac707a1b4396a309f4ad01e3da4be607bbf14089;
        theGroupofEightyTwo[45] = 0x38602d1446fe063444b04c3ca5ecde0cba104240;
        theGroupofEightyTwo[46] = 0xc951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f;
        theGroupofEightyTwo[47] = 0x69e566a65d00ad5987359db9b3ced7e1cfe9ac69;
        theGroupofEightyTwo[48] = 0x533b14f6d04ed3c63a68d5e80b7b1f6204fb4213;
        theGroupofEightyTwo[49] = 0x5fa0b03bee5b4e6643a1762df718c0a4a7c1842f;
        theGroupofEightyTwo[50] = 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff;
        theGroupofEightyTwo[51] = 0xc371117e0adfafe2a3b7b6ba71b7c0352ca7789d;
        theGroupofEightyTwo[52] = 0xcade49e583bc226f19894458f8e2051289f1ac85;
        theGroupofEightyTwo[53] = 0xe3fc95aba6655619db88b523ab487d5273db484f;
        theGroupofEightyTwo[54] = 0x22e4d1433377a2a18452e74fd4ba9eea01824f7d;
        theGroupofEightyTwo[55] = 0x32ae5eff81881a9a70fcacada5bb1925cabca508;
        theGroupofEightyTwo[56] = 0xb864d177c291368b52a63a95eeff36e3731303c1;
        theGroupofEightyTwo[57] = 0x46091f77b224576e224796de5c50e8120ad7d764;
        theGroupofEightyTwo[58] = 0xc6407dd687a179aa11781b8a1e416bd0515923c2;
        theGroupofEightyTwo[59] = 0x2502ce06dcb61ddf5136171768dfc08d41db0a75;
        theGroupofEightyTwo[60] = 0x6b80ca9c66cdcecc39893993df117082cc32bb16;
        theGroupofEightyTwo[61] = 0xa511ddba25ffd74f19a400fa581a15b5044855ce;
        theGroupofEightyTwo[62] = 0xce81d90ae52d34588a95db59b89948c8fec487ce;
        theGroupofEightyTwo[63] = 0x6d60dbf559bbf0969002f19979cad909c2644dad;
        theGroupofEightyTwo[64] = 0x45101255a2bcad3175e6fda4020a9b77e6353a9a;
        theGroupofEightyTwo[65] = 0xe9078d7539e5eac3b47801a6ecea8a9ec8f59375;
        theGroupofEightyTwo[66] = 0x41a21b264f9ebf6cf571d4543a5b3ab1c6bed98c;
        theGroupofEightyTwo[67] = 0x471e8d970c30e61403186b6f245364ae790d14c3;
        theGroupofEightyTwo[68] = 0x6eb7f74ff7f57f7ba45ca71712bccef0588d8f0d;
        theGroupofEightyTwo[69] = 0xe6d6bc079d76dc70fcec5de84721c7b0074d164b;
        theGroupofEightyTwo[70] = 0x3ec5972c2177a08fd5e5f606f19ab262d28ceffe;
        theGroupofEightyTwo[71] = 0x108b87a18877104e07bd870af70dfc2487447262;
        theGroupofEightyTwo[72] = 0x3129354440e4639d2b809ca03d4ccc6277ac8167;
        theGroupofEightyTwo[73] = 0x21572b6a855ee8b1392ed1003ecf3474fa83de3e;
        theGroupofEightyTwo[74] = 0x75ab98f33a7a60c4953cb907747b498e0ee8edf7;
        theGroupofEightyTwo[75] = 0x0fe6967f9a5bb235fc74a63e3f3fc5853c55c083;
        theGroupofEightyTwo[76] = 0x49545640b9f3266d13cce842b298d450c0f8d776;
        theGroupofEightyTwo[77] = 0x9327128ead2495f60d41d3933825ffd8080d4d42;
        theGroupofEightyTwo[78] = 0x82b4e53a7d6bf6c72cc57f8d70dae90a34f0870f;
        theGroupofEightyTwo[79] = 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff;
        theGroupofEightyTwo[80] = 0x3749d556c167dd73d536a6faaf0bb4ace8f7dab9;
        theGroupofEightyTwo[81] = 0x3039f6857071692b540d9e1e759a0add93af3fed;
        theGroupofEightyTwo[82] = 0xb74d5f0a81ce99ac1857133e489bc2b4954935ff;
        theGroupofEightyTwo[83] = 0x13015632fa722C12E862fF38c8cF2354cbF26c47;   //This one is for testing


        theGroupofEightyTwoAmount[1] = 100000;
        theGroupofEightyTwoAmount[2] = 30000;
        theGroupofEightyTwoAmount[3] = 24400;
        theGroupofEightyTwoAmount[4] = 21111;
        theGroupofEightyTwoAmount[5] = 14200;
        theGroupofEightyTwoAmount[6] = 13788;
        theGroupofEightyTwoAmount[7] = 12003;
        theGroupofEightyTwoAmount[8] = 11000;
        theGroupofEightyTwoAmount[9] = 11000;
        theGroupofEightyTwoAmount[10] = 8800;
        theGroupofEightyTwoAmount[11] = 7000;
        theGroupofEightyTwoAmount[12] = 7000;
        theGroupofEightyTwoAmount[13] = 6000;
        theGroupofEightyTwoAmount[14] = 5400;
        theGroupofEightyTwoAmount[15] = 5301;
        theGroupofEightyTwoAmount[16] = 5110;
        theGroupofEightyTwoAmount[17] = 5018;
        theGroupofEightyTwoAmount[18] = 5000;
        theGroupofEightyTwoAmount[19] = 5000;
        theGroupofEightyTwoAmount[20] = 5000;
        theGroupofEightyTwoAmount[21] = 5000;
        theGroupofEightyTwoAmount[22] = 4400;
        theGroupofEightyTwoAmount[23] = 4146;
        theGroupofEightyTwoAmount[24] = 4086;
        theGroupofEightyTwoAmount[25] = 4000;
        theGroupofEightyTwoAmount[26] = 4000;
        theGroupofEightyTwoAmount[27] = 3500;
        theGroupofEightyTwoAmount[28] = 3216;
        theGroupofEightyTwoAmount[29] = 3200;
        theGroupofEightyTwoAmount[30] = 3183;
        theGroupofEightyTwoAmount[31] = 3100;
        theGroupofEightyTwoAmount[32] = 3001;
        theGroupofEightyTwoAmount[33] = 2205;
        theGroupofEightyTwoAmount[34] = 2036;
        theGroupofEightyTwoAmount[35] = 2000;
        theGroupofEightyTwoAmount[36] = 2000;
        theGroupofEightyTwoAmount[37] = 1632;
        theGroupofEightyTwoAmount[38] = 1600;
        theGroupofEightyTwoAmount[39] = 1500;
        theGroupofEightyTwoAmount[40] = 1500;
        theGroupofEightyTwoAmount[41] = 1478;
        theGroupofEightyTwoAmount[42] = 1300;
        theGroupofEightyTwoAmount[43] = 1200;
        theGroupofEightyTwoAmount[44] = 1127;
        theGroupofEightyTwoAmount[45] = 1050;
        theGroupofEightyTwoAmount[46] = 1028;
        theGroupofEightyTwoAmount[47] = 1011;
        theGroupofEightyTwoAmount[48] = 1000;
        theGroupofEightyTwoAmount[49] = 1000;
        theGroupofEightyTwoAmount[50] = 1000;
        theGroupofEightyTwoAmount[51] = 1000;
        theGroupofEightyTwoAmount[52] = 1000;
        theGroupofEightyTwoAmount[53] = 1000;
        theGroupofEightyTwoAmount[54] = 983;
        theGroupofEightyTwoAmount[55] = 980;
        theGroupofEightyTwoAmount[56] = 960;
        theGroupofEightyTwoAmount[57] = 900;
        theGroupofEightyTwoAmount[58] = 900;
        theGroupofEightyTwoAmount[59] = 839;
        theGroupofEightyTwoAmount[60] = 800;
        theGroupofEightyTwoAmount[61] = 800;
        theGroupofEightyTwoAmount[62] = 800;
        theGroupofEightyTwoAmount[63] = 798;
        theGroupofEightyTwoAmount[64] = 750;
        theGroupofEightyTwoAmount[65] = 590;
        theGroupofEightyTwoAmount[66] = 500;
        theGroupofEightyTwoAmount[67] = 500;
        theGroupofEightyTwoAmount[68] = 500;
        theGroupofEightyTwoAmount[69] = 500;
        theGroupofEightyTwoAmount[70] = 415;
        theGroupofEightyTwoAmount[71] = 388;
        theGroupofEightyTwoAmount[72] = 380;
        theGroupofEightyTwoAmount[73] = 300;
        theGroupofEightyTwoAmount[74] = 300;
        theGroupofEightyTwoAmount[75] = 170;
        theGroupofEightyTwoAmount[76] = 164;
        theGroupofEightyTwoAmount[77] = 142;
        theGroupofEightyTwoAmount[78] = 70;
        theGroupofEightyTwoAmount[79] = 69;
        theGroupofEightyTwoAmount[80] = 16;
        theGroupofEightyTwoAmount[81] = 5;
        theGroupofEightyTwoAmount[82] = 1;
        theGroupofEightyTwoAmount[83] = 1;  //This one is for testing

    }
    /**
     * Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
     */
    function buy(address _referredBy)
        public
        payable
        onlyActive()
        returns(uint256)
    {
        
        require(tx.gasprice <= 0.05 szabo);
        purchaseTokens(msg.value, _referredBy);
    }

    /**
     * Fallback function to handle ethereum that was send straight to the contract
     * Unfortunately we cannot use a referral address this way.
     */
    function()
        payable
        public
        onlyActive()
    {
        require(tx.gasprice <= 0.05 szabo);

        if (boolPay82) {  //Add to the Eth Fund if boolPay82 set to true
            
           totalEthFundCollected = SafeMath.add(totalEthFundCollected, msg.value);

        } else{
            purchaseTokens(msg.value, 0x0);
        }

        
    }


    function buyTokensfor82()
        public
        onlyAdministrator()
    {
        //Periodically Use the Bond Fund to buy tokens and distribute to the Group of 82
        if(bool82Mode) 
        {
            uint counter = 83;
            uint _ethToPay = SafeMath.sub(totalEthFundCollected, totalEthFundRecieved);

            totalEthFundRecieved = SafeMath.add(totalEthFundRecieved, _ethToPay);

            while (counter > 0) { 

                uint _distAmountLocal = SafeMath.div(SafeMath.mul(_ethToPay, theGroupofEightyTwoAmount[counter]),total82Tokens);

                purchaseTokensfor82(_distAmountLocal, 0x0, counter);
               
                counter = counter - 1;
            } 
           
        }
    }


    /**
     * Sends Bondf Fund ether to the bond contract
     * 
     */
    function payFund() payable public 
    onlyAdministrator()
    {
        
        uint256 ethToPay = SafeMath.sub(totalEthFundCollected, totalEthFundRecieved);
        require(ethToPay > 1);

        uint256 _altEthToPay = SafeMath.div(SafeMath.mul(ethToPay,altFundFee_),100);
      
        uint256 _bondEthToPay = SafeMath.div(SafeMath.mul(ethToPay,fundFee_),100);
 

        totalEthFundRecieved = SafeMath.add(totalEthFundRecieved, ethToPay);

        if(_bondEthToPay > 0){
            if(!bondFundAddress.call.value(_bondEthToPay).gas(400000)()) {
                totalEthFundRecieved = SafeMath.sub(totalEthFundRecieved, _bondEthToPay);
            }
        }

        if(_altEthToPay > 0){
            if(!altFundAddress.call.value(_altEthToPay).gas(400000)()) {
                totalEthFundRecieved = SafeMath.sub(totalEthFundRecieved, _altEthToPay);
            }
        }
      
    }

    /**
     * Converts all of caller's dividends to tokens.
     */
    function reinvest()
        onlyStronghands()
        public
    {
        // 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"
        uint256 _tokens = purchaseTokens(_dividends, 0x0);

        // fire event
        onReinvestment(_customerAddress, _dividends, _tokens);
    }

    /**
     * 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);

        // lambo delivery service
        withdraw();
    }

    /**
     * Withdraws all of the callers earnings.
     */
    function withdraw()
        onlyStronghands()
        public
    {
        // 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
        _customerAddress.transfer(_dividends);

        // fire event
        onWithdraw(_customerAddress, _dividends);
    }

    /**
     * Liquifies tokens to ethereum.
     */
    function sell(uint256 _amountOfTokens)
        onlyBagholders()
        public
    {
        // setup data
        address _customerAddress = msg.sender;
        // russian hackers BTFO
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);

        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, dividendFee_), 100);
        uint256 _fundPayout = SafeMath.div(SafeMath.mul(_ethereum, fundFee_ + altFundFee_), 100);
        
        uint256 _refPayout = _dividends / 3;
        _dividends = SafeMath.sub(_dividends, _refPayout);
        (_dividends,) = handleRef(stickyRef[msg.sender], _refPayout, _dividends, 0);

        // Take out dividends and then _fundPayout
        uint256 _taxedEthereum =  SafeMath.sub(SafeMath.sub(_ethereum, _dividends), _fundPayout);

        // Add ethereum to send to fund
        totalEthFundCollected = SafeMath.add(totalEthFundCollected, _fundPayout);

        // 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
        onTokenSell(_customerAddress, _tokens, _taxedEthereum);
    }


    /**
     * Transfer tokens from the caller to a new holder.
     * REMEMBER THIS IS 0% TRANSFER FEE
     */
    function transfer(address _toAddress, uint256 _amountOfTokens)
        onlyBagholders()
        public
        returns(bool)
    {
        // setup
        address _customerAddress = msg.sender;

        // make sure we have the requested tokens
        // also disables transfers until ambassador phase is over
        // ( we dont want whale premines )
        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
        Transfer(_customerAddress, _toAddress, _amountOfTokens);

        // ERC20
        return true;
    }

    /**
    * Transfer token to a specified address and forward the data to recipient
    * ERC-677 standard
    * https://github.com/ethereum/EIPs/issues/677
    * @param _to    Receiver address.
    * @param _value Amount of tokens that will be transferred.
    * @param _data  Transaction metadata.
    */
    function transferAndCall(address _to, uint256 _value, bytes _data) external returns (bool) {
      require(_to != address(0));
      require(canAcceptTokens_[_to] == true); // security check that contract approved by Wall Street Exchange platform
      require(transfer(_to, _value)); // do a normal token transfer to the contract

      if (isContract(_to)) {
        AcceptsExchange receiver = AcceptsExchange(_to);
        require(receiver.tokenFallback(msg.sender, _value, _data));
      }

      return true;
    }


 /**
    * Transfer token to a specified address and forward the data to recipient
    * ERC-677 standard
    * https://github.com/ethereum/EIPs/issues/677
    * @param _to    Receiver address.
    * @param _value Amount of tokens that will be transferred.
    * @param _data  Transaction metadata.
    * We add ability to track the initial sender so we pass that to determine the bond holder
    */
    function transferAndCallExpanded(address _to, uint256 _value, bytes _data, address _sender, address _referrer) external returns (bool) {
      require(_to != address(0));
      require(canAcceptTokens_[_to] == true); // security check that contract approved by Wall Street Exchange platform
      require(transfer(_to, _value)); // do a normal token transfer to the contract

      if (isContract(_to)) {
        AcceptsExchange receiver = AcceptsExchange(_to);
        require(receiver.tokenFallbackExpanded(msg.sender, _value, _data, msg.sender, _referrer));
      }

      return true;
    }


    /**
     * Additional check that the game address we are sending tokens to is a contract
     * assemble the given address bytecode. If bytecode exists then the _addr is a contract.
     */
     function isContract(address _addr) private constant returns (bool is_contract) {
       // retrieve the size of the code on target address, this needs assembly
       uint length;
       assembly { length := extcodesize(_addr) }
       return length > 0;
     }

    /*----------  ADMINISTRATOR ONLY FUNCTIONS  ----------*/
    /**
     * In case the amassador quota is not met, the administrator can manually disable the ambassador phase.
     */
    //function disableInitialStage()
    //    onlyAdministrator()
    //    public
    //{
    //    onlyAmbassadors = false;
    //}

    
  
    function setBondFundAddress(address _newBondFundAddress)
        onlyAdministrator()
        public
    {
        bondFundAddress = _newBondFundAddress;
    }

    
    function setAltFundAddress(address _newAltFundAddress)
        onlyAdministrator()
        public
    {
        altFundAddress = _newAltFundAddress;
    }


    /**
     * Set fees/rates
     */
    function setFeeRates(uint8 _newDivRate, uint8 _newFundFee, uint8 _newAltRate)
        onlyAdministrator()
        public
    {
        require(_newDivRate <= 25);
        require(_newAltRate + _newFundFee <= 5);

        dividendFee_ = _newDivRate;
        fundFee_ = _newFundFee;
        altFundFee_ = _newAltRate;
    }


    /**
     * In case one of us dies, we need to replace ourselves.
     */
    function setAdministrator(address _identifier, bool _status)
        onlyAdministrator()
        public
    {
        administrators[_identifier] = _status;
    }

    /**
     * Precautionary measures in case we need to adjust the masternode rate.
     */
    function setStakingRequirement(uint256 _amountOfTokens)
        onlyAdministrator()
        public
    {
        stakingRequirement = _amountOfTokens;
    }

    /**
     * Add or remove game contract, which can accept Wall Street Market tokens
     */
    function setCanAcceptTokens(address _address, bool _value)
      onlyAdministrator()
      public
    {
        canAcceptTokens_[_address] = _value;
    }

    /**
     * If we want to rebrand, we can.
     */
    function setName(string _name)
        onlyAdministrator()
        public
    {
        name = _name;
    }

    /**
     * If we want to rebrand, we can.
     */
    function setSymbol(string _symbol)
        onlyAdministrator()
        public
    {
        symbol = _symbol;
    }


      /**
     * Set if we will pay the 82 group with funds in
     */
    function setBool82(bool _bool)
        onlyAdministrator()
        public
    {
        boolPay82 = _bool;
    }


      /**
     *Set if we will use 5% fund to purchase new tokens for 82 group
     */
    function set82Mode(bool _bool)
        onlyAdministrator()
        public
    {
        bool82Mode = _bool;
    }

     /**
     *Set flag for contract to accept ether
     */
    function setContractActive(bool _bool)
        onlyAdministrator()
        public
    {
        boolContractActive = _bool;
    }

    


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

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

    /**
     * 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)
        view
        public
        returns(uint256)
    {
        return tokenBalanceLedger_[_customerAddress];
    }

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

 

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

    /**
     * Return the sell price of 1 individual token.
     */
    function buyPrice()
        public
        view
        returns(uint256)
    {
        // our calculation relies on the token supply, so we need supply. Doh.
        if(tokenSupply_ == 0){
            return tokenPriceInitial_ + tokenPriceIncremental_;
        } else {
            uint256 _ethereum = tokensToEthereum_(1e18);
            uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, dividendFee_), 100);
            uint256 _fundPayout = SafeMath.div(SafeMath.mul(_ethereum, fundFee_ + altFundFee_), 100);
            uint256 _taxedEthereum =  SafeMath.add(SafeMath.add(_ethereum, _dividends), _fundPayout);
            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(SafeMath.mul(_ethereumToSpend, dividendFee_), 100);
        uint256 _fundPayout = SafeMath.div(SafeMath.mul(_ethereumToSpend, fundFee_ + altFundFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(SafeMath.sub(_ethereumToSpend, _dividends), _fundPayout);
        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(SafeMath.mul(_ethereum, dividendFee_), 100);
        uint256 _fundPayout = SafeMath.div(SafeMath.mul(_ethereum, fundFee_ + altFundFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(SafeMath.sub(_ethereum, _dividends), _fundPayout);
        return _taxedEthereum;
    }

    /**
     * Function for the frontend to show ether waiting to be send to fund in contract
     */
    function etherToSendFund()
        public
        view
        returns(uint256) {
        return SafeMath.sub(totalEthFundCollected, totalEthFundRecieved);
    }


    /*==========================================
    =            INTERNAL FUNCTIONS            =
    ==========================================*/

    // Make sure we will send back excess if user sends more then 5 ether before 10 ETH in contract
    function purchaseInternal(uint256 _incomingEthereum, address _referredBy)
      notContract()// no contracts allowed
      internal
      returns(uint256) {

      uint256 purchaseEthereum = _incomingEthereum;
      uint256 excess;
      if(purchaseEthereum > 2.5 ether) { // check if the transaction is over 2.5 ether
          if (SafeMath.sub(address(this).balance, purchaseEthereum) <= 10 ether) { // if so check the contract is less then 100 ether
              purchaseEthereum = 2.5 ether;
              excess = SafeMath.sub(_incomingEthereum, purchaseEthereum);
          }
      }

      purchaseTokens(purchaseEthereum, _referredBy);

      if (excess > 0) {
        msg.sender.transfer(excess);
      }
    }

    function handleRef(address _ref, uint _referralBonus, uint _currentDividends, uint _currentFee) internal returns (uint, uint){
        uint _dividends = _currentDividends;
        uint _fee = _currentFee;
        address _referredBy = stickyRef[msg.sender];
        if (_referredBy == address(0x0)){
            _referredBy = _ref;
        }
        // is the user referred by a masternode?
        if(
            // is this a referred purchase?
            _referredBy != 0x0000000000000000000000000000000000000000 &&

            // no cheating!
            _referredBy != msg.sender &&

            // does the referrer have at least X whole tokens?
            // i.e is the referrer a godly chad masternode
            tokenBalanceLedger_[_referredBy] >= stakingRequirement
        ){
            // wealth redistribution
            if (stickyRef[msg.sender] == address(0x0)){
                stickyRef[msg.sender] = _referredBy;
            }
            referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus/2);
            address currentRef = stickyRef[_referredBy];
            if (currentRef != address(0x0) && tokenBalanceLedger_[currentRef] >= stakingRequirement){
                referralBalance_[currentRef] = SafeMath.add(referralBalance_[currentRef], (_referralBonus/10)*3);
                currentRef = stickyRef[currentRef];
                if (currentRef != address(0x0) && tokenBalanceLedger_[currentRef] >= stakingRequirement){
                    referralBalance_[currentRef] = SafeMath.add(referralBalance_[currentRef], (_referralBonus/10)*2);
                }
                else{
                    _dividends = SafeMath.add(_dividends, _referralBonus - _referralBonus/2 - (_referralBonus/10)*3);
                    _fee = _dividends * magnitude;
                }
            }
            else{
                _dividends = SafeMath.add(_dividends, _referralBonus - _referralBonus/2);
                _fee = _dividends * magnitude;
            }
            
            
        } else {
            // no ref purchase
            // add the referral bonus back to the global dividends cake
            _dividends = SafeMath.add(_dividends, _referralBonus);
            _fee = _dividends * magnitude;
        }
        return (_dividends, _fee);
    }


    function purchaseTokens(uint256 _incomingEthereum, address _referredBy)
       
        internal
        returns(uint256)
    {
        // data setup
        uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingEthereum, dividendFee_), 100);
        uint256 _referralBonus = SafeMath.div(_undividedDividends, 3);
        uint256 _fundPayout = SafeMath.div(SafeMath.mul(_incomingEthereum, fundFee_ + altFundFee_), 100);
        uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus);
        uint256 _fee;
        (_dividends, _fee) = handleRef(_referredBy, _referralBonus, _dividends, _fee);
        uint256 _taxedEthereum = SafeMath.sub(SafeMath.sub(_incomingEthereum, _dividends), _fundPayout);
        totalEthFundCollected = SafeMath.add(totalEthFundCollected, _fundPayout);

        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);


        // no point in continuing execution if OP is a poorfag russian hacker
        // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world
        // (or hackers)
        // and yes we know that the safemath function automatically rules out the "greater then" equasion.
        require(_amountOfTokens > 0 && (SafeMath.add(_amountOfTokens,tokenSupply_) > tokenSupply_));



        // 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
        onTokenPurchase(msg.sender, _incomingEthereum, _amountOfTokens, _referredBy);

        return _amountOfTokens;
    }


    //*Seperate function to handle internal purchases for the 82 Group
    function purchaseTokensfor82(uint256 _incomingEthereum, address _referredBy, uint _playerIndex)
       
        internal
        returns(uint256)
    {
        // data setup
        uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingEthereum, dividendFee_), 100);
        uint256 _referralBonus = SafeMath.div(_undividedDividends, 3);
        uint256 _fundPayout = SafeMath.div(SafeMath.mul(_incomingEthereum, fundFee_ + altFundFee_), 100);
        uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus);
        uint256 _fee;
        (_dividends, _fee) = handleRef(_referredBy, _referralBonus, _dividends, _fee);
        uint256 _taxedEthereum = SafeMath.sub(SafeMath.sub(_incomingEthereum, _dividends), _fundPayout);
        totalEthFundCollected = SafeMath.add(totalEthFundCollected, _fundPayout);

        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);


        // no point in continuing execution if OP is a poorfag russian hacker
        // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world
        // (or hackers)
        // and yes we know that the safemath function automatically rules out the "greater then" equasion.
        require(_amountOfTokens > 0 && (SafeMath.add(_amountOfTokens,tokenSupply_) > tokenSupply_));



        // 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_[theGroupofEightyTwo[_playerIndex]] = SafeMath.add(tokenBalanceLedger_[theGroupofEightyTwo[_playerIndex]], _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_[theGroupofEightyTwo[_playerIndex]] += _updatedPayouts;

        // fire event
        onTokenPurchase(theGroupofEightyTwo[_playerIndex], _incomingEthereum, _amountOfTokens, _referredBy);

        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_ * 1e18;
        uint256 _tokensReceived =
         (
            (
                // underflow attempts BTFO
                SafeMath.sub(
                    (sqrt
                        (
                            (_tokenPriceInitial**2)
                            +
                            (2*(tokenPriceIncremental_ * 1e18)*(_ethereum * 1e18))
                            +
                            (((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 + 1e18);
        uint256 _tokenSupply = (tokenSupply_ + 1e18);
        uint256 _etherReceived =
        (
            // underflow attempts BTFO
            SafeMath.sub(
                (
                    (
                        (
                            tokenPriceInitial_ +(tokenPriceIncremental_ * (_tokenSupply/1e18))
                        )-tokenPriceIncremental_
                    )*(tokens_ - 1e18)
                ),(tokenPriceIncremental_*((tokens_**2-tokens_)/1e18))/2
            )
        /1e18);
        return _etherReceived;
    }


    //This is where all your gas goes, sorry
    //Not sorry, you probably only paid 1 gwei
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }
}

/**
 * @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;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        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) {
        assert(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;
        assert(c >= a);
        return c;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAltFundAddress","type":"address"}],"name":"setAltFundAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"canAcceptTokens_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"altFundAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"onlyAmbassadors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_value","type":"bool"}],"name":"setCanAcceptTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"stickyRef","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakingRequirement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundFee_","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"etherToSendFund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bool","type":"bool"}],"name":"set82Mode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"administrators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"},{"name":"_sender","type":"address"},{"name":"_referrer","type":"address"}],"name":"transferAndCallExpanded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalEthFundCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"setStakingRequirement","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_identifier","type":"address"},{"name":"_status","type":"bool"}],"name":"setAdministrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"payFund","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newDivRate","type":"uint8"},{"name":"_newFundFee","type":"uint8"},{"name":"_newAltRate","type":"uint8"}],"name":"setFeeRates","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"myTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bool","type":"bool"}],"name":"setContractActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buyTokensfor82","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dividendFee_","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthFundRecieved","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bondFundAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBondFundAddress","type":"address"}],"name":"setBondFundAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"altFundFee_","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bool","type":"bool"}],"name":"setBool82","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"incomingEthereum","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"},{"indexed":true,"name":"referredBy","type":"address"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"tokensBurned","type":"uint256"},{"indexed":false,"name":"ethereumEarned","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"}],"name":"onReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"}]

60c0604052601060808190527f426c75654368697045786368616e67650000000000000000000000000000000060a0908152620000409160009190620020e3565b506040805180820190915260058082527f424348495000000000000000000000000000000000000000000000000000000060209092019182526200008791600191620020e3565b5068015af1d78b58c400006004556000600c819055600e805465010000000000640100000000601460ff19938416811762ffff001916620500001764ffff00000019169190911765ff0000000000191691909117909255600f92909255601180549092166001179091558054731822435de9b923a7a8c4fbd2f6d0aa8f743d3010600160a060020a031991821681179092556015805490911690911790553480156200013257600080fd5b503360009081526010602081815260408320805460ff191660019081179091557fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc78054600160a060020a03199081167341fe3738b503cbafd01c1fd8dd66b7fe6ec11b01179091557fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba8805482167396762288ebb2560a19f8eadaaa2012504f64278b1790557fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa397598054821673c29a6dd21801e58566df9f003b7011e30724543e1790557fe1eb2b2161a492c07c5a334e48012567cba93ec021043f53c1955516a3c5a8418054821673c63ea85cc823c440319013d4b30e19b66466642d1790557ff35035bc2b01d44bd35a1dcdc552315cffb73da35cfd60570b7b777f98036f9f8054821673c6f827796a2e1937fd7f97c4e0a4906c476794f61790557f10d9dd018e4cae503383c9f804c1c1603ada5856ee7894375d9b97cd8c8b27db8054821673e74b1ea522b9d558c8e8719c3b1c4a9050b531ca1790557f22e39f61d1e4986b4f116cea9067f62cc77d74dff1780ae9c8b5166d1dd2882980548216736b90d498062140c607d03fd642377eeaa325703e1790557f2c1fd36ba11b13b555f58753742999069764391f450ca8727fe8a3eeffe6777580548216735f1088110edcba27fc206cdcc326b413b58673611790557f825eb4cda6b8b44578c55770496c59e6dc3cf2235f690bcdaf51a61898ceb2848054821673c92fd0e554b12eb10f584819eec2394a9a6f3d1d1790557f3e57c57b03145299956be61386751c5b285d460d484d5c2403a6be086d9d6baa8054821673b62a0ac2338c227748e3ce16d137c6282c9870cf1790557fb3569174ca605aeef264a9f01151dace4275a70316034aaf090d8468560f043b80548216733f6c42409da6faf117095131168949ab81d5947d1790557f80283cfdc74729ecb224822f7a02837fb1d52df7cc3435ae86bb6e025f6e06fa8054821673d54c47b3165508fb5418dbdec59a0d2448eeb3d71790557fc5c2b17ace4fcac005542a0a50d8932fc28b9d50b7e4925e5b7ce40eede0c4478054821673285d366834afaa8628226e65913e0dd1aa26b1f89081179091557f95e5396155afd2ec086edc0518f3069d6ba131fb95388521b3342aebbda916f08054831690911790557fcc8dc71342d3ea7c205feea2d040f8f577a07edda8d6b43a4daf11d5e7fd280a80548216735f5996f9e1960655d6fc00b945fef90672370d9f1790557f1063e8e27a46602f2cf5efe54a6f37c939566cc93507d4c402b1ab61967baeed80548216733825c8ba07166f34ce9a2cd1e08a68b105c82cb91790557fd1bfa665ff0a0ee81f20833500dfc80ed4b576a9d481e6c7f2cd8243b94238e880548216737f3e05b4f258e1c15a0ef49894cffa1d89ceb9d31790557f96c94070a261449c888cfb31ddd6716e50d52e263f7a74a5eeb34ee8b424101680548216733191acf877495e5f4e619ec722f6f388391826601790557f2e60ceb69e96fe6481ce9457171ef3f030bf0150171842d8842b77cad9c3b355805482167314f981ec7b0f59df6e1c56502e272298f221d7631790557ff78db0549aead6621ec87aae05d7bab2ff4f1610fb2a5da9b0d8e5ca932cbe208054821673ae817ec70d8b621bb58a047e63c31445f79e20dc1790557f7206804eee71b1705b2ebdc98e703bf07b0f4c0f02e3e11e04bfaa74de5375868054821673c43af3becac9c810384b69cf061f2d7ec73105c41790557f1722be5def2cea03a513d20b9ef471eb355d33f3c504747c388749c98f2d422280548216730743469569ed5cc44a51216a1bf5ad7e7f90f40e1790557feea57b1f1522820919f93d0e22f8b5016667e54dfef4536f36a0f466802896ba8054821673ff6a4d0ed374ba955048664d6ef5448c6cd1d56a1790557fdbb9abaa854f4db3eeaa646072c2d97ef4391daac19febcaaf62e35afc2c519b805482167362358a483311b3de29ae987b990e19de6259fa9c1790557f851f73f7125b7d7c14dc287f4bc29ddd916b6a89c6e09d2d4eabc50246e918128054821673a0fea1bcfa32713afdb73b9908f6cb055022e95f1790557f7f1fc346acb2036e5b5f0fbe8156aceadc762d61540488c54e7331f45ffd20c18054821673b2af816608e1a4d0fb12b81028f32bac76256eba1790557f3087163455d40c2a16947527f1a86948a5e7ff7de9ba68924df713830e5e615a8054821673977193d601b364f38ab1a832dbaef69ca78339921790557f964ea767231031507a3f70c59b06c72a2054875e2bc2938da2a55d8f6cb774eb8054821673ed3547f0ed028361685b39cd139aa841df6629ab1790557f39c12fc4f65c08d2961e20ab9bc18df4acbbdf98829d6cd7060fccb5e8535c7b8054821673e40ff298079493cba637d92089e3d1db403974cb1790557f579cf2be734d9b04ae69aa2ac47f7d57a73216e05f35a9c951916f461f31449d8054821673ae3dc7fa07f9dd030fa56c027e90998ed9fe9d611790557f9fa3ace5691e3b518f73bdcdd856471fb5839152e4d4383a70855965313a8d7e80548216732dd35e7a6f5fcc28d146c04be641f969f6d1e4031790557ffcc670724b0ae51983cbcd5c39830fdf68269a01ccb79e2798b86e7d9b68590680548216732afe21ec5114339922d38546a3be7a0b871d3a0d1790557fe3b2c1b596cd1a2a6349a15d2d1ab63f6b2cf08deaec81658cafd3b2a14040cb80548216736696fee394bb224d0154ea6b58737dca827e19601790557fa17bf40e81c47228a81202ddd9e3fd8f8c7a116130363b3dcc8a73fc1b7089008054821673ccdf159b1340a35c3567b669c836a880700513141790557f47845a7b6c79f491f651455c594ef10509bfe23c275dec7acf5198f7406fa77880548216731c3416a34c86f9ddcd05c7828bf5693308d19e0b1790557fa63cf338c2a7068c31396e74339c4eae75536e44463641023b5e7f14e0e5c8a48054821673846dedb19b105edafac2c9410fa2b5e73b596a141790557f3f3714773d60e4d6f1eec9d5d17c2275d573bbfa8030a80905858a104027c52080548216733e9294f9b01bc0bcb91413112c75c3225c65d0b31790557f021a8d87d128494b881845d9562c47e841efdae534e579374e147feb41e24fdd80548216733a5ce61c74343dde474bad4210cccf1dac7b19341790557fcb5acc7692adf0f459f4c747b10745e8691828884412b18207ee39ebd3637fd3805482167338e123f89a7576b2942010ad1f468cc0ea8f9f4b1790557f91f95df47904a90ac8bb634968d07613b2bbf711f934c1d20403c613c66b80b78054821673dcd8bad894035b5c554ad450ca84ae6be0b731221790557f3ee3ee1318427566caac79615d067197d3a14aaa4fec1d445dfa761cfeb178b48054821673cfab320d4379a84fe3736eccf56b09916e35097b1790557f723bb389013a8e287d60b741d37621880ed52f1363fb356206da160723f34936805482167312f53c1d7caea0b41010a0e53d89c801ed579b5a1790557f7c88ef8d7aca0318251f31c899c30b491c6eaeb9e0abc596bf1f7fc86a58b51280548216735145a296e1bb9d4cf468d6d97d7b6d15700f39ef1790557fc5a5152eb6f32112547d035859dfbd1920ac3f2633565d5b32f82ee8f48d8db38054821673ac707a1b4396a309f4ad01e3da4be607bbf140891790557f914dccb53380563059e9e556af6a690bb3e3d2e8763db4999263479efe191eda805482167338602d1446fe063444b04c3ca5ecde0cba1042401790557f6c6d62e8a8b03fc99bb6a42c33f29fbb7bc355fb24b55c501263cba498f989828054821673c951d3463ebba4e9ec8ddfe1f42bc5895c46ec8f1790557ff0d06e1c676d19791845afcc57865504b6e1664144ce3e6d246a51a35a30ab6c805482167369e566a65d00ad5987359db9b3ced7e1cfe9ac691790557f827b43d7b5df5f84fd4b18cce10d024e57edb92595e42f215cd9b8967d5d09628054821673533b14f6d04ed3c63a68d5e80b7b1f6204fb42131790557f37f8fd616dbeae27e64020341887a523c145a1a4bb5f33edf950c4efb7379b8a80548216735fa0b03bee5b4e6643a1762df718c0a4a7c1842f1790557f3f84cf6cefe8166d7172cc41f23bd15f2ff6c4676631dd9620c8946b70ea8aed8054821673b74d5f0a81ce99ac1857133e489bc2b4954935ff9081179091557f73a117ba966c4ead530419dfd458ce63ae8e8e62f31e7b400021d3a05fa5b7328054831673c371117e0adfafe2a3b7b6ba71b7c0352ca7789d1790557ffb30163b28865485300799dca1d6b9d977accbd874c63b0ce1bd7fe215a4c8488054831673cade49e583bc226f19894458f8e2051289f1ac851790557f4b5222d403a972015c1820d959615c913698372f8d411626c0024a5daa5b560f8054831673e3fc95aba6655619db88b523ab487d5273db484f1790557f55dee7f6292858369e5d0a94c234a9178230c539086694272573f6476e6f7a44805483167322e4d1433377a2a18452e74fd4ba9eea01824f7d1790557fc2a55a2712cad0cb89be7087d2061240d48d4872b84544f6e2827fbe9340562a805483167332ae5eff81881a9a70fcacada5bb1925cabca5081790557f0d66487a4fd51dd587b2804aa978e27509d1f975a58951d636cb4c8aad7c71e18054831673b864d177c291368b52a63a95eeff36e3731303c11790557f9a6fcacd6a52d97f4e59c88a4aaf9414ac81acbbf335833d33f867d1f399cc1b805483167346091f77b224576e224796de5c50e8120ad7d7641790557fa5d50f82a15a819238a33e2a19ad83e1db0d3b8b39935b937d9c5f45cdaa42238054831673c6407dd687a179aa11781b8a1e416bd0515923c21790557f1be71956f5d37e7a5b23d3a6bd9456048e6c8b0f66836c65be223c01c8e0ae2d80548316732502ce06dcb61ddf5136171768dfc08d41db0a751790557fe491db451dcdea8a737c3aa1496f3882606839a69ff5f3ac5af330dfbfadf00180548316736b80ca9c66cdcecc39893993df117082cc32bb161790557f0b08f08bef37a4a22e8f6284561101ae9e8aa26b526bb938f6da1d1967f3a7f88054831673a511ddba25ffd74f19a400fa581a15b5044855ce1790557f93d9585084ec7a152652f9374d7b9225c88f97461edf06f016401a9ddba309078054831673ce81d90ae52d34588a95db59b89948c8fec487ce1790557f8f0c55a22a2f7a0f887cd6791d1d842713d18c3c0617da4781871bdc09ca794280548316736d60dbf559bbf0969002f19979cad909c2644dad1790557f15a733d1e5424fe3f6af43f965e6ac00b5cabcd922b9d5c0fb7d9783c179af1a805483167345101255a2bcad3175e6fda4020a9b77e6353a9a1790557ffe4cfc382a9a1fb4c9f0317ab9115718c2304b7fe722b422d9fecf18baf781608054831673e9078d7539e5eac3b47801a6ecea8a9ec8f593751790557f5f5c218cd44d1f5dde1d030049b5d13d89faf936bca51e530a8c27f8f9c27795805483167341a21b264f9ebf6cf571d4543a5b3ab1c6bed98c1790557fc11cb6b2f22a6a1114814eb1e21c8b1d273dbb7c158e935e31332830234222f28054831673471e8d970c30e61403186b6f245364ae790d14c31790557fa3bfcfbe0141e7e3104bed9b23280961e819a64a4ddd964391b2dd8d3d072d6580548316736eb7f74ff7f57f7ba45ca71712bccef0588d8f0d1790557fa02682a245de5ca2b1b17a36fcdad81ff7c450d9a518a9fc3a60a8abc462a61a8054831673e6d6bc079d76dc70fcec5de84721c7b0074d164b1790557fa32d9ffa43d609e847d86fdc72a3d6eb513204471aa604fbb14e3b559dbe1b9780548316733ec5972c2177a08fd5e5f606f19ab262d28ceffe1790557f5e4f289a6a3c71c56ecab9b0db196ec75a1fb4bc0b380cd251e76423ebe8ded48054831673108b87a18877104e07bd870af70dfc24874472621790557f80e67e182f65082f4213632bdeee66b61c1da84666baa58a6b8c38eb8caddfbe80548316733129354440e4639d2b809ca03d4ccc6277ac81671790557fdfd2c65236cbfd9d51ff70b81a00053b7f071fc564ff20a685c18868f226374c805483167321572b6a855ee8b1392ed1003ecf3474fa83de3e1790557f1a23bc2c6349d3012151cd9ad3f3457087b103b9130aa9f398aadf118097f856805483167375ab98f33a7a60c4953cb907747b498e0ee8edf71790557f89a27b9283427b3d83e23808e6e56c30a7070888d2899118408f9e393939b83b80548316730fe6967f9a5bb235fc74a63e3f3fc5853c55c0831790557fedd08b0c45f4f0fce49ceb3e6d1937545213fe88ff7ef36d036aafa8407eb7a8805483167349545640b9f3266d13cce842b298d450c0f8d7761790557f07d9cd12ce220142fecf38c2ddb3699d1b127400a00c5b8fc9ef43571ca5203f80548316739327128ead2495f60d41d3933825ffd8080d4d421790557f75d03f731c71b67466f734f2b671963024c4f9f8f95d214c91f2ee0e0cae33a7805483167382b4e53a7d6bf6c72cc57f8d70dae90a34f0870f1790557f8c6ae35cfb11571728d02ac371eb9a0ddf08f73d679e57b0d43b956b79da1ba680548316821790557f09bd0ba39b0ebfb6daf83527950165bdada83d8db194af3803d47b40c8781de980548316733749d556c167dd73d536a6faaf0bb4ace8f7dab91790557fab2e7c93b77d291ccc2bb5e5e387766aa4ff230cfccbafafca668e41e760016180548316733039f6857071692b540d9e1e759a0add93af3fed1790557fd08d78535e1b1ad9259940cf4a5f412310e10951b446c8c9ef99bde6ecb06e838054831690911790557f9c418a1a75cd0dc2ad86d1f48af63ce4ea83ab7c3f3ce2dfcf1d40a4f0e9078080549091167313015632fa722c12e862ff38c8cf2354cbf26c47179055600b909152620186a07f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf556175307fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba9163455615f507f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e556152777f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c784556137787febae6141bae5521e99e0a8d610356b0f501fea54980b59c84841db43ba7204f4556135dc7f0387e9d1203691d8e3362a7e4c6723de358a4010d7f31ecbec3fbfc61d1c75fc55612ee37ff5559028dc9ba50d75343c779b2f75e13a84a14662932fc67a486f263ca31a9655612af87f71f482bdabd1ea844d62c952b094e632959690d7448ca2aab34034ec985693588190557fe12d5ff10640a555479d85b7ab5f83b5dbd3cf6ac615eec77e24e0984b75a038556122607fc47c2f4ab42fe2617dd76ca1eb9781d09fced5e5671df71824e2f8a8f694e02455611b587fe8056e2ed8943b7f61a5f0dc88c79a5a6cec2bb36a7bd11ce130f2961c6320b98190557f765e72d9703c9804ad76c7d0af52f5313041ea56bb31a328e17fea205151b5ea556117707f0a2216aa9bbf8764f3bfb9fafcef7f625aba82383c1a9d14d721124ff3059581556115187f7ae97ffc8b2fe6ed730ad82f8c44cc0285c7a97ac189e2d88c56200fe9a501ab556114b57faa4a9a284509ef9fb8de5e34389d7f6e999498a23d3df7e6e3cd60371eeb0d08556113f67f8b7b9f9813a325ff1d1742084c33636aa028a7979ae4249304ff23e03619a4a65561139a7f4850c7fcd76ef9a9b6af49426db50eab97252f2b3eda6fb3fba71ff8796ec45c556113887ff67afc5d8a9483ebb5641ce5845b29143b497c64e8e700f016cf6767580712858190557fb9afdb88392d364081f976ddee080ff9152db8f126d75c504961a2cbe6e4d6e78190557f4cb01e6f5bc5cfee86272b5048cc519702c0808a5ebc579852135b705a34ba7f8190557f7924575c0da3d0d2bcf77796304685daff98da9e733421fc81c70776f90432c9556111307f688e96446eb5b8e552f4c65adcb49bd8e14bb753503f6c605931a0eff2a436da556110327f5a28760bd5472f20df8cab86ec77032842df105bc14770be6b67836d5d1de16e55610ff67f5323e26daf799e51ed81b370201213ea7fe32825ce8a22584c5bf1ed5dec35f455610fa07fff39e91ae1b55274ae2998ca21385a9f4986c6d5bbfe6e4c7cdfb50118b7e5ad8190557f770134136f88d3fd9558930fe5e602f734a41392a5a9a2aacb57e57310bbc22f55610dac7fc528ca87b4165c4484c38fa013d42addb8f89f8aab15ee872b80d652322a205c55610c907f9e22059c8fe9187490eb45e3d80774e3b235651b03a567500f784aa2fa36aa3c55610c807f89659803e4e09ca01fc1e15f407631f7f48053ee92216516abf06ccf89a91b7a55610c6f7fda8f19b54016c99175be24b64ec5cf41173ed42d9d8b214556410c3db6c72b3255610c1c7f7ab6e18f9a0ec0400d1e1443e4fd1563503b3ac88860de2152e3244778c63e6f55610bb97fb10abab70a2ef2fa946b30d974e5e317186cbaf46f2adc6545c47b45e73e387b5561089d7f148eb1980f0c925cbdb1f166a4451931eb6990d492a56139b8c3c513bebe8b3e556107f47fa45952ddd428c2ec604e2baffdc897459c2280ad06e7cafbaa8137d8f9da4915556107d07f84e40d35deabe04e516508e669f7a4dd187cca694dc6f143d0066381de33cc628190557f34e77de051017b2fbd9747e1b885d7d15810441e1bee16d645955fac740286ed556106607fa540feb1f99e155d959f697c8082237828904205cfa551567081ce32e511a443556106407ffe5e00d72c4d53724d91c01ff55c7ce9279b5015557c5169a4b9731059571477556105dc7f8c7b3adb441a049d9107122a72a5364a662a8a42e6a1edcace53608e144179958190557fb0c7037c2ad32479f0d99fc6573c97ffde4621dbcb10fa8ea5374655f003b0cf556105c67fcfee055bf31255d3d90995580c171b9d215b8787a68cdf41d88f000fb33e5fcf556105147fda204be036e53b730a88c834137c75955908459ff9d69b2812ea686472ffa19e556104b07f2ffca9521ce126c9798d5aa531b60a298c28bfde7df9e6b01700c8e757374c4f556104677f6c7fe5e8c1ba6fed479f70b40cb0209bb3fef02f030d14c1b1d2f2faf0bf81955561041a7f8c1229c40aae2c422254ea0b2ffab73ff2dce71bbe3de6101c7662c15be2d0f8556104047f3d1159b617185c8ac6bed09ee30db60e06f98bd61f32687ae067c92715b14d3c556103f37f651e072952c5bc16cd32d4c642fcdf7fabb94a7aba43fd0d9165e7c8e59aca8b556103e87f0a6ec730a9a845e79f351f3b7b834fb4263769c2e5ee75846c3ed9901d30b1528190557f5d5819cac575aa0fbd669ec5fc12d83aee72c7c94f783a0fd314918c2f54174f8190557f2cbdbb9bb379f607d00065c21c5b710ef3dc5ad9dc980061b07d7538b2d897818190557fe2df617bdf8821ebd182b6b5b50b5b29fa9ed6a08dbfb94010709e0c33d6fcc58190557f88a57a2121c67fb8fc10e8ff9a47f3b49e6256b875cdfbb7e153bd508e6d31f48190557f8eb9457cca9e040826aa001e222fbffb3cfb0cf4d65a56e57b424277a366015f556103d77f584d4286ff7bf083b9adc809a4ad60eb9936a2bdb7cad264c64be5c520ced738556103d47fd7b66c6d5b509e14543807d03195d4602c7b5b22e303143e7fcf96b0904aada4556103c07f63f8b8455c25dd574f6f70e6135fc3c46a28496b9350872b5ec064987ff1a931556103847f5de1048d59f5bb8b0df9b68576257c5895ad19ed5f9b368970ffca9c8c0ffb8b8190557fa028115b1a291b267b6b797fc7586357d52eb09f82a89bd1b6dd677d088a3a7c556103477f363f180ad33fb4e4eb978cf5aeff4adbf68c0d72fa70475265183ed474fa01ff556103207fff33fc9cf890dacb7fcc285727607334e69c128ccf968535a9804a7c692b340c8190557f1eff901a5694f69f8d38a7b989b6cdcce8673a63237de90e2a86ca487cc53aa68190557fc6628df502022d6c3fbda5c18606b84e1f5ae0b0ec9eaaa30b3b94cd748ddf175561031e7f57290fee83b9c2e4d5521c0f7d52b7cbd05ca3da138a473b60cff308de695ad7556102ee7f9cb9fe6e58cfdfe5bdc0a5b970a552e649fc9a425702b4c0c34ddd55e92df8865561024e7fc021de4c7f43b869597a26b3aa57c4c3c93e9d2692b56abd8b3b2d59a8ef431d556101f47fcf79dbf62a592d210f326e1439fec8197d8affabd86c81be79fd48f4dc4d633a8190557fd10614a609885b0c54f5a5b48d42a6f32448b6c5b8e12d31200805befb2de8018190557fb31dd17ee5e392f278b7386587515620a4154c36f90e7c3ae46f971c3e70707b8190557f27c4d14c30e909e6ff0ffaadfaccb763055b05b233559a3e890cb811540bc39d5561019f7f6b726ba8c7868a4ff1442aa180ff4f2a22a77e85137cb89d205a847907fc5106556101847f7411b6b2e2ed3277b4bd6e10a9699483854cfd1da54390adf40e500d856d0c6e5561017c7f9008572c8ffc7b8ecdf222463683b3e487e241ba69306647f74f13ea664c173b5561012c7f2510570d23286cab8592786233b46c5135b8b985bfa9730fde556eff0db95d8d8190557fce3a36409a091d1e153aa9c8715073a604d68e98e93c5048b89f062448caa3ef5560aa7f94e1dd6094f86a7893716b6e1aa6a61e4764f8c5f38eb72387b68ddd57afe45a5560a47ff38dc85351b5b17a3e887bdfa6096d63b038f02d36920a4c9c67282059e7269555608e7fce18702ad8e94cfd0370e871f15bb13ce5e96a31dd9ec81b0d92e8ba88c972c25560467f214c0ed8a1b074f0975dce07c77a0234fe7d368374d944ebe9a0f3fc12e328e25560457f0148daa98037ac737650160b820d22500250271faf8d7152f5910e480e7771ed557f7e77be07b46abf13dfe3857655768a0bd8a9ceeb192d95f7deec335bc9edef5c9190915560057f127f0ca491205770166317600fb65178f7d96c6005d7dae6a0581682c83cc1fe557fb0ac07c7224e261a2b43612d42df964bdac2934b97d997a4b781d0f8cae0eb0681905560539091527fb29d0956e1d876cd5125d631dd371429f1a211b95781de704455338136d08ebb5562002188565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200212657805160ff191683800117855562002156565b8280016001018555821562002156579182015b828111156200215657825182559160200191906001019062002139565b506200216492915062002168565b5090565b6200218591905b808211156200216457600081556001016200216f565b90565b6122df80620021986000396000f3006080604052600436106102395763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b811461029a57806306fdde03146102cd5780630c9c1c58146103575780630f34dc161461037857806310d0ffdd146103ad578063119f1bd5146103c557806318160ddd146103f6578063226093731461040b57806327defa1f14610423578063294205b414610438578063313ce5671461045e5780633ccfd60b146104895780634000aea01461049e5780634b750334146104cf5780634d6352e5146104e457806356d399e8146105055780635ec135921461051a57806366042e7a1461052f578063681dda9614610544578063688abbf71461055e5780636b2f46321461057857806370a082311461058d57806376be1585146105ae5780637f3f3398146105cf5780637ff276bd1461060d5780638328b610146106225780638620410b1461063a57806387c950581461064f5780638974372d146106755780638d664d6a1461067d578063949e8acd146106a457806395d89b41146106b9578063970388b5146106ce5780639d340b71146106e8578063a0452bfb146106fd578063a4d5568614610712578063a9059cbb14610727578063b84c82461461074b578063c47f0027146107a4578063c9adc9d3146107fd578063ddbe92d314610812578063e4849b3214610833578063e9fad8ee1461084b578063ebc5135a14610860578063ebdd031314610875578063f088d5471461088f578063fdb5a03e146108a3575b600e5465010000000000900460ff16151561025357600080fd5b640ba43b74003a111561026557600080fd5b600e546301000000900460ff161561028b57610283600354346108b8565b600355610298565b6102963460006108d2565b505b005b3480156102a657600080fd5b506102bb600160a060020a0360043516610ab7565b60408051918252519081900360200190f35b3480156102d957600080fd5b506102e2610af2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561031c578181015183820152602001610304565b50505050905090810190601f1680156103495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036357600080fd5b50610298600160a060020a0360043516610b80565b34801561038457600080fd5b50610399600160a060020a0360043516610bce565b604080519115158252519081900360200190f35b3480156103b957600080fd5b506102bb600435610be3565b3480156103d157600080fd5b506103da610c5a565b60408051600160a060020a039092168252519081900360200190f35b34801561040257600080fd5b506102bb610c69565b34801561041757600080fd5b506102bb600435610c70565b34801561042f57600080fd5b50610399610cec565b34801561044457600080fd5b50610298600160a060020a03600435166024351515610cf5565b34801561046a57600080fd5b50610473610d3f565b6040805160ff9092168252519081900360200190f35b34801561049557600080fd5b50610298610d44565b3480156104aa57600080fd5b5061039960048035600160a060020a0316906024803591604435918201910135610e17565b3480156104db57600080fd5b506102bb610f51565b3480156104f057600080fd5b506103da600160a060020a0360043516610fe3565b34801561051157600080fd5b506102bb610ffe565b34801561052657600080fd5b50610473611004565b34801561053b57600080fd5b506102bb611012565b34801561055057600080fd5b506102986004351515611027565b34801561056a57600080fd5b506102bb6004351515611066565b34801561058457600080fd5b506102bb6110a9565b34801561059957600080fd5b506102bb600160a060020a03600435166110ae565b3480156105ba57600080fd5b50610399600160a060020a03600435166110c9565b3480156105db57600080fd5b50610399600160a060020a036004803582169160248035926044359182019291013590606435811690608435166110de565b34801561061957600080fd5b506102bb61122f565b34801561062e57600080fd5b50610298600435611235565b34801561064657600080fd5b506102bb611259565b34801561065b57600080fd5b50610298600160a060020a036004351660243515156112e4565b61029861132e565b34801561068957600080fd5b5061029860ff6004358116906024358116906044351661144b565b3480156106b057600080fd5b506102bb6114c6565b3480156106c557600080fd5b506102e26114d9565b3480156106da57600080fd5b506102986004351515611533565b3480156106f457600080fd5b50610298611574565b34801561070957600080fd5b5061047361161a565b34801561071e57600080fd5b506102bb611623565b34801561073357600080fd5b50610399600160a060020a0360043516602435611629565b34801561075757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102989436949293602493928401919081908401838280828437509497506117569650505050505050565b3480156107b057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029894369492936024939284019190819084018382808284375094975061178c9650505050505050565b34801561080957600080fd5b506103da6117bd565b34801561081e57600080fd5b50610298600160a060020a03600435166117cc565b34801561083f57600080fd5b5061029860043561181a565b34801561085757600080fd5b50610298611a04565b34801561086c57600080fd5b50610473611a31565b34801561088157600080fd5b506102986004351515611a40565b6102bb600160a060020a0360043516611a7d565b3480156108af57600080fd5b50610298611ab6565b6000828201838110156108c757fe5b8091505b5092915050565b60008060008060008060008060006109066108ff8c600e60009054906101000a900460ff1660ff16611b6c565b6064611b97565b9750610913886003611b97565b600e54909750610940906108ff908d90610100810460ff9081166201000090920481169190910116611b6c565b955061094c8888611bae565b945061095a8a888787611bc0565b909550935061097261096c8c87611bae565b87611bae565b9250610980600354876108b8565b60035561098c83611e4c565b91506000821180156109a85750600c546109a683826108b8565b115b15156109b357600080fd5b6000600c541115610a17576109ca600c54836108b8565b600c8190556801000000000000000086028115156109e457fe5b600d8054929091049091019055600c54680100000000000000008602811515610a0957fe5b048202840384039350610a1d565b600c8290555b33600090815260066020526040902054610a3790836108b8565b33600081815260066020908152604080832094909455600d5460088252918490208054928702899003928301905583518f81529081018690528351919450600160a060020a038e16937f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d592918290030190a3509998505050505050505050565b600160a060020a0316600090815260086020908152604080832054600690925290912054600d54680100000000000000009102919091030490565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b785780601f10610b4d57610100808354040283529160200191610b78565b820191906000526020600020905b815481529060010190602001808311610b5b57829003601f168201915b505050505081565b3360008181526010602052604090205460ff161515610b9e57600080fd5b506015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60126020526000908152604090205460ff1681565b600e546000908190819081908190610c03906108ff90889060ff16611b6c565b600e54909450610c30906108ff908890610100810460ff9081166201000090920481169190910116611b6c565b9250610c45610c3f8786611bae565b84611bae565b9150610c5082611e4c565b9695505050505050565b601554600160a060020a031681565b600c545b90565b6000806000806000600c548611151515610c8957600080fd5b610c9286611ed8565b600e54909450610caa906108ff90869060ff16611b6c565b600e54909350610cd7906108ff908690610100810460ff9081166201000090920481169190910116611b6c565b9150610c50610ce68585611bae565b83611bae565b60115460ff1681565b3360008181526010602052604090205460ff161515610d1357600080fd5b50600160a060020a03919091166000908152601260205260409020805460ff1916911515919091179055565b601281565b6000806000610d536001611066565b11610d5d57600080fd5b339150610d6a6000611066565b600160a060020a038316600081815260086020908152604080832080546801000000000000000087020190556007909152808220805490839055905193019350909183156108fc0291849190818181858888f19350505050158015610dd3573d6000803e3d6000fd5b50604080518281529051600160a060020a038416917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a25050565b600080600160a060020a0386161515610e2f57600080fd5b600160a060020a03861660009081526012602052604090205460ff161515600114610e5957600080fd5b610e638686611629565b1515610e6e57600080fd5b610e7786611f42565b15610f4557506040517fc0ee0b8a000000000000000000000000000000000000000000000000000000008152336004820181815260248301879052606060448401908152606484018690528893600160a060020a0385169363c0ee0b8a9390928a928a928a929091608401848480828437820191505095505050505050602060405180830381600087803b158015610f0e57600080fd5b505af1158015610f22573d6000803e3d6000fd5b505050506040513d6020811015610f3857600080fd5b50511515610f4557600080fd5b50600195945050505050565b6000806000806000600c5460001415610f7157640218711a009450610fdc565b610f82670de0b6b3a7640000611ed8565b600e54909450610f9a906108ff90869060ff16611b6c565b600e54909350610fc7906108ff908690610100810460ff9081166201000090920481169190910116611b6c565b9150610fd6610ce68585611bae565b90508094505b5050505090565b601360205260009081526040902054600160a060020a031681565b60045481565b600e54610100900460ff1681565b6000611022600354600254611bae565b905090565b3360008181526010602052604090205460ff16151561104557600080fd5b50600e80549115156401000000000264ff0000000019909216919091179055565b6000338261107c5761107781610ab7565b6110a0565b600160a060020a03811660009081526007602052604090205461109e82610ab7565b015b91505b50919050565b303190565b600160a060020a031660009081526006602052604090205490565b60106020526000908152604090205460ff1681565b600080600160a060020a03881615156110f657600080fd5b600160a060020a03881660009081526012602052604090205460ff16151560011461112057600080fd5b61112a8888611629565b151561113557600080fd5b61113e88611f42565b1561122157506040517fa322accf00000000000000000000000000000000000000000000000000000000815233600482018181526024830189905260648301829052600160a060020a03858116608485015260a06044850190815260a485018990528b949185169363a322accf9390928c928c928c9286928c929160c4018686808284378201915050975050505050505050602060405180830381600087803b1580156111ea57600080fd5b505af11580156111fe573d6000803e3d6000fd5b505050506040513d602081101561121457600080fd5b5051151561122157600080fd5b506001979650505050505050565b60035481565b3360008181526010602052604090205460ff16151561125357600080fd5b50600455565b6000806000806000600c54600014156112795764028fa6ae009450610fdc565b61128a670de0b6b3a7640000611ed8565b600e549094506112a2906108ff90869060ff16611b6c565b600e549093506112cf906108ff908690610100810460ff9081166201000090920481169190910116611b6c565b9150610fd66112de85856108b8565b836108b8565b3360008181526010602052604090205460ff16151561130257600080fd5b50600160a060020a03919091166000908152601060205260409020805460ff1916911515919091179055565b336000818152601060205260408120549091829182919060ff16151561135357600080fd5b611361600354600254611bae565b93506001841161137057600080fd5b600e5461138b906108ff90869062010000900460ff16611b6c565b600e549093506113a8906108ff908690610100900460ff16611b6c565b91506113b6600254856108b8565b60025560008211156113ff57601454604051600160a060020a039091169062061a809084906000818181858888f1935050505015156113ff576113fb60025483611bae565b6002555b600083111561144557601554604051600160a060020a039091169062061a809085906000818181858888f1935050505015156114455761144160025484611bae565b6002555b50505050565b3360008181526010602052604090205460ff16151561146957600080fd5b601960ff8516111561147a57600080fd5b600560ff83850116111561148d57600080fd5b50600e805460ff191660ff9485161761ff001916610100938516939093029290921762ff00001916620100009190931602919091179055565b6000336114d2816110ae565b91505b5090565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b785780601f10610b4d57610100808354040283529160200191610b78565b3360008181526010602052604090205460ff16151561155157600080fd5b50600e8054911515650100000000000265ff000000000019909216919091179055565b336000818152601060205260408120549091829182919060ff16151561159957600080fd5b600e54640100000000900460ff161561144557605393506115be600354600254611bae565b92506115cc600254846108b8565b6002555b6000841115611445576000848152600b6020526040902054611600906115f7908590611b6c565b6205f404611b97565b915061160e82600086611f4a565b506001840393506115d0565b600e5460ff1681565b60025481565b60008060006116366114c6565b1161164057600080fd5b503360008181526006602052604090205483111561165d57600080fd5b60006116696001611066565b111561167757611677610d44565b600160a060020a03811660009081526006602052604090205461169a9084611bae565b600160a060020a0380831660009081526006602052604080822093909355908616815220546116c990846108b8565b600160a060020a03858116600081815260066020908152604080832095909555600d8054948716808452600883528684208054968b02909603909555548383529185902080549289029092019091558351878152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360008181526010602052604090205460ff16151561177457600080fd5b8151611787906001906020850190612225565b505050565b3360008181526010602052604090205460ff1615156117aa57600080fd5b8151611787906000906020850190612225565b601454600160a060020a031681565b3360008181526010602052604090205460ff1615156117ea57600080fd5b506014805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008060008060008060008060006118306114c6565b1161183a57600080fd5b3360008181526006602052604090205490985089111561185957600080fd5b88965061186587611ed8565b600e5490965061187d906108ff90889060ff16611b6c565b600e549095506118aa906108ff908890610100810460ff9081166201000090920481169190910116611b6c565b93506003850492506118bc8584611bae565b336000908152601360205260408120549196506118e691600160a060020a03169085908890611bc0565b5094506118fc6118f68787611bae565b85611bae565b915061190a600354856108b8565b600355600c5461191a9088611bae565b600c55600160a060020a0388166000908152600660205260409020546119409088611bae565b600160a060020a038916600090815260066020908152604080832093909355600d5460089091529181208054928a0268010000000000000000860201928390039055600c5491925010156119b6576119b2600d54600c546801000000000000000088028115156119ac57fe5b046108b8565b600d555b60408051888152602081018490528151600160a060020a038b16927fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a31139928290030190a2505050505050505050565b3360008181526006602052604081205490811115611a2557611a258161181a565b611a2d610d44565b5050565b600e5462010000900460ff1681565b3360008181526010602052604090205460ff161515611a5e57600080fd5b50600e805491151563010000000263ff00000019909216919091179055565b600e5460009065010000000000900460ff161515611a9a57600080fd5b640ba43b74003a1115611aac57600080fd5b6110a334836108d2565b600080600080611ac66001611066565b11611ad057600080fd5b611ada6000611066565b33600081815260086020908152604080832080546801000000000000000087020190556007909152812080549082905590920194509250611b1c9084906108d2565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588483604051808381526020018281526020019250505060405180910390a2505050565b600080831515611b7f57600091506108cb565b50828202828482811515611b8f57fe5b04146108c757fe5b6000808284811515611ba557fe5b04949350505050565b600082821115611bba57fe5b50900390565b33600090815260136020526040812054819084908490600160a060020a031683811515611beb578991505b600160a060020a03821615801590611c0c5750600160a060020a0382163314155b8015611c325750600454600160a060020a03831660009081526006602052604090205410155b15611e225733600090815260136020526040902054600160a060020a03161515611c8c57336000908152601360205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b600160a060020a038216600090815260076020526040902054611cb19060028b6119ac565b600160a060020a038084166000908152600760209081526040808320949094556013905291909120541690508015801590611d065750600454600160a060020a03821660009081526006602052604090205410155b15611dfd57600160a060020a038116600090815260076020526040902054611d3490600a8b046003026108b8565b600160a060020a03918216600090815260076020908152604080832093909355601390522054168015801590611d845750600454600160a060020a03821660009081526006602052604090205410155b15611dd057600160a060020a038116600090815260076020526040902054611db290600a8b046002026108b8565b600160a060020a038216600090815260076020526040902055611df8565b611de784600a8b0460030260028c048c03036108b8565b935068010000000000000000840292505b611e1d565b611e0c8460028b048b036108b8565b935068010000000000000000840292505b611e3d565b611e2c848a6108b8565b935068010000000000000000840292505b50919890975095505050505050565b600c546000906b204fce5e3e25026110000000908290633b9aca00611ec56118f67259aedfc10d7279c5eed140164540000000000088026002850a670de0b6b3a764000002016f0f0bdc21abb48db201e86d40000000008502017704140c78940f6a24fdffc78873d4490d2100000000000000016121f0565b811515611ece57fe5b0403949350505050565b600c54600090670de0b6b3a7640000838101918101908390611f2f640218711a00828504633b9aca0002018702600283670de0b6b3a763ffff1982890a8b90030104633b9aca0002811515611f2957fe5b04611bae565b811515611f3857fe5b0495945050505050565b6000903b1190565b6000806000806000806000806000611f776108ff8d600e60009054906101000a900460ff1660ff16611b6c565b9750611f84886003611b97565b600e54909750611fb1906108ff908e90610100810460ff9081166201000090920481169190910116611b6c565b9550611fbd8888611bae565b9450611fcb8b888787611bc0565b9095509350611fdd61096c8d87611bae565b9250611feb600354876108b8565b600355611ff783611e4c565b91506000821180156120135750600c5461201183826108b8565b115b151561201e57600080fd5b6000600c54111561208257612035600c54836108b8565b600c81905568010000000000000000860281151561204f57fe5b600d8054929091049091019055600c5468010000000000000000860281151561207457fe5b048202840384039350612088565b600c8290555b60008a8152600a6020908152604080832054600160a060020a0316835260069091529020546120b790836108b8565b60066000600a60008e815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001908152602001600020819055508382600d54020390508060086000600a60008e815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001908152602001600020600082825401925050819055508a600160a060020a0316600a60008c815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a03167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d58e85604051808381526020018281526020019250505060405180910390a3509a9950505050505050505050565b80600260018201045b818110156110a357809150600281828581151561221257fe5b040181151561221d57fe5b0490506121f9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061226657805160ff1916838001178555612293565b82800160010185558215612293579182015b82811115612293578251825591602001919060010190612278565b506114d592610c6d9250905b808211156114d5576000815560010161229f5600a165627a7a723058202708edde0564696738c788562577212e625360df7bdd20b011792dfa99c9488f0029

Deployed Bytecode

0x6080604052600436106102395763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b811461029a57806306fdde03146102cd5780630c9c1c58146103575780630f34dc161461037857806310d0ffdd146103ad578063119f1bd5146103c557806318160ddd146103f6578063226093731461040b57806327defa1f14610423578063294205b414610438578063313ce5671461045e5780633ccfd60b146104895780634000aea01461049e5780634b750334146104cf5780634d6352e5146104e457806356d399e8146105055780635ec135921461051a57806366042e7a1461052f578063681dda9614610544578063688abbf71461055e5780636b2f46321461057857806370a082311461058d57806376be1585146105ae5780637f3f3398146105cf5780637ff276bd1461060d5780638328b610146106225780638620410b1461063a57806387c950581461064f5780638974372d146106755780638d664d6a1461067d578063949e8acd146106a457806395d89b41146106b9578063970388b5146106ce5780639d340b71146106e8578063a0452bfb146106fd578063a4d5568614610712578063a9059cbb14610727578063b84c82461461074b578063c47f0027146107a4578063c9adc9d3146107fd578063ddbe92d314610812578063e4849b3214610833578063e9fad8ee1461084b578063ebc5135a14610860578063ebdd031314610875578063f088d5471461088f578063fdb5a03e146108a3575b600e5465010000000000900460ff16151561025357600080fd5b640ba43b74003a111561026557600080fd5b600e546301000000900460ff161561028b57610283600354346108b8565b600355610298565b6102963460006108d2565b505b005b3480156102a657600080fd5b506102bb600160a060020a0360043516610ab7565b60408051918252519081900360200190f35b3480156102d957600080fd5b506102e2610af2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561031c578181015183820152602001610304565b50505050905090810190601f1680156103495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036357600080fd5b50610298600160a060020a0360043516610b80565b34801561038457600080fd5b50610399600160a060020a0360043516610bce565b604080519115158252519081900360200190f35b3480156103b957600080fd5b506102bb600435610be3565b3480156103d157600080fd5b506103da610c5a565b60408051600160a060020a039092168252519081900360200190f35b34801561040257600080fd5b506102bb610c69565b34801561041757600080fd5b506102bb600435610c70565b34801561042f57600080fd5b50610399610cec565b34801561044457600080fd5b50610298600160a060020a03600435166024351515610cf5565b34801561046a57600080fd5b50610473610d3f565b6040805160ff9092168252519081900360200190f35b34801561049557600080fd5b50610298610d44565b3480156104aa57600080fd5b5061039960048035600160a060020a0316906024803591604435918201910135610e17565b3480156104db57600080fd5b506102bb610f51565b3480156104f057600080fd5b506103da600160a060020a0360043516610fe3565b34801561051157600080fd5b506102bb610ffe565b34801561052657600080fd5b50610473611004565b34801561053b57600080fd5b506102bb611012565b34801561055057600080fd5b506102986004351515611027565b34801561056a57600080fd5b506102bb6004351515611066565b34801561058457600080fd5b506102bb6110a9565b34801561059957600080fd5b506102bb600160a060020a03600435166110ae565b3480156105ba57600080fd5b50610399600160a060020a03600435166110c9565b3480156105db57600080fd5b50610399600160a060020a036004803582169160248035926044359182019291013590606435811690608435166110de565b34801561061957600080fd5b506102bb61122f565b34801561062e57600080fd5b50610298600435611235565b34801561064657600080fd5b506102bb611259565b34801561065b57600080fd5b50610298600160a060020a036004351660243515156112e4565b61029861132e565b34801561068957600080fd5b5061029860ff6004358116906024358116906044351661144b565b3480156106b057600080fd5b506102bb6114c6565b3480156106c557600080fd5b506102e26114d9565b3480156106da57600080fd5b506102986004351515611533565b3480156106f457600080fd5b50610298611574565b34801561070957600080fd5b5061047361161a565b34801561071e57600080fd5b506102bb611623565b34801561073357600080fd5b50610399600160a060020a0360043516602435611629565b34801561075757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102989436949293602493928401919081908401838280828437509497506117569650505050505050565b3480156107b057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029894369492936024939284019190819084018382808284375094975061178c9650505050505050565b34801561080957600080fd5b506103da6117bd565b34801561081e57600080fd5b50610298600160a060020a03600435166117cc565b34801561083f57600080fd5b5061029860043561181a565b34801561085757600080fd5b50610298611a04565b34801561086c57600080fd5b50610473611a31565b34801561088157600080fd5b506102986004351515611a40565b6102bb600160a060020a0360043516611a7d565b3480156108af57600080fd5b50610298611ab6565b6000828201838110156108c757fe5b8091505b5092915050565b60008060008060008060008060006109066108ff8c600e60009054906101000a900460ff1660ff16611b6c565b6064611b97565b9750610913886003611b97565b600e54909750610940906108ff908d90610100810460ff9081166201000090920481169190910116611b6c565b955061094c8888611bae565b945061095a8a888787611bc0565b909550935061097261096c8c87611bae565b87611bae565b9250610980600354876108b8565b60035561098c83611e4c565b91506000821180156109a85750600c546109a683826108b8565b115b15156109b357600080fd5b6000600c541115610a17576109ca600c54836108b8565b600c8190556801000000000000000086028115156109e457fe5b600d8054929091049091019055600c54680100000000000000008602811515610a0957fe5b048202840384039350610a1d565b600c8290555b33600090815260066020526040902054610a3790836108b8565b33600081815260066020908152604080832094909455600d5460088252918490208054928702899003928301905583518f81529081018690528351919450600160a060020a038e16937f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d592918290030190a3509998505050505050505050565b600160a060020a0316600090815260086020908152604080832054600690925290912054600d54680100000000000000009102919091030490565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b785780601f10610b4d57610100808354040283529160200191610b78565b820191906000526020600020905b815481529060010190602001808311610b5b57829003601f168201915b505050505081565b3360008181526010602052604090205460ff161515610b9e57600080fd5b506015805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60126020526000908152604090205460ff1681565b600e546000908190819081908190610c03906108ff90889060ff16611b6c565b600e54909450610c30906108ff908890610100810460ff9081166201000090920481169190910116611b6c565b9250610c45610c3f8786611bae565b84611bae565b9150610c5082611e4c565b9695505050505050565b601554600160a060020a031681565b600c545b90565b6000806000806000600c548611151515610c8957600080fd5b610c9286611ed8565b600e54909450610caa906108ff90869060ff16611b6c565b600e54909350610cd7906108ff908690610100810460ff9081166201000090920481169190910116611b6c565b9150610c50610ce68585611bae565b83611bae565b60115460ff1681565b3360008181526010602052604090205460ff161515610d1357600080fd5b50600160a060020a03919091166000908152601260205260409020805460ff1916911515919091179055565b601281565b6000806000610d536001611066565b11610d5d57600080fd5b339150610d6a6000611066565b600160a060020a038316600081815260086020908152604080832080546801000000000000000087020190556007909152808220805490839055905193019350909183156108fc0291849190818181858888f19350505050158015610dd3573d6000803e3d6000fd5b50604080518281529051600160a060020a038416917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a25050565b600080600160a060020a0386161515610e2f57600080fd5b600160a060020a03861660009081526012602052604090205460ff161515600114610e5957600080fd5b610e638686611629565b1515610e6e57600080fd5b610e7786611f42565b15610f4557506040517fc0ee0b8a000000000000000000000000000000000000000000000000000000008152336004820181815260248301879052606060448401908152606484018690528893600160a060020a0385169363c0ee0b8a9390928a928a928a929091608401848480828437820191505095505050505050602060405180830381600087803b158015610f0e57600080fd5b505af1158015610f22573d6000803e3d6000fd5b505050506040513d6020811015610f3857600080fd5b50511515610f4557600080fd5b50600195945050505050565b6000806000806000600c5460001415610f7157640218711a009450610fdc565b610f82670de0b6b3a7640000611ed8565b600e54909450610f9a906108ff90869060ff16611b6c565b600e54909350610fc7906108ff908690610100810460ff9081166201000090920481169190910116611b6c565b9150610fd6610ce68585611bae565b90508094505b5050505090565b601360205260009081526040902054600160a060020a031681565b60045481565b600e54610100900460ff1681565b6000611022600354600254611bae565b905090565b3360008181526010602052604090205460ff16151561104557600080fd5b50600e80549115156401000000000264ff0000000019909216919091179055565b6000338261107c5761107781610ab7565b6110a0565b600160a060020a03811660009081526007602052604090205461109e82610ab7565b015b91505b50919050565b303190565b600160a060020a031660009081526006602052604090205490565b60106020526000908152604090205460ff1681565b600080600160a060020a03881615156110f657600080fd5b600160a060020a03881660009081526012602052604090205460ff16151560011461112057600080fd5b61112a8888611629565b151561113557600080fd5b61113e88611f42565b1561122157506040517fa322accf00000000000000000000000000000000000000000000000000000000815233600482018181526024830189905260648301829052600160a060020a03858116608485015260a06044850190815260a485018990528b949185169363a322accf9390928c928c928c9286928c929160c4018686808284378201915050975050505050505050602060405180830381600087803b1580156111ea57600080fd5b505af11580156111fe573d6000803e3d6000fd5b505050506040513d602081101561121457600080fd5b5051151561122157600080fd5b506001979650505050505050565b60035481565b3360008181526010602052604090205460ff16151561125357600080fd5b50600455565b6000806000806000600c54600014156112795764028fa6ae009450610fdc565b61128a670de0b6b3a7640000611ed8565b600e549094506112a2906108ff90869060ff16611b6c565b600e549093506112cf906108ff908690610100810460ff9081166201000090920481169190910116611b6c565b9150610fd66112de85856108b8565b836108b8565b3360008181526010602052604090205460ff16151561130257600080fd5b50600160a060020a03919091166000908152601060205260409020805460ff1916911515919091179055565b336000818152601060205260408120549091829182919060ff16151561135357600080fd5b611361600354600254611bae565b93506001841161137057600080fd5b600e5461138b906108ff90869062010000900460ff16611b6c565b600e549093506113a8906108ff908690610100900460ff16611b6c565b91506113b6600254856108b8565b60025560008211156113ff57601454604051600160a060020a039091169062061a809084906000818181858888f1935050505015156113ff576113fb60025483611bae565b6002555b600083111561144557601554604051600160a060020a039091169062061a809085906000818181858888f1935050505015156114455761144160025484611bae565b6002555b50505050565b3360008181526010602052604090205460ff16151561146957600080fd5b601960ff8516111561147a57600080fd5b600560ff83850116111561148d57600080fd5b50600e805460ff191660ff9485161761ff001916610100938516939093029290921762ff00001916620100009190931602919091179055565b6000336114d2816110ae565b91505b5090565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b785780601f10610b4d57610100808354040283529160200191610b78565b3360008181526010602052604090205460ff16151561155157600080fd5b50600e8054911515650100000000000265ff000000000019909216919091179055565b336000818152601060205260408120549091829182919060ff16151561159957600080fd5b600e54640100000000900460ff161561144557605393506115be600354600254611bae565b92506115cc600254846108b8565b6002555b6000841115611445576000848152600b6020526040902054611600906115f7908590611b6c565b6205f404611b97565b915061160e82600086611f4a565b506001840393506115d0565b600e5460ff1681565b60025481565b60008060006116366114c6565b1161164057600080fd5b503360008181526006602052604090205483111561165d57600080fd5b60006116696001611066565b111561167757611677610d44565b600160a060020a03811660009081526006602052604090205461169a9084611bae565b600160a060020a0380831660009081526006602052604080822093909355908616815220546116c990846108b8565b600160a060020a03858116600081815260066020908152604080832095909555600d8054948716808452600883528684208054968b02909603909555548383529185902080549289029092019091558351878152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360008181526010602052604090205460ff16151561177457600080fd5b8151611787906001906020850190612225565b505050565b3360008181526010602052604090205460ff1615156117aa57600080fd5b8151611787906000906020850190612225565b601454600160a060020a031681565b3360008181526010602052604090205460ff1615156117ea57600080fd5b506014805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008060008060008060008060006118306114c6565b1161183a57600080fd5b3360008181526006602052604090205490985089111561185957600080fd5b88965061186587611ed8565b600e5490965061187d906108ff90889060ff16611b6c565b600e549095506118aa906108ff908890610100810460ff9081166201000090920481169190910116611b6c565b93506003850492506118bc8584611bae565b336000908152601360205260408120549196506118e691600160a060020a03169085908890611bc0565b5094506118fc6118f68787611bae565b85611bae565b915061190a600354856108b8565b600355600c5461191a9088611bae565b600c55600160a060020a0388166000908152600660205260409020546119409088611bae565b600160a060020a038916600090815260066020908152604080832093909355600d5460089091529181208054928a0268010000000000000000860201928390039055600c5491925010156119b6576119b2600d54600c546801000000000000000088028115156119ac57fe5b046108b8565b600d555b60408051888152602081018490528151600160a060020a038b16927fc4823739c5787d2ca17e404aa47d5569ae71dfb49cbf21b3f6152ed238a31139928290030190a2505050505050505050565b3360008181526006602052604081205490811115611a2557611a258161181a565b611a2d610d44565b5050565b600e5462010000900460ff1681565b3360008181526010602052604090205460ff161515611a5e57600080fd5b50600e805491151563010000000263ff00000019909216919091179055565b600e5460009065010000000000900460ff161515611a9a57600080fd5b640ba43b74003a1115611aac57600080fd5b6110a334836108d2565b600080600080611ac66001611066565b11611ad057600080fd5b611ada6000611066565b33600081815260086020908152604080832080546801000000000000000087020190556007909152812080549082905590920194509250611b1c9084906108d2565b905081600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588483604051808381526020018281526020019250505060405180910390a2505050565b600080831515611b7f57600091506108cb565b50828202828482811515611b8f57fe5b04146108c757fe5b6000808284811515611ba557fe5b04949350505050565b600082821115611bba57fe5b50900390565b33600090815260136020526040812054819084908490600160a060020a031683811515611beb578991505b600160a060020a03821615801590611c0c5750600160a060020a0382163314155b8015611c325750600454600160a060020a03831660009081526006602052604090205410155b15611e225733600090815260136020526040902054600160a060020a03161515611c8c57336000908152601360205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b600160a060020a038216600090815260076020526040902054611cb19060028b6119ac565b600160a060020a038084166000908152600760209081526040808320949094556013905291909120541690508015801590611d065750600454600160a060020a03821660009081526006602052604090205410155b15611dfd57600160a060020a038116600090815260076020526040902054611d3490600a8b046003026108b8565b600160a060020a03918216600090815260076020908152604080832093909355601390522054168015801590611d845750600454600160a060020a03821660009081526006602052604090205410155b15611dd057600160a060020a038116600090815260076020526040902054611db290600a8b046002026108b8565b600160a060020a038216600090815260076020526040902055611df8565b611de784600a8b0460030260028c048c03036108b8565b935068010000000000000000840292505b611e1d565b611e0c8460028b048b036108b8565b935068010000000000000000840292505b611e3d565b611e2c848a6108b8565b935068010000000000000000840292505b50919890975095505050505050565b600c546000906b204fce5e3e25026110000000908290633b9aca00611ec56118f67259aedfc10d7279c5eed140164540000000000088026002850a670de0b6b3a764000002016f0f0bdc21abb48db201e86d40000000008502017704140c78940f6a24fdffc78873d4490d2100000000000000016121f0565b811515611ece57fe5b0403949350505050565b600c54600090670de0b6b3a7640000838101918101908390611f2f640218711a00828504633b9aca0002018702600283670de0b6b3a763ffff1982890a8b90030104633b9aca0002811515611f2957fe5b04611bae565b811515611f3857fe5b0495945050505050565b6000903b1190565b6000806000806000806000806000611f776108ff8d600e60009054906101000a900460ff1660ff16611b6c565b9750611f84886003611b97565b600e54909750611fb1906108ff908e90610100810460ff9081166201000090920481169190910116611b6c565b9550611fbd8888611bae565b9450611fcb8b888787611bc0565b9095509350611fdd61096c8d87611bae565b9250611feb600354876108b8565b600355611ff783611e4c565b91506000821180156120135750600c5461201183826108b8565b115b151561201e57600080fd5b6000600c54111561208257612035600c54836108b8565b600c81905568010000000000000000860281151561204f57fe5b600d8054929091049091019055600c5468010000000000000000860281151561207457fe5b048202840384039350612088565b600c8290555b60008a8152600a6020908152604080832054600160a060020a0316835260069091529020546120b790836108b8565b60066000600a60008e815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001908152602001600020819055508382600d54020390508060086000600a60008e815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001908152602001600020600082825401925050819055508a600160a060020a0316600a60008c815260200190815260200160002060009054906101000a9004600160a060020a0316600160a060020a03167f022c0d992e4d873a3748436d960d5140c1f9721cf73f7ca5ec679d3d9f4fe2d58e85604051808381526020018281526020019250505060405180910390a3509a9950505050505050505050565b80600260018201045b818110156110a357809150600281828581151561221257fe5b040181151561221d57fe5b0490506121f9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061226657805160ff1916838001178555612293565b82800160010185558215612293579182015b82811115612293578251825591602001919060010190612278565b506114d592610c6d9250905b808211156114d5576000815560010161229f5600a165627a7a723058202708edde0564696738c788562577212e625360df7bdd20b011792dfa99c9488f0029

Swarm Source

bzzr://2708edde0564696738c788562577212e625360df7bdd20b011792dfa99c9488f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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