Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.291125891617240173 ETH
Eth Value
$538.92 (@ $1,851.15/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Multi Chain
Multichain Addresses
0 address found via
Latest 25 from a total of 94 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 12695846 | 714 days 14 hrs ago | IN | 0 ETH | 0.00070323 | ||||
Withdraw | 9460879 | 1213 days 13 hrs ago | IN | 0 ETH | 0.00071028 | ||||
Withdraw | 6717767 | 1664 days 23 hrs ago | IN | 0 ETH | 0.00017147 | ||||
Withdraw | 6717764 | 1664 days 23 hrs ago | IN | 0 ETH | 0.00031431 | ||||
Withdraw | 6694343 | 1668 days 20 hrs ago | IN | 0 ETH | 0.00032763 | ||||
Withdraw | 6687887 | 1669 days 21 hrs ago | IN | 0 ETH | 0.00024753 | ||||
Withdraw | 6674507 | 1672 days 1 hr ago | IN | 0 ETH | 0.00034654 | ||||
Withdraw | 6669808 | 1672 days 20 hrs ago | IN | 0 ETH | 0.00034654 | ||||
Withdraw | 6668804 | 1673 days 17 mins ago | IN | 0 ETH | 0.00045095 | ||||
Withdraw | 6667331 | 1673 days 6 hrs ago | IN | 0 ETH | 0.0007151 | ||||
Withdraw | 6666716 | 1673 days 8 hrs ago | IN | 0 ETH | 0.00071816 | ||||
Buy Xaddr | 6666454 | 1673 days 9 hrs ago | IN | 0.00008 ETH | 0.00272825 | ||||
Withdraw | 6666434 | 1673 days 9 hrs ago | IN | 0 ETH | 0.00029836 | ||||
Withdraw | 6666184 | 1673 days 10 hrs ago | IN | 0 ETH | 0.00023481 | ||||
Withdraw | 6665441 | 1673 days 13 hrs ago | IN | 0 ETH | 0.006 | ||||
Withdraw | 6664251 | 1673 days 18 hrs ago | IN | 0 ETH | 0.0001191 | ||||
Withdraw | 6664242 | 1673 days 18 hrs ago | IN | 0 ETH | 0.0001641 | ||||
Withdraw | 6664126 | 1673 days 18 hrs ago | IN | 0 ETH | 0.0001641 | ||||
Withdraw | 6664055 | 1673 days 18 hrs ago | IN | 0 ETH | 0.00066108 | ||||
Withdraw | 6664050 | 1673 days 18 hrs ago | IN | 0 ETH | 0.00062435 | ||||
Withdraw | 6663990 | 1673 days 19 hrs ago | IN | 0 ETH | 0.00063875 | ||||
Withdraw | 6663973 | 1673 days 19 hrs ago | IN | 0 ETH | 0.00043305 | ||||
Withdraw | 6663922 | 1673 days 19 hrs ago | IN | 0 ETH | 0.00081198 | ||||
Withdraw | 6663901 | 1673 days 19 hrs ago | IN | 0 ETH | 0.00043305 | ||||
Buy Xaddr | 6663873 | 1673 days 19 hrs ago | IN | 0.00007875 ETH | 0.00586599 |
Latest 25 internal transactions (View All)
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
9460879 | 1213 days 13 hrs ago | 0.09474822 ETH | ||||
6717767 | 1664 days 23 hrs ago | 0.09954423 ETH | ||||
6717764 | 1664 days 23 hrs ago | 0.00234894 ETH | ||||
6667331 | 1673 days 6 hrs ago | 0.00004799 ETH | ||||
6666716 | 1673 days 8 hrs ago | 0.10384476 ETH | ||||
6666454 | 1673 days 9 hrs ago | 0.000016 ETH | ||||
6666434 | 1673 days 9 hrs ago | 0.09474822 ETH | ||||
6664251 | 1673 days 18 hrs ago | 0.10441899 ETH | ||||
6664242 | 1673 days 18 hrs ago | 0.11426074 ETH | ||||
6664126 | 1673 days 18 hrs ago | 0.10493663 ETH | ||||
6664055 | 1673 days 18 hrs ago | 0.09668186 ETH | ||||
6664050 | 1673 days 18 hrs ago | 0.09668186 ETH | ||||
6663990 | 1673 days 19 hrs ago | 0.11527895 ETH | ||||
6663973 | 1673 days 19 hrs ago | 0.10523367 ETH | ||||
6663922 | 1673 days 19 hrs ago | 0.09578151 ETH | ||||
6663901 | 1673 days 19 hrs ago | 0.10434024 ETH | ||||
6663873 | 1673 days 19 hrs ago | 1.01231596 ETH | ||||
6663873 | 1673 days 19 hrs ago | 0.28435841 ETH | ||||
6663824 | 1673 days 19 hrs ago | 0.00928691 ETH | ||||
6663822 | 1673 days 19 hrs ago | 0.0087696 ETH | ||||
6663661 | 1673 days 20 hrs ago | 0.0001204 ETH | ||||
6663446 | 1673 days 21 hrs ago | 0.00100343 ETH | ||||
6661357 | 1674 days 5 hrs ago | 0.11976105 ETH | ||||
6661357 | 1674 days 5 hrs ago | 0.14284935 ETH | ||||
6661243 | 1674 days 6 hrs ago | 0.10050857 ETH |
Loading...
Loading
Contract Name:
Heaven3D
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-11-07 */ pragma solidity ^0.4.24; /** * @title -Heaven-3D v0.1.0 * This work is inspired by the admirable Team JUST, we aimed to perfect their work by making this platform a heaven for everyone. * Specifically, we aimed to create a platform in which players can earn money from it but hard to lose their money. * We believe that this could be achieved by carefully creating a set of rules that favor this result. * We done this for the world, and also as an experiment for ourselves to understand the world. * We are Team DREAM. */ //============================================================================== // _ _ _ _|_ _ . // (/_\/(/_| | | _\ . //============================================================================== contract H3Devents { // fired whenever new decision is made event onNewDecision ( address senderAddress, uint256 randNum, bool decision ); // 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 ); // fired whenever a withdraw forces end round to be ran event onDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); // (Heaven3D long 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 ); // (Heaven3D long 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 ); } //============================================================================== // _ _ _ _|_ _ _ __|_ _ _ _|_ _ . // (_(_)| | | | (_|(_ | _\(/_ | |_||_) . //====================================|========================================= contract modularLong is H3Devents {} contract Heaven3D is modularLong { using SafeMath for *; using NameFilter for string; using H3DKeysCalcLong for uint256; TeamDreamHubInterface public TeamDreamHub_; PlayerBookInterface public PlayerBook; //============================================================================== // _ _ _ |`. _ _ _ |_ | _ _ . // (_(_)| |~|~|(_||_|| (_||_)|(/__\ . (game settings) //=================_|=========================================================== string constant public name = "Heaven3D Official"; string constant public symbol = "H3D"; address private owner; uint256 constant private rndExtra_ = 0 hours; // length of the very first ICO uint256 constant private rndGap_ = 0 hours; // length of ICO phase, set to 1 year for EOS. uint256 constant private rndInit_ = 1 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 rndDeciExt_ = 360 seconds; // round extension time decide by random decision uint256 constant private rndMax_ = 24 hours; // max length a round timer can be uint256 constant private rule_limit_latestPlayersCnt = 10; // should smaller than latestPlayers.length uint256 constant private rule_limit_heavyPlayersCnt = 10; // should smaller than heavyPlayers.length //============================================================================== // _| _ _|_ _ _ _ _|_ _ . // (_|(_| | (_| _\(/_ | |_||_) . (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 //**************** // FLOW CONTROL //**************** bool public noMoreNextRound_ = false; // if this flag enabled, in the end of the round the developers are going to update the smart contract of the game, in order to perfect players' gaming experience. uint256 public randomDecisionPhase_ = 100; bool private endRoundDecisionResult_ = false; address private address_of_last_rand_gen_source_ = address(0); mapping (uint256 => uint256) pPAIDxID_; // (pID => paid eth) returns paid eth by player id //**************** // 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 => H3Ddatasets.Player) public plyr_; // (pID => data) player data mapping (uint256 => mapping (uint256 => H3Ddatasets.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 => H3Ddatasets.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 //============================================================================== // _ _ _ __|_ _ __|_ _ _ . // (_(_)| |_\ | | |_|(_ | (_)| . (initial data setup upon contract deploy) //============================================================================== constructor(address _TeamDreamHubSCaddress, address _PlayerBookSCaddress) public { owner = msg.sender; TeamDreamHub_ = TeamDreamHubInterface(_TeamDreamHubSCaddress); PlayerBook = PlayerBookInterface(_PlayerBookSCaddress); } //============================================================================== // _ _ _ _|. |`. _ _ _ . // | | |(_)(_||~|~|(/_| _\ . (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 Heaven3D */ modifier isHuman() { address _addr = msg.sender; require (_addr == tx.origin); 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 fallback function * 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 H3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); // fetch player id uint256 _pID = pIDxAddr_[msg.sender]; // buy core buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } /** * @dev converts all incoming ethereum to keys. * -functionhash- 0x8f38f309 (using ID for affiliate) * -functionhash- 0x98a0871d (using address for affiliate) * -functionhash- 0xa65b37a1 (using name for affiliate) * @param _affCode the ID/address/name of the player who gets the affiliate fee * @param _team what team is the player playing for? */ 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 H3Ddatasets.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 H3Ddatasets.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 H3Ddatasets.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_); } /** * @dev essentially the same as buy, but instead of you sending ether * from your wallet, it uses your unwithdrawn earnings. * -functionhash- 0x349cdcac (using ID for affiliate) * -functionhash- 0x82bfc739 (using address for affiliate) * -functionhash- 0x079ce327 (using name for affiliate) * @param _affCode the ID/address/name of the player who gets the affiliate fee * @param _team what team is the player playing for? * @param _eth amount of earnings to use (remainder returned to gen vault) */ function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { // set up our tx event data H3Ddatasets.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 H3Ddatasets.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 H3Ddatasets.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 set the flag noMoreNextRound_ */ function noMoreNextRoundSetting(bool _noMoreNextRound) isActivated() isHuman() public { // only Team Dream can activate require( msg.sender == owner, "only Team Dream can activate" ); noMoreNextRound_ = _noMoreNextRound; } /** * @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; // 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 H3Ddatasets.EventReturns memory _eventData_; endRoundControl(_eventData_); // get their earnings _eth = withdrawEarnings(_pID); // gib moni if (_eth > 0) plyr_[_pID].addr.transfer(_eth); if(round_[_rID].ended == true) { // build event data _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; // fire withdraw and distribute event emit H3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { // fire withdraw event emit H3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } // in any other situation } else { // get their earnings _eth = withdrawEarnings(_pID); // gib moni if (_eth > 0) plyr_[_pID].addr.transfer(_eth); // fire withdraw event emit H3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } /** * @dev use these to register names. they are just wrappers that will send the * registration requests to the PlayerBook contract. So registering here is the * same as registering there. UI will always display the last name you registered. * but you will still own all previously registered names to use as affiliate * links. * - must pay a registration fee. * - name must be unique * - names will be converted to lowercase * - name cannot start or end with a space * - cannot have more than 1 space in a row * - cannot be only numbers * - cannot start with 0x * - name must be at least 1 char * - max length of 32 characters long * - allowed characters: a-z, 0-9, and space * -functionhash- 0x921dec21 (using ID for affiliate) * -functionhash- 0x3ddd4698 (using address for affiliate) * -functionhash- 0x685ffd83 (using name for affiliate) * @param _nameString players desired name * @param _affCode affiliate ID, address, or name of who referred you * @param _all set to true if you want this to push your info to all games * (this might cost a lot of gas) */ 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 H3Devents.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 H3Devents.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 H3Devents.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 ( 75000000000000 ); // 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); } /** * @dev returns player earnings per vaults * -functionhash- 0x63066434 * @return winnings vault * @return general vault * @return affiliate vault */ function getPlayerVaults(uint256 _pID) public view 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)).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } /** * @dev returns all current round info needed for front end * -functionhash- 0x747dff42 * @return eth invested during ICO phase * @return round id * @return total keys for round * @return time round ends * @return time round started * @return current pot * @return current team ID & player ID in lead * @return current player in leads address * @return current player in leads name * @return whales eth in for round * @return bears eth in for round * @return sneks eth in for round * @return bulls eth in for round * @return airdrop tracker # & airdrop pot */ 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 randomDecisionPhase_ //13 ); } /** * @dev returns player info based on address. if no address is given, it will * use msg.sender * -functionhash- 0xee0b5d8b * @param _addr address of the player you want to lookup * @return player ID * @return player name * @return keys owned (current round) * @return winnings vault * @return general vault * @return affiliate vault * @return player round eth */ 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]; uint256 limitedDividends = (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)); if(limitedDividends > plyrRnds_[_pID][_rID].eth.mul(3)) limitedDividends = plyrRnds_[_pID][_rID].eth.mul(3); return ( _pID, //0 plyr_[_pID].name, //1 plyrRnds_[_pID][_rID].keys, //2 plyr_[_pID].win, //3 limitedDividends, //4 plyr_[_pID].aff, //5 plyrRnds_[_pID][_rID].eth //6 ); } //============================================================================== // _ _ _ _ | _ _ . _ . // (_(_)| (/_ |(_)(_||(_ . (this + tools + calcs + modules = our softwares engine) //=====================_|======================================================= function endRoundControl(H3Ddatasets.EventReturns memory _eventData_) private { // setup local rID uint256 _rID = rID_; randomDecisionPhase_ = 101; // set true for randomDecisionPhase_ we're in! // setup local address_of_last_rand_gen_source_ address _address_of_last_rand_gen_source_ = address_of_last_rand_gen_source_; bool goMakeDecision = true; if((_address_of_last_rand_gen_source_ == address(0)) || (_address_of_last_rand_gen_source_ == msg.sender)) // 1st time to make decision OR sender is also the validator { goMakeDecision = true; // prior check FAILED } else // prior check PASS { if(checkNotSmartContract(_address_of_last_rand_gen_source_)) // last sender is human { if(endRoundDecisionResult_ == true) // the decision generated is true { // end the round (distributes pot) & start new round round_[_rID].ended = true; _eventData_ = endRound(_eventData_); randomDecisionPhase_ = 100; } else { // grab time uint256 _now = now; // set new end time by adding rndDeciExt_ to NOW round_[_rID].end = rndDeciExt_.add(_now); } //reset all flags -- because we're leaving endGamePrcoess and not going to come back within a period of time. endRoundDecisionResult_ = false; address_of_last_rand_gen_source_ = address(0); goMakeDecision = false; } else { goMakeDecision = true; // because last sender is SC. } } if(goMakeDecision == true) { //make a decision address_of_last_rand_gen_source_ = msg.sender; endRoundDecisionResult_ = endRoundDecision(); } } /** * @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, H3Ddatasets.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) { endRoundControl(_eventData_); if(round_[_rID].ended == true) { // build event data _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; // fire buy and distribute event emit H3Devents.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, H3Ddatasets.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) { endRoundControl(_eventData_); if(round_[_rID].ended == true) { // build event data _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; // fire buy and distribute event emit H3Devents.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, H3Ddatasets.EventReturns memory _eventData_) private { // if player is new to round if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); // don't have to do updateGenVault again because we have it in managePlayer() else // if not, can use _rID directly, but we decided to still go with plyr_[_pID].lrnd updateGenVault(_pID, plyr_[_pID].lrnd); // early round eth limiter if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } // 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; } // 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, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _keys, _eventData_); internalNoter(_rID, _pID); // 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(H3Ddatasets.EventReturns memory _eventData_) private returns (H3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; // if player is new to this version of Heaven3D 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, H3Ddatasets.EventReturns memory _eventData_) private returns (H3Ddatasets.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(H3Ddatasets.EventReturns memory _eventData_) private returns (H3Ddatasets.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(68)) / 100; // for all winners uint256 _com = (_pot.mul(10)) / 100; // for community uint256 _gen = 0; uint256 _p3d = 0; // community rewards TeamDreamHub_.deposit.value(_com)(); uint256 _res = ((_pot.sub(_com)).sub(_gen)).sub(_p3d); // _win should be handled later. (_res,_eventData_) = winnersProfitDistributor(_rID, _win, _res, _eventData_); // distribute to all winners // if update in smart contract is neccessary, the developers will trigger this mechanism. // in this condition we're going into maintenance mode in order to update the smart contract on the blockchain // we developers will put _res into the next pot manually when H3D is going online again. // the down time is expected to be short. if(noMoreNextRound_ == true) { owner.transfer(_res); _res = 0; } // 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 = _p3d; _eventData_.newPot = _res; // start next round rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; // the rest goes to next pot return(_eventData_); } /** * @dev moves any unmasked earnings to gen vault. updates earnings mask */ function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 dividend_yet_distribute = calcUnMaskedEarnings(_pID, _rIDlast); if (dividend_yet_distribute > 0) { uint256 _earnings; uint256 all_dividend_earned = dividend_yet_distribute.add(plyrRnds_[_pID][_rIDlast].eth_went_to_gen); //check 3x limit if (all_dividend_earned > (plyrRnds_[_pID][_rIDlast].eth).mul(3)) { //===adjustment done accordingly=== //seperate exceeds_part from dividend_yet_distribute uint256 remain_quota = (plyrRnds_[_pID][_rIDlast].eth).mul(3).sub(plyrRnds_[_pID][_rIDlast].eth_went_to_gen); // can only provide the dividend withing 3x of inputed eth. uint256 exceeds_part = dividend_yet_distribute.sub(remain_quota); _earnings = remain_quota; // add exceeds_part as new profit to the current round and adjust round.mask accordingly uint256 _dust = updateMasks(rID_, _pID, exceeds_part, 0); // keys = 0 because didn't add new key. if (_dust > 0) // add dust to pot round_[rID_].pot = round_[rID_].pot.add(_dust); } else { _earnings = dividend_yet_distribute; } // put in gen vault plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); //note to eth_went_to_gen, in order to estimate all eth passed to geb vault in the current round. plyrRnds_[_pID][_rIDlast].eth_went_to_gen = _earnings.add(plyrRnds_[_pID][_rIDlast].eth_went_to_gen); // zero out their earnings by updating mask plyrRnds_[_pID][_rIDlast].mask = dividend_yet_distribute.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; // 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 in order to make a decision * @return PASS or REJECT? */ function endRoundDecision() private returns(bool) { bool decision = false; 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) ))); uint256 randNum = (seed - ((seed / 1000) * 1000)); if(randNum < 50) // 5% probability decision = true; // fire event emit H3Devents.onNewDecision(msg.sender,randNum,decision); return decision; } /** * @dev check if an address is smart contract * @return true (Not smart contract) or false */ function checkNotSmartContract(address targetAddr) private returns(bool) { uint256 _codeLength; assembly { _codeLength := extcodesize(targetAddr) } if(_codeLength == 0) // last sender is human 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, H3Ddatasets.EventReturns memory _eventData_) private returns(H3Ddatasets.EventReturns) { // pay 10% out to community fund uint256 _com = (_eth.mul(10)) / 100; uint256 _p3d = 0; // distribute share to affiliate uint256 _aff = _eth / 10; // decide what to do with affiliate share of fees // affiliate must not be self, and must have a name registered if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit H3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _com = _com.add(_aff); } // payout community rewards TeamDreamHub_.deposit.value(_com)(); return(_eventData_); } function potSwap() external payable { // setup local rID uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit H3Devents.onPotSwapDeposit(_rID, msg.value); } /** * @dev distributes eth based on fees to gen and pot */ function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _keys, H3Ddatasets.EventReturns memory _eventData_) private returns(H3Ddatasets.EventReturns) { // calculate gen share uint256 _gen = (_eth.mul(60)) / 100; // update eth balance (eth = eth - (com share + aff share + p3d share + airdrop pot share)) _eth = _eth.sub((_eth.mul(20)) / 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 distribute profits (_win) to the pot winners) */ function winnersProfitDistributor(uint256 _rID, uint256 _win, uint256 _res, H3Ddatasets.EventReturns memory _eventData_) private returns (uint256, H3Ddatasets.EventReturns) { uint256 _pIDtmp; uint256 _paidPlayerCount; // note how many players have been paid already. uint256 _bonus_portion; // compute portions // pay the rand number generator caller _bonus_portion = (_win.mul(10)) / 1000; // 1%; to random number generator's caller _eventData_ = determinePID(_eventData_); _pIDtmp = pIDxAddr_[address_of_last_rand_gen_source_]; plyr_[_pIDtmp].win = _bonus_portion.add(plyr_[_pIDtmp].win); _res = _res.sub(_bonus_portion); // pay our latestPlayers _bonus_portion = (_win.mul(49)) / 1000; // 49x10 = 490; _win_latestPlayer_slot _paidPlayerCount = 0; for (uint i = 0; i < round_[_rID].latestPlayers.length; i++) // remove _pID from the list first { if(round_[_rID].latestPlayers[i] == 0) // early-stop { break; } if(_paidPlayerCount == rule_limit_latestPlayersCnt) // already paid enough players { break; } // only pay out for human player _pIDtmp = round_[_rID].latestPlayers[i]; if(checkNotSmartContract(plyr_[_pIDtmp].addr)) { plyr_[_pIDtmp].win = _bonus_portion.add(plyr_[_pIDtmp].win); _res = _res.sub(_bonus_portion); pPAIDxID_[round_[_rID].latestPlayers[i]] = _bonus_portion; _paidPlayerCount++; } } // pay our heavyPlayers _bonus_portion = (_win.mul(50)) / 1000; // 50x10 = 500; _win_heavyPlayer_slot _paidPlayerCount = 0; for (i = 0; i < round_[_rID].heavyPlayers.length; i++) // remove _pID from the list first { if(round_[_rID].heavyPlayers[i] == 0) // early-stop { break; } if(_paidPlayerCount == rule_limit_heavyPlayersCnt) // already paid enough players { break; } // only pay out for human player _pIDtmp = round_[_rID].heavyPlayers[i]; if(checkNotSmartContract(plyr_[_pIDtmp].addr)) { if(pPAIDxID_[_pIDtmp] != 0) // don't paid the latestPlayer again. continue; plyr_[_pIDtmp].win = _bonus_portion.add(plyr_[_pIDtmp].win); _res = _res.sub(_bonus_portion); _paidPlayerCount++; } } // clear pPAIDxID_ for the use in next round's endround process. for (i = 0; i < round_[_rID].latestPlayers.length; i++) pPAIDxID_[round_[_rID].latestPlayers[i]] = 0; return (_res,_eventData_); } /** * @dev note neccessary info. */ function internalNoter(uint256 _rID, uint256 _pID) private { //update latestPlayers uint idx_to_insert = round_[_rID].latestPlayers.length - 1; // default goes to the end of list for (uint i = 0; i < round_[_rID].latestPlayers.length; i++) // remove _pID from the list first { if(round_[_rID].latestPlayers[i] == 0) // early-stop { idx_to_insert = i; break; } if(round_[_rID].latestPlayers[i] == _pID) // case: if _pID already on the list { for (uint j = i; j < (round_[_rID].latestPlayers.length - 1); j++) { round_[_rID].latestPlayers[j] = round_[_rID].latestPlayers[j+1]; // remove item i if(round_[_rID].latestPlayers[j+1] == 0) // early-stop break; } break; } } if (idx_to_insert == (round_[_rID].latestPlayers.length - 1)) // only do it when former loop hasn't found an idx to insert { for (i = (round_[_rID].latestPlayers.length - 1); i >= 0; i--) // reversely checking for an empty position { if(round_[_rID].latestPlayers[i] == 0) // case: in the beginning { idx_to_insert = i; break; } } } round_[_rID].latestPlayers[idx_to_insert] = _pID; // note the player to the list //update heavyPlayers idx_to_insert = round_[_rID].heavyPlayers.length - 1; // default goes to the end of list for (i = 0; i < round_[_rID].heavyPlayers.length; i++) // remove _pID from the list first { if(round_[_rID].heavyPlayers[i] == 0) // early-stop { // do NOT take this idx as the idx_to_insert because should also sort the list based on playerRound.eth break; } if(round_[_rID].heavyPlayers[i] == _pID) // case: if _pID already on the list { for (j = i; j < (round_[_rID].heavyPlayers.length - 1); j++) { round_[_rID].heavyPlayers[j] = round_[_rID].heavyPlayers[j+1]; // remove item i if(round_[_rID].heavyPlayers[j+1] == 0) // early-stop { // do NOT take this idx as the idx_to_insert because should also sort the list based on playerRound.eth break; } } break; } } for (i = 0; i < round_[_rID].heavyPlayers.length; i++) { if(round_[_rID].heavyPlayers[i] == 0) // case: in the beginning { idx_to_insert = i; break; } else { if(plyrRnds_[_pID][_rID].eth > plyrRnds_[round_[_rID].heavyPlayers[i]][_rID].eth) // found spent eth more than another player on the list { idx_to_insert = i; for (j = i; j < (round_[_rID].heavyPlayers.length - 1); j++) { round_[_rID].heavyPlayers[j+1] = round_[_rID].heavyPlayers[j]; // remove item in the end } break; } } } round_[_rID].heavyPlayers[idx_to_insert] = _pID; // note the player to the list } /** * @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) { /* MASKING NOTES earnings masks are a tricky thing for people to wrap their minds around. the basic thing to understand here. is were going to have a global tracker based on profit per share for each round, that increases in relevant proportion to the increase in share supply. the player will have an additional mask that basically says "based on the rounds mask, my shares, and how much i've already withdrawn, how much is still owed to me?" */ uint256 _ppt; if(round_[_rID].keys.sub(_keys) == 0) // only 1st key buyer can earn dividend based on the keys just purchased { // calc profit per key & round mask based on this buy: (dust goes to pot) _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); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); // calculate & return dust } else { // calc profit per key & round mask based on this buy: (dust goes to pot) _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys.sub(_keys)); round_[_rID].mask = _ppt.add(round_[_rID].mask); // update player earnings mask so they cannot obtain profit generated based on their own input plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000))).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys.sub(_keys))) / (1000000000000000000))); // calculate & return dust } } /** * @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, H3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit H3Devents.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 Dream can activate require( msg.sender == owner, "only Team Dream can activate" ); // can only be ran once require(activated_ == false, "Heaven3D 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 H3Ddatasets { //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 } struct PlayerRounds { uint256 eth; // eth player has added to round (used for eth limiter and also for dividend upper bound limiter) uint256 keys; // keys uint256 mask; // player mask uint256 eth_went_to_gen; // dividend earned and moved to gen bal. uint256 ico; // ICO phase investment } struct Round { uint256[20] latestPlayers; // latest players uint256[20] heavyPlayers; // players with top eth invested 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 } } //============================================================================== // | _ _ _ | _ . // |<(/_\/ (_(_||(_ . //=======/====================================================================== library H3DKeysCalcLong { 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); } interface TeamDreamHubInterface { function deposit() external payable; } /** * @title -Name Filter- v0.1.9 * ┌┬┐┌─┐┌─┐┌┬┐ ╦╦ ╦╔═╗╔╦╗ ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐ * │ ├┤ ├─┤│││ ║║ ║╚═╗ ║ ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐ * ┴ └─┘┴ ┴┴ ┴ ╚╝╚═╝╚═╝ ╩ ┴ ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘ * _____ _____ * (, / /) /) /) (, / /) /) * ┌─┐ / _ (/_ // // / _ // _ __ _(/ * ├─┤ ___/___(/_/(__(_/_(/_(/_ ___/__/_)_(/_(_(_/ (_(_(_ * ┴ ┴ / / .-/ _____ (__ / * (__ / (_/ (, / /)™ * / __ __ __ __ _ __ __ _ _/_ _ _(/ * ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐ /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_ * ├─┘├┬┘│ │ │││ ││ │ (__ / .-/ © Jekyll Island Inc. 2018 * ┴ ┴└─└─┘─┴┘└─┘└─┘ ┴ (_/ * _ __ _ ____ ____ _ _ _____ ____ ___ *=============| |\ | / /\ | |\/| | |_ =====| |_ | | | | | | | |_ | |_)==============* *=============|_| \| /_/--\ |_| | |_|__=====|_| |_| |_|__ |_| |_|__ |_| \==============* * * ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐ ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐ * ║ │ ││││ │ ├┬┘├─┤│ │ ║ │ │ ││├┤ │ Inventor │ * ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴ ╚═╝└─┘─┴┘└─┘ └──────────┘ */ library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ 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); } } /** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless */ 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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"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":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":"_noMoreNextRound","type":"bool"}],"name":"noMoreNextRoundSetting","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"randomDecisionPhase_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"eth_went_to_gen","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":"noMoreNextRound_","outputs":[{"name":"","type":"bool"}],"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":"TeamDreamHub_","outputs":[{"name":"","type":"address"}],"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"}],"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"},{"constant":true,"inputs":[],"name":"PlayerBook","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_TeamDreamHubSCaddress","type":"address"},{"name":"_PlayerBookSCaddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"senderAddress","type":"address"},{"indexed":false,"name":"randNum","type":"uint256"},{"indexed":false,"name":"decision","type":"bool"}],"name":"onNewDecision","type":"event"},{"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":"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":"onDistribute","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"}]
Contract Creation Code
608060405260006004556006805460ff19908116909155606460075560088054600160a860020a031916905560118054909116905534801561004057600080fd5b5060405160408062005cb583398101604052805160209091015160028054600160a060020a0319908116331790915560008054600160a060020a0394851690831617905560018054939092169216919091179055615c1180620000a46000396000f3006080604052600436106101e25763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e8811461039157806306fdde03146103b8578063079ce327146104425780630f15f4c01461046257806310f01eba1461047757806311a09ae71461049857806324c33d33146104ad5780632660316e146105245780632e19ebdc14610553578063349cdcac1461056b5780633ccfd60b146105895780633ddd46981461059e57806349cc635d146105fa5780635893d48114610624578063624ae5c01461063f5780636306643414610654578063685ffd831461068a578063747dff42146106dd57806382bfc739146107685780638f38f3091461078f5780638f7140ea1461079d578063921dec21146107b857806395d89b411461080b57806397ac3cd91461082057806398a0871d1461083a5780639a8eff5514610851578063a2bccae914610866578063a65b37a1146108ac578063c09087fd146108ba578063c7e284b8146108cf578063ce89c80c146108e4578063cf808000146108ff578063d0704a1114610917578063d53b267914610948578063d87574e01461095d578063de7874f314610972578063ed78cf4a146109cc578063ee0b5d8b146109d4578063f562e94d14610a2d575b6101ea615aec565b60115460009060ff16151560011461024e576040805160e560020a62461bcd0281526020600482015260296024820152600080516020615b868339815191526044820152600080516020615b46833981519152606482015290519081900360840190fd5b33600032821461025d57600080fd5b50803b80156102a4576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b34633b9aca008110156102fc576040805160e560020a62461bcd0281526020600482015260216024820152600080516020615b66833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af680000081111561034c576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615ba6833981519152604482015290519081900360640190fd5b61035585610a42565b336000908152600a6020908152604080832054808452600c90925290912060060154919650945061038a908590600288610ce2565b5050505050005b34801561039d57600080fd5b506103a6610f1c565b60408051918252519081900360200190f35b3480156103c457600080fd5b506103cd610fe0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104075781810151838201526020016103ef565b50505050905090810190601f1680156104345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044e57600080fd5b50610460600435602435604435611017565b005b34801561046e57600080fd5b50610460611232565b34801561048357600080fd5b506103a6600160a060020a0360043516611359565b3480156104a457600080fd5b506103a661136b565b3480156104b957600080fd5b506104c5600435611371565b604080519c8d5260208d019b909b528b8b019990995296151560608b015260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083015251908190036101800190f35b34801561053057600080fd5b5061053f6004356024356113d7565b604080519115158252519081900360200190f35b34801561055f57600080fd5b506103a66004356113f7565b34801561057757600080fd5b50610460600435602435604435611409565b34801561059557600080fd5b506104606115fe565b6040805160206004803580820135601f810184900484028501840190955284845261046094369492936024939284019190819084018382808284375094975050600160a060020a038535169550505050506020013515156119f3565b34801561060657600080fd5b50610460600435600160a060020a0360243516604435606435611bae565b34801561063057600080fd5b506103a6600435602435611d96565b34801561064b57600080fd5b506103a6611db3565b34801561066057600080fd5b5061066c600435611db9565b60408051938452602084019290925282820152519081900360600190f35b6040805160206004803580820135601f8101849004840285018401909552848452610460943694929360249392840191908190840183828082843750949750508435955050505050602001351515611f65565b3480156106e957600080fd5b506106f261204d565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561077457600080fd5b50610460600160a060020a0360043516602435604435612243565b61046060043560243561244e565b3480156107a957600080fd5b50610460600435602435612644565b6040805160206004803580820135601f8101849004840285018401909552848452610460943694929360249392840191908190840183828082843750949750508435955050505050602001351515612718565b34801561081757600080fd5b506103cd612800565b34801561082c57600080fd5b506104606004351515612837565b610460600160a060020a0360043516602435612965565b34801561085d57600080fd5b506103a6612b8b565b34801561087257600080fd5b50610881600435602435612b91565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b610460600435602435612bcb565b3480156108c657600080fd5b5061053f612dd7565b3480156108db57600080fd5b506103a6612de0565b3480156108f057600080fd5b506103a6600435602435612e67565b34801561090b57600080fd5b506103a6600435612f0c565b34801561092357600080fd5b5061092c612fbd565b60408051600160a060020a039092168252519081900360200190f35b34801561095457600080fd5b5061053f612fcc565b34801561096957600080fd5b506103a6612fd5565b34801561097e57600080fd5b5061098a600435612fdb565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b610460613022565b3480156109e057600080fd5b506109f5600160a060020a036004351661309f565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b348015610a3957600080fd5b5061092c6131bf565b610a4a615aec565b336000908152600a60205260408120549080821515610cd957600154604080517fe56556a90000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163e56556a9916024808201926020929091908290030181600087803b158015610ac957600080fd5b505af1158015610add573d6000803e3d6000fd5b505050506040513d6020811015610af357600080fd5b5051600154604080517f82e37b2c000000000000000000000000000000000000000000000000000000008152600481018490529051929550600160a060020a03909116916382e37b2c916024808201926020929091908290030181600087803b158015610b5f57600080fd5b505af1158015610b73573d6000803e3d6000fd5b505050506040513d6020811015610b8957600080fd5b5051600154604080517fe3c08adf000000000000000000000000000000000000000000000000000000008152600481018790529051929450600160a060020a039091169163e3c08adf916024808201926020929091908290030181600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b505050506040513d6020811015610c1f57600080fd5b5051336000818152600a60209081526040808320889055878352600c9091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115610ca8576000828152600b60209081526040808320869055858352600c82528083206001908101869055600e8352818420868552909252909120805460ff191690911790555b8015801590610cb75750828114155b15610cd1576000838152600c602052604090206006018190555b845160010185525b50929392505050565b6005546000818152600f60205260409020602c0154429081118015610d4c57506000828152600f60205260409020602a015481111580610d4c57506000828152600f60205260409020602a015481118015610d4c57506000828152600f6020526040902060280154155b15610d6457610d5f8287348888886131ce565b610f14565b6000828152600f60205260409020602a015481118015610d9657506000828152600f60205260409020602b015460ff16155b15610edf57610da483613500565b6000828152600f60205260409020602b015460ff16151560011415610edf5780670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a33600c6000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b6000868152600c6020526040902060030154610f01903463ffffffff61363216565b6000878152600c60205260409020600301555b505050505050565b6005546000818152600f60205260408120602c0154909190429081118015610f8957506000828152600f60205260409020602a015481111580610f8957506000828152600f60205260409020602a015481118015610f8957506000828152600f6020526040902060280154155b15610fd1576000828152600f60205260409020602d0154610fca90670de0b6b3a764000090610fbe908263ffffffff61363216565b9063ffffffff61369316565b9250610fdb565b6544364c5bb00092505b505090565b60408051808201909152601181527f48656176656e3344204f6666696369616c000000000000000000000000000000602082015281565b61101f615aec565b601154600090819060ff161515600114611085576040805160e560020a62461bcd0281526020600482015260296024820152600080516020615b868339815191526044820152600080516020615b46833981519152606482015290519081900360840190fd5b33600032821461109457600080fd5b50803b80156110db576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b85633b9aca00811015611133576040805160e560020a62461bcd0281526020600482015260216024820152600080516020615b66833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115611183576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615ba6833981519152604482015290519081900360640190fd5b336000908152600a602052604090205494508815806111b257506000858152600c602052604090206001015489145b156111d0576000858152600c6020526040902060060154935061120f565b6000898152600b6020908152604080832054888452600c90925290912060060154909450841461120f576000858152600c602052604090206006018490555b611218886136c0565b975061122785858a8a8a6136e5565b505050505050505050565b600254600160a060020a03163314611294576040805160e560020a62461bcd02815260206004820152601c60248201527f6f6e6c79205465616d20447265616d2063616e20616374697661746500000000604482015290519081900360640190fd5b60115460ff16156112ef576040805160e560020a62461bcd02815260206004820152601a60248201527f48656176656e334420616c726561647920616374697661746564000000000000604482015290519081900360640190fd5b6011805460ff191660019081179091556005819055600052600f602052427f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f8bb819055610e10017f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f8b955565b600a6020526000908152604090205481565b60045481565b600f60205260009081526040902060288101546029820154602a830154602b840154602c850154602d860154602e870154602f880154603089015460318a015460328b01546033909b0154999a9899979860ff909716979596949593949293919290918c565b600e60209081526000928352604080842090915290825290205460ff1681565b600b6020526000908152604090205481565b611411615aec565b60115460009060ff161515600114611475576040805160e560020a62461bcd0281526020600482015260296024820152600080516020615b868339815191526044820152600080516020615b46833981519152606482015290519081900360840190fd5b33600032821461148457600080fd5b50803b80156114cb576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b84633b9aca00811015611523576040805160e560020a62461bcd0281526020600482015260216024820152600080516020615b66833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115611573576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615ba6833981519152604482015290519081900360640190fd5b336000908152600a6020526040902054935087158061159157508388145b156115af576000848152600c602052604090206006015497506115dc565b6000848152600c602052604090206006015488146115dc576000848152600c602052604090206006018890555b6115e5876136c0565b96506115f484898989896136e5565b5050505050505050565b60008060008061160c615aec565b60115460ff16151560011461166d576040805160e560020a62461bcd0281526020600482015260296024820152600080516020615b868339815191526044820152600080516020615b46833981519152606482015290519081900360840190fd5b33600032821461167c57600080fd5b50803b80156116c3576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b600554336000908152600a6020908152604080832054848452600f909252909120602a015491985042975095508611801561171057506000878152600f60205260409020602b015460ff16155b801561172c57506000878152600f602052604090206028015415155b156119345761173a83613500565b611743856138fc565b93506000841115611794576000858152600c6020526040808220549051600160a060020a039091169186156108fc02918791818181858888f19350505050158015611792573d6000803e3d6000fd5b505b6000878152600f60205260409020602b015460ff161515600114156118d35785670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc33600c6000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a161192f565b6000858152600c60209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b6119ea565b61193d856138fc565b9350600084111561198e576000858152600c6020526040808220549051600160a060020a039091169186156108fc02918791818181858888f1935050505015801561198c573d6000803e3d6000fd5b505b6000858152600c60209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b600080808080803381328214611a0857600080fd5b50803b8015611a4f576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b611a588b61398f565b600154604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052600160a060020a038f811660448401528e151560648401528351959d50909b50349a509092169263aa4d490b928a92608480830193919282900301818588803b158015611add57600080fd5b505af1158015611af1573d6000803e3d6000fd5b50505050506040513d6040811015611b0857600080fd5b508051602091820151600160a060020a03808b166000818152600a8652604080822054858352600c8852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b600154600160a060020a03163314611c36576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600a60205260409020548414611c7157600160a060020a0383166000908152600a602052604090208490555b6000828152600b60205260409020548414611c98576000828152600b602052604090208490555b6000848152600c6020526040902054600160a060020a03848116911614611cee576000848152600c60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b6000848152600c60205260409020600101548214611d1b576000848152600c602052604090206001018290555b6000848152600c60205260409020600601548114611d48576000848152600c602052604090206006018190555b6000848152600e6020908152604080832085845290915290205460ff161515611d90576000848152600e602090815260408083208584529091529020805460ff191660011790555b50505050565b601060209081526000928352604080842090915290825290205481565b60055481565b6005546000818152600f60205260408120602a01549091829182919042118015611df557506000818152600f60205260409020602b015460ff16155b8015611e1157506000818152600f602052604090206028015415155b15611f35576000818152600f6020526040902060280154851415611ef9576000818152600f60205260409020602f0154611e8290606490611e5990603063ffffffff6141a216565b811515611e6257fe5b6000888152600c602052604090206002015491900463ffffffff61363216565b6000868152600d60209081526040808320858452909152902060020154611edb90611ebd90611eb18986614219565b9063ffffffff61426c16565b6000888152600c60205260409020600301549063ffffffff61363216565b6000878152600c602052604090206004015491955093509150611f5d565b6000858152600c60209081526040808320600290810154600d8452828520868652909352922090910154611edb90611ebd90611eb18986614219565b6000858152600c602052604090206002810154600590910154611edb90611ebd9088906142cc565b509193909250565b600080808080803381328214611f7a57600080fd5b50803b8015611fc1576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b611fca8b61398f565b600154604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052604482018f90528d151560648301528251949c509a50349950600160a060020a039092169263745ea0c1928a92608480830193919282900301818588803b158015611add57600080fd5b60008060008060008060008060008060008060008060006005549050600f60008281526020019081526020016000206031015481600f6000848152602001908152602001600020602d0154600f6000858152602001908152602001600020602a0154600f6000868152602001908152602001600020602c0154600f6000878152602001908152602001600020602f0154600f600088815260200190815260200160002060280154600a02600f60008981526020019081526020016000206029015401600c6000600f60008b815260200190815260200160002060280154815260200190815260200160002060000160009054906101000a9004600160a060020a0316600c6000600f60008c815260200190815260200160002060280154815260200190815260200160002060010154601060008b8152602001908152602001600020600080815260200190815260200160002054601060008c815260200190815260200160002060006001815260200190815260200160002054601060008d815260200190815260200160002060006002815260200190815260200160002054601060008e8152602001908152602001600020600060038152602001908152602001600020546007549e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b61224b615aec565b601154600090819060ff1615156001146122b1576040805160e560020a62461bcd0281526020600482015260296024820152600080516020615b868339815191526044820152600080516020615b46833981519152606482015290519081900360840190fd5b3360003282146122c057600080fd5b50803b8015612307576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b85633b9aca0081101561235f576040805160e560020a62461bcd0281526020600482015260216024820152600080516020615b66833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156123af576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615ba6833981519152604482015290519081900360640190fd5b336000908152600a60205260409020549450600160a060020a03891615806123df5750600160a060020a03891633145b156123fd576000858152600c6020526040902060060154935061120f565b600160a060020a0389166000908152600a6020908152604080832054888452600c90925290912060060154909450841461120f576000858152600c60205260409020600601849055611218886136c0565b612456615aec565b60115460009060ff1615156001146124ba576040805160e560020a62461bcd0281526020600482015260296024820152600080516020615b868339815191526044820152600080516020615b46833981519152606482015290519081900360840190fd5b3360003282146124c957600080fd5b50803b8015612510576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b34633b9aca00811015612568576040805160e560020a62461bcd0281526020600482015260216024820152600080516020615b66833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af68000008111156125b8576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615ba6833981519152604482015290519081900360640190fd5b6125c185610a42565b336000908152600a602052604090205490955093508615806125e257508387145b15612600576000848152600c6020526040902060060154965061262d565b6000848152600c6020526040902060060154871461262d576000848152600c602052604090206006018790555b612636866136c0565b95506119ea84888888610ce2565b600154600160a060020a031633146126cc576040805160e560020a62461bcd02815260206004820152602760248201527f796f7572206e6f7420706c617965724e616d657320636f6e74726163742e2e2e60448201527f20686d6d6d2e2e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600e6020908152604080832084845290915290205460ff161515612714576000828152600e602090815260408083208484529091529020805460ff191660011790555b5050565b60008080808080338132821461272d57600080fd5b50803b8015612774576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b61277d8b61398f565b600154604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052604482018f90528d151560648301528251949c509a50349950600160a060020a039092169263c0942dfd928a92608480830193919282900301818588803b158015611add57600080fd5b60408051808201909152600381527f4833440000000000000000000000000000000000000000000000000000000000602082015281565b60115460ff161515600114612898576040805160e560020a62461bcd0281526020600482015260296024820152600080516020615b868339815191526044820152600080516020615b46833981519152606482015290519081900360840190fd5b3360003282146128a757600080fd5b50803b80156128ee576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b600254600160a060020a03163314612950576040805160e560020a62461bcd02815260206004820152601c60248201527f6f6e6c79205465616d20447265616d2063616e20616374697661746500000000604482015290519081900360640190fd5b50506006805460ff1916911515919091179055565b61296d615aec565b601154600090819060ff1615156001146129d3576040805160e560020a62461bcd0281526020600482015260296024820152600080516020615b868339815191526044820152600080516020615b46833981519152606482015290519081900360840190fd5b3360003282146129e257600080fd5b50803b8015612a29576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b34633b9aca00811015612a81576040805160e560020a62461bcd0281526020600482015260216024820152600080516020615b66833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612ad1576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615ba6833981519152604482015290519081900360640190fd5b612ada86610a42565b336000908152600a60205260409020549096509450600160a060020a0388161580612b0d5750600160a060020a03881633145b15612b2b576000858152600c60205260409020600601549350612b74565b600160a060020a0388166000908152600a6020908152604080832054888452600c909252909120600601549094508414612b74576000858152600c602052604090206006018490555b612b7d876136c0565b96506115f485858989610ce2565b60075481565b600d602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b612bd3615aec565b601154600090819060ff161515600114612c39576040805160e560020a62461bcd0281526020600482015260296024820152600080516020615b868339815191526044820152600080516020615b46833981519152606482015290519081900360840190fd5b336000328214612c4857600080fd5b50803b8015612c8f576040805160e560020a62461bcd0281526020600482015260116024820152600080516020615bc6833981519152604482015290519081900360640190fd5b34633b9aca00811015612ce7576040805160e560020a62461bcd0281526020600482015260216024820152600080516020615b66833981519152604482015260f860020a607902606482015290519081900360840190fd5b69152d02c7e14af6800000811115612d37576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615ba6833981519152604482015290519081900360640190fd5b612d4086610a42565b336000908152600a60205260409020549096509450871580612d7257506000858152600c602052604090206001015488145b15612d90576000858152600c60205260409020600601549350612b74565b6000888152600b6020908152604080832054888452600c909252909120600601549094508414612b74576000858152600c60205260409020600601849055612b7d876136c0565b60065460ff1681565b6005546000818152600f60205260408120602a01549091904290811015612e5e576000828152600f60205260409020602c0154811115612e3c576000828152600f60205260409020602a0154610fca908263ffffffff61426c16565b6000828152600f60205260409020602c0154610fca908263ffffffff61426c16565b60009250610fdb565b6000828152600f60205260408120602c0154429081118015612ece57506000848152600f60205260409020602a015481111580612ece57506000848152600f60205260409020602a015481118015612ece57506000848152600f6020526040902060280154155b15612efc576000848152600f60205260409020602e0154612ef5908463ffffffff61432916565b9150612f05565b612ef58361434a565b5092915050565b6005546000818152600f60205260408120602c0154909190429081118015612f7957506000828152600f60205260409020602a015481111580612f7957506000828152600f60205260409020602a015481118015612f7957506000828152600f6020526040902060280154155b15612fad576000828152600f60205260409020602d0154612fa6908590610fbe908263ffffffff61363216565b9250612fb6565b612fa6846143ce565b5050919050565b600054600160a060020a031681565b60115460ff1681565b60035481565b600c602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b6005546001016000818152600f60205260409020602f015461304a903463ffffffff61363216565b6000828152600f6020908152604091829020602f01929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000806005549250600160a060020a038b166000908152600a6020908152604080832054808452600c9092529091206005015490925061310e906130f09084906142cc565b6000848152600c60205260409020600301549063ffffffff61363216565b6000838152600d6020908152604080832087845290915290205490915061313c90600363ffffffff6141a216565b811115613171576000828152600d6020908152604080832086845290915290205461316e90600363ffffffff6141a216565b90505b6000828152600c60209081526040808320600180820154600d85528386209886529790935292209081015460028301546004909301549154949e959d509b5090995090975095509350915050565b600154600160a060020a031681565b6000858152600d60209081526040808320898452909152812060010154819081901515613206576131ff888561443b565b9350613223565b6000888152600c602052604090206005015461322390899061449a565b6000898152600f60205260409020602e015468056bc75e2d6310000011801561327d57506000888152600d602090815260408083208c8452909152902054670de0b6b3a76400009061327b908963ffffffff61363216565b115b15613304576000888152600d602090815260408083208c84529091529020546132b590670de0b6b3a76400009063ffffffff61426c16565b92506132c7878463ffffffff61426c16565b6000898152600c60205260409020600301549092506132ec908363ffffffff61363216565b6000898152600c602052604090206003015591955085915b633b9aca00871115611227576000898152600f60205260409020602e0154613332908863ffffffff61432916565b9050670de0b6b3a764000081106133af5761334d818a614676565b6000898152600f6020526040902060280154881461337a576000898152600f602052604090206028018890555b6000898152600f602052604090206029015485146133a7576000898152600f602052604090206029018590555b835160640184525b60045484516103e89091020184526000888152600d602090815260408083208c84529091529020600101546133eb90829063ffffffff61363216565b6000898152600d602090815260408083208d84529091529020600181019190915554613418908890613632565b6000898152600d602090815260408083208d8452825280832093909355600f905220602d015461344f90829063ffffffff61363216565b60008a8152600f60205260409020602d810191909155602e015461347a90889063ffffffff61363216565b60008a8152600f60209081526040808320602e019390935560108152828220888352905220546134b190889063ffffffff61363216565b60008a81526010602090815260408083208984529091529020556134d88989898988614760565b93506134e789898984886148eb565b93506134f389896149e7565b6112278886898488614db4565b60055460656007556008546101009004600160a060020a0316600160008215806135325750600160a060020a03831633145b1561354057600191506135e2565b61354983614f22565b156135dd5760085460ff1615156001141561358f576000848152600f60205260409020602b01805460ff1916600117905561358385614f3f565b606460075594506135b6565b50426135a36101688263ffffffff61363216565b6000858152600f60205260409020602a01555b6008805474ffffffffffffffffffffffffffffffffffffffffff19169055600091506135e2565b600191505b6001821515141561362b576008805474ffffffffffffffffffffffffffffffffffffffff0019163361010002179055613619615220565b6008805460ff19169115159190911790555b5050505050565b8181018281101561368d576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b60006136b96136b06136ab858563ffffffff61426c16565b6143ce565b611eb1856143ce565b9392505050565b6000808210806136d05750600382115b156136dd575060026136e0565b50805b919050565b6005546000818152600f60205260409020602c015442908111801561374f57506000828152600f60205260409020602a01548111158061374f57506000828152600f60205260409020602a01548111801561374f57506000828152600f6020526040902060280154155b156137815761376184611eb1896138fc565b6000888152600c602052604090206003015561192f8288868989886131ce565b6000828152600f60205260409020602a0154811180156137b357506000828152600f60205260409020602b015460ff16155b156119ea576137c183613500565b6000828152600f60205260409020602b015460ff161515600114156119ea5780670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600c60008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6000818152600c6020526040812060050154819061391b90849061449a565b6000838152600c60205260409020600481015460038201546002909201546139599261394d919063ffffffff61363216565b9063ffffffff61363216565b90506000811115613985576000838152600c602052604081206002810182905560038101829055600401555b8091505b50919050565b80516000908290828080602084118015906139aa5750600084115b1515613a26576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613a3557fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015613a9c57508460018503815181101515613a7457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515613b18576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515613b2757fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415613c6a57846001815181101515613b6157fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515613bde576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515613bed57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515613c6a576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b8382101561413a5784517f400000000000000000000000000000000000000000000000000000000000000090869084908110613ca757fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613d1b575084517f5b0000000000000000000000000000000000000000000000000000000000000090869084908110613cfc57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15613d88578482815181101515613d2e57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a028583815181101515613d5f57fe5b906020010190600160f860020a031916908160001a905350821515613d8357600192505b61412f565b8482815181101515613d9657fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480613e66575084517f600000000000000000000000000000000000000000000000000000000000000090869084908110613df257fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613e66575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110613e4757fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80613f10575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110613e9c57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613f10575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110613ef157fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515613f8c576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8482815181101515613f9a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415614079578482600101815181101515613fd657fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515614079576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015614125575084517f3000000000000000000000000000000000000000000000000000000000000000908690849081106140b257fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080614125575084517f39000000000000000000000000000000000000000000000000000000000000009086908490811061410657fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561412f57600192505b600190910190613c6f565b600183151514614194576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b60008215156141b35750600061368d565b508181028183828115156141c357fe5b041461368d576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000828152600d60209081526040808320848452825280832060010154600f909252822060300154670de0b6b3a76400009161425b919063ffffffff6141a216565b81151561426457fe5b049392505050565b6000828211156142c6576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828152600d6020908152604080832084845282528083206002810154600190910154600f909352908320603001546136b992670de0b6b3a764000091614313916141a2565b81151561431c57fe5b049063ffffffff61426c16565b60006136b96143378461434a565b611eb161434a868663ffffffff61363216565b60006309502f906143be6d03b2a1d15167e7c5699bfde00000611eb16143b97a0dac7055469777a6122ee4310dd6c14410500f290484000000000061394d6b01027e72f1f12813088000006143ad8a670de0b6b3a764000063ffffffff6141a216565b9063ffffffff6141a216565b615480565b8115156143c757fe5b0492915050565b60006143e1670de0b6b3a76400006154d3565b6143be600261441461440186670de0b6b3a764000063ffffffff6141a216565b65886c8f6730709063ffffffff6141a216565b81151561441d57fe5b0461394d61442a866154d3565b6304a817c89063ffffffff6141a216565b614443615aec565b6000838152600c602052604090206005015415614477576000838152600c602052604090206005015461447790849061449a565b50600580546000938452600c602052604090932001919091558051600a01815290565b6000806000806000806144ad88886142cc565b955060008611156115f4576000888152600d602090815260408083208a84529091529020600301546144e690879063ffffffff61363216565b6000898152600d602090815260408083208b845290915290205490945061451490600363ffffffff6141a216565b8411156145bc576000888152600d602090815260408083208a84529091529020600380820154915461454b9291611eb191906141a2565b925061455d868463ffffffff61426c16565b9150829450614571600554898460006154df565b905060008111156145b7576005546000908152600f60205260409020602f01546145a1908263ffffffff61363216565b6005546000908152600f60205260409020602f01555b6145c0565b8594505b6000888152600c60205260409020600301546145e390869063ffffffff61363216565b6000898152600c60209081526040808320600390810194909455600d82528083208b84529091529020015461461f90869063ffffffff61363216565b6000898152600d602090815260408083208b8452909152902060038101919091556002015461464f908790613632565b6000898152600d602090815260408083208b84529091529020600201555050505050505050565b6000818152600f60205260408120602a0154429190821180156146a857506000838152600f6020526040902060280154155b156146d5576146ce8261394d601e670de0b6b3a7640000885b049063ffffffff6141a216565b9050614702565b6000838152600f60205260409020602a01546146ff9061394d601e670de0b6b3a7640000886146c1565b90505b614715620151808363ffffffff61363216565b811015614735576000838152600f60205260409020602a01819055611d90565b614748620151808363ffffffff61363216565b6000848152600f60205260409020602a015550505050565b614768615aec565b60008080606461477f88600a63ffffffff6141a216565b81151561478857fe5b0492506000915050600a86048588148015906147b457506000868152600c602052604090206001015415155b15614854576000868152600c60205260409020600401546147dc90829063ffffffff61363216565b6000878152600c6020908152604091829020600481019390935582546001909301548251600160a060020a039094168452908301528181018390524260608301525189918b9189917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a4614867565b614864838263ffffffff61363216565b92505b60008054604080517fd0e30db00000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169263d0e30db0928792600480820193929182900301818588803b1580156148c557600080fd5b505af11580156148d9573d6000803e3d6000fd5b50979c9b505050505050505050505050565b6148f3615aec565b60008080606461490a88603c63ffffffff6141a216565b81151561491357fe5b049250614944606461492c89601463ffffffff6141a216565b81151561493557fe5b8991900463ffffffff61426c16565b9650614956878463ffffffff61426c16565b9150614964898985896154df565b905060008111156149825761497f838263ffffffff61426c16565b92505b6000898152600f60205260409020602f01546149a89061394d848463ffffffff61363216565b60008a8152600f60205260409020602f015560e08501516149d090849063ffffffff61363216565b60e086015250610100840152509095945050505050565b6000828152600f602052601390805b6000859052600f6020526014821015614ae5576000858152600f602052604090208260148110614a2257fe5b01541515614a3257819250614ae5565b6000858152600f6020526040902084908360148110614a4d57fe5b01541415614ada5750805b6000859052600f6020526013811015614ad5576000858152600f602052604090206001820160148110614a8757fe5b01546000868152600f602052604090208260148110614aa257fe5b01556000858152600f602052604090206001820160148110614ac057fe5b01541515614acd57614ad5565b600101614a58565b614ae5565b6001909101906149f6565b6000859052600f6020526013831415614b44576000859052600f602052601391505b60008210614b44576000858152600f602052604090208260148110614b2857fe5b01541515614b3857819250614b44565b60001990910190614b07565b6000858152600f6020526040902084908460148110614b5f57fe5b01556000858152600f6020526013935091505b6000859052600f6020526014821015614c77576000858152600f6020526040902060149081019083908110614ba357fe5b01541515614bb057614c77565b6000858152600f60205260409020849060149081019084908110614bd057fe5b01541415614c6c5750805b6000859052600f6020526013811015614c67576000858152600f6020526040902060149081019060018301908110614c0f57fe5b01546000868152600f6020526040902060149081019083908110614c2f57fe5b01556000858152600f6020526040902060149081019060018301908110614c5257fe5b01541515614c5f57614c67565b600101614bdb565b614c77565b600190910190614b72565b600091505b6000859052600f6020526014821015614d8b576000858152600f6020526040902060149081019083908110614cad57fe5b01541515614cbd57819250614d8b565b6000858152600f60205260408120600d919060149081019085908110614cdf57fe5b0154815260208082019290925260409081016000908120888252835281812054878252600d845282822089835290935220541115614d805750905080805b6000859052600f6020526013811015614d7b576000858152600f6020526040902060149081019082908110614d4e57fe5b01546000868152600f6020526040902060149081019060018401908110614d7157fe5b0155600101614d1d565b614d8b565b600190910190614c7c565b6000858152600f60205260409020849060149081019085908110614dab57fe5b01555050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600554751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c74681600001518260200151600c6000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600354604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000813b801515614f365760019150613989565b60009150613989565b614f47615aec565b6005546000818152600f6020526040812060288101546029820154602f909201549092808080806064614f8187604463ffffffff6141a216565b811515614f8a57fe5b0494506064614fa087600a63ffffffff6141a216565b811515614fa957fe5b04935060009250600091506000809054906101000a9004600160a060020a0316600160a060020a031663d0e30db0856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b15801561501f57600080fd5b505af1158015615033573d6000803e3d6000fd5b505050505061505382611eb185611eb1888b61426c90919063ffffffff16565b90506150618986838e615784565b600654909c5090915060ff161515600114156150b757600254604051600160a060020a039091169082156108fc029083906000818181858888f193505050501580156150b1573d6000803e3d6000fd5b50600090505b600f60008a8152602001908152602001600020602a0154620f4240028b60000151018b60000181815250508667016345785d8a000002886a52b7d2dcc80cd2e4000000028c6020015101018b6020018181525050600c600089815260200190815260200160002060000160009054906101000a9004600160a060020a03168b60400190600160a060020a03169081600160a060020a031681525050600c6000898152602001908152602001600020600101548b606001906000191690816000191681525050848b6080018181525050828b60e0018181525050818b60c0018181525050808b60a0018181525050600560008154809291906001019190505550888060010199505042600f60008b8152602001908152602001600020602c01819055506151f3600061394d610e104261363290919063ffffffff16565b60008a8152600f60205260409020602a810191909155602f018190558a9950505050505050505050919050565b600080600080600092506153984361394d42336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106152a25780518252601f199092019160209182019101615283565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120925050508115156152d857fe5b0461394d4561394d42416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b602083106153515780518252601f199092019160209182019101615332565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209250505081151561538757fe5b0461394d424463ffffffff61363216565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106153e65780518252601f1990920191602091820191016153c7565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912094506103e892508491506154209050565b046103e80282039050603281101561543757600192505b60408051338152602081018390528415158183015290517f11cc25ae1ab51c81702f199de59ca510d0a7b0dadf3c7d4c27efbaf79809d6b59181900360600190a1509092915050565b6000806002615490846001613632565b81151561549957fe5b0490508291505b818110156139895780915060026154c282858115156154bb57fe5b0483613632565b8115156154cb57fe5b0490506154a0565b600061368d82836141a2565b6000848152600f60205260408120602d015481908190615505908563ffffffff61426c16565b1515615654576000878152600f60205260409020602d015461553586670de0b6b3a764000063ffffffff6141a216565b81151561553e57fe5b6000898152600f6020526040902060300154919004925061556690839063ffffffff61363216565b6000888152600f6020526040902060300155670de0b6b3a7640000615591838663ffffffff6141a216565b81151561559a57fe5b6000888152600d602090815260408083208c8452825280832060020154600f909252909120603001549290910492506155ed9161394d908490670de0b6b3a764000090614313908a63ffffffff6141a216565b6000878152600d602090815260408083208b8452825280832060020193909355600f905220602d015461564d90670de0b6b3a76400009061563590859063ffffffff6141a216565b81151561563e57fe5b8791900463ffffffff61426c16565b925061577a565b6000878152600f60205260409020602d0154615676908563ffffffff61426c16565b61568e86670de0b6b3a764000063ffffffff6141a216565b81151561569757fe5b6000898152600f602052604090206030015491900492506156bf90839063ffffffff61363216565b6000888152600f602081815260408084206030018590558a8452600d82528084208c8552825290922060020154915261572291670de0b6b3a76400009061570c908863ffffffff6141a216565b81151561571557fe5b049063ffffffff61363216565b6000878152600d602090815260408083208b8452825280832060020193909355600f905220602d015461564d90670de0b6b3a7640000906156359061576d908863ffffffff61426c16565b859063ffffffff6141a216565b5050949350505050565b600061578e615aec565b60008080806103e86157a78a600a63ffffffff6141a216565b8115156157b057fe5b0491506157bc87610a42565b6008546101009004600160a060020a03166000908152600a6020908152604080832054808452600c9092529091206002015491985094506157fe908390613632565b6000858152600c6020526040902060020155615820888363ffffffff61426c16565b97506103e86158368a603163ffffffff6141a216565b81151561583f57fe5b04915060009250600090505b60008a9052600f602052601481101561595f5760008a8152600f60205260409020816014811061587757fe5b015415156158845761595f565b600a8314156158925761595f565b60008a8152600f6020526040902081601481106158ab57fe5b01546000818152600c60205260409020549094506158d190600160a060020a0316614f22565b15615957576000848152600c60205260409020600201546158f990839063ffffffff61363216565b6000858152600c602052604090206002015561591b888363ffffffff61426c16565b60008b8152600f60205260408120919950839160099190846014811061593d57fe5b015481526020810191909152604001600020556001909201915b60010161584b565b6103e86159738a603263ffffffff6141a216565b81151561597c57fe5b04915060009250600090505b60008a9052600f6020526014811015615a8c5760008a8152600f60205260409020601490810190829081106159b957fe5b015415156159c657615a8c565b600a8314156159d457615a8c565b60008a8152600f60205260409020601490810190829081106159f257fe5b01546000818152600c6020526040902054909450615a1890600160a060020a0316614f22565b15615a845760008481526009602052604090205415615a3657615a84565b6000848152600c6020526040902060020154615a5990839063ffffffff61363216565b6000858152600c6020526040902060020155615a7b888363ffffffff61426c16565b97506001909201915b600101615988565b5060005b60008a9052600f6020526014811015615adc5760008a8152600f6020526040812060099082908460148110615ac157fe5b01548152602081019190915260400160002055600101615a90565b5095989497509395505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152509056006e20646973636f72640000000000000000000000000000000000000000000000706f636b6574206c696e743a206e6f7420612076616c69642063757272656e63697473206e6f74207265616479207965742e2020636865636b203f65746120696e6f20766974616c696b2c206e6f000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a723058209ce12b9f55ace14a48f5adcc4e6a8f66a81f5f06925231bd7ddc55238561846b002900000000000000000000000003e5793400dfb62f8eb469f4ffa84862cc1e6acc0000000000000000000000004ee1ba168551379fd8a59e2e918ff9ee109a6abf
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000003e5793400dfb62f8eb469f4ffa84862cc1e6acc0000000000000000000000004ee1ba168551379fd8a59e2e918ff9ee109a6abf
-----Decoded View---------------
Arg [0] : _TeamDreamHubSCaddress (address): 0x03e5793400DFb62F8eB469f4fFa84862CC1e6acc
Arg [1] : _PlayerBookSCaddress (address): 0x4eE1ba168551379fD8A59e2e918fF9ee109A6abF
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000003e5793400dfb62f8eb469f4ffa84862cc1e6acc
Arg [1] : 0000000000000000000000004ee1ba168551379fd8a59e2e918ff9ee109a6abf
Swarm Source
bzzr://9ce12b9f55ace14a48f5adcc4e6a8f66a81f5f06925231bd7ddc55238561846b
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.