ETH Price: $1,894.34 (-0.85%)
 

Overview

Max Total Supply

1,181.34911523 NOM

Holders

996

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A crowd-investing paradigm based on the principle of redenomination and the zero-sum game theory.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Redenom

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-07-23
*/

pragma solidity ^0.4.21;
// Redenom 2.9.0023
// The GNU General Public License v3
// © Musqogees Tech 2018, Redenom ™

    
// -------------------- SAFE MATH ----------------------------------------------
library SafeMath {
    function add(uint a, uint b) internal pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }
    function sub(uint a, uint b) internal pure returns (uint c) {
        require(b <= a);
        c = a - b;
    }
    function mul(uint a, uint b) internal pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b);
    }
    function div(uint a, uint b) internal pure returns (uint c) {
        require(b > 0);
        c = a / b;
    }
}

// ----------------------------------------------------------------------------
// Basic ERC20 functions
// ----------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public view returns (uint);
    function balanceOf(address tokenOwner) public view returns (uint balance);
    function allowance(address tokenOwner, address spender) public view returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

// ----------------------------------------------------------------------------
// Owned contract manages Owner and Admin rights.
// Owner is Admin by default and can set other Admin
// ----------------------------------------------------------------------------
contract Owned {
    address public owner;
    address public newOwner;
    address internal admin;

    // modifier for Owner functions
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }
    // modifier for Admin functions
    modifier onlyAdmin {
        require(msg.sender == admin || msg.sender == owner);
        _;
    }

    event OwnershipTransferred(address indexed _from, address indexed _to);
    event AdminChanged(address indexed _from, address indexed _to);

    // Constructor
    function Owned() public {
        owner = msg.sender;
        admin = msg.sender;
    }

    function setAdmin(address newAdmin) public onlyOwner{
        emit AdminChanged(admin, newAdmin);
        admin = newAdmin;
    }

    function showAdmin() public view onlyAdmin returns(address _admin){
        _admin = admin;
        return _admin;
    }

    function transferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }

    function acceptOwnership() public {
        require(msg.sender == newOwner);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}

// ----------------------------------------------------------------------------
// Contract function to receive approval and execute function in one call
// Borrowed from MiniMeToken
// ----------------------------------------------------------------------------
contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}


contract Redenom is ERC20Interface, Owned{
    using SafeMath for uint;
    
    //ERC20 params
    string      public name; // ERC20 
    string      public symbol; // ERC20 
    uint        private _totalSupply; // ERC20
    uint        public decimals = 8; // ERC20 


    //Redenomination
    uint public round = 1; 
    uint public epoch = 1; 

    bool public frozen = false;

    //dec - sum of every exponent
    uint[8] private dec = [0,0,0,0,0,0,0,0];
    //mul - internal used array for splitting numbers according to round     
    uint[9] private mul = [1,10,100,1000,10000,100000,1000000,10000000,100000000];
    //weight - internal used array (weights of every digit)    
    uint[9] private weight = [uint(0),0,0,0,0,5,10,30,55];
    //current_toadd - After redenominate() it holds an amount to add on each digit.
    uint[9] private current_toadd = [uint(0),0,0,0,0,0,0,0,0];
   

    //Funds
    uint public total_fund; // All funds for 100 epochs 100 000 000 NOM
    uint public epoch_fund; // All funds for current epoch 100 000 NOM
    uint public team_fund; // Team Fund 10% of all funds paid
    uint public redenom_dao_fund; // DAO Fund 30% of all funds paid

    struct Account {
        uint balance;
        uint lastRound; // Last round dividens paid
        uint lastEpoch; // Last round dividens paid
        uint lastVotedBallotId; // Last ballot user voted
        uint bitmask;
            // 2 - got 0.55... for phone verif.
            // 4 - got 1 for KYC
            // 1024 - banned
            //
            // [2] [4] 8 16 32 64 128 256 512 [1024] ... - free to use
    }
    
    mapping(address=>Account) accounts; 
    mapping(address => mapping(address => uint)) allowed;

    //Redenom special events
    event Redenomination(uint indexed round);
    event Epoch(uint indexed epoch);
    event VotingOn(uint indexed _ballotId);
    event VotingOff(uint indexed winner, uint indexed ballot_id);
    event Vote(address indexed voter, uint indexed propId, uint voterBalance, uint indexed curentBallotId);

    function Redenom() public {
        symbol = "NOM";
        name = "Redenom";
        _totalSupply = 0; // total NOM's in the game 

        total_fund = 10000000 * 10**decimals; // 100 000 00.00000000, 1Mt
        epoch_fund = 100000 * 10**decimals; // 100 000.00000000, 100 Kt
        total_fund = total_fund.sub(epoch_fund); // Taking 100 Kt from total to epoch_fund

    }




    // New epoch can be started if:
    // - Current round is 9
    // - Curen epoch < 10
    function StartNewEpoch() public onlyAdmin returns(bool succ){
        require(frozen == false); 
        require(round == 9);
        require(epoch < 100);

        dec = [0,0,0,0,0,0,0,0];  
        round = 1;
        epoch++;

        epoch_fund = 100000 * 10**decimals; // 100 000.00000000, 100 Kt
        total_fund = total_fund.sub(epoch_fund); // Taking 100 Kt from total to epoch fund


        emit Epoch(epoch);
        return true;
    }




    ///////////////////////////////////////////B A L L O T////////////////////////////////////////////

    //Is voting active?
    bool public votingActive = false;
    uint public curentBallotId = 0;
    uint public curentWinner;

    // Voter requirements:
    modifier onlyVoter {
        require(votingActive == true);
        require(bitmask_check(msg.sender, 4) == true); //passed KYC
        require(bitmask_check(msg.sender, 1024) == false); // banned == false
        require((accounts[msg.sender].lastVotedBallotId < curentBallotId)); 
        _;
    }

    // This is a type for a single Project.
    struct Project {
        uint id;   // Project id
        uint votesWeight; // total weight
        bool active; //active status.
    }
    Project[] public projects;

    struct Winner {
        uint id;
        uint projId;
    }
    Winner[] public winners;


    function addWinner(uint projId) internal {
        winners.push(Winner({
            id: curentBallotId,
            projId: projId
        }));
    }
    function findWinner(uint _ballotId) public constant returns (uint winner){
        for (uint p = 0; p < winners.length; p++) {
            if (winners[p].id == _ballotId) {
                return winners[p].projId;
            }
        }
    }



    // Add prop. with id: _id
    function addProject(uint _id) public onlyAdmin {
        require(votingActive == true);
        projects.push(Project({
            id: _id,
            votesWeight: 0,
            active: true
        }));
    }

    // Turns project ON and OFF
    function swapProject(uint _id) public onlyAdmin {
        for (uint p = 0; p < projects.length; p++){
            if(projects[p].id == _id){
                if(projects[p].active == true){
                    projects[p].active = false;
                }else{
                    projects[p].active = true;
                }
            }
        }
    }

    // Returns proj. weight
    function projectWeight(uint _id) public constant returns(uint PW){
        for (uint p = 0; p < projects.length; p++){
            if(projects[p].id == _id){
                return projects[p].votesWeight;
            }
        }
    }

    // Returns proj. status
    function projectActive(uint _id) public constant returns(bool PA){
        for (uint p = 0; p < projects.length; p++){
            if(projects[p].id == _id){
                return projects[p].active;
            }
        }
    }

    // Vote for proj. using id: _id
    function vote(uint _id) public onlyVoter returns(bool success){

        updateAccount(msg.sender);
        require(frozen == false);

        for (uint p = 0; p < projects.length; p++){
            if(projects[p].id == _id && projects[p].active == true){
                projects[p].votesWeight += sqrt(accounts[msg.sender].balance);
                accounts[msg.sender].lastVotedBallotId = curentBallotId;
            }
        }
        assert(accounts[msg.sender].lastVotedBallotId == curentBallotId);
        emit Vote(msg.sender, _id, accounts[msg.sender].balance, curentBallotId);

        return true;
    }

    // Shows currently winning proj 
    function winningProject() public constant returns (uint _winningProject){
        uint winningVoteWeight = 0;
        for (uint p = 0; p < projects.length; p++) {
            if (projects[p].votesWeight > winningVoteWeight && projects[p].active == true) {
                winningVoteWeight = projects[p].votesWeight;
                _winningProject = projects[p].id;
            }
        }
    }

    // Activates voting
    // Clears projects
    function enableVoting() public onlyAdmin returns(uint ballotId){ 
        require(votingActive == false);
        require(frozen == false);

        curentBallotId++;
        votingActive = true;
        delete projects;


        emit VotingOn(curentBallotId);
        return curentBallotId;
    }

    // Deactivates voting
    function disableVoting() public onlyAdmin returns(uint winner){
        require(votingActive == true);
        require(frozen == false);
        votingActive = false;

        curentWinner = winningProject();
        addWinner(curentWinner);
        
        emit VotingOff(curentWinner, curentBallotId);
        return curentWinner;
    }


    // sqrt root func
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }

    ///////////////////////////////////////////B A L L O T////////////////////////////////////////////




    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    // NOM token emission functions
    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    // Pays 1.00000000 from epoch_fund to KYC-passed user
    // Uses payout(), bitmask_check(), bitmask_add()
    // adds 4 to bitmask
    function pay1(address to) public onlyAdmin returns(bool success){
        require(bitmask_check(to, 4) == false);
        uint new_amount = 100000000;
        payout(to,new_amount);
        bitmask_add(to, 4);
        return true;
    }

    // Pays .555666XX from epoch_fund to user approved phone;
    // Uses payout(), bitmask_check(), bitmask_add()
    // adds 2 to bitmask
    function pay055(address to) public onlyAdmin returns(bool success){
        require(bitmask_check(to, 2) == false);
        uint new_amount = 55566600 + (block.timestamp%100);       
        payout(to,new_amount);
        bitmask_add(to, 2);
        return true;
    }

    // Pays .555666XX from epoch_fund to KYC user in new epoch;
    // Uses payout(), bitmask_check(), bitmask_add()
    // adds 2 to bitmask
    function pay055loyal(address to) public onlyAdmin returns(bool success){
        require(epoch > 1);
        require(bitmask_check(to, 4) == true);
        uint new_amount = 55566600 + (block.timestamp%100);       
        payout(to,new_amount);
        return true;
    }

    // Pays random number from epoch_fund
    // Uses payout()
    function payCustom(address to, uint amount) public onlyOwner returns(bool success){
        payout(to,amount);
        return true;
    }

    // Pays [amount] of money to [to] account from epoch_fund
    // Counts amount +30% +10%
    // Updating _totalSupply
    // Pays to balance and 2 funds
    // Refreshes dec[]
    // Emits event
    function payout(address to, uint amount) private returns (bool success){
        require(to != address(0));
        require(amount>=current_mul());
        require(bitmask_check(to, 1024) == false); // banned == false
        require(frozen == false); 
        
        //Update account balance
        updateAccount(to);
        //fix amount
        uint fixedAmount = fix_amount(amount);

        renewDec( accounts[to].balance, accounts[to].balance.add(fixedAmount) );

        uint team_part = (fixedAmount/100)*16;
        uint dao_part = (fixedAmount/10)*6;
        uint total = fixedAmount.add(team_part).add(dao_part);

        epoch_fund = epoch_fund.sub(total);
        team_fund = team_fund.add(team_part);
        redenom_dao_fund = redenom_dao_fund.add(dao_part);
        accounts[to].balance = accounts[to].balance.add(fixedAmount);
        _totalSupply = _totalSupply.add(total);

        emit Transfer(address(0), to, fixedAmount);
        return true;
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////




    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    // Withdraw amount from team_fund to given address
    function withdraw_team_fund(address to, uint amount) public onlyOwner returns(bool success){
        require(amount <= team_fund);
        accounts[to].balance = accounts[to].balance.add(amount);
        team_fund = team_fund.sub(amount);
        return true;
    }
    // Withdraw amount from redenom_dao_fund to given address
    function withdraw_dao_fund(address to, uint amount) public onlyOwner returns(bool success){
        require(amount <= redenom_dao_fund);
        accounts[to].balance = accounts[to].balance.add(amount);
        redenom_dao_fund = redenom_dao_fund.sub(amount);
        return true;
    }

    function freeze_contract() public onlyOwner returns(bool success){
        require(frozen == false);
        frozen = true;
        return true;
    }
    function unfreeze_contract() public onlyOwner returns(bool success){
        require(frozen == true);
        frozen = false;
        return true;
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////


    // Run this on every change of user balance
    // Refreshes dec[] array
    // Takes initial and new ammount
    // while transaction must be called for each acc.
    function renewDec(uint initSum, uint newSum) internal returns(bool success){

        if(round < 9){
            uint tempInitSum = initSum; 
            uint tempNewSum = newSum; 
            uint cnt = 1;

            while( (tempNewSum > 0 || tempInitSum > 0) && cnt <= decimals ){

                uint lastInitSum = tempInitSum%10; // 0.0000000 (0)
                tempInitSum = tempInitSum/10; // (0.0000000) 0

                uint lastNewSum = tempNewSum%10; // 1.5556664 (5)
                tempNewSum = tempNewSum/10; // (1.5556664) 5

                if(cnt >= round){
                    if(lastNewSum >= lastInitSum){
                        // If new is bigger
                        dec[decimals-cnt] = dec[decimals-cnt].add(lastNewSum - lastInitSum);
                    }else{
                        // If new is smaller
                        dec[decimals-cnt] = dec[decimals-cnt].sub(lastInitSum - lastNewSum);
                    }
                }

                cnt = cnt+1;
            }
        }//if(round < 9){

        return true;
    }



    ////////////////////////////////////////// BITMASK /////////////////////////////////////////////////////
    // Adding bit to bitmask
    // checks if already set
    function bitmask_add(address user, uint _bit) internal returns(bool success){ //todo privat?
        require(bitmask_check(user, _bit) == false);
        accounts[user].bitmask = accounts[user].bitmask.add(_bit);
        return true;
    }
    // Removes bit from bitmask
    // checks if already set
    function bitmask_rm(address user, uint _bit) internal returns(bool success){
        require(bitmask_check(user, _bit) == true);
        accounts[user].bitmask = accounts[user].bitmask.sub(_bit);
        return true;
    }
    // Checks whether some bit is present in BM
    function bitmask_check(address user, uint _bit) public view returns (bool status){
        bool flag;
        accounts[user].bitmask & _bit == 0 ? flag = false : flag = true;
        return flag;
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    function ban_user(address user) public onlyAdmin returns(bool success){
        bitmask_add(user, 1024);
        return true;
    }
    function unban_user(address user) public onlyAdmin returns(bool success){
        bitmask_rm(user, 1024);
        return true;
    }
    function is_banned(address user) public view onlyAdmin returns (bool result){
        return bitmask_check(user, 1024);
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////



    //Redenominates 
    function redenominate() public onlyAdmin returns(uint current_round){
        require(frozen == false); 
        require(round<9); // Round must be < 9

        // Deleting funds rest from TS
        _totalSupply = _totalSupply.sub( team_fund%mul[round] ).sub( redenom_dao_fund%mul[round] ).sub( dec[8-round]*mul[round-1] );

        // Redenominating 3 vars: _totalSupply team_fund redenom_dao_fund
        _totalSupply = ( _totalSupply / mul[round] ) * mul[round];
        team_fund = ( team_fund / mul[round] ) * mul[round]; // Redenominates team_fund
        redenom_dao_fund = ( redenom_dao_fund / mul[round] ) * mul[round]; // Redenominates redenom_dao_fund

        if(round>1){
            // decimals burned in last round and not distributed
            uint superold = dec[(8-round)+1]; 

            // Returning them to epoch_fund
            epoch_fund = epoch_fund.add(superold * mul[round-2]);
            dec[(8-round)+1] = 0;
        }

        
        if(round<8){ // if round between 1 and 7 

            uint unclimed = dec[8-round]; // total sum of burned decimal
            //[23,32,43,34,34,54,34, ->46<- ]
            uint total_current = dec[8-1-round]; // total sum of last active decimal
            //[23,32,43,34,34,54, ->34<-, 46]

            // security check
            if(total_current==0){
                current_toadd = [0,0,0,0,0,0,0,0,0]; 
                round++;
                emit Redenomination(round);
                return round;
            }

            // Counting amounts to add on every digit
            uint[9] memory numbers  =[uint(1),2,3,4,5,6,7,8,9]; // 
            uint[9] memory ke9  =[uint(0),0,0,0,0,0,0,0,0]; // 
            uint[9] memory k2e9  =[uint(0),0,0,0,0,0,0,0,0]; // 

            uint k05summ = 0;

                for (uint k = 0; k < ke9.length; k++) {
                     
                    ke9[k] = numbers[k]*1e9/total_current;
                    if(k<5) k05summ += ke9[k];
                }             
                for (uint k2 = 5; k2 < k2e9.length; k2++) {
                    k2e9[k2] = uint(ke9[k2])+uint(k05summ)*uint(weight[k2])/uint(100);
                }
                for (uint n = 5; n < current_toadd.length; n++) {
                    current_toadd[n] = k2e9[n]*unclimed/10/1e9;
                }
                // current_toadd now contains all digits
                
        }else{
            if(round==8){
                // Returns last burned decimals to epoch_fund
                epoch_fund = epoch_fund.add(dec[0] * 10000000); //1e7
                dec[0] = 0;
            }
            
        }

        round++;
        emit Redenomination(round);
        return round;
    }


    function actual_balance(address user) public constant returns(uint _actual_balance){
        if(epoch > 1 && accounts[user].lastEpoch < epoch){
            return (accounts[user].balance/100000000)*100000000;
        }
        return (accounts[user].balance/current_mul())*current_mul();
    }
   
    // Refresh user acc
    // Pays dividends if any
    function updateAccount(address account) public returns(uint new_balance){
        require(frozen == false); 
        require(round<=9);
        require(bitmask_check(account, 1024) == false); // banned == false

        if(epoch > 1 && accounts[account].lastEpoch < epoch){
            uint entire = accounts[account].balance/100000000; //1.
            //uint diff_ = accounts[account].balance - entire*100000000;
            if((accounts[account].balance - entire*100000000) >0){
                emit Transfer(account, address(0), (accounts[account].balance - entire*100000000));
            }
            accounts[account].balance = entire*100000000;
            accounts[account].lastEpoch = epoch;
            accounts[account].lastRound = round;
            return accounts[account].balance;
        }

        if(round > accounts[account].lastRound){

            if(round >1 && round <=8){


                // Splits user bal by current multiplier
                uint tempDividedBalance = accounts[account].balance/current_mul();
                // [1.5556663] 4  (r2)
                uint newFixedBalance = tempDividedBalance*current_mul();
                // [1.55566630]  (r2)
                uint lastActiveDigit = tempDividedBalance%10;
                 // 1.555666 [3] 4  (r2)
                uint diff = accounts[account].balance - newFixedBalance;
                // 1.5556663 [4] (r2)

                if(diff > 0){
                    accounts[account].balance = newFixedBalance;
                    emit Transfer(account, address(0), diff);
                }

                uint toBalance = 0;
                if(lastActiveDigit>0 && current_toadd[lastActiveDigit-1]>0){
                    toBalance = current_toadd[lastActiveDigit-1] * current_mul();
                }


                if(toBalance > 0 && toBalance < dec[8-round+1]){ // Not enough

                    renewDec( accounts[account].balance, accounts[account].balance.add(toBalance) );
                    emit Transfer(address(0), account, toBalance);
                    // Refreshing dec arr
                    accounts[account].balance = accounts[account].balance.add(toBalance);
                    // Adding to ball
                    dec[8-round+1] = dec[8-round+1].sub(toBalance);
                    // Taking from burned decimal
                    _totalSupply = _totalSupply.add(toBalance);
                    // Add dividend to _totalSupply
                }

                accounts[account].lastRound = round;
                // Writting last round in wich user got dividends
                if(accounts[account].lastEpoch != epoch){
                    accounts[account].lastEpoch = epoch;
                }


                return accounts[account].balance;
                // returns new balance
            }else{
                if( round == 9){ //100000000 = 9 mul (mul8)

                    uint newBalance = fix_amount(accounts[account].balance);
                    uint _diff = accounts[account].balance.sub(newBalance);

                    if(_diff > 0){
                        renewDec( accounts[account].balance, newBalance );
                        accounts[account].balance = newBalance;
                        emit Transfer(account, address(0), _diff);
                    }

                    accounts[account].lastRound = round;
                    // Writting last round in wich user got dividends
                    if(accounts[account].lastEpoch != epoch){
                        accounts[account].lastEpoch = epoch;
                    }


                    return accounts[account].balance;
                    // returns new balance
                }
            }
        }
    }

    // Returns current multipl. based on round
    // Returns current multiplier based on round
    function current_mul() internal view returns(uint _current_mul){
        return mul[round-1];
    }
    // Removes burned values 123 -> 120  
    // Returns fixed
    function fix_amount(uint amount) public view returns(uint fixed_amount){
        return ( amount / current_mul() ) * current_mul();
    }
    // Returns rest
    function get_rest(uint amount) internal view returns(uint fixed_amount){
        return amount % current_mul();
    }



    // ------------------------------------------------------------------------
    // ERC20 totalSupply: 
    //-------------------------------------------------------------------------
    function totalSupply() public view returns (uint) {
        return _totalSupply;
    }
    // ------------------------------------------------------------------------
    // ERC20 balanceOf: Get the token balance for account `tokenOwner`
    // ------------------------------------------------------------------------
    function balanceOf(address tokenOwner) public constant returns (uint balance) {
        return accounts[tokenOwner].balance;
    }
    // ------------------------------------------------------------------------
    // ERC20 allowance:
    // Returns the amount of tokens approved by the owner that can be
    // transferred to the spender's account
    // ------------------------------------------------------------------------
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining) {
        return allowed[tokenOwner][spender];
    }
    // ------------------------------------------------------------------------
    // ERC20 transfer:
    // Transfer the balance from token owner's account to `to` account
    // - Owner's account must have sufficient balance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transfer(address to, uint tokens) public returns (bool success) {
        require(frozen == false); 
        require(to != address(0));
        require(bitmask_check(to, 1024) == false); // banned == false

        //Fixing amount, deleting burned decimals
        tokens = fix_amount(tokens);
        // Checking if greater then 0
        require(tokens>0);

        //Refreshing accs, payng dividends
        updateAccount(to);
        updateAccount(msg.sender);

        uint fromOldBal = accounts[msg.sender].balance;
        uint toOldBal = accounts[to].balance;

        accounts[msg.sender].balance = accounts[msg.sender].balance.sub(tokens);
        accounts[to].balance = accounts[to].balance.add(tokens);

        require(renewDec(fromOldBal, accounts[msg.sender].balance));
        require(renewDec(toOldBal, accounts[to].balance));

        emit Transfer(msg.sender, to, tokens);
        return true;
    }


    // ------------------------------------------------------------------------
    // ERC20 approve:
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account
    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
    // recommends that there are no checks for the approval double-spend attack
    // as this should be implemented in user interfaces 
    // ------------------------------------------------------------------------
    function approve(address spender, uint tokens) public returns (bool success) {
        require(frozen == false); 
        require(bitmask_check(msg.sender, 1024) == false); // banned == false
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        return true;
    }
    // ------------------------------------------------------------------------
    // ERC20 transferFrom:
    // Transfer `tokens` from the `from` account to the `to` account
    // The calling account must already have sufficient tokens approve(...)-d
    // for spending from the `from` account and
    // - From account must have sufficient balance to transfer
    // - Spender must have sufficient allowance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transferFrom(address from, address to, uint tokens) public returns (bool success) {
        require(frozen == false); 
        require(bitmask_check(to, 1024) == false); // banned == false
        updateAccount(from);
        updateAccount(to);

        uint fromOldBal = accounts[from].balance;
        uint toOldBal = accounts[to].balance;

        accounts[from].balance = accounts[from].balance.sub(tokens);
        allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
        accounts[to].balance = accounts[to].balance.add(tokens);

        require(renewDec(fromOldBal, accounts[from].balance));
        require(renewDec(toOldBal, accounts[to].balance));

        emit Transfer(from, to, tokens);
        return true; 
    }

    // ------------------------------------------------------------------------
    // Token owner can approve for `spender` to transferFrom(...) `tokens`
    // from the token owner's account. The `spender` contract function
    // `receiveApproval(...)` is then executed
    // ------------------------------------------------------------------------
    function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) {
        require(frozen == false); 
        require(bitmask_check(msg.sender, 1024) == false); // banned == false
        allowed[msg.sender][spender] = tokens;
        emit Approval(msg.sender, spender, tokens);
        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data);
        return true;
    }
    // ------------------------------------------------------------------------
    // Don't accept ETH https://github.com/ConsenSys/Ethereum-Development-Best-Practices/wiki/Fallback-functions-and-the-fundamental-limitations-of-using-send()-in-Ethereum-&-Solidity
    // ------------------------------------------------------------------------
    function () public payable {
        revert();
    } // OR function() payable { } to accept ETH 

    // ------------------------------------------------------------------------
    // Owner can transfer out any accidentally sent ERC20 tokens
    // ------------------------------------------------------------------------
    function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) {
        require(frozen == false); 
        return ERC20Interface(tokenAddress).transfer(owner, tokens);
    }




} // © Musqogees Tech 2018, Redenom ™

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"vote","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableVoting","outputs":[{"name":"winner","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"frozen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ballotId","type":"uint256"}],"name":"findWinner","outputs":[{"name":"winner","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"payCustom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"pay1","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"}],"name":"ban_user","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"projects","outputs":[{"name":"id","type":"uint256"},{"name":"votesWeight","type":"uint256"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"round","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"epoch_fund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"pay055loyal","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"team_fund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"curentWinner","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"updateAccount","outputs":[{"name":"new_balance","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingActive","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"freeze_contract","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"showAdmin","outputs":[{"name":"_admin","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"redenom_dao_fund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"addProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"StartNewEpoch","outputs":[{"name":"succ","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"pay055","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdraw_team_fund","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"amount","type":"uint256"}],"name":"fix_amount","outputs":[{"name":"fixed_amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"epoch","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winningProject","outputs":[{"name":"_winningProject","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"_bit","type":"uint256"}],"name":"bitmask_check","outputs":[{"name":"status","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total_fund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdraw_dao_fund","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"winners","outputs":[{"name":"id","type":"uint256"},{"name":"projId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"}],"name":"unban_user","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"is_banned","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"redenominate","outputs":[{"name":"current_round","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unfreeze_contract","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"projectActive","outputs":[{"name":"PA","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"actual_balance","outputs":[{"name":"_actual_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"swapProject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"curentBallotId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableVoting","outputs":[{"name":"ballotId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"projectWeight","outputs":[{"name":"PW","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"round","type":"uint256"}],"name":"Redenomination","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"epoch","type":"uint256"}],"name":"Epoch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_ballotId","type":"uint256"}],"name":"VotingOn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"winner","type":"uint256"},{"indexed":true,"name":"ballot_id","type":"uint256"}],"name":"VotingOff","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"voter","type":"address"},{"indexed":true,"name":"propId","type":"uint256"},{"indexed":false,"name":"voterBalance","type":"uint256"},{"indexed":true,"name":"curentBallotId","type":"uint256"}],"name":"Vote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"}]

600860068190556001600781905581556009805460ff191690556101806040526000608081815260a082905260c082905260e0829052610100829052610120829052610140829052610160919091526200005d91600a9190620002a6565b50604080516101208101825260018152600a60208201526064918101919091526103e860608201526127106080820152620186a060a0820152620f424060c08201526298968060e08201526305f5e100610100820152620000c3906012906009620002ee565b5061012060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160058152602001600a8152602001601e81526020016037815250601b9060096200012092919062000327565b50610120604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525060249060096200017d92919062000327565b506033805460ff1916905560006034553480156200019a57600080fd5b506000805433600160a060020a031991821681179092556002805490911690911790556040805180820190915260038082527f4e4f4d00000000000000000000000000000000000000000000000000000000006020909201918252620002039160049162000358565b506040805180820190915260078082527f526564656e6f6d0000000000000000000000000000000000000000000000000060209092019182526200024a9160039162000358565b506000600555600654600a0a629896808102602d819055620186a0909102602e81905562000287919064010000000062000290810262002d251704565b602d55620003ea565b600082821115620002a057600080fd5b50900390565b8260088101928215620002dc579160200282015b82811115620002dc578251829060ff16905591602001919060010190620002ba565b50620002ea929150620003ca565b5090565b8260098101928215620002dc579160200282015b82811115620002dc578251829063ffffffff1690559160200191906001019062000302565b8260098101928215620002dc579160200282015b82811115620002dc5782518255916020019190600101906200033b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200039b57805160ff1916838001178555620002dc565b82800160010185558215620002dc5791820182811115620002dc5782518255916020019190600101906200033b565b620003e791905b80821115620002ea5760008155600101620003d1565b90565b612fd980620003fa6000396000f3006080604052600436106102925763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630121b93f811461029757806304cd1819146102c3578063054f7d9c146102ea57806305e49d1d146102ff57806306ec62721461031757806306fdde031461033b57806307ba217c146103c5578063095ea7b3146103e65780630fccf22e1461040a578063107046bd1461042b578063146ca5311461046357806318160ddd146104785780631a7b11f51461048d5780631d2af28b146104a257806323b872dd146104c3578063251b5f8e146104ed57806325a52d9d146105025780632ce3d44014610517578063313ce56714610538578063408e27271461054d57806341c41923146105625780634f0e86561461057757806351651003146105a857806357183698146105bd5780636584ceb0146105d7578063704b6c02146105ec57806370a082311461060d57806379ba50971461062e5780638c90b2ea146106435780638da5cb5b146106645780638f46b586146106795780638f87932c1461069d578063900cf0cf146106b5578063946bf4d7146106ca57806395d89b41146106df5780639cba60a7146106f4578063a17b229d14610718578063a24e20de1461072d578063a2fb117514610751578063a7e1b51614610782578063a9059cbb146107a3578063b3adc716146107c7578063c091e45a146107e8578063c450a25f146107fd578063cae9ca5114610812578063cf504d481461087b578063d4ee1d9014610893578063dc39d06d146108a8578063dd62ed3e146108cc578063de78ed85146108f3578063dfa0ca1414610914578063e4eacd701461092c578063eb4439fb14610941578063f2fde38b14610956578063f37e741e14610977575b600080fd5b3480156102a357600080fd5b506102af60043561098f565b604080519115158252519081900360200190f35b3480156102cf57600080fd5b506102d8610b49565b60408051918252519081900360200190f35b3480156102f657600080fd5b506102af610bf5565b34801561030b57600080fd5b506102d8600435610bfe565b34801561032357600080fd5b506102af600160a060020a0360043516602435610c63565b34801561034757600080fd5b50610350610c91565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038a578181015183820152602001610372565b50505050905090810190601f1680156103b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d157600080fd5b506102af600160a060020a0360043516610d1f565b3480156103f257600080fd5b506102af600160a060020a0360043516602435610d8d565b34801561041657600080fd5b506102af600160a060020a0360043516610e1d565b34801561043757600080fd5b50610443600435610e65565b604080519384526020840192909252151582820152519081900360600190f35b34801561046f57600080fd5b506102d8610e99565b34801561048457600080fd5b506102d8610e9f565b34801561049957600080fd5b506102d8610ea5565b3480156104ae57600080fd5b506102af600160a060020a0360043516610eab565b3480156104cf57600080fd5b506102af600160a060020a0360043581169060243516604435610f1b565b3480156104f957600080fd5b506102d86110c4565b34801561050e57600080fd5b506102d86110ca565b34801561052357600080fd5b506102d8600160a060020a03600435166110d0565b34801561054457600080fd5b506102d86115fa565b34801561055957600080fd5b506102af611600565b34801561056e57600080fd5b506102af611609565b34801561058357600080fd5b5061058c611645565b60408051600160a060020a039092168252519081900360200190f35b3480156105b457600080fd5b506102d8611686565b3480156105c957600080fd5b506105d560043561168c565b005b3480156105e357600080fd5b506102af611781565b3480156105f857600080fd5b506105d5600160a060020a0360043516611891565b34801561061957600080fd5b506102d8600160a060020a0360043516611911565b34801561063a57600080fd5b506105d561192c565b34801561064f57600080fd5b506102af600160a060020a03600435166119b4565b34801561067057600080fd5b5061058c611a1d565b34801561068557600080fd5b506102af600160a060020a0360043516602435611a2c565b3480156106a957600080fd5b506102d8600435611ab4565b3480156106c157600080fd5b506102d8611ad8565b3480156106d657600080fd5b506102d8611ade565b3480156106eb57600080fd5b50610350611b9a565b34801561070057600080fd5b506102af600160a060020a0360043516602435611bf5565b34801561072457600080fd5b506102d8611c30565b34801561073957600080fd5b506102af600160a060020a0360043516602435611c36565b34801561075d57600080fd5b50610769600435611cbe565b6040805192835260208301919091528051918290030190f35b34801561078e57600080fd5b506102af600160a060020a0360043516611cea565b3480156107af57600080fd5b506102af600160a060020a0360043516602435611d27565b3480156107d357600080fd5b506102af600160a060020a0360043516611e9f565b3480156107f457600080fd5b506102d8611edc565b34801561080957600080fd5b506102af61243e565b34801561081e57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102af948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061247a9650505050505050565b34801561088757600080fd5b506102af600435612605565b34801561089f57600080fd5b5061058c61266f565b3480156108b457600080fd5b506102af600160a060020a036004351660243561267e565b3480156108d857600080fd5b506102d8600160a060020a0360043581169060243516612749565b3480156108ff57600080fd5b506102d8600160a060020a0360043516612774565b34801561092057600080fd5b506105d5600435612808565b34801561093857600080fd5b506102d8612916565b34801561094d57600080fd5b506102d861291c565b34801561096257600080fd5b506105d5600160a060020a03600435166129c5565b34801561098357600080fd5b506102d8600435612a0b565b603354600090819060ff1615156001146109a857600080fd5b6109b3336004611bf5565b15156001146109c157600080fd5b6109cd33610400611bf5565b156109d757600080fd5b60345433600090815260316020526040902060030154106109f757600080fd5b610a00336110d0565b5060095460ff1615610a1157600080fd5b5060005b603654811015610ad75782603682815481101515610a2f57fe5b906000526020600020906003020160000154148015610a7457506036805482908110610a5757fe5b600091825260209091206002600390920201015460ff1615156001145b15610acf5733600090815260316020526040902054610a9290612a70565b6036805483908110610aa057fe5b600091825260208083206003928302016001018054949094019093556034543383526031909352604090912001555b600101610a15565b6034543360009081526031602052604090206003015414610af457fe5b6034543360008181526031602090815260409182902054825190815291518793927f6c7eb2743ec28489909706ea440d909129004996be657d36c6e9add778546abf92908290030190a4600191505b50919050565b600254600090600160a060020a0316331480610b6f5750600054600160a060020a031633145b1515610b7a57600080fd5b60335460ff161515600114610b8e57600080fd5b60095460ff1615610b9e57600080fd5b6033805460ff19169055610bb0611ade565b6035819055610bbe90612aa5565b6034546035546040517f857b4631e7ebad75ee4937e2bfb5ca31eb4a27140ec7aac09984ef81a326776b90600090a3506035545b90565b60095460ff1681565b6000805b603754811015610b435782603782815481101515610c1c57fe5b9060005260206000209060020201600001541415610c5b576037805482908110610c4257fe5b9060005260206000209060020201600101549150610b43565b600101610c02565b60008054600160a060020a03163314610c7b57600080fd5b610c858383612b20565b50600190505b92915050565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d175780601f10610cec57610100808354040283529160200191610d17565b820191906000526020600020905b815481529060010190602001808311610cfa57829003601f168201915b505050505081565b6002546000908190600160a060020a0316331480610d475750600054600160a060020a031633145b1515610d5257600080fd5b610d5d836004611bf5565b15610d6757600080fd5b506305f5e100610d778382612b20565b50610d83836004612cbe565b5060019392505050565b60095460009060ff1615610da057600080fd5b610dac33610400611bf5565b15610db657600080fd5b336000818152603260209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600254600090600160a060020a0316331480610e435750600054600160a060020a031633145b1515610e4e57600080fd5b610e5a82610400612cbe565b50600190505b919050565b6036805482908110610e7357fe5b600091825260209091206003909102018054600182015460029092015490925060ff1683565b60075481565b60055490565b602e5481565b6002546000908190600160a060020a0316331480610ed35750600054600160a060020a031633145b1515610ede57600080fd5b600854600110610eed57600080fd5b610ef8836004611bf5565b1515600114610f0657600080fd5b5063034fe1086064420601610d838382612b20565b6009546000908190819060ff1615610f3257600080fd5b610f3e85610400611bf5565b15610f4857600080fd5b610f51866110d0565b50610f5b856110d0565b505050600160a060020a03808516600081815260316020526040808220549387168252812054919052610f94828563ffffffff612d2516565b600160a060020a0387166000908152603160209081526040808320939093556032815282822033835290522054610fd1908563ffffffff612d2516565b600160a060020a038088166000908152603260209081526040808320338452825280832094909455918816815260319091522054611015908563ffffffff612d3a16565b600160a060020a038087166000908152603160205260408082209390935590881681522054611045908390612d4a565b151561105057600080fd5b600160a060020a038516600090815260316020526040902054611074908290612d4a565b151561107f57600080fd5b84600160a060020a031686600160a060020a0316600080516020612f8e833981519152866040518082815260200191505060405180910390a350600195945050505050565b602f5481565b60355481565b6009546000908190819081908190819081908190819060ff16156110f357600080fd5b6007546009101561110357600080fd5b61110f8a610400611bf5565b1561111957600080fd5b60016008541180156111475750600854600160a060020a038b16600090815260316020526040902060020154105b156111ff57600160a060020a038a166000908152603160205260408120546305f5e1008082049a508a02900311156111c257600160a060020a038a1660008181526031602090815260408083205481516305f5e1008e0290910381529051929392600080516020612f8e833981519152929181900390910190a35b600160a060020a038a1660009081526031602052604090206305f5e1008902808255600854600283015560075460019092019190915598506115ed565b600160a060020a038a1660009081526031602052604090206001015460075411156115ed5760016007541180156112395750600860075411155b156114cc57611246612e2b565b600160a060020a038b1660009081526031602052604090205481151561126857fe5b049650611273612e2b565b600160a060020a038b166000908152603160205260408120549189029750600a890696509087900394508411156112e657600160a060020a038a1660008181526031602090815260408083208a905580518881529051929392600080516020612f8e833981519152929181900390910190a35b6000925060008511801561130c57506000602460001987016009811061130857fe5b0154115b1561133057611319612e2b565b602460001987016009811061132a57fe5b01540292505b6000831180156113575750600a60075460080360010160088110151561135257fe5b015483105b1561145b57600160a060020a038a1660009081526031602052604090205461138e90611389818663ffffffff612d3a16565b612d4a565b50604080518481529051600160a060020a038c1691600091600080516020612f8e8339815191529181900360200190a3600160a060020a038a166000908152603160205260409020546113e7908463ffffffff612d3a16565b600160a060020a038b1660009081526031602052604090205560075461142b908490600a90600160089182030190811061141d57fe5b01549063ffffffff612d2516565b600a60075460080360010160088110151561144257fe5b0155600554611457908463ffffffff612d3a16565b6005555b600754600160a060020a038b1660009081526031602052604090206001810191909155600854600290910154146114ac57600854600160a060020a038b166000908152603160205260409020600201555b600160a060020a038a1660009081526031602052604090205498506115ed565b600754600914156115ed57600160a060020a038a166000908152603160205260409020546114f990611ab4565b600160a060020a038b16600090815260316020526040902054909250611525908363ffffffff612d2516565b9050600081111561145b57600160a060020a038a166000908152603160205260409020546115539083612d4a565b50600160a060020a038a16600081815260316020908152604080832086905580518581529051929392600080516020612f8e833981519152929181900390910190a3600754600160a060020a038b1660009081526031602052604090206001810191909155600854600290910154146114ac57600854600160a060020a038b16600090815260316020526040902060028101919091555498505b5050505050505050919050565b60065481565b60335460ff1681565b60008054600160a060020a0316331461162157600080fd5b60095460ff161561163157600080fd5b506009805460ff1916600190811790915590565b600254600090600160a060020a031633148061166b5750600054600160a060020a031633145b151561167657600080fd5b50600254600160a060020a031690565b60305481565b600254600160a060020a03163314806116af5750600054600160a060020a031633145b15156116ba57600080fd5b60335460ff1615156001146116ce57600080fd5b60408051606081018252918252600060208301818152600192840183815260368054948501815590925292517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b860039093029283015591517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b982015590517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81ba909101805460ff1916911515919091179055565b600254600090600160a060020a03163314806117a75750600054600160a060020a031633145b15156117b257600080fd5b60095460ff16156117c257600080fd5b6007546009146117d157600080fd5b6008546064116117e057600080fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915261182f90600a906008612e8e565b5060016007819055600880549091019055600654600a0a620186a002602e819055602d5461185c91612d25565b602d556008546040517fc1d4931e10652da8ab23604510531810d2eebfcd33a81ba4946d702ce8057b6490600090a250600190565b600054600160a060020a031633146118a857600080fd5b600254604051600160a060020a038084169216907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f90600090a36002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a031660009081526031602052604090205490565b600154600160a060020a0316331461194357600080fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b6002546000908190600160a060020a03163314806119dc5750600054600160a060020a031633145b15156119e757600080fd5b6119f2836002611bf5565b156119fc57600080fd5b5063034fe1086064420601611a118382612b20565b50610d83836002612cbe565b600054600160a060020a031681565b60008054600160a060020a03163314611a4457600080fd5b602f54821115611a5357600080fd5b600160a060020a038316600090815260316020526040902054611a7c908363ffffffff612d3a16565b600160a060020a038416600090815260316020526040902055602f54611aa8908363ffffffff612d2516565b602f5550600192915050565b6000611abe612e2b565b611ac6612e2b565b83811515611ad057fe5b040292915050565b60085481565b600080805b603654811015611b955781603682815481101515611afd57fe5b906000526020600020906003020160010154118015611b4257506036805482908110611b2557fe5b600091825260209091206002600390920201015460ff1615156001145b15611b8d576036805482908110611b5557fe5b9060005260206000209060030201600101549150603681815481101515611b7857fe5b90600052602060002090600302016000015492505b600101611ae3565b505090565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d175780601f10610cec57610100808354040283529160200191610d17565b600160a060020a0382166000908152603160205260408120600401548190831615611c235750600180611c28565b506000805b509392505050565b602d5481565b60008054600160a060020a03163314611c4e57600080fd5b603054821115611c5d57600080fd5b600160a060020a038316600090815260316020526040902054611c86908363ffffffff612d3a16565b600160a060020a038416600090815260316020526040902055603054611cb2908363ffffffff612d2516565b60305550600192915050565b6037805482908110611ccc57fe5b60009182526020909120600290910201805460019091015490915082565b600254600090600160a060020a0316331480611d105750600054600160a060020a031633145b1515611d1b57600080fd5b610e5a82610400612e48565b6009546000908190819060ff1615611d3e57600080fd5b600160a060020a0385161515611d5357600080fd5b611d5f85610400611bf5565b15611d6957600080fd5b611d7284611ab4565b935060008411611d8157600080fd5b611d8a856110d0565b50611d94336110d0565b50503360008181526031602052604080822054600160a060020a038816835290822054929091529150611dcd828563ffffffff612d2516565b3360009081526031602052604080822092909255600160a060020a03871681522054611dff908563ffffffff612d3a16565b600160a060020a038616600090815260316020526040808220929092553381522054611e2c908390612d4a565b1515611e3757600080fd5b600160a060020a038516600090815260316020526040902054611e5b908290612d4a565b1515611e6657600080fd5b604080518581529051600160a060020a038716913391600080516020612f8e8339815191529181900360200190a3506001949350505050565b600254600090600160a060020a0316331480611ec55750600054600160a060020a031633145b1515611ed057600080fd5b610c8b82610400611bf5565b600080600080611eea612ed1565b611ef2612ed1565b611efa612ed1565b600254600090819081908190600160a060020a0316331480611f265750600054600160a060020a031633145b1515611f3157600080fd5b60095460ff1615611f4157600080fd5b600754600911611f5057600080fd5b611fe26012600160075403600981101515611f6757fe5b0154600a600754600803600881101515611f7d57fe5b015402611fd66012600754600981101515611f9457fe5b0154603054811515611fa257fe5b06611fd66012600754600981101515611fb757fe5b0154602f54811515611fc557fe5b60055491900663ffffffff612d2516565b9063ffffffff612d2516565b60055560075460129060098110611ff557fe5b01546007546012906009811061200757fe5b015460055481151561201557fe5b04026005556007546012906009811061202a57fe5b01546007546012906009811061203c57fe5b0154602f5481151561204a57fe5b0402602f556007546012906009811061205f57fe5b01546007546012906009811061207157fe5b015460305481151561207f57fe5b0402603055600754600110156120f457600a6007546008036001016008811015156120a657fe5b015499506120d460126002600754036009811015156120c157fe5b0154602e54908c0263ffffffff612d3a16565b602e55600754600090600a9060016008918203019081106120f157fe5b01555b600860075410156123cf57600a60075460080360088110151561211357fe5b01549850600a60075460070360088110151561212b57fe5b015497508715156121cc576040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915261218d906024906009612ef1565b5060078054600101908190556040517f3c328c5db5168fd903728d91e7aede758575035688b483d468dedb7a95aeb5af90600090a26007549a50612431565b61012060405190810160405280600181526020016002815260200160038152602001600481526020016005815260200160068152602001600781526020016008815260200160098152509650610120604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525095506101206040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250945060009350600092505b600983101561231f57878784600981106122cf57fe5b6020020151633b9aca00028115156122e357fe5b048684600981106122f057fe5b602002015260058310156123145785836009811061230a57fe5b6020020151840193505b6001909201916122b9565b600591505b6009821015612378576064601b836009811061233c57fe5b0154850281151561234957fe5b0486836009811061235657fe5b60200201510185836009811061236857fe5b6020020152600190910190612324565b5060055b60098110156123ca57633b9aca00600a8a87846009811061239957fe5b6020020151028115156123a857fe5b048115156123b257fe5b04602482600981106123c057fe5b015560010161237c565b6123f7565b600754600814156123f757600a54602e546123ee916298968002612d3a565b602e556000600a555b60078054600101908190556040517f3c328c5db5168fd903728d91e7aede758575035688b483d468dedb7a95aeb5af90600090a26007549a505b5050505050505050505090565b60008054600160a060020a0316331461245657600080fd5b60095460ff16151560011461246a57600080fd5b506009805460ff19169055600190565b60095460009060ff161561248d57600080fd5b61249933610400611bf5565b156124a357600080fd5b336000818152603260209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a36040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b8381101561259457818101518382015260200161257c565b50505050905090810190601f1680156125c15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156125e357600080fd5b505af11580156125f7573d6000803e3d6000fd5b506001979650505050505050565b6000805b603654811015610b43578260368281548110151561262357fe5b906000526020600020906003020160000154141561266757603680548290811061264957fe5b600091825260209091206002600390920201015460ff169150610b43565b600101612609565b600154600160a060020a031681565b60008054600160a060020a0316331461269657600080fd5b60095460ff16156126a657600080fd5b60008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810186905290519186169263a9059cbb926044808401936020939083900390910190829087803b15801561271657600080fd5b505af115801561272a573d6000803e3d6000fd5b505050506040513d602081101561274057600080fd5b50519392505050565b600160a060020a03918216600090815260326020908152604080832093909416825291909152205490565b600060016008541180156127a45750600854600160a060020a038316600090815260316020526040902060020154105b156127d657600160a060020a0382166000908152603160205260409020546305f5e10090046305f5e100029050610e60565b6127de612e2b565b6127e6612e2b565b600160a060020a038416600090815260316020526040902054811515611ad057fe5b600254600090600160a060020a031633148061282e5750600054600160a060020a031633145b151561283957600080fd5b5060005b603654811015612912578160368281548110151561285757fe5b906000526020600020906003020160000154141561290a57603680548290811061287d57fe5b600091825260209091206002600390920201015460ff161515600114156128d65760006036828154811015156128af57fe5b60009182526020909120600390910201600201805460ff191691151591909117905561290a565b60016036828154811015156128e757fe5b60009182526020909120600390910201600201805460ff19169115159190911790555b60010161283d565b5050565b60345481565b600254600090600160a060020a03163314806129425750600054600160a060020a031633145b151561294d57600080fd5b60335460ff161561295d57600080fd5b60095460ff161561296d57600080fd5b6034805460019081019091556033805460ff1916909117905561299260366000612f23565b6034546040517f3e5d02a8c38e7fed83b839f2339ef5d1a13c79b9cb4142f9216e27a0f32bc39990600090a25060345490565b600054600160a060020a031633146129dc57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805b603654811015610b435782603682815481101515612a2957fe5b9060005260206000209060030201600001541415612a68576036805482908110612a4f57fe5b9060005260206000209060030201600101549150610b43565b600101612a0f565b80600260018201045b81811015610b43578091506002818285811515612a9257fe5b0401811515612a9d57fe5b049050612a79565b604080518082019091526034548152602081019182526037805460018101825560009190915290517f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae60029092029182015590517f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31af90910155565b600080808080600160a060020a0387161515612b3b57600080fd5b612b43612e2b565b861015612b4f57600080fd5b612b5b87610400611bf5565b15612b6557600080fd5b60095460ff1615612b7557600080fd5b612b7e876110d0565b50612b8886611ab4565b600160a060020a038816600090815260316020526040902054909450612bb890611389818763ffffffff612d3a16565b50606484046010029250600a84046006029150612be582612bd98686612d3a565b9063ffffffff612d3a16565b602e54909150612bfb908263ffffffff612d2516565b602e55602f54612c11908463ffffffff612d3a16565b602f55603054612c27908363ffffffff612d3a16565b603055600160a060020a038716600090815260316020526040902054612c53908563ffffffff612d3a16565b600160a060020a038816600090815260316020526040902055600554612c7f908263ffffffff612d3a16565b600555604080518581529051600160a060020a03891691600091600080516020612f8e8339815191529181900360200190a35060019695505050505050565b6000612cca8383611bf5565b15612cd457600080fd5b600160a060020a038316600090815260316020526040902060040154612d00908363ffffffff612d3a16565b600160a060020a03841660009081526031602052604090206004015550600192915050565b600082821115612d3457600080fd5b50900390565b81810182811015610c8b57600080fd5b600080600080600080600960075410156125f757879450869350600192505b6000841180612d785750600085115b8015612d8657506006548311155b156125f7575050600754600a80850494818504949082900692919006908310612e2057818110612df157612dd7828203600a8560065403600881101515612dc957fe5b01549063ffffffff612d3a16565b600a8460065403600881101515612dea57fe5b0155612e20565b612e0a818303600a856006540360088110151561141d57fe5b600a8460065403600881101515612e1d57fe5b01555b826001019250612d69565b60006012600160075403600981101515612e4157fe5b0154905090565b6000612e548383611bf5565b1515600114612e6257600080fd5b600160a060020a038316600090815260316020526040902060040154612d00908363ffffffff612d2516565b8260088101928215612ec1579160200282015b82811115612ec1578251829060ff16905591602001919060010190612ea1565b50612ecd929150612f47565b5090565b610120604051908101604052806009906020820280388339509192915050565b8260098101928215612ec15791602002820182811115612ec1578251829060ff16905591602001919060010190612ea1565b5080546000825560030290600052602060002090810190612f449190612f61565b50565b610bf291905b80821115612ecd5760008155600101612f4d565b610bf291905b80821115612ecd576000808255600182015560028101805460ff19169055600301612f675600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820970f285f47a7ec334ce0db67908f35b10c08d1a6b90ab675f5bbae3c63b6151e0029

Deployed Bytecode

0x6080604052600436106102925763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630121b93f811461029757806304cd1819146102c3578063054f7d9c146102ea57806305e49d1d146102ff57806306ec62721461031757806306fdde031461033b57806307ba217c146103c5578063095ea7b3146103e65780630fccf22e1461040a578063107046bd1461042b578063146ca5311461046357806318160ddd146104785780631a7b11f51461048d5780631d2af28b146104a257806323b872dd146104c3578063251b5f8e146104ed57806325a52d9d146105025780632ce3d44014610517578063313ce56714610538578063408e27271461054d57806341c41923146105625780634f0e86561461057757806351651003146105a857806357183698146105bd5780636584ceb0146105d7578063704b6c02146105ec57806370a082311461060d57806379ba50971461062e5780638c90b2ea146106435780638da5cb5b146106645780638f46b586146106795780638f87932c1461069d578063900cf0cf146106b5578063946bf4d7146106ca57806395d89b41146106df5780639cba60a7146106f4578063a17b229d14610718578063a24e20de1461072d578063a2fb117514610751578063a7e1b51614610782578063a9059cbb146107a3578063b3adc716146107c7578063c091e45a146107e8578063c450a25f146107fd578063cae9ca5114610812578063cf504d481461087b578063d4ee1d9014610893578063dc39d06d146108a8578063dd62ed3e146108cc578063de78ed85146108f3578063dfa0ca1414610914578063e4eacd701461092c578063eb4439fb14610941578063f2fde38b14610956578063f37e741e14610977575b600080fd5b3480156102a357600080fd5b506102af60043561098f565b604080519115158252519081900360200190f35b3480156102cf57600080fd5b506102d8610b49565b60408051918252519081900360200190f35b3480156102f657600080fd5b506102af610bf5565b34801561030b57600080fd5b506102d8600435610bfe565b34801561032357600080fd5b506102af600160a060020a0360043516602435610c63565b34801561034757600080fd5b50610350610c91565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038a578181015183820152602001610372565b50505050905090810190601f1680156103b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d157600080fd5b506102af600160a060020a0360043516610d1f565b3480156103f257600080fd5b506102af600160a060020a0360043516602435610d8d565b34801561041657600080fd5b506102af600160a060020a0360043516610e1d565b34801561043757600080fd5b50610443600435610e65565b604080519384526020840192909252151582820152519081900360600190f35b34801561046f57600080fd5b506102d8610e99565b34801561048457600080fd5b506102d8610e9f565b34801561049957600080fd5b506102d8610ea5565b3480156104ae57600080fd5b506102af600160a060020a0360043516610eab565b3480156104cf57600080fd5b506102af600160a060020a0360043581169060243516604435610f1b565b3480156104f957600080fd5b506102d86110c4565b34801561050e57600080fd5b506102d86110ca565b34801561052357600080fd5b506102d8600160a060020a03600435166110d0565b34801561054457600080fd5b506102d86115fa565b34801561055957600080fd5b506102af611600565b34801561056e57600080fd5b506102af611609565b34801561058357600080fd5b5061058c611645565b60408051600160a060020a039092168252519081900360200190f35b3480156105b457600080fd5b506102d8611686565b3480156105c957600080fd5b506105d560043561168c565b005b3480156105e357600080fd5b506102af611781565b3480156105f857600080fd5b506105d5600160a060020a0360043516611891565b34801561061957600080fd5b506102d8600160a060020a0360043516611911565b34801561063a57600080fd5b506105d561192c565b34801561064f57600080fd5b506102af600160a060020a03600435166119b4565b34801561067057600080fd5b5061058c611a1d565b34801561068557600080fd5b506102af600160a060020a0360043516602435611a2c565b3480156106a957600080fd5b506102d8600435611ab4565b3480156106c157600080fd5b506102d8611ad8565b3480156106d657600080fd5b506102d8611ade565b3480156106eb57600080fd5b50610350611b9a565b34801561070057600080fd5b506102af600160a060020a0360043516602435611bf5565b34801561072457600080fd5b506102d8611c30565b34801561073957600080fd5b506102af600160a060020a0360043516602435611c36565b34801561075d57600080fd5b50610769600435611cbe565b6040805192835260208301919091528051918290030190f35b34801561078e57600080fd5b506102af600160a060020a0360043516611cea565b3480156107af57600080fd5b506102af600160a060020a0360043516602435611d27565b3480156107d357600080fd5b506102af600160a060020a0360043516611e9f565b3480156107f457600080fd5b506102d8611edc565b34801561080957600080fd5b506102af61243e565b34801561081e57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526102af948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061247a9650505050505050565b34801561088757600080fd5b506102af600435612605565b34801561089f57600080fd5b5061058c61266f565b3480156108b457600080fd5b506102af600160a060020a036004351660243561267e565b3480156108d857600080fd5b506102d8600160a060020a0360043581169060243516612749565b3480156108ff57600080fd5b506102d8600160a060020a0360043516612774565b34801561092057600080fd5b506105d5600435612808565b34801561093857600080fd5b506102d8612916565b34801561094d57600080fd5b506102d861291c565b34801561096257600080fd5b506105d5600160a060020a03600435166129c5565b34801561098357600080fd5b506102d8600435612a0b565b603354600090819060ff1615156001146109a857600080fd5b6109b3336004611bf5565b15156001146109c157600080fd5b6109cd33610400611bf5565b156109d757600080fd5b60345433600090815260316020526040902060030154106109f757600080fd5b610a00336110d0565b5060095460ff1615610a1157600080fd5b5060005b603654811015610ad75782603682815481101515610a2f57fe5b906000526020600020906003020160000154148015610a7457506036805482908110610a5757fe5b600091825260209091206002600390920201015460ff1615156001145b15610acf5733600090815260316020526040902054610a9290612a70565b6036805483908110610aa057fe5b600091825260208083206003928302016001018054949094019093556034543383526031909352604090912001555b600101610a15565b6034543360009081526031602052604090206003015414610af457fe5b6034543360008181526031602090815260409182902054825190815291518793927f6c7eb2743ec28489909706ea440d909129004996be657d36c6e9add778546abf92908290030190a4600191505b50919050565b600254600090600160a060020a0316331480610b6f5750600054600160a060020a031633145b1515610b7a57600080fd5b60335460ff161515600114610b8e57600080fd5b60095460ff1615610b9e57600080fd5b6033805460ff19169055610bb0611ade565b6035819055610bbe90612aa5565b6034546035546040517f857b4631e7ebad75ee4937e2bfb5ca31eb4a27140ec7aac09984ef81a326776b90600090a3506035545b90565b60095460ff1681565b6000805b603754811015610b435782603782815481101515610c1c57fe5b9060005260206000209060020201600001541415610c5b576037805482908110610c4257fe5b9060005260206000209060020201600101549150610b43565b600101610c02565b60008054600160a060020a03163314610c7b57600080fd5b610c858383612b20565b50600190505b92915050565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d175780601f10610cec57610100808354040283529160200191610d17565b820191906000526020600020905b815481529060010190602001808311610cfa57829003601f168201915b505050505081565b6002546000908190600160a060020a0316331480610d475750600054600160a060020a031633145b1515610d5257600080fd5b610d5d836004611bf5565b15610d6757600080fd5b506305f5e100610d778382612b20565b50610d83836004612cbe565b5060019392505050565b60095460009060ff1615610da057600080fd5b610dac33610400611bf5565b15610db657600080fd5b336000818152603260209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600254600090600160a060020a0316331480610e435750600054600160a060020a031633145b1515610e4e57600080fd5b610e5a82610400612cbe565b50600190505b919050565b6036805482908110610e7357fe5b600091825260209091206003909102018054600182015460029092015490925060ff1683565b60075481565b60055490565b602e5481565b6002546000908190600160a060020a0316331480610ed35750600054600160a060020a031633145b1515610ede57600080fd5b600854600110610eed57600080fd5b610ef8836004611bf5565b1515600114610f0657600080fd5b5063034fe1086064420601610d838382612b20565b6009546000908190819060ff1615610f3257600080fd5b610f3e85610400611bf5565b15610f4857600080fd5b610f51866110d0565b50610f5b856110d0565b505050600160a060020a03808516600081815260316020526040808220549387168252812054919052610f94828563ffffffff612d2516565b600160a060020a0387166000908152603160209081526040808320939093556032815282822033835290522054610fd1908563ffffffff612d2516565b600160a060020a038088166000908152603260209081526040808320338452825280832094909455918816815260319091522054611015908563ffffffff612d3a16565b600160a060020a038087166000908152603160205260408082209390935590881681522054611045908390612d4a565b151561105057600080fd5b600160a060020a038516600090815260316020526040902054611074908290612d4a565b151561107f57600080fd5b84600160a060020a031686600160a060020a0316600080516020612f8e833981519152866040518082815260200191505060405180910390a350600195945050505050565b602f5481565b60355481565b6009546000908190819081908190819081908190819060ff16156110f357600080fd5b6007546009101561110357600080fd5b61110f8a610400611bf5565b1561111957600080fd5b60016008541180156111475750600854600160a060020a038b16600090815260316020526040902060020154105b156111ff57600160a060020a038a166000908152603160205260408120546305f5e1008082049a508a02900311156111c257600160a060020a038a1660008181526031602090815260408083205481516305f5e1008e0290910381529051929392600080516020612f8e833981519152929181900390910190a35b600160a060020a038a1660009081526031602052604090206305f5e1008902808255600854600283015560075460019092019190915598506115ed565b600160a060020a038a1660009081526031602052604090206001015460075411156115ed5760016007541180156112395750600860075411155b156114cc57611246612e2b565b600160a060020a038b1660009081526031602052604090205481151561126857fe5b049650611273612e2b565b600160a060020a038b166000908152603160205260408120549189029750600a890696509087900394508411156112e657600160a060020a038a1660008181526031602090815260408083208a905580518881529051929392600080516020612f8e833981519152929181900390910190a35b6000925060008511801561130c57506000602460001987016009811061130857fe5b0154115b1561133057611319612e2b565b602460001987016009811061132a57fe5b01540292505b6000831180156113575750600a60075460080360010160088110151561135257fe5b015483105b1561145b57600160a060020a038a1660009081526031602052604090205461138e90611389818663ffffffff612d3a16565b612d4a565b50604080518481529051600160a060020a038c1691600091600080516020612f8e8339815191529181900360200190a3600160a060020a038a166000908152603160205260409020546113e7908463ffffffff612d3a16565b600160a060020a038b1660009081526031602052604090205560075461142b908490600a90600160089182030190811061141d57fe5b01549063ffffffff612d2516565b600a60075460080360010160088110151561144257fe5b0155600554611457908463ffffffff612d3a16565b6005555b600754600160a060020a038b1660009081526031602052604090206001810191909155600854600290910154146114ac57600854600160a060020a038b166000908152603160205260409020600201555b600160a060020a038a1660009081526031602052604090205498506115ed565b600754600914156115ed57600160a060020a038a166000908152603160205260409020546114f990611ab4565b600160a060020a038b16600090815260316020526040902054909250611525908363ffffffff612d2516565b9050600081111561145b57600160a060020a038a166000908152603160205260409020546115539083612d4a565b50600160a060020a038a16600081815260316020908152604080832086905580518581529051929392600080516020612f8e833981519152929181900390910190a3600754600160a060020a038b1660009081526031602052604090206001810191909155600854600290910154146114ac57600854600160a060020a038b16600090815260316020526040902060028101919091555498505b5050505050505050919050565b60065481565b60335460ff1681565b60008054600160a060020a0316331461162157600080fd5b60095460ff161561163157600080fd5b506009805460ff1916600190811790915590565b600254600090600160a060020a031633148061166b5750600054600160a060020a031633145b151561167657600080fd5b50600254600160a060020a031690565b60305481565b600254600160a060020a03163314806116af5750600054600160a060020a031633145b15156116ba57600080fd5b60335460ff1615156001146116ce57600080fd5b60408051606081018252918252600060208301818152600192840183815260368054948501815590925292517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b860039093029283015591517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b982015590517f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81ba909101805460ff1916911515919091179055565b600254600090600160a060020a03163314806117a75750600054600160a060020a031633145b15156117b257600080fd5b60095460ff16156117c257600080fd5b6007546009146117d157600080fd5b6008546064116117e057600080fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915261182f90600a906008612e8e565b5060016007819055600880549091019055600654600a0a620186a002602e819055602d5461185c91612d25565b602d556008546040517fc1d4931e10652da8ab23604510531810d2eebfcd33a81ba4946d702ce8057b6490600090a250600190565b600054600160a060020a031633146118a857600080fd5b600254604051600160a060020a038084169216907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f90600090a36002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a031660009081526031602052604090205490565b600154600160a060020a0316331461194357600080fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b6002546000908190600160a060020a03163314806119dc5750600054600160a060020a031633145b15156119e757600080fd5b6119f2836002611bf5565b156119fc57600080fd5b5063034fe1086064420601611a118382612b20565b50610d83836002612cbe565b600054600160a060020a031681565b60008054600160a060020a03163314611a4457600080fd5b602f54821115611a5357600080fd5b600160a060020a038316600090815260316020526040902054611a7c908363ffffffff612d3a16565b600160a060020a038416600090815260316020526040902055602f54611aa8908363ffffffff612d2516565b602f5550600192915050565b6000611abe612e2b565b611ac6612e2b565b83811515611ad057fe5b040292915050565b60085481565b600080805b603654811015611b955781603682815481101515611afd57fe5b906000526020600020906003020160010154118015611b4257506036805482908110611b2557fe5b600091825260209091206002600390920201015460ff1615156001145b15611b8d576036805482908110611b5557fe5b9060005260206000209060030201600101549150603681815481101515611b7857fe5b90600052602060002090600302016000015492505b600101611ae3565b505090565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d175780601f10610cec57610100808354040283529160200191610d17565b600160a060020a0382166000908152603160205260408120600401548190831615611c235750600180611c28565b506000805b509392505050565b602d5481565b60008054600160a060020a03163314611c4e57600080fd5b603054821115611c5d57600080fd5b600160a060020a038316600090815260316020526040902054611c86908363ffffffff612d3a16565b600160a060020a038416600090815260316020526040902055603054611cb2908363ffffffff612d2516565b60305550600192915050565b6037805482908110611ccc57fe5b60009182526020909120600290910201805460019091015490915082565b600254600090600160a060020a0316331480611d105750600054600160a060020a031633145b1515611d1b57600080fd5b610e5a82610400612e48565b6009546000908190819060ff1615611d3e57600080fd5b600160a060020a0385161515611d5357600080fd5b611d5f85610400611bf5565b15611d6957600080fd5b611d7284611ab4565b935060008411611d8157600080fd5b611d8a856110d0565b50611d94336110d0565b50503360008181526031602052604080822054600160a060020a038816835290822054929091529150611dcd828563ffffffff612d2516565b3360009081526031602052604080822092909255600160a060020a03871681522054611dff908563ffffffff612d3a16565b600160a060020a038616600090815260316020526040808220929092553381522054611e2c908390612d4a565b1515611e3757600080fd5b600160a060020a038516600090815260316020526040902054611e5b908290612d4a565b1515611e6657600080fd5b604080518581529051600160a060020a038716913391600080516020612f8e8339815191529181900360200190a3506001949350505050565b600254600090600160a060020a0316331480611ec55750600054600160a060020a031633145b1515611ed057600080fd5b610c8b82610400611bf5565b600080600080611eea612ed1565b611ef2612ed1565b611efa612ed1565b600254600090819081908190600160a060020a0316331480611f265750600054600160a060020a031633145b1515611f3157600080fd5b60095460ff1615611f4157600080fd5b600754600911611f5057600080fd5b611fe26012600160075403600981101515611f6757fe5b0154600a600754600803600881101515611f7d57fe5b015402611fd66012600754600981101515611f9457fe5b0154603054811515611fa257fe5b06611fd66012600754600981101515611fb757fe5b0154602f54811515611fc557fe5b60055491900663ffffffff612d2516565b9063ffffffff612d2516565b60055560075460129060098110611ff557fe5b01546007546012906009811061200757fe5b015460055481151561201557fe5b04026005556007546012906009811061202a57fe5b01546007546012906009811061203c57fe5b0154602f5481151561204a57fe5b0402602f556007546012906009811061205f57fe5b01546007546012906009811061207157fe5b015460305481151561207f57fe5b0402603055600754600110156120f457600a6007546008036001016008811015156120a657fe5b015499506120d460126002600754036009811015156120c157fe5b0154602e54908c0263ffffffff612d3a16565b602e55600754600090600a9060016008918203019081106120f157fe5b01555b600860075410156123cf57600a60075460080360088110151561211357fe5b01549850600a60075460070360088110151561212b57fe5b015497508715156121cc576040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915261218d906024906009612ef1565b5060078054600101908190556040517f3c328c5db5168fd903728d91e7aede758575035688b483d468dedb7a95aeb5af90600090a26007549a50612431565b61012060405190810160405280600181526020016002815260200160038152602001600481526020016005815260200160068152602001600781526020016008815260200160098152509650610120604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525095506101206040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250945060009350600092505b600983101561231f57878784600981106122cf57fe5b6020020151633b9aca00028115156122e357fe5b048684600981106122f057fe5b602002015260058310156123145785836009811061230a57fe5b6020020151840193505b6001909201916122b9565b600591505b6009821015612378576064601b836009811061233c57fe5b0154850281151561234957fe5b0486836009811061235657fe5b60200201510185836009811061236857fe5b6020020152600190910190612324565b5060055b60098110156123ca57633b9aca00600a8a87846009811061239957fe5b6020020151028115156123a857fe5b048115156123b257fe5b04602482600981106123c057fe5b015560010161237c565b6123f7565b600754600814156123f757600a54602e546123ee916298968002612d3a565b602e556000600a555b60078054600101908190556040517f3c328c5db5168fd903728d91e7aede758575035688b483d468dedb7a95aeb5af90600090a26007549a505b5050505050505050505090565b60008054600160a060020a0316331461245657600080fd5b60095460ff16151560011461246a57600080fd5b506009805460ff19169055600190565b60095460009060ff161561248d57600080fd5b61249933610400611bf5565b156124a357600080fd5b336000818152603260209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a36040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b8381101561259457818101518382015260200161257c565b50505050905090810190601f1680156125c15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156125e357600080fd5b505af11580156125f7573d6000803e3d6000fd5b506001979650505050505050565b6000805b603654811015610b43578260368281548110151561262357fe5b906000526020600020906003020160000154141561266757603680548290811061264957fe5b600091825260209091206002600390920201015460ff169150610b43565b600101612609565b600154600160a060020a031681565b60008054600160a060020a0316331461269657600080fd5b60095460ff16156126a657600080fd5b60008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810186905290519186169263a9059cbb926044808401936020939083900390910190829087803b15801561271657600080fd5b505af115801561272a573d6000803e3d6000fd5b505050506040513d602081101561274057600080fd5b50519392505050565b600160a060020a03918216600090815260326020908152604080832093909416825291909152205490565b600060016008541180156127a45750600854600160a060020a038316600090815260316020526040902060020154105b156127d657600160a060020a0382166000908152603160205260409020546305f5e10090046305f5e100029050610e60565b6127de612e2b565b6127e6612e2b565b600160a060020a038416600090815260316020526040902054811515611ad057fe5b600254600090600160a060020a031633148061282e5750600054600160a060020a031633145b151561283957600080fd5b5060005b603654811015612912578160368281548110151561285757fe5b906000526020600020906003020160000154141561290a57603680548290811061287d57fe5b600091825260209091206002600390920201015460ff161515600114156128d65760006036828154811015156128af57fe5b60009182526020909120600390910201600201805460ff191691151591909117905561290a565b60016036828154811015156128e757fe5b60009182526020909120600390910201600201805460ff19169115159190911790555b60010161283d565b5050565b60345481565b600254600090600160a060020a03163314806129425750600054600160a060020a031633145b151561294d57600080fd5b60335460ff161561295d57600080fd5b60095460ff161561296d57600080fd5b6034805460019081019091556033805460ff1916909117905561299260366000612f23565b6034546040517f3e5d02a8c38e7fed83b839f2339ef5d1a13c79b9cb4142f9216e27a0f32bc39990600090a25060345490565b600054600160a060020a031633146129dc57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805b603654811015610b435782603682815481101515612a2957fe5b9060005260206000209060030201600001541415612a68576036805482908110612a4f57fe5b9060005260206000209060030201600101549150610b43565b600101612a0f565b80600260018201045b81811015610b43578091506002818285811515612a9257fe5b0401811515612a9d57fe5b049050612a79565b604080518082019091526034548152602081019182526037805460018101825560009190915290517f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae60029092029182015590517f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31af90910155565b600080808080600160a060020a0387161515612b3b57600080fd5b612b43612e2b565b861015612b4f57600080fd5b612b5b87610400611bf5565b15612b6557600080fd5b60095460ff1615612b7557600080fd5b612b7e876110d0565b50612b8886611ab4565b600160a060020a038816600090815260316020526040902054909450612bb890611389818763ffffffff612d3a16565b50606484046010029250600a84046006029150612be582612bd98686612d3a565b9063ffffffff612d3a16565b602e54909150612bfb908263ffffffff612d2516565b602e55602f54612c11908463ffffffff612d3a16565b602f55603054612c27908363ffffffff612d3a16565b603055600160a060020a038716600090815260316020526040902054612c53908563ffffffff612d3a16565b600160a060020a038816600090815260316020526040902055600554612c7f908263ffffffff612d3a16565b600555604080518581529051600160a060020a03891691600091600080516020612f8e8339815191529181900360200190a35060019695505050505050565b6000612cca8383611bf5565b15612cd457600080fd5b600160a060020a038316600090815260316020526040902060040154612d00908363ffffffff612d3a16565b600160a060020a03841660009081526031602052604090206004015550600192915050565b600082821115612d3457600080fd5b50900390565b81810182811015610c8b57600080fd5b600080600080600080600960075410156125f757879450869350600192505b6000841180612d785750600085115b8015612d8657506006548311155b156125f7575050600754600a80850494818504949082900692919006908310612e2057818110612df157612dd7828203600a8560065403600881101515612dc957fe5b01549063ffffffff612d3a16565b600a8460065403600881101515612dea57fe5b0155612e20565b612e0a818303600a856006540360088110151561141d57fe5b600a8460065403600881101515612e1d57fe5b01555b826001019250612d69565b60006012600160075403600981101515612e4157fe5b0154905090565b6000612e548383611bf5565b1515600114612e6257600080fd5b600160a060020a038316600090815260316020526040902060040154612d00908363ffffffff612d2516565b8260088101928215612ec1579160200282015b82811115612ec1578251829060ff16905591602001919060010190612ea1565b50612ecd929150612f47565b5090565b610120604051908101604052806009906020820280388339509192915050565b8260098101928215612ec15791602002820182811115612ec1578251829060ff16905591602001919060010190612ea1565b5080546000825560030290600052602060002090810190612f449190612f61565b50565b610bf291905b80821115612ecd5760008155600101612f4d565b610bf291905b80821115612ecd576000808255600182015560028101805460ff19169055600301612f675600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820970f285f47a7ec334ce0db67908f35b10c08d1a6b90ab675f5bbae3c63b6151e0029

Swarm Source

bzzr://970f285f47a7ec334ce0db67908f35b10c08d1a6b90ab675f5bbae3c63b6151e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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