ETH Price: $3,322.82 (-2.81%)

Token

OMNIS-BIT (OMNIS)
 

Overview

Max Total Supply

820,000,000 OMNIS

Holders

1,387 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
100 OMNIS

Value
$0.00
0xe540c45c504b348ad4d6eb9344e6cfa07c959be6
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
OMNIS

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-05-03
*/

pragma solidity 0.5.7;
/** 
 _____                   __  __      ______      ____                 ____       ______      ______   
/\  __`\     /'\_/`\    /\ \/\ \    /\__  _\    /\  _`\              /\  _`\    /\__  _\    /\__  _\  
\ \ \/\ \   /\      \   \ \ `\\ \   \/_/\ \/    \ \,\L\_\            \ \ \L\ \  \/_/\ \/    \/_/\ \/  
 \ \ \ \ \  \ \ \__\ \   \ \ , ` \     \ \ \     \/_\__ \    _______  \ \  _ <'    \ \ \       \ \ \  
  \ \ \_\ \  \ \ \_/\ \   \ \ \`\ \     \_\ \__    /\ \L\ \ /\______\  \ \ \L\ \    \_\ \__     \ \ \ 
   \ \_____\  \ \_\\ \_\   \ \_\ \_\    /\_____\   \ `\____\\/______/   \ \____/    /\_____\     \ \_\
    \/_____/   \/_/ \/_/    \/_/\/_/    \/_____/    \/_____/             \/___/     \/_____/      \/_/

    WEBSITE: www.omnis-bit.com


    This contract's staking features are based on the code provided at
    https://github.com/PoSToken/PoSToken

    SafeMath Library provided by OpenZeppelin
    https://github.com/OpenZeppelin/openzeppelin-solidity

    TODO: Third Party Audit
    
    Contract Developed and Designed by StartBlock for the Omnis-Bit Team
    Contract Writer: Fares A. Akel C.
    Service Provider Contact: [email protected]
 */

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error.
 */
library SafeMath {
    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

/**
 * @title Admined
 * @dev The Admined contract has an owner address, can set administrators,
 * and provides authorization control functions. These features can be used in other contracts
 * through interfacing, so external contracts can check main contract admin levels
 */
contract Admined {
    address public owner; //named owner for etherscan compatibility
    mapping(address => uint256) public level;

    /**
     * @dev The Admined constructor sets the original `owner` of the contract to the sender
     * account and assing high level privileges.
     */
    constructor() public {
        owner = msg.sender;
        level[owner] = 3;
        emit OwnerSet(owner);
        emit LevelSet(owner, level[owner]);
    }

    /**
     * @dev Throws if called by any account with lower level than minLvl.
     * @param _minLvl Minimum level to use the function
     */
    modifier onlyAdmin(uint256 _minLvl) {
        require(level[msg.sender] >= _minLvl, 'You do not have privileges for this transaction');
        _;
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) onlyAdmin(3) public {
        require(newOwner != address(0), 'Address cannot be zero');

        owner = newOwner;
        level[owner] = 3;

        emit OwnerSet(owner);
        emit LevelSet(owner, level[owner]);

        level[msg.sender] = 0;
        emit LevelSet(msg.sender, level[msg.sender]);
    }

    /**
     * @dev Allows the assignment of new privileges to a new address.
     * @param userAddress The address to transfer ownership to.
     * @param lvl Lvl to assign.
     */
    function setLevel(address userAddress, uint256 lvl) onlyAdmin(2) public {
        require(userAddress != address(0), 'Address cannot be zero');
        require(lvl < level[msg.sender], 'You do not have privileges for this level assignment');

        level[userAddress] = lvl;
        emit LevelSet(userAddress, level[userAddress]);
    }

    event LevelSet(address indexed user, uint256 lvl);
    event OwnerSet(address indexed user);

}

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
    uint256 public totalSupply;

    function balanceOf(address who) public view returns(uint256);

    function transfer(address to, uint256 value) public returns(bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
    function allowance(address owner, address spender) public view returns(uint256);

    function transferFrom(address from, address to, uint256 value) public returns(bool);

    function approve(address spender, uint256 value) public returns(bool);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract StakerToken {
    uint256 public stakeStartTime;
    uint256 public stakeMinAge;
    uint256 public stakeMaxAge;

    function claimStake() public returns(bool);

    function coinAge() public view returns(uint256);

    function annualInterest() public view returns(uint256);
}

contract OMNIS is ERC20, StakerToken, Admined {
    using SafeMath
    for uint256;
    ///////////////////////////////////////////////////////////////////
    //TOKEN RELATED
    string public name = "OMNIS-BIT";
    string public symbol = "OMNIS";
    string public version = "v3";
    uint8 public decimals = 18;

    uint public totalSupply;
    uint public maxTotalSupply;
    uint public totalInitialSupply;
    bool public globalBalancesFreeze; //In case of a Migration to let make a SnapShot

    mapping(address => uint256) balances;
    mapping(address => mapping(address => uint256)) allowed;
    //TOKEN SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //AIRDROP RELATED
    struct Airdrop {
        uint value;
        bool claimed;
    }

    address public airdropWallet;

    mapping(address => Airdrop) public airdrops; //One airdrop at a time allowed
    //AIRDROP SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //ESCROW RELATED
    enum PaymentStatus {
        Requested,
        Rejected,
        Pending,
        Completed,
        Refunded
    }

    struct Payment {
        address provider;
        address customer;
        uint value;
        string comment;
        PaymentStatus status;
        bool refundApproved;
    }

    uint escrowCounter;
    uint public escrowFeePercent = 5; //initially set to 0.5%
    bool public escrowEnabled = true;

    /**
     * @dev Throws if escrow is disabled.
     */
    modifier escrowIsEnabled() {
        require(escrowEnabled == true, 'Escrow is Disabled');
        _;
    }

    mapping(uint => Payment) public payments;
    address public collectionAddress;
    //ESCROW SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //STAKING RELATED
    struct transferInStruct {
        uint128 amount;
        uint64 time;
    }

    uint public chainStartTime;
    uint public chainStartBlockNumber;
    uint public stakeStartTime;
    uint public stakeMinAge = 3 days;
    uint public stakeMaxAge = 90 days;

    mapping(address => bool) public userFreeze;

    mapping(address => transferInStruct[]) transferIns;

    modifier canPoSclaimStake() {
        require(totalSupply < maxTotalSupply, 'Max supply reached');
        _;
    }
    //STAKING SECTION END
    ///////////////////////////////////////////////////////////////////

    /**
     * @dev Throws if any frozen is applied.
     * @param _holderWallet Address of the actual token holder
     */
    modifier notFrozen(address _holderWallet) {
        require(globalBalancesFreeze == false, 'Balances are globally frozen');
        require(userFreeze[_holderWallet] == false, 'Balance frozen by the user');
        _;
    }

    ///////////////////////////////////////////////////////////////////
    //EVENTS
    event ClaimStake(address indexed _address, uint _reward);
    event NewCollectionWallet(address newWallet);

    event ClaimDrop(address indexed user, uint value);
    event NewAirdropWallet(address newWallet);

    event GlobalFreeze(bool status);

    event EscrowLock(bool status);
    event NewFeeRate(uint newFee);
    event PaymentCreation(
        uint indexed orderId,
        address indexed provider,
        address indexed customer,
        uint value,
        string description
    );
    event PaymentUpdate(
        uint indexed orderId,
        address indexed provider,
        address indexed customer,
        uint value,
        PaymentStatus status
    );
    event PaymentRefundApprove(
        uint indexed orderId,
        address indexed provider,
        address indexed customer,
        bool status
    );
    ///////////////////////////////////////////////////////////////////

    constructor() public {

        maxTotalSupply = 1000000000 * 10 ** 18; //MAX SUPPLY EVER
        totalInitialSupply = 820000000 * 10 ** 18; //INITIAL SUPPLY
        chainStartTime = now; //Deployment Time
        chainStartBlockNumber = block.number; //Deployment Block
        totalSupply = totalInitialSupply;
        collectionAddress = msg.sender; //Initially fees collection wallet to creator
        airdropWallet = msg.sender; //Initially airdrop wallet to creator
        balances[msg.sender] = totalInitialSupply;

        emit Transfer(address(0), msg.sender, totalInitialSupply);
    }

    /**
     * @dev setCurrentEscrowFee
     * @dev Allow an admin from level 3 to set the Escrow Service Fee
     * @param _newFee The new fee rate
     */
    function setCurrentEscrowFee(uint _newFee) onlyAdmin(3) public {
        require(_newFee < 1000, 'Fee is higher than 100%');
        escrowFeePercent = _newFee;
        emit NewFeeRate(escrowFeePercent);
    }

    /**
     * @dev setCollectionWallet
     * @dev Allow an admin from level 3 to set the Escrow Service Fee Wallet
     * @param _newWallet The new fee wallet
     */
    function setCollectionWallet(address _newWallet) onlyAdmin(3) public {
        require(_newWallet != address(0), 'Address cannot be zero');
        collectionAddress = _newWallet;
        emit NewCollectionWallet(collectionAddress);
    }

    /**
     * @dev setAirDropWallet
     * @dev Allow an admin from level 3 to set the Airdrop Service Wallet
     * @param _newWallet The new Airdrop wallet
     */
    function setAirDropWallet(address _newWallet) onlyAdmin(3) public {
        require(_newWallet != address(0), 'Address cannot be zero');
        airdropWallet = _newWallet;
        emit NewAirdropWallet(airdropWallet);
    }

    ///////////////////////////////////////////////////////////////////
    //ERC20 FUNCTIONS
    function transfer(address _to, uint256 _value) public notFrozen(msg.sender) returns(bool) {
        require(_to != address(0), 'Address cannot be zero');

        if (msg.sender == _to) return claimStake();

        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);

        //STAKING RELATED//////////////////////////////////////////////
        if (transferIns[msg.sender].length > 0) delete transferIns[msg.sender];
        uint64 _now = uint64(now);
        transferIns[msg.sender].push(transferInStruct(uint128(balances[msg.sender]), _now));
        transferIns[_to].push(transferInStruct(uint128(_value), _now));
        ///////////////////////////////////////////////////////////////

        return true;
    }

    function balanceOf(address _owner) public view returns(uint256 balance) {
        return balances[_owner];
    }

    function transferFrom(address _from, address _to, uint256 _value) notFrozen(_from) public returns(bool) {
        require(_to != address(0), 'Address cannot be zero');

        uint256 _allowance = allowed[_from][msg.sender];
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][msg.sender] = _allowance.sub(_value);
        emit Transfer(_from, _to, _value);

        //STAKING RELATED//////////////////////////////////////////////
        if (transferIns[_from].length > 0) delete transferIns[_from];
        uint64 _now = uint64(now);
        transferIns[_from].push(transferInStruct(uint128(balances[_from]), _now));
        transferIns[_to].push(transferInStruct(uint128(_value), _now));
        ///////////////////////////////////////////////////////////////

        return true;
    }

    function approve(address _spender, uint256 _value) public returns(bool) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);

        return true;
    }

    function allowance(address _owner, address _spender) public view returns(uint256 remaining) {
        return allowed[_owner][_spender];
    }
    //ERC20 SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //STAKING FUNCTIONS
    /**
     * @dev claimStake
     * @dev Allow any user to claim stake earned
     */
    function claimStake() canPoSclaimStake public returns(bool) {
        if (balances[msg.sender] <= 0) return false;
        if (transferIns[msg.sender].length <= 0) return false;

        uint reward = getProofOfStakeReward(msg.sender);
        if (reward <= 0) return false;
        totalSupply = totalSupply.add(reward);
        balances[msg.sender] = balances[msg.sender].add(reward);

        //STAKING RELATED//////////////////////////////////////////////
        delete transferIns[msg.sender];
        transferIns[msg.sender].push(transferInStruct(uint128(balances[msg.sender]), uint64(now)));
        ///////////////////////////////////////////////////////////////

        emit Transfer(address(0), msg.sender, reward);
        emit ClaimStake(msg.sender, reward);
        return true;
    }

    /**
     * @dev getBlockNumber
     * @dev Returns the block number since deployment
     */
    function getBlockNumber() public view returns(uint blockNumber) {
        blockNumber = block.number.sub(chainStartBlockNumber);
    }

    /**
     * @dev coinAge
     * @dev Returns the coinage for the callers account
     */
    function coinAge() public view returns(uint myCoinAge) {
        myCoinAge = getCoinAge(msg.sender, now);
    }

    /**
     * @dev annualInterest
     * @dev Returns the current interest rate
     */
    function annualInterest() public view returns(uint interest) {
        uint _now = now;
        // If all periods are finished but not max supply is reached,
        // a default small interest rate is left until max supply
        // get reached
        interest = (1 * 1e15); //fallback interest
        if ((_now.sub(stakeStartTime)).div(365 days) == 0) {
            interest = (106 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 1) {
            interest = (49 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 2) {
            interest = (24 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 3) {
            interest = (13 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 4) {
            interest = (11 * 1e15);
        }
    }

    /**
     * @dev getProofOfStakeReward
     * @dev Returns the current stake of a wallet
     * @param _address is the user wallet
     */
    function getProofOfStakeReward(address _address) public view returns(uint) {
        require((now >= stakeStartTime) && (stakeStartTime > 0), 'Staking is not yet enabled');

        uint _now = now;
        uint _coinAge = getCoinAge(_address, _now);
        if (_coinAge <= 0) return 0;

        // If all periods are finished but not max supply is reached,
        // a default small interest rate is left until max supply
        // get reached
        uint interest = (1 * 1e15); //fallback interest

        if ((_now.sub(stakeStartTime)).div(365 days) == 0) {
            interest = (106 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 1) {
            interest = (49 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 2) {
            interest = (24 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 3) {
            interest = (13 * 1e15);
        } else if ((_now.sub(stakeStartTime)).div(365 days) == 4) {
            interest = (11 * 1e1);
        }

        return (_coinAge * interest).div(365 * (10 ** uint256(decimals)));
    }

    function getCoinAge(address _address, uint _now) internal view returns(uint _coinAge) {
        if (transferIns[_address].length <= 0) return 0;

        for (uint i = 0; i < transferIns[_address].length; i++) {
            if (_now < uint(transferIns[_address][i].time).add(stakeMinAge)) continue;

            uint nCoinSeconds = _now.sub(uint(transferIns[_address][i].time));
            if (nCoinSeconds > stakeMaxAge) nCoinSeconds = stakeMaxAge;

            _coinAge = _coinAge.add(uint(transferIns[_address][i].amount) * nCoinSeconds.div(1 days));
        }
    }


    /**
     * @dev setStakeStartTime
     * @dev Used by the owner to define the staking period start
     * @param timestamp time in UNIX format
     */
    function setStakeStartTime(uint timestamp) onlyAdmin(3) public {
        require((stakeStartTime <= 0) && (timestamp >= chainStartTime), 'Wrong time set');
        stakeStartTime = timestamp;
    }
    //STACKING SECTION END
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //UTILITY FUNCTIONS
    /**
     * @dev batchTransfer
     * @dev Used by the owner to deliver several transfers at the same time (Airdrop)
     * @param _recipients Array of addresses
     * @param _values Array of values
     */
    function batchTransfer(
        address[] calldata _recipients,
        uint[] calldata _values
    ) onlyAdmin(1)
    external returns(bool) {
        //Check data sizes
        require(_recipients.length > 0 && _recipients.length == _values.length, 'Addresses and Values have wrong sizes');
        //Total value calc
        uint total = 0;
        for (uint i = 0; i < _values.length; i++) {
            total = total.add(_values[i]);
        }
        //Sender must hold funds
        require(total <= balances[msg.sender], 'Not enough funds for the transaction');
        //Make transfers
        uint64 _now = uint64(now);
        for (uint j = 0; j < _recipients.length; j++) {
            balances[_recipients[j]] = balances[_recipients[j]].add(_values[j]);
            //STAKING RELATED//////////////////////////////////////////////
            transferIns[_recipients[j]].push(transferInStruct(uint128(_values[j]), _now));
            ///////////////////////////////////////////////////////////////
            emit Transfer(msg.sender, _recipients[j], _values[j]);
        }
        //Reduce all balance on a single transaction from sender
        balances[msg.sender] = balances[msg.sender].sub(total);
        if (transferIns[msg.sender].length > 0) delete transferIns[msg.sender];
        if (balances[msg.sender] > 0) transferIns[msg.sender].push(transferInStruct(uint128(balances[msg.sender]), _now));

        return true;
    }

    /**
     * @dev dropSet
     * @dev Used by the owner to set several self-claiming drops at the same time (Airdrop)
     * @param _recipients Array of addresses
     * @param _values Array of values1
     */
    function dropSet(
        address[] calldata _recipients,
        uint[] calldata _values
    ) onlyAdmin(1)
    external returns(bool) {
        //Check data sizes 
        require(_recipients.length > 0 && _recipients.length == _values.length, 'Addresses and Values have wrong sizes');

        for (uint j = 0; j < _recipients.length; j++) {
            //Store user drop info
            airdrops[_recipients[j]].value = _values[j];
            airdrops[_recipients[j]].claimed = false;
        }

        return true;
    }

    /**
     * @dev claimAirdrop
     * @dev Allow any user with a drop set to claim it
     */
    function claimAirdrop() external returns(bool) {
        //Check if not claimed
        require(airdrops[msg.sender].claimed == false, 'Airdrop already claimed');
        require(airdrops[msg.sender].value != 0, 'No airdrop value to claim');

        //Original value
        uint _value = airdrops[msg.sender].value;

        //Set as Claimed
        airdrops[msg.sender].claimed = true;
        //Clear value
        airdrops[msg.sender].value = 0;

        //Tokens are on airdropWallet
        address _from = airdropWallet;
        //Tokens goes to costumer
        address _to = msg.sender;
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);

        emit Transfer(_from, _to, _value);
        emit ClaimDrop(_to, _value);

        //STAKING RELATED//////////////////////////////////////////////
        if (transferIns[_from].length > 0) delete transferIns[_from];
        uint64 _now = uint64(now);
        transferIns[_from].push(transferInStruct(uint128(balances[_from]), _now));
        transferIns[_to].push(transferInStruct(uint128(_value), _now));
        ///////////////////////////////////////////////////////////////

        return true;

    }

    /**
     * @dev userFreezeBalance
     * @dev Allow a user to safe Lock/Unlock it's balance
     * @param _lock Lock Status to set
     */
    function userFreezeBalance(bool _lock) public returns(bool) {
        userFreeze[msg.sender] = _lock;
    }

    /**
     * @dev ownerFreeze
     * @dev Allow the owner to globally freeze tokens for a migration/snapshot
     * @param _lock Lock Status to set
     */
    function ownerFreeze(bool _lock) onlyAdmin(3) public returns(bool) {
        globalBalancesFreeze = _lock;
        emit GlobalFreeze(globalBalancesFreeze);
    }

    //UTILITY SECTION ENDS
    ///////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////
    //ESCROW FUNCTIONS
    /**
     * @dev createPaymentRequest
     * @dev Allow an user to request start a Escrow process
     * @param _customer Counterpart that will receive payment on success
     * @param _value Amount to be escrowed
     * @param _description Description
     */
    function createPaymentRequest(
        address _customer,
        uint _value,
        string calldata _description
    )
    escrowIsEnabled()
    notFrozen(msg.sender)
    external returns(uint) {

        require(_customer != address(0), 'Address cannot be zero');
        require(_value > 0, 'Value cannot be zero');

        payments[escrowCounter] = Payment(msg.sender, _customer, _value, _description, PaymentStatus.Requested, false);
        emit PaymentCreation(escrowCounter, msg.sender, _customer, _value, _description);

        escrowCounter = escrowCounter.add(1);
        return escrowCounter - 1;

    }

    /**
     * @dev answerPaymentRequest
     * @dev Allow a user to answer to a Escrow process
     * @param _orderId the request ticket number
     * @param _answer request answer
     */
    function answerPaymentRequest(uint _orderId, bool _answer) external returns(bool) {
        //Get Payment Handler
        Payment storage payment = payments[_orderId];

        require(payment.status == PaymentStatus.Requested, 'Ticket wrong status, expected "Requested"');
        require(payment.customer == msg.sender, 'You are not allowed to manage this ticket');

        if (_answer == true) {

            address _to = address(this);

            balances[payment.provider] = balances[payment.provider].sub(payment.value);
            balances[_to] = balances[_to].add(payment.value);
            emit Transfer(payment.provider, _to, payment.value);

            //STAKING RELATED//////////////////////////////////////////////
            if (transferIns[payment.provider].length > 0) delete transferIns[payment.provider];
            uint64 _now = uint64(now);
            transferIns[payment.provider].push(transferInStruct(uint128(balances[payment.provider]), _now));
            ///////////////////////////////////////////////////////////////

            payments[_orderId].status = PaymentStatus.Pending;

            emit PaymentUpdate(_orderId, payment.provider, payment.customer, payment.value, PaymentStatus.Pending);

        } else {

            payments[_orderId].status = PaymentStatus.Rejected;

            emit PaymentUpdate(_orderId, payment.provider, payment.customer, payment.value, PaymentStatus.Rejected);

        }

        return true;
    }


    /**
     * @dev release
     * @dev Allow a provider or admin user to release a payment
     * @param _orderId Ticket number of the escrow service
     */
    function release(uint _orderId) external returns(bool) {
        //Get Payment Handler
        Payment storage payment = payments[_orderId];
        //Only if pending
        require(payment.status == PaymentStatus.Pending, 'Ticket wrong status, expected "Pending"');
        //Only owner or token provider
        require(level[msg.sender] >= 2 || msg.sender == payment.provider, 'You are not allowed to manage this ticket');
        //Tokens are on contract
        address _from = address(this);
        //Tokens goes to costumer
        address _to = payment.customer;
        //Original value
        uint _value = payment.value;
        //Fee calculation
        uint _fee = _value.mul(escrowFeePercent).div(1000);
        //Value less fees
        _value = _value.sub(_fee);
        //Costumer transfer
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(_from, _to, _value);
        //collectionAddress fee recolection
        balances[_from] = balances[_from].sub(_fee);
        balances[collectionAddress] = balances[collectionAddress].add(_fee);
        emit Transfer(_from, collectionAddress, _fee);
        //Delete any staking from contract address itself
        if (transferIns[_from].length > 0) delete transferIns[_from];
        //Store staking information for receivers
        uint64 _now = uint64(now);
        //Costumer
        transferIns[_to].push(transferInStruct(uint128(_value), _now));
        //collectionAddress
        transferIns[collectionAddress].push(transferInStruct(uint128(_fee), _now));
        //Payment Escrow Completed
        payment.status = PaymentStatus.Completed;
        //Emit Event
        emit PaymentUpdate(_orderId, payment.provider, payment.customer, payment.value, payment.status);

        return true;
    }

    /**
     * @dev refund
     * @dev Allow a user to refund a payment
     * @param _orderId Ticket number of the escrow service
     */
    function refund(uint _orderId) external returns(bool) {
        //Get Payment Handler
        Payment storage payment = payments[_orderId];
        //Only if pending
        require(payment.status == PaymentStatus.Pending, 'Ticket wrong status, expected "Pending"');
        //Only if refund was approved
        require(payment.refundApproved, 'Refund has not been approved yet');
        //Tokens are on contract
        address _from = address(this);
        //Tokens go back to provider
        address _to = payment.provider;
        //Original value
        uint _value = payment.value;
        //Provider transfer
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(_from, _to, _value);
        //Delete any staking from contract address itself
        if (transferIns[_from].length > 0) delete transferIns[_from];
        //Store staking information for receivers
        uint64 _now = uint64(now);
        transferIns[_to].push(transferInStruct(uint128(_value), _now));
        //Payment Escrow Refunded
        payment.status = PaymentStatus.Refunded;
        //Emit Event
        emit PaymentUpdate(_orderId, payment.provider, payment.customer, payment.value, payment.status);

        return true;
    }

    /**
     * @dev approveRefund
     * @dev Allow a user to approve a refund
     * @param _orderId Ticket number of the escrow service
     */
    function approveRefund(uint _orderId) external returns(bool) {
        //Get Payment Handler
        Payment storage payment = payments[_orderId];
        //Only if pending
        require(payment.status == PaymentStatus.Pending, 'Ticket wrong status, expected "Pending"');
        //Only owner or costumer
        require(level[msg.sender] >= 2 || msg.sender == payment.customer, 'You are not allowed to manage this ticket');
        //Approve Refund
        payment.refundApproved = true;

        emit PaymentRefundApprove(_orderId, payment.provider, payment.customer, payment.refundApproved);

        return true;
    }

    /**
     * @dev escrowLockSet
     * @dev Allow the owner to lock the escrow feature
     * @param _lock lock indicator
     */
    function escrowLockSet(bool _lock) external onlyAdmin(3) returns(bool) {        
        escrowEnabled = _lock;
        emit EscrowLock(escrowEnabled);
        return true;
    }

    //ESCROW SECTION END
    ///////////////////////////////////////////////////////////////////
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getProofOfStakeReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newFee","type":"uint256"}],"name":"setCurrentEscrowFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newWallet","type":"address"}],"name":"setAirDropWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"coinAge","outputs":[{"name":"myCoinAge","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_orderId","type":"uint256"}],"name":"refund","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"escrowFeePercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lock","type":"bool"}],"name":"ownerFreeze","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_orderId","type":"uint256"}],"name":"approveRefund","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_orderId","type":"uint256"}],"name":"release","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_lock","type":"bool"}],"name":"escrowLockSet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBlockNumber","outputs":[{"name":"blockNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userFreeze","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chainStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimAirdrop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"collectionAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"userAddress","type":"address"},{"name":"lvl","type":"uint256"}],"name":"setLevel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakeStartTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orderId","type":"uint256"},{"name":"_answer","type":"bool"}],"name":"answerPaymentRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"payments","outputs":[{"name":"provider","type":"address"},{"name":"customer","type":"address"},{"name":"value","type":"uint256"},{"name":"comment","type":"string"},{"name":"status","type":"uint8"},{"name":"refundApproved","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipients","type":"address[]"},{"name":"_values","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipients","type":"address[]"},{"name":"_values","type":"uint256[]"}],"name":"dropSet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"airdrops","outputs":[{"name":"value","type":"uint256"},{"name":"claimed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"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":"totalInitialSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airdropWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_lock","type":"bool"}],"name":"userFreezeBalance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"annualInterest","outputs":[{"name":"interest","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakeMinAge","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"setStakeStartTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"chainStartBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"globalBalancesFreeze","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"level","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"escrowEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakeMaxAge","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimStake","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_customer","type":"address"},{"name":"_value","type":"uint256"},{"name":"_description","type":"string"}],"name":"createPaymentRequest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newWallet","type":"address"}],"name":"setCollectionWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_reward","type":"uint256"}],"name":"ClaimStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newWallet","type":"address"}],"name":"NewCollectionWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ClaimDrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newWallet","type":"address"}],"name":"NewAirdropWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"status","type":"bool"}],"name":"GlobalFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"status","type":"bool"}],"name":"EscrowLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newFee","type":"uint256"}],"name":"NewFeeRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"orderId","type":"uint256"},{"indexed":true,"name":"provider","type":"address"},{"indexed":true,"name":"customer","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"PaymentCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"orderId","type":"uint256"},{"indexed":true,"name":"provider","type":"address"},{"indexed":true,"name":"customer","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"status","type":"uint8"}],"name":"PaymentUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"orderId","type":"uint256"},{"indexed":true,"name":"provider","type":"address"},{"indexed":true,"name":"customer","type":"address"},{"indexed":false,"name":"status","type":"bool"}],"name":"PaymentRefundApprove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"lvl","type":"uint256"}],"name":"LevelSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

60c0604052600960808190527f4f4d4e49532d424954000000000000000000000000000000000000000000000060a090815262000040916006919062000258565b506040805180820190915260058082527f4f4d4e49530000000000000000000000000000000000000000000000000000006020909201918252620000879160079162000258565b506040805180820190915260028082527f76330000000000000000000000000000000000000000000000000000000000006020909201918252620000ce9160089162000258565b506009805460ff1990811660121790915560056013556014805490911660011790556203f480601a556276a700601b553480156200010b57600080fd5b50600480546001600160a01b03191633178082556001600160a01b03908116600090815260056020526040808220600390559254925192909116917f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe29190a26004546001600160a01b031660008181526005602090815260409182902054825190815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a26b033b2e3c9fd0803ce8000000600b556b02a649c112686927b4000000600c8190554260175543601855600a81905560168054336001600160a01b0319918216811790925560108054909116821790556000818152600e60209081526040808320859055805194855251929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3620002fd565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200029b57805160ff1916838001178555620002cb565b82800160010185558215620002cb579182015b82811115620002cb578251825591602001919060010190620002ae565b50620002d9929150620002dd565b5090565b620002fa91905b80821115620002d95760008155600101620002e4565b90565b613d70806200030d6000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c80637419f19011610182578063b2552fc4116100e9578063db15c93c116100a2578063eb3211731161007c578063eb32117314610989578063ec8c1b5414610991578063ee78b83314610a14578063f2fde38b14610a3a576102bb565b8063db15c93c1461094b578063dd62ed3e14610953578063e1c3bac614610981576102bb565b8063b2552fc4146108e8578063cbd8877e146108f0578063cc1b63d5146108f8578063cd474b0414610915578063d05c92691461091d578063d41b6db614610925576102bb565b80638da5cb5b1161013b5780638da5cb5b1461087d57806395d89b41146108855780639fd4da401461088d578063a14779c914610895578063a9059cbb1461089d578063ae710934146108c9576102bb565b80637419f190146105bf57806381deb802146105c757806387d81789146105ec57806388d695b2146106c25780638bfa9207146107805780638c86f0a71461083e576102bb565b806331622a641161022657806354fd4d50116101df57806354fd4d50146105315780635b054f9b146105395780635b88349d146105415780636aa003711461054957806370a082311461056d578063722dcd8f14610593576102bb565b806331622a641461048b578063348a71a6146104aa57806337bdc99b146104c7578063427bad25146104e457806342cbb15c146105035780634e1c3fc51461050b576102bb565b80631e1b13c0116102785780631e1b13c01461040257806323b872dd1461040a578063278ecde1146104405780632ab4d0521461045d5780632c3ce5fa14610465578063313ce5671461046d576102bb565b806306fdde03146102c0578063095ea7b31461033d5780630d6dcab31461037d5780631623ef5f146103b5578063176ede63146103d457806318160ddd146103fa575b600080fd5b6102c8610a60565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103025781810151838201526020016102ea565b50505050905090810190601f16801561032f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103696004803603604081101561035357600080fd5b506001600160a01b038135169060200135610aee565b604080519115158252519081900360200190f35b6103a36004803603602081101561039357600080fd5b50356001600160a01b0316610b55565b60408051918252519081900360200190f35b6103d2600480360360208110156103cb57600080fd5b5035610d0e565b005b6103d2600480360360208110156103ea57600080fd5b50356001600160a01b0316610df7565b6103a3610ef2565b6103a3610ef8565b6103696004803603606081101561042057600080fd5b506001600160a01b03813581169160208101359091169060400135610f09565b6103696004803603602081101561045657600080fd5b503561122f565b6103a36114e0565b6103a36114e6565b6104756114ec565b6040805160ff9092168252519081900360200190f35b610369600480360360208110156104a157600080fd5b503515156114f5565b610369600480360360208110156104c057600080fd5b5035611598565b610369600480360360208110156104dd57600080fd5b50356116d5565b610369600480360360208110156104fa57600080fd5b50351515611ac6565b6103a3611b6c565b6103696004803603602081101561052157600080fd5b50356001600160a01b0316611b83565b6102c8611b98565b6103a3611bf3565b610369611bf9565b610551611ef3565b604080516001600160a01b039092168252519081900360200190f35b6103a36004803603602081101561058357600080fd5b50356001600160a01b0316611f02565b6103d2600480360360408110156105a957600080fd5b506001600160a01b038135169060200135611f1d565b6103a3612062565b610369600480360360408110156105dd57600080fd5b50803590602001351515612068565b6106096004803603602081101561060257600080fd5b5035612382565b604080516001600160a01b03808916825287166020820152908101859052606081016080820184600481111561063b57fe5b60ff16815260200183151515158152602001828103825285818151815260200191508051906020019080838360005b8381101561068257818101518382015260200161066a565b50505050905090810190601f1680156106af5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b610369600480360360408110156106d857600080fd5b810190602081018135600160201b8111156106f257600080fd5b82018360208201111561070457600080fd5b803590602001918460208302840111600160201b8311171561072557600080fd5b919390929091602081019035600160201b81111561074257600080fd5b82018360208201111561075457600080fd5b803590602001918460208302840111600160201b8311171561077557600080fd5b509092509050612454565b6103696004803603604081101561079657600080fd5b810190602081018135600160201b8111156107b057600080fd5b8201836020820111156107c257600080fd5b803590602001918460208302840111600160201b831117156107e357600080fd5b919390929091602081019035600160201b81111561080057600080fd5b82018360208201111561081257600080fd5b803590602001918460208302840111600160201b8311171561083357600080fd5b509092509050612875565b6108646004803603602081101561085457600080fd5b50356001600160a01b03166129d6565b6040805192835290151560208301528051918290030190f35b6105516129f2565b6102c8612a01565b6103a3612a5c565b610551612a62565b610369600480360360408110156108b357600080fd5b506001600160a01b038135169060200135612a71565b610369600480360360208110156108df57600080fd5b50351515612d53565b6103a3612d75565b6103a3612e82565b6103d26004803603602081101561090e57600080fd5b5035612e88565b6103a3612f48565b610369612f4e565b6103a36004803603602081101561093b57600080fd5b50356001600160a01b0316612f57565b610369612f69565b6103a36004803603604081101561096957600080fd5b506001600160a01b0381358116916020013516612f72565b6103a3612f9d565b610369612fa3565b6103a3600480360360608110156109a757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156109d657600080fd5b8201836020820111156109e857600080fd5b803590602001918460018302840111600160201b83111715610a0957600080fd5b509092509050613199565b6103d260048036036020811015610a2a57600080fd5b50356001600160a01b0316613535565b6103d260048036036020811015610a5057600080fd5b50356001600160a01b0316613630565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ae65780601f10610abb57610100808354040283529160200191610ae6565b820191906000526020600020905b815481529060010190602001808311610ac957829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60006019544210158015610b6b57506000601954115b610bbf5760408051600160e51b62461bcd02815260206004820152601a60248201527f5374616b696e67206973206e6f742079657420656e61626c6564000000000000604482015290519081900360640190fd5b426000610bcc84836137cb565b905060008111610be157600092505050610d09565b60195466038d7ea4c6800090610c14906301e1338090610c0890869063ffffffff61393816565b9063ffffffff61399816565b610c27575067017896703a310000610ce9565b610c446301e13380610c086019548661393890919063ffffffff16565b60011415610c5a575066ae153d89fe8000610ce9565b610c776301e13380610c086019548661393890919063ffffffff16565b60021415610c8d5750665543df729c0000610ce9565b610caa6301e13380610c086019548661393890919063ffffffff16565b60031415610cc05750662e2f6e5e148000610ce9565b610cdd6301e13380610c086019548661393890919063ffffffff16565b60041415610ce95750606e5b600954610d03908284029060ff16600a0a61016d02613998565b93505050505b919050565b33600090815260056020526040902054600390811115610d6257604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6103e88210610dbb5760408051600160e51b62461bcd02815260206004820152601760248201527f46656520697320686967686572207468616e2031303025000000000000000000604482015290519081900360640190fd5b60138290556040805183815290517f788980e82f4651cc86d1cc00916685528f16c9abb21b2afe72325496c18c94ae9181900360200190a15050565b33600090815260056020526040902054600390811115610e4b57604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6001600160a01b038216610e975760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517ffc4d4f776e81f0d8fc28fe53de66ffc5e9c082fc6df83aa57699acf700d219e3916020908290030190a15050565b600a5481565b6000610f0433426137cb565b905090565b600d54600090849060ff1615610f695760408051600160e51b62461bcd02815260206004820152601c60248201527f42616c616e6365732061726520676c6f62616c6c792066726f7a656e00000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601c602052604090205460ff1615610fda5760408051600160e51b62461bcd02815260206004820152601a60248201527f42616c616e63652066726f7a656e206279207468652075736572000000000000604482015290519081900360640190fd5b6001600160a01b0384166110265760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b6001600160a01b0385166000818152600f60209081526040808320338452825280832054938352600e909152902054611065908563ffffffff61393816565b6001600160a01b038088166000908152600e6020526040808220939093559087168152205461109a908563ffffffff613a0516565b6001600160a01b0386166000908152600e60205260409020556110c3818563ffffffff61393816565b6001600160a01b038088166000818152600f602090815260408083203384528252918290209490945580518881529051928916939192600080516020613c2d833981519152929181900390910190a36001600160a01b0386166000908152601d602052604090205415611151576001600160a01b0386166000908152601d6020526040812061115191613ac5565b5050506001600160a01b039283166000908152601d6020818152604080842081518083018352600e8452828620546001600160801b03908116825267ffffffffffffffff428116838701818152855460018082018855968b52888b2095519501805491518416600160801b908102600160801b600160c01b03199787166001600160801b0319948516178816179091559b909c1689529686528488208551808701909652988216855284860196875288548085018a559888529490962092519290960180549451909316909602931691909516179091161790915590565b6000818152601560205260408120600260048083015460ff169081111561125257fe5b1461129157604051600160e51b62461bcd028152600401808060200182810382526027815260200180613d1e6027913960400191505060405180910390fd5b6004810154610100900460ff166112f25760408051600160e51b62461bcd02815260206004820181905260248201527f526566756e6420686173206e6f74206265656e20617070726f76656420796574604482015290519081900360640190fd5b80546002820154306000818152600e602052604090205490926001600160a01b03169190611326908263ffffffff61393816565b6001600160a01b038085166000908152600e6020526040808220939093559084168152205461135b908263ffffffff613a0516565b6001600160a01b038084166000818152600e60209081526040918290209490945580518581529051919392871692600080516020613c2d83398151915292918290030190a36001600160a01b0383166000908152601d6020526040902054156113df576001600160a01b0383166000908152601d602052604081206113df91613ac5565b6001600160a01b038281166000908152601d60209081526040808320815180830183526001600160801b03878116825267ffffffffffffffff42818116848801908152855460018082018855968a529888902094519490980180549851909216600160801b02600160801b600160c01b0319949093166001600160801b031990981697909717929092161790556004898101805460ff1916821790819055918a01548a5460028c015494518581529697918216969116948d94600080516020613c0d83398151915294909360ff909116929182019083908111156114bf57fe5b60ff1681526020019250505060405180910390a45060019695505050505050565b600b5481565b60135481565b60095460ff1681565b3360009081526005602052604081205460039081111561154957604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b600d805460ff191684151517908190556040805160ff90921615158252517fee2c272f4a21f65428f2e80154e4e11f33a295b066693d03ac5f8a0f723723c5916020908290030190a150919050565b6000818152601560205260408120600260048083015460ff16908111156115bb57fe5b146115fa57604051600160e51b62461bcd028152600401808060200182810382526027815260200180613d1e6027913960400191505060405180910390fd5b336000908152600560205260409020546002111580611625575060018101546001600160a01b031633145b61166357604051600160e51b62461bcd028152600401808060200182810382526029815260200180613cd56029913960400191505060405180910390fd5b60048101805461ff0019166101009081179182905560018301548354604080519390940460ff161515835292516001600160a01b03918216939091169186917fc65ac2becb2e9b9bcd53a2316ae3e6a55220f37ad81a9911cc7cb865fdc2cb4c9181900360200190a450600192915050565b6000818152601560205260408120600260048083015460ff16908111156116f857fe5b1461173757604051600160e51b62461bcd028152600401808060200182810382526027815260200180613d1e6027913960400191505060405180910390fd5b33600090815260056020526040902054600211158061175f575080546001600160a01b031633145b61179d57604051600160e51b62461bcd028152600401808060200182810382526029815260200180613cd56029913960400191505060405180910390fd5b6001810154600282015460135430926001600160a01b031691906000906117d3906103e890610c0890859063ffffffff613a6916565b90506117e5828263ffffffff61393816565b6001600160a01b0385166000908152600e6020526040902054909250611811908363ffffffff61393816565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611846908363ffffffff613a0516565b6001600160a01b038085166000818152600e60209081526040918290209490945580518681529051919392881692600080516020613c2d83398151915292918290030190a36001600160a01b0384166000908152600e60205260409020546118b4908263ffffffff61393816565b6001600160a01b038086166000908152600e602052604080822093909355601654909116815220546118ec908263ffffffff613a0516565b601680546001600160a01b039081166000908152600e6020908152604091829020949094559154825185815292519082169391881692600080516020613c2d83398151915292908290030190a36001600160a01b0384166000908152601d602052604090205415611978576001600160a01b0384166000908152601d6020526040812061197891613ac5565b6001600160a01b038381166000908152601d60208181526040808420815180830183526001600160801b03898116825267ffffffffffffffff42818116848801818152865460018082018955978c52898c2096519601805491518516600160801b908102600160801b600160c01b03199888166001600160801b0319948516178916179091556016548d168c52998952878b208851808a018a528e87168152808b019384528154808a018355918d529b8a90209b519b01805492519094169099029990931692909716919091179091169590951790945560048a81018054600360ff199091161790819055948b01548b5460028d015493518481529597918216969116948e94600080516020613c0d833981519152949360ff90931692908201908390811115611aa457fe5b60ff1681526020019250505060405180910390a4506001979650505050505050565b33600090815260056020526040812054600390811115611b1a57604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6014805460ff191684151517908190556040805160ff90921615158252517ff9ed57c1eaa5c6ec721dc109448dedf9d17229b260b0a448b8e2ae866947da66916020908290030190a150600192915050565b6000610f046018544361393890919063ffffffff16565b601c6020526000908152604090205460ff1681565b6008805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ae65780601f10610abb57610100808354040283529160200191610ae6565b60175481565b3360009081526011602052604081206001015460ff1615611c645760408051600160e51b62461bcd02815260206004820152601760248201527f41697264726f7020616c726561647920636c61696d6564000000000000000000604482015290519081900360640190fd5b33600090815260116020526040902054611cc85760408051600160e51b62461bcd02815260206004820152601960248201527f4e6f2061697264726f702076616c756520746f20636c61696d00000000000000604482015290519081900360640190fd5b33600081815260116020908152604080832080546001808301805460ff19169091179055908490556010546001600160a01b0316808552600e90935292205491929091611d1b908463ffffffff61393816565b6001600160a01b038084166000908152600e60205260408082209390935590831681522054611d50908463ffffffff613a0516565b6001600160a01b038083166000818152600e60209081526040918290209490945580518781529051919392861692600080516020613c2d83398151915292918290030190a36040805184815290516001600160a01b038316917f85a627733b5275fd9f62e7af950b23750d9d10f58202b4a491b4b21905076dfe919081900360200190a26001600160a01b0382166000908152601d602052604090205415611e13576001600160a01b0382166000908152601d60205260408120611e1391613ac5565b6001600160a01b039182166000908152601d6020818152604080842081518083018352600e8452828620546001600160801b03908116825267ffffffffffffffff428116838701818152855460018181018855968b52888b2095519501805491518416600160801b908102600160801b600160c01b03199787166001600160801b0319948516178816179091559a909b16895296865284882085518087019096529a821685528486019687528a548085018c559a885294909620925192909801805494519093169095029316919094161790931692909217905590505b90565b6016546001600160a01b031681565b6001600160a01b03166000908152600e602052604090205490565b33600090815260056020526040902054600290811115611f7157604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6001600160a01b038316611fbd5760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b33600090815260056020526040902054821061200d57604051600160e51b62461bcd028152600401808060200182810382526034815260200180613c4d6034913960400191505060405180910390fd5b6001600160a01b038316600081815260056020908152604091829020859055815185815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a2505050565b60195481565b60008281526015602052604081208160048083015460ff169081111561208a57fe5b146120c957604051600160e51b62461bcd028152600401808060200182810382526029815260200180613bc36029913960400191505060405180910390fd5b60018101546001600160a01b0316331461211757604051600160e51b62461bcd028152600401808060200182810382526029815260200180613cd56029913960400191505060405180910390fd5b6001831515141561230f57600281015481546001600160a01b03166000908152600e60205260409020543091612153919063ffffffff61393816565b82546001600160a01b039081166000908152600e6020526040808220939093556002850154918416815291909120546121919163ffffffff613a0516565b6001600160a01b038083166000818152600e60209081526040918290209490945585546002870154825190815291519294931692600080516020613c2d83398151915292918290030190a381546001600160a01b03166000908152601d60205260409020541561221d5781546001600160a01b03166000908152601d6020526040812061221d91613ac5565b81546001600160a01b039081166000908152601d6020908152604080832081518083018352600e8452828520546001600160801b03908116825267ffffffffffffffff42818116848801908152855460018082018855968a52888a209551950180549151909316600160801b02600160801b600160c01b0319959094166001600160801b031990911617939093169190911790558a855260158452938290206004018054600260ff1990911681179091559087015487548289015484519081529485019290925282519495908116949116928a92600080516020613c0d83398151915292918290030190a45050612378565b600084815260156020908152604091829020600401805460ff19166001908117909155838101548454600286015485519081529384019290925283516001600160a01b039182169491909216928892600080516020613c0d833981519152929181900390910190a45b5060019392505050565b601560209081526000918252604091829020805460018083015460028085015460038601805489516101009682161596909602600019011692909204601f81018890048802850188019098528784526001600160a01b0394851697949092169591949390918301828280156124385780601f1061240d57610100808354040283529160200191612438565b820191906000526020600020905b81548152906001019060200180831161241b57829003601f168201915b5050506004909301549192505060ff8082169161010090041686565b336000908152600560205260408120546001908111156124a857604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b84158015906124b657508483145b6124f457604051600160e51b62461bcd028152600401808060200182810382526025815260200180613cb06025913960400191505060405180910390fd5b6000805b8481101561252f5761252586868381811061250f57fe5b9050602002013583613a0590919063ffffffff16565b91506001016124f8565b50336000908152600e602052604090205481111561258157604051600160e51b62461bcd028152600401808060200182810382526024815260200180613b9f6024913960400191505060405180910390fd5b4260005b87811015612771576125f287878381811061259c57fe5b90506020020135600e60008c8c868181106125b357fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054613a0590919063ffffffff16565b600e60008b8b8581811061260257fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550601d60008a8a8481811061264657fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020604051806040016040528089898581811061268d57fe5b602090810292909201356001600160801b03908116845267ffffffffffffffff88811694840194909452855460018101875560009687529583902085519601805495909301516001600160801b0319909516951694909417600160801b600160c01b031916600160801b93909216929092021790555088888281811061270f57fe5b905060200201356001600160a01b03166001600160a01b0316336001600160a01b0316600080516020613c2d83398151915289898581811061274d57fe5b905060200201356040518082815260200191505060405180910390a3600101612585565b50336000908152600e6020526040902054612792908363ffffffff61393816565b336000908152600e6020908152604080832093909355601d90522054156127cb57336000908152601d602052604081206127cb91613ac5565b336000908152600e60205260409020541561286757336000908152601d6020908152604080832081518083018352600e8452918420546001600160801b03908116835267ffffffffffffffff80871684860190815283546001810185559387529490952092519290910180549351909416600160801b02600160801b600160c01b0319929091166001600160801b031990931692909217161790555b506001979650505050505050565b336000908152600560205260408120546001908111156128c957604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b84158015906128d757508483145b61291557604051600160e51b62461bcd028152600401808060200182810382526025815260200180613cb06025913960400191505060405180910390fd5b60005b858110156129c95784848281811061292c57fe5b905060200201356011600089898581811061294357fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206000018190555060006011600089898581811061298c57fe5b602090810292909201356001600160a01b03168352508101919091526040016000206001908101805460ff19169215159290921790915501612918565b5060019695505050505050565b6011602052600090815260409020805460019091015460ff1682565b6004546001600160a01b031681565b6007805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ae65780601f10610abb57610100808354040283529160200191610ae6565b600c5481565b6010546001600160a01b031681565b600d54600090339060ff1615612ad15760408051600160e51b62461bcd02815260206004820152601c60248201527f42616c616e6365732061726520676c6f62616c6c792066726f7a656e00000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601c602052604090205460ff1615612b425760408051600160e51b62461bcd02815260206004820152601a60248201527f42616c616e63652066726f7a656e206279207468652075736572000000000000604482015290519081900360640190fd5b6001600160a01b038416612b8e5760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b336001600160a01b0385161415612bae57612ba7612fa3565b9150612d4c565b336000908152600e6020526040902054612bce908463ffffffff61393816565b336000908152600e6020526040808220929092556001600160a01b03861681522054612c00908463ffffffff613a0516565b6001600160a01b0385166000818152600e6020908152604091829020939093558051868152905191923392600080516020613c2d8339815191529281900390910190a3336000908152601d602052604090205415612c7057336000908152601d60205260408120612c7091613ac5565b336000908152601d6020818152604080842081518083018352600e8452828620546001600160801b03908116825267ffffffffffffffff428116838701818152855460018181018855968b52888b2095519501805491518416600160801b908102600160801b600160c01b03199787166001600160801b0319948516178816179091556001600160a01b038f168b52988852868a2087518089019098528d8516885287890192835280548088018255908b5297909920955195909601805496519091169096029316939095169290921790931692909217905591505b5092915050565b336000908152601c60205260408120805460ff19169215159290921790915590565b60195466038d7ea4c68000904290612d9e906301e1338090610c0890849063ffffffff61393816565b612db25767017896703a3100009150612e7e565b612dcf6301e13380610c086019548461393890919063ffffffff16565b60011415612de65766ae153d89fe80009150612e7e565b612e036301e13380610c086019548461393890919063ffffffff16565b60021415612e1a57665543df729c00009150612e7e565b612e376301e13380610c086019548461393890919063ffffffff16565b60031415612e4e57662e2f6e5e1480009150612e7e565b612e6b6301e13380610c086019548461393890919063ffffffff16565b60041415612e7e57662714711487800091505b5090565b601a5481565b33600090815260056020526040902054600390811115612edc57604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b601954158015612eee57506017548210155b612f425760408051600160e51b62461bcd02815260206004820152600e60248201527f57726f6e672074696d6520736574000000000000000000000000000000000000604482015290519081900360640190fd5b50601955565b60185481565b600d5460ff1681565b60056020526000908152604090205481565b60145460ff1681565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b601b5481565b6000600b54600a54106130005760408051600160e51b62461bcd02815260206004820152601260248201527f4d617820737570706c7920726561636865640000000000000000000000000000604482015290519081900360640190fd5b336000908152600e602052604090205461301c57506000611ef0565b336000908152601d602052604090205461303857506000611ef0565b600061304333610b55565b905060008111613057576000915050611ef0565b600a5461306a908263ffffffff613a0516565b600a55336000908152600e602052604090205461308d908263ffffffff613a0516565b336000908152600e6020908152604080832093909355601d90529081206130b391613ac5565b336000818152601d6020908152604080832081518083018352600e8452828520546001600160801b03908116825267ffffffffffffffff428116838701908152845460018101865594885286882093519390940180549451909116600160801b02600160801b600160c01b0319939092166001600160801b0319909416939093179190911617905580518581529051600080516020613c2d833981519152929181900390910190a360408051828152905133917f157fac8fd4f41c05fc4eb4fc76efaff83b44dde65830c8474bbda846b6cebbcb919081900360200190a2600191505090565b60145460009060ff1615156001146131fb5760408051600160e51b62461bcd02815260206004820152601260248201527f457363726f772069732044697361626c65640000000000000000000000000000604482015290519081900360640190fd5b600d54339060ff16156132585760408051600160e51b62461bcd02815260206004820152601c60248201527f42616c616e6365732061726520676c6f62616c6c792066726f7a656e00000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601c602052604090205460ff16156132c95760408051600160e51b62461bcd02815260206004820152601a60248201527f42616c616e63652066726f7a656e206279207468652075736572000000000000604482015290519081900360640190fd5b6001600160a01b0386166133155760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b6000851161336d5760408051600160e51b62461bcd02815260206004820152601460248201527f56616c75652063616e6e6f74206265207a65726f000000000000000000000000604482015290519081900360640190fd5b6040518060c00160405280336001600160a01b03168152602001876001600160a01b0316815260200186815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020808301829052604092830182905260125482526015815290829020835181546001600160a01b039182166001600160a01b031991821617835585840151600184018054919093169116179055918301516002830155606083015180516134429260038501920190613ae6565b5060808201518160040160006101000a81548160ff0219169083600481111561346757fe5b021790555060a08201518160040160016101000a81548160ff021916908315150217905550905050856001600160a01b0316336001600160a01b03166012547fa6de25ec225b198e8219d2afbfa9b7a76fea3c9c02b1ed34880f4a338aa19d1388888860405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a460125461352290600163ffffffff613a0516565b6012819055600019019695505050505050565b3360009081526005602052604090205460039081111561358957604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6001600160a01b0382166135d55760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517fb408f9ca0555ebd07984cfda88b709f9637edae44f4be9b3e1a2c54e5ea10b5d916020908290030190a15050565b3360009081526005602052604090205460039081111561368457604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6001600160a01b0382166136d05760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03848116919091178083558116600090815260056020526040808220600390559254925192909116917f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe29190a26004546001600160a01b031660008181526005602090815260409182902054825190815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a23360008181526005602090815260408083208390558051928352517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a25050565b6001600160a01b0382166000908152601d60205260408120546137f057506000610b4f565b60005b6001600160a01b0384166000908152601d6020526040902054811015612d4c57601a546001600160a01b0385166000908152601d6020526040902080546138639291908490811061384057fe5b600091825260209091200154600160801b900467ffffffffffffffff1690613a05565b83101561386f57613930565b6001600160a01b0384166000908152601d6020526040812080546138bc91908490811061389857fe5b6000918252602090912001548590600160801b900467ffffffffffffffff16613938565b9050601b548111156138cd5750601b545b61392c6138e3826201518063ffffffff61399816565b6001600160a01b0387166000908152601d6020526040902080548590811061390757fe5b60009182526020909120015485916001600160801b039091160263ffffffff613a0516565b9250505b6001016137f3565b6000828211156139925760408051600160e51b62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008082116139f15760408051600160e51b62461bcd02815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b60008284816139fc57fe5b04949350505050565b600082820183811015613a625760408051600160e51b62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082613a7857506000610b4f565b82820282848281613a8557fe5b0414613a6257604051600160e51b62461bcd028152600401808060200182810382526021815260200180613bec6021913960400191505060405180910390fd5b5080546000825590600052602060002090810190613ae39190613b60565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b2757805160ff1916838001178555613b54565b82800160010185558215613b54579182015b82811115613b54578251825591602001919060010190613b39565b50612e7e929150613b84565b611ef091905b80821115612e7e5780546001600160c01b0319168155600101613b66565b611ef091905b80821115612e7e5760008155600101613b8a56fe4e6f7420656e6f7567682066756e647320666f7220746865207472616e73616374696f6e5469636b65742077726f6e67207374617475732c206578706563746564202252657175657374656422536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7756c968f05bc49a69dd99aa09b312b62b432db62df743893a786634f5b6a6c1fbddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973206c6576656c2061737369676e6d656e74596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973207472616e73616374696f6e41646472657373657320616e642056616c75657320686176652077726f6e672073697a6573596f7520617265206e6f7420616c6c6f77656420746f206d616e6167652074686973207469636b6574416464726573732063616e6e6f74206265207a65726f000000000000000000005469636b65742077726f6e67207374617475732c206578706563746564202250656e64696e6722a165627a7a72305820d3d1c51141e0ad854d0def3df48055d3117895e67b4d02b4538e00c62a19fee00029

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102bb5760003560e01c80637419f19011610182578063b2552fc4116100e9578063db15c93c116100a2578063eb3211731161007c578063eb32117314610989578063ec8c1b5414610991578063ee78b83314610a14578063f2fde38b14610a3a576102bb565b8063db15c93c1461094b578063dd62ed3e14610953578063e1c3bac614610981576102bb565b8063b2552fc4146108e8578063cbd8877e146108f0578063cc1b63d5146108f8578063cd474b0414610915578063d05c92691461091d578063d41b6db614610925576102bb565b80638da5cb5b1161013b5780638da5cb5b1461087d57806395d89b41146108855780639fd4da401461088d578063a14779c914610895578063a9059cbb1461089d578063ae710934146108c9576102bb565b80637419f190146105bf57806381deb802146105c757806387d81789146105ec57806388d695b2146106c25780638bfa9207146107805780638c86f0a71461083e576102bb565b806331622a641161022657806354fd4d50116101df57806354fd4d50146105315780635b054f9b146105395780635b88349d146105415780636aa003711461054957806370a082311461056d578063722dcd8f14610593576102bb565b806331622a641461048b578063348a71a6146104aa57806337bdc99b146104c7578063427bad25146104e457806342cbb15c146105035780634e1c3fc51461050b576102bb565b80631e1b13c0116102785780631e1b13c01461040257806323b872dd1461040a578063278ecde1146104405780632ab4d0521461045d5780632c3ce5fa14610465578063313ce5671461046d576102bb565b806306fdde03146102c0578063095ea7b31461033d5780630d6dcab31461037d5780631623ef5f146103b5578063176ede63146103d457806318160ddd146103fa575b600080fd5b6102c8610a60565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103025781810151838201526020016102ea565b50505050905090810190601f16801561032f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103696004803603604081101561035357600080fd5b506001600160a01b038135169060200135610aee565b604080519115158252519081900360200190f35b6103a36004803603602081101561039357600080fd5b50356001600160a01b0316610b55565b60408051918252519081900360200190f35b6103d2600480360360208110156103cb57600080fd5b5035610d0e565b005b6103d2600480360360208110156103ea57600080fd5b50356001600160a01b0316610df7565b6103a3610ef2565b6103a3610ef8565b6103696004803603606081101561042057600080fd5b506001600160a01b03813581169160208101359091169060400135610f09565b6103696004803603602081101561045657600080fd5b503561122f565b6103a36114e0565b6103a36114e6565b6104756114ec565b6040805160ff9092168252519081900360200190f35b610369600480360360208110156104a157600080fd5b503515156114f5565b610369600480360360208110156104c057600080fd5b5035611598565b610369600480360360208110156104dd57600080fd5b50356116d5565b610369600480360360208110156104fa57600080fd5b50351515611ac6565b6103a3611b6c565b6103696004803603602081101561052157600080fd5b50356001600160a01b0316611b83565b6102c8611b98565b6103a3611bf3565b610369611bf9565b610551611ef3565b604080516001600160a01b039092168252519081900360200190f35b6103a36004803603602081101561058357600080fd5b50356001600160a01b0316611f02565b6103d2600480360360408110156105a957600080fd5b506001600160a01b038135169060200135611f1d565b6103a3612062565b610369600480360360408110156105dd57600080fd5b50803590602001351515612068565b6106096004803603602081101561060257600080fd5b5035612382565b604080516001600160a01b03808916825287166020820152908101859052606081016080820184600481111561063b57fe5b60ff16815260200183151515158152602001828103825285818151815260200191508051906020019080838360005b8381101561068257818101518382015260200161066a565b50505050905090810190601f1680156106af5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b610369600480360360408110156106d857600080fd5b810190602081018135600160201b8111156106f257600080fd5b82018360208201111561070457600080fd5b803590602001918460208302840111600160201b8311171561072557600080fd5b919390929091602081019035600160201b81111561074257600080fd5b82018360208201111561075457600080fd5b803590602001918460208302840111600160201b8311171561077557600080fd5b509092509050612454565b6103696004803603604081101561079657600080fd5b810190602081018135600160201b8111156107b057600080fd5b8201836020820111156107c257600080fd5b803590602001918460208302840111600160201b831117156107e357600080fd5b919390929091602081019035600160201b81111561080057600080fd5b82018360208201111561081257600080fd5b803590602001918460208302840111600160201b8311171561083357600080fd5b509092509050612875565b6108646004803603602081101561085457600080fd5b50356001600160a01b03166129d6565b6040805192835290151560208301528051918290030190f35b6105516129f2565b6102c8612a01565b6103a3612a5c565b610551612a62565b610369600480360360408110156108b357600080fd5b506001600160a01b038135169060200135612a71565b610369600480360360208110156108df57600080fd5b50351515612d53565b6103a3612d75565b6103a3612e82565b6103d26004803603602081101561090e57600080fd5b5035612e88565b6103a3612f48565b610369612f4e565b6103a36004803603602081101561093b57600080fd5b50356001600160a01b0316612f57565b610369612f69565b6103a36004803603604081101561096957600080fd5b506001600160a01b0381358116916020013516612f72565b6103a3612f9d565b610369612fa3565b6103a3600480360360608110156109a757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156109d657600080fd5b8201836020820111156109e857600080fd5b803590602001918460018302840111600160201b83111715610a0957600080fd5b509092509050613199565b6103d260048036036020811015610a2a57600080fd5b50356001600160a01b0316613535565b6103d260048036036020811015610a5057600080fd5b50356001600160a01b0316613630565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ae65780601f10610abb57610100808354040283529160200191610ae6565b820191906000526020600020905b815481529060010190602001808311610ac957829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60006019544210158015610b6b57506000601954115b610bbf5760408051600160e51b62461bcd02815260206004820152601a60248201527f5374616b696e67206973206e6f742079657420656e61626c6564000000000000604482015290519081900360640190fd5b426000610bcc84836137cb565b905060008111610be157600092505050610d09565b60195466038d7ea4c6800090610c14906301e1338090610c0890869063ffffffff61393816565b9063ffffffff61399816565b610c27575067017896703a310000610ce9565b610c446301e13380610c086019548661393890919063ffffffff16565b60011415610c5a575066ae153d89fe8000610ce9565b610c776301e13380610c086019548661393890919063ffffffff16565b60021415610c8d5750665543df729c0000610ce9565b610caa6301e13380610c086019548661393890919063ffffffff16565b60031415610cc05750662e2f6e5e148000610ce9565b610cdd6301e13380610c086019548661393890919063ffffffff16565b60041415610ce95750606e5b600954610d03908284029060ff16600a0a61016d02613998565b93505050505b919050565b33600090815260056020526040902054600390811115610d6257604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6103e88210610dbb5760408051600160e51b62461bcd02815260206004820152601760248201527f46656520697320686967686572207468616e2031303025000000000000000000604482015290519081900360640190fd5b60138290556040805183815290517f788980e82f4651cc86d1cc00916685528f16c9abb21b2afe72325496c18c94ae9181900360200190a15050565b33600090815260056020526040902054600390811115610e4b57604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6001600160a01b038216610e975760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517ffc4d4f776e81f0d8fc28fe53de66ffc5e9c082fc6df83aa57699acf700d219e3916020908290030190a15050565b600a5481565b6000610f0433426137cb565b905090565b600d54600090849060ff1615610f695760408051600160e51b62461bcd02815260206004820152601c60248201527f42616c616e6365732061726520676c6f62616c6c792066726f7a656e00000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601c602052604090205460ff1615610fda5760408051600160e51b62461bcd02815260206004820152601a60248201527f42616c616e63652066726f7a656e206279207468652075736572000000000000604482015290519081900360640190fd5b6001600160a01b0384166110265760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b6001600160a01b0385166000818152600f60209081526040808320338452825280832054938352600e909152902054611065908563ffffffff61393816565b6001600160a01b038088166000908152600e6020526040808220939093559087168152205461109a908563ffffffff613a0516565b6001600160a01b0386166000908152600e60205260409020556110c3818563ffffffff61393816565b6001600160a01b038088166000818152600f602090815260408083203384528252918290209490945580518881529051928916939192600080516020613c2d833981519152929181900390910190a36001600160a01b0386166000908152601d602052604090205415611151576001600160a01b0386166000908152601d6020526040812061115191613ac5565b5050506001600160a01b039283166000908152601d6020818152604080842081518083018352600e8452828620546001600160801b03908116825267ffffffffffffffff428116838701818152855460018082018855968b52888b2095519501805491518416600160801b908102600160801b600160c01b03199787166001600160801b0319948516178816179091559b909c1689529686528488208551808701909652988216855284860196875288548085018a559888529490962092519290960180549451909316909602931691909516179091161790915590565b6000818152601560205260408120600260048083015460ff169081111561125257fe5b1461129157604051600160e51b62461bcd028152600401808060200182810382526027815260200180613d1e6027913960400191505060405180910390fd5b6004810154610100900460ff166112f25760408051600160e51b62461bcd02815260206004820181905260248201527f526566756e6420686173206e6f74206265656e20617070726f76656420796574604482015290519081900360640190fd5b80546002820154306000818152600e602052604090205490926001600160a01b03169190611326908263ffffffff61393816565b6001600160a01b038085166000908152600e6020526040808220939093559084168152205461135b908263ffffffff613a0516565b6001600160a01b038084166000818152600e60209081526040918290209490945580518581529051919392871692600080516020613c2d83398151915292918290030190a36001600160a01b0383166000908152601d6020526040902054156113df576001600160a01b0383166000908152601d602052604081206113df91613ac5565b6001600160a01b038281166000908152601d60209081526040808320815180830183526001600160801b03878116825267ffffffffffffffff42818116848801908152855460018082018855968a529888902094519490980180549851909216600160801b02600160801b600160c01b0319949093166001600160801b031990981697909717929092161790556004898101805460ff1916821790819055918a01548a5460028c015494518581529697918216969116948d94600080516020613c0d83398151915294909360ff909116929182019083908111156114bf57fe5b60ff1681526020019250505060405180910390a45060019695505050505050565b600b5481565b60135481565b60095460ff1681565b3360009081526005602052604081205460039081111561154957604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b600d805460ff191684151517908190556040805160ff90921615158252517fee2c272f4a21f65428f2e80154e4e11f33a295b066693d03ac5f8a0f723723c5916020908290030190a150919050565b6000818152601560205260408120600260048083015460ff16908111156115bb57fe5b146115fa57604051600160e51b62461bcd028152600401808060200182810382526027815260200180613d1e6027913960400191505060405180910390fd5b336000908152600560205260409020546002111580611625575060018101546001600160a01b031633145b61166357604051600160e51b62461bcd028152600401808060200182810382526029815260200180613cd56029913960400191505060405180910390fd5b60048101805461ff0019166101009081179182905560018301548354604080519390940460ff161515835292516001600160a01b03918216939091169186917fc65ac2becb2e9b9bcd53a2316ae3e6a55220f37ad81a9911cc7cb865fdc2cb4c9181900360200190a450600192915050565b6000818152601560205260408120600260048083015460ff16908111156116f857fe5b1461173757604051600160e51b62461bcd028152600401808060200182810382526027815260200180613d1e6027913960400191505060405180910390fd5b33600090815260056020526040902054600211158061175f575080546001600160a01b031633145b61179d57604051600160e51b62461bcd028152600401808060200182810382526029815260200180613cd56029913960400191505060405180910390fd5b6001810154600282015460135430926001600160a01b031691906000906117d3906103e890610c0890859063ffffffff613a6916565b90506117e5828263ffffffff61393816565b6001600160a01b0385166000908152600e6020526040902054909250611811908363ffffffff61393816565b6001600160a01b038086166000908152600e60205260408082209390935590851681522054611846908363ffffffff613a0516565b6001600160a01b038085166000818152600e60209081526040918290209490945580518681529051919392881692600080516020613c2d83398151915292918290030190a36001600160a01b0384166000908152600e60205260409020546118b4908263ffffffff61393816565b6001600160a01b038086166000908152600e602052604080822093909355601654909116815220546118ec908263ffffffff613a0516565b601680546001600160a01b039081166000908152600e6020908152604091829020949094559154825185815292519082169391881692600080516020613c2d83398151915292908290030190a36001600160a01b0384166000908152601d602052604090205415611978576001600160a01b0384166000908152601d6020526040812061197891613ac5565b6001600160a01b038381166000908152601d60208181526040808420815180830183526001600160801b03898116825267ffffffffffffffff42818116848801818152865460018082018955978c52898c2096519601805491518516600160801b908102600160801b600160c01b03199888166001600160801b0319948516178916179091556016548d168c52998952878b208851808a018a528e87168152808b019384528154808a018355918d529b8a90209b519b01805492519094169099029990931692909716919091179091169590951790945560048a81018054600360ff199091161790819055948b01548b5460028d015493518481529597918216969116948e94600080516020613c0d833981519152949360ff90931692908201908390811115611aa457fe5b60ff1681526020019250505060405180910390a4506001979650505050505050565b33600090815260056020526040812054600390811115611b1a57604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6014805460ff191684151517908190556040805160ff90921615158252517ff9ed57c1eaa5c6ec721dc109448dedf9d17229b260b0a448b8e2ae866947da66916020908290030190a150600192915050565b6000610f046018544361393890919063ffffffff16565b601c6020526000908152604090205460ff1681565b6008805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ae65780601f10610abb57610100808354040283529160200191610ae6565b60175481565b3360009081526011602052604081206001015460ff1615611c645760408051600160e51b62461bcd02815260206004820152601760248201527f41697264726f7020616c726561647920636c61696d6564000000000000000000604482015290519081900360640190fd5b33600090815260116020526040902054611cc85760408051600160e51b62461bcd02815260206004820152601960248201527f4e6f2061697264726f702076616c756520746f20636c61696d00000000000000604482015290519081900360640190fd5b33600081815260116020908152604080832080546001808301805460ff19169091179055908490556010546001600160a01b0316808552600e90935292205491929091611d1b908463ffffffff61393816565b6001600160a01b038084166000908152600e60205260408082209390935590831681522054611d50908463ffffffff613a0516565b6001600160a01b038083166000818152600e60209081526040918290209490945580518781529051919392861692600080516020613c2d83398151915292918290030190a36040805184815290516001600160a01b038316917f85a627733b5275fd9f62e7af950b23750d9d10f58202b4a491b4b21905076dfe919081900360200190a26001600160a01b0382166000908152601d602052604090205415611e13576001600160a01b0382166000908152601d60205260408120611e1391613ac5565b6001600160a01b039182166000908152601d6020818152604080842081518083018352600e8452828620546001600160801b03908116825267ffffffffffffffff428116838701818152855460018181018855968b52888b2095519501805491518416600160801b908102600160801b600160c01b03199787166001600160801b0319948516178816179091559a909b16895296865284882085518087019096529a821685528486019687528a548085018c559a885294909620925192909801805494519093169095029316919094161790931692909217905590505b90565b6016546001600160a01b031681565b6001600160a01b03166000908152600e602052604090205490565b33600090815260056020526040902054600290811115611f7157604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6001600160a01b038316611fbd5760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b33600090815260056020526040902054821061200d57604051600160e51b62461bcd028152600401808060200182810382526034815260200180613c4d6034913960400191505060405180910390fd5b6001600160a01b038316600081815260056020908152604091829020859055815185815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a2505050565b60195481565b60008281526015602052604081208160048083015460ff169081111561208a57fe5b146120c957604051600160e51b62461bcd028152600401808060200182810382526029815260200180613bc36029913960400191505060405180910390fd5b60018101546001600160a01b0316331461211757604051600160e51b62461bcd028152600401808060200182810382526029815260200180613cd56029913960400191505060405180910390fd5b6001831515141561230f57600281015481546001600160a01b03166000908152600e60205260409020543091612153919063ffffffff61393816565b82546001600160a01b039081166000908152600e6020526040808220939093556002850154918416815291909120546121919163ffffffff613a0516565b6001600160a01b038083166000818152600e60209081526040918290209490945585546002870154825190815291519294931692600080516020613c2d83398151915292918290030190a381546001600160a01b03166000908152601d60205260409020541561221d5781546001600160a01b03166000908152601d6020526040812061221d91613ac5565b81546001600160a01b039081166000908152601d6020908152604080832081518083018352600e8452828520546001600160801b03908116825267ffffffffffffffff42818116848801908152855460018082018855968a52888a209551950180549151909316600160801b02600160801b600160c01b0319959094166001600160801b031990911617939093169190911790558a855260158452938290206004018054600260ff1990911681179091559087015487548289015484519081529485019290925282519495908116949116928a92600080516020613c0d83398151915292918290030190a45050612378565b600084815260156020908152604091829020600401805460ff19166001908117909155838101548454600286015485519081529384019290925283516001600160a01b039182169491909216928892600080516020613c0d833981519152929181900390910190a45b5060019392505050565b601560209081526000918252604091829020805460018083015460028085015460038601805489516101009682161596909602600019011692909204601f81018890048802850188019098528784526001600160a01b0394851697949092169591949390918301828280156124385780601f1061240d57610100808354040283529160200191612438565b820191906000526020600020905b81548152906001019060200180831161241b57829003601f168201915b5050506004909301549192505060ff8082169161010090041686565b336000908152600560205260408120546001908111156124a857604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b84158015906124b657508483145b6124f457604051600160e51b62461bcd028152600401808060200182810382526025815260200180613cb06025913960400191505060405180910390fd5b6000805b8481101561252f5761252586868381811061250f57fe5b9050602002013583613a0590919063ffffffff16565b91506001016124f8565b50336000908152600e602052604090205481111561258157604051600160e51b62461bcd028152600401808060200182810382526024815260200180613b9f6024913960400191505060405180910390fd5b4260005b87811015612771576125f287878381811061259c57fe5b90506020020135600e60008c8c868181106125b357fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002054613a0590919063ffffffff16565b600e60008b8b8581811061260257fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550601d60008a8a8481811061264657fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020604051806040016040528089898581811061268d57fe5b602090810292909201356001600160801b03908116845267ffffffffffffffff88811694840194909452855460018101875560009687529583902085519601805495909301516001600160801b0319909516951694909417600160801b600160c01b031916600160801b93909216929092021790555088888281811061270f57fe5b905060200201356001600160a01b03166001600160a01b0316336001600160a01b0316600080516020613c2d83398151915289898581811061274d57fe5b905060200201356040518082815260200191505060405180910390a3600101612585565b50336000908152600e6020526040902054612792908363ffffffff61393816565b336000908152600e6020908152604080832093909355601d90522054156127cb57336000908152601d602052604081206127cb91613ac5565b336000908152600e60205260409020541561286757336000908152601d6020908152604080832081518083018352600e8452918420546001600160801b03908116835267ffffffffffffffff80871684860190815283546001810185559387529490952092519290910180549351909416600160801b02600160801b600160c01b0319929091166001600160801b031990931692909217161790555b506001979650505050505050565b336000908152600560205260408120546001908111156128c957604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b84158015906128d757508483145b61291557604051600160e51b62461bcd028152600401808060200182810382526025815260200180613cb06025913960400191505060405180910390fd5b60005b858110156129c95784848281811061292c57fe5b905060200201356011600089898581811061294357fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206000018190555060006011600089898581811061298c57fe5b602090810292909201356001600160a01b03168352508101919091526040016000206001908101805460ff19169215159290921790915501612918565b5060019695505050505050565b6011602052600090815260409020805460019091015460ff1682565b6004546001600160a01b031681565b6007805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610ae65780601f10610abb57610100808354040283529160200191610ae6565b600c5481565b6010546001600160a01b031681565b600d54600090339060ff1615612ad15760408051600160e51b62461bcd02815260206004820152601c60248201527f42616c616e6365732061726520676c6f62616c6c792066726f7a656e00000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601c602052604090205460ff1615612b425760408051600160e51b62461bcd02815260206004820152601a60248201527f42616c616e63652066726f7a656e206279207468652075736572000000000000604482015290519081900360640190fd5b6001600160a01b038416612b8e5760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b336001600160a01b0385161415612bae57612ba7612fa3565b9150612d4c565b336000908152600e6020526040902054612bce908463ffffffff61393816565b336000908152600e6020526040808220929092556001600160a01b03861681522054612c00908463ffffffff613a0516565b6001600160a01b0385166000818152600e6020908152604091829020939093558051868152905191923392600080516020613c2d8339815191529281900390910190a3336000908152601d602052604090205415612c7057336000908152601d60205260408120612c7091613ac5565b336000908152601d6020818152604080842081518083018352600e8452828620546001600160801b03908116825267ffffffffffffffff428116838701818152855460018181018855968b52888b2095519501805491518416600160801b908102600160801b600160c01b03199787166001600160801b0319948516178816179091556001600160a01b038f168b52988852868a2087518089019098528d8516885287890192835280548088018255908b5297909920955195909601805496519091169096029316939095169290921790931692909217905591505b5092915050565b336000908152601c60205260408120805460ff19169215159290921790915590565b60195466038d7ea4c68000904290612d9e906301e1338090610c0890849063ffffffff61393816565b612db25767017896703a3100009150612e7e565b612dcf6301e13380610c086019548461393890919063ffffffff16565b60011415612de65766ae153d89fe80009150612e7e565b612e036301e13380610c086019548461393890919063ffffffff16565b60021415612e1a57665543df729c00009150612e7e565b612e376301e13380610c086019548461393890919063ffffffff16565b60031415612e4e57662e2f6e5e1480009150612e7e565b612e6b6301e13380610c086019548461393890919063ffffffff16565b60041415612e7e57662714711487800091505b5090565b601a5481565b33600090815260056020526040902054600390811115612edc57604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b601954158015612eee57506017548210155b612f425760408051600160e51b62461bcd02815260206004820152600e60248201527f57726f6e672074696d6520736574000000000000000000000000000000000000604482015290519081900360640190fd5b50601955565b60185481565b600d5460ff1681565b60056020526000908152604090205481565b60145460ff1681565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b601b5481565b6000600b54600a54106130005760408051600160e51b62461bcd02815260206004820152601260248201527f4d617820737570706c7920726561636865640000000000000000000000000000604482015290519081900360640190fd5b336000908152600e602052604090205461301c57506000611ef0565b336000908152601d602052604090205461303857506000611ef0565b600061304333610b55565b905060008111613057576000915050611ef0565b600a5461306a908263ffffffff613a0516565b600a55336000908152600e602052604090205461308d908263ffffffff613a0516565b336000908152600e6020908152604080832093909355601d90529081206130b391613ac5565b336000818152601d6020908152604080832081518083018352600e8452828520546001600160801b03908116825267ffffffffffffffff428116838701908152845460018101865594885286882093519390940180549451909116600160801b02600160801b600160c01b0319939092166001600160801b0319909416939093179190911617905580518581529051600080516020613c2d833981519152929181900390910190a360408051828152905133917f157fac8fd4f41c05fc4eb4fc76efaff83b44dde65830c8474bbda846b6cebbcb919081900360200190a2600191505090565b60145460009060ff1615156001146131fb5760408051600160e51b62461bcd02815260206004820152601260248201527f457363726f772069732044697361626c65640000000000000000000000000000604482015290519081900360640190fd5b600d54339060ff16156132585760408051600160e51b62461bcd02815260206004820152601c60248201527f42616c616e6365732061726520676c6f62616c6c792066726f7a656e00000000604482015290519081900360640190fd5b6001600160a01b0381166000908152601c602052604090205460ff16156132c95760408051600160e51b62461bcd02815260206004820152601a60248201527f42616c616e63652066726f7a656e206279207468652075736572000000000000604482015290519081900360640190fd5b6001600160a01b0386166133155760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b6000851161336d5760408051600160e51b62461bcd02815260206004820152601460248201527f56616c75652063616e6e6f74206265207a65726f000000000000000000000000604482015290519081900360640190fd5b6040518060c00160405280336001600160a01b03168152602001876001600160a01b0316815260200186815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020808301829052604092830182905260125482526015815290829020835181546001600160a01b039182166001600160a01b031991821617835585840151600184018054919093169116179055918301516002830155606083015180516134429260038501920190613ae6565b5060808201518160040160006101000a81548160ff0219169083600481111561346757fe5b021790555060a08201518160040160016101000a81548160ff021916908315150217905550905050856001600160a01b0316336001600160a01b03166012547fa6de25ec225b198e8219d2afbfa9b7a76fea3c9c02b1ed34880f4a338aa19d1388888860405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a460125461352290600163ffffffff613a0516565b6012819055600019019695505050505050565b3360009081526005602052604090205460039081111561358957604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6001600160a01b0382166135d55760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517fb408f9ca0555ebd07984cfda88b709f9637edae44f4be9b3e1a2c54e5ea10b5d916020908290030190a15050565b3360009081526005602052604090205460039081111561368457604051600160e51b62461bcd02815260040180806020018281038252602f815260200180613c81602f913960400191505060405180910390fd5b6001600160a01b0382166136d05760408051600160e51b62461bcd0281526020600482015260166024820152600080516020613cfe833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03848116919091178083558116600090815260056020526040808220600390559254925192909116917f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe29190a26004546001600160a01b031660008181526005602090815260409182902054825190815291517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a23360008181526005602090815260408083208390558051928352517f4a6027ec76ca34f0d3a7e9e8778fdd08790fea341a1de199446af719cd8c783a9281900390910190a25050565b6001600160a01b0382166000908152601d60205260408120546137f057506000610b4f565b60005b6001600160a01b0384166000908152601d6020526040902054811015612d4c57601a546001600160a01b0385166000908152601d6020526040902080546138639291908490811061384057fe5b600091825260209091200154600160801b900467ffffffffffffffff1690613a05565b83101561386f57613930565b6001600160a01b0384166000908152601d6020526040812080546138bc91908490811061389857fe5b6000918252602090912001548590600160801b900467ffffffffffffffff16613938565b9050601b548111156138cd5750601b545b61392c6138e3826201518063ffffffff61399816565b6001600160a01b0387166000908152601d6020526040902080548590811061390757fe5b60009182526020909120015485916001600160801b039091160263ffffffff613a0516565b9250505b6001016137f3565b6000828211156139925760408051600160e51b62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008082116139f15760408051600160e51b62461bcd02815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b60008284816139fc57fe5b04949350505050565b600082820183811015613a625760408051600160e51b62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082613a7857506000610b4f565b82820282848281613a8557fe5b0414613a6257604051600160e51b62461bcd028152600401808060200182810382526021815260200180613bec6021913960400191505060405180910390fd5b5080546000825590600052602060002090810190613ae39190613b60565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b2757805160ff1916838001178555613b54565b82800160010185558215613b54579182015b82811115613b54578251825591602001919060010190613b39565b50612e7e929150613b84565b611ef091905b80821115612e7e5780546001600160c01b0319168155600101613b66565b611ef091905b80821115612e7e5760008155600101613b8a56fe4e6f7420656e6f7567682066756e647320666f7220746865207472616e73616374696f6e5469636b65742077726f6e67207374617475732c206578706563746564202252657175657374656422536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7756c968f05bc49a69dd99aa09b312b62b432db62df743893a786634f5b6a6c1fbddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973206c6576656c2061737369676e6d656e74596f7520646f206e6f7420686176652070726976696c6567657320666f722074686973207472616e73616374696f6e41646472657373657320616e642056616c75657320686176652077726f6e672073697a6573596f7520617265206e6f7420616c6c6f77656420746f206d616e6167652074686973207469636b6574416464726573732063616e6e6f74206265207a65726f000000000000000000005469636b65742077726f6e67207374617475732c206578706563746564202250656e64696e6722a165627a7a72305820d3d1c51141e0ad854d0def3df48055d3117895e67b4d02b4538e00c62a19fee00029

Swarm Source

bzzr://d3d1c51141e0ad854d0def3df48055d3117895e67b4d02b4538e00c62a19fee0
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.