ETH Price: $2,966.77 (-4.06%)
Gas: 12 Gwei

Token

BlueSparrowToken (BlueSparrow)
 

Overview

Max Total Supply

100,000,000,000,000,000 BlueSparrow

Holders

6,126 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
BlueSparrow

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 6 of 6: TokenContract.sol
// SPDX-License-Identifier: MIT

// Website : https://bluesparrowtoken.com/
// Discord : https://discord.gg/M4wJ5zwe
// Twitter : http://twitter.com/BlueSparrowETH
// Telegram: https://t.me/BlueSparrowToken


pragma solidity  ^0.8.7;

import "./Context.sol";
import "./IERC20.sol";
import "./Ownable.sol";
import "./Address.sol";
import "./SafeMath.sol";


//An interface contract to interact with VRF random number generate "chainLink"

interface RNG{
    function getRandomNumber() external;
    function randomResult() view external returns (uint256);
}

contract BlueSparrow is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    

  
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcluded;
    
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 10**17 * 10**9 ;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "BlueSparrowToken";
    string private _symbol = "BlueSparrow";
    uint8  private _decimals = 9;

           
    //Array for store list of eligible holders for draw
    
    address[] public _DrawHolders;                             


    //To make sure not duplicate an address in draw holders
    
    mapping (address => bool) private _ExistInDrawHolders;


    // fees; Total fee = 5%

    uint256 private _marketingFee    = 50;         // 0.5%     marketing fee 
    uint256 private _burnFee         = 100;        // 1%       burn 
    uint256 private _charityFee      = 50;         // 0.5%     charity
    uint256 private _reward          = 200;        // 2%       Public reward
    uint256 private _draw            = 45;         // 0.45%    daily and weekly draw
    uint256 private _mounthlyDraw    = 5;          // 0.05%    mounthly draw
    uint256 private _devFee          = 50;         // 0.5%     dev wallet        




    // Addresses for store fee & burn Address
     
    address public  marketingWallet;
    address public  charityWallet;
    address public  mounthlyDrawWallet;             // An address that Accumulate fee for mounthly draw
    address public  devWallet;
    address private immutable burnAddress = 0x000000000000000000000000000000000000dEaD;
    

    // A struct data type for fees
    
    struct feeData {

        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rReward;
        uint256 rMarketing;
        uint256 rBurn;
        uint256 rDraw;
        uint256 rCharity;
        uint256 rDev;
        uint256 rMounthlyDraw;

        uint256 tAmount;
        uint256 tTransferAmount;
        uint256 tReward;
        uint256 tMarketing;
        uint256 tBurn;
        uint256 tDraw;
        uint256 tCharity;
        uint256 tDev;
        uint256 tMounthlyDraw;

        uint256 currentRate;
    } 
      
    // Maximum transaction amount  
     
    uint256 public _maxTxAmount; 

    // Minimum number of token to be eligible for draw 

    uint256 public _minCoAmount;
    
    
    // RNG Instance 
    
    RNG _RNG;

    //Constructor that feed VRF contract Address, and et.

    constructor(address VRFcontractAddress, address _marketingWallet, address _charityWallet, address _mounthlyDrawWallet, address _devWallet, uint256 minCoAmount)  {
           
       _rOwned[_msgSender()] = _rTotal;
       emit Transfer(address(0), _msgSender(), _tTotal);

       _RNG = RNG(VRFcontractAddress);

       marketingWallet      = _marketingWallet;
       charityWallet        = _charityWallet;
       mounthlyDrawWallet   = _mounthlyDrawWallet;
       devWallet            = _devWallet;
       _minCoAmount         = minCoAmount;
 
    }   
   
      
   

    //the ERC20 function's 

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    //Set minimum number of token for draw

    function setMinCoAmount(uint256 minCoAmount) external onlyOwner(){
        _minCoAmount = minCoAmount.mul(10**9);
    }
    
    
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**4
        );
    }

    function changeAddresses(address _marketingWallet, address _charityWallet, address _mounthlyDrawWallet, address _devWallet ) public onlyOwner() {
        marketingWallet      = _marketingWallet;
        charityWallet        = _charityWallet;
        mounthlyDrawWallet   = _mounthlyDrawWallet;
        devWallet            = _devWallet;
    }

    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        feeData memory fd = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(fd.rAmount);
        _rTotal = _rTotal.sub(fd.rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

   function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
           feeData memory fd = _getValues(tAmount);
            return fd.rAmount;
        } else {
            feeData memory fd = _getValues(tAmount);
            return fd.rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    } 

    function excludeAccount(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

   function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    } 

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

   function takeTransactionFee(address to, uint256 tAmount, uint256 currentRate) private {
        if (tAmount <= 0) { return; }

        uint256 rAmount = tAmount.mul(currentRate);
        _rOwned[to] = _rOwned[to].add(rAmount);
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to].add(tAmount);
        }
    }

    function calculateFee(uint256 amount, uint256 _fee) private pure returns (uint256) {
        return amount.mul(_fee).div(10000);
    }

    // note:the draw mechanism will randomly choose 7 addresses from eligible holders

         

    uint256 public randomResult;                       // Store VRF random number 
    uint256 public _accumulatedDailyReward;            // Accumulated Daily reward 
    uint256 public _accumulatedWeeklyReward;           // Accumulated weekly Reward
    uint256[] private _indexOfWinners ;                // Index of winner 
    address[] public _Winners;                         // Daily and weekly Winners addresses
    

    function takeDrawFee(uint256 tDraw) private {

        _accumulatedDailyReward  = _accumulatedDailyReward.add(tDraw.mul(7).div(9));
        _accumulatedWeeklyReward = _accumulatedWeeklyReward.add(tDraw.mul(2).div(9));
    }

     
   //An instance of RNG contract interface
   
   
    
    function getRandomNumber() public onlyOwner() {
        _RNG.getRandomNumber();
    }

    function getResult() public onlyOwner() returns(uint256){
        return randomResult = _RNG.randomResult();
    }

    function pickIndexOfWinners() public onlyOwner() {

       uint256[] memory indexOfWinners = new uint256[](7);
     
        for (uint256 i = 0; i < 7; i++) {
          indexOfWinners[i] = (uint256(keccak256(abi.encode(randomResult, i)))% _DrawHolders.length);
        }

        _indexOfWinners = indexOfWinners;
    } 
    

    function pickWinners() public onlyOwner() {
        address[] memory Winners = new address[](7);
        
        for (uint256 i= 0; i < 7; i++){
            Winners[i] = _DrawHolders[_indexOfWinners[i]];
        }
        
        _Winners = Winners;
        delete _indexOfWinners;
     }
    
    
    //Transfer Reward to Daily Winners
        
    function _enterDaWinReward() public onlyOwner() {  
        
        uint256 currentRate =  _getRate();
        
        for (uint256 i = 0; i < 7; i++) {
         _rOwned[_Winners[i]] = _rOwned[_Winners[i]].add(_accumulatedDailyReward.div(7).mul(currentRate));
        }
        
        delete _Winners;
        _accumulatedDailyReward = 0;
    }

    //Transfer Reward to Weekly Winners

    function _enterWeWinReward() public onlyOwner() {
        
        uint256 currentRate =  _getRate();
        
         for (uint256 i = 0; i < 7; i++) {
         _rOwned[_Winners[i]] = _rOwned[_Winners[i]].add(_accumulatedWeeklyReward.div(7).mul(currentRate));
          
        }
        
        delete _Winners;
        _accumulatedWeeklyReward = 0;
        
        
    }  
     

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(sender != owner() && recipient != owner())
          require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    
    
    //Exclude from draw array

     function ExcludeFEA (address _address) private {
         for (uint256 j = 0; j < _DrawHolders.length; j++) {
                  if( _DrawHolders[j] == _address){
                  _DrawHolders[j] = _DrawHolders[_DrawHolders.length - 1];
                  _ExistInDrawHolders[_address] = false;
                  _DrawHolders.pop();
                 break;
            }
        }
    }
                    
    // Once array stored, "checkState" will check the eligible account for any further transfer               
     
       
    address[2] _addresses;
    
    function checkState() private {
            
        for(uint256 i=0; i<2; i++){

            if( _minCoAmount <= tokenFromReflection(_rOwned[_addresses[i]]) && !_ExistInDrawHolders[_addresses[i]]) {
               
                _DrawHolders.push(_addresses[i]);
                _ExistInDrawHolders[_addresses[i]] = true;
               } 
                 else if (tokenFromReflection(_rOwned[_addresses[i]]) < _minCoAmount && _ExistInDrawHolders[_addresses[i]]){
                             ExcludeFEA(_addresses[i]);               
            } 
        } 
        delete _addresses;
    }
    

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {

        feeData memory fd = _getValues(tAmount);
        
        
        _rOwned[sender] = _rOwned[sender].sub(fd.rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(fd.rTransferAmount);    

        takeTransactionFee(address(charityWallet), fd.tCharity, fd.currentRate);
        takeTransactionFee(address(marketingWallet), fd.tMarketing, fd.currentRate);
        takeTransactionFee(address(burnAddress), fd.tBurn, fd.currentRate); 
        takeTransactionFee(address(mounthlyDrawWallet), fd.tDraw, fd.currentRate);
        takeTransactionFee(address(devWallet), fd.tDev, fd.currentRate);

        takeDrawFee(fd.tDraw);

        _reflectFee(fd.rReward, fd.tReward);
        emit Transfer(sender, recipient, fd.tTransferAmount);

        //check and update state of sender & recipient
        
        _addresses[0] = sender;
        _addresses[1] = recipient;
        
        checkState();
        
    }  

     
           


    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
      feeData memory fd = _getValues(tAmount);

        _rOwned[sender] = _rOwned[sender].sub(fd.rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(fd.tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(fd.rTransferAmount);

        takeTransactionFee(address(charityWallet), fd.tCharity, fd.currentRate);
        takeTransactionFee(address(marketingWallet), fd.tMarketing, fd.currentRate);
        takeTransactionFee(address(burnAddress), fd.tBurn, fd.currentRate); 
        takeTransactionFee(address(mounthlyDrawWallet), fd.tMounthlyDraw, fd.currentRate);
        takeTransactionFee(address(devWallet), fd.tDev, fd.currentRate);


        takeDrawFee(fd.tDraw);

        _reflectFee(fd.rReward, fd.tReward);

        emit Transfer(sender, recipient, fd.tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
      
        feeData memory fd = _getValues(tAmount);

        _tOwned[sender] = _tOwned[sender].sub(fd.tAmount);
        _rOwned[sender] = _rOwned[sender].sub(fd.rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(fd.rTransferAmount);

        takeTransactionFee(address(charityWallet), fd.tCharity, fd.currentRate);
        takeTransactionFee(address(marketingWallet), fd.tMarketing, fd.currentRate);
        takeTransactionFee(address(burnAddress), fd.tBurn, fd.currentRate); 
        takeTransactionFee(address(mounthlyDrawWallet), fd.tMounthlyDraw, fd.currentRate);
        takeTransactionFee(address(devWallet), fd.tDev, fd.currentRate);


        takeDrawFee(fd.tDraw);

        _reflectFee(fd.rReward, fd.tReward);
        
        emit Transfer(sender, recipient, fd.tTransferAmount);

    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        
        feeData memory fd  = _getValues(tAmount);

        _tOwned[sender]    = _tOwned[sender].sub(fd.tAmount);
        _rOwned[sender]    = _rOwned[sender].sub(fd.rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(fd.tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(fd.rTransferAmount);

        takeTransactionFee(address(charityWallet), fd.tCharity, fd.currentRate);
        takeTransactionFee(address(marketingWallet), fd.tMarketing, fd.currentRate);
        takeTransactionFee(address(burnAddress), fd.tBurn, fd.currentRate); 
        takeTransactionFee(address(mounthlyDrawWallet), fd.tMounthlyDraw, fd.currentRate);
        takeTransactionFee(address(devWallet), fd.tDev, fd.currentRate);


        takeDrawFee(fd.tDraw);

        _reflectFee(fd.rReward, fd.tReward);
        
        emit Transfer(sender, recipient, fd.tTransferAmount);
    }

    function _reflectFee(uint256 rReward, uint256 tReward) private {
        _rTotal = _rTotal.sub(rReward);
        _tFeeTotal = _tFeeTotal.add(tReward);
    }

    function _getValues(uint256 tAmount) private view returns (feeData memory) {
        feeData memory intermediate = _getTValues(tAmount);
        uint256 currentRate         =  _getRate();
        feeData memory res          = _getRValues(intermediate, currentRate);
        return res;
    }

    function _getTValues(uint256 tAmount) private view returns (feeData memory) {
        feeData memory fd;
        fd.tAmount          = tAmount;
        fd.tReward          = calculateFee(tAmount, _reward);
        fd.tCharity         = calculateFee(tAmount, _charityFee);
        fd.tMarketing       = calculateFee(tAmount, _marketingFee);
        fd.tBurn            = calculateFee(tAmount, _burnFee);
        fd.tDraw            = calculateFee(tAmount, _draw);
        fd.tMounthlyDraw    = calculateFee(tAmount, _mounthlyDraw);
        fd.tDev             = calculateFee(tAmount, _devFee);

        fd.tTransferAmount  = tAmount.sub(fd.tReward);
        fd.tTransferAmount  = fd.tTransferAmount.sub(fd.tCharity);
        fd.tTransferAmount  = fd.tTransferAmount.sub(fd.tMarketing);
        fd.tTransferAmount  = fd.tTransferAmount.sub(fd.tBurn);
        fd.tTransferAmount  = fd.tTransferAmount.sub(fd.tDraw);
        fd.tTransferAmount  = fd.tTransferAmount.sub(fd.tMounthlyDraw);
        fd.tTransferAmount  = fd.tTransferAmount.sub(fd.tDev);
        return fd;
        
    }

    function _getRValues(feeData memory fd, uint256 currentRate) private pure returns (feeData memory) {

        fd.currentRate     = currentRate;
        fd.rAmount         = fd.tAmount.mul(fd.currentRate);
        fd.rReward         = fd.tReward.mul(fd.currentRate);
        fd.rCharity        = fd.tCharity.mul(fd.currentRate);
        fd.rMarketing      = fd.tMarketing.mul(fd.currentRate);
        fd.rBurn           = fd.tBurn.mul(fd.currentRate);
        fd.rDraw           = fd.tDraw.mul(fd.currentRate);
        fd.rMounthlyDraw   = fd.tMounthlyDraw.mul(fd.currentRate);
        fd.rDev            = fd.tDev.mul(fd.currentRate);

        fd.rTransferAmount   = fd.rAmount.sub(fd.rReward);
        fd.rTransferAmount   = fd.rTransferAmount.sub(fd.rCharity);
        fd.rTransferAmount   = fd.rTransferAmount.sub(fd.rMarketing);
        fd.rTransferAmount   = fd.rTransferAmount.sub(fd.rBurn);
        fd.rTransferAmount   = fd.rTransferAmount.sub(fd.rDraw);
        fd.rTransferAmount   = fd.rTransferAmount.sub(fd.rMounthlyDraw);
        fd.rTransferAmount   = fd.rTransferAmount.sub(fd.rDev);

        return fd;
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    } 

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    } 

}

File 1 of 6: Address.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal 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);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 6: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 6: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 6: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "./Context.sol";

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor ()  {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 5 of 6: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"VRFcontractAddress","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_charityWallet","type":"address"},{"internalType":"address","name":"_mounthlyDrawWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"uint256","name":"minCoAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_DrawHolders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_Winners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_accumulatedDailyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_accumulatedWeeklyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enterDaWinReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_enterWeWinReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minCoAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_charityWallet","type":"address"},{"internalType":"address","name":"_mounthlyDrawWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"changeAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRandomNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getResult","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mounthlyDrawWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pickIndexOfWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pickWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"randomResult","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minCoAmount","type":"uint256"}],"name":"setMinCoAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526a52b7d2dcc80cd2e40000006000196200001f9190620006b5565b6000196200002e919062000606565b6006556040518060400160405280601081526020017f426c756553706172726f77546f6b656e00000000000000000000000000000000815250600890805190602001906200007e9291906200045e565b506040518060400160405280600b81526020017f426c756553706172726f7700000000000000000000000000000000000000000081525060099080519060200190620000cc9291906200045e565b506009600a60006101000a81548160ff021916908360ff1602179055506032600d556064600e556032600f5560c8601055602d6011556005601255603260135561dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200015157600080fd5b50604051620067133803806200671383398181016040528101906200017791906200053c565b6000620001896200045660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600654600160006200023e6200045660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200028c6200045660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6a52b7d2dcc80cd2e4000000604051620002f69190620005e9565b60405180910390a385601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601981905550505050505050620007b3565b600033905090565b8280546200046c906200067f565b90600052602060002090601f016020900481019282620004905760008555620004dc565b82601f10620004ab57805160ff1916838001178555620004dc565b82800160010185558215620004dc579182015b82811115620004db578251825591602001919060010190620004be565b5b509050620004eb9190620004ef565b5090565b5b808211156200050a576000816000905550600101620004f0565b5090565b6000815190506200051f816200077f565b92915050565b600081519050620005368162000799565b92915050565b60008060008060008060c087890312156200055c576200055b6200077a565b5b60006200056c89828a016200050e565b96505060206200057f89828a016200050e565b95505060406200059289828a016200050e565b9450506060620005a589828a016200050e565b9350506080620005b889828a016200050e565b92505060a0620005cb89828a0162000525565b9150509295509295509295565b620005e38162000675565b82525050565b6000602082019050620006006000830184620005d8565b92915050565b6000620006138262000675565b9150620006208362000675565b925082821015620006365762000635620006ed565b5b828203905092915050565b60006200064e8262000655565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200069857607f821691505b60208210811415620006af57620006ae6200074b565b5b50919050565b6000620006c28262000675565b9150620006cf8362000675565b925082620006e257620006e16200071c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200078a8162000641565b81146200079657600080fd5b50565b620007a48162000675565b8114620007b057600080fd5b50565b60805160601c615f2c620007e76000396000818161364b015281816139c601528181613ca7015261416e0152615f2c6000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80637f9f534e11610146578063cba0e996116100c3578063dd62ed3e11610087578063dd62ed3e146106a6578063de292789146106d6578063f2cc0c18146106f4578063f2fde38b14610710578063f829d0991461072c578063f84354f11461075c57610253565b8063cba0e99614610628578063d543dbeb14610658578063da49c75314610674578063dbdff2c114610692578063dc07820f1461069c57610253565b8063a457c2d71161010a578063a457c2d714610584578063a9059cbb146105b4578063b58f745a146105e4578063bd44c36714610602578063c1862d5e1461061e57610253565b80637f9f534e146104f057806384baeb89146104fa5780638da5cb5b1461052a5780638ea5220f1461054857806395d89b411461056657610253565b8063313ce567116101d457806370a082311161019857806370a082311461045c578063715018a61461048c57806375f0a874146104965780637b208769146104b45780637d1db4a5146104d257610253565b8063313ce567146103a257806339509351146103c057806342619f66146103f05780634549b0391461040e5780635dc768e91461043e57610253565b806318160ddd1161021b57806318160ddd146102fe5780631ecee2a21461031c578063223c4bc31461033857806323b872dd146103425780632d8381191461037257610253565b80630510ab6414610258578063053ab1821461027657806306fdde0314610292578063095ea7b3146102b057806313114a9d146102e0575b600080fd5b610260610778565b60405161026d91906156b6565b60405180910390f35b610290600480360381019061028b91906151a5565b61077e565b005b61029a6108fc565b6040516102a791906154d4565b60405180910390f35b6102ca60048036038101906102c59190615165565b61098e565b6040516102d791906154b9565b60405180910390f35b6102e86109ac565b6040516102f591906156b6565b60405180910390f35b6103066109b6565b60405161031391906156b6565b60405180910390f35b610336600480360381019061033191906150ab565b6109c9565b005b610340610b68565b005b61035c60048036038101906103579190615112565b610ce2565b60405161036991906154b9565b60405180910390f35b61038c600480360381019061038791906151a5565b610dbb565b60405161039991906156b6565b60405180910390f35b6103aa610e29565b6040516103b791906156fa565b60405180910390f35b6103da60048036038101906103d59190615165565b610e40565b6040516103e791906154b9565b60405180910390f35b6103f8610ef3565b60405161040591906156b6565b60405180910390f35b610428600480360381019061042391906151ff565b610ef9565b60405161043591906156b6565b60405180910390f35b610446610f84565b60405161045391906156b6565b60405180910390f35b6104766004803603810190610471919061503e565b610f8a565b60405161048391906156b6565b60405180910390f35b610494611075565b005b61049e6111c8565b6040516104ab919061549e565b60405180910390f35b6104bc6111ee565b6040516104c9919061549e565b60405180910390f35b6104da611214565b6040516104e791906156b6565b60405180910390f35b6104f861121a565b005b610514600480360381019061050f91906151a5565b61142c565b604051610521919061549e565b60405180910390f35b61053261146b565b60405161053f919061549e565b60405180910390f35b610550611494565b60405161055d919061549e565b60405180910390f35b61056e6114ba565b60405161057b91906154d4565b60405180910390f35b61059e60048036038101906105999190615165565b61154c565b6040516105ab91906154b9565b60405180910390f35b6105ce60048036038101906105c99190615165565b611619565b6040516105db91906154b9565b60405180910390f35b6105ec611637565b6040516105f9919061549e565b60405180910390f35b61061c600480360381019061061791906151a5565b61165d565b005b610626611712565b005b610642600480360381019061063d919061503e565b611924565b60405161064f91906154b9565b60405180910390f35b610672600480360381019061066d91906151a5565b61197a565b005b61067c611a4a565b60405161068991906156b6565b60405180910390f35b61069a611a50565b005b6106a4611b69565b005b6106c060048036038101906106bb919061506b565b611d3e565b6040516106cd91906156b6565b60405180910390f35b6106de611dc5565b6040516106eb91906156b6565b60405180910390f35b61070e6004803603810190610709919061503e565b611f06565b005b61072a6004803603810190610725919061503e565b6121ba565b005b610746600480360381019061074191906151a5565b61237c565b604051610753919061549e565b60405180910390f35b6107766004803603810190610771919061503e565b6123bb565b005b60195481565b600061078861270a565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90615696565b60405180910390fd5b600061082283612712565b905061087a8160000151600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108d6816000015160065461274c90919063ffffffff16565b6006819055506108f18360075461279690919063ffffffff16565b600781905550505050565b60606008805461090b906158ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610937906158ce565b80156109845780601f1061095957610100808354040283529160200191610984565b820191906000526020600020905b81548152906001019060200180831161096757829003601f168201915b5050505050905090565b60006109a261099b61270a565b84846127f4565b6001905092915050565b6000600754905090565b60006a52b7d2dcc80cd2e4000000905090565b6109d161270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590615616565b60405180910390fd5b83601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b610b7061270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf490615616565b60405180910390fd5b6000600767ffffffffffffffff811115610c1a57610c19615a65565b5b604051908082528060200260200182016040528015610c485781602001602082028036833780820191505090505b50905060005b6007811015610cc757600b80549050601b5482604051602001610c729291906156d1565b6040516020818303038152906040528051906020012060001c610c959190615949565b828281518110610ca857610ca7615a36565b5b6020026020010181815250508080610cbf90615900565b915050610c4e565b5080601e9080519060200190610cde929190614e14565b5050565b6000610cef8484846129bf565b610db084610cfb61270a565b610dab85604051806060016040528060288152602001615eaa60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d6161270a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e979092919063ffffffff16565b6127f4565b600190509392505050565b6000600654821115610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df990615516565b60405180910390fd5b6000610e0c612efb565b9050610e218184612f2690919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b6000610ee9610e4d61270a565b84610ee48560036000610e5e61270a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b6127f4565b6001905092915050565b601b5481565b60006a52b7d2dcc80cd2e4000000831115610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f40906155b6565b60405180910390fd5b81610f68576000610f5984612712565b90508060000151915050610f7e565b6000610f7384612712565b905080602001519150505b92915050565b601d5481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561102557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611070565b61106d600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dbb565b90505b919050565b61107d61270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190615616565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b61122261270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690615616565b60405180910390fd5b60006112b9612efb565b905060005b60078110156114125761137e6112f2836112e46007601d54612f2690919063ffffffff16565b612f7090919063ffffffff16565b60016000601f858154811061130a57611309615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b60016000601f848154811061139657611395615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061140a90615900565b9150506112be565b50601f60006114219190614e61565b6000601d8190555050565b601f818154811061143c57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600980546114c9906158ce565b80601f01602080910402602001604051908101604052809291908181526020018280546114f5906158ce565b80156115425780601f1061151757610100808354040283529160200191611542565b820191906000526020600020905b81548152906001019060200180831161152557829003601f168201915b5050505050905090565b600061160f61155961270a565b8461160a85604051806060016040528060258152602001615ed2602591396003600061158361270a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e979092919063ffffffff16565b6127f4565b6001905092915050565b600061162d61162661270a565b84846129bf565b6001905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61166561270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e990615616565b60405180910390fd5b611709633b9aca0082612f7090919063ffffffff16565b60198190555050565b61171a61270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90615616565b60405180910390fd5b60006117b1612efb565b905060005b600781101561190a576118766117ea836117dc6007601c54612f2690919063ffffffff16565b612f7090919063ffffffff16565b60016000601f858154811061180257611801615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b60016000601f848154811061188e5761188d615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061190290615900565b9150506117b6565b50601f60006119199190614e61565b6000601c8190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61198261270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0690615616565b60405180910390fd5b611a41612710611a33836a52b7d2dcc80cd2e4000000612f7090919063ffffffff16565b612f2690919063ffffffff16565b60188190555050565b601c5481565b611a5861270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90615616565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbdff2c16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b50505050565b611b7161270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590615616565b60405180910390fd5b6000600767ffffffffffffffff811115611c1b57611c1a615a65565b5b604051908082528060200260200182016040528015611c495781602001602082028036833780820191505090505b50905060005b6007811015611d1557600b601e8281548110611c6e57611c6d615a36565b5b906000526020600020015481548110611c8a57611c89615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828281518110611cc857611cc7615a36565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080611d0d90615900565b915050611c4f565b5080601f9080519060200190611d2c929190614e82565b50601e6000611d3b9190614f0c565b50565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611dcf61270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390615616565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342619f666040518163ffffffff1660e01b815260040160206040518083038186803b158015611ec457600080fd5b505afa158015611ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efc91906151d2565b601b819055905090565b611f0e61270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9290615616565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90615596565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156120fc576120b8600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dbb565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121c261270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690615616565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690615536565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b818154811061238c57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123c361270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244790615616565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d390615596565b60405180910390fd5b60005b600580549050811015612706578173ffffffffffffffffffffffffffffffffffffffff166005828154811061251757612516615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126f357600560016005805490506125729190615812565b8154811061258357612582615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481106125c2576125c1615a36565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806126b9576126b8615a07565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612706565b80806126fe90615900565b9150506124df565b5050565b600033905090565b61271a614f2d565b600061272583612feb565b90506000612731612efb565b9050600061273f83836131b5565b9050809350505050919050565b600061278e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e97565b905092915050565b60008082846127a59190615731565b9050838110156127ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e190615576565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90615676565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90615556565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129b291906156b6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2690615656565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a96906154f6565b60405180910390fd5b60008111612ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad990615636565b60405180910390fd5b612aea61146b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b585750612b2861146b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ba357601854811115612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b99906155d6565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c465750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c5b57612c568383836133ff565b612e92565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cfe5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d1357612d0e83838361377a565b612e91565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612db75750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dcc57612dc7838383613af5565b612e90565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6e5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e8357612e7e838383613e88565b612e8f565b612e8e838383613af5565b5b5b5b5b505050565b6000838311158290612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed691906154d4565b60405180910390fd5b5060008385612eee9190615812565b9050809150509392505050565b6000806000612f0861429d565b91509150612f1f8183612f2690919063ffffffff16565b9250505090565b6000612f6883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614574565b905092915050565b600080831415612f835760009050612fe5565b60008284612f9191906157b8565b9050828482612fa09190615787565b14612fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd7906155f6565b60405180910390fd5b809150505b92915050565b612ff3614f2d565b612ffb614f2d565b8281610120018181525050613012836010546145d7565b8161016001818152505061302883600f546145d7565b816101e001818152505061303e83600d546145d7565b8161018001818152505061305483600e546145d7565b816101a001818152505061306a836011546145d7565b816101c0018181525050613080836012546145d7565b81610220018181525050613096836013546145d7565b816102000181815250506130b88161016001518461274c90919063ffffffff16565b816101400181815250506130df816101e0015182610140015161274c90919063ffffffff16565b8161014001818152505061310681610180015182610140015161274c90919063ffffffff16565b8161014001818152505061312d816101a0015182610140015161274c90919063ffffffff16565b81610140018181525050613154816101c0015182610140015161274c90919063ffffffff16565b8161014001818152505061317b81610220015182610140015161274c90919063ffffffff16565b816101400181815250506131a281610200015182610140015161274c90919063ffffffff16565b8161014001818152505080915050919050565b6131bd614f2d565b81836102400181815250506131e5836102400151846101200151612f7090919063ffffffff16565b83600001818152505061320b836102400151846101600151612f7090919063ffffffff16565b836040018181525050613231836102400151846101e00151612f7090919063ffffffff16565b8360c0018181525050613257836102400151846101800151612f7090919063ffffffff16565b83606001818152505061327d836102400151846101a00151612f7090919063ffffffff16565b8360800181815250506132a3836102400151846101c00151612f7090919063ffffffff16565b8360a00181815250506132c9836102400151846102200151612f7090919063ffffffff16565b836101000181815250506132f0836102400151846102000151612f7090919063ffffffff16565b8360e00181815250506133148360400151846000015161274c90919063ffffffff16565b8360200181815250506133388360c00151846020015161274c90919063ffffffff16565b83602001818152505061335c8360600151846020015161274c90919063ffffffff16565b8360200181815250506133808360800151846020015161274c90919063ffffffff16565b8360200181815250506133a48360a00151846020015161274c90919063ffffffff16565b8360200181815250506133c9836101000151846020015161274c90919063ffffffff16565b8360200181815250506133ed8360e00151846020015161274c90919063ffffffff16565b83602001818152505082905092915050565b600061340a82612712565b9050613463816101200151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134fc8160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135958160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360f601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101e00151836102400151614608565b613646601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101800151836102400151614608565b61367b7f0000000000000000000000000000000000000000000000000000000000000000826101a00151836102400151614608565b6136b2601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102200151836102400151614608565b6136e9601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102000151836102400151614608565b6136f7816101c001516147b0565b61370a8160400151826101600151614835565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610140015160405161376c91906156b6565b60405180910390a350505050565b600061378582612712565b90506137dd8160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613877816101400151600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139108160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061398a601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101e00151836102400151614608565b6139c1601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101800151836102400151614608565b6139f67f0000000000000000000000000000000000000000000000000000000000000000826101a00151836102400151614608565b613a2d601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102200151836102400151614608565b613a64601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102000151836102400151614608565b613a72816101c001516147b0565b613a858160400151826101600151614835565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101400151604051613ae791906156b6565b60405180910390a350505050565b6000613b0082612712565b9050613b588160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bf18160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101e00151836102400151614608565b613ca2601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101800151836102400151614608565b613cd77f0000000000000000000000000000000000000000000000000000000000000000826101a00151836102400151614608565b613d0e601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101c00151836102400151614608565b613d45601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102000151836102400151614608565b613d53816101c001516147b0565b613d668160400151826101600151614835565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101400151604051613dc891906156b6565b60405180910390a3836020600060028110613de657613de5615a36565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826020600160028110613e3b57613e3a615a36565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613e8261486f565b50505050565b6000613e9382612712565b9050613eec816101200151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f858160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061401f816101400151600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b88160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614132601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101e00151836102400151614608565b614169601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101800151836102400151614608565b61419e7f0000000000000000000000000000000000000000000000000000000000000000826101a00151836102400151614608565b6141d5601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102200151836102400151614608565b61420c601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102000151836102400151614608565b61421a816101c001516147b0565b61422d8160400151826101600151614835565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610140015160405161428f91906156b6565b60405180910390a350505050565b6000806000600654905060006a52b7d2dcc80cd2e4000000905060005b600580549050811015614525578260016000600584815481106142e0576142df615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806143ce575081600260006005848154811061436657614365615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156143ee576006546a52b7d2dcc80cd2e400000094509450505050614570565b61447e600160006005848154811061440957614408615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461274c90919063ffffffff16565b9250614510600260006005848154811061449b5761449a615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361274c90919063ffffffff16565b9150808061451d90615900565b9150506142ba565b506145466a52b7d2dcc80cd2e4000000600654612f2690919063ffffffff16565b821015614567576006546a52b7d2dcc80cd2e4000000935093505050614570565b81819350935050505b9091565b600080831182906145bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145b291906154d4565b60405180910390fd5b50600083856145ca9190615787565b9050809150509392505050565b60006146006127106145f28486612f7090919063ffffffff16565b612f2690919063ffffffff16565b905092915050565b60008211614615576147ab565b600061462a8284612f7090919063ffffffff16565b905061467e81600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147a95761476583600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b505050565b6147eb6147da60096147cc600785612f7090919063ffffffff16565b612f2690919063ffffffff16565b601c5461279690919063ffffffff16565b601c8190555061482c61481b600961480d600285612f7090919063ffffffff16565b612f2690919063ffffffff16565b601d5461279690919063ffffffff16565b601d8190555050565b61484a8260065461274c90919063ffffffff16565b6006819055506148658160075461279690919063ffffffff16565b6007819055505050565b60005b6002811015614c1a576148f8600160006020846002811061489657614895615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dbb565b601954111580156149885750600c60006020836002811061491c5761491b615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15614ab757600b602082600281106149a3576149a2615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c600060208460028110614a3f57614a3e615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614c07565b601954614b376001600060208560028110614ad557614ad4615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dbb565b108015614bc25750600c600060208360028110614b5757614b56615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15614c0657614c0560208260028110614bde57614bdd615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614c2b565b5b5b8080614c1290615900565b915050614872565b5060206000614c299190614fbf565b565b60005b600b80549050811015614e10578173ffffffffffffffffffffffffffffffffffffffff16600b8281548110614c6657614c65615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614dfd57600b6001600b80549050614cc19190615812565b81548110614cd257614cd1615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b8281548110614d1157614d10615a36565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b805480614dc357614dc2615a07565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055614e10565b8080614e0890615900565b915050614c2e565b5050565b828054828255906000526020600020908101928215614e50579160200282015b82811115614e4f578251825591602001919060010190614e34565b5b509050614e5d9190614fcd565b5090565b5080546000825590600052602060002090810190614e7f9190614fcd565b50565b828054828255906000526020600020908101928215614efb579160200282015b82811115614efa5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190614ea2565b5b509050614f089190614fcd565b5090565b5080546000825590600052602060002090810190614f2a9190614fcd565b50565b604051806102600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506000815560010160009055565b5b80821115614fe6576000816000905550600101614fce565b5090565b600081359050614ff981615e64565b92915050565b60008135905061500e81615e7b565b92915050565b60008135905061502381615e92565b92915050565b60008151905061503881615e92565b92915050565b60006020828403121561505457615053615a94565b5b600061506284828501614fea565b91505092915050565b6000806040838503121561508257615081615a94565b5b600061509085828601614fea565b92505060206150a185828601614fea565b9150509250929050565b600080600080608085870312156150c5576150c4615a94565b5b60006150d387828801614fea565b94505060206150e487828801614fea565b93505060406150f587828801614fea565b925050606061510687828801614fea565b91505092959194509250565b60008060006060848603121561512b5761512a615a94565b5b600061513986828701614fea565b935050602061514a86828701614fea565b925050604061515b86828701615014565b9150509250925092565b6000806040838503121561517c5761517b615a94565b5b600061518a85828601614fea565b925050602061519b85828601615014565b9150509250929050565b6000602082840312156151bb576151ba615a94565b5b60006151c984828501615014565b91505092915050565b6000602082840312156151e8576151e7615a94565b5b60006151f684828501615029565b91505092915050565b6000806040838503121561521657615215615a94565b5b600061522485828601615014565b925050602061523585828601614fff565b9150509250929050565b61524881615846565b82525050565b61525781615858565b82525050565b600061526882615715565b6152728185615720565b935061528281856020860161589b565b61528b81615a99565b840191505092915050565b60006152a3602383615720565b91506152ae82615aaa565b604082019050919050565b60006152c6602a83615720565b91506152d182615af9565b604082019050919050565b60006152e9602683615720565b91506152f482615b48565b604082019050919050565b600061530c602283615720565b915061531782615b97565b604082019050919050565b600061532f601b83615720565b915061533a82615be6565b602082019050919050565b6000615352601b83615720565b915061535d82615c0f565b602082019050919050565b6000615375601f83615720565b915061538082615c38565b602082019050919050565b6000615398602883615720565b91506153a382615c61565b604082019050919050565b60006153bb602183615720565b91506153c682615cb0565b604082019050919050565b60006153de602083615720565b91506153e982615cff565b602082019050919050565b6000615401602983615720565b915061540c82615d28565b604082019050919050565b6000615424602583615720565b915061542f82615d77565b604082019050919050565b6000615447602483615720565b915061545282615dc6565b604082019050919050565b600061546a602c83615720565b915061547582615e15565b604082019050919050565b61548981615884565b82525050565b6154988161588e565b82525050565b60006020820190506154b3600083018461523f565b92915050565b60006020820190506154ce600083018461524e565b92915050565b600060208201905081810360008301526154ee818461525d565b905092915050565b6000602082019050818103600083015261550f81615296565b9050919050565b6000602082019050818103600083015261552f816152b9565b9050919050565b6000602082019050818103600083015261554f816152dc565b9050919050565b6000602082019050818103600083015261556f816152ff565b9050919050565b6000602082019050818103600083015261558f81615322565b9050919050565b600060208201905081810360008301526155af81615345565b9050919050565b600060208201905081810360008301526155cf81615368565b9050919050565b600060208201905081810360008301526155ef8161538b565b9050919050565b6000602082019050818103600083015261560f816153ae565b9050919050565b6000602082019050818103600083015261562f816153d1565b9050919050565b6000602082019050818103600083015261564f816153f4565b9050919050565b6000602082019050818103600083015261566f81615417565b9050919050565b6000602082019050818103600083015261568f8161543a565b9050919050565b600060208201905081810360008301526156af8161545d565b9050919050565b60006020820190506156cb6000830184615480565b92915050565b60006040820190506156e66000830185615480565b6156f36020830184615480565b9392505050565b600060208201905061570f600083018461548f565b92915050565b600081519050919050565b600082825260208201905092915050565b600061573c82615884565b915061574783615884565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561577c5761577b61597a565b5b828201905092915050565b600061579282615884565b915061579d83615884565b9250826157ad576157ac6159a9565b5b828204905092915050565b60006157c382615884565b91506157ce83615884565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158075761580661597a565b5b828202905092915050565b600061581d82615884565b915061582883615884565b92508282101561583b5761583a61597a565b5b828203905092915050565b600061585182615864565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156158b957808201518184015260208101905061589e565b838111156158c8576000848401525b50505050565b600060028204905060018216806158e657607f821691505b602082108114156158fa576158f96159d8565b5b50919050565b600061590b82615884565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561593e5761593d61597a565b5b600182019050919050565b600061595482615884565b915061595f83615884565b92508261596f5761596e6159a9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b615e6d81615846565b8114615e7857600080fd5b50565b615e8481615858565b8114615e8f57600080fd5b50565b615e9b81615884565b8114615ea657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b3d6256c48fe6fcc106aca14bf66c21769c212a76d65e8310f9e605aefa1789e64736f6c63430008070033000000000000000000000000da7aaa575950c95e370c292872f8fa0689ebb8e1000000000000000000000000a6f368fc6f4f3f7bbe224b392c50abc1d585f083000000000000000000000000f14b674507390bef4435386a81f7bc4d55386f210000000000000000000000002ca76f9c0d770ce8698f8b5c05c4ecdf5181c72e0000000000000000000000001f054a5e9ac34abd49a3c02078dff1eb9ccb83cf00000000000000000000000000000000000000000000001b1ae4d6e2ef500000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102535760003560e01c80637f9f534e11610146578063cba0e996116100c3578063dd62ed3e11610087578063dd62ed3e146106a6578063de292789146106d6578063f2cc0c18146106f4578063f2fde38b14610710578063f829d0991461072c578063f84354f11461075c57610253565b8063cba0e99614610628578063d543dbeb14610658578063da49c75314610674578063dbdff2c114610692578063dc07820f1461069c57610253565b8063a457c2d71161010a578063a457c2d714610584578063a9059cbb146105b4578063b58f745a146105e4578063bd44c36714610602578063c1862d5e1461061e57610253565b80637f9f534e146104f057806384baeb89146104fa5780638da5cb5b1461052a5780638ea5220f1461054857806395d89b411461056657610253565b8063313ce567116101d457806370a082311161019857806370a082311461045c578063715018a61461048c57806375f0a874146104965780637b208769146104b45780637d1db4a5146104d257610253565b8063313ce567146103a257806339509351146103c057806342619f66146103f05780634549b0391461040e5780635dc768e91461043e57610253565b806318160ddd1161021b57806318160ddd146102fe5780631ecee2a21461031c578063223c4bc31461033857806323b872dd146103425780632d8381191461037257610253565b80630510ab6414610258578063053ab1821461027657806306fdde0314610292578063095ea7b3146102b057806313114a9d146102e0575b600080fd5b610260610778565b60405161026d91906156b6565b60405180910390f35b610290600480360381019061028b91906151a5565b61077e565b005b61029a6108fc565b6040516102a791906154d4565b60405180910390f35b6102ca60048036038101906102c59190615165565b61098e565b6040516102d791906154b9565b60405180910390f35b6102e86109ac565b6040516102f591906156b6565b60405180910390f35b6103066109b6565b60405161031391906156b6565b60405180910390f35b610336600480360381019061033191906150ab565b6109c9565b005b610340610b68565b005b61035c60048036038101906103579190615112565b610ce2565b60405161036991906154b9565b60405180910390f35b61038c600480360381019061038791906151a5565b610dbb565b60405161039991906156b6565b60405180910390f35b6103aa610e29565b6040516103b791906156fa565b60405180910390f35b6103da60048036038101906103d59190615165565b610e40565b6040516103e791906154b9565b60405180910390f35b6103f8610ef3565b60405161040591906156b6565b60405180910390f35b610428600480360381019061042391906151ff565b610ef9565b60405161043591906156b6565b60405180910390f35b610446610f84565b60405161045391906156b6565b60405180910390f35b6104766004803603810190610471919061503e565b610f8a565b60405161048391906156b6565b60405180910390f35b610494611075565b005b61049e6111c8565b6040516104ab919061549e565b60405180910390f35b6104bc6111ee565b6040516104c9919061549e565b60405180910390f35b6104da611214565b6040516104e791906156b6565b60405180910390f35b6104f861121a565b005b610514600480360381019061050f91906151a5565b61142c565b604051610521919061549e565b60405180910390f35b61053261146b565b60405161053f919061549e565b60405180910390f35b610550611494565b60405161055d919061549e565b60405180910390f35b61056e6114ba565b60405161057b91906154d4565b60405180910390f35b61059e60048036038101906105999190615165565b61154c565b6040516105ab91906154b9565b60405180910390f35b6105ce60048036038101906105c99190615165565b611619565b6040516105db91906154b9565b60405180910390f35b6105ec611637565b6040516105f9919061549e565b60405180910390f35b61061c600480360381019061061791906151a5565b61165d565b005b610626611712565b005b610642600480360381019061063d919061503e565b611924565b60405161064f91906154b9565b60405180910390f35b610672600480360381019061066d91906151a5565b61197a565b005b61067c611a4a565b60405161068991906156b6565b60405180910390f35b61069a611a50565b005b6106a4611b69565b005b6106c060048036038101906106bb919061506b565b611d3e565b6040516106cd91906156b6565b60405180910390f35b6106de611dc5565b6040516106eb91906156b6565b60405180910390f35b61070e6004803603810190610709919061503e565b611f06565b005b61072a6004803603810190610725919061503e565b6121ba565b005b610746600480360381019061074191906151a5565b61237c565b604051610753919061549e565b60405180910390f35b6107766004803603810190610771919061503e565b6123bb565b005b60195481565b600061078861270a565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90615696565b60405180910390fd5b600061082283612712565b905061087a8160000151600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108d6816000015160065461274c90919063ffffffff16565b6006819055506108f18360075461279690919063ffffffff16565b600781905550505050565b60606008805461090b906158ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610937906158ce565b80156109845780601f1061095957610100808354040283529160200191610984565b820191906000526020600020905b81548152906001019060200180831161096757829003601f168201915b5050505050905090565b60006109a261099b61270a565b84846127f4565b6001905092915050565b6000600754905090565b60006a52b7d2dcc80cd2e4000000905090565b6109d161270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590615616565b60405180910390fd5b83601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b610b7061270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf490615616565b60405180910390fd5b6000600767ffffffffffffffff811115610c1a57610c19615a65565b5b604051908082528060200260200182016040528015610c485781602001602082028036833780820191505090505b50905060005b6007811015610cc757600b80549050601b5482604051602001610c729291906156d1565b6040516020818303038152906040528051906020012060001c610c959190615949565b828281518110610ca857610ca7615a36565b5b6020026020010181815250508080610cbf90615900565b915050610c4e565b5080601e9080519060200190610cde929190614e14565b5050565b6000610cef8484846129bf565b610db084610cfb61270a565b610dab85604051806060016040528060288152602001615eaa60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d6161270a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e979092919063ffffffff16565b6127f4565b600190509392505050565b6000600654821115610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df990615516565b60405180910390fd5b6000610e0c612efb565b9050610e218184612f2690919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b6000610ee9610e4d61270a565b84610ee48560036000610e5e61270a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b6127f4565b6001905092915050565b601b5481565b60006a52b7d2dcc80cd2e4000000831115610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f40906155b6565b60405180910390fd5b81610f68576000610f5984612712565b90508060000151915050610f7e565b6000610f7384612712565b905080602001519150505b92915050565b601d5481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561102557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611070565b61106d600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dbb565b90505b919050565b61107d61270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190615616565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b61122261270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690615616565b60405180910390fd5b60006112b9612efb565b905060005b60078110156114125761137e6112f2836112e46007601d54612f2690919063ffffffff16565b612f7090919063ffffffff16565b60016000601f858154811061130a57611309615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b60016000601f848154811061139657611395615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061140a90615900565b9150506112be565b50601f60006114219190614e61565b6000601d8190555050565b601f818154811061143c57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600980546114c9906158ce565b80601f01602080910402602001604051908101604052809291908181526020018280546114f5906158ce565b80156115425780601f1061151757610100808354040283529160200191611542565b820191906000526020600020905b81548152906001019060200180831161152557829003601f168201915b5050505050905090565b600061160f61155961270a565b8461160a85604051806060016040528060258152602001615ed2602591396003600061158361270a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e979092919063ffffffff16565b6127f4565b6001905092915050565b600061162d61162661270a565b84846129bf565b6001905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61166561270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e990615616565b60405180910390fd5b611709633b9aca0082612f7090919063ffffffff16565b60198190555050565b61171a61270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90615616565b60405180910390fd5b60006117b1612efb565b905060005b600781101561190a576118766117ea836117dc6007601c54612f2690919063ffffffff16565b612f7090919063ffffffff16565b60016000601f858154811061180257611801615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b60016000601f848154811061188e5761188d615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061190290615900565b9150506117b6565b50601f60006119199190614e61565b6000601c8190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61198261270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0690615616565b60405180910390fd5b611a41612710611a33836a52b7d2dcc80cd2e4000000612f7090919063ffffffff16565b612f2690919063ffffffff16565b60188190555050565b601c5481565b611a5861270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90615616565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbdff2c16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b50505050565b611b7161270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf590615616565b60405180910390fd5b6000600767ffffffffffffffff811115611c1b57611c1a615a65565b5b604051908082528060200260200182016040528015611c495781602001602082028036833780820191505090505b50905060005b6007811015611d1557600b601e8281548110611c6e57611c6d615a36565b5b906000526020600020015481548110611c8a57611c89615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828281518110611cc857611cc7615a36565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080611d0d90615900565b915050611c4f565b5080601f9080519060200190611d2c929190614e82565b50601e6000611d3b9190614f0c565b50565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611dcf61270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390615616565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342619f666040518163ffffffff1660e01b815260040160206040518083038186803b158015611ec457600080fd5b505afa158015611ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efc91906151d2565b601b819055905090565b611f0e61270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9290615616565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90615596565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156120fc576120b8600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dbb565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121c261270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690615616565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690615536565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b818154811061238c57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123c361270a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244790615616565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d390615596565b60405180910390fd5b60005b600580549050811015612706578173ffffffffffffffffffffffffffffffffffffffff166005828154811061251757612516615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126f357600560016005805490506125729190615812565b8154811061258357612582615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600582815481106125c2576125c1615a36565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806126b9576126b8615a07565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612706565b80806126fe90615900565b9150506124df565b5050565b600033905090565b61271a614f2d565b600061272583612feb565b90506000612731612efb565b9050600061273f83836131b5565b9050809350505050919050565b600061278e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e97565b905092915050565b60008082846127a59190615731565b9050838110156127ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e190615576565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90615676565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90615556565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129b291906156b6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2690615656565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a96906154f6565b60405180910390fd5b60008111612ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad990615636565b60405180910390fd5b612aea61146b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b585750612b2861146b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ba357601854811115612ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b99906155d6565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c465750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c5b57612c568383836133ff565b612e92565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cfe5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d1357612d0e83838361377a565b612e91565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612db75750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dcc57612dc7838383613af5565b612e90565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6e5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e8357612e7e838383613e88565b612e8f565b612e8e838383613af5565b5b5b5b5b505050565b6000838311158290612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed691906154d4565b60405180910390fd5b5060008385612eee9190615812565b9050809150509392505050565b6000806000612f0861429d565b91509150612f1f8183612f2690919063ffffffff16565b9250505090565b6000612f6883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614574565b905092915050565b600080831415612f835760009050612fe5565b60008284612f9191906157b8565b9050828482612fa09190615787565b14612fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd7906155f6565b60405180910390fd5b809150505b92915050565b612ff3614f2d565b612ffb614f2d565b8281610120018181525050613012836010546145d7565b8161016001818152505061302883600f546145d7565b816101e001818152505061303e83600d546145d7565b8161018001818152505061305483600e546145d7565b816101a001818152505061306a836011546145d7565b816101c0018181525050613080836012546145d7565b81610220018181525050613096836013546145d7565b816102000181815250506130b88161016001518461274c90919063ffffffff16565b816101400181815250506130df816101e0015182610140015161274c90919063ffffffff16565b8161014001818152505061310681610180015182610140015161274c90919063ffffffff16565b8161014001818152505061312d816101a0015182610140015161274c90919063ffffffff16565b81610140018181525050613154816101c0015182610140015161274c90919063ffffffff16565b8161014001818152505061317b81610220015182610140015161274c90919063ffffffff16565b816101400181815250506131a281610200015182610140015161274c90919063ffffffff16565b8161014001818152505080915050919050565b6131bd614f2d565b81836102400181815250506131e5836102400151846101200151612f7090919063ffffffff16565b83600001818152505061320b836102400151846101600151612f7090919063ffffffff16565b836040018181525050613231836102400151846101e00151612f7090919063ffffffff16565b8360c0018181525050613257836102400151846101800151612f7090919063ffffffff16565b83606001818152505061327d836102400151846101a00151612f7090919063ffffffff16565b8360800181815250506132a3836102400151846101c00151612f7090919063ffffffff16565b8360a00181815250506132c9836102400151846102200151612f7090919063ffffffff16565b836101000181815250506132f0836102400151846102000151612f7090919063ffffffff16565b8360e00181815250506133148360400151846000015161274c90919063ffffffff16565b8360200181815250506133388360c00151846020015161274c90919063ffffffff16565b83602001818152505061335c8360600151846020015161274c90919063ffffffff16565b8360200181815250506133808360800151846020015161274c90919063ffffffff16565b8360200181815250506133a48360a00151846020015161274c90919063ffffffff16565b8360200181815250506133c9836101000151846020015161274c90919063ffffffff16565b8360200181815250506133ed8360e00151846020015161274c90919063ffffffff16565b83602001818152505082905092915050565b600061340a82612712565b9050613463816101200151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134fc8160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135958160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360f601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101e00151836102400151614608565b613646601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101800151836102400151614608565b61367b7f000000000000000000000000000000000000000000000000000000000000dead826101a00151836102400151614608565b6136b2601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102200151836102400151614608565b6136e9601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102000151836102400151614608565b6136f7816101c001516147b0565b61370a8160400151826101600151614835565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610140015160405161376c91906156b6565b60405180910390a350505050565b600061378582612712565b90506137dd8160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613877816101400151600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139108160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061398a601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101e00151836102400151614608565b6139c1601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101800151836102400151614608565b6139f67f000000000000000000000000000000000000000000000000000000000000dead826101a00151836102400151614608565b613a2d601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102200151836102400151614608565b613a64601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102000151836102400151614608565b613a72816101c001516147b0565b613a858160400151826101600151614835565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101400151604051613ae791906156b6565b60405180910390a350505050565b6000613b0082612712565b9050613b588160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bf18160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101e00151836102400151614608565b613ca2601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101800151836102400151614608565b613cd77f000000000000000000000000000000000000000000000000000000000000dead826101a00151836102400151614608565b613d0e601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101c00151836102400151614608565b613d45601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102000151836102400151614608565b613d53816101c001516147b0565b613d668160400151826101600151614835565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101400151604051613dc891906156b6565b60405180910390a3836020600060028110613de657613de5615a36565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826020600160028110613e3b57613e3a615a36565b5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613e8261486f565b50505050565b6000613e9382612712565b9050613eec816101200151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f858160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061401f816101400151600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b88160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614132601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101e00151836102400151614608565b614169601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826101800151836102400151614608565b61419e7f000000000000000000000000000000000000000000000000000000000000dead826101a00151836102400151614608565b6141d5601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102200151836102400151614608565b61420c601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826102000151836102400151614608565b61421a816101c001516147b0565b61422d8160400151826101600151614835565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610140015160405161428f91906156b6565b60405180910390a350505050565b6000806000600654905060006a52b7d2dcc80cd2e4000000905060005b600580549050811015614525578260016000600584815481106142e0576142df615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806143ce575081600260006005848154811061436657614365615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156143ee576006546a52b7d2dcc80cd2e400000094509450505050614570565b61447e600160006005848154811061440957614408615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461274c90919063ffffffff16565b9250614510600260006005848154811061449b5761449a615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361274c90919063ffffffff16565b9150808061451d90615900565b9150506142ba565b506145466a52b7d2dcc80cd2e4000000600654612f2690919063ffffffff16565b821015614567576006546a52b7d2dcc80cd2e4000000935093505050614570565b81819350935050505b9091565b600080831182906145bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145b291906154d4565b60405180910390fd5b50600083856145ca9190615787565b9050809150509392505050565b60006146006127106145f28486612f7090919063ffffffff16565b612f2690919063ffffffff16565b905092915050565b60008211614615576147ab565b600061462a8284612f7090919063ffffffff16565b905061467e81600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147a95761476583600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279690919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b505050565b6147eb6147da60096147cc600785612f7090919063ffffffff16565b612f2690919063ffffffff16565b601c5461279690919063ffffffff16565b601c8190555061482c61481b600961480d600285612f7090919063ffffffff16565b612f2690919063ffffffff16565b601d5461279690919063ffffffff16565b601d8190555050565b61484a8260065461274c90919063ffffffff16565b6006819055506148658160075461279690919063ffffffff16565b6007819055505050565b60005b6002811015614c1a576148f8600160006020846002811061489657614895615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dbb565b601954111580156149885750600c60006020836002811061491c5761491b615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15614ab757600b602082600281106149a3576149a2615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c600060208460028110614a3f57614a3e615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614c07565b601954614b376001600060208560028110614ad557614ad4615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dbb565b108015614bc25750600c600060208360028110614b5757614b56615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15614c0657614c0560208260028110614bde57614bdd615a36565b5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614c2b565b5b5b8080614c1290615900565b915050614872565b5060206000614c299190614fbf565b565b60005b600b80549050811015614e10578173ffffffffffffffffffffffffffffffffffffffff16600b8281548110614c6657614c65615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614dfd57600b6001600b80549050614cc19190615812565b81548110614cd257614cd1615a36565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b8281548110614d1157614d10615a36565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b805480614dc357614dc2615a07565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055614e10565b8080614e0890615900565b915050614c2e565b5050565b828054828255906000526020600020908101928215614e50579160200282015b82811115614e4f578251825591602001919060010190614e34565b5b509050614e5d9190614fcd565b5090565b5080546000825590600052602060002090810190614e7f9190614fcd565b50565b828054828255906000526020600020908101928215614efb579160200282015b82811115614efa5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190614ea2565b5b509050614f089190614fcd565b5090565b5080546000825590600052602060002090810190614f2a9190614fcd565b50565b604051806102600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506000815560010160009055565b5b80821115614fe6576000816000905550600101614fce565b5090565b600081359050614ff981615e64565b92915050565b60008135905061500e81615e7b565b92915050565b60008135905061502381615e92565b92915050565b60008151905061503881615e92565b92915050565b60006020828403121561505457615053615a94565b5b600061506284828501614fea565b91505092915050565b6000806040838503121561508257615081615a94565b5b600061509085828601614fea565b92505060206150a185828601614fea565b9150509250929050565b600080600080608085870312156150c5576150c4615a94565b5b60006150d387828801614fea565b94505060206150e487828801614fea565b93505060406150f587828801614fea565b925050606061510687828801614fea565b91505092959194509250565b60008060006060848603121561512b5761512a615a94565b5b600061513986828701614fea565b935050602061514a86828701614fea565b925050604061515b86828701615014565b9150509250925092565b6000806040838503121561517c5761517b615a94565b5b600061518a85828601614fea565b925050602061519b85828601615014565b9150509250929050565b6000602082840312156151bb576151ba615a94565b5b60006151c984828501615014565b91505092915050565b6000602082840312156151e8576151e7615a94565b5b60006151f684828501615029565b91505092915050565b6000806040838503121561521657615215615a94565b5b600061522485828601615014565b925050602061523585828601614fff565b9150509250929050565b61524881615846565b82525050565b61525781615858565b82525050565b600061526882615715565b6152728185615720565b935061528281856020860161589b565b61528b81615a99565b840191505092915050565b60006152a3602383615720565b91506152ae82615aaa565b604082019050919050565b60006152c6602a83615720565b91506152d182615af9565b604082019050919050565b60006152e9602683615720565b91506152f482615b48565b604082019050919050565b600061530c602283615720565b915061531782615b97565b604082019050919050565b600061532f601b83615720565b915061533a82615be6565b602082019050919050565b6000615352601b83615720565b915061535d82615c0f565b602082019050919050565b6000615375601f83615720565b915061538082615c38565b602082019050919050565b6000615398602883615720565b91506153a382615c61565b604082019050919050565b60006153bb602183615720565b91506153c682615cb0565b604082019050919050565b60006153de602083615720565b91506153e982615cff565b602082019050919050565b6000615401602983615720565b915061540c82615d28565b604082019050919050565b6000615424602583615720565b915061542f82615d77565b604082019050919050565b6000615447602483615720565b915061545282615dc6565b604082019050919050565b600061546a602c83615720565b915061547582615e15565b604082019050919050565b61548981615884565b82525050565b6154988161588e565b82525050565b60006020820190506154b3600083018461523f565b92915050565b60006020820190506154ce600083018461524e565b92915050565b600060208201905081810360008301526154ee818461525d565b905092915050565b6000602082019050818103600083015261550f81615296565b9050919050565b6000602082019050818103600083015261552f816152b9565b9050919050565b6000602082019050818103600083015261554f816152dc565b9050919050565b6000602082019050818103600083015261556f816152ff565b9050919050565b6000602082019050818103600083015261558f81615322565b9050919050565b600060208201905081810360008301526155af81615345565b9050919050565b600060208201905081810360008301526155cf81615368565b9050919050565b600060208201905081810360008301526155ef8161538b565b9050919050565b6000602082019050818103600083015261560f816153ae565b9050919050565b6000602082019050818103600083015261562f816153d1565b9050919050565b6000602082019050818103600083015261564f816153f4565b9050919050565b6000602082019050818103600083015261566f81615417565b9050919050565b6000602082019050818103600083015261568f8161543a565b9050919050565b600060208201905081810360008301526156af8161545d565b9050919050565b60006020820190506156cb6000830184615480565b92915050565b60006040820190506156e66000830185615480565b6156f36020830184615480565b9392505050565b600060208201905061570f600083018461548f565b92915050565b600081519050919050565b600082825260208201905092915050565b600061573c82615884565b915061574783615884565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561577c5761577b61597a565b5b828201905092915050565b600061579282615884565b915061579d83615884565b9250826157ad576157ac6159a9565b5b828204905092915050565b60006157c382615884565b91506157ce83615884565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158075761580661597a565b5b828202905092915050565b600061581d82615884565b915061582883615884565b92508282101561583b5761583a61597a565b5b828203905092915050565b600061585182615864565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156158b957808201518184015260208101905061589e565b838111156158c8576000848401525b50505050565b600060028204905060018216806158e657607f821691505b602082108114156158fa576158f96159d8565b5b50919050565b600061590b82615884565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561593e5761593d61597a565b5b600182019050919050565b600061595482615884565b915061595f83615884565b92508261596f5761596e6159a9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b615e6d81615846565b8114615e7857600080fd5b50565b615e8481615858565b8114615e8f57600080fd5b50565b615e9b81615884565b8114615ea657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b3d6256c48fe6fcc106aca14bf66c21769c212a76d65e8310f9e605aefa1789e64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000da7aaa575950c95e370c292872f8fa0689ebb8e1000000000000000000000000a6f368fc6f4f3f7bbe224b392c50abc1d585f083000000000000000000000000f14b674507390bef4435386a81f7bc4d55386f210000000000000000000000002ca76f9c0d770ce8698f8b5c05c4ecdf5181c72e0000000000000000000000001f054a5e9ac34abd49a3c02078dff1eb9ccb83cf00000000000000000000000000000000000000000000001b1ae4d6e2ef500000

-----Decoded View---------------
Arg [0] : VRFcontractAddress (address): 0xdA7AAA575950c95E370C292872F8FA0689EbB8E1
Arg [1] : _marketingWallet (address): 0xA6f368fC6f4F3f7Bbe224B392c50abC1D585f083
Arg [2] : _charityWallet (address): 0xF14B674507390bEF4435386a81f7Bc4d55386F21
Arg [3] : _mounthlyDrawWallet (address): 0x2ca76F9C0D770ce8698F8b5c05c4ecDF5181C72e
Arg [4] : _devWallet (address): 0x1f054A5E9ac34ABD49a3c02078dfF1Eb9CcB83Cf
Arg [5] : minCoAmount (uint256): 500000000000000000000

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000da7aaa575950c95e370c292872f8fa0689ebb8e1
Arg [1] : 000000000000000000000000a6f368fc6f4f3f7bbe224b392c50abc1d585f083
Arg [2] : 000000000000000000000000f14b674507390bef4435386a81f7bc4d55386f21
Arg [3] : 0000000000000000000000002ca76f9c0d770ce8698f8b5c05c4ecdf5181c72e
Arg [4] : 0000000000000000000000001f054a5e9ac34abd49a3c02078dff1eb9ccb83cf
Arg [5] : 00000000000000000000000000000000000000000000001b1ae4d6e2ef500000


Deployed Bytecode Sourcemap

582:21390:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3286:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6889:378;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4061:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4973:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6084:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4338:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6534:347;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10676:328;;;:::i;:::-;;5142:313;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7705:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4247:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5463:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9723:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7274:423;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9892:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4441:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1222:148:3;;;:::i;:::-;;2232:31:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2270:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3190:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11795:391;;;:::i;:::-;;10053:25;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;580:79:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2411:25:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4152:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5689:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4647:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2306:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6225:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11386:358;;;:::i;:::-;;5966:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6364:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9807:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10457:87;;;:::i;:::-;;11019:299;;;:::i;:::-;;4822:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10552:116;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7966:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1525:244:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1393:29:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8305:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3286:27;;;;:::o;6889:378::-;6941:14;6958:12;:10;:12::i;:::-;6941:29;;6990:11;:19;7002:6;6990:19;;;;;;;;;;;;;;;;;;;;;;;;;6989:20;6981:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;7069:17;7089:19;7100:7;7089:10;:19::i;:::-;7069:39;;7137:31;7157:2;:10;;;7137:7;:15;7145:6;7137:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;7119:7;:15;7127:6;7119:15;;;;;;;;;;;;;;;:49;;;;7189:23;7201:2;:10;;;7189:7;;:11;;:23;;;;:::i;:::-;7179:7;:33;;;;7236:23;7251:7;7236:10;;:14;;:23;;;;:::i;:::-;7223:10;:36;;;;6930:337;;6889:378;:::o;4061:83::-;4098:13;4131:5;4124:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4061:83;:::o;4973:161::-;5048:4;5065:39;5074:12;:10;:12::i;:::-;5088:7;5097:6;5065:8;:39::i;:::-;5122:4;5115:11;;4973:161;;;;:::o;6084:87::-;6126:7;6153:10;;6146:17;;6084:87;:::o;4338:95::-;4391:7;1074:14;4411;;4338:95;:::o;6534:347::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6712:16:5::1;6689:15;;:39;;;;;;;;;;;;;;;;;;6762:14;6739:13;;:37;;;;;;;;;;;;;;;;;;6810:19;6787:18;;:42;;;;;;;;;;;;;;;;;;6863:10;6840:9;;:33;;;;;;;;;;;;;;;;;;6534:347:::0;;;;:::o;10676:328::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10737:31:5::1;10785:1;10771:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10737:50;;10810:9;10805:147;10829:1;10825;:5;10805:147;;;10920:12;:19;;;;10900:12;;10914:1;10889:27;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10879:38;;;;;;10871:47;;:68;;;;:::i;:::-;10850:14;10865:1;10850:17;;;;;;;;:::i;:::-;;;;;;;:90;;;::::0;::::1;10832:3;;;;;:::i;:::-;;;;10805:147;;;;10982:14;10964:15;:32;;;;;;;;;;;;:::i;:::-;;10725:279;10676:328::o:0;5142:313::-;5240:4;5257:36;5267:6;5275:9;5286:6;5257:9;:36::i;:::-;5304:121;5313:6;5321:12;:10;:12::i;:::-;5335:89;5373:6;5335:89;;;;;;;;;;;;;;;;;:11;:19;5347:6;5335:19;;;;;;;;;;;;;;;:33;5355:12;:10;:12::i;:::-;5335:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;5304:8;:121::i;:::-;5443:4;5436:11;;5142:313;;;;;:::o;7705:252::-;7771:7;7810;;7799;:18;;7791:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7875:19;7897:10;:8;:10::i;:::-;7875:32;;7925:24;7937:11;7925:7;:11;;:24;;;;:::i;:::-;7918:31;;;7705:252;;;:::o;4247:83::-;4288:5;4313:9;;;;;;;;;;;4306:16;;4247:83;:::o;5463:218::-;5551:4;5568:83;5577:12;:10;:12::i;:::-;5591:7;5600:50;5639:10;5600:11;:25;5612:12;:10;:12::i;:::-;5600:25;;;;;;;;;;;;;;;:34;5626:7;5600:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5568:8;:83::i;:::-;5669:4;5662:11;;5463:218;;;;:::o;9723:27::-;;;;:::o;7274:423::-;7364:7;1074:14;7392:7;:18;;7384:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;7462:17;7457:233;;7495:17;7515:19;7526:7;7515:10;:19::i;:::-;7495:39;;7556:2;:10;;;7549:17;;;;;7457:233;7599:17;7619:19;7630:7;7619:10;:19::i;:::-;7599:39;;7660:2;:18;;;7653:25;;;7274:423;;;;;:::o;9892:39::-;;;;:::o;4441:198::-;4507:7;4531:11;:20;4543:7;4531:20;;;;;;;;;;;;;;;;;;;;;;;;;4527:49;;;4560:7;:16;4568:7;4560:16;;;;;;;;;;;;;;;;4553:23;;;;4527:49;4594:37;4614:7;:16;4622:7;4614:16;;;;;;;;;;;;;;;;4594:19;:37::i;:::-;4587:44;;4441:198;;;;:::o;1222:148:3:-;802:12;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1329:1:::1;1292:40;;1313:6;::::0;::::1;;;;;;;;1292:40;;;;;;;;;;;;1360:1;1343:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1222:148::o:0;2232:31:5:-;;;;;;;;;;;;;:::o;2270:29::-;;;;;;;;;;;;;:::o;3190:27::-;;;;:::o;11795:391::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11864:19:5::1;11887:10;:8;:10::i;:::-;11864:33;;11924:9;11919:165;11943:1;11939;:5;11919:165;;;11986:74;12011:48;12047:11;12011:31;12040:1;12011:24;;:28;;:31;;;;:::i;:::-;:35;;:48;;;;:::i;:::-;11986:7;:20;11994:8;12003:1;11994:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11986:20;;;;;;;;;;;;;;;;:24;;:74;;;;:::i;:::-;11963:7;:20;11971:8;11980:1;11971:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11963:20;;;;;;;;;;;;;;;:97;;;;11946:3;;;;;:::i;:::-;;;;11919:165;;;;12111:8;;12104:15;;;;:::i;:::-;12157:1;12130:24;:28;;;;11843:343;11795:391::o:0;10053:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;580:79:3:-;618:7;645:6;;;;;;;;;;;638:13;;580:79;:::o;2411:25:5:-;;;;;;;;;;;;;:::o;4152:87::-;4191:13;4224:7;4217:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4152:87;:::o;5689:269::-;5782:4;5799:129;5808:12;:10;:12::i;:::-;5822:7;5831:96;5870:15;5831:96;;;;;;;;;;;;;;;;;:11;:25;5843:12;:10;:12::i;:::-;5831:25;;;;;;;;;;;;;;;:34;5857:7;5831:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;5799:8;:129::i;:::-;5946:4;5939:11;;5689:269;;;;:::o;4647:167::-;4725:4;4742:42;4752:12;:10;:12::i;:::-;4766:9;4777:6;4742:9;:42::i;:::-;4802:4;4795:11;;4647:167;;;;:::o;2306:34::-;;;;;;;;;;;;;:::o;6225:121::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6316:22:5::1;6332:5;6316:11;:15;;:22;;;;:::i;:::-;6301:12;:37;;;;6225:121:::0;:::o;11386:358::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11457:19:5::1;11480:10;:8;:10::i;:::-;11457:33;;11516:9;11511:152;11535:1;11531;:5;11511:152;;;11578:73;11603:47;11638:11;11603:30;11631:1;11603:23;;:27;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;11578:7;:20;11586:8;11595:1;11586:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11578:20;;;;;;;;;;;;;;;;:24;;:73;;;;:::i;:::-;11555:7;:20;11563:8;11572:1;11563:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11555:20;;;;;;;;;;;;;;;:96;;;;11538:3;;;;;:::i;:::-;;;;11511:152;;;;11690:8;;11683:15;;;;:::i;:::-;11735:1;11709:23;:27;;;;11434:310;11386:358::o:0;5966:110::-;6024:4;6048:11;:20;6060:7;6048:20;;;;;;;;;;;;;;;;;;;;;;;;;6041:27;;5966:110;;;:::o;6364:162::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6458:60:5::1;6502:5;6458:25;6470:12;1074:14;6458:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;6443:12;:75;;;;6364:162:::0;:::o;9807:38::-;;;;:::o;10457:87::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10514:4:5::1;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;10457:87::o:0;11019:299::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11072:24:5::1;11113:1;11099:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11072:43;;11141:9;11136:102;11159:1;11155;:5;11136:102;;;11194:12;11207:15;11223:1;11207:18;;;;;;;;:::i;:::-;;;;;;;;;;11194:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11181:7;11189:1;11181:10;;;;;;;;:::i;:::-;;;;;;;:45;;;;;;;;;::::0;::::1;11162:3;;;;;:::i;:::-;;;;11136:102;;;;11269:7;11258:8;:18;;;;;;;;;;;;:::i;:::-;;11294:15;;11287:22;;;;:::i;:::-;11061:257;11019:299::o:0;4822:143::-;4903:7;4930:11;:18;4942:5;4930:18;;;;;;;;;;;;;;;:27;4949:7;4930:27;;;;;;;;;;;;;;;;4923:34;;4822:143;;;;:::o;10552:116::-;10600:7;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10641:4:5::1;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10626:12;:34;;;10619:41;;10552:116:::0;:::o;7966:332::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8048:11:5::1;:20;8060:7;8048:20;;;;;;;;;;;;;;;;;;;;;;;;;8047:21;8039:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;8133:1;8114:7;:16;8122:7;8114:16;;;;;;;;;;;;;;;;:20;8111:108;;;8170:37;8190:7;:16;8198:7;8190:16;;;;;;;;;;;;;;;;8170:19;:37::i;:::-;8151:7;:16;8159:7;8151:16;;;;;;;;;;;;;;;:56;;;;8111:108;8252:4;8229:11;:20;8241:7;8229:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;8267:9;8282:7;8267:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7966:332:::0;:::o;1525:244:3:-;802:12;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1634:1:::1;1614:22;;:8;:22;;;;1606:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1724:8;1695:38;;1716:6;::::0;::::1;;;;;;;;1695:38;;;;;;;;;;;;1753:8;1744:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1525:244:::0;:::o;1393:29:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8305:478::-;802:12:3;:10;:12::i;:::-;792:22;;:6;;;;;;;;;;:22;;;784:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8386:11:5::1;:20;8398:7;8386:20;;;;;;;;;;;;;;;;;;;;;;;;;8378:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;8454:9;8449:327;8473:9;:16;;;;8469:1;:20;8449:327;;;8531:7;8515:23;;:9;8525:1;8515:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;8511:254;;;8574:9;8603:1;8584:9;:16;;;;:20;;;;:::i;:::-;8574:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8559:9;8569:1;8559:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;8643:1;8624:7;:16;8632:7;8624:16;;;;;;;;;;;;;;;:20;;;;8686:5;8663:11;:20;8675:7;8663:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;8710:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8744:5;;8511:254;8491:3;;;;;:::i;:::-;;;;8449:327;;;;8305:478:::0;:::o;602:98:1:-;655:7;682:10;675:17;;602:98;:::o;18666:296:5:-;18725:14;;:::i;:::-;18752:27;18782:20;18794:7;18782:11;:20::i;:::-;18752:50;;18813:19;18844:10;:8;:10::i;:::-;18813:41;;18865:18;18895:38;18907:12;18921:11;18895;:38::i;:::-;18865:68;;18951:3;18944:10;;;;;18666:296;;;:::o;787:136:4:-;845:7;872:43;876:1;879;872:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;865:50;;787:136;;;;:::o;323:181::-;381:7;401:9;417:1;413;:5;;;;:::i;:::-;401:17;;442:1;437;:6;;429:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;495:1;488:8;;;323:181;;;;:::o;8792:337:5:-;8902:1;8885:19;;:5;:19;;;;8877:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8983:1;8964:21;;:7;:21;;;;8956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9067:6;9037:11;:18;9049:5;9037:18;;;;;;;;;;;;;;;:27;9056:7;9037:27;;;;;;;;;;;;;;;:36;;;;9105:7;9089:32;;9098:5;9089:32;;;9114:6;9089:32;;;;;;:::i;:::-;;;;;;;;8792:337;;;:::o;12203:1088::-;12318:1;12300:20;;:6;:20;;;;12292:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12402:1;12381:23;;:9;:23;;;;12373:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12472:1;12463:6;:10;12455:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12543:7;:5;:7::i;:::-;12533:17;;:6;:17;;;;:41;;;;;12567:7;:5;:7::i;:::-;12554:20;;:9;:20;;;;12533:41;12530:132;;;12605:12;;12595:6;:22;;12587:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;12530:132;12691:11;:19;12703:6;12691:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;12715:11;:22;12727:9;12715:22;;;;;;;;;;;;;;;;;;;;;;;;;12714:23;12691:46;12687:597;;;12754:48;12776:6;12784:9;12795:6;12754:21;:48::i;:::-;12687:597;;;12825:11;:19;12837:6;12825:19;;;;;;;;;;;;;;;;;;;;;;;;;12824:20;:46;;;;;12848:11;:22;12860:9;12848:22;;;;;;;;;;;;;;;;;;;;;;;;;12824:46;12820:464;;;12887:46;12907:6;12915:9;12926:6;12887:19;:46::i;:::-;12820:464;;;12956:11;:19;12968:6;12956:19;;;;;;;;;;;;;;;;;;;;;;;;;12955:20;:47;;;;;12980:11;:22;12992:9;12980:22;;;;;;;;;;;;;;;;;;;;;;;;;12979:23;12955:47;12951:333;;;13019:44;13037:6;13045:9;13056:6;13019:17;:44::i;:::-;12951:333;;;13085:11;:19;13097:6;13085:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;13108:11;:22;13120:9;13108:22;;;;;;;;;;;;;;;;;;;;;;;;;13085:45;13081:203;;;13147:48;13169:6;13177:9;13188:6;13147:21;:48::i;:::-;13081:203;;;13228:44;13246:6;13254:9;13265:6;13228:17;:44::i;:::-;13081:203;12951:333;12820:464;12687:597;12203:1088;;;:::o;1226:192:4:-;1312:7;1345:1;1340;:6;;1348:12;1332:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1372:9;1388:1;1384;:5;;;;:::i;:::-;1372:17;;1409:1;1402:8;;;1226:192;;;;;:::o;21233:163:5:-;21274:7;21295:15;21312;21331:19;:17;:19::i;:::-;21294:56;;;;21368:20;21380:7;21368;:11;;:20;;;;:::i;:::-;21361:27;;;;21233:163;:::o;2624:132:4:-;2682:7;2709:39;2713:1;2716;2709:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2702:46;;2624:132;;;;:::o;1677:471::-;1735:7;1985:1;1980;:6;1976:47;;;2010:1;2003:8;;;;1976:47;2035:9;2051:1;2047;:5;;;;:::i;:::-;2035:17;;2080:1;2075;2071;:5;;;;:::i;:::-;:10;2063:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2139:1;2132:8;;;1677:471;;;;;:::o;18970:1101:5:-;19030:14;;:::i;:::-;19057:17;;:::i;:::-;19107:7;19085:2;:10;;:29;;;;;19147:30;19160:7;19169;;19147:12;:30::i;:::-;19125:2;:10;;:52;;;;;19210:34;19223:7;19232:11;;19210:12;:34::i;:::-;19188:2;:11;;:56;;;;;19277:36;19290:7;19299:13;;19277:12;:36::i;:::-;19255:2;:13;;:58;;;;;19346:31;19359:7;19368:8;;19346:12;:31::i;:::-;19324:2;:8;;:53;;;;;19410:28;19423:7;19432:5;;19410:12;:28::i;:::-;19388:2;:8;;:50;;;;;19471:36;19484:7;19493:13;;19471:12;:36::i;:::-;19449:2;:16;;:58;;;;;19540:30;19553:7;19562;;19540:12;:30::i;:::-;19518:2;:7;;:52;;;;;19605:23;19617:2;:10;;;19605:7;:11;;:23;;;;:::i;:::-;19583:2;:18;;:45;;;;;19661:35;19684:2;:11;;;19661:2;:18;;;:22;;:35;;;;:::i;:::-;19639:2;:18;;:57;;;;;19729:37;19752:2;:13;;;19729:2;:18;;;:22;;:37;;;;:::i;:::-;19707:2;:18;;:59;;;;;19799:32;19822:2;:8;;;19799:2;:18;;;:22;;:32;;;;:::i;:::-;19777:2;:18;;:54;;;;;19864:32;19887:2;:8;;;19864:2;:18;;;:22;;:32;;;;:::i;:::-;19842:2;:18;;:54;;;;;19929:40;19952:2;:16;;;19929:2;:18;;;:22;;:40;;;;:::i;:::-;19907:2;:18;;:62;;;;;20002:31;20025:2;:7;;;20002:2;:18;;;:22;;:31;;;;:::i;:::-;19980:2;:18;;:53;;;;;20051:2;20044:9;;;18970:1101;;;:::o;20079:1146::-;20162:14;;:::i;:::-;20212:11;20191:2;:14;;:32;;;;;20255:30;20270:2;:14;;;20255:2;:10;;;:14;;:30;;;;:::i;:::-;20234:2;:10;;:51;;;;;20317:30;20332:2;:14;;;20317:2;:10;;;:14;;:30;;;;:::i;:::-;20296:2;:10;;:51;;;;;20379:31;20395:2;:14;;;20379:2;:11;;;:15;;:31;;;;:::i;:::-;20358:2;:11;;:52;;;;;20442:33;20460:2;:14;;;20442:2;:13;;;:17;;:33;;;;:::i;:::-;20421:2;:13;;:54;;;;;20507:28;20520:2;:14;;;20507:2;:8;;;:12;;:28;;;;:::i;:::-;20486:2;:8;;:49;;;;;20567:28;20580:2;:14;;;20567:2;:8;;;:12;;:28;;;;:::i;:::-;20546:2;:8;;:49;;;;;20627:36;20648:2;:14;;;20627:2;:16;;;:20;;:36;;;;:::i;:::-;20606:2;:16;;:57;;;;;20695:27;20707:2;:14;;;20695:2;:7;;;:11;;:27;;;;:::i;:::-;20674:2;:7;;:48;;;;;20758:26;20773:2;:10;;;20758:2;:10;;;:14;;:26;;;;:::i;:::-;20735:2;:18;;:49;;;;;20818:35;20841:2;:11;;;20818:2;:18;;;:22;;:35;;;;:::i;:::-;20795:2;:18;;:58;;;;;20887:37;20910:2;:13;;;20887:2;:18;;;:22;;:37;;;;:::i;:::-;20864:2;:18;;:60;;;;;20958:32;20981:2;:8;;;20958:2;:18;;;:22;;:32;;;;:::i;:::-;20935:2;:18;;:55;;;;;21024:32;21047:2;:8;;;21024:2;:18;;;:22;;:32;;;;:::i;:::-;21001:2;:18;;:55;;;;;21090:40;21113:2;:16;;;21090:2;:18;;;:22;;:40;;;;:::i;:::-;21067:2;:18;;:63;;;;;21164:31;21187:2;:7;;;21164:2;:18;;;:22;;:31;;;;:::i;:::-;21141:2;:18;;:54;;;;;21215:2;21208:9;;20079:1146;;;;:::o;16550:926::-;16660:17;16680:19;16691:7;16680:10;:19::i;:::-;16660:39;;16730:31;16750:2;:10;;;16730:7;:15;16738:6;16730:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;16712:7;:15;16720:6;16712:15;;;;;;;;;;;;;;;:49;;;;16790:31;16810:2;:10;;;16790:7;:15;16798:6;16790:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;16772:7;:15;16780:6;16772:15;;;;;;;;;;;;;;;:49;;;;16853:42;16876:2;:18;;;16853:7;:18;16861:9;16853:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;16832:7;:18;16840:9;16832:18;;;;;;;;;;;;;;;:63;;;;16908:71;16935:13;;;;;;;;;;;16951:2;:11;;;16964:2;:14;;;16908:18;:71::i;:::-;16990:75;17017:15;;;;;;;;;;;17035:2;:13;;;17050:2;:14;;;16990:18;:75::i;:::-;17076:66;17103:11;17117:2;:8;;;17127:2;:14;;;17076:18;:66::i;:::-;17154:81;17181:18;;;;;;;;;;;17202:2;:16;;;17220:2;:14;;;17154:18;:81::i;:::-;17246:63;17273:9;;;;;;;;;;;17285:2;:7;;;17294:2;:14;;;17246:18;:63::i;:::-;17324:21;17336:2;:8;;;17324:11;:21::i;:::-;17358:35;17370:2;:10;;;17382:2;:10;;;17358:11;:35::i;:::-;17436:9;17419:47;;17428:6;17419:47;;;17447:2;:18;;;17419:47;;;;;;:::i;:::-;;;;;;;;16641:835;16550:926;;;:::o;15624:918::-;15722:17;15742:19;15753:7;15742:10;:19::i;:::-;15722:39;;15792:31;15812:2;:10;;;15792:7;:15;15800:6;15792:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;15774:7;:15;15782:6;15774:15;;;;;;;;;;;;;;;:49;;;;15855:42;15878:2;:18;;;15855:7;:18;15863:9;15855:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;15834:7;:18;15842:9;15834:18;;;;;;;;;;;;;;;:63;;;;15929:42;15952:2;:18;;;15929:7;:18;15937:9;15929:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;15908:7;:18;15916:9;15908:18;;;;;;;;;;;;;;;:63;;;;15984:71;16011:13;;;;;;;;;;;16027:2;:11;;;16040:2;:14;;;15984:18;:71::i;:::-;16066:75;16093:15;;;;;;;;;;;16111:2;:13;;;16126:2;:14;;;16066:18;:75::i;:::-;16152:66;16179:11;16193:2;:8;;;16203:2;:14;;;16152:18;:66::i;:::-;16230:81;16257:18;;;;;;;;;;;16278:2;:16;;;16296:2;:14;;;16230:18;:81::i;:::-;16322:63;16349:9;;;;;;;;;;;16361:2;:7;;;16370:2;:14;;;16322:18;:63::i;:::-;16400:21;16412:2;:8;;;16400:11;:21::i;:::-;16434:35;16446:2;:10;;;16458:2;:10;;;16434:11;:35::i;:::-;16504:9;16487:47;;16496:6;16487:47;;;16515:2;:18;;;16487:47;;;;;;:::i;:::-;;;;;;;;15713:829;15624:918;;;:::o;14554:1036::-;14654:17;14674:19;14685:7;14674:10;:19::i;:::-;14654:39;;14742:31;14762:2;:10;;;14742:7;:15;14750:6;14742:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;14724:7;:15;14732:6;14724:15;;;;;;;;;;;;;;;:49;;;;14805:42;14828:2;:18;;;14805:7;:18;14813:9;14805:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;14784:7;:18;14792:9;14784:18;;;;;;;;;;;;;;;:63;;;;14864:71;14891:13;;;;;;;;;;;14907:2;:11;;;14920:2;:14;;;14864:18;:71::i;:::-;14946:75;14973:15;;;;;;;;;;;14991:2;:13;;;15006:2;:14;;;14946:18;:75::i;:::-;15032:66;15059:11;15073:2;:8;;;15083:2;:14;;;15032:18;:66::i;:::-;15110:73;15137:18;;;;;;;;;;;15158:2;:8;;;15168:2;:14;;;15110:18;:73::i;:::-;15194:63;15221:9;;;;;;;;;;;15233:2;:7;;;15242:2;:14;;;15194:18;:63::i;:::-;15270:21;15282:2;:8;;;15270:11;:21::i;:::-;15304:35;15316:2;:10;;;15328:2;:10;;;15304:11;:35::i;:::-;15372:9;15355:47;;15364:6;15355:47;;;15383:2;:18;;;15355:47;;;;;;:::i;:::-;;;;;;;;15497:6;15481:10;15492:1;15481:13;;;;;;;:::i;:::-;;;;:22;;;;;;;;;;;;;;;;;;15530:9;15514:10;15525:1;15514:13;;;;;;;:::i;:::-;;;;:25;;;;;;;;;;;;;;;;;;15560:12;:10;:12::i;:::-;14641:949;14554:1036;;;:::o;17484:1007::-;17596:17;17617:19;17628:7;17617:10;:19::i;:::-;17596:40;;17670:31;17690:2;:10;;;17670:7;:15;17678:6;17670:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;17649:7;:15;17657:6;17649:15;;;;;;;;;;;;;;;:52;;;;17733:31;17753:2;:10;;;17733:7;:15;17741:6;17733:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;17712:7;:15;17720:6;17712:15;;;;;;;;;;;;;;;:52;;;;17796:42;17819:2;:18;;;17796:7;:18;17804:9;17796:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;17775:7;:18;17783:9;17775:18;;;;;;;;;;;;;;;:63;;;;17870:42;17893:2;:18;;;17870:7;:18;17878:9;17870:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;17849:7;:18;17857:9;17849:18;;;;;;;;;;;;;;;:63;;;;17925:71;17952:13;;;;;;;;;;;17968:2;:11;;;17981:2;:14;;;17925:18;:71::i;:::-;18007:75;18034:15;;;;;;;;;;;18052:2;:13;;;18067:2;:14;;;18007:18;:75::i;:::-;18093:66;18120:11;18134:2;:8;;;18144:2;:14;;;18093:18;:66::i;:::-;18171:81;18198:18;;;;;;;;;;;18219:2;:16;;;18237:2;:14;;;18171:18;:81::i;:::-;18263:63;18290:9;;;;;;;;;;;18302:2;:7;;;18311:2;:14;;;18263:18;:63::i;:::-;18341:21;18353:2;:8;;;18341:11;:21::i;:::-;18375:35;18387:2;:10;;;18399:2;:10;;;18375:11;:35::i;:::-;18453:9;18436:47;;18445:6;18436:47;;;18464:2;:18;;;18436:47;;;;;;:::i;:::-;;;;;;;;17575:916;17484:1007;;;:::o;21405:561::-;21455:7;21464;21484:15;21502:7;;21484:25;;21520:15;1074:14;21520:25;;21567:9;21562:289;21586:9;:16;;;;21582:1;:20;21562:289;;;21652:7;21628;:21;21636:9;21646:1;21636:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21628:21;;;;;;;;;;;;;;;;:31;:66;;;;21687:7;21663;:21;21671:9;21681:1;21671:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21663:21;;;;;;;;;;;;;;;;:31;21628:66;21624:97;;;21704:7;;1074:14;21696:25;;;;;;;;;21624:97;21746:34;21758:7;:21;21766:9;21776:1;21766:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21758:21;;;;;;;;;;;;;;;;21746:7;:11;;:34;;;;:::i;:::-;21736:44;;21805:34;21817:7;:21;21825:9;21835:1;21825:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21817:21;;;;;;;;;;;;;;;;21805:7;:11;;:34;;;;:::i;:::-;21795:44;;21604:3;;;;;:::i;:::-;;;;21562:289;;;;21875:20;1074:14;21875:7;;:11;;:20;;;;:::i;:::-;21865:7;:30;21861:61;;;21905:7;;1074:14;21897:25;;;;;;;;21861:61;21941:7;21950;21933:25;;;;;;21405:561;;;:::o;3252:278:4:-;3338:7;3370:1;3366;:5;3373:12;3358:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3397:9;3413:1;3409;:5;;;;:::i;:::-;3397:17;;3521:1;3514:8;;;3252:278;;;;;:::o;9477:136:5:-;9551:7;9578:27;9599:5;9578:16;9589:4;9578:6;:10;;:16;;;;:::i;:::-;:20;;:27;;;;:::i;:::-;9571:34;;9477:136;;;;:::o;9136:333::-;9248:1;9237:7;:12;9233:29;;9253:7;;9233:29;9274:15;9292:24;9304:11;9292:7;:11;;:24;;;;:::i;:::-;9274:42;;9341:24;9357:7;9341;:11;9349:2;9341:11;;;;;;;;;;;;;;;;:15;;:24;;;;:::i;:::-;9327:7;:11;9335:2;9327:11;;;;;;;;;;;;;;;:38;;;;9380:11;:15;9392:2;9380:15;;;;;;;;;;;;;;;;;;;;;;;;;9376:86;;;9426:24;9442:7;9426;:11;9434:2;9426:11;;;;;;;;;;;;;;;;:15;;:24;;;;:::i;:::-;9412:7;:11;9420:2;9412:11;;;;;;;;;;;;;;;:38;;;;9376:86;9222:247;9136:333;;;;:::o;10155:227::-;10239:48;10267:19;10284:1;10267:12;10277:1;10267:5;:9;;:12;;;;:::i;:::-;:16;;:19;;;;:::i;:::-;10239:23;;:27;;:48;;;;:::i;:::-;10212:23;:75;;;;10325:49;10354:19;10371:1;10354:12;10364:1;10354:5;:9;;:12;;;;:::i;:::-;:16;;:19;;;;:::i;:::-;10325:24;;:28;;:49;;;;:::i;:::-;10298:24;:76;;;;10155:227;:::o;18499:159::-;18583:20;18595:7;18583;;:11;;:20;;;;:::i;:::-;18573:7;:30;;;;18627:23;18642:7;18627:10;;:14;;:23;;;;:::i;:::-;18614:10;:36;;;;18499:159;;:::o;13929:611::-;13988:9;13984:520;14003:1;14001;:3;13984:520;;;14047:43;14067:7;:22;14075:10;14086:1;14075:13;;;;;;;:::i;:::-;;;;;;;;;;;;;14067:22;;;;;;;;;;;;;;;;14047:19;:43::i;:::-;14031:12;;:59;;:98;;;;;14095:19;:34;14115:10;14126:1;14115:13;;;;;;;:::i;:::-;;;;;;;;;;;;;14095:34;;;;;;;;;;;;;;;;;;;;;;;;;14094:35;14031:98;14027:465;;;14167:12;14185:10;14196:1;14185:13;;;;;;;:::i;:::-;;;;;;;;;;;;;14167:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14255:4;14218:19;:34;14238:10;14249:1;14238:13;;;;;;;:::i;:::-;;;;;;;;;;;;;14218:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;14027:465;;;14353:12;;14307:43;14327:7;:22;14335:10;14346:1;14335:13;;;;;;;:::i;:::-;;;;;;;;;;;;;14327:22;;;;;;;;;;;;;;;;14307:19;:43::i;:::-;:58;:96;;;;;14369:19;:34;14389:10;14400:1;14389:13;;;;;;;:::i;:::-;;;;;;;;;;;;;14369:34;;;;;;;;;;;;;;;;;;;;;;;;;14307:96;14303:189;;;14436:25;14447:10;14458:1;14447:13;;;;;;;:::i;:::-;;;;;;;;;;;;;14436:10;:25::i;:::-;14303:189;14027:465;14006:3;;;;;:::i;:::-;;;;13984:520;;;;14522:10;;14515:17;;;;:::i;:::-;13929:611::o;13345:394::-;13409:9;13404:328;13428:12;:19;;;;13424:1;:23;13404:328;;;13498:8;13479:27;;:12;13492:1;13479:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:27;;;13475:246;;;13546:12;13581:1;13559:12;:19;;;;:23;;;;:::i;:::-;13546:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13528:12;13541:1;13528:15;;;;;;;;:::i;:::-;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;13636:5;13604:19;:29;13624:8;13604:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;13662:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;13700:5;;13475:246;13449:3;;;;;:::i;:::-;;;;13404:328;;;;13345:394;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:6:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;152:133;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;291:139;;;;:::o;436:143::-;493:5;524:6;518:13;509:22;;540:33;567:5;540:33;:::i;:::-;436:143;;;;:::o;585:329::-;644:6;693:2;681:9;672:7;668:23;664:32;661:119;;;699:79;;:::i;:::-;661:119;819:1;844:53;889:7;880:6;869:9;865:22;844:53;:::i;:::-;834:63;;790:117;585:329;;;;:::o;920:474::-;988:6;996;1045:2;1033:9;1024:7;1020:23;1016:32;1013:119;;;1051:79;;:::i;:::-;1013:119;1171:1;1196:53;1241:7;1232:6;1221:9;1217:22;1196:53;:::i;:::-;1186:63;;1142:117;1298:2;1324:53;1369:7;1360:6;1349:9;1345:22;1324:53;:::i;:::-;1314:63;;1269:118;920:474;;;;;:::o;1400:765::-;1486:6;1494;1502;1510;1559:3;1547:9;1538:7;1534:23;1530:33;1527:120;;;1566:79;;:::i;:::-;1527:120;1686:1;1711:53;1756:7;1747:6;1736:9;1732:22;1711:53;:::i;:::-;1701:63;;1657:117;1813:2;1839:53;1884:7;1875:6;1864:9;1860:22;1839:53;:::i;:::-;1829:63;;1784:118;1941:2;1967:53;2012:7;2003:6;1992:9;1988:22;1967:53;:::i;:::-;1957:63;;1912:118;2069:2;2095:53;2140:7;2131:6;2120:9;2116:22;2095:53;:::i;:::-;2085:63;;2040:118;1400:765;;;;;;;:::o;2171:619::-;2248:6;2256;2264;2313:2;2301:9;2292:7;2288:23;2284:32;2281:119;;;2319:79;;:::i;:::-;2281:119;2439:1;2464:53;2509:7;2500:6;2489:9;2485:22;2464:53;:::i;:::-;2454:63;;2410:117;2566:2;2592:53;2637:7;2628:6;2617:9;2613:22;2592:53;:::i;:::-;2582:63;;2537:118;2694:2;2720:53;2765:7;2756:6;2745:9;2741:22;2720:53;:::i;:::-;2710:63;;2665:118;2171:619;;;;;:::o;2796:474::-;2864:6;2872;2921:2;2909:9;2900:7;2896:23;2892:32;2889:119;;;2927:79;;:::i;:::-;2889:119;3047:1;3072:53;3117:7;3108:6;3097:9;3093:22;3072:53;:::i;:::-;3062:63;;3018:117;3174:2;3200:53;3245:7;3236:6;3225:9;3221:22;3200:53;:::i;:::-;3190:63;;3145:118;2796:474;;;;;:::o;3276:329::-;3335:6;3384:2;3372:9;3363:7;3359:23;3355:32;3352:119;;;3390:79;;:::i;:::-;3352:119;3510:1;3535:53;3580:7;3571:6;3560:9;3556:22;3535:53;:::i;:::-;3525:63;;3481:117;3276:329;;;;:::o;3611:351::-;3681:6;3730:2;3718:9;3709:7;3705:23;3701:32;3698:119;;;3736:79;;:::i;:::-;3698:119;3856:1;3881:64;3937:7;3928:6;3917:9;3913:22;3881:64;:::i;:::-;3871:74;;3827:128;3611:351;;;;:::o;3968:468::-;4033:6;4041;4090:2;4078:9;4069:7;4065:23;4061:32;4058:119;;;4096:79;;:::i;:::-;4058:119;4216:1;4241:53;4286:7;4277:6;4266:9;4262:22;4241:53;:::i;:::-;4231:63;;4187:117;4343:2;4369:50;4411:7;4402:6;4391:9;4387:22;4369:50;:::i;:::-;4359:60;;4314:115;3968:468;;;;;:::o;4442:118::-;4529:24;4547:5;4529:24;:::i;:::-;4524:3;4517:37;4442:118;;:::o;4566:109::-;4647:21;4662:5;4647:21;:::i;:::-;4642:3;4635:34;4566:109;;:::o;4681:364::-;4769:3;4797:39;4830:5;4797:39;:::i;:::-;4852:71;4916:6;4911:3;4852:71;:::i;:::-;4845:78;;4932:52;4977:6;4972:3;4965:4;4958:5;4954:16;4932:52;:::i;:::-;5009:29;5031:6;5009:29;:::i;:::-;5004:3;5000:39;4993:46;;4773:272;4681:364;;;;:::o;5051:366::-;5193:3;5214:67;5278:2;5273:3;5214:67;:::i;:::-;5207:74;;5290:93;5379:3;5290:93;:::i;:::-;5408:2;5403:3;5399:12;5392:19;;5051:366;;;:::o;5423:::-;5565:3;5586:67;5650:2;5645:3;5586:67;:::i;:::-;5579:74;;5662:93;5751:3;5662:93;:::i;:::-;5780:2;5775:3;5771:12;5764:19;;5423:366;;;:::o;5795:::-;5937:3;5958:67;6022:2;6017:3;5958:67;:::i;:::-;5951:74;;6034:93;6123:3;6034:93;:::i;:::-;6152:2;6147:3;6143:12;6136:19;;5795:366;;;:::o;6167:::-;6309:3;6330:67;6394:2;6389:3;6330:67;:::i;:::-;6323:74;;6406:93;6495:3;6406:93;:::i;:::-;6524:2;6519:3;6515:12;6508:19;;6167:366;;;:::o;6539:::-;6681:3;6702:67;6766:2;6761:3;6702:67;:::i;:::-;6695:74;;6778:93;6867:3;6778:93;:::i;:::-;6896:2;6891:3;6887:12;6880:19;;6539:366;;;:::o;6911:::-;7053:3;7074:67;7138:2;7133:3;7074:67;:::i;:::-;7067:74;;7150:93;7239:3;7150:93;:::i;:::-;7268:2;7263:3;7259:12;7252:19;;6911:366;;;:::o;7283:::-;7425:3;7446:67;7510:2;7505:3;7446:67;:::i;:::-;7439:74;;7522:93;7611:3;7522:93;:::i;:::-;7640:2;7635:3;7631:12;7624:19;;7283:366;;;:::o;7655:::-;7797:3;7818:67;7882:2;7877:3;7818:67;:::i;:::-;7811:74;;7894:93;7983:3;7894:93;:::i;:::-;8012:2;8007:3;8003:12;7996:19;;7655:366;;;:::o;8027:::-;8169:3;8190:67;8254:2;8249:3;8190:67;:::i;:::-;8183:74;;8266:93;8355:3;8266:93;:::i;:::-;8384:2;8379:3;8375:12;8368:19;;8027:366;;;:::o;8399:::-;8541:3;8562:67;8626:2;8621:3;8562:67;:::i;:::-;8555:74;;8638:93;8727:3;8638:93;:::i;:::-;8756:2;8751:3;8747:12;8740:19;;8399:366;;;:::o;8771:::-;8913:3;8934:67;8998:2;8993:3;8934:67;:::i;:::-;8927:74;;9010:93;9099:3;9010:93;:::i;:::-;9128:2;9123:3;9119:12;9112:19;;8771:366;;;:::o;9143:::-;9285:3;9306:67;9370:2;9365:3;9306:67;:::i;:::-;9299:74;;9382:93;9471:3;9382:93;:::i;:::-;9500:2;9495:3;9491:12;9484:19;;9143:366;;;:::o;9515:::-;9657:3;9678:67;9742:2;9737:3;9678:67;:::i;:::-;9671:74;;9754:93;9843:3;9754:93;:::i;:::-;9872:2;9867:3;9863:12;9856:19;;9515:366;;;:::o;9887:::-;10029:3;10050:67;10114:2;10109:3;10050:67;:::i;:::-;10043:74;;10126:93;10215:3;10126:93;:::i;:::-;10244:2;10239:3;10235:12;10228:19;;9887:366;;;:::o;10259:118::-;10346:24;10364:5;10346:24;:::i;:::-;10341:3;10334:37;10259:118;;:::o;10383:112::-;10466:22;10482:5;10466:22;:::i;:::-;10461:3;10454:35;10383:112;;:::o;10501:222::-;10594:4;10632:2;10621:9;10617:18;10609:26;;10645:71;10713:1;10702:9;10698:17;10689:6;10645:71;:::i;:::-;10501:222;;;;:::o;10729:210::-;10816:4;10854:2;10843:9;10839:18;10831:26;;10867:65;10929:1;10918:9;10914:17;10905:6;10867:65;:::i;:::-;10729:210;;;;:::o;10945:313::-;11058:4;11096:2;11085:9;11081:18;11073:26;;11145:9;11139:4;11135:20;11131:1;11120:9;11116:17;11109:47;11173:78;11246:4;11237:6;11173:78;:::i;:::-;11165:86;;10945:313;;;;:::o;11264:419::-;11430:4;11468:2;11457:9;11453:18;11445:26;;11517:9;11511:4;11507:20;11503:1;11492:9;11488:17;11481:47;11545:131;11671:4;11545:131;:::i;:::-;11537:139;;11264:419;;;:::o;11689:::-;11855:4;11893:2;11882:9;11878:18;11870:26;;11942:9;11936:4;11932:20;11928:1;11917:9;11913:17;11906:47;11970:131;12096:4;11970:131;:::i;:::-;11962:139;;11689:419;;;:::o;12114:::-;12280:4;12318:2;12307:9;12303:18;12295:26;;12367:9;12361:4;12357:20;12353:1;12342:9;12338:17;12331:47;12395:131;12521:4;12395:131;:::i;:::-;12387:139;;12114:419;;;:::o;12539:::-;12705:4;12743:2;12732:9;12728:18;12720:26;;12792:9;12786:4;12782:20;12778:1;12767:9;12763:17;12756:47;12820:131;12946:4;12820:131;:::i;:::-;12812:139;;12539:419;;;:::o;12964:::-;13130:4;13168:2;13157:9;13153:18;13145:26;;13217:9;13211:4;13207:20;13203:1;13192:9;13188:17;13181:47;13245:131;13371:4;13245:131;:::i;:::-;13237:139;;12964:419;;;:::o;13389:::-;13555:4;13593:2;13582:9;13578:18;13570:26;;13642:9;13636:4;13632:20;13628:1;13617:9;13613:17;13606:47;13670:131;13796:4;13670:131;:::i;:::-;13662:139;;13389:419;;;:::o;13814:::-;13980:4;14018:2;14007:9;14003:18;13995:26;;14067:9;14061:4;14057:20;14053:1;14042:9;14038:17;14031:47;14095:131;14221:4;14095:131;:::i;:::-;14087:139;;13814:419;;;:::o;14239:::-;14405:4;14443:2;14432:9;14428:18;14420:26;;14492:9;14486:4;14482:20;14478:1;14467:9;14463:17;14456:47;14520:131;14646:4;14520:131;:::i;:::-;14512:139;;14239:419;;;:::o;14664:::-;14830:4;14868:2;14857:9;14853:18;14845:26;;14917:9;14911:4;14907:20;14903:1;14892:9;14888:17;14881:47;14945:131;15071:4;14945:131;:::i;:::-;14937:139;;14664:419;;;:::o;15089:::-;15255:4;15293:2;15282:9;15278:18;15270:26;;15342:9;15336:4;15332:20;15328:1;15317:9;15313:17;15306:47;15370:131;15496:4;15370:131;:::i;:::-;15362:139;;15089:419;;;:::o;15514:::-;15680:4;15718:2;15707:9;15703:18;15695:26;;15767:9;15761:4;15757:20;15753:1;15742:9;15738:17;15731:47;15795:131;15921:4;15795:131;:::i;:::-;15787:139;;15514:419;;;:::o;15939:::-;16105:4;16143:2;16132:9;16128:18;16120:26;;16192:9;16186:4;16182:20;16178:1;16167:9;16163:17;16156:47;16220:131;16346:4;16220:131;:::i;:::-;16212:139;;15939:419;;;:::o;16364:::-;16530:4;16568:2;16557:9;16553:18;16545:26;;16617:9;16611:4;16607:20;16603:1;16592:9;16588:17;16581:47;16645:131;16771:4;16645:131;:::i;:::-;16637:139;;16364:419;;;:::o;16789:::-;16955:4;16993:2;16982:9;16978:18;16970:26;;17042:9;17036:4;17032:20;17028:1;17017:9;17013:17;17006:47;17070:131;17196:4;17070:131;:::i;:::-;17062:139;;16789:419;;;:::o;17214:222::-;17307:4;17345:2;17334:9;17330:18;17322:26;;17358:71;17426:1;17415:9;17411:17;17402:6;17358:71;:::i;:::-;17214:222;;;;:::o;17442:332::-;17563:4;17601:2;17590:9;17586:18;17578:26;;17614:71;17682:1;17671:9;17667:17;17658:6;17614:71;:::i;:::-;17695:72;17763:2;17752:9;17748:18;17739:6;17695:72;:::i;:::-;17442:332;;;;;:::o;17780:214::-;17869:4;17907:2;17896:9;17892:18;17884:26;;17920:67;17984:1;17973:9;17969:17;17960:6;17920:67;:::i;:::-;17780:214;;;;:::o;18081:99::-;18133:6;18167:5;18161:12;18151:22;;18081:99;;;:::o;18186:169::-;18270:11;18304:6;18299:3;18292:19;18344:4;18339:3;18335:14;18320:29;;18186:169;;;;:::o;18361:305::-;18401:3;18420:20;18438:1;18420:20;:::i;:::-;18415:25;;18454:20;18472:1;18454:20;:::i;:::-;18449:25;;18608:1;18540:66;18536:74;18533:1;18530:81;18527:107;;;18614:18;;:::i;:::-;18527:107;18658:1;18655;18651:9;18644:16;;18361:305;;;;:::o;18672:185::-;18712:1;18729:20;18747:1;18729:20;:::i;:::-;18724:25;;18763:20;18781:1;18763:20;:::i;:::-;18758:25;;18802:1;18792:35;;18807:18;;:::i;:::-;18792:35;18849:1;18846;18842:9;18837:14;;18672:185;;;;:::o;18863:348::-;18903:7;18926:20;18944:1;18926:20;:::i;:::-;18921:25;;18960:20;18978:1;18960:20;:::i;:::-;18955:25;;19148:1;19080:66;19076:74;19073:1;19070:81;19065:1;19058:9;19051:17;19047:105;19044:131;;;19155:18;;:::i;:::-;19044:131;19203:1;19200;19196:9;19185:20;;18863:348;;;;:::o;19217:191::-;19257:4;19277:20;19295:1;19277:20;:::i;:::-;19272:25;;19311:20;19329:1;19311:20;:::i;:::-;19306:25;;19350:1;19347;19344:8;19341:34;;;19355:18;;:::i;:::-;19341:34;19400:1;19397;19393:9;19385:17;;19217:191;;;;:::o;19414:96::-;19451:7;19480:24;19498:5;19480:24;:::i;:::-;19469:35;;19414:96;;;:::o;19516:90::-;19550:7;19593:5;19586:13;19579:21;19568:32;;19516:90;;;:::o;19612:126::-;19649:7;19689:42;19682:5;19678:54;19667:65;;19612:126;;;:::o;19744:77::-;19781:7;19810:5;19799:16;;19744:77;;;:::o;19827:86::-;19862:7;19902:4;19895:5;19891:16;19880:27;;19827:86;;;:::o;19919:307::-;19987:1;19997:113;20011:6;20008:1;20005:13;19997:113;;;20096:1;20091:3;20087:11;20081:18;20077:1;20072:3;20068:11;20061:39;20033:2;20030:1;20026:10;20021:15;;19997:113;;;20128:6;20125:1;20122:13;20119:101;;;20208:1;20199:6;20194:3;20190:16;20183:27;20119:101;19968:258;19919:307;;;:::o;20232:320::-;20276:6;20313:1;20307:4;20303:12;20293:22;;20360:1;20354:4;20350:12;20381:18;20371:81;;20437:4;20429:6;20425:17;20415:27;;20371:81;20499:2;20491:6;20488:14;20468:18;20465:38;20462:84;;;20518:18;;:::i;:::-;20462:84;20283:269;20232:320;;;:::o;20558:233::-;20597:3;20620:24;20638:5;20620:24;:::i;:::-;20611:33;;20666:66;20659:5;20656:77;20653:103;;;20736:18;;:::i;:::-;20653:103;20783:1;20776:5;20772:13;20765:20;;20558:233;;;:::o;20797:176::-;20829:1;20846:20;20864:1;20846:20;:::i;:::-;20841:25;;20880:20;20898:1;20880:20;:::i;:::-;20875:25;;20919:1;20909:35;;20924:18;;:::i;:::-;20909:35;20965:1;20962;20958:9;20953:14;;20797:176;;;;:::o;20979:180::-;21027:77;21024:1;21017:88;21124:4;21121:1;21114:15;21148:4;21145:1;21138:15;21165:180;21213:77;21210:1;21203:88;21310:4;21307:1;21300:15;21334:4;21331:1;21324:15;21351:180;21399:77;21396:1;21389:88;21496:4;21493:1;21486:15;21520:4;21517:1;21510:15;21537:180;21585:77;21582:1;21575:88;21682:4;21679:1;21672:15;21706:4;21703:1;21696:15;21723:180;21771:77;21768:1;21761:88;21868:4;21865:1;21858:15;21892:4;21889:1;21882:15;21909:180;21957:77;21954:1;21947:88;22054:4;22051:1;22044:15;22078:4;22075:1;22068:15;22218:117;22327:1;22324;22317:12;22341:102;22382:6;22433:2;22429:7;22424:2;22417:5;22413:14;22409:28;22399:38;;22341:102;;;:::o;22449:222::-;22589:34;22585:1;22577:6;22573:14;22566:58;22658:5;22653:2;22645:6;22641:15;22634:30;22449:222;:::o;22677:229::-;22817:34;22813:1;22805:6;22801:14;22794:58;22886:12;22881:2;22873:6;22869:15;22862:37;22677:229;:::o;22912:225::-;23052:34;23048:1;23040:6;23036:14;23029:58;23121:8;23116:2;23108:6;23104:15;23097:33;22912:225;:::o;23143:221::-;23283:34;23279:1;23271:6;23267:14;23260:58;23352:4;23347:2;23339:6;23335:15;23328:29;23143:221;:::o;23370:177::-;23510:29;23506:1;23498:6;23494:14;23487:53;23370:177;:::o;23553:::-;23693:29;23689:1;23681:6;23677:14;23670:53;23553:177;:::o;23736:181::-;23876:33;23872:1;23864:6;23860:14;23853:57;23736:181;:::o;23923:227::-;24063:34;24059:1;24051:6;24047:14;24040:58;24132:10;24127:2;24119:6;24115:15;24108:35;23923:227;:::o;24156:220::-;24296:34;24292:1;24284:6;24280:14;24273:58;24365:3;24360:2;24352:6;24348:15;24341:28;24156:220;:::o;24382:182::-;24522:34;24518:1;24510:6;24506:14;24499:58;24382:182;:::o;24570:228::-;24710:34;24706:1;24698:6;24694:14;24687:58;24779:11;24774:2;24766:6;24762:15;24755:36;24570:228;:::o;24804:224::-;24944:34;24940:1;24932:6;24928:14;24921:58;25013:7;25008:2;25000:6;24996:15;24989:32;24804:224;:::o;25034:223::-;25174:34;25170:1;25162:6;25158:14;25151:58;25243:6;25238:2;25230:6;25226:15;25219:31;25034:223;:::o;25263:231::-;25403:34;25399:1;25391:6;25387:14;25380:58;25472:14;25467:2;25459:6;25455:15;25448:39;25263:231;:::o;25500:122::-;25573:24;25591:5;25573:24;:::i;:::-;25566:5;25563:35;25553:63;;25612:1;25609;25602:12;25553:63;25500:122;:::o;25628:116::-;25698:21;25713:5;25698:21;:::i;:::-;25691:5;25688:32;25678:60;;25734:1;25731;25724:12;25678:60;25628:116;:::o;25750:122::-;25823:24;25841:5;25823:24;:::i;:::-;25816:5;25813:35;25803:63;;25862:1;25859;25852:12;25803:63;25750:122;:::o

Swarm Source

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