ETH Price: $3,180.70 (+5.06%)

Token

Ichigo Inu (Ichigo)
 

Overview

Max Total Supply

100,000,000,000,000,000 Ichigo

Holders

1,250 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
929,725,649,711.927002856 Ichigo

Value
$0.00
0x1f46e8b017cfcc6a1e6e48ec81290e9c0506dd95
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Ichigo Inu is the Anime & Inu based Token released on the ERC20 Network.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Ichigo

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-16
*/

// SPDX-License-Identifier: UNLICENSED 

pragma solidity ^0.6.12;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
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 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 () internal {
        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;
    }
}

// pragma solidity >=0.5.0;

interface IUniswapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

}

// pragma solidity >=0.5.0;

interface IUniswapPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);


    function factory() external view returns (address);
}

// pragma solidity >=0.6.2;

interface IUniswapRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
  
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
  
}



// pragma solidity >=0.6.2;

interface IUniswapRouter02 is IUniswapRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Ichigo is Context, IERC20, Ownable {
    using SafeMath for uint256;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;

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

    string private _name = "Ichigo Inu";
    string private _symbol = "Ichigo";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 9; //(3% liquidityAddition + 3% marketing  + 3% buybacks)
    uint256 private _previousLiquidityFee = _liquidityFee;
    

    //No limit
    uint256 public _maxTxAmount = _tTotal;
    address payable wallet;
    address payable wallet2;
    IUniswapRouter02 public uniswapRouter;
    address public uniswapPair;
    address private constant burnAddress = 0x000000000000000000000000000000000000dEaD;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool private launched = false;
    uint256 public launchedAt;
    uint256 private minTokensBeforeSwap = 8;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
         _;
        inSwapAndLiquify = false;
    }
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        wallet = payable(0x8579dE54d14ffeb5554C10AFD3Da25D15cD3De9a);
        wallet2  = payable(0x8579dE54d14ffeb5554C10AFD3Da25D15cD3De9a);
        
         IUniswapRouter02 _uniswapV2Router = IUniswapRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapRouter = _uniswapV2Router;
        
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[wallet] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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 view 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(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) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return 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 excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(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));
        require(spender != address(0));

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

    bool public limit = true;
    
    function changeLimit() public onlyOwner(){
        require(limit == true, 'limit is already false');
            limit = false;
    }
    
    function openTrading() external onlyOwner() {
        launched = true;
        launchedAt = block.number;
        swapAndLiquifyEnabled = true;
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(from == owner() || to == owner() || launched, "Not launched yet");
        
        if (block.number == launchedAt || block.number == launchedAt + 1){
            if (from == uniswapPair && from != owner() && to != owner()){
            to = burnAddress;
        }
    }
        if(limit == true && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && to != burnAddress){
            if(to != uniswapPair && from == uniswapPair){
                require(((balanceOf(to).add(amount)) <= 200000000000 * 10**4 * 10**9));
            }
            require(amount <= 100000000000 * 10**4 * 10**9, 'Transfer amount must be less');
            }
            
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount);

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
    
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapPair &&
            swapAndLiquifyEnabled
        ) {
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }
    
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 forLiquidity = contractTokenBalance.div(2);
        uint256 devExp = contractTokenBalance.div(4);
        uint256 forRewards = contractTokenBalance.div(4);
        // split the liquidity
        uint256 half = forLiquidity.div(2);
        uint256 otherHalf = forLiquidity.sub(half);
        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half.add(devExp).add(forRewards)); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 Balance = address(this).balance.sub(initialBalance);
        uint256 oneThird = Balance.div(3);
        wallet.transfer(oneThird);
        wallet2.transfer(oneThird);

        // add liquidity to uniswap
        addLiquidity(otherHalf, oneThird);
        
        emit SwapAndLiquify(half, oneThird, otherHalf);
    }
       

     
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();

        _approve(address(this), address(uniswapRouter), tokenAmount);

        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapRouter), tokenAmount);

        // add the liquidity
        uniswapRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            wallet,
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        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);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    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);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    
    function setMinTokensBeforeSwap(uint256 amount) external onlyOwner {
        minTokensBeforeSwap = amount;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
         require(maxTxPercent <= 20, "Maximum tax limit is 20 percent");
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapRouter when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":[],"name":"changeLimit","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"view","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"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526a52b7d2dcc80cd2e4000000600755600754600019816200002157fe5b06600019036008556040518060400160405280600a81526020017f49636869676f20496e7500000000000000000000000000000000000000000000815250600a9080519060200190620000769291906200076b565b506040518060400160405280600681526020017f49636869676f0000000000000000000000000000000000000000000000000000815250600b9080519060200190620000c49291906200076b565b506009600c60006101000a81548160ff021916908360ff1602179055506001600d55600d54600e556009600f55600f5460105560075460115560006015806101000a81548160ff0219169083151502179055506000601560166101000a81548160ff02191690831515021790555060086017556001601860006101000a81548160ff0219169083151502179055503480156200015f57600080fd5b506000620001726200073a60201b60201c565b9050620001846200073a60201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060085460016000620002366200073a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550738579de54d14ffeb5554c10afd3da25d15cd3de9a601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738579de54d14ffeb5554c10afd3da25d15cd3de9a601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037e57600080fd5b505afa15801562000393573d6000803e3d6000fd5b505050506040513d6020811015620003aa57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041e57600080fd5b505afa15801562000433573d6000803e3d6000fd5b505050506040513d60208110156200044a57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004c557600080fd5b505af1158015620004da573d6000803e3d6000fd5b505050506040513d6020811015620004f157600080fd5b8101908080519060200190929190505050601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000620006136200074260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006cc6200073a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a35062000811565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620007ae57805160ff1916838001178555620007df565b82800160010185558215620007df579182015b82811115620007de578251825591602001919060010190620007c1565b5b509050620007ee9190620007f2565b5090565b5b808211156200080d576000816000905550600101620007f3565b5090565b61506280620008216000396000f3fe60806040526004361061021e5760003560e01c80636bc87c3a11610123578063a4d66daf116100ab578063c9567bf91161006f578063c9567bf914610b9d578063d543dbeb14610bb4578063dd62ed3e14610bef578063ea2f0b3714610c74578063f2fde38b14610cc557610225565b8063a4d66daf14610a56578063a9059cbb14610a83578063bf56b37114610af4578063c49b9a8014610b1f578063c816841b14610b5c57610225565b80637d1db4a5116100f25780637d1db4a51461088257806388f82020146108ad5780638da5cb5b1461091457806395d89b4114610955578063a457c2d7146109e557610225565b80636bc87c3a1461079a57806370a08231146107c5578063715018a61461082a578063735de9f71461084157610225565b806339509351116101a65780634549b039116101755780634549b0391461061f57806348a464731461067a5780634a74bb02146106b557806352390c02146106e25780635342acb41461073357610225565b806339509351146104f75780633b124fe7146105685780633bd5d17314610593578063437823ec146105ce57610225565b806323b872dd116101ed57806323b872dd146103815780632cde6081146104125780632d83811914610429578063313ce567146104785780633685d419146104a657610225565b806306fdde031461022a578063095ea7b3146102ba57806313114a9d1461032b57806318160ddd1461035657610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610d16565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c657600080fd5b50610313600480360360408110156102dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610db8565b60405180821515815260200191505060405180910390f35b34801561033757600080fd5b50610340610dd6565b6040518082815260200191505060405180910390f35b34801561036257600080fd5b5061036b610de0565b6040518082815260200191505060405180910390f35b34801561038d57600080fd5b506103fa600480360360608110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dea565b60405180821515815260200191505060405180910390f35b34801561041e57600080fd5b50610427610ec3565b005b34801561043557600080fd5b506104626004803603602081101561044c57600080fd5b8101908080359060200190929190505050611031565b6040518082815260200191505060405180910390f35b34801561048457600080fd5b5061048d6110b5565b604051808260ff16815260200191505060405180910390f35b3480156104b257600080fd5b506104f5600480360360208110156104c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110cc565b005b34801561050357600080fd5b506105506004803603604081101561051a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611456565b60405180821515815260200191505060405180910390f35b34801561057457600080fd5b5061057d611509565b6040518082815260200191505060405180910390f35b34801561059f57600080fd5b506105cc600480360360208110156105b657600080fd5b810190808035906020019092919050505061150f565b005b3480156105da57600080fd5b5061061d600480360360208110156105f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a0565b005b34801561062b57600080fd5b506106646004803603604081101561064257600080fd5b81019080803590602001909291908035151590602001909291905050506117c3565b6040518082815260200191505060405180910390f35b34801561068657600080fd5b506106b36004803603602081101561069d57600080fd5b810190808035906020019092919050505061187a565b005b3480156106c157600080fd5b506106ca61194c565b60405180821515815260200191505060405180910390f35b3480156106ee57600080fd5b506107316004803603602081101561070557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061195d565b005b34801561073f57600080fd5b506107826004803603602081101561075657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c77565b60405180821515815260200191505060405180910390f35b3480156107a657600080fd5b506107af611ccd565b6040518082815260200191505060405180910390f35b3480156107d157600080fd5b50610814600480360360208110156107e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd3565b6040518082815260200191505060405180910390f35b34801561083657600080fd5b5061083f611dbe565b005b34801561084d57600080fd5b50610856611f44565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088e57600080fd5b50610897611f6a565b6040518082815260200191505060405180910390f35b3480156108b957600080fd5b506108fc600480360360208110156108d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f70565b60405180821515815260200191505060405180910390f35b34801561092057600080fd5b50610929611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561096157600080fd5b5061096a611fef565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109aa57808201518184015260208101905061098f565b50505050905090810190601f1680156109d75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109f157600080fd5b50610a3e60048036036040811015610a0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612091565b60405180821515815260200191505060405180910390f35b348015610a6257600080fd5b50610a6b61215e565b60405180821515815260200191505060405180910390f35b348015610a8f57600080fd5b50610adc60048036036040811015610aa657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612171565b60405180821515815260200191505060405180910390f35b348015610b0057600080fd5b50610b0961218f565b6040518082815260200191505060405180910390f35b348015610b2b57600080fd5b50610b5a60048036036020811015610b4257600080fd5b81019080803515159060200190929190505050612195565b005b348015610b6857600080fd5b50610b716122b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba957600080fd5b50610bb26122d8565b005b348015610bc057600080fd5b50610bed60048036036020811015610bd757600080fd5b81019080803590602001909291905050506123de565b005b348015610bfb57600080fd5b50610c5e60048036036040811015610c1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061254e565b6040518082815260200191505060405180910390f35b348015610c8057600080fd5b50610cc360048036036020811015610c9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125d5565b005b348015610cd157600080fd5b50610d1460048036036020811015610ce857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126f8565b005b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b5050505050905090565b6000610dcc610dc5612903565b848461290b565b6001905092915050565b6000600954905090565b6000600754905090565b6000610df7848484612a6a565b610eb884610e03612903565b610eb385604051806060016040528060288152602001614f6660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e69612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132259092919063ffffffff16565b61290b565b600190509392505050565b610ecb612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515601860009054906101000a900460ff16151514611014576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6c696d697420697320616c72656164792066616c73650000000000000000000081525060200191505060405180910390fd5b6000601860006101000a81548160ff021916908315150217905550565b600060085482111561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614ef5602a913960400191505060405180910390fd5b60006110986132e5565b90506110ad818461331090919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6110d4612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611194576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600680549050811015611452578173ffffffffffffffffffffffffffffffffffffffff166006828154811061128757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611445576006600160068054905003815481106112e357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061131b57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061140b57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611452565b8080600101915050611256565b5050565b60006114ff611463612903565b846114fa8560036000611474612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b61290b565b6001905092915050565b600d5481565b6000611519612903565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614fdc602c913960400191505060405180910390fd5b60006115c9836133e2565b5050505050905061162281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061167a8160085461343e90919063ffffffff16565b6008819055506116958360095461335a90919063ffffffff16565b600981905550505050565b6116a8612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060075483111561183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161185d57600061184d846133e2565b5050505050905080915050611874565b6000611868846133e2565b50505050915050809150505b92915050565b611882612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060178190555050565b60158054906101000a900460ff1681565b611965612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bb957611b75600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611031565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d6e57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611db9565b611db6600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611031565b90505b919050565b611dc6612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120875780601f1061205c57610100808354040283529160200191612087565b820191906000526020600020905b81548152906001019060200180831161206a57829003601f168201915b5050505050905090565b600061215461209e612903565b8461214f8560405180606001604052806025815260200161500860259139600360006120c8612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132259092919063ffffffff16565b61290b565b6001905092915050565b601860009054906101000a900460ff1681565b600061218561217e612903565b8484612a6a565b6001905092915050565b60165481565b61219d612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122e0612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601560166101000a81548160ff0219169083151502179055504360168190555060016015806101000a81548160ff021916908315150217905550565b6123e6612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601481111561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d6178696d756d20746178206c696d69742069732032302070657263656e740081525060200191505060405180910390fd5b61254560646125378360075461348890919063ffffffff16565b61331090919063ffffffff16565b60118190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125dd612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612700612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612846576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f1f6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561294557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297f57600080fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614fb76025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ed26023913960400191505060405180910390fd5b60008111612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614f8e6029913960400191505060405180910390fd5b612bd7611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612c425750612c13611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612c595750601560169054906101000a900460ff165b612ccb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f74206c61756e63686564207965740000000000000000000000000000000081525060200191505060405180910390fd5b601654431480612cdf575060016016540143145b15612dbf57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612d745750612d44611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612db35750612d83611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dbe5761dead91505b5b60011515601860009054906101000a900460ff161515148015612e2c5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e825750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ebc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561302557601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f6c5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612fa4576a01a784379d99db42000000612f9882612f8a85611cd3565b61335a90919063ffffffff16565b1115612fa357600080fd5b5b69d3c21bcecceda1000000811115613024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5472616e7366657220616d6f756e74206d757374206265206c6573730000000081525060200191505060405180910390fd5b5b61302d611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561309b575061306b611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130b0576011548111156130af57600080fd5b5b60006130bb30611cd3565b9050600060175482101590508080156130e15750601560149054906101000a900460ff16155b801561313b5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613151575060158054906101000a900460ff165b156131605761315f8261350e565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132075750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321157600090505b61321d8686868461374a565b505050505050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006132f2613a5b565b91509150613309818361331090919063ffffffff16565b9250505090565b600061335283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cec565b905092915050565b6000808284019050838110156133d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006133f98a613db2565b92509250925060008060006134178d86866134126132e5565b613e0c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061348083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008083141561349b5760009050613508565b60008284029050828482816134ac57fe5b0414613503576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614f456021913960400191505060405180910390fd5b809150505b92915050565b6001601560146101000a81548160ff021916908315150217905550600061353f60028361331090919063ffffffff16565b9050600061355760048461331090919063ffffffff16565b9050600061356f60048561331090919063ffffffff16565b9050600061358760028561331090919063ffffffff16565b9050600061359e828661343e90919063ffffffff16565b905060004790506135d26135cd856135bf888761335a90919063ffffffff16565b61335a90919063ffffffff16565b613e95565b60006135e7824761343e90919063ffffffff16565b905060006135ff60038361331090919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613669573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156136d2573d6000803e3d6000fd5b506136dd8482614149565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828660405180848152602001838152602001828152602001935050505060405180910390a150505050505050506000601560146101000a81548160ff02191690831515021790555050565b80613758576137576142b9565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137fb5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138105761380b8484846142fc565b613a47565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138b35750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138c8576138c384848461455c565b613a46565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561396c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139815761397c8484846147bc565b613a45565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a235750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a3857613a33848484614987565b613a44565b613a438484846147bc565b5b5b5b5b80613a5557613a54614c7c565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613caf57826001600060068481548110613a8e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613b755750816002600060068481548110613b0d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613b8c5760085460075494509450505050613ce8565b613c156001600060068481548110613ba057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461343e90919063ffffffff16565b9250613ca06002600060068481548110613c2b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361343e90919063ffffffff16565b91508080600101915050613a6f565b50613cc760075460085461331090919063ffffffff16565b821015613cdf57600854600754935093505050613ce8565b81819350935050505b9091565b60008083118290613d98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d5d578082015181840152602081019050613d42565b50505050905090810190601f168015613d8a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613da457fe5b049050809150509392505050565b600080600080613dc185614c90565b90506000613dce86614cc1565b90506000613df782613de9858a61343e90919063ffffffff16565b61343e90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613e25858961348890919063ffffffff16565b90506000613e3c868961348890919063ffffffff16565b90506000613e53878961348890919063ffffffff16565b90506000613e7c82613e6e858761343e90919063ffffffff16565b61343e90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613eaf57600080fd5b50604051908082528060200260200182016040528015613ede5781602001602082028036833780820191505090505b5090503081600081518110613eef57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f9157600080fd5b505afa158015613fa5573d6000803e3d6000fd5b505050506040513d6020811015613fbb57600080fd5b810190808051906020019092919050505081600181518110613fd957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061404030601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461290b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156141045780820151818401526020810190506140e9565b505050509050019650505050505050600060405180830381600087803b15801561412d57600080fd5b505af1158015614141573d6000803e3d6000fd5b505050505050565b61417630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461290b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561426257600080fd5b505af1158015614276573d6000803e3d6000fd5b50505050506040513d606081101561428d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600d541480156142cd57506000600f54145b156142d7576142fa565b600d54600e81905550600f546010819055506000600d819055506000600f819055505b565b60008060008060008061430e876133e2565b95509550955095509550955061436c87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061440186600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144e281614cf2565b6144ec8483614e97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061456e876133e2565b9550955095509550955095506145cc86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061466183600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146f685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061474281614cf2565b61474c8483614e97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806147ce876133e2565b95509550955095509550955061482c86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148c185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061490d81614cf2565b6149178483614e97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614999876133e2565b9550955095509550955095506149f787600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a8c86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b2183600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bb685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c0281614cf2565b614c0c8483614e97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600e54600d81905550601054600f81905550565b6000614cba6064614cac600d548561348890919063ffffffff16565b61331090919063ffffffff16565b9050919050565b6000614ceb6064614cdd600f548561348890919063ffffffff16565b61331090919063ffffffff16565b9050919050565b6000614cfc6132e5565b90506000614d13828461348890919063ffffffff16565b9050614d6781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e9257614e4e83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614eac8260085461343e90919063ffffffff16565b600881905550614ec78160095461335a90919063ffffffff16565b600981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d49c1372f1e90ae4ca8bd5dbc48fc8131bfae94cdc2bae28b279cf0944d7edb364736f6c634300060c0033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80636bc87c3a11610123578063a4d66daf116100ab578063c9567bf91161006f578063c9567bf914610b9d578063d543dbeb14610bb4578063dd62ed3e14610bef578063ea2f0b3714610c74578063f2fde38b14610cc557610225565b8063a4d66daf14610a56578063a9059cbb14610a83578063bf56b37114610af4578063c49b9a8014610b1f578063c816841b14610b5c57610225565b80637d1db4a5116100f25780637d1db4a51461088257806388f82020146108ad5780638da5cb5b1461091457806395d89b4114610955578063a457c2d7146109e557610225565b80636bc87c3a1461079a57806370a08231146107c5578063715018a61461082a578063735de9f71461084157610225565b806339509351116101a65780634549b039116101755780634549b0391461061f57806348a464731461067a5780634a74bb02146106b557806352390c02146106e25780635342acb41461073357610225565b806339509351146104f75780633b124fe7146105685780633bd5d17314610593578063437823ec146105ce57610225565b806323b872dd116101ed57806323b872dd146103815780632cde6081146104125780632d83811914610429578063313ce567146104785780633685d419146104a657610225565b806306fdde031461022a578063095ea7b3146102ba57806313114a9d1461032b57806318160ddd1461035657610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610d16565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c657600080fd5b50610313600480360360408110156102dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610db8565b60405180821515815260200191505060405180910390f35b34801561033757600080fd5b50610340610dd6565b6040518082815260200191505060405180910390f35b34801561036257600080fd5b5061036b610de0565b6040518082815260200191505060405180910390f35b34801561038d57600080fd5b506103fa600480360360608110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dea565b60405180821515815260200191505060405180910390f35b34801561041e57600080fd5b50610427610ec3565b005b34801561043557600080fd5b506104626004803603602081101561044c57600080fd5b8101908080359060200190929190505050611031565b6040518082815260200191505060405180910390f35b34801561048457600080fd5b5061048d6110b5565b604051808260ff16815260200191505060405180910390f35b3480156104b257600080fd5b506104f5600480360360208110156104c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110cc565b005b34801561050357600080fd5b506105506004803603604081101561051a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611456565b60405180821515815260200191505060405180910390f35b34801561057457600080fd5b5061057d611509565b6040518082815260200191505060405180910390f35b34801561059f57600080fd5b506105cc600480360360208110156105b657600080fd5b810190808035906020019092919050505061150f565b005b3480156105da57600080fd5b5061061d600480360360208110156105f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a0565b005b34801561062b57600080fd5b506106646004803603604081101561064257600080fd5b81019080803590602001909291908035151590602001909291905050506117c3565b6040518082815260200191505060405180910390f35b34801561068657600080fd5b506106b36004803603602081101561069d57600080fd5b810190808035906020019092919050505061187a565b005b3480156106c157600080fd5b506106ca61194c565b60405180821515815260200191505060405180910390f35b3480156106ee57600080fd5b506107316004803603602081101561070557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061195d565b005b34801561073f57600080fd5b506107826004803603602081101561075657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c77565b60405180821515815260200191505060405180910390f35b3480156107a657600080fd5b506107af611ccd565b6040518082815260200191505060405180910390f35b3480156107d157600080fd5b50610814600480360360208110156107e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd3565b6040518082815260200191505060405180910390f35b34801561083657600080fd5b5061083f611dbe565b005b34801561084d57600080fd5b50610856611f44565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088e57600080fd5b50610897611f6a565b6040518082815260200191505060405180910390f35b3480156108b957600080fd5b506108fc600480360360208110156108d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f70565b60405180821515815260200191505060405180910390f35b34801561092057600080fd5b50610929611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561096157600080fd5b5061096a611fef565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109aa57808201518184015260208101905061098f565b50505050905090810190601f1680156109d75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109f157600080fd5b50610a3e60048036036040811015610a0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612091565b60405180821515815260200191505060405180910390f35b348015610a6257600080fd5b50610a6b61215e565b60405180821515815260200191505060405180910390f35b348015610a8f57600080fd5b50610adc60048036036040811015610aa657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612171565b60405180821515815260200191505060405180910390f35b348015610b0057600080fd5b50610b0961218f565b6040518082815260200191505060405180910390f35b348015610b2b57600080fd5b50610b5a60048036036020811015610b4257600080fd5b81019080803515159060200190929190505050612195565b005b348015610b6857600080fd5b50610b716122b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba957600080fd5b50610bb26122d8565b005b348015610bc057600080fd5b50610bed60048036036020811015610bd757600080fd5b81019080803590602001909291905050506123de565b005b348015610bfb57600080fd5b50610c5e60048036036040811015610c1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061254e565b6040518082815260200191505060405180910390f35b348015610c8057600080fd5b50610cc360048036036020811015610c9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125d5565b005b348015610cd157600080fd5b50610d1460048036036020811015610ce857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126f8565b005b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b5050505050905090565b6000610dcc610dc5612903565b848461290b565b6001905092915050565b6000600954905090565b6000600754905090565b6000610df7848484612a6a565b610eb884610e03612903565b610eb385604051806060016040528060288152602001614f6660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e69612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132259092919063ffffffff16565b61290b565b600190509392505050565b610ecb612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515601860009054906101000a900460ff16151514611014576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6c696d697420697320616c72656164792066616c73650000000000000000000081525060200191505060405180910390fd5b6000601860006101000a81548160ff021916908315150217905550565b600060085482111561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614ef5602a913960400191505060405180910390fd5b60006110986132e5565b90506110ad818461331090919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6110d4612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611194576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600680549050811015611452578173ffffffffffffffffffffffffffffffffffffffff166006828154811061128757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611445576006600160068054905003815481106112e357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061131b57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061140b57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611452565b8080600101915050611256565b5050565b60006114ff611463612903565b846114fa8560036000611474612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b61290b565b6001905092915050565b600d5481565b6000611519612903565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614fdc602c913960400191505060405180910390fd5b60006115c9836133e2565b5050505050905061162281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061167a8160085461343e90919063ffffffff16565b6008819055506116958360095461335a90919063ffffffff16565b600981905550505050565b6116a8612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060075483111561183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161185d57600061184d846133e2565b5050505050905080915050611874565b6000611868846133e2565b50505050915050809150505b92915050565b611882612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060178190555050565b60158054906101000a900460ff1681565b611965612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bb957611b75600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611031565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d6e57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611db9565b611db6600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611031565b90505b919050565b611dc6612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120875780601f1061205c57610100808354040283529160200191612087565b820191906000526020600020905b81548152906001019060200180831161206a57829003601f168201915b5050505050905090565b600061215461209e612903565b8461214f8560405180606001604052806025815260200161500860259139600360006120c8612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132259092919063ffffffff16565b61290b565b6001905092915050565b601860009054906101000a900460ff1681565b600061218561217e612903565b8484612a6a565b6001905092915050565b60165481565b61219d612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122e0612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601560166101000a81548160ff0219169083151502179055504360168190555060016015806101000a81548160ff021916908315150217905550565b6123e6612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601481111561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d6178696d756d20746178206c696d69742069732032302070657263656e740081525060200191505060405180910390fd5b61254560646125378360075461348890919063ffffffff16565b61331090919063ffffffff16565b60118190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125dd612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612700612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612846576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f1f6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561294557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297f57600080fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614fb76025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ed26023913960400191505060405180910390fd5b60008111612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614f8e6029913960400191505060405180910390fd5b612bd7611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612c425750612c13611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612c595750601560169054906101000a900460ff165b612ccb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f74206c61756e63686564207965740000000000000000000000000000000081525060200191505060405180910390fd5b601654431480612cdf575060016016540143145b15612dbf57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612d745750612d44611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612db35750612d83611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dbe5761dead91505b5b60011515601860009054906101000a900460ff161515148015612e2c5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e825750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ebc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561302557601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f6c5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612fa4576a01a784379d99db42000000612f9882612f8a85611cd3565b61335a90919063ffffffff16565b1115612fa357600080fd5b5b69d3c21bcecceda1000000811115613024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5472616e7366657220616d6f756e74206d757374206265206c6573730000000081525060200191505060405180910390fd5b5b61302d611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561309b575061306b611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130b0576011548111156130af57600080fd5b5b60006130bb30611cd3565b9050600060175482101590508080156130e15750601560149054906101000a900460ff16155b801561313b5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613151575060158054906101000a900460ff165b156131605761315f8261350e565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132075750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321157600090505b61321d8686868461374a565b505050505050565b60008383111582906132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561329757808201518184015260208101905061327c565b50505050905090810190601f1680156132c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006132f2613a5b565b91509150613309818361331090919063ffffffff16565b9250505090565b600061335283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cec565b905092915050565b6000808284019050838110156133d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006133f98a613db2565b92509250925060008060006134178d86866134126132e5565b613e0c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061348083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613225565b905092915050565b60008083141561349b5760009050613508565b60008284029050828482816134ac57fe5b0414613503576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614f456021913960400191505060405180910390fd5b809150505b92915050565b6001601560146101000a81548160ff021916908315150217905550600061353f60028361331090919063ffffffff16565b9050600061355760048461331090919063ffffffff16565b9050600061356f60048561331090919063ffffffff16565b9050600061358760028561331090919063ffffffff16565b9050600061359e828661343e90919063ffffffff16565b905060004790506135d26135cd856135bf888761335a90919063ffffffff16565b61335a90919063ffffffff16565b613e95565b60006135e7824761343e90919063ffffffff16565b905060006135ff60038361331090919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613669573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156136d2573d6000803e3d6000fd5b506136dd8482614149565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828660405180848152602001838152602001828152602001935050505060405180910390a150505050505050506000601560146101000a81548160ff02191690831515021790555050565b80613758576137576142b9565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137fb5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138105761380b8484846142fc565b613a47565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138b35750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138c8576138c384848461455c565b613a46565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561396c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139815761397c8484846147bc565b613a45565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a235750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a3857613a33848484614987565b613a44565b613a438484846147bc565b5b5b5b5b80613a5557613a54614c7c565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613caf57826001600060068481548110613a8e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613b755750816002600060068481548110613b0d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613b8c5760085460075494509450505050613ce8565b613c156001600060068481548110613ba057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461343e90919063ffffffff16565b9250613ca06002600060068481548110613c2b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361343e90919063ffffffff16565b91508080600101915050613a6f565b50613cc760075460085461331090919063ffffffff16565b821015613cdf57600854600754935093505050613ce8565b81819350935050505b9091565b60008083118290613d98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d5d578082015181840152602081019050613d42565b50505050905090810190601f168015613d8a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613da457fe5b049050809150509392505050565b600080600080613dc185614c90565b90506000613dce86614cc1565b90506000613df782613de9858a61343e90919063ffffffff16565b61343e90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613e25858961348890919063ffffffff16565b90506000613e3c868961348890919063ffffffff16565b90506000613e53878961348890919063ffffffff16565b90506000613e7c82613e6e858761343e90919063ffffffff16565b61343e90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613eaf57600080fd5b50604051908082528060200260200182016040528015613ede5781602001602082028036833780820191505090505b5090503081600081518110613eef57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f9157600080fd5b505afa158015613fa5573d6000803e3d6000fd5b505050506040513d6020811015613fbb57600080fd5b810190808051906020019092919050505081600181518110613fd957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061404030601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461290b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156141045780820151818401526020810190506140e9565b505050509050019650505050505050600060405180830381600087803b15801561412d57600080fd5b505af1158015614141573d6000803e3d6000fd5b505050505050565b61417630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461290b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561426257600080fd5b505af1158015614276573d6000803e3d6000fd5b50505050506040513d606081101561428d57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600d541480156142cd57506000600f54145b156142d7576142fa565b600d54600e81905550600f546010819055506000600d819055506000600f819055505b565b60008060008060008061430e876133e2565b95509550955095509550955061436c87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061440186600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144e281614cf2565b6144ec8483614e97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061456e876133e2565b9550955095509550955095506145cc86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061466183600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146f685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061474281614cf2565b61474c8483614e97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806147ce876133e2565b95509550955095509550955061482c86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148c185600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061490d81614cf2565b6149178483614e97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614999876133e2565b9550955095509550955095506149f787600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a8c86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343e90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b2183600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bb685600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c0281614cf2565b614c0c8483614e97565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600e54600d81905550601054600f81905550565b6000614cba6064614cac600d548561348890919063ffffffff16565b61331090919063ffffffff16565b9050919050565b6000614ceb6064614cdd600f548561348890919063ffffffff16565b61331090919063ffffffff16565b9050919050565b6000614cfc6132e5565b90506000614d13828461348890919063ffffffff16565b9050614d6781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e9257614e4e83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461335a90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614eac8260085461343e90919063ffffffff16565b600881905550614ec78160095461335a90919063ffffffff16565b600981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d49c1372f1e90ae4ca8bd5dbc48fc8131bfae94cdc2bae28b279cf0944d7edb364736f6c634300060c0033

Deployed Bytecode Sourcemap

12297:19602:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14949:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15861:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16982:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15226:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16030:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19417:136;;;;;;;;;;;;;:::i;:::-;;17906:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15135:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18622:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16351:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13036:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17077:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31009:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17462:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31260:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13603:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18167:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30874:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13123:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15329:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9633:148;;;;;;;;;;;;;:::i;:::-;;13404:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13301;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16854:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8990:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15040:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16577:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19380:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15535:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13687:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31629:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13448:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19565:153;;;;;;;;;;;;;:::i;:::-;;31385:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15710:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31132:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9936:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14949:83;14986:13;15019:5;15012:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14949:83;:::o;15861:161::-;15936:4;15953:39;15962:12;:10;:12::i;:::-;15976:7;15985:6;15953:8;:39::i;:::-;16010:4;16003:11;;15861:161;;;;:::o;16982:87::-;17024:7;17051:10;;17044:17;;16982:87;:::o;15226:95::-;15279:7;15306;;15299:14;;15226:95;:::o;16030:313::-;16128:4;16145:36;16155:6;16163:9;16174:6;16145:9;:36::i;:::-;16192:121;16201:6;16209:12;:10;:12::i;:::-;16223:89;16261:6;16223:89;;;;;;;;;;;;;;;;;:11;:19;16235:6;16223:19;;;;;;;;;;;;;;;:33;16243:12;:10;:12::i;:::-;16223:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;16192:8;:121::i;:::-;16331:4;16324:11;;16030:313;;;;;:::o;19417:136::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19486:4:::1;19477:13;;:5;;;;;;;;;;;:13;;;19469:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19540:5;19532;;:13;;;;;;;;;;;;;;;;;;19417:136::o:0;17906:253::-;17972:7;18011;;18000;:18;;17992:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18076:19;18099:10;:8;:10::i;:::-;18076:33;;18127:24;18139:11;18127:7;:11;;:24;;;;:::i;:::-;18120:31;;;17906:253;;;:::o;15135:83::-;15176:5;15201:9;;;;;;;;;;;15194:16;;15135:83;:::o;18622:479::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18704:11:::1;:20;18716:7;18704:20;;;;;;;;;;;;;;;;;;;;;;;;;18696:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18772:9;18767:327;18791:9;:16;;;;18787:1;:20;18767:327;;;18849:7;18833:23;;:9;18843:1;18833:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;18829:254;;;18892:9;18921:1;18902:9;:16;;;;:20;18892:31;;;;;;;;;;;;;;;;;;;;;;;;;18877:9;18887:1;18877:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18961:1;18942:7;:16;18950:7;18942:16;;;;;;;;;;;;;;;:20;;;;19004:5;18981:11;:20;18993:7;18981:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19028:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19062:5;;18829:254;18809:3;;;;;;;18767:327;;;;18622:479:::0;:::o;16351:218::-;16439:4;16456:83;16465:12;:10;:12::i;:::-;16479:7;16488:50;16527:10;16488:11;:25;16500:12;:10;:12::i;:::-;16488:25;;;;;;;;;;;;;;;:34;16514:7;16488:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;16456:8;:83::i;:::-;16557:4;16550:11;;16351:218;;;;:::o;13036:26::-;;;;:::o;17077:377::-;17129:14;17146:12;:10;:12::i;:::-;17129:29;;17178:11;:19;17190:6;17178:19;;;;;;;;;;;;;;;;;;;;;;;;;17177:20;17169:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17258:15;17282:19;17293:7;17282:10;:19::i;:::-;17257:44;;;;;;;17330:28;17350:7;17330;:15;17338:6;17330:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;17312:7;:15;17320:6;17312:15;;;;;;;;;;;;;;;:46;;;;17379:20;17391:7;17379;;:11;;:20;;;;:::i;:::-;17369:7;:30;;;;17423:23;17438:7;17423:10;;:14;;:23;;;;:::i;:::-;17410:10;:36;;;;17077:377;;;:::o;31009:111::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31108:4:::1;31078:18;:27;31097:7;31078:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31009:111:::0;:::o;17462:436::-;17552:7;17591;;17580;:18;;17572:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17650:17;17645:246;;17685:15;17709:19;17720:7;17709:10;:19::i;:::-;17684:44;;;;;;;17750:7;17743:14;;;;;17645:246;17792:23;17823:19;17834:7;17823:10;:19::i;:::-;17790:52;;;;;;;17864:15;17857:22;;;17462:436;;;;;:::o;31260:114::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31360:6:::1;31338:19;:28;;;;31260:114:::0;:::o;13603:41::-;;;;;;;;;;;;:::o;18167:447::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18364:11:::1;:20;18376:7;18364:20;;;;;;;;;;;;;;;;;;;;;;;;;18363:21;18355:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18449:1;18430:7;:16;18438:7;18430:16;;;;;;;;;;;;;;;;:20;18427:108;;;18486:37;18506:7;:16;18514:7;18506:16;;;;;;;;;;;;;;;;18486:19;:37::i;:::-;18467:7;:16;18475:7;18467:16;;;;;;;;;;;;;;;:56;;;;18427:108;18568:4;18545:11;:20;18557:7;18545:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;18583:9;18598:7;18583:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18167:447:::0;:::o;30874:123::-;30938:4;30962:18;:27;30981:7;30962:27;;;;;;;;;;;;;;;;;;;;;;;;;30955:34;;30874:123;;;:::o;13123:32::-;;;;:::o;15329:198::-;15395:7;15419:11;:20;15431:7;15419:20;;;;;;;;;;;;;;;;;;;;;;;;;15415:49;;;15448:7;:16;15456:7;15448:16;;;;;;;;;;;;;;;;15441:23;;;;15415:49;15482:37;15502:7;:16;15510:7;15502:16;;;;;;;;;;;;;;;;15482:19;:37::i;:::-;15475:44;;15329:198;;;;:::o;9633:148::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9740:1:::1;9703:40;;9724:6;::::0;::::1;;;;;;;;9703:40;;;;;;;;;;;;9771:1;9754:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9633:148::o:0;13404:37::-;;;;;;;;;;;;;:::o;13301:::-;;;;:::o;16854:120::-;16922:4;16946:11;:20;16958:7;16946:20;;;;;;;;;;;;;;;;;;;;;;;;;16939:27;;16854:120;;;:::o;8990:79::-;9028:7;9055:6;;;;;;;;;;;9048:13;;8990:79;:::o;15040:87::-;15079:13;15112:7;15105:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15040:87;:::o;16577:269::-;16670:4;16687:129;16696:12;:10;:12::i;:::-;16710:7;16719:96;16758:15;16719:96;;;;;;;;;;;;;;;;;:11;:25;16731:12;:10;:12::i;:::-;16719:25;;;;;;;;;;;;;;;:34;16745:7;16719:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;16687:8;:129::i;:::-;16834:4;16827:11;;16577:269;;;;:::o;19380:24::-;;;;;;;;;;;;;:::o;15535:167::-;15613:4;15630:42;15640:12;:10;:12::i;:::-;15654:9;15665:6;15630:9;:42::i;:::-;15690:4;15683:11;;15535:167;;;;:::o;13687:25::-;;;;:::o;31629:171::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31730:8:::1;31706:21;::::0;:32:::1;;;;;;;;;;;;;;;;;;31754:38;31783:8;31754:38;;;;;;;;;;;;;;;;;;;;31629:171:::0;:::o;13448:26::-;;;;;;;;;;;;;:::o;19565:153::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19631:4:::1;19620:8;;:15;;;;;;;;;;;;;;;;;;19659:12;19646:10;:25;;;;19706:4;19682:21;::::0;:28:::1;;;;;;;;;;;;;;;;;;19565:153::o:0;31385:236::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31489:2:::1;31473:12;:18;;31465:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31553:60;31597:5;31553:25;31565:12;31553:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;31538:12;:75;;;;31385:236:::0;:::o;15710:143::-;15791:7;15818:11;:18;15830:5;15818:18;;;;;;;;;;;;;;;:27;15837:7;15818:27;;;;;;;;;;;;;;;;15811:34;;15710:143;;;;:::o;31132:110::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31229:5:::1;31199:18;:27;31218:7;31199:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31132:110:::0;:::o;9936:244::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10045:1:::1;10025:22;;:8;:22;;;;10017:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10135:8;10106:38;;10127:6;::::0;::::1;;;;;;;;10106:38;;;;;;;;;;;;10164:8;10155:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;9936:244:::0;:::o;104:106::-;157:15;192:10;185:17;;104:106;:::o;19113:259::-;19223:1;19206:19;;:5;:19;;;;19198:28;;;;;;19264:1;19245:21;;:7;:21;;;;19237:30;;;;;;19310:6;19280:11;:18;19292:5;19280:18;;;;;;;;;;;;;;;:27;19299:7;19280:27;;;;;;;;;;;;;;;:36;;;;19348:7;19332:32;;19341:5;19332:32;;;19357:6;19332:32;;;;;;;;;;;;;;;;;;19113:259;;;:::o;19730:2239::-;19868:1;19852:18;;:4;:18;;;;19844:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19945:1;19931:16;;:2;:16;;;;19923:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20015:1;20006:6;:10;19998:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20089:7;:5;:7::i;:::-;20081:15;;:4;:15;;;:32;;;;20106:7;:5;:7::i;:::-;20100:13;;:2;:13;;;20081:32;:44;;;;20117:8;;;;;;;;;;;20081:44;20073:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20187:10;;20171:12;:26;:60;;;;20230:1;20217:10;;:14;20201:12;:30;20171:60;20167:190;;;20259:11;;;;;;;;;;;20251:19;;:4;:19;;;:38;;;;;20282:7;:5;:7::i;:::-;20274:15;;:4;:15;;;;20251:38;:55;;;;;20299:7;:5;:7::i;:::-;20293:13;;:2;:13;;;;20251:55;20247:103;;;13520:42;20322:16;;20247:103;20167:190;20379:4;20370:13;;:5;;;;;;;;;;;:13;;;:42;;;;;20388:18;:24;20407:4;20388:24;;;;;;;;;;;;;;;;;;;;;;;;;20387:25;20370:42;:69;;;;;20417:18;:22;20436:2;20417:22;;;;;;;;;;;;;;;;;;;;;;;;;20416:23;20370:69;:90;;;;;13520:42;20443:17;;:2;:17;;;;20370:90;20367:367;;;20485:11;;;;;;;;;;;20479:17;;:2;:17;;;;:40;;;;;20508:11;;;;;;;;;;;20500:19;;:4;:19;;;20479:40;20476:149;;;20579:28;20549:25;20567:6;20549:13;20559:2;20549:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;20548:59;;20539:70;;;;;;20476:149;20657:28;20647:6;:38;;20639:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20367:367;20769:7;:5;:7::i;:::-;20761:15;;:4;:15;;;;:32;;;;;20786:7;:5;:7::i;:::-;20780:13;;:2;:13;;;;20761:32;20758:81;;;20826:12;;20816:6;:22;;20808:31;;;;;;20758:81;21140:28;21171:24;21189:4;21171:9;:24::i;:::-;21140:55;;21206:24;21257:19;;21233:20;:43;;21206:70;;21305:19;:53;;;;;21342:16;;;;;;;;;;;21341:17;21305:53;:89;;;;;21383:11;;;;;;;;;;;21375:19;;:4;:19;;;;21305:89;:127;;;;;21411:21;;;;;;;;;;21305:127;21287:249;;;21488:36;21503:20;21488:14;:36::i;:::-;21287:249;21617:12;21632:4;21617:19;;21744:18;:24;21763:4;21744:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;21772:18;:22;21791:2;21772:22;;;;;;;;;;;;;;;;;;;;;;;;;21744:50;21741:96;;;21820:5;21810:15;;21741:96;21923:38;21938:4;21943:2;21946:6;21953:7;21923:14;:38::i;:::-;19730:2239;;;;;;:::o;4923:192::-;5009:7;5042:1;5037;:6;;5045:12;5029:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5069:9;5085:1;5081;:5;5069:17;;5106:1;5099:8;;;4923:192;;;;;:::o;29024:163::-;29065:7;29086:15;29103;29122:19;:17;:19::i;:::-;29085:56;;;;29159:20;29171:7;29159;:11;;:20;;;;:::i;:::-;29152:27;;;;29024:163;:::o;6321:132::-;6379:7;6406:39;6410:1;6413;6406:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6399:46;;6321:132;;;;:::o;4020:181::-;4078:7;4098:9;4114:1;4110;:5;4098:17;;4139:1;4134;:6;;4126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4192:1;4185:8;;;4020:181;;;;:::o;27822:419::-;27881:7;27890;27899;27908;27917;27926;27947:23;27972:12;27986:18;28008:20;28020:7;28008:11;:20::i;:::-;27946:82;;;;;;28040:15;28057:23;28082:12;28098:50;28110:7;28119:4;28125:10;28137;:8;:10::i;:::-;28098:11;:50::i;:::-;28039:109;;;;;;28167:7;28176:15;28193:4;28199:15;28216:4;28222:10;28159:74;;;;;;;;;;;;;;;;;;27822:419;;;;;;;:::o;4484:136::-;4542:7;4569:43;4573:1;4576;4569:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4562:50;;4484:136;;;;:::o;5374:471::-;5432:7;5682:1;5677;:6;5673:47;;;5707:1;5700:8;;;;5673:47;5732:9;5748:1;5744;:5;5732:17;;5777:1;5772;5768;:5;;;;;;:10;5760:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5836:1;5829:8;;;5374:471;;;;;:::o;21981:1312::-;14084:4;14065:16;;:23;;;;;;;;;;;;;;;;;;22117:20:::1;22140:27;22165:1;22140:20;:24;;:27;;;;:::i;:::-;22117:50;;22178:14;22195:27;22220:1;22195:20;:24;;:27;;;;:::i;:::-;22178:44;;22233:18;22254:27;22279:1;22254:20;:24;;:27;;;;:::i;:::-;22233:48;;22324:12;22339:19;22356:1;22339:12;:16;;:19;;;;:::i;:::-;22324:34;;22369:17;22389:22;22406:4;22389:12;:16;;:22;;;;:::i;:::-;22369:42;;22687:22;22712:21;22687:46;;22778:50;22795:32;22816:10;22795:16;22804:6;22795:4;:8;;:16;;;;:::i;:::-;:20;;:32;;;;:::i;:::-;22778:16;:50::i;:::-;22959:15;22977:41;23003:14;22977:21;:25;;:41;;;;:::i;:::-;22959:59;;23029:16;23048:14;23060:1;23048:7;:11;;:14;;;;:::i;:::-;23029:33;;23073:6;;;;;;;;;;;:15;;:25;23089:8;23073:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23109:7;;;;;;;;;;;:16;;:26;23126:8;23109:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23185:33;23198:9;23209:8;23185:12;:33::i;:::-;23244:41;23259:4;23265:8;23275:9;23244:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14100:1;;;;;;;;14131:5:::0;14112:16;;:24;;;;;;;;;;;;;;;;;;21981:1312;:::o;24497:834::-;24608:7;24604:40;;24630:14;:12;:14::i;:::-;24604:40;24669:11;:19;24681:6;24669:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24693:11;:22;24705:9;24693:22;;;;;;;;;;;;;;;;;;;;;;;;;24692:23;24669:46;24665:597;;;24732:48;24754:6;24762:9;24773:6;24732:21;:48::i;:::-;24665:597;;;24803:11;:19;24815:6;24803:19;;;;;;;;;;;;;;;;;;;;;;;;;24802:20;:46;;;;;24826:11;:22;24838:9;24826:22;;;;;;;;;;;;;;;;;;;;;;;;;24802:46;24798:464;;;24865:46;24885:6;24893:9;24904:6;24865:19;:46::i;:::-;24798:464;;;24934:11;:19;24946:6;24934:19;;;;;;;;;;;;;;;;;;;;;;;;;24933:20;:47;;;;;24958:11;:22;24970:9;24958:22;;;;;;;;;;;;;;;;;;;;;;;;;24957:23;24933:47;24929:333;;;24997:44;25015:6;25023:9;25034:6;24997:17;:44::i;:::-;24929:333;;;25063:11;:19;25075:6;25063:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25086:11;:22;25098:9;25086:22;;;;;;;;;;;;;;;;;;;;;;;;;25063:45;25059:203;;;25125:48;25147:6;25155:9;25166:6;25125:21;:48::i;:::-;25059:203;;;25206:44;25224:6;25232:9;25243:6;25206:17;:44::i;:::-;25059:203;24929:333;24798:464;24665:597;25286:7;25282:41;;25308:15;:13;:15::i;:::-;25282:41;24497:834;;;;:::o;29195:561::-;29245:7;29254;29274:15;29292:7;;29274:25;;29310:15;29328:7;;29310:25;;29357:9;29352:289;29376:9;:16;;;;29372:1;:20;29352:289;;;29442:7;29418;:21;29426:9;29436:1;29426:12;;;;;;;;;;;;;;;;;;;;;;;;;29418:21;;;;;;;;;;;;;;;;:31;:66;;;;29477:7;29453;:21;29461:9;29471:1;29461:12;;;;;;;;;;;;;;;;;;;;;;;;;29453:21;;;;;;;;;;;;;;;;:31;29418:66;29414:97;;;29494:7;;29503;;29486:25;;;;;;;;;29414:97;29536:34;29548:7;:21;29556:9;29566:1;29556:12;;;;;;;;;;;;;;;;;;;;;;;;;29548:21;;;;;;;;;;;;;;;;29536:7;:11;;:34;;;;:::i;:::-;29526:44;;29595:34;29607:7;:21;29615:9;29625:1;29615:12;;;;;;;;;;;;;;;;;;;;;;;;;29607:21;;;;;;;;;;;;;;;;29595:7;:11;;:34;;;;:::i;:::-;29585:44;;29394:3;;;;;;;29352:289;;;;29665:20;29677:7;;29665;;:11;;:20;;;;:::i;:::-;29655:7;:30;29651:61;;;29695:7;;29704;;29687:25;;;;;;;;29651:61;29731:7;29740;29723:25;;;;;;29195:561;;;:::o;6949:278::-;7035:7;7067:1;7063;:5;7070:12;7055:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7094:9;7110:1;7106;:5;;;;;;7094:17;;7218:1;7211:8;;;6949:278;;;;;:::o;28249:330::-;28309:7;28318;28327;28347:12;28362:24;28378:7;28362:15;:24::i;:::-;28347:39;;28397:18;28418:30;28440:7;28418:21;:30::i;:::-;28397:51;;28459:23;28485:33;28507:10;28485:17;28497:4;28485:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28459:59;;28537:15;28554:4;28560:10;28529:42;;;;;;;;;28249:330;;;;;:::o;28587:429::-;28702:7;28711;28720;28740:15;28758:24;28770:11;28758:7;:11;;:24;;;;:::i;:::-;28740:42;;28793:12;28808:21;28817:11;28808:4;:8;;:21;;;;:::i;:::-;28793:36;;28840:18;28861:27;28876:11;28861:10;:14;;:27;;;;:::i;:::-;28840:48;;28899:23;28925:33;28947:10;28925:17;28937:4;28925:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28899:59;;28977:7;28986:15;29003:4;28969:39;;;;;;;;;;28587:429;;;;;;;;:::o;23317:583::-;23443:21;23481:1;23467:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23443:40;;23512:4;23494;23499:1;23494:7;;;;;;;;;;;;;:23;;;;;;;;;;;23538:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23528:4;23533:1;23528:7;;;;;;;;;;;;;:30;;;;;;;;;;;23571:60;23588:4;23603:13;;;;;;;;;;;23619:11;23571:8;:60::i;:::-;23670:13;;;;;;;;;;;:64;;;23749:11;23775:1;23819:4;23846;23866:15;23670:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23317:583;;:::o;23908:508::-;24056:60;24073:4;24088:13;;;;;;;;;;;24104:11;24056:8;:60::i;:::-;24159:13;;;;;;;;;;;:29;;;24196:9;24229:4;24249:11;24275:1;24318;24361:6;;;;;;;;;;;24382:15;24159:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23908:508;;:::o;30475:250::-;30532:1;30521:7;;:12;:34;;;;;30554:1;30537:13;;:18;30521:34;30518:46;;;30557:7;;30518:46;30602:7;;30584:15;:25;;;;30644:13;;30620:21;:37;;;;30688:1;30678:7;:11;;;;30716:1;30700:13;:17;;;;30475:250;:::o;26443:566::-;26546:15;26563:23;26588:12;26602:23;26627:12;26641:18;26663:19;26674:7;26663:10;:19::i;:::-;26545:137;;;;;;;;;;;;26711:28;26731:7;26711;:15;26719:6;26711:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26693:7;:15;26701:6;26693:15;;;;;;;;;;;;;;;:46;;;;26768:28;26788:7;26768;:15;26776:6;26768:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26750:7;:15;26758:6;26750:15;;;;;;;;;;;;;;;:46;;;;26828:39;26851:15;26828:7;:18;26836:9;26828:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26807:7;:18;26815:9;26807:18;;;;;;;;;;;;;;;:60;;;;26881:26;26896:10;26881:14;:26::i;:::-;26918:23;26930:4;26936;26918:11;:23::i;:::-;26974:9;26957:44;;26966:6;26957:44;;;26985:15;26957:44;;;;;;;;;;;;;;;;;;26443:566;;;;;;;;;:::o;25849:586::-;25950:15;25967:23;25992:12;26006:23;26031:12;26045:18;26067:19;26078:7;26067:10;:19::i;:::-;25949:137;;;;;;;;;;;;26115:28;26135:7;26115;:15;26123:6;26115:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26097:7;:15;26105:6;26097:15;;;;;;;;;;;;;;;:46;;;;26175:39;26198:15;26175:7;:18;26183:9;26175:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26154:7;:18;26162:9;26154:18;;;;;;;;;;;;;;;:60;;;;26246:39;26269:15;26246:7;:18;26254:9;26246:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26225:7;:18;26233:9;26225:18;;;;;;;;;;;;;;;:60;;;;26307:26;26322:10;26307:14;:26::i;:::-;26344:23;26356:4;26362;26344:11;:23::i;:::-;26400:9;26383:44;;26392:6;26383:44;;;26411:15;26383:44;;;;;;;;;;;;;;;;;;25849:586;;;;;;;;;:::o;25339:502::-;25438:15;25455:23;25480:12;25494:23;25519:12;25533:18;25555:19;25566:7;25555:10;:19::i;:::-;25437:137;;;;;;;;;;;;25603:28;25623:7;25603;:15;25611:6;25603:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25585:7;:15;25593:6;25585:15;;;;;;;;;;;;;;;:46;;;;25663:39;25686:15;25663:7;:18;25671:9;25663:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25642:7;:18;25650:9;25642:18;;;;;;;;;;;;;;;:60;;;;25713:26;25728:10;25713:14;:26::i;:::-;25750:23;25762:4;25768;25750:11;:23::i;:::-;25806:9;25789:44;;25798:6;25789:44;;;25817:15;25789:44;;;;;;;;;;;;;;;;;;25339:502;;;;;;;;;:::o;27017:642::-;27120:15;27137:23;27162:12;27176:23;27201:12;27215:18;27237:19;27248:7;27237:10;:19::i;:::-;27119:137;;;;;;;;;;;;27285:28;27305:7;27285;:15;27293:6;27285:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27267:7;:15;27275:6;27267:15;;;;;;;;;;;;;;;:46;;;;27342:28;27362:7;27342;:15;27350:6;27342:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27324:7;:15;27332:6;27324:15;;;;;;;;;;;;;;;:46;;;;27402:39;27425:15;27402:7;:18;27410:9;27402:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27381:7;:18;27389:9;27381:18;;;;;;;;;;;;;;;:60;;;;27473:39;27496:15;27473:7;:18;27481:9;27473:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27452:7;:18;27460:9;27452:18;;;;;;;;;;;;;;;:60;;;;27531:26;27546:10;27531:14;:26::i;:::-;27568:23;27580:4;27586;27568:11;:23::i;:::-;27624:9;27607:44;;27616:6;27607:44;;;27635:15;27607:44;;;;;;;;;;;;;;;;;;27017:642;;;;;;;;;:::o;30737:125::-;30791:15;;30781:7;:25;;;;30833:21;;30817:13;:37;;;;30737:125::o;30135:154::-;30199:7;30226:55;30265:5;30226:20;30238:7;;30226;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;30219:62;;30135:154;;;:::o;30297:166::-;30367:7;30394:61;30439:5;30394:26;30406:13;;30394:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;30387:68;;30297:166;;;:::o;29768:355::-;29831:19;29854:10;:8;:10::i;:::-;29831:33;;29875:18;29896:27;29911:11;29896:10;:14;;:27;;;;:::i;:::-;29875:48;;29959:38;29986:10;29959:7;:22;29975:4;29959:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;29934:7;:22;29950:4;29934:22;;;;;;;;;;;;;;;:63;;;;30011:11;:26;30031:4;30011:26;;;;;;;;;;;;;;;;;;;;;;;;;30008:107;;;30077:38;30104:10;30077:7;:22;30093:4;30077:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30052:7;:22;30068:4;30052:22;;;;;;;;;;;;;;;:63;;;;30008:107;29768:355;;;:::o;27667:147::-;27745:17;27757:4;27745:7;;:11;;:17;;;;:::i;:::-;27735:7;:27;;;;27786:20;27801:4;27786:10;;:14;;:20;;;;:::i;:::-;27773:10;:33;;;;27667:147;;:::o

Swarm Source

ipfs://d49c1372f1e90ae4ca8bd5dbc48fc8131bfae94cdc2bae28b279cf0944d7edb3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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