ETH Price: $3,251.59 (-2.66%)

Token

DTT Exchange V4 (DTT)
 

Overview

Max Total Supply

0 DTT

Holders

3,992

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 3 Decimals)

Balance
0 DTT

Value
$0.00
0x6e225d10f0a1fd5d1eb424a411d1316983a8e539
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:
DTT_Exchange_v4

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-11
*/

pragma solidity ^0.7.0;

/**--------------------------------------------------------------##-----------/
/**--------------------------------------------------**********#####**********/
/**---************--**************--***************--********########*********/
/**---************--**************--***************--*******###   ####********/
/**---**     *****--    *****     --     *****     --******###    #####*******/
/**---**     *****--    *****     --     *****     --*****##################**/
/**---**     *****--    *****     --     *****     --****###################**/
/**---**     *****--    *****     --     *****     --*************#####*******/
/**---**     *****--    *****     --     *****     --*************#####*******/
/**---************--    *****     --     *****     --*************#####*******/
/**---************------*****------------*****-------*************#####*******/
/**---------------------------------------------------------------#####------*/

contract DTT_Exchange_v4 {
    // only people with tokens
    modifier onlyBagholders() {
        require(myTokens() > 0);
        _;
    }
    modifier onlyAdministrator(){
        address _customerAddress = msg.sender;
        require(administrators[_customerAddress]);
        _;
    }
    /*==============================
    =            EVENTS            =
    ==============================*/
    event Approval(
        address indexed tokenOwner, 
        address indexed spender,
        uint tokens
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 tokens
    );
    event Withdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );
    event RewardWithdraw(
        address indexed customerAddress,
        uint256 tokens
    );
    event Buy(
        address indexed buyer,
        uint256 tokensBought
    );
    event Sell(
        address indexed seller,
        uint256 tokensSold
    );
    event Stake(
        address indexed staker,
        uint256 tokenStaked
    );
    event Unstake(
        address indexed staker,
        uint256 tokenRestored
    );
    /*=====================================
    =            CONFIGURABLES            =
    =====================================*/
    string public  name = "DTT Exchange V4";
    string public symbol = "DTT";
    uint8 public decimals = 3;
    uint256 public totalSupply_ = 900000000;
    uint256 constant internal tokenPriceInitial_ = 270000000000;
    uint256 constant internal tokenPriceIncremental_ = 270;
    uint256 internal buyPercent = 1500; //comes multiplied by 1000 from outside
    uint256 internal sellPercent = 1500;
    uint256 internal referralPercent = 20200;
    uint256 internal _transferFees = 25;
    uint256 public currentPrice_ = tokenPriceInitial_;
    uint256 public grv = 1;
    // Please verify the website https://dttexchange.com before purchasing tokens

    address commissionHolder; // holds commissions fees 
    address stakeHolder; // holds stake
    address payable devAddress; // Growth funds
    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => mapping (address => uint256)) allowed;
    uint256[8] internal slabPercentage = [750,750,750,750,750,750,750,750];
    address payable sonk;
    uint256 public tokenSupply_ = 0;
    // uint256 internal profitPerShare_;
    mapping(address => bool) internal administrators;
    mapping(address => bool) internal moderators;
    uint256 commFunds=0;
    bool mutex = false;
    
    constructor()
    {
        sonk = msg.sender;
        administrators[sonk] = true; 
        commissionHolder = sonk;
        stakeHolder = sonk;
        commFunds = 0;
    }
    
    /**********************************************************************/
    /**************************UPGRADABLES*********************************/
    /**********************************************************************/
    
    function upgradeContract(address[] memory _users, uint256[] memory _balances)
    onlyAdministrator()
    public
    {
        for(uint i = 0; i<_users.length;i++)
        {
            tokenBalanceLedger_[_users[i]] += _balances[i];
            tokenSupply_ += _balances[i];
            emit Transfer(address(this),_users[i], _balances[i]);
        }
    }
    
    receive() external payable
    {
    }
    
    function upgradeDetails(uint256 _currentPrice, uint256 _grv, uint256 _commFunds)
    onlyAdministrator()
    public
    {
        currentPrice_ = _currentPrice;
        grv = _grv;
        commFunds = _commFunds;
    }
    
    function setupHolders(address _commissionHolder, uint mode_)
    onlyAdministrator()
    public
    {
        if(mode_ == 1)
        {
            commissionHolder = _commissionHolder;
        }
        if(mode_ == 2)
        {
            stakeHolder = _commissionHolder;
        }
    }
    
    function withdrawStake(uint256[] memory _amount, address[] memory _customerAddress)
        onlyAdministrator()
        public 
    {
        for(uint i = 0; i<_customerAddress.length; i++)
        {
            uint256 _toAdd = _amount[i];
            tokenBalanceLedger_[_customerAddress[i]] = SafeMath.add(tokenBalanceLedger_[_customerAddress[i]],_toAdd);
            tokenBalanceLedger_[stakeHolder] = SafeMath.sub(tokenBalanceLedger_[stakeHolder], _toAdd);
            emit Unstake(_customerAddress[i], _toAdd);
            emit Transfer(address(this),_customerAddress[i],_toAdd);
        }
    }
    
    /**********************************************************************/
    /*************************BUY/SELL/STAKE*******************************/
    /**********************************************************************/
    
    function buy()
        public
        payable
    {
        purchaseTokens(msg.value);
    }
    
    fallback() payable external
    {
        purchaseTokens(msg.value);
    }
    
    function holdStake(uint256 _amount) 
    onlyBagholders()
    public
    {
        require(!isContract(msg.sender),"Stake from contract is not allowed");
        tokenBalanceLedger_[msg.sender] = SafeMath.sub(tokenBalanceLedger_[msg.sender], _amount);
        tokenBalanceLedger_[stakeHolder] = SafeMath.add(tokenBalanceLedger_[stakeHolder], _amount);
        emit Transfer(msg.sender,address(this),_amount);
        emit Stake(msg.sender, _amount);
    }
        
    function unstake(uint256 _amount, address _customerAddress)
    onlyAdministrator()
    public
    {
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress],_amount);
        tokenBalanceLedger_[stakeHolder] = SafeMath.sub(tokenBalanceLedger_[stakeHolder], _amount);
        emit Transfer(address(this),_customerAddress,_amount);
        emit Unstake(_customerAddress, _amount);
    }
    
    function withdrawRewards(uint256 _amount, address _customerAddress)
        onlyAdministrator()
        public 
    {
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress],_amount);
        tokenSupply_ = SafeMath.add (tokenSupply_,_amount);
    }
    
    function withdrawComm(uint256[] memory _amount, address[] memory _customerAddress)
        onlyAdministrator()
        public 
    {
        for(uint i = 0; i<_customerAddress.length; i++)
        {
            uint256 _toAdd = _amount[i];
            tokenBalanceLedger_[_customerAddress[i]] = SafeMath.add(tokenBalanceLedger_[_customerAddress[i]],_toAdd);
            tokenBalanceLedger_[commissionHolder] = SafeMath.sub(tokenBalanceLedger_[commissionHolder], _toAdd);
            emit RewardWithdraw(_customerAddress[i], _toAdd);
            emit Transfer(address(this),_customerAddress[i],_toAdd);
        }
    }
    
    function withdrawEthers(uint256 _amount)
    public
    onlyAdministrator()
    {
        require(!isContract(msg.sender),"Withdraw from contract is not allowed");
        devAddress.transfer(_amount);
        commFunds = SafeMath.sub(commFunds,_amount);
        emit Transfer(devAddress,address(this),calculateTokensReceived(_amount));
    }
    
    function upgradePercentages(uint256 percent_, uint modeType) onlyAdministrator() public
    {
        require(percent_ >= 300,"Percentage Too Low");
        if(modeType == 1)
        {
            buyPercent = percent_;
        }
        if(modeType == 2)
        {
            sellPercent = percent_;
        }
        if(modeType == 3)
        {
            referralPercent = percent_;
        }
        if(modeType == 4)
        {
            _transferFees = percent_;
        }
    }

    /**
     * Liquifies tokens to ethereum.
     */
     
    function setAdministrator(address _address) public onlyAdministrator(){
        administrators[_address] = true;
    }
    
    function sell(uint256 _amountOfTokens)
        onlyBagholders()
        public
    {
        require(!isContract(msg.sender),"Selling from contract is not allowed");
        // setup data
        address payable _customerAddress = msg.sender;
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);
        uint256 sellPercent_ = getSlabPercentage(_tokens);
        uint256 _dividends = (_ethereum * sellPercent_)/100000;
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        commFunds += _dividends;
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens);
        _customerAddress.transfer(_taxedEthereum);
        emit Transfer(_customerAddress, address(this), _tokens);
    }
    
    function registerDev(address payable _devAddress)
    onlyAdministrator()
    public
    {
        devAddress = _devAddress;
    }
    
    function approve(address delegate, uint numTokens) public returns (bool) {
      allowed[msg.sender][delegate] = numTokens;
      emit Approval(msg.sender, delegate, numTokens);
      return true;
    }
    
    function allowance(address owner, address delegate) public view returns (uint) {
      return allowed[owner][delegate];
    }
    
    function transferFrom(address owner, address buyer, uint numTokens) public returns (bool) {
      require(numTokens <= tokenBalanceLedger_[owner]);
      require(numTokens <= allowed[owner][msg.sender]);
      tokenBalanceLedger_[owner] = SafeMath.sub(tokenBalanceLedger_[owner],numTokens);
      allowed[owner][msg.sender] =SafeMath.sub(allowed[owner][msg.sender],numTokens);
      uint toSend = SafeMath.sub(numTokens,_transferFees);
      tokenBalanceLedger_[buyer] = tokenBalanceLedger_[buyer] + toSend;
      if(_transferFees > 0)
        {
            burn(_transferFees);
        }
      emit Transfer(owner, buyer, numTokens);
      return true;
    }
    
    function totalCommFunds() 
        onlyAdministrator()
        public view
        returns(uint256)
    {
        return commFunds;    
    }
    
    function totalSupply() public view returns(uint256)
    {
        return SafeMath.sub(totalSupply_,tokenBalanceLedger_[address(0x000000000000000000000000000000000000dEaD)]);
    }
    
    function getCommFunds(uint256 _amount)
        onlyAdministrator()
        public 
    {
        if(_amount <= commFunds)
        {
            commFunds = SafeMath.sub(commFunds,_amount);
            emit Transfer(address(this),devAddress,calculateTokensReceived(_amount));
        }
    }
    
    function transfer(address _toAddress, uint256 _amountOfTokens) onlyBagholders()
        public
        returns(bool)
    {
        address _customerAddress = msg.sender;
        uint256 toSend_ = SafeMath.sub(_amountOfTokens, _transferFees);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], toSend_);
        emit Transfer(_customerAddress, _toAddress, _amountOfTokens);
        if(_transferFees > 0)
        {
            burn(_transferFees);
        }
        return true;
    }
    
    function destruct() onlyAdministrator() public{
        selfdestruct(sonk);
    }
    
    function burn(uint256 _amountToBurn) internal {
        tokenBalanceLedger_[address(0x000000000000000000000000000000000000dEaD)] += _amountToBurn;
        emit Transfer(address(this), address(0x000000000000000000000000000000000000dEaD), _amountToBurn);
    }

    function totalEthereumBalance()
        public
        view
        returns(uint)
    {
        return address(this).balance;
    }
    
    function myTokens() public view returns(uint256)
    {
        return (tokenBalanceLedger_[msg.sender]);
    }
    
    /**
     * Retrieve the token balance of any single address.
     */
    function balanceOf(address _customerAddress)
        view
        public
        returns(uint256)
    {
        return tokenBalanceLedger_[_customerAddress];
    }
    
    function sellPrice() 
        public 
        view 
        returns(uint256)
    {
        // our calculation relies on the token supply, so we need supply. Doh.
        if(tokenSupply_ == 0){
            return tokenPriceInitial_ - tokenPriceIncremental_;
        } else {
            uint256 _ethereum = getTokensToEthereum_(1);
            uint256 _dividends = (_ethereum * sellPercent)/100000;
            uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
            return _taxedEthereum;
        }
    }
    
    function getSlabPercentage() public view onlyAdministrator() returns(uint256[8] memory)
    {
        return(slabPercentage);
    }
    
    function getBuyPercentage() public view onlyAdministrator() returns(uint256)
    {
        return(buyPercent);
    }
    
    function getSellPercentage() public view onlyAdministrator() returns(uint256)
    {
        return(sellPercent);
    }
    
    function buyPrice() 
        public 
        view 
        returns(uint256)
    {
        return currentPrice_;
    }
    
    
    function calculateEthereumReceived(uint256 _tokensToSell) 
        public 
        view 
        returns(uint256)
    {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ethereum = getTokensToEthereum_(_tokensToSell);
        uint256 _dividends = (_ethereum * sellPercent) /100000;//SafeMath.div(_ethereum, dividendFee_);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }
    
    
    /*==========================================
    =            INTERNAL FUNCTIONS            =
    ==========================================*/
    function isContract(address account) public view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    
    event testLog(
        uint256 currBal
    );

    function calculateTokensReceived(uint256 _ethereumToSpend) 
        public 
        view 
        returns(uint256)
    {
        uint256 _dividends = (_ethereumToSpend * buyPercent)/100000;
        uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends);
        uint256 _amountOfTokens = getEthereumToTokens_(_taxedEthereum, currentPrice_, grv);
        _amountOfTokens = SafeMath.sub(_amountOfTokens, (_amountOfTokens * referralPercent) / 100000);
        return _amountOfTokens;
    }
    
    function purchaseTokens(uint256 _incomingEthereum)
        internal
        returns(uint256)
    {
        // data setup
        address _customerAddress = msg.sender;
        uint256 _dividends = (_incomingEthereum * buyPercent)/100000;
        commFunds += _dividends;
        uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, _dividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum , currentPrice_, grv);
        tokenBalanceLedger_[commissionHolder] += (_amountOfTokens * referralPercent)/100000;
        require(_amountOfTokens > 0 , "Can not buy 0 Tokens");
        require(SafeMath.add(_amountOfTokens,tokenSupply_) > tokenSupply_,"Can not buy more than Total Supply");
        tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens);
        require(SafeMath.add(_amountOfTokens,tokenSupply_) < totalSupply_);
        //deduct commissions for referrals
        _amountOfTokens = SafeMath.sub(_amountOfTokens, (_amountOfTokens * referralPercent)/100000);
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        
        // fire event
        emit Transfer(address(this), _customerAddress, _amountOfTokens);
        
        return _amountOfTokens;
    }
   
    function changeSlabPercentage(uint slab_, uint256 percentage_) onlyAdministrator() public{
        slabPercentage[slab_] = percentage_;
    }
    
    function getSlabPercentage(uint256 tokens_) internal view returns(uint256){
        tokens_ = (tokens_ / 1000);
        if(tokens_ >=50 && tokens_ <100)
        {
            return slabPercentage[0];
        }
        if(tokens_ >=100 && tokens_ <300)
        {
            return slabPercentage[1];
        }
        if(tokens_ >=300 && tokens_ < 500)
        {
            return slabPercentage[2];
        }
        if(tokens_ >= 500 && tokens_ < 1000)
        {
            return slabPercentage[3];
        }
        if(tokens_ >= 1000 && tokens_ < 2500)
        {
            return slabPercentage[4];
        }
        if(tokens_ >= 2500 && tokens_ < 5000)
        {
            return slabPercentage[5];
        }
        if(tokens_ >= 5000 && tokens_ < 10000)
        {
            return slabPercentage[6];
        }
        if(tokens_ >= 10000)
        {
            return slabPercentage[7];
        }
        return sellPercent;
    }
   
    function getEthereumToTokens_(uint256 _ethereum, uint256 _currentPrice, uint256 _grv) internal view returns(uint256)
    {
        uint256 _tokenPriceIncremental = (tokenPriceIncremental_*(2**(_grv-1)));
        uint256 _tempad = SafeMath.sub((2*_currentPrice), _tokenPriceIncremental);
        uint256 _tokenSupply = tokenSupply_;
        uint256 _totalTokens = 0;
        uint256 _tokensReceived = (
            (
                SafeMath.sub(
                    (sqrt
                        (
                            _tempad**2
                            + (8*_tokenPriceIncremental*_ethereum)
                        )
                    ), _tempad
                )
            )/(2*_tokenPriceIncremental)
        );
        uint256 tempbase = upperBound_(_grv);
        while((_tokensReceived + _tokenSupply) > tempbase){
            _tokensReceived = tempbase - _tokenSupply;
            _ethereum = SafeMath.sub(
                _ethereum,
                ((_tokensReceived)/2)*
                ((2*_currentPrice)+((_tokensReceived-1)
                *_tokenPriceIncremental))
            );
            _currentPrice = _currentPrice+((_tokensReceived-1)*_tokenPriceIncremental);
            _grv = _grv + 1;
            _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
            _tempad = SafeMath.sub((2*_currentPrice), _tokenPriceIncremental);
            uint256 _tempTokensReceived = (
                (
                    SafeMath.sub(
                        (sqrt
                            (
                                _tempad**2
                                + (8*_tokenPriceIncremental*_ethereum)
                            )
                        ), _tempad
                    )
                )/(2*_tokenPriceIncremental)
            );
            _tokenSupply = _tokenSupply + _tokensReceived;
            _totalTokens = _totalTokens + _tokensReceived;
            _tokensReceived = _tempTokensReceived;
            tempbase = upperBound_(_grv);
        }
        _totalTokens = _totalTokens + _tokensReceived;
        _currentPrice = _currentPrice+((_tokensReceived-1)*_tokenPriceIncremental);
        return _totalTokens;
    }
    
    function ethereumToTokens_(uint256 _ethereum, uint256 _currentPrice, uint256 _grv)
        internal
        returns(uint256)
    {
        uint256 _tokenPriceIncremental = (tokenPriceIncremental_*(2**(_grv-1)));
        uint256 _tempad = SafeMath.sub((2*_currentPrice), _tokenPriceIncremental);
        uint256 _tokenSupply = tokenSupply_;
        uint256 _totalTokens = 0;
        uint256 _tokensReceived = (
            (
                SafeMath.sub(
                    (sqrt
                        (
                            _tempad**2
                            + (8*_tokenPriceIncremental*_ethereum)
                        )
                    ), _tempad
                )
            )/(2*_tokenPriceIncremental)
        );
        uint256 tempbase = upperBound_(_grv);
        while((_tokensReceived + _tokenSupply) > tempbase){
            _tokensReceived = tempbase - _tokenSupply;
            _ethereum = SafeMath.sub(
                _ethereum,
                ((_tokensReceived)/2)*
                ((2*_currentPrice)+((_tokensReceived-1)
                *_tokenPriceIncremental))
            );
            _currentPrice = _currentPrice+((_tokensReceived-1)*_tokenPriceIncremental);
            _grv = _grv + 1;
            _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
            _tempad = SafeMath.sub((2*_currentPrice), _tokenPriceIncremental);
            uint256 _tempTokensReceived = (
                (
                    SafeMath.sub(
                        (sqrt
                            (
                                _tempad**2
                                + (8*_tokenPriceIncremental*_ethereum)
                            )
                        ), _tempad
                    )
                )/(2*_tokenPriceIncremental)
            );
            _tokenSupply = _tokenSupply + _tokensReceived;
            _totalTokens = _totalTokens + _tokensReceived;
            _tokensReceived = _tempTokensReceived;
            tempbase = upperBound_(_grv);
        }
        _totalTokens = _totalTokens + _tokensReceived;
        _currentPrice = _currentPrice+((_tokensReceived-1)*_tokenPriceIncremental);
        currentPrice_ = _currentPrice;
        grv = _grv;
        return _totalTokens;
    }
    
    function getTokensToEthereum_(uint256 _tokens)
        internal
        view
        returns(uint256)
    {
        uint256 _tokenSupply = tokenSupply_;
        uint256 _etherReceived = 0;
        uint256 _grv = grv;
        uint256 tempbase = upperBound_(_grv-1);
        uint256 _currentPrice = currentPrice_;
        uint256 _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
        while((_tokenSupply - _tokens) < tempbase)
        {
            uint256 tokensToSell = _tokenSupply - tempbase;
            if(tokensToSell == 0)
            {
                _tokenSupply = _tokenSupply - 1;
                _grv -= 1;
                tempbase = upperBound_(_grv-1);
                continue;
            }
            uint256 b = ((tokensToSell-1)*_tokenPriceIncremental);
            uint256 a = _currentPrice - b;
            _tokens = _tokens - tokensToSell;
            _etherReceived = _etherReceived + ((tokensToSell/2)*((2*a)+b));
            _currentPrice = a;
            _tokenSupply = _tokenSupply - tokensToSell;
            _grv = _grv-1 ;
            _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
            tempbase = upperBound_(_grv-1);
        }
        if(_tokens > 0)
        {
             uint256 a = _currentPrice - ((_tokens-1)*_tokenPriceIncremental);
             _etherReceived = _etherReceived + ((_tokens/2)*((2*a)+((_tokens-1)*_tokenPriceIncremental)));
             _tokenSupply = _tokenSupply - _tokens;
             _currentPrice = a;
        }
        return _etherReceived;
    }
    
    function tokensToEthereum_(uint256 _tokens)
        internal
        returns(uint256)
    {
        uint256 _tokenSupply = tokenSupply_;
        uint256 _etherReceived = 0;
        uint256 _grv = grv;
        uint256 tempbase = upperBound_(_grv-1);
        uint256 _currentPrice = currentPrice_;
        uint256 _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
        while((_tokenSupply - _tokens) < tempbase)
        {
            uint256 tokensToSell = _tokenSupply - tempbase;
            if(tokensToSell == 0)
            {
                _tokenSupply = _tokenSupply - 1;
                _grv -= 1;
                tempbase = upperBound_(_grv-1);
                continue;
            }
            uint256 b = ((tokensToSell-1)*_tokenPriceIncremental);
            uint256 a = _currentPrice - b;
            _tokens = _tokens - tokensToSell;
            _etherReceived = _etherReceived + ((tokensToSell/2)*((2*a)+b));
            _currentPrice = a;
            _tokenSupply = _tokenSupply - tokensToSell;
            _grv = _grv-1 ;
            _tokenPriceIncremental = (tokenPriceIncremental_*((2)**(_grv-1)));
            tempbase = upperBound_(_grv-1);
        }
        if(_tokens > 0)
        {
             uint256 a = _currentPrice - ((_tokens-1)*_tokenPriceIncremental);
             _etherReceived = _etherReceived + ((_tokens/2)*((2*a)+((_tokens-1)*_tokenPriceIncremental)));
             _tokenSupply = _tokenSupply - _tokens;
             _currentPrice = a;
        }
        grv = _grv;
        currentPrice_ = _currentPrice;
        return _etherReceived;
    }
    
    function upperBound_(uint256 _grv)
    internal
    pure
    returns(uint256)
    {
        if(_grv <= 5)
        {
            return (60000000 * _grv);
        }
        if(_grv > 5 && _grv <= 10)
        {
            return (300000000 + ((_grv-5)*50000000));
        }
        if(_grv > 10 && _grv <= 15)
        {
            return (550000000 + ((_grv-10)*40000000));
        }
        if(_grv > 15 && _grv <= 20)
        {
            return (750000000 +((_grv-15)*30000000));
        }
        return 0;
    }
    
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }
}

library SafeMath {

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"RewardWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSold","type":"uint256"}],"name":"Sell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenStaked","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenRestored","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"customerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethereumWithdrawn","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currBal","type":"uint256"}],"name":"testLog","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"delegate","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegate","type":"address"},{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"slab_","type":"uint256"},{"internalType":"uint256","name":"percentage_","type":"uint256"}],"name":"changeSlabPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentPrice_","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"destruct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getCommFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getSellPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSlabPercentage","outputs":[{"internalType":"uint256[8]","name":"","type":"uint256[8]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"holdStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_devAddress","type":"address"}],"name":"registerDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setAdministrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_commissionHolder","type":"address"},{"internalType":"uint256","name":"mode_","type":"uint256"}],"name":"setupHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSupply_","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCommFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthereumBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply_","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_customerAddress","type":"address"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_balances","type":"uint256[]"}],"name":"upgradeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_currentPrice","type":"uint256"},{"internalType":"uint256","name":"_grv","type":"uint256"},{"internalType":"uint256","name":"_commFunds","type":"uint256"}],"name":"upgradeDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent_","type":"uint256"},{"internalType":"uint256","name":"modeType","type":"uint256"}],"name":"upgradePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_amount","type":"uint256[]"},{"internalType":"address[]","name":"_customerAddress","type":"address[]"}],"name":"withdrawComm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawEthers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_customerAddress","type":"address"}],"name":"withdrawRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_amount","type":"uint256[]"},{"internalType":"address[]","name":"_customerAddress","type":"address[]"}],"name":"withdrawStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600f81526020017f4454542045786368616e67652056340000000000000000000000000000000000815250600090805190602001906200005192919062000328565b506040518060400160405280600381526020017f4454540000000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f92919062000328565b506003600260006101000a81548160ff021916908360ff1602179055506335a4e9006003556105dc6004556105dc600555614ee86006556019600755643edd410c0060085560016009556040518061010001604052806102ee61ffff1681526020016102ee61ffff1681526020016102ee61ffff1681526020016102ee61ffff1681526020016102ee61ffff1681526020016102ee61ffff1681526020016102ee61ffff1681526020016102ee61ffff16815250600f90600862000165929190620003bf565b5060006018556000601b556000601c60006101000a81548160ff0219169083151502179055503480156200019857600080fd5b5033601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160196000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601b8190555062000429565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003605760008555620003ac565b82601f106200037b57805160ff1916838001178555620003ac565b82800160010185558215620003ac579182015b82811115620003ab5782518255916020019190600101906200038e565b5b509050620003bb91906200040a565b5090565b8260088101928215620003f7579160200282015b82811115620003f6578251829061ffff16905591602001919060010190620003d3565b5b5090506200040691906200040a565b5090565b5b80821115620004255760008160009055506001016200040b565b5090565b6140ac80620004396000396000f3fe60806040526004361061024a5760003560e01c806370a0823111610139578063a6f2ae3a116100b6578063dd62ed3e1161007a578063dd62ed3e14610e08578063df8089ef14610e8d578063e1fc578814610ede578063e4849b3214611037578063f3301f6b14611072578063f4206706146110cd57610251565b8063a6f2ae3a14610cba578063a7dbfa6c14610cc4578063a9059cbb14610d09578063ada3ca7114610d7a578063c654465d14610dcd57610251565b806387d49106116100fd57806387d4910614610a505780639032c0ae14610a7b578063949e8acd14610aa657806395d89b4114610ad1578063a0d451af14610b6157610251565b806370a08231146108d157806380aedcac1461093657806381180b401461097b5780638381e182146109ca5780638620410b14610a2557610251565b80632b16587c116101c75780633a3824121161018b5780633a382412146107ba5780634b750334146108155780634d71d53414610840578063651fe6111461087b5780636b2f4632146108a657610251565b80632b16587c146106f45780632b68b9c61461071f5780632e926d4914610736578063313ce56714610761578063324536eb1461078f57610251565b80631dfa4da01161020e5780631dfa4da01461043f578063226093731461046a57806323b872dd146104b9578063257e76fc1461054a5780632a8b29f61461059b57610251565b806306fdde031461025d578063095ea7b3146102ed57806310d0ffdd1461035e57806316279055146103ad57806318160ddd1461041457610251565b3661025157005b61025a34611108565b50005b34801561026957600080fd5b506102726113f2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102b2578082015181840152602081019050610297565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b506103466004803603604081101561031057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611490565b60405180821515815260200191505060405180910390f35b34801561036a57600080fd5b506103976004803603602081101561038157600080fd5b8101908080359060200190929190505050611582565b6040518082815260200191505060405180910390f35b3480156103b957600080fd5b506103fc600480360360208110156103d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115e0565b60405180821515815260200191505060405180910390f35b34801561042057600080fd5b5061042961162b565b6040518082815260200191505060405180910390f35b34801561044b57600080fd5b5061045461167f565b6040518082815260200191505060405180910390f35b34801561047657600080fd5b506104a36004803603602081101561048d57600080fd5b8101908080359060200190929190505050611685565b6040518082815260200191505060405180910390f35b3480156104c557600080fd5b50610532600480360360608110156104dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116d1565b60405180821515815260200191505060405180910390f35b34801561055657600080fd5b506105996004803603602081101561056d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a57565b005b3480156105a757600080fd5b506106f2600480360360408110156105be57600080fd5b81019080803590602001906401000000008111156105db57600080fd5b8201836020820111156105ed57600080fd5b8035906020019184602083028401116401000000008311171561060f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561066f57600080fd5b82018360208201111561068157600080fd5b803590602001918460208302840111640100000000831117156106a357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611af7565b005b34801561070057600080fd5b50610709611de5565b6040518082815260200191505060405180910390f35b34801561072b57600080fd5b50610734611e4a565b005b34801561074257600080fd5b5061074b611ee0565b6040518082815260200191505060405180910390f35b34801561076d57600080fd5b50610776611ee6565b604051808260ff16815260200191505060405180910390f35b34801561079b57600080fd5b506107a4611ef9565b6040518082815260200191505060405180910390f35b3480156107c657600080fd5b50610813600480360360408110156107dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611eff565b005b34801561082157600080fd5b5061082a611ff5565b6040518082815260200191505060405180910390f35b34801561084c57600080fd5b506108796004803603602081101561086357600080fd5b810190808035906020019092919050505061204d565b005b34801561088757600080fd5b506108906122d2565b6040518082815260200191505060405180910390f35b3480156108b257600080fd5b506108bb6122d8565b6040518082815260200191505060405180910390f35b3480156108dd57600080fd5b50610920600480360360208110156108f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e0565b6040518082815260200191505060405180910390f35b34801561094257600080fd5b506109796004803603604081101561095957600080fd5b810190808035906020019092919080359060200190929190505050612329565b005b34801561098757600080fd5b506109c86004803603606081101561099e57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612445565b005b3480156109d657600080fd5b50610a23600480360360408110156109ed57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124bb565b005b348015610a3157600080fd5b50610a3a61272a565b6040518082815260200191505060405180910390f35b348015610a5c57600080fd5b50610a65612734565b6040518082815260200191505060405180910390f35b348015610a8757600080fd5b50610a90612799565b6040518082815260200191505060405180910390f35b348015610ab257600080fd5b50610abb6127fe565b6040518082815260200191505060405180910390f35b348015610add57600080fd5b50610ae6612845565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b26578082015181840152602081019050610b0b565b50505050905090810190601f168015610b535780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b6d57600080fd5b50610cb860048036036040811015610b8457600080fd5b8101908080359060200190640100000000811115610ba157600080fd5b820183602082011115610bb357600080fd5b80359060200191846020830284011164010000000083111715610bd557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c3557600080fd5b820183602082011115610c4757600080fd5b80359060200191846020830284011164010000000083111715610c6957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506128e3565b005b610cc2612a7e565b005b348015610cd057600080fd5b50610d0760048036036040811015610ce757600080fd5b810190808035906020019092919080359060200190929190505050612a8a565b005b348015610d1557600080fd5b50610d6260048036036040811015610d2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612afd565b60405180821515815260200191505060405180910390f35b348015610d8657600080fd5b50610d8f612cc7565b6040518082600860200280838360005b83811015610dba578082015181840152602081019050610d9f565b5050505090500191505060405180910390f35b348015610dd957600080fd5b50610e0660048036036020811015610df057600080fd5b8101908080359060200190929190505050612d6e565b005b348015610e1457600080fd5b50610e7760048036036040811015610e2b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e78565b6040518082815260200191505060405180910390f35b348015610e9957600080fd5b50610edc60048036036020811015610eb057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eff565b005b348015610eea57600080fd5b5061103560048036036040811015610f0157600080fd5b8101908080359060200190640100000000811115610f1e57600080fd5b820183602082011115610f3057600080fd5b80359060200191846020830284011164010000000083111715610f5257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610fb257600080fd5b820183602082011115610fc457600080fd5b80359060200191846020830284011164010000000083111715610fe657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612fb6565b005b34801561104357600080fd5b506110706004803603602081101561105a57600080fd5b81019080803590602001909291905050506132a4565b005b34801561107e57600080fd5b506110cb6004803603604081101561109557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061350b565b005b3480156110d957600080fd5b50611106600480360360208110156110f057600080fd5b8101908080359060200190929190505050613609565b005b6000803390506000620186a060045485028161112057fe5b04905080601b60008282540192505081905550600061113f85836137d1565b90506000611152826008546009546137e8565b9050620186a060065482028161116457fe5b04600d6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060008111611249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43616e206e6f7420627579203020546f6b656e7300000000000000000000000081525060200191505060405180910390fd5b6018546112588260185461391f565b116112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806140336022913960400191505060405180910390fd5b6112ba6018548261391f565b6018819055506003546112cf8260185461391f565b106112d957600080fd5b6112f381620186a06006548402816112ed57fe5b046137d1565b905061133e600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a380945050505050919050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114885780601f1061145d57610100808354040283529160200191611488565b820191906000526020600020905b81548152906001019060200180831161146b57829003601f168201915b505050505081565b600081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600080620186a060045484028161159557fe5b04905060006115a484836137d1565b905060006115b78260085460095461393b565b90506115d381620186a06006548402816115cd57fe5b046137d1565b9050809350505050919050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561162257506000801b8214155b92505050919050565b600061167a600354600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d1565b905090565b60095481565b600060185482111561169657600080fd5b60006116a183613a64565b90506000620186a06005548302816116b557fe5b04905060006116c483836137d1565b9050809350505050919050565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561171f57600080fd5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156117a857600080fd5b6117f1600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137d1565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118ba600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137d1565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611948836007546137d1565b905080600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060075411156119e6576119e5600754613b7a565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ab257600080fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b5257600080fd5b60005b8251811015611ddf576000848281518110611b6c57fe5b60200260200101519050611bd2600d6000868581518110611b8957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d6000868581518110611be257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c93600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137d1565b600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550838281518110611d0457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd826040518082815260200191505060405180910390a2838281518110611d6557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3508080600101915050611b55565b50505050565b600080339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e4157600080fd5b60045491505090565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ea557600080fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60085481565b600260009054906101000a900460ff1681565b60035481565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f5a57600080fd5b6001821415611fa55782600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6002821415611ff05782600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050565b60008060185414156120125761010e643edd410c0003905061204a565b600061201e6001613a64565b90506000620186a060055483028161203257fe5b049050600061204183836137d1565b90508093505050505b90565b60006120576127fe565b1161206157600080fd5b61206a336115e0565b156120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806140556022913960400191505060405180910390fd5b612109600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137d1565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121b7600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33373ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a826040518082815260200191505060405180910390a250565b60185481565b600047905090565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661238457600080fd5b61012c8310156123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f50657263656e7461676520546f6f204c6f77000000000000000000000000000081525060200191505060405180910390fd5b600182141561240d57826004819055505b600282141561241e57826005819055505b600382141561242f57826006819055505b600482141561244057826007819055505b505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124a057600080fd5b836008819055508260098190555081601b8190555050505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661251657600080fd5b61255f600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461391f565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061260d600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846137d1565b600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38173ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd846040518082815260200191505060405180910390a2505050565b6000600854905090565b600080339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661279057600080fd5b601b5491505090565b600080339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127f557600080fd5b60055491505090565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128db5780601f106128b0576101008083540402835291602001916128db565b820191906000526020600020905b8154815290600101906020018083116128be57829003601f168201915b505050505081565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661293e57600080fd5b60005b8351811015612a785782818151811061295657fe5b6020026020010151600d600086848151811061296e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508281815181106129c957fe5b60200260200101516018600082825401925050819055508381815181106129ec57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef858481518110612a4e57fe5b60200260200101516040518082815260200191505060405180910390a38080600101915050612941565b50505050565b612a8734611108565b50565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ae557600080fd5b81600f8460088110612af357fe5b0181905550505050565b600080612b086127fe565b11612b1257600080fd5b60003390506000612b25846007546137d1565b9050612b70600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856137d1565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bfc600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360006007541115612cbb57612cba600754613b7a565b5b60019250505092915050565b612ccf613fc6565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d2a57600080fd5b600f600880602002604051908101604052809291908260088015612d63576020028201915b815481526020019060010190808311612d4f575b505050505091505090565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612dc957600080fd5b601b548211612e7457612dde601b54836137d1565b601b81905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612e5e85611582565b6040518082815260200191505060405180910390a35b5050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f5a57600080fd5b6001601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661301157600080fd5b60005b825181101561329e57600084828151811061302b57fe5b60200260200101519050613091600d600086858151811061304857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d60008685815181106130a157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613152600d6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137d1565b600d6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508382815181106131c357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f6553897c25961cd3a105492c25576d0552123ee868aca283e90f3b4224d7d177826040518082815260200191505060405180910390a283828151811061322457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3508080600101915050613014565b50505050565b60006132ae6127fe565b116132b857600080fd5b6132c1336115e0565b15613317576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613fea6024913960400191505060405180910390fd5b6000339050600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561336857600080fd5b6000829050600061337882613c33565b9050600061338583613d57565b90506000620186a08284028161339757fe5b04905060006133a684836137d1565b905081601b600082825401925050819055506133c4601854866137d1565b601881905550613413600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866137d1565b600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561349c573d6000803e3d6000fd5b503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a350505050505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356657600080fd5b6135af600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461391f565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fe6018548461391f565b601881905550505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661366457600080fd5b61366d336115e0565b156136c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061400e6025913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561372b573d6000803e3d6000fd5b50613738601b54836137d1565b601b819055503073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6137b885611582565b6040518082815260200191505060405180910390a35050565b6000828211156137dd57fe5b818303905092915050565b6000806001830360020a61010e029050600061380785600202836137d1565b9050600060185490506000808460020261383361382d8b88600802026002880a01613ed8565b866137d1565b8161383a57fe5b049050600061384888613f1d565b90505b8084830111156138f257838103915061387a8a8760018503028b600202016002858161387357fe5b04026137d1565b9950856001830302890198506001880197506001880360020a61010e0295506138a689600202876137d1565b94506000866002026138ca6138c48d8a6008020260028a0a01613ed8565b886137d1565b816138d157fe5b049050828501945082840193508092506138ea89613f1d565b91505061384b565b81830192508560018303028901985088600881905550876009819055508296505050505050509392505050565b60008082840190508381101561393157fe5b8091505092915050565b6000806001830360020a61010e029050600061395a85600202836137d1565b905060006018549050600080846002026139866139808b88600802026002880a01613ed8565b866137d1565b8161398d57fe5b049050600061399b88613f1d565b90505b808483011115613a455783810391506139cd8a8760018503028b60020201600285816139c657fe5b04026137d1565b9950856001830302890198506001880197506001880360020a61010e0295506139f989600202876137d1565b9450600086600202613a1d613a178d8a6008020260028a0a01613ed8565b886137d1565b81613a2457fe5b04905082850194508284019350809250613a3d89613f1d565b91505061399e565b8183019250856001830302890198508296505050505050509392505050565b600080601854905060008060095490506000613a8260018303613f1d565b90506000600854905060006001840360020a61010e0290505b828887031015613b3257600083870390506000811415613ad557600187039650600185039450613acd60018603613f1d565b935050613a9b565b6000826001830302905060008185039050828b039a5081816002020160028481613afb57fe5b04028801975080945082890398506001870396506001870360020a61010e029350613b2860018803613f1d565b9550505050613a9b565b6000881115613b6c5760008160018a0302830390508160018a0302816002020160028a81613b5c57fe5b0402860195508887039650809250505b849650505050505050919050565b80600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b600080601854905060008060095490506000613c5160018303613f1d565b90506000600854905060006001840360020a61010e0290505b828887031015613d0157600083870390506000811415613ca457600187039650600185039450613c9c60018603613f1d565b935050613c6a565b6000826001830302905060008185039050828b039a5081816002020160028481613cca57fe5b04028801975080945082890398506001870396506001870360020a61010e029350613cf760018803613f1d565b9550505050613c6a565b6000881115613d3b5760008160018a0302830390508160018a0302816002020160028a81613d2b57fe5b0402860195508887039650809250505b8360098190555081600881905550849650505050505050919050565b60006103e88281613d6457fe5b04915060328210158015613d785750606482105b15613d9457600f600060088110613d8b57fe5b01549050613ed3565b60648210158015613da6575061012c82105b15613dc257600f600160088110613db957fe5b01549050613ed3565b61012c8210158015613dd557506101f482105b15613df157600f600260088110613de857fe5b01549050613ed3565b6101f48210158015613e0457506103e882105b15613e2057600f600360088110613e1757fe5b01549050613ed3565b6103e88210158015613e3357506109c482105b15613e4f57600f600460088110613e4657fe5b01549050613ed3565b6109c48210158015613e62575061138882105b15613e7e57600f600560088110613e7557fe5b01549050613ed3565b6113888210158015613e91575061271082105b15613ead57600f600660088110613ea457fe5b01549050613ed3565b6127108210613ecd57600f600760088110613ec457fe5b01549050613ed3565b60055490505b919050565b60008060026001840181613ee857fe5b0490508291505b81811015613f1757809150600281828581613f0657fe5b040181613f0f57fe5b049050613eef565b50919050565b600060058211613f3557816303938700029050613fc1565b600582118015613f465750600a8211155b15613f62576302faf08060058303026311e1a300019050613fc1565b600a82118015613f735750600f8211155b15613f8f576302625a00600a8303026320c85580019050613fc1565b600f82118015613fa0575060148211155b15613fbc576301c9c380600f830302632cb41780019050613fc1565b600090505b919050565b60405180610100016040528060089060208202803683378082019150509050509056fe53656c6c696e672066726f6d20636f6e7472616374206973206e6f7420616c6c6f77656457697468647261772066726f6d20636f6e7472616374206973206e6f7420616c6c6f77656443616e206e6f7420627579206d6f7265207468616e20546f74616c20537570706c795374616b652066726f6d20636f6e7472616374206973206e6f7420616c6c6f776564a2646970667358221220b12d85133ae00bb4ece1bb0a36ea43698ad3d5c673661bccd9740c7f7d50201864736f6c63430007050033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c806370a0823111610139578063a6f2ae3a116100b6578063dd62ed3e1161007a578063dd62ed3e14610e08578063df8089ef14610e8d578063e1fc578814610ede578063e4849b3214611037578063f3301f6b14611072578063f4206706146110cd57610251565b8063a6f2ae3a14610cba578063a7dbfa6c14610cc4578063a9059cbb14610d09578063ada3ca7114610d7a578063c654465d14610dcd57610251565b806387d49106116100fd57806387d4910614610a505780639032c0ae14610a7b578063949e8acd14610aa657806395d89b4114610ad1578063a0d451af14610b6157610251565b806370a08231146108d157806380aedcac1461093657806381180b401461097b5780638381e182146109ca5780638620410b14610a2557610251565b80632b16587c116101c75780633a3824121161018b5780633a382412146107ba5780634b750334146108155780634d71d53414610840578063651fe6111461087b5780636b2f4632146108a657610251565b80632b16587c146106f45780632b68b9c61461071f5780632e926d4914610736578063313ce56714610761578063324536eb1461078f57610251565b80631dfa4da01161020e5780631dfa4da01461043f578063226093731461046a57806323b872dd146104b9578063257e76fc1461054a5780632a8b29f61461059b57610251565b806306fdde031461025d578063095ea7b3146102ed57806310d0ffdd1461035e57806316279055146103ad57806318160ddd1461041457610251565b3661025157005b61025a34611108565b50005b34801561026957600080fd5b506102726113f2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102b2578082015181840152602081019050610297565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b506103466004803603604081101561031057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611490565b60405180821515815260200191505060405180910390f35b34801561036a57600080fd5b506103976004803603602081101561038157600080fd5b8101908080359060200190929190505050611582565b6040518082815260200191505060405180910390f35b3480156103b957600080fd5b506103fc600480360360208110156103d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115e0565b60405180821515815260200191505060405180910390f35b34801561042057600080fd5b5061042961162b565b6040518082815260200191505060405180910390f35b34801561044b57600080fd5b5061045461167f565b6040518082815260200191505060405180910390f35b34801561047657600080fd5b506104a36004803603602081101561048d57600080fd5b8101908080359060200190929190505050611685565b6040518082815260200191505060405180910390f35b3480156104c557600080fd5b50610532600480360360608110156104dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116d1565b60405180821515815260200191505060405180910390f35b34801561055657600080fd5b506105996004803603602081101561056d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a57565b005b3480156105a757600080fd5b506106f2600480360360408110156105be57600080fd5b81019080803590602001906401000000008111156105db57600080fd5b8201836020820111156105ed57600080fd5b8035906020019184602083028401116401000000008311171561060f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561066f57600080fd5b82018360208201111561068157600080fd5b803590602001918460208302840111640100000000831117156106a357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611af7565b005b34801561070057600080fd5b50610709611de5565b6040518082815260200191505060405180910390f35b34801561072b57600080fd5b50610734611e4a565b005b34801561074257600080fd5b5061074b611ee0565b6040518082815260200191505060405180910390f35b34801561076d57600080fd5b50610776611ee6565b604051808260ff16815260200191505060405180910390f35b34801561079b57600080fd5b506107a4611ef9565b6040518082815260200191505060405180910390f35b3480156107c657600080fd5b50610813600480360360408110156107dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611eff565b005b34801561082157600080fd5b5061082a611ff5565b6040518082815260200191505060405180910390f35b34801561084c57600080fd5b506108796004803603602081101561086357600080fd5b810190808035906020019092919050505061204d565b005b34801561088757600080fd5b506108906122d2565b6040518082815260200191505060405180910390f35b3480156108b257600080fd5b506108bb6122d8565b6040518082815260200191505060405180910390f35b3480156108dd57600080fd5b50610920600480360360208110156108f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e0565b6040518082815260200191505060405180910390f35b34801561094257600080fd5b506109796004803603604081101561095957600080fd5b810190808035906020019092919080359060200190929190505050612329565b005b34801561098757600080fd5b506109c86004803603606081101561099e57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612445565b005b3480156109d657600080fd5b50610a23600480360360408110156109ed57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124bb565b005b348015610a3157600080fd5b50610a3a61272a565b6040518082815260200191505060405180910390f35b348015610a5c57600080fd5b50610a65612734565b6040518082815260200191505060405180910390f35b348015610a8757600080fd5b50610a90612799565b6040518082815260200191505060405180910390f35b348015610ab257600080fd5b50610abb6127fe565b6040518082815260200191505060405180910390f35b348015610add57600080fd5b50610ae6612845565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b26578082015181840152602081019050610b0b565b50505050905090810190601f168015610b535780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b6d57600080fd5b50610cb860048036036040811015610b8457600080fd5b8101908080359060200190640100000000811115610ba157600080fd5b820183602082011115610bb357600080fd5b80359060200191846020830284011164010000000083111715610bd557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c3557600080fd5b820183602082011115610c4757600080fd5b80359060200191846020830284011164010000000083111715610c6957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506128e3565b005b610cc2612a7e565b005b348015610cd057600080fd5b50610d0760048036036040811015610ce757600080fd5b810190808035906020019092919080359060200190929190505050612a8a565b005b348015610d1557600080fd5b50610d6260048036036040811015610d2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612afd565b60405180821515815260200191505060405180910390f35b348015610d8657600080fd5b50610d8f612cc7565b6040518082600860200280838360005b83811015610dba578082015181840152602081019050610d9f565b5050505090500191505060405180910390f35b348015610dd957600080fd5b50610e0660048036036020811015610df057600080fd5b8101908080359060200190929190505050612d6e565b005b348015610e1457600080fd5b50610e7760048036036040811015610e2b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e78565b6040518082815260200191505060405180910390f35b348015610e9957600080fd5b50610edc60048036036020811015610eb057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eff565b005b348015610eea57600080fd5b5061103560048036036040811015610f0157600080fd5b8101908080359060200190640100000000811115610f1e57600080fd5b820183602082011115610f3057600080fd5b80359060200191846020830284011164010000000083111715610f5257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610fb257600080fd5b820183602082011115610fc457600080fd5b80359060200191846020830284011164010000000083111715610fe657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612fb6565b005b34801561104357600080fd5b506110706004803603602081101561105a57600080fd5b81019080803590602001909291905050506132a4565b005b34801561107e57600080fd5b506110cb6004803603604081101561109557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061350b565b005b3480156110d957600080fd5b50611106600480360360208110156110f057600080fd5b8101908080359060200190929190505050613609565b005b6000803390506000620186a060045485028161112057fe5b04905080601b60008282540192505081905550600061113f85836137d1565b90506000611152826008546009546137e8565b9050620186a060065482028161116457fe5b04600d6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060008111611249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43616e206e6f7420627579203020546f6b656e7300000000000000000000000081525060200191505060405180910390fd5b6018546112588260185461391f565b116112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806140336022913960400191505060405180910390fd5b6112ba6018548261391f565b6018819055506003546112cf8260185461391f565b106112d957600080fd5b6112f381620186a06006548402816112ed57fe5b046137d1565b905061133e600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a380945050505050919050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114885780601f1061145d57610100808354040283529160200191611488565b820191906000526020600020905b81548152906001019060200180831161146b57829003601f168201915b505050505081565b600081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600080620186a060045484028161159557fe5b04905060006115a484836137d1565b905060006115b78260085460095461393b565b90506115d381620186a06006548402816115cd57fe5b046137d1565b9050809350505050919050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561162257506000801b8214155b92505050919050565b600061167a600354600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d1565b905090565b60095481565b600060185482111561169657600080fd5b60006116a183613a64565b90506000620186a06005548302816116b557fe5b04905060006116c483836137d1565b9050809350505050919050565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561171f57600080fd5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156117a857600080fd5b6117f1600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137d1565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118ba600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836137d1565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611948836007546137d1565b905080600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060075411156119e6576119e5600754613b7a565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ab257600080fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b5257600080fd5b60005b8251811015611ddf576000848281518110611b6c57fe5b60200260200101519050611bd2600d6000868581518110611b8957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d6000868581518110611be257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c93600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137d1565b600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550838281518110611d0457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd826040518082815260200191505060405180910390a2838281518110611d6557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3508080600101915050611b55565b50505050565b600080339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e4157600080fd5b60045491505090565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ea557600080fd5b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60085481565b600260009054906101000a900460ff1681565b60035481565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f5a57600080fd5b6001821415611fa55782600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6002821415611ff05782600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050565b60008060185414156120125761010e643edd410c0003905061204a565b600061201e6001613a64565b90506000620186a060055483028161203257fe5b049050600061204183836137d1565b90508093505050505b90565b60006120576127fe565b1161206157600080fd5b61206a336115e0565b156120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806140556022913960400191505060405180910390fd5b612109600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137d1565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121b7600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a33373ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a826040518082815260200191505060405180910390a250565b60185481565b600047905090565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661238457600080fd5b61012c8310156123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f50657263656e7461676520546f6f204c6f77000000000000000000000000000081525060200191505060405180910390fd5b600182141561240d57826004819055505b600282141561241e57826005819055505b600382141561242f57826006819055505b600482141561244057826007819055505b505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124a057600080fd5b836008819055508260098190555081601b8190555050505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661251657600080fd5b61255f600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461391f565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061260d600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846137d1565b600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38173ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd846040518082815260200191505060405180910390a2505050565b6000600854905090565b600080339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661279057600080fd5b601b5491505090565b600080339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127f557600080fd5b60055491505090565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128db5780601f106128b0576101008083540402835291602001916128db565b820191906000526020600020905b8154815290600101906020018083116128be57829003601f168201915b505050505081565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661293e57600080fd5b60005b8351811015612a785782818151811061295657fe5b6020026020010151600d600086848151811061296e57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508281815181106129c957fe5b60200260200101516018600082825401925050819055508381815181106129ec57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef858481518110612a4e57fe5b60200260200101516040518082815260200191505060405180910390a38080600101915050612941565b50505050565b612a8734611108565b50565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ae557600080fd5b81600f8460088110612af357fe5b0181905550505050565b600080612b086127fe565b11612b1257600080fd5b60003390506000612b25846007546137d1565b9050612b70600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856137d1565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bfc600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a360006007541115612cbb57612cba600754613b7a565b5b60019250505092915050565b612ccf613fc6565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d2a57600080fd5b600f600880602002604051908101604052809291908260088015612d63576020028201915b815481526020019060010190808311612d4f575b505050505091505090565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612dc957600080fd5b601b548211612e7457612dde601b54836137d1565b601b81905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612e5e85611582565b6040518082815260200191505060405180910390a35b5050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f5a57600080fd5b6001601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661301157600080fd5b60005b825181101561329e57600084828151811061302b57fe5b60200260200101519050613091600d600086858151811061304857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261391f565b600d60008685815181106130a157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613152600d6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137d1565b600d6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508382815181106131c357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f6553897c25961cd3a105492c25576d0552123ee868aca283e90f3b4224d7d177826040518082815260200191505060405180910390a283828151811061322457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3508080600101915050613014565b50505050565b60006132ae6127fe565b116132b857600080fd5b6132c1336115e0565b15613317576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613fea6024913960400191505060405180910390fd5b6000339050600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561336857600080fd5b6000829050600061337882613c33565b9050600061338583613d57565b90506000620186a08284028161339757fe5b04905060006133a684836137d1565b905081601b600082825401925050819055506133c4601854866137d1565b601881905550613413600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054866137d1565b600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561349c573d6000803e3d6000fd5b503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a350505050505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356657600080fd5b6135af600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461391f565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135fe6018548461391f565b601881905550505050565b6000339050601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661366457600080fd5b61366d336115e0565b156136c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061400e6025913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561372b573d6000803e3d6000fd5b50613738601b54836137d1565b601b819055503073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6137b885611582565b6040518082815260200191505060405180910390a35050565b6000828211156137dd57fe5b818303905092915050565b6000806001830360020a61010e029050600061380785600202836137d1565b9050600060185490506000808460020261383361382d8b88600802026002880a01613ed8565b866137d1565b8161383a57fe5b049050600061384888613f1d565b90505b8084830111156138f257838103915061387a8a8760018503028b600202016002858161387357fe5b04026137d1565b9950856001830302890198506001880197506001880360020a61010e0295506138a689600202876137d1565b94506000866002026138ca6138c48d8a6008020260028a0a01613ed8565b886137d1565b816138d157fe5b049050828501945082840193508092506138ea89613f1d565b91505061384b565b81830192508560018303028901985088600881905550876009819055508296505050505050509392505050565b60008082840190508381101561393157fe5b8091505092915050565b6000806001830360020a61010e029050600061395a85600202836137d1565b905060006018549050600080846002026139866139808b88600802026002880a01613ed8565b866137d1565b8161398d57fe5b049050600061399b88613f1d565b90505b808483011115613a455783810391506139cd8a8760018503028b60020201600285816139c657fe5b04026137d1565b9950856001830302890198506001880197506001880360020a61010e0295506139f989600202876137d1565b9450600086600202613a1d613a178d8a6008020260028a0a01613ed8565b886137d1565b81613a2457fe5b04905082850194508284019350809250613a3d89613f1d565b91505061399e565b8183019250856001830302890198508296505050505050509392505050565b600080601854905060008060095490506000613a8260018303613f1d565b90506000600854905060006001840360020a61010e0290505b828887031015613b3257600083870390506000811415613ad557600187039650600185039450613acd60018603613f1d565b935050613a9b565b6000826001830302905060008185039050828b039a5081816002020160028481613afb57fe5b04028801975080945082890398506001870396506001870360020a61010e029350613b2860018803613f1d565b9550505050613a9b565b6000881115613b6c5760008160018a0302830390508160018a0302816002020160028a81613b5c57fe5b0402860195508887039650809250505b849650505050505050919050565b80600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b600080601854905060008060095490506000613c5160018303613f1d565b90506000600854905060006001840360020a61010e0290505b828887031015613d0157600083870390506000811415613ca457600187039650600185039450613c9c60018603613f1d565b935050613c6a565b6000826001830302905060008185039050828b039a5081816002020160028481613cca57fe5b04028801975080945082890398506001870396506001870360020a61010e029350613cf760018803613f1d565b9550505050613c6a565b6000881115613d3b5760008160018a0302830390508160018a0302816002020160028a81613d2b57fe5b0402860195508887039650809250505b8360098190555081600881905550849650505050505050919050565b60006103e88281613d6457fe5b04915060328210158015613d785750606482105b15613d9457600f600060088110613d8b57fe5b01549050613ed3565b60648210158015613da6575061012c82105b15613dc257600f600160088110613db957fe5b01549050613ed3565b61012c8210158015613dd557506101f482105b15613df157600f600260088110613de857fe5b01549050613ed3565b6101f48210158015613e0457506103e882105b15613e2057600f600360088110613e1757fe5b01549050613ed3565b6103e88210158015613e3357506109c482105b15613e4f57600f600460088110613e4657fe5b01549050613ed3565b6109c48210158015613e62575061138882105b15613e7e57600f600560088110613e7557fe5b01549050613ed3565b6113888210158015613e91575061271082105b15613ead57600f600660088110613ea457fe5b01549050613ed3565b6127108210613ecd57600f600760088110613ec457fe5b01549050613ed3565b60055490505b919050565b60008060026001840181613ee857fe5b0490508291505b81811015613f1757809150600281828581613f0657fe5b040181613f0f57fe5b049050613eef565b50919050565b600060058211613f3557816303938700029050613fc1565b600582118015613f465750600a8211155b15613f62576302faf08060058303026311e1a300019050613fc1565b600a82118015613f735750600f8211155b15613f8f576302625a00600a8303026320c85580019050613fc1565b600f82118015613fa0575060148211155b15613fbc576301c9c380600f830302632cb41780019050613fc1565b600090505b919050565b60405180610100016040528060089060208202803683378082019150509050509056fe53656c6c696e672066726f6d20636f6e7472616374206973206e6f7420616c6c6f77656457697468647261772066726f6d20636f6e7472616374206973206e6f7420616c6c6f77656443616e206e6f7420627579206d6f7265207468616e20546f74616c20537570706c795374616b652066726f6d20636f6e7472616374206973206e6f7420616c6c6f776564a2646970667358221220b12d85133ae00bb4ece1bb0a36ea43698ad3d5c673661bccd9740c7f7d50201864736f6c63430007050033

Deployed Bytecode Sourcemap

1001:26408:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6068:25;6083:9;6068:14;:25::i;:::-;;1001:26408;2348:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10173:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15840:509;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15156:617;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11373:182;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2902:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14535:453;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10530:672;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10026:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5050:613;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14130:119;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12541:83;;;;;;;;;;;;;:::i;:::-;;2846:49;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2429:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2461:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4738:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13436:536;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6113:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3394:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12905:137;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13255:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8353:506;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4501:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6593:435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14394:123;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11214:147;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14261:121;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13054:113;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2394:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4070:367;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5915:97;;;:::i;:::-;;17659:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11878:651;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13984:134;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11567:299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10391:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8930:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7350:629;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9062:952;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7040:298;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7991:350;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16361:1287;16447:7;16495:24;16522:10;16495:37;;16543:18;16597:6;16585:10;;16565:17;:30;16564:39;;;;;;16543:60;;16627:10;16614:9;;:23;;;;;;;;;;;16648:22;16673:43;16686:17;16705:10;16673:12;:43::i;:::-;16648:68;;16727:23;16753:54;16771:14;16788:13;;16803:3;;16753:17;:54::i;:::-;16727:80;;16895:6;16878:15;;16860;:33;16859:42;;;;;;16818:19;:37;16838:16;;;;;;;;;;;16818:37;;;;;;;;;;;;;;;;:83;;;;;;;;;;;16938:1;16920:15;:19;16912:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17029:12;;16984:42;16997:15;17013:12;;16984;:42::i;:::-;:57;16976:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17105:43;17118:12;;17132:15;17105:12;:43::i;:::-;17090:12;:58;;;;17212:12;;17167:42;17180:15;17196:12;;17167;:42::i;:::-;:57;17159:66;;;;;;17298:73;17311:15;17364:6;17347:15;;17329;:33;17328:42;;;;;;17298:12;:73::i;:::-;17280:91;;17422:68;17435:19;:37;17455:16;17435:37;;;;;;;;;;;;;;;;17474:15;17422:12;:68::i;:::-;17382:19;:37;17402:16;17382:37;;;;;;;;;;;;;;;:108;;;;17563:16;17539:58;;17556:4;17539:58;;;17581:15;17539:58;;;;;;;;;;;;;;;;;;17625:15;17618:22;;;;;;16361:1287;;;:::o;2348:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10173:206::-;10240:4;10287:9;10255:7;:19;10263:10;10255:19;;;;;;;;;;;;;;;:29;10275:8;10255:29;;;;;;;;;;;;;;;:41;;;;10331:8;10310:41;;10319:10;10310:41;;;10341:9;10310:41;;;;;;;;;;;;;;;;;;10367:4;10360:11;;10173:206;;;;:::o;15840:509::-;15949:7;15974:18;16027:6;16015:10;;15996:16;:29;15995:38;;;;;;15974:59;;16044:22;16069:42;16082:16;16100:10;16069:12;:42::i;:::-;16044:67;;16122:23;16148:56;16169:14;16185:13;;16200:3;;16148:20;:56::i;:::-;16122:82;;16233:75;16246:15;16301:6;16282:15;;16264;:33;16263:44;;;;;;16233:12;:75::i;:::-;16215:93;;16326:15;16319:22;;;;;15840:509;;;:::o;15156:617::-;15214:4;15476:16;15503:19;15525:66;15503:88;;;;15694:7;15682:20;15670:32;;15734:11;15722:8;:23;;:42;;;;;15761:3;15749:15;;:8;:15;;15722:42;15714:51;;;;15156:617;;;:::o;11373:182::-;11416:7;11448:99;11461:12;;11474:19;:72;11502:42;11474:72;;;;;;;;;;;;;;;;11448:12;:99::i;:::-;11441:106;;11373:182;:::o;2902:22::-;;;;:::o;14535:453::-;14643:7;14693:12;;14676:13;:29;;14668:38;;;;;;14717:17;14737:35;14758:13;14737:20;:35::i;:::-;14717:55;;14783:18;14831:6;14817:11;;14805:9;:23;14804:33;;;;;;14783:54;;14888:22;14913:35;14926:9;14937:10;14913:12;:35::i;:::-;14888:60;;14966:14;14959:21;;;;;14535:453;;;:::o;10530:672::-;10614:4;10650:19;:26;10670:5;10650:26;;;;;;;;;;;;;;;;10637:9;:39;;10629:48;;;;;;10707:7;:14;10715:5;10707:14;;;;;;;;;;;;;;;:26;10722:10;10707:26;;;;;;;;;;;;;;;;10694:9;:39;;10686:48;;;;;;10772:50;10785:19;:26;10805:5;10785:26;;;;;;;;;;;;;;;;10812:9;10772:12;:50::i;:::-;10743:19;:26;10763:5;10743:26;;;;;;;;;;;;;;;:79;;;;10859:50;10872:7;:14;10880:5;10872:14;;;;;;;;;;;;;;;:26;10887:10;10872:26;;;;;;;;;;;;;;;;10899:9;10859:12;:50::i;:::-;10831:7;:14;10839:5;10831:14;;;;;;;;;;;;;;;:26;10846:10;10831:26;;;;;;;;;;;;;;;:78;;;;10918:11;10932:37;10945:9;10955:13;;10932:12;:37::i;:::-;10918:51;;11036:6;11007:19;:26;11027:5;11007:26;;;;;;;;;;;;;;;;:35;10978:19;:26;10998:5;10978:26;;;;;;;;;;;;;;;:64;;;;11070:1;11054:13;;:17;11051:77;;;11097:19;11102:13;;11097:4;:19::i;:::-;11051:77;11157:5;11141:33;;11150:5;11141:33;;;11164:9;11141:33;;;;;;;;;;;;;;;;;;11190:4;11183:11;;;10530:672;;;;;:::o;10026:135::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;10142:11:::1;10129:10;;:24;;;;;;;;;;;;;;;;;;10026:135:::0;;:::o;5050:613::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;5200:6:::1;5196:460;5214:16;:23;5212:1;:25;5196:460;;;5268:14;5285:7;5293:1;5285:10;;;;;;;;;;;;;;5268:27;;5353:61;5366:19;:40;5386:16;5403:1;5386:19;;;;;;;;;;;;;;5366:40;;;;;;;;;;;;;;;;5407:6;5353:12;:61::i;:::-;5310:19;:40;5330:16;5347:1;5330:19;;;;;;;;;;;;;;5310:40;;;;;;;;;;;;;;;:104;;;;5464:54;5477:19;:32;5497:11;;;;;;;;;;;5477:32;;;;;;;;;;;;;;;;5511:6;5464:12;:54::i;:::-;5429:19;:32;5449:11;;;;;;;;;;;5429:32;;;;;;;;;;;;;;;:89;;;;5546:16;5563:1;5546:19;;;;;;;;;;;;;;5538:36;;;5567:6;5538:36;;;;;;;;;;;;;;;;;;5617:16;5634:1;5617:19;;;;;;;;;;;;;;5594:50;;5611:4;5594:50;;;5637:6;5594:50;;;;;;;;;;;;;;;;;;5196:460;5239:3;;;;;;;5196:460;;;;5050:613:::0;;;:::o;14130:119::-;14198:7;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;14230:10:::1;;14223:18;;14130:119:::0;;:::o;12541:83::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;12611:4:::1;;;;;;;;;;;12598:18;;;2846:49:::0;;;;:::o;2429:25::-;;;;;;;;;;;;;:::o;2461:39::-;;;;:::o;4738:300::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;4864:1:::1;4855:5;:10;4852:87;;;4910:17;4891:16;;:36;;;;;;;;;;;;;;;;;;4852:87;4961:1;4952:5;:10;4949:82;;;5002:17;4988:11;;:31;;;;;;;;;;;;;;;;;;4949:82;4738:300:::0;;;:::o;13436:536::-;13507:7;13631:1;13615:12;;:17;13612:353;;;2624:3;2554:12;13655:43;13648:50;;;;13612:353;13731:17;13751:23;13772:1;13751:20;:23::i;:::-;13731:43;;13789:18;13836:6;13823:11;;13811:9;:23;13810:32;;;;;;13789:53;;13857:22;13882:35;13895:9;13906:10;13882:12;:35::i;:::-;13857:60;;13939:14;13932:21;;;;;13436:536;;:::o;6113:464::-;1123:1;1110:10;:8;:10::i;:::-;:14;1102:23;;;;;;6209:22:::1;6220:10;6209;:22::i;:::-;6208:23;6200:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6314:54;6327:19;:31;6347:10;6327:31;;;;;;;;;;;;;;;;6360:7;6314:12;:54::i;:::-;6280:19;:31;6300:10;6280:31;;;;;;;;;;;;;;;:88;;;;6414:55;6427:19;:32;6447:11;;;;;;;;;;;6427:32;;;;;;;;;;;;;;;;6461:7;6414:12;:55::i;:::-;6379:19;:32;6399:11;;;;;;;;;;;6379:32;;;;;;;;;;;;;;;:90;;;;6513:4;6485:42;;6494:10;6485:42;;;6519:7;6485:42;;;;;;;;;;;;;;;;;;6549:10;6543:26;;;6561:7;6543:26;;;;;;;;;;;;;;;;;;6113:464:::0;:::o;3394:31::-;;;;:::o;12905:137::-;12984:4;13013:21;13006:28;;12905:137;:::o;13255:169::-;13347:7;13379:19;:37;13399:16;13379:37;;;;;;;;;;;;;;;;13372:44;;13255:169;;;:::o;8353:506::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;8477:3:::1;8465:8;:15;;8457:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8528:1;8516:8;:13;8513:75;;;8568:8;8555:10;:21;;;;8513:75;8613:1;8601:8;:13;8598:76;;;8654:8;8640:11;:22;;;;8598:76;8699:1;8687:8;:13;8684:80;;;8744:8;8726:15;:26;;;;8684:80;8789:1;8777:8;:13;8774:78;;;8832:8;8816:13;:24;;;;8774:78;8353:506:::0;;;:::o;4501:225::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;4651:13:::1;4635;:29;;;;4681:4;4675:3;:10;;;;4708;4696:9;:22;;;;4501:225:::0;;;;:::o;6593:435::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;6746:59:::1;6759:19;:37;6779:16;6759:37;;;;;;;;;;;;;;;;6797:7;6746:12;:59::i;:::-;6706:19;:37;6726:16;6706:37;;;;;;;;;;;;;;;:99;;;;6851:55;6864:19;:32;6884:11;;;;;;;;;;;6864:32;;;;;;;;;;;;;;;;6898:7;6851:12;:55::i;:::-;6816:19;:32;6836:11;;;;;;;;;;;6816:32;;;;;;;;;;;;;;;:90;;;;6945:16;6922:48;;6939:4;6922:48;;;6962:7;6922:48;;;;;;;;;;;;;;;;;;6994:16;6986:34;;;7012:7;6986:34;;;;;;;;;;;;;;;;;;6593:435:::0;;;:::o;14394:123::-;14464:7;14496:13;;14489:20;;14394:123;:::o;11214:147::-;11308:7;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;11340:9:::1;;11333:16;;11214:147:::0;;:::o;14261:121::-;14330:7;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;14362:11:::1;;14355:19;;14261:121:::0;;:::o;13054:113::-;13094:7;13127:19;:31;13147:10;13127:31;;;;;;;;;;;;;;;;13119:40;;13054:113;:::o;2394:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4070:367::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;4205:6:::1;4201:229;4219:6;:13;4217:1;:15;4201:229;;;4296:9;4306:1;4296:12;;;;;;;;;;;;;;4262:19;:30;4282:6;4289:1;4282:9;;;;;;;;;;;;;;4262:30;;;;;;;;;;;;;;;;:46;;;;;;;;;;;4339:9;4349:1;4339:12;;;;;;;;;;;;;;4323;;:28;;;;;;;;;;;4394:6;4401:1;4394:9;;;;;;;;;;;;;;4371:47;;4388:4;4371:47;;;4405:9;4415:1;4405:12;;;;;;;;;;;;;;4371:47;;;;;;;;;;;;;;;;;;4233:3;;;;;;;4201:229;;;;4070:367:::0;;;:::o;5915:97::-;5979:25;5994:9;5979:14;:25::i;:::-;;5915:97::o;17659:143::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;17783:11:::1;17759:14;17774:5;17759:21;;;;;;;;:35;;;;17659:143:::0;;;:::o;11878:651::-;11991:4;1123:1;1110:10;:8;:10::i;:::-;:14;1102:23;;;;;;12013:24:::1;12040:10;12013:37;;12061:15;12079:44;12092:15;12109:13;;12079:12;:44::i;:::-;12061:62;;12174:68;12187:19;:37;12207:16;12187:37;;;;;;;;;;;;;;;;12226:15;12174:12;:68::i;:::-;12134:19;:37;12154:16;12134:37;;;;;;;;;;;;;;;:108;;;;12287:54;12300:19;:31;12320:10;12300:31;;;;;;;;;;;;;;;;12333:7;12287:12;:54::i;:::-;12253:19;:31;12273:10;12253:31;;;;;;;;;;;;;;;:88;;;;12384:10;12357:55;;12366:16;12357:55;;;12396:15;12357:55;;;;;;;;;;;;;;;;;;12442:1;12426:13;;:17;12423:77;;;12469:19;12474:13;;12469:4;:19::i;:::-;12423:77;12517:4;12510:11;;;;11878:651:::0;;;;:::o;13984:134::-;14053:17;;:::i;:::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;14095:14:::1;14088:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13984:134:::0;;:::o;11567:299::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;11682:9:::1;;11671:7;:20;11668:191;;11729:31;11742:9;;11752:7;11729:12;:31::i;:::-;11717:9;:43;;;;11803:10;;;;;;;;;;;11780:67;;11797:4;11780:67;;;11814:32;11838:7;11814:23;:32::i;:::-;11780:67;;;;;;;;;;;;;;;;;;11668:191;11567:299:::0;;:::o;10391:127::-;10464:4;10486:7;:14;10494:5;10486:14;;;;;;;;;;;;;;;:24;10501:8;10486:24;;;;;;;;;;;;;;;;10479:31;;10391:127;;;;:::o;8930:120::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;9038:4:::1;9011:14;:24;9026:8;9011:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;8930:120:::0;;:::o;7350:629::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;7499:6:::1;7495:477;7513:16;:23;7511:1;:25;7495:477;;;7567:14;7584:7;7592:1;7584:10;;;;;;;;;;;;;;7567:27;;7652:61;7665:19;:40;7685:16;7702:1;7685:19;;;;;;;;;;;;;;7665:40;;;;;;;;;;;;;;;;7706:6;7652:12;:61::i;:::-;7609:19;:40;7629:16;7646:1;7629:19;;;;;;;;;;;;;;7609:40;;;;;;;;;;;;;;;:104;;;;7768:59;7781:19;:37;7801:16;;;;;;;;;;;7781:37;;;;;;;;;;;;;;;;7820:6;7768:12;:59::i;:::-;7728:19;:37;7748:16;;;;;;;;;;;7728:37;;;;;;;;;;;;;;;:99;;;;7862:16;7879:1;7862:19;;;;;;;;;;;;;;7847:43;;;7883:6;7847:43;;;;;;;;;;;;;;;;;;7933:16;7950:1;7933:19;;;;;;;;;;;;;;7910:50;;7927:4;7910:50;;;7953:6;7910:50;;;;;;;;;;;;;;;;;;7495:477;7538:3;;;;;;;7495:477;;;;7350:629:::0;;;:::o;9062:952::-;1123:1;1110:10;:8;:10::i;:::-;:14;1102:23;;;;;;9168:22:::1;9179:10;9168;:22::i;:::-;9167:23;9159:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9264:32;9299:10;9264:45;;9347:19;:37;9367:16;9347:37;;;;;;;;;;;;;;;;9328:15;:56;;9320:65;;;::::0;::::1;;9396:15;9414;9396:33;;9440:17;9460:26;9478:7;9460:17;:26::i;:::-;9440:46;;9497:20;9520:26;9538:7;9520:17;:26::i;:::-;9497:49;;9557:18;9605:6;9591:12;9579:9;:24;9578:33;;;;;;9557:54;;9622:22;9647:35;9660:9;9671:10;9647:12;:35::i;:::-;9622:60;;9706:10;9693:9;;:23;;;;;;;;;;;9742:35;9755:12;;9769:7;9742:12;:35::i;:::-;9727:12;:50;;;;9828:60;9841:19;:37;9861:16;9841:37;;;;;;;;;;;;;;;;9880:7;9828:12;:60::i;:::-;9788:19;:37;9808:16;9788:37;;;;;;;;;;;;;;;:100;;;;9899:16;:25;;:41;9925:14;9899:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;9991:4;9956:50;;9965:16;9956:50;;;9998:7;9956:50;;;;;;;;;;;;;;;;;;1136:1;;;;;;9062:952:::0;:::o;7040:298::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;7210:59:::1;7223:19;:37;7243:16;7223:37;;;;;;;;;;;;;;;;7261:7;7210:12;:59::i;:::-;7170:19;:37;7190:16;7170:37;;;;;;;;;;;;;;;:99;;;;7295:35;7309:12;;7322:7;7295:12;:35::i;:::-;7280:12;:50;;;;7040:298:::0;;;:::o;7991:350::-;1190:24;1217:10;1190:37;;1246:14;:32;1261:16;1246:32;;;;;;;;;;;;;;;;;;;;;;;;;1238:41;;;;;;8094:22:::1;8105:10;8094;:22::i;:::-;8093:23;8085:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8168:10;;;;;;;;;;;:19;;:28;8188:7;8168:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8219:31;8232:9;;8242:7;8219:12;:31::i;:::-;8207:9;:43;;;;8294:4;8266:67;;8275:10;;;;;;;;;;;8266:67;;;8300:32;8324:7;8300:23;:32::i;:::-;8266:67;;;;;;;;;;;;;;;;;;7991:350:::0;;:::o;28229:123::-;28287:7;28319:1;28314;:6;;28307:14;;;;28343:1;28339;:5;28332:12;;28229:123;;;;:::o;21066:2317::-;21184:7;21209:30;21276:1;21271:4;:6;21267:1;:11;2624:3;21243:36;21209:71;;21291:15;21309:55;21325:13;21323:1;:15;21341:22;21309:12;:55::i;:::-;21291:73;;21375:20;21398:12;;21375:35;;21421:20;21456:23;21788:22;21786:1;:24;21516:253;21552:166;21681:9;21658:22;21656:1;:24;:34;21622:1;21613:7;:10;:78;21552:4;:166::i;:::-;21743:7;21516:12;:253::i;:::-;21497:314;;;;;;21456:366;;21833:16;21852:17;21864:4;21852:11;:17::i;:::-;21833:36;;21880:1264;21921:8;21905:12;21887:15;:30;21886:43;21880:1264;;;21974:12;21963:8;:23;21945:41;;22013:196;22044:9;22170:22;22149:1;22133:15;:17;22132:60;22116:13;22114:1;:15;22113:80;22091:1;22074:15;22073:19;;;;;;22072:122;22013:12;:196::i;:::-;22001:208;;22275:22;22272:1;22256:15;:17;22255:42;22240:13;:58;22224:74;;22327:1;22320:4;:8;22313:15;;22404:1;22399:4;:6;22394:1;22393:13;2624:3;22369:38;22343:65;;22433:55;22449:13;22447:1;:15;22465:22;22433:12;:55::i;:::-;22423:65;;22503:27;22879:22;22877:1;:24;22575:281;22615:182;22756:9;22733:22;22731:1;:24;:34;22693:1;22684:7;:10;:82;22615:4;:182::i;:::-;22826:7;22575:12;:281::i;:::-;22552:350;;;;;;22503:414;;22962:15;22947:12;:30;22932:45;;23022:15;23007:12;:30;22992:45;;23070:19;23052:37;;23115:17;23127:4;23115:11;:17::i;:::-;23104:28;;21880:1264;;;;23184:15;23169:12;:30;23154:45;;23261:22;23258:1;23242:15;:17;23241:42;23226:13;:58;23210:74;;23311:13;23295;:29;;;;23341:4;23335:3;:10;;;;23363:12;23356:19;;;;;;;;21066:2317;;;;;:::o;28427:147::-;28485:7;28505:9;28521:1;28517;:5;28505:17;;28545:1;28540;:6;;28533:14;;;;28565:1;28558:8;;;28427:147;;;;:::o;18808:2246::-;18916:7;18941:30;19008:1;19003:4;:6;18999:1;:11;2624:3;18975:36;18941:71;;19023:15;19041:55;19057:13;19055:1;:15;19073:22;19041:12;:55::i;:::-;19023:73;;19107:20;19130:12;;19107:35;;19153:20;19188:23;19520:22;19518:1;:24;19248:253;19284:166;19413:9;19390:22;19388:1;:24;:34;19354:1;19345:7;:10;:78;19284:4;:166::i;:::-;19475:7;19248:12;:253::i;:::-;19229:314;;;;;;19188:366;;19565:16;19584:17;19596:4;19584:11;:17::i;:::-;19565:36;;19612:1264;19653:8;19637:12;19619:15;:30;19618:43;19612:1264;;;19706:12;19695:8;:23;19677:41;;19745:196;19776:9;19902:22;19881:1;19865:15;:17;19864:60;19848:13;19846:1;:15;19845:80;19823:1;19806:15;19805:19;;;;;;19804:122;19745:12;:196::i;:::-;19733:208;;20007:22;20004:1;19988:15;:17;19987:42;19972:13;:58;19956:74;;20059:1;20052:4;:8;20045:15;;20136:1;20131:4;:6;20126:1;20125:13;2624:3;20101:38;20075:65;;20165:55;20181:13;20179:1;:15;20197:22;20165:12;:55::i;:::-;20155:65;;20235:27;20611:22;20609:1;:24;20307:281;20347:182;20488:9;20465:22;20463:1;:24;:34;20425:1;20416:7;:10;:82;20347:4;:182::i;:::-;20558:7;20307:12;:281::i;:::-;20284:350;;;;;;20235:414;;20694:15;20679:12;:30;20664:45;;20754:15;20739:12;:30;20724:45;;20802:19;20784:37;;20847:17;20859:4;20847:11;:17::i;:::-;20836:28;;19612:1264;;;;20916:15;20901:12;:30;20886:45;;20993:22;20990:1;20974:15;:17;20973:42;20958:13;:58;20942:74;;21034:12;21027:19;;;;;;;;18808:2246;;;;;:::o;23395:1597::-;23491:7;23516:20;23539:12;;23516:35;;23562:22;23599:12;23614:3;;23599:18;;23628:16;23647:19;23664:1;23659:4;:6;23647:11;:19::i;:::-;23628:38;;23677:21;23701:13;;23677:37;;23725:30;23794:1;23789:4;:6;23784:1;23783:13;2624:3;23759:38;23725:73;;23809:823;23842:8;23831:7;23816:12;:22;23815:35;23809:823;;;23876:20;23914:8;23899:12;:23;23876:46;;23956:1;23940:12;:17;23937:205;;;24021:1;24006:12;:16;23991:31;;24049:1;24041:9;;;;24080:19;24097:1;24092:4;:6;24080:11;:19::i;:::-;24069:30;;24118:8;;;23937:205;24156:9;24186:22;24183:1;24170:12;:14;24169:39;24156:53;;24224:9;24252:1;24236:13;:17;24224:29;;24288:12;24278:7;:22;24268:32;;24374:1;24371;24369;:3;24368:7;24364:1;24351:12;:14;;;;;;24350:26;24332:14;:45;24315:62;;24408:1;24392:17;;24454:12;24439;:27;24424:42;;24493:1;24488:4;:6;24481:13;;24571:1;24566:4;:6;24561:1;24560:13;2624:3;24536:38;24510:65;;24601:19;24618:1;24613:4;:6;24601:11;:19::i;:::-;24590:30;;23809:823;;;;;;24655:1;24645:7;:11;24642:311;;;24683:9;24724:22;24721:1;24713:7;:9;24712:34;24695:13;:52;24683:64;;24830:22;24827:1;24819:7;:9;24818:34;24814:1;24812;:3;24811:42;24807:1;24799:7;:9;;;;;;24798:56;24780:14;:75;24763:92;;24901:7;24886:12;:22;24871:37;;24940:1;24924:17;;24642:311;;24970:14;24963:21;;;;;;;;23395:1597;;;:::o;12636:261::-;12769:13;12693:19;:72;12721:42;12693:72;;;;;;;;;;;;;;;;:89;;;;;;;;;;;12830:42;12798:91;;12815:4;12798:91;;;12875:13;12798:91;;;;;;;;;;;;;;;;;;12636:261;:::o;25004:1641::-;25083:7;25108:20;25131:12;;25108:35;;25154:22;25191:12;25206:3;;25191:18;;25220:16;25239:19;25256:1;25251:4;:6;25239:11;:19::i;:::-;25220:38;;25269:21;25293:13;;25269:37;;25317:30;25386:1;25381:4;:6;25376:1;25375:13;2624:3;25351:38;25317:73;;25401:823;25434:8;25423:7;25408:12;:22;25407:35;25401:823;;;25468:20;25506:8;25491:12;:23;25468:46;;25548:1;25532:12;:17;25529:205;;;25613:1;25598:12;:16;25583:31;;25641:1;25633:9;;;;25672:19;25689:1;25684:4;:6;25672:11;:19::i;:::-;25661:30;;25710:8;;;25529:205;25748:9;25778:22;25775:1;25762:12;:14;25761:39;25748:53;;25816:9;25844:1;25828:13;:17;25816:29;;25880:12;25870:7;:22;25860:32;;25966:1;25963;25961;:3;25960:7;25956:1;25943:12;:14;;;;;;25942:26;25924:14;:45;25907:62;;26000:1;25984:17;;26046:12;26031;:27;26016:42;;26085:1;26080:4;:6;26073:13;;26163:1;26158:4;:6;26153:1;26152:13;2624:3;26128:38;26102:65;;26193:19;26210:1;26205:4;:6;26193:11;:19::i;:::-;26182:30;;25401:823;;;;;;26247:1;26237:7;:11;26234:311;;;26275:9;26316:22;26313:1;26305:7;:9;26304:34;26287:13;:52;26275:64;;26422:22;26419:1;26411:7;:9;26410:34;26406:1;26404;:3;26403:42;26399:1;26391:7;:9;;;;;;26390:56;26372:14;:75;26355:92;;26493:7;26478:12;:22;26463:37;;26532:1;26516:17;;26234:311;;26561:4;26555:3;:10;;;;26592:13;26576;:29;;;;26623:14;26616:21;;;;;;;;25004:1641;;;:::o;17814:983::-;17880:7;17920:4;17910:7;:14;;;;;;17899:26;;17949:2;17939:7;:12;;:28;;;;;17964:3;17955:7;:12;17939:28;17936:93;;;18000:14;18015:1;18000:17;;;;;;;;;17993:24;;;;17936:93;18052:3;18042:7;:13;;:29;;;;;18068:3;18059:7;:12;18042:29;18039:94;;;18104:14;18119:1;18104:17;;;;;;;;;18097:24;;;;18039:94;18156:3;18146:7;:13;;:30;;;;;18173:3;18163:7;:13;18146:30;18143:95;;;18209:14;18224:1;18209:17;;;;;;;;;18202:24;;;;18143:95;18262:3;18251:7;:14;;:32;;;;;18279:4;18269:7;:14;18251:32;18248:97;;;18316:14;18331:1;18316:17;;;;;;;;;18309:24;;;;18248:97;18369:4;18358:7;:15;;:33;;;;;18387:4;18377:7;:14;18358:33;18355:98;;;18424:14;18439:1;18424:17;;;;;;;;;18417:24;;;;18355:98;18477:4;18466:7;:15;;:33;;;;;18495:4;18485:7;:14;18466:33;18463:98;;;18532:14;18547:1;18532:17;;;;;;;;;18525:24;;;;18463:98;18585:4;18574:7;:15;;:34;;;;;18603:5;18593:7;:15;18574:34;18571:99;;;18641:14;18656:1;18641:17;;;;;;;;;18634:24;;;;18571:99;18694:5;18683:7;:16;18680:81;;18732:14;18747:1;18732:17;;;;;;;;;18725:24;;;;18680:81;18778:11;;18771:18;;17814:983;;;;:::o;27208:198::-;27253:6;27272;27291:1;27286;27282;:5;27281:11;;;;;;27272:20;;27307:1;27303:5;;27319:80;27330:1;27326;:5;27319:80;;;27352:1;27348:5;;27386:1;27381;27377;27373;:5;;;;;;:9;27372:15;;;;;;27368:19;;27319:80;;;27208:198;;;;:::o;26657:539::-;26729:7;26765:1;26757:4;:9;26754:74;;26811:4;26800:8;:15;26792:24;;;;26754:74;26848:1;26841:4;:8;:22;;;;;26861:2;26853:4;:10;;26841:22;26838:103;;;26919:8;26916:1;26911:4;:6;26910:17;26897:9;:31;26889:40;;;;26838:103;26961:2;26954:4;:9;:23;;;;;26975:2;26967:4;:10;;26954:23;26951:105;;;27034:8;27030:2;27025:4;:7;27024:18;27011:9;:32;27003:41;;;;26951:105;27076:2;27069:4;:9;:23;;;;;27090:2;27082:4;:10;;27069:23;27066:104;;;27148:8;27144:2;27139:4;:7;27138:18;27126:9;:31;27118:40;;;;27066:104;27187:1;27180:8;;26657:539;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://b12d85133ae00bb4ece1bb0a36ea43698ad3d5c673661bccd9740c7f7d502018
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.