ETH Price: $3,652.65 (-5.96%)

Contract

0x6BFa42451ff3DF4B491c4C9D933C019F80060593
 

Overview

ETH Balance

0.043569354628740621 ETH

Eth Value

$159.14 (@ $3,652.65/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Buy Xname64546992018-10-04 23:42:362267 days ago1538696556IN
0x6BFa4245...F80060593
0.00007875 ETH0.000259941
Buy Xname63961982018-09-25 9:56:242276 days ago1537869384IN
0x6BFa4245...F80060593
0.00007875 ETH0.000259941
Buy Xname63860482018-09-23 17:54:042278 days ago1537725244IN
0x6BFa4245...F80060593
0.00157508 ETH0.000173291
Buy Xname62171182018-08-26 13:13:012306 days ago1535289181IN
0x6BFa4245...F80060593
0.000075 ETH0.000349582
Re Load Xname62171122018-08-26 13:11:232306 days ago1535289083IN
0x6BFa4245...F80060593
0 ETH0.000385612
Buy Xname62171112018-08-26 13:11:092306 days ago1535289069IN
0x6BFa4245...F80060593
0.00082501 ETH0.000363592
Buy Xname62171112018-08-26 13:11:092306 days ago1535289069IN
0x6BFa4245...F80060593
0.000075 ETH0.000403752
Buy Xname62159152018-08-26 8:18:442306 days ago1535271524IN
0x6BFa4245...F80060593
0.00007875 ETH0.000439641.331
Buy Xname62141662018-08-26 1:19:022306 days ago1535246342IN
0x6BFa4245...F80060593
0.00007875 ETH0.000064472
Buy Xname62141632018-08-26 1:18:092306 days ago1535246289IN
0x6BFa4245...F80060593
0.00007875 ETH0.000064472
Buy Xname62141592018-08-26 1:17:022306 days ago1535246222IN
0x6BFa4245...F80060593
0.00007875 ETH0.000316722
Buy Xname62068752018-08-24 19:44:322308 days ago1535139872IN
0x6BFa4245...F80060593
0.00007875 ETH0.000363722
Buy Xname62068752018-08-24 19:44:322308 days ago1535139872IN
0x6BFa4245...F80060593
0.00007875 ETH0.000363722
Buy Xname62068752018-08-24 19:44:322308 days ago1535139872IN
0x6BFa4245...F80060593
0.00007875 ETH0.000363722
Buy Xname62067892018-08-24 19:24:092308 days ago1535138649IN
0x6BFa4245...F80060593
0.000075 ETH0.000379712
Buy Xname62067892018-08-24 19:24:092308 days ago1535138649IN
0x6BFa4245...F80060593
0.000825 ETH0.000660622
Withdraw62043242018-08-24 9:35:142308 days ago1535103314IN
0x6BFa4245...F80060593
0 ETH0.001298146
Buy Xname61983522018-08-23 9:01:332309 days ago1535014893IN
0x6BFa4245...F80060593
0.00007883 ETH0.000363722
Buy Xname61983082018-08-23 8:51:062309 days ago1535014266IN
0x6BFa4245...F80060593
0.00007883 ETH0.000363722
Buy Xname61982732018-08-23 8:43:322309 days ago1535013812IN
0x6BFa4245...F80060593
0.00007507 ETH0.000349712
Buy Xname61982092018-08-23 8:28:052309 days ago1535012885IN
0x6BFa4245...F80060593
0.00007507 ETH0.000627912.2
Re Load Xid61974762018-08-23 5:20:542309 days ago1535001654IN
0x6BFa4245...F80060593
0 ETH0.000770682.1
Withdraw61972422018-08-23 4:23:172309 days ago1534998197IN
0x6BFa4245...F80060593
0 ETH0.000253494
Re Load Xid61972272018-08-23 4:20:022309 days ago1534998002IN
0x6BFa4245...F80060593
0 ETH0.00006362.057
Buy Xid61972182018-08-23 4:17:262309 days ago1534997846IN
0x6BFa4245...F80060593
0.01 ETH0.000362452.1
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
64546992018-10-04 23:42:362267 days ago1538696556
0x6BFa4245...F80060593
0.00000098 ETH
64546992018-10-04 23:42:362267 days ago1538696556
0x6BFa4245...F80060593
0.00000787 ETH
64546992018-10-04 23:42:362267 days ago1538696556
0x6BFa4245...F80060593
0.00000393 ETH
64546992018-10-04 23:42:362267 days ago1538696556
0x6BFa4245...F80060593
0.00000393 ETH
63961982018-09-25 9:56:242276 days ago1537869384
0x6BFa4245...F80060593
0.00000098 ETH
63961982018-09-25 9:56:242276 days ago1537869384
0x6BFa4245...F80060593
0.00000787 ETH
63961982018-09-25 9:56:242276 days ago1537869384
0x6BFa4245...F80060593
0.00000393 ETH
63961982018-09-25 9:56:242276 days ago1537869384
0x6BFa4245...F80060593
0.00000393 ETH
63860482018-09-23 17:54:042278 days ago1537725244
0x6BFa4245...F80060593
0.0000464 ETH
63860482018-09-23 17:54:042278 days ago1537725244
0x6BFa4245...F80060593
0.0000464 ETH
62171182018-08-26 13:13:012306 days ago1535289181
0x6BFa4245...F80060593
0.00000093 ETH
62171182018-08-26 13:13:012306 days ago1535289181
0x6BFa4245...F80060593
0.00000093 ETH
62171182018-08-26 13:13:012306 days ago1535289181
0x6BFa4245...F80060593
0.0000075 ETH
62171182018-08-26 13:13:012306 days ago1535289181
0x6BFa4245...F80060593
0.00000375 ETH
62171182018-08-26 13:13:012306 days ago1535289181
0x6BFa4245...F80060593
0.00000375 ETH
62171122018-08-26 13:11:232306 days ago1535289083
0x6BFa4245...F80060593
0.00000093 ETH
62171122018-08-26 13:11:232306 days ago1535289083
0x6BFa4245...F80060593
0.00000093 ETH
62171122018-08-26 13:11:232306 days ago1535289083
0x6BFa4245...F80060593
0.0000075 ETH
62171122018-08-26 13:11:232306 days ago1535289083
0x6BFa4245...F80060593
0.00000375 ETH
62171122018-08-26 13:11:232306 days ago1535289083
0x6BFa4245...F80060593
0.00000375 ETH
62171112018-08-26 13:11:092306 days ago1535289069
0x6BFa4245...F80060593
0.00001031 ETH
62171112018-08-26 13:11:092306 days ago1535289069
0x6BFa4245...F80060593
0.00001031 ETH
62171112018-08-26 13:11:092306 days ago1535289069
0x6BFa4245...F80060593
0.0000825 ETH
62171112018-08-26 13:11:092306 days ago1535289069
0x6BFa4245...F80060593
0.00004125 ETH
62171112018-08-26 13:11:092306 days ago1535289069
0x6BFa4245...F80060593
0.00004125 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Duang8

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-08-20
*/

pragma solidity ^0.4.24;

contract F3Devents {
    // fired whenever a player registers a name
    event onNewName
    (
        uint256 indexed playerID,
        address indexed playerAddress,
        bytes32 indexed playerName,
        bool isNewPlayer,
        uint256 affiliateID,
        address affiliateAddress,
        bytes32 affiliateName,
        uint256 amountPaid,
        uint256 timeStamp
    );

    // fired at end of buy or reload
    event onEndTx
    (
        uint256 compressedData,
        uint256 compressedIDs,
        bytes32 playerName,
        address playerAddress,
        uint256 ethIn,
        uint256 keysBought,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount,
        uint256 potAmount,
        uint256 airDropPot
    );

	// fired whenever theres a withdraw
    event onWithdraw
    (
        uint256 indexed playerID,
        address playerAddress,
        bytes32 playerName,
        uint256 ethOut,
        uint256 timeStamp
    );

    // fired whenever a withdraw forces end round to be ran
    event onWithdrawAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 ethOut,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );

    // (fomo3d short only) fired whenever a player tries a buy after round timer
    // hit zero, and causes end round to be ran.
    event onBuyAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 ethIn,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );

    // (fomo3d short only) fired whenever a player tries a reload after round timer
    // hit zero, and causes end round to be ran.
    event onReLoadAndDistribute
    (
        address playerAddress,
        bytes32 playerName,
        uint256 compressedData,
        uint256 compressedIDs,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot,
        uint256 P3DAmount,
        uint256 genAmount
    );

    // fired whenever an affiliate is paid
    event onAffiliatePayout
    (
        uint256 indexed affiliateID,
        address affiliateAddress,
        bytes32 affiliateName,
        uint256 indexed roundID,
        uint256 indexed buyerID,
        uint256 amount,
        uint256 timeStamp
    );

    // received pot swap deposit
    event onPotSwapDeposit
    (
        uint256 roundID,
        uint256 amountAddedToPot
    );

    // received end Round
    event onEndRound
    (
        uint256 roundID,
        address winnerAddr,
        bytes32 winnerName,
        uint256 amountWon,
        uint256 newPot
    );
}

//==============================================================================
//   _ _  _ _|_ _ _  __|_   _ _ _|_    _   .
//  (_(_)| | | | (_|(_ |   _\(/_ | |_||_)  .
//====================================|=========================================

contract modularShort is F3Devents {}

contract Duang8 is modularShort {
    using SafeMath for *;
    using NameFilter for string;
    using F3DKeysCalcShort for uint256;

    PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xE840E25BaB3F1F02eb1244a3aDC8965F5864f22E);

//==============================================================================
//     _ _  _  |`. _     _ _ |_ | _  _  .
//    (_(_)| |~|~|(_||_|| (_||_)|(/__\  .  (game settings)
//=================_|===========================================================
    address private admin = msg.sender;
    address private shareCom = 0x2F0839f736197117796967452310F025a330DA45;
    address private groupCut = 0x2924C3BfA7A20eB7AEcB6c38F4576eDcf7a72Df3;

    string constant public name = "duang8";
    string constant public symbol = "duang8";

    uint256 private rndExtra_ = 0;     // length of the very first ICO
    uint256 private rndGap_ = 2 minutes;         // length of ICO phase, set to 1 year for EOS.

    uint256 constant private rndInit_ = 24 hours;                // round timer starts at this
    uint256 constant private rndInc_ = 30 seconds;              // every full key purchased adds this much to the timer
    uint256 constant private rndMax_ = 24 hours;                // max length a round timer can be

    uint256 constant private rndLimit_ = 5000;                // limit rnd eth purchase

//==============================================================================
//     _| _ _|_ _    _ _ _|_    _   .
//    (_|(_| | (_|  _\(/_ | |_||_)  .  (data used to store game info that changes)
//=============================|================================================
    uint256 public airDropPot_;             // person who gets the airdrop wins part of this pot
    uint256 public airDropTracker_ = 0;     // incremented each time a "qualified" tx occurs.  used to determine winning air drop
    uint256 public rID_;    // round id number / total rounds that have happened
//****************
// PLAYER DATA
//****************
    mapping (address => uint256) public pIDxAddr_;          // (addr => pID) returns player id by address
    mapping (bytes32 => uint256) public pIDxName_;          // (name => pID) returns player id by name
    mapping (uint256 => F3Ddatasets.Player) public plyr_;   // (pID => data) player data
    mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_;    // (pID => rID => data) player round data by player id & round id
    mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns.  (used so you can change your display name amongst any name you own)
//****************
// ROUND DATA
//****************
    mapping (uint256 => F3Ddatasets.Round) public round_;   // (rID => data) round data
    mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_;      // (rID => tID => data) eth in per team, by round id and team id
//****************
// TEAM FEE DATA
//****************
    mapping (uint256 => F3Ddatasets.TeamFee) public fees_;          // (team => fees) fee distribution by team
    mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_;     // (team => fees) pot split distribution by team
//==============================================================================
//     _ _  _  __|_ _    __|_ _  _  .
//    (_(_)| |_\ | | |_|(_ | (_)|   .  (initial data setup upon contract deploy)
//==============================================================================
    constructor()
        public
    {
		// Team allocation structures
        // 0 = whales
        // 1 = bears
        // 2 = sneks
        // 3 = bulls

		// Team allocation percentages
        // (F3D) + (Pot , Referrals, Community)
            // Referrals / Community rewards are mathematically designed to come from the winner's share of the pot.
        fees_[0] = F3Ddatasets.TeamFee(23,0);   //48% to pot, 18% to aff, 10% to com, 1% to air drop pot
        fees_[1] = F3Ddatasets.TeamFee(33,0);   //38% to pot, 18% to aff, 10% to com, 1% to air drop pot
        fees_[2] = F3Ddatasets.TeamFee(53,0);   //18% to pot, 18% to aff, 10% to com, 1% to air drop pot
        fees_[3] = F3Ddatasets.TeamFee(43,0);   //28% to pot, 18% to aff, 10% to com, 1% to air drop pot

        // how to split up the final pot based on which team was picked
        // (F3D)
        potSplit_[0] = F3Ddatasets.PotSplit(42,0);  //48% to winner, 0% to next round, 10% to com
        potSplit_[1] = F3Ddatasets.PotSplit(34,0);  //48% to winner, 8% to next round, 10% to com
        potSplit_[2] = F3Ddatasets.PotSplit(18,0);  //48% to winner, 24% to next round, 10% to com
        potSplit_[3] = F3Ddatasets.PotSplit(26,0);  //48% to winner, 16% to next round, 10% to com
	}
//==============================================================================
//     _ _  _  _|. |`. _  _ _  .
//    | | |(_)(_||~|~|(/_| _\  .  (these are safety checks)
//==============================================================================
    /**
     * @dev used to make sure no one can interact with contract until it has
     * been activated.
     */
    modifier isActivated() {
        require(activated_ == true, "its not ready yet.  check ?eta in discord");
        _;
    }

    /**
     * @dev prevents contracts from interacting with fomo3d
     */
    modifier isHuman() {
        address _addr = msg.sender;
        uint256 _codeLength;

        assembly {_codeLength := extcodesize(_addr)}
        require(_codeLength == 0, "sorry humans only");
        _;
    }

    /**
     * @dev sets boundaries for incoming tx
     */
    modifier isWithinLimits(uint256 _eth) {
        require(_eth >= 1000000000, "pocket lint: not a valid currency");
        require(_eth <= 100000000000000000000000, "no vitalik, no");
        _;
    }

//==============================================================================
//     _    |_ |. _   |`    _  __|_. _  _  _  .
//    |_)|_||_)||(_  ~|~|_|| |(_ | |(_)| |_\  .  (use these to interact with contract)
//====|=========================================================================
    /**
     * @dev emergency buy uses last stored affiliate ID and team snek
     */
    function()
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // set up our tx event data and determine if player is new or not
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);

        // fetch player id
        uint256 _pID = pIDxAddr_[msg.sender];

        // buy core
        buyCore(_pID, plyr_[_pID].laff, 2, _eventData_);
    }

    function buyXid(uint256 _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // set up our tx event data and determine if player is new or not
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);

        // fetch player id
        uint256 _pID = pIDxAddr_[msg.sender];

        // manage affiliate residuals
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == 0 || _affCode == _pID)
        {
            // use last stored affiliate code
            _affCode = plyr_[_pID].laff;

        // if affiliate code was given & its not the same as previously stored
        } else if (_affCode != plyr_[_pID].laff) {
            // update last affiliate
            plyr_[_pID].laff = _affCode;
        }

        // verify a valid team was selected
        _team = verifyTeam(_team);

        // buy core
        buyCore(_pID, _affCode, _team, _eventData_);
    }

    function buyXaddr(address _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // set up our tx event data and determine if player is new or not
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);

        // fetch player id
        uint256 _pID = pIDxAddr_[msg.sender];

        // manage affiliate residuals
        uint256 _affID;
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == address(0) || _affCode == msg.sender)
        {
            // use last stored affiliate code
            _affID = plyr_[_pID].laff;

        // if affiliate code was given
        } else {
            // get affiliate ID from aff Code
            _affID = pIDxAddr_[_affCode];

            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }

        // verify a valid team was selected
        _team = verifyTeam(_team);

        // buy core
        buyCore(_pID, _affID, _team, _eventData_);
    }

    function buyXname(bytes32 _affCode, uint256 _team)
        isActivated()
        isHuman()
        isWithinLimits(msg.value)
        public
        payable
    {
        // set up our tx event data and determine if player is new or not
        F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_);

        // fetch player id
        uint256 _pID = pIDxAddr_[msg.sender];

        // manage affiliate residuals
        uint256 _affID;
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == '' || _affCode == plyr_[_pID].name)
        {
            // use last stored affiliate code
            _affID = plyr_[_pID].laff;

        // if affiliate code was given
        } else {
            // get affiliate ID from aff Code
            _affID = pIDxName_[_affCode];

            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }

        // verify a valid team was selected
        _team = verifyTeam(_team);

        // buy core
        buyCore(_pID, _affID, _team, _eventData_);
    }

    function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        // set up our tx event data
        F3Ddatasets.EventReturns memory _eventData_;

        // fetch player ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // manage affiliate residuals
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == 0 || _affCode == _pID)
        {
            // use last stored affiliate code
            _affCode = plyr_[_pID].laff;

        // if affiliate code was given & its not the same as previously stored
        } else if (_affCode != plyr_[_pID].laff) {
            // update last affiliate
            plyr_[_pID].laff = _affCode;
        }

        // verify a valid team was selected
        _team = verifyTeam(_team);

        // reload core
        reLoadCore(_pID, _affCode, _team, _eth, _eventData_);
    }

    function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        // set up our tx event data
        F3Ddatasets.EventReturns memory _eventData_;

        // fetch player ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // manage affiliate residuals
        uint256 _affID;
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == address(0) || _affCode == msg.sender)
        {
            // use last stored affiliate code
            _affID = plyr_[_pID].laff;

        // if affiliate code was given
        } else {
            // get affiliate ID from aff Code
            _affID = pIDxAddr_[_affCode];

            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }

        // verify a valid team was selected
        _team = verifyTeam(_team);

        // reload core
        reLoadCore(_pID, _affID, _team, _eth, _eventData_);
    }

    function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth)
        isActivated()
        isHuman()
        isWithinLimits(_eth)
        public
    {
        // set up our tx event data
        F3Ddatasets.EventReturns memory _eventData_;

        // fetch player ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // manage affiliate residuals
        uint256 _affID;
        // if no affiliate code was given or player tried to use their own, lolz
        if (_affCode == '' || _affCode == plyr_[_pID].name)
        {
            // use last stored affiliate code
            _affID = plyr_[_pID].laff;

        // if affiliate code was given
        } else {
            // get affiliate ID from aff Code
            _affID = pIDxName_[_affCode];

            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }

        // verify a valid team was selected
        _team = verifyTeam(_team);

        // reload core
        reLoadCore(_pID, _affID, _team, _eth, _eventData_);
    }

    /**
     * @dev withdraws all of your earnings.
     * -functionhash- 0x3ccfd60b
     */
    function withdraw()
        isActivated()
        isHuman()
        public
    {
        // setup local rID
        uint256 _rID = rID_;

        // grab time
        uint256 _now = now;

        // fetch player ID
        uint256 _pID = pIDxAddr_[msg.sender];

        // setup temp var for player eth
        uint256 _eth;
        uint256 _withdrawFee;

        // check to see if round has ended and no one has run round end yet
        if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0)
        {
            // set up our tx event data
            F3Ddatasets.EventReturns memory _eventData_;

            // end the round (distributes pot)
			round_[_rID].ended = true;
            _eventData_ = endRound(_eventData_);

			// get their earnings
            _eth = withdrawEarnings(_pID);

            // gib moni
            if (_eth > 0)
            {
                //10% trade tax
                _withdrawFee = _eth / 10;
                uint256 _p1 = _withdrawFee / 2;
                uint256 _p2 = _withdrawFee / 2;
                shareCom.transfer(_p1);
                admin.transfer(_p2);

                plyr_[_pID].addr.transfer(_eth.sub(_withdrawFee));
            }

            // build event data
            _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
            _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;

            // fire withdraw and distribute event
            emit F3Devents.onWithdrawAndDistribute
            (
                msg.sender,
                plyr_[_pID].name,
                _eth,
                _eventData_.compressedData,
                _eventData_.compressedIDs,
                _eventData_.winnerAddr,
                _eventData_.winnerName,
                _eventData_.amountWon,
                _eventData_.newPot,
                _eventData_.P3DAmount,
                _eventData_.genAmount
            );

        // in any other situation
        } else {
            // get their earnings
            _eth = withdrawEarnings(_pID);

            // gib moni
            if (_eth > 0)
            {
                //10% trade tax
                _withdrawFee = _eth / 10;
                _p1 = _withdrawFee / 2;
                _p2 = _withdrawFee / 2;
                shareCom.transfer(_p1);
                admin.transfer(_p2);

                plyr_[_pID].addr.transfer(_eth.sub(_withdrawFee));
            }

            // fire withdraw event
            emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now);
        }
    }

    function registerNameXID(string _nameString, uint256 _affCode, bool _all)
        isHuman()
        public
        payable
    {
        bytes32 _name = _nameString.nameFilter();
        address _addr = msg.sender;
        uint256 _paid = msg.value;
        (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all);

        uint256 _pID = pIDxAddr_[_addr];

        // fire event
        emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }

    function registerNameXaddr(string _nameString, address _affCode, bool _all)
        isHuman()
        public
        payable
    {
        bytes32 _name = _nameString.nameFilter();
        address _addr = msg.sender;
        uint256 _paid = msg.value;
        (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);

        uint256 _pID = pIDxAddr_[_addr];

        // fire event
        emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }

    function registerNameXname(string _nameString, bytes32 _affCode, bool _all)
        isHuman()
        public
        payable
    {
        bytes32 _name = _nameString.nameFilter();
        address _addr = msg.sender;
        uint256 _paid = msg.value;
        (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);

        uint256 _pID = pIDxAddr_[_addr];

        // fire event
        emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now);
    }
//==============================================================================
//     _  _ _|__|_ _  _ _  .
//    (_|(/_ |  | (/_| _\  . (for UI & viewing things on etherscan)
//=====_|=======================================================================
    /**
     * @dev return the price buyer will pay for next 1 individual key.
     * -functionhash- 0x018a25e8
     * @return price for next key bought (in wei format)
     */
    function getBuyPrice()
        public
        view
        returns(uint256)
    {
        // setup local rID
        uint256 _rID = rID_;

        // grab time
        uint256 _now = now;

        // are we in a round?
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) );
        else  // rounds over.  need price for new round
            return ( 100000000000000 ); // init
    }

    /**
     * @dev returns time left.  dont spam this, you'll ddos yourself from your node
     * provider
     * -functionhash- 0xc7e284b8
     * @return time left in seconds
     */
    function getTimeLeft()
        public
        view
        returns(uint256)
    {
        // setup local rID
        uint256 _rID = rID_;

        // grab time
        uint256 _now = now;

        if (_now < round_[_rID].end)
            if (_now > round_[_rID].strt + rndGap_)
                return( (round_[_rID].end).sub(_now) );
            else
                return( (round_[_rID].strt + rndGap_).sub(_now) );
        else
            return(0);
    }

    function getPlayerVaults(uint256 _pID)
        public
        view
        //win,gen,aff
        returns(uint256 ,uint256, uint256)
    {
        // setup local rID
        uint256 _rID = rID_;

        // if round has ended.  but round end has not been run (so contract has not distributed winnings)
        if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0)
        {
            // if player is winner
            if (round_[_rID].plyr == _pID)
            {
                return
                (
                    (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ),
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)   ),
                    plyr_[_pID].aff
                );
            // if player is not the winner
            } else {
                return
                (
                    plyr_[_pID].win,
                    (plyr_[_pID].gen).add(  getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask)  ),
                    plyr_[_pID].aff
                );
            }

        // if round is still going on, or round has ended and round end has been ran
        } else {
            return
            (
                plyr_[_pID].win,
                (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),
                plyr_[_pID].aff
            );
        }
    }

    /**
     * solidity hates stack limits.  this lets us avoid that hate
     */
    function getPlayerVaultsHelper(uint256 _pID, uint256 _rID)
        private
        view
        returns(uint256)
    {
        return(  ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000)  );
    }

    function getCurrentRoundInfo()
        public
        view
        returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256)
    {
        // setup local rID
        uint256 _rID = rID_;

        return
        (
            round_[_rID].ico,               //0
            _rID,                           //1
            round_[_rID].keys,              //2
            round_[_rID].end,               //3
            round_[_rID].strt,              //4
            round_[_rID].pot,               //5
            (round_[_rID].team + (round_[_rID].plyr * 10)),     //6
            plyr_[round_[_rID].plyr].addr,  //7
            plyr_[round_[_rID].plyr].name,  //8
            rndTmEth_[_rID][0],             //9
            rndTmEth_[_rID][1],             //10
            rndTmEth_[_rID][2],             //11
            rndTmEth_[_rID][3],             //12
            airDropTracker_ + (airDropPot_ * 1000)              //13
        );
    }

    function getPlayerInfoByAddress(address _addr)
        public
        view
        returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256)
    {
        // setup local rID
        uint256 _rID = rID_;

        if (_addr == address(0))
        {
            _addr == msg.sender;
        }
        uint256 _pID = pIDxAddr_[_addr];

        return
        (
            _pID,                               //0
            plyr_[_pID].name,                   //1
            plyrRnds_[_pID][_rID].keys,         //2
            plyr_[_pID].win,                    //3
            (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),       //4
            plyr_[_pID].aff,                    //5
            plyrRnds_[_pID][_rID].eth           //6
        );
    }

//==============================================================================
//     _ _  _ _   | _  _ . _  .
//    (_(_)| (/_  |(_)(_||(_  . (this + tools + calcs + modules = our softwares engine)
//=====================_|=======================================================
    /**
     * @dev logic runs whenever a buy order is executed.  determines how to handle
     * incoming eth depending on if we are in an active round or not
     */
    function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        // setup local rID
        uint256 _rID = rID_;

        // grab time
        uint256 _now = now;

        // if round is active
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
        {
            // call core
            core(_rID, _pID, msg.value, _affID, _team, _eventData_);

        // if round is not active
        } else {
            // check to see if end round needs to be ran
            if (_now > round_[_rID].end && round_[_rID].ended == false)
            {
                // end the round (distributes pot) & start new round
			    round_[_rID].ended = true;
                _eventData_ = endRound(_eventData_);

                // build event data
                _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
                _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;

                // fire buy and distribute event
                emit F3Devents.onBuyAndDistribute
                (
                    msg.sender,
                    plyr_[_pID].name,
                    msg.value,
                    _eventData_.compressedData,
                    _eventData_.compressedIDs,
                    _eventData_.winnerAddr,
                    _eventData_.winnerName,
                    _eventData_.amountWon,
                    _eventData_.newPot,
                    _eventData_.P3DAmount,
                    _eventData_.genAmount
                );
            }

            // put eth in players vault
            plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value);
        }
    }

    /**
     * @dev logic runs whenever a reload order is executed.  determines how to handle
     * incoming eth depending on if we are in an active round or not
     */
    function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        // setup local rID
        uint256 _rID = rID_;

        // grab time
        uint256 _now = now;

        // if round is active
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
        {
            // get earnings from all vaults and return unused to gen vault
            // because we use a custom safemath library.  this will throw if player
            // tried to spend more eth than they have.
            plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth);

            // call core
            core(_rID, _pID, _eth, _affID, _team, _eventData_);

        // if round is not active and end round needs to be ran
        } else if (_now > round_[_rID].end && round_[_rID].ended == false) {
            // end the round (distributes pot) & start new round
            round_[_rID].ended = true;
            _eventData_ = endRound(_eventData_);

            // build event data
            _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
            _eventData_.compressedIDs = _eventData_.compressedIDs + _pID;

            // fire buy and distribute event
            emit F3Devents.onReLoadAndDistribute
            (
                msg.sender,
                plyr_[_pID].name,
                _eventData_.compressedData,
                _eventData_.compressedIDs,
                _eventData_.winnerAddr,
                _eventData_.winnerName,
                _eventData_.amountWon,
                _eventData_.newPot,
                _eventData_.P3DAmount,
                _eventData_.genAmount
            );
        }
    }

    /**
     * @dev this is the core logic for any buy/reload that happens while a round
     * is live.
     */
    function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        // if player is new to round
        if (plyrRnds_[_pID][_rID].keys == 0)
            _eventData_ = managePlayer(_pID, _eventData_);

        // if eth left is greater than min eth allowed (sorry no pocket lint)
        if (_eth > 1000000000)
        {

            // mint the new keys
            uint256 _keys = (round_[_rID].eth).keysRec(_eth);

            // if they bought at least 1 whole key
            if (_keys >= 1000000000000000000)
            {
                updateTimer(_keys, _rID);

                // set new leaders
                if (round_[_rID].plyr != _pID)
                    round_[_rID].plyr = _pID;
                if (round_[_rID].team != _team)
                    round_[_rID].team = _team;

                // set the new leader bool to true
                _eventData_.compressedData = _eventData_.compressedData + 100;
            }

            // manage airdrops
            if (_eth >= 100000000000000000)
            {
            airDropTracker_++;
            if (airdrop() == true)
            {
                // gib muni
                uint256 _prize;
                if (_eth >= 10000000000000000000)
                {
                    // calculate prize and give it to winner
                    _prize = ((airDropPot_).mul(75)) / 100;
                    plyr_[_pID].win = (plyr_[_pID].win).add(_prize);

                    // adjust airDropPot
                    airDropPot_ = (airDropPot_).sub(_prize);

                    // let event know a tier 3 prize was won
                    _eventData_.compressedData += 300000000000000000000000000000000;
                } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) {
                    // calculate prize and give it to winner
                    _prize = ((airDropPot_).mul(50)) / 100;
                    plyr_[_pID].win = (plyr_[_pID].win).add(_prize);

                    // adjust airDropPot
                    airDropPot_ = (airDropPot_).sub(_prize);

                    // let event know a tier 2 prize was won
                    _eventData_.compressedData += 200000000000000000000000000000000;
                } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) {
                    // calculate prize and give it to winner
                    _prize = ((airDropPot_).mul(25)) / 100;
                    plyr_[_pID].win = (plyr_[_pID].win).add(_prize);

                    // adjust airDropPot
                    airDropPot_ = (airDropPot_).sub(_prize);

                    // let event know a tier 3 prize was won
                    _eventData_.compressedData += 300000000000000000000000000000000;
                }
                // set airdrop happened bool to true
                _eventData_.compressedData += 10000000000000000000000000000000;
                // let event know how much was won
                _eventData_.compressedData += _prize * 1000000000000000000000000000000000;

                // reset air drop tracker
                airDropTracker_ = 0;
            }
        }

            // store the air drop tracker number (number of buys since last airdrop)
            _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000);

            // update player
            plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys);
            plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth);

            // update round
            round_[_rID].keys = _keys.add(round_[_rID].keys);
            round_[_rID].eth = _eth.add(round_[_rID].eth);
            rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]);

            // distribute eth
            _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_);
            _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_);

            // call end tx function to fire end tx event.
		    endTx(_pID, _team, _eth, _keys, _eventData_);
        }
    }
//==============================================================================
//     _ _ | _   | _ _|_ _  _ _  .
//    (_(_||(_|_||(_| | (_)| _\  .
//==============================================================================
    /**
     * @dev calculates unmasked earnings (just calculates, does not update mask)
     * @return earnings in wei format
     */
    function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast)
        private
        view
        returns(uint256)
    {
        return(  (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask)  );
    }

    /**
     * @dev returns the amount of keys you would get given an amount of eth.
     * -functionhash- 0xce89c80c
     * @param _rID round ID you want price for
     * @param _eth amount of eth sent in
     * @return keys received
     */
    function calcKeysReceived(uint256 _rID, uint256 _eth)
        public
        view
        returns(uint256)
    {
        // grab time
        uint256 _now = now;

        // are we in a round?
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].eth).keysRec(_eth) );
        else // rounds over.  need keys for new round
            return ( (_eth).keys() );
    }

    /**
     * @dev returns current eth price for X keys.
     * -functionhash- 0xcf808000
     * @param _keys number of keys desired (in 18 decimal format)
     * @return amount of eth needed to send
     */
    function iWantXKeys(uint256 _keys)
        public
        view
        returns(uint256)
    {
        // setup local rID
        uint256 _rID = rID_;

        // grab time
        uint256 _now = now;

        // are we in a round?
        if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
            return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) );
        else // rounds over.  need price for new round
            return ( (_keys).eth() );
    }
//==============================================================================
//    _|_ _  _ | _  .
//     | (_)(_)|_\  .
//==============================================================================
    /**
	 * @dev receives name/player info from names contract
     */
    function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff)
        external
    {
        require (msg.sender == address(PlayerBook), "your not playerNames contract... hmmm..");
        if (pIDxAddr_[_addr] != _pID)
            pIDxAddr_[_addr] = _pID;
        if (pIDxName_[_name] != _pID)
            pIDxName_[_name] = _pID;
        if (plyr_[_pID].addr != _addr)
            plyr_[_pID].addr = _addr;
        if (plyr_[_pID].name != _name)
            plyr_[_pID].name = _name;
        if (plyr_[_pID].laff != _laff)
            plyr_[_pID].laff = _laff;
        if (plyrNames_[_pID][_name] == false)
            plyrNames_[_pID][_name] = true;
    }

    /**
     * @dev receives entire player name list
     */
    function receivePlayerNameList(uint256 _pID, bytes32 _name)
        external
    {
        require (msg.sender == address(PlayerBook), "your not playerNames contract... hmmm..");
        if(plyrNames_[_pID][_name] == false)
            plyrNames_[_pID][_name] = true;
    }

    /**
     * @dev gets existing or registers new pID.  use this when a player may be new
     * @return pID
     */
    function determinePID(F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        uint256 _pID = pIDxAddr_[msg.sender];
        // if player is new to this version of fomo3d
        if (_pID == 0)
        {
            // grab their player ID, name and last aff ID, from player names contract
            _pID = PlayerBook.getPlayerID(msg.sender);
            bytes32 _name = PlayerBook.getPlayerName(_pID);
            uint256 _laff = PlayerBook.getPlayerLAff(_pID);

            // set up player account
            pIDxAddr_[msg.sender] = _pID;
            plyr_[_pID].addr = msg.sender;

            if (_name != "")
            {
                pIDxName_[_name] = _pID;
                plyr_[_pID].name = _name;
                plyrNames_[_pID][_name] = true;
            }

            if (_laff != 0 && _laff != _pID)
                plyr_[_pID].laff = _laff;

            // set the new player bool to true
            _eventData_.compressedData = _eventData_.compressedData + 1;
        }
        return (_eventData_);
    }

    /**
     * @dev checks to make sure user picked a valid team.  if not sets team
     * to default (sneks)
     */
    function verifyTeam(uint256 _team)
        private
        pure
        returns (uint256)
    {
        if (_team < 0 || _team > 3)
            return(2);
        else
            return(_team);
    }

    /**
     * @dev decides if round end needs to be run & new round started.  and if
     * player unmasked earnings from previously played rounds need to be moved.
     */
    function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        // if player has played a previous round, move their unmasked earnings
        // from that round to gen vault.
        if (plyr_[_pID].lrnd != 0)
            updateGenVault(_pID, plyr_[_pID].lrnd);

        // update player's last round played
        plyr_[_pID].lrnd = rID_;

        // set the joined round bool to true
        _eventData_.compressedData = _eventData_.compressedData + 10;

        return(_eventData_);
    }

    /**
     * @dev ends the round. manages paying out winner/splitting up pot
     */
    function endRound(F3Ddatasets.EventReturns memory _eventData_)
        private
        returns (F3Ddatasets.EventReturns)
    {
        // setup local rID
        uint256 _rID = rID_;

        // grab our winning player and team id's
        uint256 _winPID = round_[_rID].plyr;
        uint256 _winTID = round_[_rID].team;

        // grab our pot amount
        uint256 _pot = round_[_rID].pot;

        // calculate our winner share, community rewards, gen share,
        // p3d share, and amount reserved for next pot
        uint256 _win = (_pot.mul(48)) / 100;
        uint256 _com = (_pot / 10);
        uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100;
        uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen));

        // calculate ppt for round mask
        uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys);
        uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000);
        if (_dust > 0)
        {
            _gen = _gen.sub(_dust);
            _res = _res.add(_dust);
        }

        // pay our winner
        plyr_[_winPID].win = _win.add(plyr_[_winPID].win);

        // community rewards
        shareCom.transfer((_com / 2));
        admin.transfer((_com / 2));

        // distribute gen portion to key holders
        round_[_rID].mask = _ppt.add(round_[_rID].mask);

        // prepare event data
        _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000);
        _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000);
        _eventData_.winnerAddr = plyr_[_winPID].addr;
        _eventData_.winnerName = plyr_[_winPID].name;
        _eventData_.amountWon = _win;
        _eventData_.genAmount = _gen;
        _eventData_.P3DAmount = 0;
        _eventData_.newPot = _res;

        // uint256 roundID,
        // address winnerAddr,
        // bytes32 winnerName,
        // uint256 amountWon,
        // uint256 newPot

        emit F3Devents.onEndRound
        (
            _rID,
            plyr_[_winPID].addr,
            plyr_[_winPID].name,
            _win,
            _res
        );

        // start next round
        rID_++;
        _rID++;
        round_[_rID].strt = now;
        round_[_rID].end = now.add(rndInit_).add(rndGap_);
        round_[_rID].pot = _res;

        return(_eventData_);
    }

    /**
     * @dev moves any unmasked earnings to gen vault.  updates earnings mask
     */
    function updateGenVault(uint256 _pID, uint256 _rIDlast)
        private
    {
        uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast);
        if (_earnings > 0)
        {
            // put in gen vault
            plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen);
            // zero out their earnings by updating mask
            plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask);
        }
    }

    /**
     * @dev updates round timer based on number of whole keys bought.
     */
    function updateTimer(uint256 _keys, uint256 _rID)
        private
    {
        // grab time
        uint256 _now = now;

        uint256 _rndInc = rndInc_;

        if(round_[_rID].pot > rndLimit_)
        {
            _rndInc = _rndInc / 2;
        }

        // calculate time based on number of keys bought
        uint256 _newTime;
        if (_now > round_[_rID].end && round_[_rID].plyr == 0)
            _newTime = (((_keys) / (1000000000000000000)).mul(_rndInc)).add(_now);
        else
            _newTime = (((_keys) / (1000000000000000000)).mul(_rndInc)).add(round_[_rID].end);

        // compare to max and set new end time
        if (_newTime < (rndMax_).add(_now))
            round_[_rID].end = _newTime;
        else
            round_[_rID].end = rndMax_.add(_now);
    }

    /**
     * @dev generates a random number between 0-99 and checks to see if thats
     * resulted in an airdrop win
     * @return do we have a winner?
     */
    function airdrop()
        private
        view
        returns(bool)
    {
        uint256 seed = uint256(keccak256(abi.encodePacked(

            (block.timestamp).add
            (block.difficulty).add
            ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add
            (block.gaslimit).add
            ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add
            (block.number)

        )));
        if((seed - ((seed / 1000) * 1000)) < airDropTracker_)
            return(true);
        else
            return(false);
    }

    /**
     * @dev distributes eth based on fees to com, aff, and p3d
     */
    function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns(F3Ddatasets.EventReturns)
    {
         // pay community rewards
        uint256 _com = _eth / 10;
        uint256 _p3d;

        if (address(admin).call.value((_com / 2))() == false)
        {
            _p3d = _com / 2;
            _com = _com / 2;
        }

        if (address(shareCom).call.value((_com / 2))() == false)
        {
            _p3d += (_com / 2);
            _com = _com.sub(_com / 2);
        }

        // pay 1% out to FoMo3D short
        // uint256 _long = _eth / 100;
        // otherF3D_.potSwap.value(_long)();

        _p3d = _p3d.add(distributeAff(_rID,_pID,_eth,_affID));

        // pay out p3d
        // _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100));
        if (_p3d > 0)
        {
            // deposit to divies contract
            uint256 _potAmount = _p3d / 2;
            uint256 _amount = _p3d.sub(_potAmount);

            shareCom.transfer((_amount / 2));
            admin.transfer((_amount / 2));

            round_[_rID].pot = round_[_rID].pot.add(_potAmount);

            // set up event data
            _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount);
        }

        return(_eventData_);
    }

    function distributeAff(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID)
        private
        returns(uint256)
    {
        uint256 _addP3d = 0;

        // distribute share to affiliate
        uint256 _aff1 = _eth / 10;
        uint256 _aff2 = _eth / 20;
        uint256 _aff3 = _eth / 34;

        groupCut.transfer(_aff1);

        // decide what to do with affiliate share of fees
        // affiliate must not be self, and must have a name registered
        if ((_affID != 0) && (_affID != _pID) && (plyr_[_affID].name != ''))
        {
            plyr_[_pID].laffID = _affID;
            plyr_[_affID].aff = _aff2.add(plyr_[_affID].aff);

            emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff2, now);

            //second level aff
            uint256 _secLaff = plyr_[_affID].laffID;
            if((_secLaff != 0) && (_secLaff != _pID))
            {
                plyr_[_secLaff].aff = _aff3.add(plyr_[_secLaff].aff);
                emit F3Devents.onAffiliatePayout(_secLaff, plyr_[_secLaff].addr, plyr_[_secLaff].name, _rID, _pID, _aff3, now);
            } else {
                _addP3d = _addP3d.add(_aff3);
            }
        } else {
            _addP3d = _addP3d.add(_aff2);
        }
        return(_addP3d);
    }

    function getPlayerAff(uint256 _pID)
        public
        view
        returns (uint256,uint256,uint256)
    {
        uint256 _affID = plyr_[_pID].laffID;
        if (_affID != 0)
        {
            //second level aff
            uint256 _secondLaff = plyr_[_affID].laffID;

            if(_secondLaff != 0)
            {
                //third level aff
                uint256 _thirdAff = plyr_[_secondLaff].laffID;
            }
        }
        return (_affID,_secondLaff,_thirdAff);
    }

    function potSwap()
        external
        payable
    {
        // setup local rID
        uint256 _rID = rID_ + 1;

        round_[_rID].pot = round_[_rID].pot.add(msg.value);
        emit F3Devents.onPotSwapDeposit(_rID, msg.value);
    }

    /**
     * @dev distributes eth based on fees to gen and pot
     */
    function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_)
        private
        returns(F3Ddatasets.EventReturns)
    {
        // calculate gen share
        uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100;

        // toss 1% into airdrop pot
        uint256 _air = (_eth / 100);
        airDropPot_ = airDropPot_.add(_air);

        // update eth balance (eth = eth - (com share + pot swap share + aff share + p3d share + airdrop pot share))
        //_eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100));
        _eth = _eth.sub(_eth.mul(29) / 100);

        // calculate pot
        uint256 _pot = _eth.sub(_gen);

        // distribute gen share (thats what updateMasks() does) and adjust
        // balances for dust.
        uint256 _dust = updateMasks(_rID, _pID, _gen, _keys);
        if (_dust > 0)
            _gen = _gen.sub(_dust);

        // add eth to pot
        round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot);

        // set up event data
        _eventData_.genAmount = _gen.add(_eventData_.genAmount);
        _eventData_.potAmount = _pot;

        return(_eventData_);
    }

    /**
     * @dev updates masks for round and player when keys are bought
     * @return dust left over
     */
    function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys)
        private
        returns(uint256)
    {
        // calc profit per key & round mask based on this buy:  (dust goes to pot)
        uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys);
        round_[_rID].mask = _ppt.add(round_[_rID].mask);

        // calculate player earning from their own buy (only based on the keys
        // they just bought).  & update player earnings mask
        uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000);
        plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask);

        // calculate & return dust
        return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000)));
    }

    /**
     * @dev adds up unmasked earnings, & vault earnings, sets them all to 0
     * @return earnings in wei format
     */
    function withdrawEarnings(uint256 _pID)
        private
        returns(uint256)
    {
        // update gen vault
        updateGenVault(_pID, plyr_[_pID].lrnd);

        // from vaults
        uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff);
        if (_earnings > 0)
        {
            plyr_[_pID].win = 0;
            plyr_[_pID].gen = 0;
            plyr_[_pID].aff = 0;
        }

        return(_earnings);
    }

    /**
     * @dev prepares compression data and fires event for buy or reload tx's
     */
    function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_)
        private
    {
        _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000);
        _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000);

        emit F3Devents.onEndTx
        (
            _eventData_.compressedData,
            _eventData_.compressedIDs,
            plyr_[_pID].name,
            msg.sender,
            _eth,
            _keys,
            _eventData_.winnerAddr,
            _eventData_.winnerName,
            _eventData_.amountWon,
            _eventData_.newPot,
            _eventData_.P3DAmount,
            _eventData_.genAmount,
            _eventData_.potAmount,
            airDropPot_
        );
    }
//==============================================================================
//    (~ _  _    _._|_    .
//    _)(/_(_|_|| | | \/  .
//====================/=========================================================
    /** upon contract deploy, it will be deactivated.  this is a one time
     * use function that will activate the contract.  we do this so devs
     * have time to set things up on the web end                            **/
    bool public activated_ = false;
    function activate()
        public
    {
        // only team just can activate
        require(msg.sender == admin, "only admin can activate");


        // can only be ran once
        require(activated_ == false, "FOMO Short already activated");

        // activate the contract
        activated_ = true;

        // lets start first round
        rID_ = 1;
        round_[1].strt = now + rndExtra_ - rndGap_;
        round_[1].end = now + rndInit_ + rndExtra_;
    }
}

//==============================================================================
//   __|_ _    __|_ _  .
//  _\ | | |_|(_ | _\  .
//==============================================================================
library F3Ddatasets {
    //compressedData key
    // [76-33][32][31][30][29][28-18][17][16-6][5-3][2][1][0]
        // 0 - new player (bool)
        // 1 - joined round (bool)
        // 2 - new  leader (bool)
        // 3-5 - air drop tracker (uint 0-999)
        // 6-16 - round end time
        // 17 - winnerTeam
        // 18 - 28 timestamp
        // 29 - team
        // 30 - 0 = reinvest (round), 1 = buy (round), 2 = buy (ico), 3 = reinvest (ico)
        // 31 - airdrop happened bool
        // 32 - airdrop tier
        // 33 - airdrop amount won
    //compressedIDs key
    // [77-52][51-26][25-0]
        // 0-25 - pID
        // 26-51 - winPID
        // 52-77 - rID
    struct EventReturns {
        uint256 compressedData;
        uint256 compressedIDs;
        address winnerAddr;         // winner address
        bytes32 winnerName;         // winner name
        uint256 amountWon;          // amount won
        uint256 newPot;             // amount in new pot
        uint256 P3DAmount;          // amount distributed to p3d
        uint256 genAmount;          // amount distributed to gen
        uint256 potAmount;          // amount added to pot
    }
    struct Player {
        address addr;   // player address
        bytes32 name;   // player name
        uint256 win;    // winnings vault
        uint256 gen;    // general vault
        uint256 aff;    // affiliate vault
        uint256 lrnd;   // last round played
        uint256 laff;   // last affiliate id used
        uint256 laffID;   // last affiliate id unaffected
    }
    struct PlayerRounds {
        uint256 eth;    // eth player has added to round (used for eth limiter)
        uint256 keys;   // keys
        uint256 mask;   // player mask
        uint256 ico;    // ICO phase investment
    }
    struct Round {
        uint256 plyr;   // pID of player in lead
        uint256 team;   // tID of team in lead
        uint256 end;    // time ends/ended
        bool ended;     // has round end function been ran
        uint256 strt;   // time round started
        uint256 keys;   // keys
        uint256 eth;    // total eth in
        uint256 pot;    // eth to pot (during round) / final amount paid to winner (after round ends)
        uint256 mask;   // global mask
        uint256 ico;    // total eth sent in during ICO phase
        uint256 icoGen; // total eth for gen during ICO phase
        uint256 icoAvg; // average key price for ICO phase
    }
    struct TeamFee {
        uint256 gen;    // % of buy in thats paid to key holders of current round
        uint256 p3d;    // % of buy in thats paid to p3d holders
    }
    struct PotSplit {
        uint256 gen;    // % of pot thats paid to key holders of current round
        uint256 p3d;    // % of pot thats paid to p3d holders
    }
}

//==============================================================================
//  |  _      _ _ | _  .
//  |<(/_\/  (_(_||(_  .
//=======/======================================================================
library F3DKeysCalcShort {
    using SafeMath for *;
    /**
     * @dev calculates number of keys received given X eth
     * @param _curEth current amount of eth in contract
     * @param _newEth eth being spent
     * @return amount of ticket purchased
     */
    function keysRec(uint256 _curEth, uint256 _newEth)
        internal
        pure
        returns (uint256)
    {
        return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
    }

    /**
     * @dev calculates amount of eth received if you sold X keys
     * @param _curKeys current amount of keys that exist
     * @param _sellKeys amount of keys you wish to sell
     * @return amount of eth received
     */
    function ethRec(uint256 _curKeys, uint256 _sellKeys)
        internal
        pure
        returns (uint256)
    {
        return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
    }

     /**
     * @dev calculates how many keys would exist with given an amount of eth
     * @param _eth eth "in contract"
     * @return number of keys that would exist
     */
    function keys(uint256 _eth)
        internal
        pure
        returns(uint256)
    {
        return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
    }

    /**
     * @dev calculates how much eth would be in contract given a number of keys
     * @param _keys number of keys "in contract"
     * @return eth that would exists
     */
    function eth(uint256 _keys)
        internal
        pure
        returns(uint256)
    {
        return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
    }
}

//==============================================================================
//  . _ _|_ _  _ |` _  _ _  _  .
//  || | | (/_| ~|~(_|(_(/__\  .
//==============================================================================

interface PlayerBookInterface {
    function getPlayerID(address _addr) external returns (uint256);
    function getPlayerName(uint256 _pID) external view returns (bytes32);
    function getPlayerLAff(uint256 _pID) external view returns (uint256);
    function getPlayerAddr(uint256 _pID) external view returns (address);
    function getNameFee() external view returns (uint256);
    function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256);
    function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256);
    function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256);
}

library NameFilter {

    function nameFilter(string _input)
        internal
        pure
        returns(bytes32)
    {
        bytes memory _temp = bytes(_input);
        uint256 _length = _temp.length;

        //sorry limited to 32 characters
        require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters");
        // make sure it doesnt start with or end with space
        require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space");
        // make sure first two characters are not 0x
        if (_temp[0] == 0x30)
        {
            require(_temp[1] != 0x78, "string cannot start with 0x");
            require(_temp[1] != 0x58, "string cannot start with 0X");
        }

        // create a bool to track if we have a non number character
        bool _hasNonNumber;

        // convert & check
        for (uint256 i = 0; i < _length; i++)
        {
            // if its uppercase A-Z
            if (_temp[i] > 0x40 && _temp[i] < 0x5b)
            {
                // convert to lower case a-z
                _temp[i] = byte(uint(_temp[i]) + 32);

                // we have a non number
                if (_hasNonNumber == false)
                    _hasNonNumber = true;
            } else {
                require
                (
                    // require character is a space
                    _temp[i] == 0x20 ||
                    // OR lowercase a-z
                    (_temp[i] > 0x60 && _temp[i] < 0x7b) ||
                    // or 0-9
                    (_temp[i] > 0x2f && _temp[i] < 0x3a),
                    "string contains invalid characters"
                );
                // make sure theres not 2x spaces in a row
                if (_temp[i] == 0x20)
                    require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces");

                // see if we have a character other than a number
                if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39))
                    _hasNonNumber = true;
            }
        }

        require(_hasNonNumber == true, "string cannot be only numbers");

        bytes32 _ret;
        assembly {
            _ret := mload(add(_temp, 32))
        }
        return (_ret);
    }
}


library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c)
    {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b, "SafeMath mul failed");
        return c;
    }

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

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

    /**
     * @dev gives square root of given x.
     */
    function sqrt(uint256 x)
        internal
        pure
        returns (uint256 y)
    {
        uint256 z = ((add(x,1)) / 2);
        y = x;
        while (z < y)
        {
            y = z;
            z = ((add((x / z),z)) / 2);
        }
    }

    /**
     * @dev gives square. multiplies x by x
     */
    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }

    /**
     * @dev x to the power of y
     */
    function pwr(uint256 x, uint256 y)
        internal
        pure
        returns (uint256)
    {
        if (x==0)
            return (0);
        else if (y==0)
            return (1);
        else
        {
            uint256 z = x;
            for (uint256 i=1; i < y; i++)
                z = mul(z,x);
            return (z);
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"getBuyPrice","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":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXname","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pIDxAddr_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropTracker_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"round_","outputs":[{"name":"plyr","type":"uint256"},{"name":"team","type":"uint256"},{"name":"end","type":"uint256"},{"name":"ended","type":"bool"},{"name":"strt","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"eth","type":"uint256"},{"name":"pot","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"},{"name":"icoGen","type":"uint256"},{"name":"icoAvg","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"name":"plyrNames_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"fees_","outputs":[{"name":"gen","type":"uint256"},{"name":"p3d","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"pIDxName_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"address"},{"name":"_all","type":"bool"}],"name":"registerNameXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_laff","type":"uint256"}],"name":"receivePlayerInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"rndTmEth_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerVaults","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerAff","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"bytes32"},{"name":"_all","type":"bool"}],"name":"registerNameXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRoundInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXaddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"}],"name":"buyXid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_name","type":"bytes32"}],"name":"receivePlayerNameList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXID","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"}],"name":"buyXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"plyrRnds_","outputs":[{"name":"eth","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"}],"name":"buyXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"potSplit_","outputs":[{"name":"gen","type":"uint256"},{"name":"p3d","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTimeLeft","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_rID","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"calcKeysReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_keys","type":"uint256"}],"name":"iWantXKeys","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"activated_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropPot_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"plyr_","outputs":[{"name":"addr","type":"address"},{"name":"name","type":"bytes32"},{"name":"win","type":"uint256"},{"name":"gen","type":"uint256"},{"name":"aff","type":"uint256"},{"name":"lrnd","type":"uint256"},{"name":"laff","type":"uint256"},{"name":"laffID","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"potSwap","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getPlayerInfoByAddress","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":true,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"isNewPlayer","type":"bool"},{"indexed":false,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":false,"name":"amountPaid","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onNewName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"keysBought","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"},{"indexed":false,"name":"potAmount","type":"uint256"},{"indexed":false,"name":"airDropPot","type":"uint256"}],"name":"onEndTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onWithdrawAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onBuyAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"P3DAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onReLoadAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":true,"name":"roundID","type":"uint256"},{"indexed":true,"name":"buyerID","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onAffiliatePayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"roundID","type":"uint256"},{"indexed":false,"name":"amountAddedToPot","type":"uint256"}],"name":"onPotSwapDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"roundID","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"}],"name":"onEndRound","type":"event"}]

608060405260008054600160a060020a031990811633178255600180548216732f0839f736197117796967452310f025a330da4517905560028054909116732924c3bfa7a20eb7aecb6c38f4576edcf7a72df3179055600381905560786004556006556011805460ff1916905534801561007857600080fd5b506040805180820182526017815260006020808301828152828052600f80835293517ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37555517ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec376558351808501855260218152808201838152600180855285845291517f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f55517f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f890558451808601865260358152808301848152600280865286855291517fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead55517fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeeae5585518087018752602b8152808401858152600380875296855290517f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc829682855517f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc82968295585518087018752602a8152808401858152858052601080865291517f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb0155517f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb02558651808801885260228152808501868152938652818552517f8c6065603763fec3f5742441d3833f3f43b982453612d76adb39a885e3006b5f5591517f8c6065603763fec3f5742441d3833f3f43b982453612d76adb39a885e3006b60558551808701875260128152808401858152918552828452517f853b2fefe141400fef543280f93d98bd49996069f632d0d20236afeeed8e46a255517f853b2fefe141400fef543280f93d98bd49996069f632d0d20236afeeed8e46a3558451808601909552601a8552848201838152939092525290517fb3edd0d534d647cffdae9f1294f11ad21f3fcf2814bea44c92bbb8d384a57d9e55517fb3edd0d534d647cffdae9f1294f11ad21f3fcf2814bea44c92bbb8d384a57d9f5561552880620003886000396000f3006080604052600436106101cc5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461036c57806306fdde0314610393578063079ce3271461041d5780630f15f4c01461043d57806310f01eba1461045257806311a09ae71461047357806324c33d33146104885780632660316e146104ff5780632ce219991461052e5780632e19ebdc1461055f578063349cdcac146105775780633ccfd60b146105955780633ddd4698146105aa57806349cc635d146106065780635893d48114610630578063624ae5c01461064b5780636306643414610660578063633891c414610696578063685ffd83146106ae578063747dff421461070157806382bfc7391461078c5780638f38f309146107b35780638f7140ea146107c1578063921dec21146107dc57806395d89b411461039357806398a0871d1461082f578063a2bccae914610846578063a65b37a114610887578063c519500e14610895578063c7e284b8146108ad578063ce89c80c146108c2578063cf808000146108dd578063d53b2679146108f5578063d87574e01461090a578063de7874f31461091f578063ed78cf4a14610982578063ee0b5d8b1461098a575b6101d4615403565b60115460009060ff161515600114610238576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b801561027f576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b34633b9aca008110156102d7576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115610327576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b610330856109e3565b33600090815260086020908152604080832054808452600a909252909120600601549196509450610365908590600288610c97565b5050505050005b34801561037857600080fd5b50610381610ed2565b60408051918252519081900360200190f35b34801561039f57600080fd5b506103a8610f98565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e25781810151838201526020016103ca565b50505050905090810190601f16801561040f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042957600080fd5b5061043b600435602435604435610fcf565b005b34801561044957600080fd5b5061043b6111db565b34801561045e57600080fd5b50610381600160a060020a0360043516611310565b34801561047f57600080fd5b50610381611322565b34801561049457600080fd5b506104a0600435611328565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561050b57600080fd5b5061051a60043560243561138b565b604080519115158252519081900360200190f35b34801561053a57600080fd5b506105466004356113ab565b6040805192835260208301919091528051918290030190f35b34801561056b57600080fd5b506103816004356113c4565b34801561058357600080fd5b5061043b6004356024356044356113d6565b3480156105a157600080fd5b5061043b6115bc565b6040805160206004803580820135601f810184900484028501840190955284845261043b94369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515611a6d565b34801561061257600080fd5b5061043b600435600160a060020a0360243516604435606435611c26565b34801561063c57600080fd5b50610381600435602435611e17565b34801561065757600080fd5b50610381611e34565b34801561066c57600080fd5b50610678600435611e3a565b60408051938452602084019290925282820152519081900360600190f35b3480156106a257600080fd5b50610678600435611fe0565b6040805160206004803580820135601f810184900484028501840190955284845261043b943694929360249392840191908190840183828082843750949750508435955050505050602001351515612039565b34801561070d57600080fd5b50610716612119565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561079857600080fd5b5061043b600160a060020a0360043516602435604435612317565b61043b600435602435612513565b3480156107cd57600080fd5b5061043b600435602435612703565b6040805160206004803580820135601f810184900484028501840190955284845261043b9436949293602493928401919081908401838280828437509497505084359550505050506020013515156127e0565b61043b600160a060020a03600435166024356128c0565b34801561085257600080fd5b50610861600435602435612ad7565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61043b600435602435612b09565b3480156108a157600080fd5b50610546600435612d06565b3480156108b957600080fd5b50610381612d1f565b3480156108ce57600080fd5b50610381600435602435612db0565b3480156108e957600080fd5b50610381600435612e57565b34801561090157600080fd5b5061051a612f0a565b34801561091657600080fd5b50610381612f13565b34801561092b57600080fd5b50610937600435612f19565b60408051600160a060020a0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b61043b612f66565b34801561099657600080fd5b506109ab600160a060020a0360043516612fe4565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6109eb615403565b336000908152600860205260408120549080821515610c8e57604080517fe56556a9000000000000000000000000000000000000000000000000000000008152336004820152905173e840e25bab3f1f02eb1244a3adc8965f5864f22e9163e56556a99160248083019260209291908290030181600087803b158015610a7057600080fd5b505af1158015610a84573d6000803e3d6000fd5b505050506040513d6020811015610a9a57600080fd5b5051604080517f82e37b2c00000000000000000000000000000000000000000000000000000000815260048101839052905191945073e840e25bab3f1f02eb1244a3adc8965f5864f22e916382e37b2c916024808201926020929091908290030181600087803b158015610b0d57600080fd5b505af1158015610b21573d6000803e3d6000fd5b505050506040513d6020811015610b3757600080fd5b5051604080517fe3c08adf00000000000000000000000000000000000000000000000000000000815260048101869052905191935073e840e25bab3f1f02eb1244a3adc8965f5864f22e9163e3c08adf916024808201926020929091908290030181600087803b158015610baa57600080fd5b505af1158015610bbe573d6000803e3d6000fd5b505050506040513d6020811015610bd457600080fd5b5051336000818152600860209081526040808320889055878352600a9091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610c5d576000828152600960209081526040808320869055858352600a82528083206001908101869055600c8352818420868552909252909120805460ff191690911790555b8015801590610c6c5750828114155b15610c86576000838152600a602052604090206006018190555b845160010185525b50929392505050565b600754600480546000838152600d602052604090209091015442910181118015610d0357506000828152600d602052604090206002015481111580610d0357506000828152600d602052604090206002015481118015610d0357506000828152600d6020526040902054155b15610d1b57610d168287348888886130b9565b610eca565b6000828152600d602052604090206002015481118015610d4d57506000828152600d602052604090206003015460ff16155b15610e95576000828152600d60205260409020600301805460ff19166001179055610d7783613519565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a33600a6000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b6000868152600a6020526040902060030154610eb7903463ffffffff61397916565b6000878152600a60205260409020600301555b505050505050565b600754600480546000838152600d602052604081209092015491929142910181118015610f4157506000828152600d602052604090206002015481111580610f4157506000828152600d602052604090206002015481118015610f4157506000828152600d6020526040902054155b15610f89576000828152600d6020526040902060050154610f8290670de0b6b3a764000090610f76908263ffffffff61397916565b9063ffffffff6139da16565b9250610f93565b655af3107a400092505b505090565b60408051808201909152600681527f6475616e67380000000000000000000000000000000000000000000000000000602082015281565b610fd7615403565b601154600090819060ff16151560011461103d576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015611084576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b85633b9aca008110156110dc576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561112c576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b33600090815260086020526040902054945088158061115b57506000858152600a602052604090206001015489145b15611179576000858152600a602052604090206006015493506111b8565b600089815260096020908152604080832054888452600a9092529091206006015490945084146111b8576000858152600a602052604090206006018490555b6111c188613a07565b97506111d085858a8a8a613a2c565b505050505050505050565b600054600160a060020a0316331461123d576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792061646d696e2063616e206163746976617465000000000000000000604482015290519081900360640190fd5b60115460ff1615611298576040805160e560020a62461bcd02815260206004820152601c60248201527f464f4d4f2053686f727420616c72656164792061637469766174656400000000604482015290519081900360640190fd5b6011805460ff191660019081179091556007819055600454600354600092909252600d602052429091019081037ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c95562015180017ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c755565b60086020526000908152604090205481565b60065481565b600d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999a9899979860ff909716979596949593949293919290918c565b600c60209081526000928352604080842090915290825290205460ff1681565b600f602052600090815260409020805460019091015482565b60096020526000908152604090205481565b6113de615403565b60115460009060ff161515600114611442576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015611489576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b84633b9aca008110156114e1576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115611531576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b33600090815260086020526040902054935087158061154f57508388145b1561156d576000848152600a6020526040902060060154975061159a565b6000848152600a6020526040902060060154881461159a576000848152600a602052604090206006018890555b6115a387613a07565b96506115b28489898989613a2c565b5050505050505050565b60008060008060006115cc615403565b601154600090819060ff161515600114611632576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015611679576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b60075433600090815260086020908152604080832054848452600d90925290912060020154919b50429a509850891180156116c6575060008a8152600d602052604090206003015460ff16155b80156116df575060008a8152600d602052604090205415155b156119185760008a8152600d60205260409020600301805460ff1916600117905561170985613519565b945061171488613c49565b965060008711156117f857600154604051600a89049750600288049550859450600160a060020a03909116906108fc8515029085906000818181858888f19350505050158015611768573d6000803e3d6000fd5b5060008054604051600160a060020a039091169185156108fc02918691818181858888f193505050501580156117a2573d6000803e3d6000fd5b506000888152600a6020526040902054600160a060020a03166108fc6117ce898963ffffffff613cd016565b6040518115909202916000818181858888f193505050501580156117f6573d6000803e3d6000fd5b505b88670de0b6b3a764000002856000015101856000018181525050878560200151018560200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc33600a60008b81526020019081526020016000206001015489886000015189602001518a604001518b606001518c608001518d60a001518e60c001518f60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611a61565b61192188613c49565b96506000871115611a0557600154604051600a89049750600288049550859450600160a060020a03909116906108fc8515029085906000818181858888f19350505050158015611975573d6000803e3d6000fd5b5060008054604051600160a060020a039091169185156108fc02918691818181858888f193505050501580156119af573d6000803e3d6000fd5b506000888152600a6020526040902054600160a060020a03166108fc6119db898963ffffffff613cd016565b6040518115909202916000818181858888f19350505050158015611a03573d6000803e3d6000fd5b505b6000888152600a602090815260409182902060010154825133815291820152808201899052606081018b9052905189917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050505050565b6000808080808033803b8015611abb576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b611ac48b613d30565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b50995034985073e840e25bab3f1f02eb1244a3adc8965f5864f22e9263aa4d490b928a926084808201939182900301818588803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b50505050506040513d6040811015611b8057600080fd5b508051602091820151600160a060020a03808b16600081815260088652604080822054858352600a8852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b3373e840e25bab3f1f02eb1244a3adc8965f5864f22e14611cb7576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600860205260409020548414611cf257600160a060020a03831660009081526008602052604090208490555b6000828152600960205260409020548414611d195760008281526009602052604090208490555b6000848152600a6020526040902054600160a060020a03848116911614611d6f576000848152600a60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600a60205260409020600101548214611d9c576000848152600a602052604090206001018290555b6000848152600a60205260409020600601548114611dc9576000848152600a602052604090206006018190555b6000848152600c6020908152604080832085845290915290205460ff161515611e11576000848152600c602090815260408083208584529091529020805460ff191660011790555b50505050565b600e60209081526000928352604080842090915290825290205481565b60075481565b6007546000818152600d60205260408120600201549091829182919042118015611e7657506000818152600d602052604090206003015460ff16155b8015611e8f57506000818152600d602052604090205415155b15611fb0576000818152600d6020526040902054851415611f74576000818152600d6020526040902060070154611efd90606490611ed490603063ffffffff61454316565b811515611edd57fe5b6000888152600a602052604090206002015491900463ffffffff61397916565b6000868152600b60209081526040808320858452909152902060020154611f5690611f3890611f2c89866145ba565b9063ffffffff613cd016565b6000888152600a60205260409020600301549063ffffffff61397916565b6000878152600a602052604090206004015491955093509150611fd8565b6000858152600a60209081526040808320600290810154600b8452828520868652909352922090910154611f5690611f3890611f2c89866145ba565b6000858152600a602052604090206002810154600590910154611f5690611f38908890614688565b509193909250565b6000818152600a6020526040812060070154819081908180821561202c576000838152600a60205260409020600701549150811561202c57506000818152600a60205260409020600701545b9196909550909350915050565b6000808080808033803b8015612087576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b6120908b613d30565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073e840e25bab3f1f02eb1244a3adc8965f5864f22e9263745ea0c1928a926084808201939182900301818588803b158015611b5557600080fd5b60008060008060008060008060008060008060008060006007549050600d60008281526020019081526020016000206009015481600d600084815260200190815260200160002060050154600d600085815260200190815260200160002060020154600d600086815260200190815260200160002060040154600d600087815260200190815260200160002060070154600d600088815260200190815260200160002060000154600a02600d60008981526020019081526020016000206001015401600a6000600d60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a0316600a6000600d60008c815260200190815260200160002060000154815260200190815260200160002060010154600e60008b8152602001908152602001600020600080815260200190815260200160002054600e60008c815260200190815260200160002060006001815260200190815260200160002054600e60008d815260200190815260200160002060006002815260200190815260200160002054600e60008e8152602001908152602001600020600060038152602001908152602001600020546005546103e802600654019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b61231f615403565b601154600090819060ff161515600114612385576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b80156123cc576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b85633b9aca00811015612424576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612474576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b336000908152600860205260409020549450600160a060020a03891615806124a45750600160a060020a03891633145b156124c2576000858152600a602052604090206006015493506111b8565b600160a060020a038916600090815260086020908152604080832054888452600a9092529091206006015490945084146111b8576000858152600a602052604090206006018490556111c188613a07565b61251b615403565b60115460009060ff16151560011461257f576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b80156125c6576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b34633b9aca0081101561261e576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561266e576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b612677856109e3565b33600090815260086020526040902054909550935086158061269857508387145b156126b6576000848152600a602052604090206006015496506126e3565b6000848152600a602052604090206006015487146126e3576000848152600a602052604090206006018790555b6126ec86613a07565b95506126fa84888888610c97565b50505050505050565b3373e840e25bab3f1f02eb1244a3adc8965f5864f22e14612794576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600c6020908152604080832084845290915290205460ff1615156127dc576000828152600c602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b801561282e576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b6128378b613d30565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073e840e25bab3f1f02eb1244a3adc8965f5864f22e9263c0942dfd928a926084808201939182900301818588803b158015611b5557600080fd5b6128c8615403565b601154600090819060ff16151560011461292e576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015612975576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b34633b9aca008110156129cd576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612a1d576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b612a26866109e3565b336000908152600860205260409020549096509450600160a060020a0388161580612a595750600160a060020a03881633145b15612a77576000858152600a60205260409020600601549350612ac0565b600160a060020a038816600090815260086020908152604080832054888452600a909252909120600601549094508414612ac0576000858152600a602052604090206006018490555b612ac987613a07565b96506115b285858989610c97565b600b60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b612b11615403565b601154600090819060ff161515600114612b77576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015612bbe576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b34633b9aca00811015612c16576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612c66576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b612c6f866109e3565b336000908152600860205260409020549096509450871580612ca157506000858152600a602052604090206001015488145b15612cbf576000858152600a60205260409020600601549350612ac0565b600088815260096020908152604080832054888452600a909252909120600601549094508414612ac0576000858152600a60205260409020600601849055612ac987613a07565b6010602052600090815260409020805460019091015482565b6007546000818152600d60205260408120600201549091904290811015612da757600480546000848152600d602052604090209091015401811115612d80576000828152600d6020526040902060020154610f82908263ffffffff613cd016565b600480546000848152600d6020526040902090910154610f8291018263ffffffff613cd016565b60009250610f93565b600480546000848152600d602052604081209092015442910181118015612e1957506000848152600d602052604090206002015481111580612e1957506000848152600d602052604090206002015481118015612e1957506000848152600d6020526040902054155b15612e47576000848152600d6020526040902060060154612e40908463ffffffff6146e516565b9150612e50565b612e4083614706565b5092915050565b600754600480546000838152600d602052604081209092015491929142910181118015612ec657506000828152600d602052604090206002015481111580612ec657506000828152600d602052604090206002015481118015612ec657506000828152600d6020526040902054155b15612efa576000828152600d6020526040902060050154612ef3908590610f76908263ffffffff61397916565b9250612f03565b612ef38461477e565b5050919050565b60115460ff1681565b60055481565b600a6020526000908152604090208054600182015460028301546003840154600485015460058601546006870154600790970154600160a060020a03909616969495939492939192909188565b600780546001016000818152600d6020526040902090910154612f8f903463ffffffff61397916565b6000828152600d6020908152604091829020600701929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600754915050600160a060020a038916600090815260086020908152604080832054808452600a808452828520600180820154600b875285882089895287529487200154958390529352600283015460059093015490938493909161307a9061305c908690614688565b6000878152600a60205260409020600301549063ffffffff61397916565b6000958652600a6020908152604080882060040154600b83528189209989529890915290952054939e929d50909b509950919750919550909350915050565b6000858152600b60209081526040808320898452909152812060010154819015156130eb576130e887846147eb565b92505b633b9aca008611156115b2576000888152600d6020526040902060060154613119908763ffffffff6146e516565b9150670de0b6b3a7640000821061319057613134828961484a565b6000888152600d6020526040902054871461315b576000888152600d602052604090208790555b6000888152600d60205260409020600101548414613188576000888152600d602052604090206001018490555b825160640183525b67016345785d8a000086106133d0576006805460010190556131b061494c565b1515600114156133d057678ac7230489e800008610613251576005546064906131e090604b63ffffffff61454316565b8115156131e957fe5b6000898152600a60205260409020600201549190049150613210908263ffffffff61397916565b6000888152600a6020526040902060020155600554613235908263ffffffff613cd016565b60055582516d0eca8847c4129106ce83000000000183526133a5565b670de0b6b3a764000086101580156132705750678ac7230489e8000086105b156132fd5760055460649061328c90603263ffffffff61454316565b81151561329557fe5b6000898152600a602052604090206002015491900491506132bc908263ffffffff61397916565b6000888152600a60205260409020600201556005546132e1908263ffffffff613cd016565b60055582516d09dc5ada82b70b59df02000000000183526133a5565b67016345785d8a0000861015801561331c5750670de0b6b3a764000086105b156133a55760055460649061333890601963ffffffff61454316565b81151561334157fe5b6000898152600a60205260409020600201549190049150613368908263ffffffff61397916565b6000888152600a602052604090206002015560055461338d908263ffffffff613cd016565b60055582516d0eca8847c4129106ce83000000000183525b82516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b268000000001835260006006555b60065483516103e89091020183526000878152600b602090815260408083208b845290915290206001015461340c90839063ffffffff61397916565b6000888152600b602090815260408083208c84529091529020600181019190915554613439908790613979565b6000888152600b602090815260408083208c8452825280832093909355600d9052206005015461347090839063ffffffff61397916565b6000898152600d6020526040902060058101919091556006015461349b90879063ffffffff61397916565b6000898152600d6020908152604080832060060193909355600e8152828220878352905220546134d290879063ffffffff61397916565b6000898152600e602090815260408083208884529091529020556134fa888888888888614b63565b925061350a888888878688614d03565b92506115b28785888587614e31565b613521615403565b600780546000818152600d6020526040812080546001820154919094015492939290918080808080606461355c88603063ffffffff61454316565b81151561356557fe5b049550600a8760008a815260106020526040902054919004955060649061359390899063ffffffff61454316565b81151561359c57fe5b0493506135b584611f2c87818b8b63ffffffff613cd016565b60008b8152600d60205260409020600501549093506135e285670de0b6b3a764000063ffffffff61454316565b8115156135eb57fe5b60008c8152600d6020526040902060050154919004925061363990670de0b6b3a76400009061362190859063ffffffff61454316565b81151561362a57fe5b8691900463ffffffff613cd016565b9050600081111561366957613654848263ffffffff613cd016565b9350613666838263ffffffff61397916565b92505b6000898152600a602052604090206002015461368c90879063ffffffff61397916565b60008a8152600a60205260409020600290810191909155600154600160a060020a0316906108fc9087049081150290604051600060405180830381858888f193505050501580156136e1573d6000803e3d6000fd5b50600054600160a060020a03166108fc600287049081150290604051600060405180830381858888f19350505050158015613720573d6000803e3d6000fd5b5060008a8152600d602052604090206008015461374490839063ffffffff61397916565b600d60008c815260200190815260200160002060080181905550600d60008b815260200190815260200160002060020154620f4240028c60000151018c60000181815250508767016345785d8a000002896a52b7d2dcc80cd2e4000000028d6020015101018c6020018181525050600a60008a815260200190815260200160002060000160009054906101000a9004600160a060020a03168c60400190600160a060020a03169081600160a060020a031681525050600a60008a8152602001908152602001600020600101548c606001906000191690816000191681525050858c6080018181525050838c60e001818152505060008c60c0018181525050828c60a00181815250507f0f10d353302c6027c82cea0f21a24b8a12e0ee636dba4021bb71a50ec292cb038a600a60008c815260200190815260200160002060000160009054906101000a9004600160a060020a0316600a60008d81526020019081526020016000206001015489876040518086815260200185600160a060020a0316600160a060020a0316815260200184600019166000191681526020018381526020018281526020019550505050505060405180910390a1600780546001908101909155999099016000818152600d602052604090204260049182018190559054919a9161394b9161393f906201518063ffffffff61397916565b9063ffffffff61397916565b60008b8152600d6020526040902060028101919091556007018390558b9a5050505050505050505050919050565b818101828110156139d4576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b6000613a006139f76139f2858563ffffffff613cd016565b61477e565b611f2c8561477e565b9392505050565b600080821080613a175750600382115b15613a2457506002613a27565b50805b919050565b600754600480546000838152600d602052604090209091015442910181118015613a9857506000828152600d602052604090206002015481111580613a9857506000828152600d602052604090206002015481118015613a9857506000828152600d6020526040902054155b15613acf57613aaa84611f2c89613c49565b6000888152600a6020526040902060030155613aca8288868989886130b9565b6126fa565b6000828152600d602052604090206002015481118015613b0157506000828152600d602052604090206003015460ff16155b156126fa576000828152600d60205260409020600301805460ff19166001179055613b2b83613519565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600a60008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600a60205260408120600501548190613c68908490614f9f565b6000838152600a6020526040902060048101546003820154600290920154613c9a9261393f919063ffffffff61397916565b90506000811115613cc6576000838152600a602052604081206002810182905560038101829055600401555b8091505b50919050565b600082821115613d2a576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b8051600090829082808060208411801590613d4b5750600084115b1515613dc7576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613dd657fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613e3d57508460018503815181101515613e1557fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613eb9576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613ec857fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a02141561400b57846001815181101515613f0257fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613f7f576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613f8e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a021415151561400b576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b838210156144db5784517f40000000000000000000000000000000000000000000000000000000000000009086908490811061404857fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156140bc575084517f5b000000000000000000000000000000000000000000000000000000000000009086908490811061409d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b156141295784828151811015156140cf57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a02858381518110151561410057fe5b906020010190600160f860020a031916908160001a90535082151561412457600192505b6144d0565b848281518110151561413757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480614207575084517f60000000000000000000000000000000000000000000000000000000000000009086908490811061419357fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614207575084517f7b00000000000000000000000000000000000000000000000000000000000000908690849081106141e857fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b806142b1575084517f2f000000000000000000000000000000000000000000000000000000000000009086908490811061423d57fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156142b1575084517f3a000000000000000000000000000000000000000000000000000000000000009086908490811061429257fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b151561432d576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b848281518110151561433b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141561441a57848260010181518110151561437757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415151561441a576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b821580156144c6575084517f30000000000000000000000000000000000000000000000000000000000000009086908490811061445357fe5b90602001015160f860020a900460f860020a02600160f860020a03191610806144c6575084517f3900000000000000000000000000000000000000000000000000000000000000908690849081106144a757fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b156144d057600192505b600190910190614010565b600183151514614535576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b6000821515614554575060006139d4565b5081810281838281151561456457fe5b04146139d4576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000828152600b602090815260408083208484528252808320600190810154600d808552838620600581015493810154875260108652938620548787529452600790920154670de0b6b3a764000093614677939261466b92909161464291879160649161462c9163ffffffff61454316565b81151561463557fe5b049063ffffffff61454316565b81151561464b57fe5b6000888152600d602052604090206008015491900463ffffffff61397916565b9063ffffffff61454316565b81151561468057fe5b049392505050565b6000828152600b6020908152604080832084845282528083206002810154600190910154600d90935290832060080154613a0092670de0b6b3a7640000916146cf91614543565b8115156146d857fe5b049063ffffffff613cd016565b6000613a006146f384614706565b611f2c614706868663ffffffff61397916565b60006309502f9061476e6d03b2a1d15167e7c5699bfde00000611f2c6147697a0dac7055469777a6122ee4310dd6c14410500f290484000000000061393f6b01027e72f1f128130880000061466b8a670de0b6b3a764000063ffffffff61454316565b615036565b81151561477757fe5b0492915050565b6000614791670de0b6b3a7640000615089565b61476e60026147c46147b186670de0b6b3a764000063ffffffff61454316565b65886c8f6730709063ffffffff61454316565b8115156147cd57fe5b0461393f6147da86615089565b6304a817c89063ffffffff61454316565b6147f3615403565b6000838152600a602052604090206005015415614827576000838152600a6020526040902060050154614827908490614f9f565b506007546000928352600a60208190526040909320600501558051909101815290565b6000818152600d60205260408120600701544291601e916113881015614871576002820491505b6000848152600d60205260409020600201548311801561489d57506000848152600d6020526040902054155b156148c0576148b98361393f84670de0b6b3a764000089614635565b90506148ec565b6000848152600d60205260409020600201546148e99061393f84670de0b6b3a764000089614635565b90505b6148ff620151808463ffffffff61397916565b81101561491f576000848152600d60205260409020600201819055614945565b614932620151808463ffffffff61397916565b6000858152600d60205260409020600201555b5050505050565b600080614abd4361393f42336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106149c75780518252601f1990920191602091820191016149a8565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120925050508115156149fd57fe5b0461393f4561393f42416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614a765780518252601f199092019160209182019101614a57565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614aac57fe5b0461393f424463ffffffff61397916565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614b0b5780518252601f199092019160209182019101614aec565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060065490945092506103e89150839050046103e80282031015614b5a5760019150614b5f565b600091505b5090565b614b6b615403565b60008054604051600a8804929182918291600160a060020a03169060028604908381818185875af115159250614ba8915050576002909304928392505b600154600160a060020a03166002850460405160006040518083038185875af115159250614bea91505057600284049290920191614be760028561362a565b93505b614c06614bf98c8c8c8c615095565b849063ffffffff61397916565b92506000831115614cf457600283049150614c27838363ffffffff613cd016565b600154604051919250600160a060020a0316906002830480156108fc02916000818181858888f19350505050158015614c64573d6000803e3d6000fd5b50600054600160a060020a03166108fc600283049081150290604051600060405180830381858888f19350505050158015614ca3573d6000803e3d6000fd5b5060008b8152600d6020526040902060070154614cc6908363ffffffff61397916565b60008c8152600d602052604090206007015560c0860151614cee90849063ffffffff61397916565b60c08701525b50939998505050505050505050565b614d0b615403565b6000848152600f6020526040812054819081908190606490614d34908b9063ffffffff61454316565b811515614d3d57fe5b049350606489049250614d5b8360055461397990919063ffffffff16565b600555614d8c6064614d748b601d63ffffffff61454316565b811515614d7d57fe5b8b91900463ffffffff613cd016565b9850614d9e898563ffffffff613cd016565b9150614dac8b8b868a6152b2565b90506000811115614dca57614dc7848263ffffffff613cd016565b93505b60008b8152600d6020526040902060070154614df09061393f848463ffffffff61397916565b60008c8152600d602052604090206007015560e0860151614e1890859063ffffffff61397916565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600754751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c74681600001518260200151600a6000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600554604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614fab8383614688565b90506000811115615031576000838152600a6020526040902060030154614fd990829063ffffffff61397916565b6000848152600a6020908152604080832060030193909355600b81528282208583529052206002015461501390829063ffffffff61397916565b6000848152600b602090815260408083208684529091529020600201555b505050565b6000806002615046846001613979565b81151561504f57fe5b0490508291505b81811015613cca578091506002615078828581151561507157fe5b0483613979565b81151561508157fe5b049050615056565b60006139d48283614543565b6002546040516000918291600a860491601487049160228804918591600160a060020a03909116906108fc86150290869084818181858888f193505050501580156150e4573d6000803e3d6000fd5b5086158015906150f45750888714155b801561511057506000878152600a602052604090206001015415155b15615291576000898152600a602052604080822060070189905588825290206004015461514490849063ffffffff61397916565b6000888152600a6020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518a918c918a917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4506000868152600a602052604090206007015480158015906151d95750888114155b15615279576000818152600a602052604090206004015461520190839063ffffffff61397916565b6000828152600a6020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101849052426060830152518a918c9184917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a461528c565b615289858363ffffffff61397916565b94505b6152a4565b6152a1858463ffffffff61397916565b94505b509298975050505050505050565b6000848152600d6020526040812060050154819081906152e086670de0b6b3a764000063ffffffff61454316565b8115156152e957fe5b6000898152600d6020526040902060080154919004925061531190839063ffffffff61397916565b6000888152600d6020526040902060080155670de0b6b3a764000061533c838663ffffffff61454316565b81151561534557fe5b6000888152600b602090815260408083208c8452825280832060020154600d909252909120600801549290910492506153989161393f908490670de0b6b3a7640000906146cf908a63ffffffff61454316565b6000878152600b602090815260408083208b8452825280832060020193909355600d905220600501546153f890670de0b6b3a7640000906153e090859063ffffffff61454316565b8115156153e957fe5b8791900463ffffffff613cd016565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056006e20646973636f72640000000000000000000000000000000000000000000000706f636b6574206c696e743a206e6f7420612076616c69642063757272656e63697473206e6f74207265616479207965742e2020636865636b203f65746120696e6f20766974616c696b2c206e6f000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a7230582046dd443fda47cd333d99eb3a88341b0dd6d57ea5be02f732b42751b91d8aff990029

Deployed Bytecode

0x6080604052600436106101cc5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461036c57806306fdde0314610393578063079ce3271461041d5780630f15f4c01461043d57806310f01eba1461045257806311a09ae71461047357806324c33d33146104885780632660316e146104ff5780632ce219991461052e5780632e19ebdc1461055f578063349cdcac146105775780633ccfd60b146105955780633ddd4698146105aa57806349cc635d146106065780635893d48114610630578063624ae5c01461064b5780636306643414610660578063633891c414610696578063685ffd83146106ae578063747dff421461070157806382bfc7391461078c5780638f38f309146107b35780638f7140ea146107c1578063921dec21146107dc57806395d89b411461039357806398a0871d1461082f578063a2bccae914610846578063a65b37a114610887578063c519500e14610895578063c7e284b8146108ad578063ce89c80c146108c2578063cf808000146108dd578063d53b2679146108f5578063d87574e01461090a578063de7874f31461091f578063ed78cf4a14610982578063ee0b5d8b1461098a575b6101d4615403565b60115460009060ff161515600114610238576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b801561027f576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b34633b9aca008110156102d7576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115610327576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b610330856109e3565b33600090815260086020908152604080832054808452600a909252909120600601549196509450610365908590600288610c97565b5050505050005b34801561037857600080fd5b50610381610ed2565b60408051918252519081900360200190f35b34801561039f57600080fd5b506103a8610f98565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e25781810151838201526020016103ca565b50505050905090810190601f16801561040f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042957600080fd5b5061043b600435602435604435610fcf565b005b34801561044957600080fd5b5061043b6111db565b34801561045e57600080fd5b50610381600160a060020a0360043516611310565b34801561047f57600080fd5b50610381611322565b34801561049457600080fd5b506104a0600435611328565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561050b57600080fd5b5061051a60043560243561138b565b604080519115158252519081900360200190f35b34801561053a57600080fd5b506105466004356113ab565b6040805192835260208301919091528051918290030190f35b34801561056b57600080fd5b506103816004356113c4565b34801561058357600080fd5b5061043b6004356024356044356113d6565b3480156105a157600080fd5b5061043b6115bc565b6040805160206004803580820135601f810184900484028501840190955284845261043b94369492936024939284019190819084018382808284375094975050600160a060020a03853516955050505050602001351515611a6d565b34801561061257600080fd5b5061043b600435600160a060020a0360243516604435606435611c26565b34801561063c57600080fd5b50610381600435602435611e17565b34801561065757600080fd5b50610381611e34565b34801561066c57600080fd5b50610678600435611e3a565b60408051938452602084019290925282820152519081900360600190f35b3480156106a257600080fd5b50610678600435611fe0565b6040805160206004803580820135601f810184900484028501840190955284845261043b943694929360249392840191908190840183828082843750949750508435955050505050602001351515612039565b34801561070d57600080fd5b50610716612119565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561079857600080fd5b5061043b600160a060020a0360043516602435604435612317565b61043b600435602435612513565b3480156107cd57600080fd5b5061043b600435602435612703565b6040805160206004803580820135601f810184900484028501840190955284845261043b9436949293602493928401919081908401838280828437509497505084359550505050506020013515156127e0565b61043b600160a060020a03600435166024356128c0565b34801561085257600080fd5b50610861600435602435612ad7565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61043b600435602435612b09565b3480156108a157600080fd5b50610546600435612d06565b3480156108b957600080fd5b50610381612d1f565b3480156108ce57600080fd5b50610381600435602435612db0565b3480156108e957600080fd5b50610381600435612e57565b34801561090157600080fd5b5061051a612f0a565b34801561091657600080fd5b50610381612f13565b34801561092b57600080fd5b50610937600435612f19565b60408051600160a060020a0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b61043b612f66565b34801561099657600080fd5b506109ab600160a060020a0360043516612fe4565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6109eb615403565b336000908152600860205260408120549080821515610c8e57604080517fe56556a9000000000000000000000000000000000000000000000000000000008152336004820152905173e840e25bab3f1f02eb1244a3adc8965f5864f22e9163e56556a99160248083019260209291908290030181600087803b158015610a7057600080fd5b505af1158015610a84573d6000803e3d6000fd5b505050506040513d6020811015610a9a57600080fd5b5051604080517f82e37b2c00000000000000000000000000000000000000000000000000000000815260048101839052905191945073e840e25bab3f1f02eb1244a3adc8965f5864f22e916382e37b2c916024808201926020929091908290030181600087803b158015610b0d57600080fd5b505af1158015610b21573d6000803e3d6000fd5b505050506040513d6020811015610b3757600080fd5b5051604080517fe3c08adf00000000000000000000000000000000000000000000000000000000815260048101869052905191935073e840e25bab3f1f02eb1244a3adc8965f5864f22e9163e3c08adf916024808201926020929091908290030181600087803b158015610baa57600080fd5b505af1158015610bbe573d6000803e3d6000fd5b505050506040513d6020811015610bd457600080fd5b5051336000818152600860209081526040808320889055878352600a9091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610c5d576000828152600960209081526040808320869055858352600a82528083206001908101869055600c8352818420868552909252909120805460ff191690911790555b8015801590610c6c5750828114155b15610c86576000838152600a602052604090206006018190555b845160010185525b50929392505050565b600754600480546000838152600d602052604090209091015442910181118015610d0357506000828152600d602052604090206002015481111580610d0357506000828152600d602052604090206002015481118015610d0357506000828152600d6020526040902054155b15610d1b57610d168287348888886130b9565b610eca565b6000828152600d602052604090206002015481118015610d4d57506000828152600d602052604090206003015460ff16155b15610e95576000828152600d60205260409020600301805460ff19166001179055610d7783613519565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a33600a6000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b6000868152600a6020526040902060030154610eb7903463ffffffff61397916565b6000878152600a60205260409020600301555b505050505050565b600754600480546000838152600d602052604081209092015491929142910181118015610f4157506000828152600d602052604090206002015481111580610f4157506000828152600d602052604090206002015481118015610f4157506000828152600d6020526040902054155b15610f89576000828152600d6020526040902060050154610f8290670de0b6b3a764000090610f76908263ffffffff61397916565b9063ffffffff6139da16565b9250610f93565b655af3107a400092505b505090565b60408051808201909152600681527f6475616e67380000000000000000000000000000000000000000000000000000602082015281565b610fd7615403565b601154600090819060ff16151560011461103d576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015611084576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b85633b9aca008110156110dc576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561112c576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b33600090815260086020526040902054945088158061115b57506000858152600a602052604090206001015489145b15611179576000858152600a602052604090206006015493506111b8565b600089815260096020908152604080832054888452600a9092529091206006015490945084146111b8576000858152600a602052604090206006018490555b6111c188613a07565b97506111d085858a8a8a613a2c565b505050505050505050565b600054600160a060020a0316331461123d576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c792061646d696e2063616e206163746976617465000000000000000000604482015290519081900360640190fd5b60115460ff1615611298576040805160e560020a62461bcd02815260206004820152601c60248201527f464f4d4f2053686f727420616c72656164792061637469766174656400000000604482015290519081900360640190fd5b6011805460ff191660019081179091556007819055600454600354600092909252600d602052429091019081037ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c95562015180017ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c755565b60086020526000908152604090205481565b60065481565b600d60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b909b0154999a9899979860ff909716979596949593949293919290918c565b600c60209081526000928352604080842090915290825290205460ff1681565b600f602052600090815260409020805460019091015482565b60096020526000908152604090205481565b6113de615403565b60115460009060ff161515600114611442576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015611489576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b84633b9aca008110156114e1576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115611531576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b33600090815260086020526040902054935087158061154f57508388145b1561156d576000848152600a6020526040902060060154975061159a565b6000848152600a6020526040902060060154881461159a576000848152600a602052604090206006018890555b6115a387613a07565b96506115b28489898989613a2c565b5050505050505050565b60008060008060006115cc615403565b601154600090819060ff161515600114611632576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015611679576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b60075433600090815260086020908152604080832054848452600d90925290912060020154919b50429a509850891180156116c6575060008a8152600d602052604090206003015460ff16155b80156116df575060008a8152600d602052604090205415155b156119185760008a8152600d60205260409020600301805460ff1916600117905561170985613519565b945061171488613c49565b965060008711156117f857600154604051600a89049750600288049550859450600160a060020a03909116906108fc8515029085906000818181858888f19350505050158015611768573d6000803e3d6000fd5b5060008054604051600160a060020a039091169185156108fc02918691818181858888f193505050501580156117a2573d6000803e3d6000fd5b506000888152600a6020526040902054600160a060020a03166108fc6117ce898963ffffffff613cd016565b6040518115909202916000818181858888f193505050501580156117f6573d6000803e3d6000fd5b505b88670de0b6b3a764000002856000015101856000018181525050878560200151018560200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc33600a60008b81526020019081526020016000206001015489886000015189602001518a604001518b606001518c608001518d60a001518e60c001518f60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611a61565b61192188613c49565b96506000871115611a0557600154604051600a89049750600288049550859450600160a060020a03909116906108fc8515029085906000818181858888f19350505050158015611975573d6000803e3d6000fd5b5060008054604051600160a060020a039091169185156108fc02918691818181858888f193505050501580156119af573d6000803e3d6000fd5b506000888152600a6020526040902054600160a060020a03166108fc6119db898963ffffffff613cd016565b6040518115909202916000818181858888f19350505050158015611a03573d6000803e3d6000fd5b505b6000888152600a602090815260409182902060010154825133815291820152808201899052606081018b9052905189917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050505050565b6000808080808033803b8015611abb576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b611ac48b613d30565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b50995034985073e840e25bab3f1f02eb1244a3adc8965f5864f22e9263aa4d490b928a926084808201939182900301818588803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b50505050506040513d6040811015611b8057600080fd5b508051602091820151600160a060020a03808b16600081815260088652604080822054858352600a8852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b3373e840e25bab3f1f02eb1244a3adc8965f5864f22e14611cb7576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600860205260409020548414611cf257600160a060020a03831660009081526008602052604090208490555b6000828152600960205260409020548414611d195760008281526009602052604090208490555b6000848152600a6020526040902054600160a060020a03848116911614611d6f576000848152600a60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600a60205260409020600101548214611d9c576000848152600a602052604090206001018290555b6000848152600a60205260409020600601548114611dc9576000848152600a602052604090206006018190555b6000848152600c6020908152604080832085845290915290205460ff161515611e11576000848152600c602090815260408083208584529091529020805460ff191660011790555b50505050565b600e60209081526000928352604080842090915290825290205481565b60075481565b6007546000818152600d60205260408120600201549091829182919042118015611e7657506000818152600d602052604090206003015460ff16155b8015611e8f57506000818152600d602052604090205415155b15611fb0576000818152600d6020526040902054851415611f74576000818152600d6020526040902060070154611efd90606490611ed490603063ffffffff61454316565b811515611edd57fe5b6000888152600a602052604090206002015491900463ffffffff61397916565b6000868152600b60209081526040808320858452909152902060020154611f5690611f3890611f2c89866145ba565b9063ffffffff613cd016565b6000888152600a60205260409020600301549063ffffffff61397916565b6000878152600a602052604090206004015491955093509150611fd8565b6000858152600a60209081526040808320600290810154600b8452828520868652909352922090910154611f5690611f3890611f2c89866145ba565b6000858152600a602052604090206002810154600590910154611f5690611f38908890614688565b509193909250565b6000818152600a6020526040812060070154819081908180821561202c576000838152600a60205260409020600701549150811561202c57506000818152600a60205260409020600701545b9196909550909350915050565b6000808080808033803b8015612087576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b6120908b613d30565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073e840e25bab3f1f02eb1244a3adc8965f5864f22e9263745ea0c1928a926084808201939182900301818588803b158015611b5557600080fd5b60008060008060008060008060008060008060008060006007549050600d60008281526020019081526020016000206009015481600d600084815260200190815260200160002060050154600d600085815260200190815260200160002060020154600d600086815260200190815260200160002060040154600d600087815260200190815260200160002060070154600d600088815260200190815260200160002060000154600a02600d60008981526020019081526020016000206001015401600a6000600d60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a0316600a6000600d60008c815260200190815260200160002060000154815260200190815260200160002060010154600e60008b8152602001908152602001600020600080815260200190815260200160002054600e60008c815260200190815260200160002060006001815260200190815260200160002054600e60008d815260200190815260200160002060006002815260200190815260200160002054600e60008e8152602001908152602001600020600060038152602001908152602001600020546005546103e802600654019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b61231f615403565b601154600090819060ff161515600114612385576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b80156123cc576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b85633b9aca00811015612424576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612474576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b336000908152600860205260409020549450600160a060020a03891615806124a45750600160a060020a03891633145b156124c2576000858152600a602052604090206006015493506111b8565b600160a060020a038916600090815260086020908152604080832054888452600a9092529091206006015490945084146111b8576000858152600a602052604090206006018490556111c188613a07565b61251b615403565b60115460009060ff16151560011461257f576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b80156125c6576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b34633b9aca0081101561261e576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561266e576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b612677856109e3565b33600090815260086020526040902054909550935086158061269857508387145b156126b6576000848152600a602052604090206006015496506126e3565b6000848152600a602052604090206006015487146126e3576000848152600a602052604090206006018790555b6126ec86613a07565b95506126fa84888888610c97565b50505050505050565b3373e840e25bab3f1f02eb1244a3adc8965f5864f22e14612794576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600c6020908152604080832084845290915290205460ff1615156127dc576000828152600c602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b801561282e576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b6128378b613d30565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073e840e25bab3f1f02eb1244a3adc8965f5864f22e9263c0942dfd928a926084808201939182900301818588803b158015611b5557600080fd5b6128c8615403565b601154600090819060ff16151560011461292e576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015612975576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b34633b9aca008110156129cd576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612a1d576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b612a26866109e3565b336000908152600860205260409020549096509450600160a060020a0388161580612a595750600160a060020a03881633145b15612a77576000858152600a60205260409020600601549350612ac0565b600160a060020a038816600090815260086020908152604080832054888452600a909252909120600601549094508414612ac0576000858152600a602052604090206006018490555b612ac987613a07565b96506115b285858989610c97565b600b60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b612b11615403565b601154600090819060ff161515600114612b77576040805160e560020a62461bcd028152602060048201526029602482015260008051602061549d833981519152604482015260008051602061545d833981519152606482015290519081900360840190fd5b33803b8015612bbe576040805160e560020a62461bcd02815260206004820152601160248201526000805160206154dd833981519152604482015290519081900360640190fd5b34633b9aca00811015612c16576040805160e560020a62461bcd028152602060048201526021602482015260008051602061547d833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612c66576040805160e560020a62461bcd02815260206004820152600e60248201526000805160206154bd833981519152604482015290519081900360640190fd5b612c6f866109e3565b336000908152600860205260409020549096509450871580612ca157506000858152600a602052604090206001015488145b15612cbf576000858152600a60205260409020600601549350612ac0565b600088815260096020908152604080832054888452600a909252909120600601549094508414612ac0576000858152600a60205260409020600601849055612ac987613a07565b6010602052600090815260409020805460019091015482565b6007546000818152600d60205260408120600201549091904290811015612da757600480546000848152600d602052604090209091015401811115612d80576000828152600d6020526040902060020154610f82908263ffffffff613cd016565b600480546000848152600d6020526040902090910154610f8291018263ffffffff613cd016565b60009250610f93565b600480546000848152600d602052604081209092015442910181118015612e1957506000848152600d602052604090206002015481111580612e1957506000848152600d602052604090206002015481118015612e1957506000848152600d6020526040902054155b15612e47576000848152600d6020526040902060060154612e40908463ffffffff6146e516565b9150612e50565b612e4083614706565b5092915050565b600754600480546000838152600d602052604081209092015491929142910181118015612ec657506000828152600d602052604090206002015481111580612ec657506000828152600d602052604090206002015481118015612ec657506000828152600d6020526040902054155b15612efa576000828152600d6020526040902060050154612ef3908590610f76908263ffffffff61397916565b9250612f03565b612ef38461477e565b5050919050565b60115460ff1681565b60055481565b600a6020526000908152604090208054600182015460028301546003840154600485015460058601546006870154600790970154600160a060020a03909616969495939492939192909188565b600780546001016000818152600d6020526040902090910154612f8f903463ffffffff61397916565b6000828152600d6020908152604091829020600701929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600754915050600160a060020a038916600090815260086020908152604080832054808452600a808452828520600180820154600b875285882089895287529487200154958390529352600283015460059093015490938493909161307a9061305c908690614688565b6000878152600a60205260409020600301549063ffffffff61397916565b6000958652600a6020908152604080882060040154600b83528189209989529890915290952054939e929d50909b509950919750919550909350915050565b6000858152600b60209081526040808320898452909152812060010154819015156130eb576130e887846147eb565b92505b633b9aca008611156115b2576000888152600d6020526040902060060154613119908763ffffffff6146e516565b9150670de0b6b3a7640000821061319057613134828961484a565b6000888152600d6020526040902054871461315b576000888152600d602052604090208790555b6000888152600d60205260409020600101548414613188576000888152600d602052604090206001018490555b825160640183525b67016345785d8a000086106133d0576006805460010190556131b061494c565b1515600114156133d057678ac7230489e800008610613251576005546064906131e090604b63ffffffff61454316565b8115156131e957fe5b6000898152600a60205260409020600201549190049150613210908263ffffffff61397916565b6000888152600a6020526040902060020155600554613235908263ffffffff613cd016565b60055582516d0eca8847c4129106ce83000000000183526133a5565b670de0b6b3a764000086101580156132705750678ac7230489e8000086105b156132fd5760055460649061328c90603263ffffffff61454316565b81151561329557fe5b6000898152600a602052604090206002015491900491506132bc908263ffffffff61397916565b6000888152600a60205260409020600201556005546132e1908263ffffffff613cd016565b60055582516d09dc5ada82b70b59df02000000000183526133a5565b67016345785d8a0000861015801561331c5750670de0b6b3a764000086105b156133a55760055460649061333890601963ffffffff61454316565b81151561334157fe5b6000898152600a60205260409020600201549190049150613368908263ffffffff61397916565b6000888152600a602052604090206002015560055461338d908263ffffffff613cd016565b60055582516d0eca8847c4129106ce83000000000183525b82516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b268000000001835260006006555b60065483516103e89091020183526000878152600b602090815260408083208b845290915290206001015461340c90839063ffffffff61397916565b6000888152600b602090815260408083208c84529091529020600181019190915554613439908790613979565b6000888152600b602090815260408083208c8452825280832093909355600d9052206005015461347090839063ffffffff61397916565b6000898152600d6020526040902060058101919091556006015461349b90879063ffffffff61397916565b6000898152600d6020908152604080832060060193909355600e8152828220878352905220546134d290879063ffffffff61397916565b6000898152600e602090815260408083208884529091529020556134fa888888888888614b63565b925061350a888888878688614d03565b92506115b28785888587614e31565b613521615403565b600780546000818152600d6020526040812080546001820154919094015492939290918080808080606461355c88603063ffffffff61454316565b81151561356557fe5b049550600a8760008a815260106020526040902054919004955060649061359390899063ffffffff61454316565b81151561359c57fe5b0493506135b584611f2c87818b8b63ffffffff613cd016565b60008b8152600d60205260409020600501549093506135e285670de0b6b3a764000063ffffffff61454316565b8115156135eb57fe5b60008c8152600d6020526040902060050154919004925061363990670de0b6b3a76400009061362190859063ffffffff61454316565b81151561362a57fe5b8691900463ffffffff613cd016565b9050600081111561366957613654848263ffffffff613cd016565b9350613666838263ffffffff61397916565b92505b6000898152600a602052604090206002015461368c90879063ffffffff61397916565b60008a8152600a60205260409020600290810191909155600154600160a060020a0316906108fc9087049081150290604051600060405180830381858888f193505050501580156136e1573d6000803e3d6000fd5b50600054600160a060020a03166108fc600287049081150290604051600060405180830381858888f19350505050158015613720573d6000803e3d6000fd5b5060008a8152600d602052604090206008015461374490839063ffffffff61397916565b600d60008c815260200190815260200160002060080181905550600d60008b815260200190815260200160002060020154620f4240028c60000151018c60000181815250508767016345785d8a000002896a52b7d2dcc80cd2e4000000028d6020015101018c6020018181525050600a60008a815260200190815260200160002060000160009054906101000a9004600160a060020a03168c60400190600160a060020a03169081600160a060020a031681525050600a60008a8152602001908152602001600020600101548c606001906000191690816000191681525050858c6080018181525050838c60e001818152505060008c60c0018181525050828c60a00181815250507f0f10d353302c6027c82cea0f21a24b8a12e0ee636dba4021bb71a50ec292cb038a600a60008c815260200190815260200160002060000160009054906101000a9004600160a060020a0316600a60008d81526020019081526020016000206001015489876040518086815260200185600160a060020a0316600160a060020a0316815260200184600019166000191681526020018381526020018281526020019550505050505060405180910390a1600780546001908101909155999099016000818152600d602052604090204260049182018190559054919a9161394b9161393f906201518063ffffffff61397916565b9063ffffffff61397916565b60008b8152600d6020526040902060028101919091556007018390558b9a5050505050505050505050919050565b818101828110156139d4576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b6000613a006139f76139f2858563ffffffff613cd016565b61477e565b611f2c8561477e565b9392505050565b600080821080613a175750600382115b15613a2457506002613a27565b50805b919050565b600754600480546000838152600d602052604090209091015442910181118015613a9857506000828152600d602052604090206002015481111580613a9857506000828152600d602052604090206002015481118015613a9857506000828152600d6020526040902054155b15613acf57613aaa84611f2c89613c49565b6000888152600a6020526040902060030155613aca8288868989886130b9565b6126fa565b6000828152600d602052604090206002015481118015613b0157506000828152600d602052604090206003015460ff16155b156126fa576000828152600d60205260409020600301805460ff19166001179055613b2b83613519565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600a60008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600a60205260408120600501548190613c68908490614f9f565b6000838152600a6020526040902060048101546003820154600290920154613c9a9261393f919063ffffffff61397916565b90506000811115613cc6576000838152600a602052604081206002810182905560038101829055600401555b8091505b50919050565b600082821115613d2a576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b8051600090829082808060208411801590613d4b5750600084115b1515613dc7576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613dd657fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613e3d57508460018503815181101515613e1557fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613eb9576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613ec857fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a02141561400b57846001815181101515613f0257fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613f7f576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613f8e57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a021415151561400b576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b838210156144db5784517f40000000000000000000000000000000000000000000000000000000000000009086908490811061404857fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156140bc575084517f5b000000000000000000000000000000000000000000000000000000000000009086908490811061409d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b156141295784828151811015156140cf57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a02858381518110151561410057fe5b906020010190600160f860020a031916908160001a90535082151561412457600192505b6144d0565b848281518110151561413757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480614207575084517f60000000000000000000000000000000000000000000000000000000000000009086908490811061419357fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015614207575084517f7b00000000000000000000000000000000000000000000000000000000000000908690849081106141e857fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b806142b1575084517f2f000000000000000000000000000000000000000000000000000000000000009086908490811061423d57fe5b90602001015160f860020a900460f860020a02600160f860020a0319161180156142b1575084517f3a000000000000000000000000000000000000000000000000000000000000009086908490811061429257fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b151561432d576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b848281518110151561433b57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a02141561441a57848260010181518110151561437757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415151561441a576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b821580156144c6575084517f30000000000000000000000000000000000000000000000000000000000000009086908490811061445357fe5b90602001015160f860020a900460f860020a02600160f860020a03191610806144c6575084517f3900000000000000000000000000000000000000000000000000000000000000908690849081106144a757fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b156144d057600192505b600190910190614010565b600183151514614535576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b6000821515614554575060006139d4565b5081810281838281151561456457fe5b04146139d4576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000828152600b602090815260408083208484528252808320600190810154600d808552838620600581015493810154875260108652938620548787529452600790920154670de0b6b3a764000093614677939261466b92909161464291879160649161462c9163ffffffff61454316565b81151561463557fe5b049063ffffffff61454316565b81151561464b57fe5b6000888152600d602052604090206008015491900463ffffffff61397916565b9063ffffffff61454316565b81151561468057fe5b049392505050565b6000828152600b6020908152604080832084845282528083206002810154600190910154600d90935290832060080154613a0092670de0b6b3a7640000916146cf91614543565b8115156146d857fe5b049063ffffffff613cd016565b6000613a006146f384614706565b611f2c614706868663ffffffff61397916565b60006309502f9061476e6d03b2a1d15167e7c5699bfde00000611f2c6147697a0dac7055469777a6122ee4310dd6c14410500f290484000000000061393f6b01027e72f1f128130880000061466b8a670de0b6b3a764000063ffffffff61454316565b615036565b81151561477757fe5b0492915050565b6000614791670de0b6b3a7640000615089565b61476e60026147c46147b186670de0b6b3a764000063ffffffff61454316565b65886c8f6730709063ffffffff61454316565b8115156147cd57fe5b0461393f6147da86615089565b6304a817c89063ffffffff61454316565b6147f3615403565b6000838152600a602052604090206005015415614827576000838152600a6020526040902060050154614827908490614f9f565b506007546000928352600a60208190526040909320600501558051909101815290565b6000818152600d60205260408120600701544291601e916113881015614871576002820491505b6000848152600d60205260409020600201548311801561489d57506000848152600d6020526040902054155b156148c0576148b98361393f84670de0b6b3a764000089614635565b90506148ec565b6000848152600d60205260409020600201546148e99061393f84670de0b6b3a764000089614635565b90505b6148ff620151808463ffffffff61397916565b81101561491f576000848152600d60205260409020600201819055614945565b614932620151808463ffffffff61397916565b6000858152600d60205260409020600201555b5050505050565b600080614abd4361393f42336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106149c75780518252601f1990920191602091820191016149a8565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120925050508115156149fd57fe5b0461393f4561393f42416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614a765780518252601f199092019160209182019101614a57565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614aac57fe5b0461393f424463ffffffff61397916565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614b0b5780518252601f199092019160209182019101614aec565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060065490945092506103e89150839050046103e80282031015614b5a5760019150614b5f565b600091505b5090565b614b6b615403565b60008054604051600a8804929182918291600160a060020a03169060028604908381818185875af115159250614ba8915050576002909304928392505b600154600160a060020a03166002850460405160006040518083038185875af115159250614bea91505057600284049290920191614be760028561362a565b93505b614c06614bf98c8c8c8c615095565b849063ffffffff61397916565b92506000831115614cf457600283049150614c27838363ffffffff613cd016565b600154604051919250600160a060020a0316906002830480156108fc02916000818181858888f19350505050158015614c64573d6000803e3d6000fd5b50600054600160a060020a03166108fc600283049081150290604051600060405180830381858888f19350505050158015614ca3573d6000803e3d6000fd5b5060008b8152600d6020526040902060070154614cc6908363ffffffff61397916565b60008c8152600d602052604090206007015560c0860151614cee90849063ffffffff61397916565b60c08701525b50939998505050505050505050565b614d0b615403565b6000848152600f6020526040812054819081908190606490614d34908b9063ffffffff61454316565b811515614d3d57fe5b049350606489049250614d5b8360055461397990919063ffffffff16565b600555614d8c6064614d748b601d63ffffffff61454316565b811515614d7d57fe5b8b91900463ffffffff613cd016565b9850614d9e898563ffffffff613cd016565b9150614dac8b8b868a6152b2565b90506000811115614dca57614dc7848263ffffffff613cd016565b93505b60008b8152600d6020526040902060070154614df09061393f848463ffffffff61397916565b60008c8152600d602052604090206007015560e0860151614e1890859063ffffffff61397916565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600754751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c74681600001518260200151600a6000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600554604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000614fab8383614688565b90506000811115615031576000838152600a6020526040902060030154614fd990829063ffffffff61397916565b6000848152600a6020908152604080832060030193909355600b81528282208583529052206002015461501390829063ffffffff61397916565b6000848152600b602090815260408083208684529091529020600201555b505050565b6000806002615046846001613979565b81151561504f57fe5b0490508291505b81811015613cca578091506002615078828581151561507157fe5b0483613979565b81151561508157fe5b049050615056565b60006139d48283614543565b6002546040516000918291600a860491601487049160228804918591600160a060020a03909116906108fc86150290869084818181858888f193505050501580156150e4573d6000803e3d6000fd5b5086158015906150f45750888714155b801561511057506000878152600a602052604090206001015415155b15615291576000898152600a602052604080822060070189905588825290206004015461514490849063ffffffff61397916565b6000888152600a6020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518a918c918a917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4506000868152600a602052604090206007015480158015906151d95750888114155b15615279576000818152600a602052604090206004015461520190839063ffffffff61397916565b6000828152600a6020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101849052426060830152518a918c9184917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a461528c565b615289858363ffffffff61397916565b94505b6152a4565b6152a1858463ffffffff61397916565b94505b509298975050505050505050565b6000848152600d6020526040812060050154819081906152e086670de0b6b3a764000063ffffffff61454316565b8115156152e957fe5b6000898152600d6020526040902060080154919004925061531190839063ffffffff61397916565b6000888152600d6020526040902060080155670de0b6b3a764000061533c838663ffffffff61454316565b81151561534557fe5b6000888152600b602090815260408083208c8452825280832060020154600d909252909120600801549290910492506153989161393f908490670de0b6b3a7640000906146cf908a63ffffffff61454316565b6000878152600b602090815260408083208b8452825280832060020193909355600d905220600501546153f890670de0b6b3a7640000906153e090859063ffffffff61454316565b8115156153e957fe5b8791900463ffffffff613cd016565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056006e20646973636f72640000000000000000000000000000000000000000000000706f636b6574206c696e743a206e6f7420612076616c69642063757272656e63697473206e6f74207265616479207965742e2020636865636b203f65746120696e6f20766974616c696b2c206e6f000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a7230582046dd443fda47cd333d99eb3a88341b0dd6d57ea5be02f732b42751b91d8aff990029

Swarm Source

bzzr://46dd443fda47cd333d99eb3a88341b0dd6d57ea5be02f732b42751b91d8aff99

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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