ETH Price: $3,327.94 (-0.35%)
 

Overview

Max Total Supply

100,000,000 $VLC

Holders

28

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
966,887.391378015 $VLC

Value
$0.00
0x505a3bba719f6a123e78c7637ca371dffc549c00
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
NICHEME_ME

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 2022-05-30
*/

// Website: https://nicheme.me/
// Telegram: https://t.me/nicheme_me

// 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);
}


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 NICHEME_ME 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 = 100000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "NICHEME_ME";
    string private _symbol = "$VLC";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 3; //(1% liquidityAddition + 2% marketing)
    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(0xE87b5A07203F7e242Dc593a1Cb671b2Ab3660972);
        wallet2  = payable(0xE87b5A07203F7e242Dc593a1Cb671b2Ab3660972);
        
         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){
            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)) <= 1000000 * 10**9));
            }
            require(amount <= 1000000 * 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"}]

608060405267016345785d8a0000600755600754600019816200001e57fe5b06600019036008556040518060400160405280600a81526020017f4e494348454d455f4d4500000000000000000000000000000000000000000000815250600a90805190602001906200007392919062000768565b506040518060400160405280600481526020017f24564c4300000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000c192919062000768565b506009600c60006101000a81548160ff021916908360ff1602179055506001600d55600d54600e556003600f55600f5460105560075460115560006015806101000a81548160ff0219169083151502179055506000601560166101000a81548160ff02191690831515021790555060086017556001601860006101000a81548160ff0219169083151502179055503480156200015c57600080fd5b5060006200016f6200073760201b60201c565b9050620001816200073760201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060085460016000620002336200073760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555073e87b5a07203f7e242dc593a1cb671b2ab3660972601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e87b5a07203f7e242dc593a1cb671b2ab3660972601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037b57600080fd5b505afa15801562000390573d6000803e3d6000fd5b505050506040513d6020811015620003a757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041b57600080fd5b505afa15801562000430573d6000803e3d6000fd5b505050506040513d60208110156200044757600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004c257600080fd5b505af1158015620004d7573d6000803e3d6000fd5b505050506040513d6020811015620004ee57600080fd5b8101908080519060200190929190505050601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000620006106200073f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006c96200073760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a3506200080e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620007ab57805160ff1916838001178555620007dc565b82800160010185558215620007dc579182015b82811115620007db578251825591602001919060010190620007be565b5b509050620007eb9190620007ef565b5090565b5b808211156200080a576000816000905550600101620007f0565b5090565b61504c806200081e6000396000f3fe60806040526004361061021e5760003560e01c80636bc87c3a11610123578063a4d66daf116100ab578063c9567bf91161006f578063c9567bf914610b9d578063d543dbeb14610bb4578063dd62ed3e14610bef578063ea2f0b3714610c74578063f2fde38b14610cc557610225565b8063a4d66daf14610a56578063a9059cbb14610a83578063bf56b37114610af4578063c49b9a8014610b1f578063c816841b14610b5c57610225565b80637d1db4a5116100f25780637d1db4a51461088257806388f82020146108ad5780638da5cb5b1461091457806395d89b4114610955578063a457c2d7146109e557610225565b80636bc87c3a1461079a57806370a08231146107c5578063715018a61461082a578063735de9f71461084157610225565b806339509351116101a65780634549b039116101755780634549b0391461061f57806348a464731461067a5780634a74bb02146106b557806352390c02146106e25780635342acb41461073357610225565b806339509351146104f75780633b124fe7146105685780633bd5d17314610593578063437823ec146105ce57610225565b806323b872dd116101ed57806323b872dd146103815780632cde6081146104125780632d83811914610429578063313ce567146104785780633685d419146104a657610225565b806306fdde031461022a578063095ea7b3146102ba57806313114a9d1461032b57806318160ddd1461035657610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610d16565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c657600080fd5b50610313600480360360408110156102dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610db8565b60405180821515815260200191505060405180910390f35b34801561033757600080fd5b50610340610dd6565b6040518082815260200191505060405180910390f35b34801561036257600080fd5b5061036b610de0565b6040518082815260200191505060405180910390f35b34801561038d57600080fd5b506103fa600480360360608110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dea565b60405180821515815260200191505060405180910390f35b34801561041e57600080fd5b50610427610ec3565b005b34801561043557600080fd5b506104626004803603602081101561044c57600080fd5b8101908080359060200190929190505050611031565b6040518082815260200191505060405180910390f35b34801561048457600080fd5b5061048d6110b5565b604051808260ff16815260200191505060405180910390f35b3480156104b257600080fd5b506104f5600480360360208110156104c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110cc565b005b34801561050357600080fd5b506105506004803603604081101561051a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611456565b60405180821515815260200191505060405180910390f35b34801561057457600080fd5b5061057d611509565b6040518082815260200191505060405180910390f35b34801561059f57600080fd5b506105cc600480360360208110156105b657600080fd5b810190808035906020019092919050505061150f565b005b3480156105da57600080fd5b5061061d600480360360208110156105f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a0565b005b34801561062b57600080fd5b506106646004803603604081101561064257600080fd5b81019080803590602001909291908035151590602001909291905050506117c3565b6040518082815260200191505060405180910390f35b34801561068657600080fd5b506106b36004803603602081101561069d57600080fd5b810190808035906020019092919050505061187a565b005b3480156106c157600080fd5b506106ca61194c565b60405180821515815260200191505060405180910390f35b3480156106ee57600080fd5b506107316004803603602081101561070557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061195d565b005b34801561073f57600080fd5b506107826004803603602081101561075657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c77565b60405180821515815260200191505060405180910390f35b3480156107a657600080fd5b506107af611ccd565b6040518082815260200191505060405180910390f35b3480156107d157600080fd5b50610814600480360360208110156107e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd3565b6040518082815260200191505060405180910390f35b34801561083657600080fd5b5061083f611dbe565b005b34801561084d57600080fd5b50610856611f44565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088e57600080fd5b50610897611f6a565b6040518082815260200191505060405180910390f35b3480156108b957600080fd5b506108fc600480360360208110156108d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f70565b60405180821515815260200191505060405180910390f35b34801561092057600080fd5b50610929611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561096157600080fd5b5061096a611fef565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109aa57808201518184015260208101905061098f565b50505050905090810190601f1680156109d75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109f157600080fd5b50610a3e60048036036040811015610a0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612091565b60405180821515815260200191505060405180910390f35b348015610a6257600080fd5b50610a6b61215e565b60405180821515815260200191505060405180910390f35b348015610a8f57600080fd5b50610adc60048036036040811015610aa657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612171565b60405180821515815260200191505060405180910390f35b348015610b0057600080fd5b50610b0961218f565b6040518082815260200191505060405180910390f35b348015610b2b57600080fd5b50610b5a60048036036020811015610b4257600080fd5b81019080803515159060200190929190505050612195565b005b348015610b6857600080fd5b50610b716122b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba957600080fd5b50610bb26122d8565b005b348015610bc057600080fd5b50610bed60048036036020811015610bd757600080fd5b81019080803590602001909291905050506123de565b005b348015610bfb57600080fd5b50610c5e60048036036040811015610c1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061254e565b6040518082815260200191505060405180910390f35b348015610c8057600080fd5b50610cc360048036036020811015610c9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125d5565b005b348015610cd157600080fd5b50610d1460048036036020811015610ce857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126f8565b005b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b5050505050905090565b6000610dcc610dc5612903565b848461290b565b6001905092915050565b6000600954905090565b6000600754905090565b6000610df7848484612a6a565b610eb884610e03612903565b610eb385604051806060016040528060288152602001614f5060289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e69612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320f9092919063ffffffff16565b61290b565b600190509392505050565b610ecb612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515601860009054906101000a900460ff16151514611014576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6c696d697420697320616c72656164792066616c73650000000000000000000081525060200191505060405180910390fd5b6000601860006101000a81548160ff021916908315150217905550565b600060085482111561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614edf602a913960400191505060405180910390fd5b60006110986132cf565b90506110ad81846132fa90919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6110d4612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611194576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600680549050811015611452578173ffffffffffffffffffffffffffffffffffffffff166006828154811061128757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611445576006600160068054905003815481106112e357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061131b57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061140b57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611452565b8080600101915050611256565b5050565b60006114ff611463612903565b846114fa8560036000611474612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b61290b565b6001905092915050565b600d5481565b6000611519612903565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614fc6602c913960400191505060405180910390fd5b60006115c9836133cc565b5050505050905061162281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061167a8160085461342890919063ffffffff16565b6008819055506116958360095461334490919063ffffffff16565b600981905550505050565b6116a8612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060075483111561183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161185d57600061184d846133cc565b5050505050905080915050611874565b6000611868846133cc565b50505050915050809150505b92915050565b611882612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060178190555050565b60158054906101000a900460ff1681565b611965612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bb957611b75600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611031565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d6e57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611db9565b611db6600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611031565b90505b919050565b611dc6612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120875780601f1061205c57610100808354040283529160200191612087565b820191906000526020600020905b81548152906001019060200180831161206a57829003601f168201915b5050505050905090565b600061215461209e612903565b8461214f85604051806060016040528060258152602001614ff260259139600360006120c8612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320f9092919063ffffffff16565b61290b565b6001905092915050565b601860009054906101000a900460ff1681565b600061218561217e612903565b8484612a6a565b6001905092915050565b60165481565b61219d612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122e0612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601560166101000a81548160ff0219169083151502179055504360168190555060016015806101000a81548160ff021916908315150217905550565b6123e6612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601481111561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d6178696d756d20746178206c696d69742069732032302070657263656e740081525060200191505060405180910390fd5b61254560646125378360075461347290919063ffffffff16565b6132fa90919063ffffffff16565b60118190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125dd612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612700612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612846576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f096026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561294557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297f57600080fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614fa16025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ebc6023913960400191505060405180910390fd5b60008111612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614f786029913960400191505060405180910390fd5b612bd7611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612c425750612c13611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612c595750601560169054906101000a900460ff165b612ccb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f74206c61756e63686564207965740000000000000000000000000000000081525060200191505060405180910390fd5b601654431415612db057601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612d655750612d35611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612da45750612d74611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612daf5761dead91505b5b60011515601860009054906101000a900460ff161515148015612e1d5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e735750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ead575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561300f57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f5d5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612f915766038d7ea4c68000612f8582612f7785611cd3565b61334490919063ffffffff16565b1115612f9057600080fd5b5b66038d7ea4c6800081111561300e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5472616e7366657220616d6f756e74206d757374206265206c6573730000000081525060200191505060405180910390fd5b5b613017611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130855750613055611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561309a5760115481111561309957600080fd5b5b60006130a530611cd3565b9050600060175482101590508080156130cb5750601560149054906101000a900460ff16155b80156131255750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561313b575060158054906101000a900460ff165b1561314a57613149826134f8565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131f15750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131fb57600090505b61320786868684613734565b505050505050565b60008383111582906132bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613281578082015181840152602081019050613266565b50505050905090810190601f1680156132ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006132dc613a45565b915091506132f381836132fa90919063ffffffff16565b9250505090565b600061333c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cd6565b905092915050565b6000808284019050838110156133c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006133e38a613d9c565b92509250925060008060006134018d86866133fc6132cf565b613df6565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061346a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061320f565b905092915050565b60008083141561348557600090506134f2565b600082840290508284828161349657fe5b04146134ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614f2f6021913960400191505060405180910390fd5b809150505b92915050565b6001601560146101000a81548160ff02191690831515021790555060006135296002836132fa90919063ffffffff16565b905060006135416004846132fa90919063ffffffff16565b905060006135596004856132fa90919063ffffffff16565b905060006135716002856132fa90919063ffffffff16565b90506000613588828661342890919063ffffffff16565b905060004790506135bc6135b7856135a9888761334490919063ffffffff16565b61334490919063ffffffff16565b613e7f565b60006135d1824761342890919063ffffffff16565b905060006135e96003836132fa90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613653573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156136bc573d6000803e3d6000fd5b506136c78482614133565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828660405180848152602001838152602001828152602001935050505060405180910390a150505050505050506000601560146101000a81548160ff02191690831515021790555050565b80613742576137416142a3565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137e55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137fa576137f58484846142e6565b613a31565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561389d5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138b2576138ad848484614546565b613a30565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156139565750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561396b576139668484846147a6565b613a2f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a0d5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a2257613a1d848484614971565b613a2e565b613a2d8484846147a6565b5b5b5b5b80613a3f57613a3e614c66565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613c9957826001600060068481548110613a7857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613b5f5750816002600060068481548110613af757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613b765760085460075494509450505050613cd2565b613bff6001600060068481548110613b8a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461342890919063ffffffff16565b9250613c8a6002600060068481548110613c1557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361342890919063ffffffff16565b91508080600101915050613a59565b50613cb16007546008546132fa90919063ffffffff16565b821015613cc957600854600754935093505050613cd2565b81819350935050505b9091565b60008083118290613d82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d47578082015181840152602081019050613d2c565b50505050905090810190601f168015613d745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613d8e57fe5b049050809150509392505050565b600080600080613dab85614c7a565b90506000613db886614cab565b90506000613de182613dd3858a61342890919063ffffffff16565b61342890919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613e0f858961347290919063ffffffff16565b90506000613e26868961347290919063ffffffff16565b90506000613e3d878961347290919063ffffffff16565b90506000613e6682613e58858761342890919063ffffffff16565b61342890919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613e9957600080fd5b50604051908082528060200260200182016040528015613ec85781602001602082028036833780820191505090505b5090503081600081518110613ed957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f7b57600080fd5b505afa158015613f8f573d6000803e3d6000fd5b505050506040513d6020811015613fa557600080fd5b810190808051906020019092919050505081600181518110613fc357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061402a30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461290b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156140ee5780820151818401526020810190506140d3565b505050509050019650505050505050600060405180830381600087803b15801561411757600080fd5b505af115801561412b573d6000803e3d6000fd5b505050505050565b61416030601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461290b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b50505050506040513d606081101561427757600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600d541480156142b757506000600f54145b156142c1576142e4565b600d54600e81905550600f546010819055506000600d819055506000600f819055505b565b6000806000806000806142f8876133cc565b95509550955095509550955061435687600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143eb86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061448085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144cc81614cdc565b6144d68483614e81565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614558876133cc565b9550955095509550955095506145b686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061464b83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146e085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061472c81614cdc565b6147368483614e81565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806147b8876133cc565b95509550955095509550955061481686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148ab85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148f781614cdc565b6149018483614e81565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614983876133cc565b9550955095509550955095506149e187600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a7686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b0b83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ba085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bec81614cdc565b614bf68483614e81565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600e54600d81905550601054600f81905550565b6000614ca46064614c96600d548561347290919063ffffffff16565b6132fa90919063ffffffff16565b9050919050565b6000614cd56064614cc7600f548561347290919063ffffffff16565b6132fa90919063ffffffff16565b9050919050565b6000614ce66132cf565b90506000614cfd828461347290919063ffffffff16565b9050614d5181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e7c57614e3883600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614e968260085461342890919063ffffffff16565b600881905550614eb18160095461334490919063ffffffff16565b600981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220940dba42f81a9c789802c490226e0ed9911fd834cf6687d3cb82c26df50bdada64736f6c634300060c0033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80636bc87c3a11610123578063a4d66daf116100ab578063c9567bf91161006f578063c9567bf914610b9d578063d543dbeb14610bb4578063dd62ed3e14610bef578063ea2f0b3714610c74578063f2fde38b14610cc557610225565b8063a4d66daf14610a56578063a9059cbb14610a83578063bf56b37114610af4578063c49b9a8014610b1f578063c816841b14610b5c57610225565b80637d1db4a5116100f25780637d1db4a51461088257806388f82020146108ad5780638da5cb5b1461091457806395d89b4114610955578063a457c2d7146109e557610225565b80636bc87c3a1461079a57806370a08231146107c5578063715018a61461082a578063735de9f71461084157610225565b806339509351116101a65780634549b039116101755780634549b0391461061f57806348a464731461067a5780634a74bb02146106b557806352390c02146106e25780635342acb41461073357610225565b806339509351146104f75780633b124fe7146105685780633bd5d17314610593578063437823ec146105ce57610225565b806323b872dd116101ed57806323b872dd146103815780632cde6081146104125780632d83811914610429578063313ce567146104785780633685d419146104a657610225565b806306fdde031461022a578063095ea7b3146102ba57806313114a9d1461032b57806318160ddd1461035657610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610d16565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c657600080fd5b50610313600480360360408110156102dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610db8565b60405180821515815260200191505060405180910390f35b34801561033757600080fd5b50610340610dd6565b6040518082815260200191505060405180910390f35b34801561036257600080fd5b5061036b610de0565b6040518082815260200191505060405180910390f35b34801561038d57600080fd5b506103fa600480360360608110156103a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dea565b60405180821515815260200191505060405180910390f35b34801561041e57600080fd5b50610427610ec3565b005b34801561043557600080fd5b506104626004803603602081101561044c57600080fd5b8101908080359060200190929190505050611031565b6040518082815260200191505060405180910390f35b34801561048457600080fd5b5061048d6110b5565b604051808260ff16815260200191505060405180910390f35b3480156104b257600080fd5b506104f5600480360360208110156104c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110cc565b005b34801561050357600080fd5b506105506004803603604081101561051a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611456565b60405180821515815260200191505060405180910390f35b34801561057457600080fd5b5061057d611509565b6040518082815260200191505060405180910390f35b34801561059f57600080fd5b506105cc600480360360208110156105b657600080fd5b810190808035906020019092919050505061150f565b005b3480156105da57600080fd5b5061061d600480360360208110156105f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116a0565b005b34801561062b57600080fd5b506106646004803603604081101561064257600080fd5b81019080803590602001909291908035151590602001909291905050506117c3565b6040518082815260200191505060405180910390f35b34801561068657600080fd5b506106b36004803603602081101561069d57600080fd5b810190808035906020019092919050505061187a565b005b3480156106c157600080fd5b506106ca61194c565b60405180821515815260200191505060405180910390f35b3480156106ee57600080fd5b506107316004803603602081101561070557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061195d565b005b34801561073f57600080fd5b506107826004803603602081101561075657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c77565b60405180821515815260200191505060405180910390f35b3480156107a657600080fd5b506107af611ccd565b6040518082815260200191505060405180910390f35b3480156107d157600080fd5b50610814600480360360208110156107e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd3565b6040518082815260200191505060405180910390f35b34801561083657600080fd5b5061083f611dbe565b005b34801561084d57600080fd5b50610856611f44565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088e57600080fd5b50610897611f6a565b6040518082815260200191505060405180910390f35b3480156108b957600080fd5b506108fc600480360360208110156108d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f70565b60405180821515815260200191505060405180910390f35b34801561092057600080fd5b50610929611fc6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561096157600080fd5b5061096a611fef565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109aa57808201518184015260208101905061098f565b50505050905090810190601f1680156109d75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109f157600080fd5b50610a3e60048036036040811015610a0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612091565b60405180821515815260200191505060405180910390f35b348015610a6257600080fd5b50610a6b61215e565b60405180821515815260200191505060405180910390f35b348015610a8f57600080fd5b50610adc60048036036040811015610aa657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612171565b60405180821515815260200191505060405180910390f35b348015610b0057600080fd5b50610b0961218f565b6040518082815260200191505060405180910390f35b348015610b2b57600080fd5b50610b5a60048036036020811015610b4257600080fd5b81019080803515159060200190929190505050612195565b005b348015610b6857600080fd5b50610b716122b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba957600080fd5b50610bb26122d8565b005b348015610bc057600080fd5b50610bed60048036036020811015610bd757600080fd5b81019080803590602001909291905050506123de565b005b348015610bfb57600080fd5b50610c5e60048036036040811015610c1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061254e565b6040518082815260200191505060405180910390f35b348015610c8057600080fd5b50610cc360048036036020811015610c9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125d5565b005b348015610cd157600080fd5b50610d1460048036036020811015610ce857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126f8565b005b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610dae5780601f10610d8357610100808354040283529160200191610dae565b820191906000526020600020905b815481529060010190602001808311610d9157829003601f168201915b5050505050905090565b6000610dcc610dc5612903565b848461290b565b6001905092915050565b6000600954905090565b6000600754905090565b6000610df7848484612a6a565b610eb884610e03612903565b610eb385604051806060016040528060288152602001614f5060289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e69612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320f9092919063ffffffff16565b61290b565b600190509392505050565b610ecb612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515601860009054906101000a900460ff16151514611014576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6c696d697420697320616c72656164792066616c73650000000000000000000081525060200191505060405180910390fd5b6000601860006101000a81548160ff021916908315150217905550565b600060085482111561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614edf602a913960400191505060405180910390fd5b60006110986132cf565b90506110ad81846132fa90919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6110d4612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611194576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600680549050811015611452578173ffffffffffffffffffffffffffffffffffffffff166006828154811061128757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611445576006600160068054905003815481106112e357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061131b57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600680548061140b57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611452565b8080600101915050611256565b5050565b60006114ff611463612903565b846114fa8560036000611474612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b61290b565b6001905092915050565b600d5481565b6000611519612903565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614fc6602c913960400191505060405180910390fd5b60006115c9836133cc565b5050505050905061162281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061167a8160085461342890919063ffffffff16565b6008819055506116958360095461334490919063ffffffff16565b600981905550505050565b6116a8612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060075483111561183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161185d57600061184d846133cc565b5050505050905080915050611874565b6000611868846133cc565b50505050915050809150505b92915050565b611882612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060178190555050565b60158054906101000a900460ff1681565b611965612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bb957611b75600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611031565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d6e57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611db9565b611db6600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611031565b90505b919050565b611dc6612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120875780601f1061205c57610100808354040283529160200191612087565b820191906000526020600020905b81548152906001019060200180831161206a57829003601f168201915b5050505050905090565b600061215461209e612903565b8461214f85604051806060016040528060258152602001614ff260259139600360006120c8612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320f9092919063ffffffff16565b61290b565b6001905092915050565b601860009054906101000a900460ff1681565b600061218561217e612903565b8484612a6a565b6001905092915050565b60165481565b61219d612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122e0612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601560166101000a81548160ff0219169083151502179055504360168190555060016015806101000a81548160ff021916908315150217905550565b6123e6612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601481111561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d6178696d756d20746178206c696d69742069732032302070657263656e740081525060200191505060405180910390fd5b61254560646125378360075461347290919063ffffffff16565b6132fa90919063ffffffff16565b60118190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125dd612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612700612903565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612846576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614f096026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561294557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297f57600080fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614fa16025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ebc6023913960400191505060405180910390fd5b60008111612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614f786029913960400191505060405180910390fd5b612bd7611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612c425750612c13611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612c595750601560169054906101000a900460ff165b612ccb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f74206c61756e63686564207965740000000000000000000000000000000081525060200191505060405180910390fd5b601654431415612db057601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612d655750612d35611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612da45750612d74611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612daf5761dead91505b5b60011515601860009054906101000a900460ff161515148015612e1d5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e735750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ead575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561300f57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f5d5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612f915766038d7ea4c68000612f8582612f7785611cd3565b61334490919063ffffffff16565b1115612f9057600080fd5b5b66038d7ea4c6800081111561300e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5472616e7366657220616d6f756e74206d757374206265206c6573730000000081525060200191505060405180910390fd5b5b613017611fc6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130855750613055611fc6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561309a5760115481111561309957600080fd5b5b60006130a530611cd3565b9050600060175482101590508080156130cb5750601560149054906101000a900460ff16155b80156131255750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561313b575060158054906101000a900460ff165b1561314a57613149826134f8565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131f15750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131fb57600090505b61320786868684613734565b505050505050565b60008383111582906132bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613281578082015181840152602081019050613266565b50505050905090810190601f1680156132ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006132dc613a45565b915091506132f381836132fa90919063ffffffff16565b9250505090565b600061333c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cd6565b905092915050565b6000808284019050838110156133c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006133e38a613d9c565b92509250925060008060006134018d86866133fc6132cf565b613df6565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061346a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061320f565b905092915050565b60008083141561348557600090506134f2565b600082840290508284828161349657fe5b04146134ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614f2f6021913960400191505060405180910390fd5b809150505b92915050565b6001601560146101000a81548160ff02191690831515021790555060006135296002836132fa90919063ffffffff16565b905060006135416004846132fa90919063ffffffff16565b905060006135596004856132fa90919063ffffffff16565b905060006135716002856132fa90919063ffffffff16565b90506000613588828661342890919063ffffffff16565b905060004790506135bc6135b7856135a9888761334490919063ffffffff16565b61334490919063ffffffff16565b613e7f565b60006135d1824761342890919063ffffffff16565b905060006135e96003836132fa90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613653573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156136bc573d6000803e3d6000fd5b506136c78482614133565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828660405180848152602001838152602001828152602001935050505060405180910390a150505050505050506000601560146101000a81548160ff02191690831515021790555050565b80613742576137416142a3565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137e55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137fa576137f58484846142e6565b613a31565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561389d5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138b2576138ad848484614546565b613a30565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156139565750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561396b576139668484846147a6565b613a2f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a0d5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a2257613a1d848484614971565b613a2e565b613a2d8484846147a6565b5b5b5b5b80613a3f57613a3e614c66565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613c9957826001600060068481548110613a7857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613b5f5750816002600060068481548110613af757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613b765760085460075494509450505050613cd2565b613bff6001600060068481548110613b8a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461342890919063ffffffff16565b9250613c8a6002600060068481548110613c1557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361342890919063ffffffff16565b91508080600101915050613a59565b50613cb16007546008546132fa90919063ffffffff16565b821015613cc957600854600754935093505050613cd2565b81819350935050505b9091565b60008083118290613d82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d47578082015181840152602081019050613d2c565b50505050905090810190601f168015613d745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613d8e57fe5b049050809150509392505050565b600080600080613dab85614c7a565b90506000613db886614cab565b90506000613de182613dd3858a61342890919063ffffffff16565b61342890919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613e0f858961347290919063ffffffff16565b90506000613e26868961347290919063ffffffff16565b90506000613e3d878961347290919063ffffffff16565b90506000613e6682613e58858761342890919063ffffffff16565b61342890919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613e9957600080fd5b50604051908082528060200260200182016040528015613ec85781602001602082028036833780820191505090505b5090503081600081518110613ed957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f7b57600080fd5b505afa158015613f8f573d6000803e3d6000fd5b505050506040513d6020811015613fa557600080fd5b810190808051906020019092919050505081600181518110613fc357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061402a30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461290b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156140ee5780820151818401526020810190506140d3565b505050509050019650505050505050600060405180830381600087803b15801561411757600080fd5b505af115801561412b573d6000803e3d6000fd5b505050505050565b61416030601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461290b565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b50505050506040513d606081101561427757600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600d541480156142b757506000600f54145b156142c1576142e4565b600d54600e81905550600f546010819055506000600d819055506000600f819055505b565b6000806000806000806142f8876133cc565b95509550955095509550955061435687600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143eb86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061448085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144cc81614cdc565b6144d68483614e81565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614558876133cc565b9550955095509550955095506145b686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061464b83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146e085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061472c81614cdc565b6147368483614e81565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806147b8876133cc565b95509550955095509550955061481686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148ab85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148f781614cdc565b6149018483614e81565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614983876133cc565b9550955095509550955095506149e187600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a7686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b0b83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ba085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bec81614cdc565b614bf68483614e81565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600e54600d81905550601054600f81905550565b6000614ca46064614c96600d548561347290919063ffffffff16565b6132fa90919063ffffffff16565b9050919050565b6000614cd56064614cc7600f548561347290919063ffffffff16565b6132fa90919063ffffffff16565b9050919050565b6000614ce66132cf565b90506000614cfd828461347290919063ffffffff16565b9050614d5181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e7c57614e3883600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334490919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614e968260085461342890919063ffffffff16565b600881905550614eb18160095461334490919063ffffffff16565b600981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220940dba42f81a9c789802c490226e0ed9911fd834cf6687d3cb82c26df50bdada64736f6c634300060c0033

Deployed Bytecode Sourcemap

12341:19517:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14968:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15880:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17001:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15245:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16049:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19436:136;;;;;;;;;;;;;:::i;:::-;;17925:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15154:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18641:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16370:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13071:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17096:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30968:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17481:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31219:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13623:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18186:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30833:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13158:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15348:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9706:148;;;;;;;;;;;;;:::i;:::-;;13424:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13321;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16873:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9063:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15059:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16596:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19399:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15554:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13707:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31588:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13468:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19584:153;;;;;;;;;;;;;:::i;:::-;;31344:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15729:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31091:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10009:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14968:83;15005:13;15038:5;15031:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14968:83;:::o;15880:161::-;15955:4;15972:39;15981:12;:10;:12::i;:::-;15995:7;16004:6;15972:8;:39::i;:::-;16029:4;16022:11;;15880:161;;;;:::o;17001:87::-;17043:7;17070:10;;17063:17;;17001:87;:::o;15245:95::-;15298:7;15325;;15318:14;;15245:95;:::o;16049:313::-;16147:4;16164:36;16174:6;16182:9;16193:6;16164:9;:36::i;:::-;16211:121;16220:6;16228:12;:10;:12::i;:::-;16242:89;16280:6;16242:89;;;;;;;;;;;;;;;;;:11;:19;16254:6;16242:19;;;;;;;;;;;;;;;:33;16262:12;:10;:12::i;:::-;16242:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;16211:8;:121::i;:::-;16350:4;16343:11;;16049:313;;;;;:::o;19436:136::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19505:4:::1;19496:13;;:5;;;;;;;;;;;:13;;;19488:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19559:5;19551;;:13;;;;;;;;;;;;;;;;;;19436:136::o:0;17925:253::-;17991:7;18030;;18019;:18;;18011:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18095:19;18118:10;:8;:10::i;:::-;18095:33;;18146:24;18158:11;18146:7;:11;;:24;;;;:::i;:::-;18139:31;;;17925:253;;;:::o;15154:83::-;15195:5;15220:9;;;;;;;;;;;15213:16;;15154:83;:::o;18641:479::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18723:11:::1;:20;18735:7;18723:20;;;;;;;;;;;;;;;;;;;;;;;;;18715:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18791:9;18786:327;18810:9;:16;;;;18806:1;:20;18786:327;;;18868:7;18852:23;;:9;18862:1;18852:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;18848:254;;;18911:9;18940:1;18921:9;:16;;;;:20;18911:31;;;;;;;;;;;;;;;;;;;;;;;;;18896:9;18906:1;18896:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18980:1;18961:7;:16;18969:7;18961:16;;;;;;;;;;;;;;;:20;;;;19023:5;19000:11;:20;19012:7;19000:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19047:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19081:5;;18848:254;18828:3;;;;;;;18786:327;;;;18641:479:::0;:::o;16370:218::-;16458:4;16475:83;16484:12;:10;:12::i;:::-;16498:7;16507:50;16546:10;16507:11;:25;16519:12;:10;:12::i;:::-;16507:25;;;;;;;;;;;;;;;:34;16533:7;16507:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;16475:8;:83::i;:::-;16576:4;16569:11;;16370:218;;;;:::o;13071:26::-;;;;:::o;17096:377::-;17148:14;17165:12;:10;:12::i;:::-;17148:29;;17197:11;:19;17209:6;17197:19;;;;;;;;;;;;;;;;;;;;;;;;;17196:20;17188:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17277:15;17301:19;17312:7;17301:10;:19::i;:::-;17276:44;;;;;;;17349:28;17369:7;17349;:15;17357:6;17349:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;17331:7;:15;17339:6;17331:15;;;;;;;;;;;;;;;:46;;;;17398:20;17410:7;17398;;:11;;:20;;;;:::i;:::-;17388:7;:30;;;;17442:23;17457:7;17442:10;;:14;;:23;;;;:::i;:::-;17429:10;:36;;;;17096:377;;;:::o;30968:111::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31067:4:::1;31037:18;:27;31056:7;31037:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;30968:111:::0;:::o;17481:436::-;17571:7;17610;;17599;:18;;17591:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17669:17;17664:246;;17704:15;17728:19;17739:7;17728:10;:19::i;:::-;17703:44;;;;;;;17769:7;17762:14;;;;;17664:246;17811:23;17842:19;17853:7;17842:10;:19::i;:::-;17809:52;;;;;;;17883:15;17876:22;;;17481:436;;;;;:::o;31219:114::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31319:6:::1;31297:19;:28;;;;31219:114:::0;:::o;13623:41::-;;;;;;;;;;;;:::o;18186:447::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18383:11:::1;:20;18395:7;18383:20;;;;;;;;;;;;;;;;;;;;;;;;;18382:21;18374:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18468:1;18449:7;:16;18457:7;18449:16;;;;;;;;;;;;;;;;:20;18446:108;;;18505:37;18525:7;:16;18533:7;18525:16;;;;;;;;;;;;;;;;18505:19;:37::i;:::-;18486:7;:16;18494:7;18486:16;;;;;;;;;;;;;;;:56;;;;18446:108;18587:4;18564:11;:20;18576:7;18564:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;18602:9;18617:7;18602:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18186:447:::0;:::o;30833:123::-;30897:4;30921:18;:27;30940:7;30921:27;;;;;;;;;;;;;;;;;;;;;;;;;30914:34;;30833:123;;;:::o;13158:32::-;;;;:::o;15348:198::-;15414:7;15438:11;:20;15450:7;15438:20;;;;;;;;;;;;;;;;;;;;;;;;;15434:49;;;15467:7;:16;15475:7;15467:16;;;;;;;;;;;;;;;;15460:23;;;;15434:49;15501:37;15521:7;:16;15529:7;15521:16;;;;;;;;;;;;;;;;15501:19;:37::i;:::-;15494:44;;15348:198;;;;:::o;9706:148::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9813:1:::1;9776:40;;9797:6;::::0;::::1;;;;;;;;9776:40;;;;;;;;;;;;9844:1;9827:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9706:148::o:0;13424:37::-;;;;;;;;;;;;;:::o;13321:::-;;;;:::o;16873:120::-;16941:4;16965:11;:20;16977:7;16965:20;;;;;;;;;;;;;;;;;;;;;;;;;16958:27;;16873:120;;;:::o;9063:79::-;9101:7;9128:6;;;;;;;;;;;9121:13;;9063:79;:::o;15059:87::-;15098:13;15131:7;15124:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15059:87;:::o;16596:269::-;16689:4;16706:129;16715:12;:10;:12::i;:::-;16729:7;16738:96;16777:15;16738:96;;;;;;;;;;;;;;;;;:11;:25;16750:12;:10;:12::i;:::-;16738:25;;;;;;;;;;;;;;;:34;16764:7;16738:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;16706:8;:129::i;:::-;16853:4;16846:11;;16596:269;;;;:::o;19399:24::-;;;;;;;;;;;;;:::o;15554:167::-;15632:4;15649:42;15659:12;:10;:12::i;:::-;15673:9;15684:6;15649:9;:42::i;:::-;15709:4;15702:11;;15554:167;;;;:::o;13707:25::-;;;;:::o;31588:171::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31689:8:::1;31665:21;::::0;:32:::1;;;;;;;;;;;;;;;;;;31713:38;31742:8;31713:38;;;;;;;;;;;;;;;;;;;;31588:171:::0;:::o;13468:26::-;;;;;;;;;;;;;:::o;19584:153::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19650:4:::1;19639:8;;:15;;;;;;;;;;;;;;;;;;19678:12;19665:10;:25;;;;19725:4;19701:21;::::0;:28:::1;;;;;;;;;;;;;;;;;;19584:153::o:0;31344:236::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31448:2:::1;31432:12;:18;;31424:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31512:60;31556:5;31512:25;31524:12;31512:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;31497:12;:75;;;;31344:236:::0;:::o;15729:143::-;15810:7;15837:11;:18;15849:5;15837:18;;;;;;;;;;;;;;;:27;15856:7;15837:27;;;;;;;;;;;;;;;;15830:34;;15729:143;;;;:::o;31091:110::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31188:5:::1;31158:18;:27;31177:7;31158:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31091:110:::0;:::o;10009:244::-;9285:12;:10;:12::i;:::-;9275:22;;:6;;;;;;;;;;:22;;;9267:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10118:1:::1;10098:22;;:8;:22;;;;10090:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10208:8;10179:38;;10200:6;::::0;::::1;;;;;;;;10179:38;;;;;;;;;;;;10237:8;10228:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;10009:244:::0;:::o;177:106::-;230:15;265:10;258:17;;177:106;:::o;19132:259::-;19242:1;19225:19;;:5;:19;;;;19217:28;;;;;;19283:1;19264:21;;:7;:21;;;;19256:30;;;;;;19329:6;19299:11;:18;19311:5;19299:18;;;;;;;;;;;;;;;:27;19318:7;19299:27;;;;;;;;;;;;;;;:36;;;;19367:7;19351:32;;19360:5;19351:32;;;19376:6;19351:32;;;;;;;;;;;;;;;;;;19132:259;;;:::o;19749:2179::-;19887:1;19871:18;;:4;:18;;;;19863:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19964:1;19950:16;;:2;:16;;;;19942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20034:1;20025:6;:10;20017:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20108:7;:5;:7::i;:::-;20100:15;;:4;:15;;;:32;;;;20125:7;:5;:7::i;:::-;20119:13;;:2;:13;;;20100:32;:44;;;;20136:8;;;;;;;;;;;20100:44;20092:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20206:10;;20190:12;:26;20186:156;;;20244:11;;;;;;;;;;;20236:19;;:4;:19;;;:38;;;;;20267:7;:5;:7::i;:::-;20259:15;;:4;:15;;;;20236:38;:55;;;;;20284:7;:5;:7::i;:::-;20278:13;;:2;:13;;;;20236:55;20232:103;;;13540:42;20307:16;;20232:103;20186:156;20364:4;20355:13;;:5;;;;;;;;;;;:13;;;:42;;;;;20373:18;:24;20392:4;20373:24;;;;;;;;;;;;;;;;;;;;;;;;;20372:25;20355:42;:69;;;;;20402:18;:22;20421:2;20402:22;;;;;;;;;;;;;;;;;;;;;;;;;20401:23;20355:69;:90;;;;;13540:42;20428:17;;:2;:17;;;;20355:90;20352:341;;;20470:11;;;;;;;;;;;20464:17;;:2;:17;;;;:40;;;;;20493:11;;;;;;;;;;;20485:19;;:4;:19;;;20464:40;20461:136;;;20564:15;20534:25;20552:6;20534:13;20544:2;20534:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;20533:46;;20524:57;;;;;;20461:136;20629:15;20619:6;:25;;20611:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20352:341;20728:7;:5;:7::i;:::-;20720:15;;:4;:15;;;;:32;;;;;20745:7;:5;:7::i;:::-;20739:13;;:2;:13;;;;20720:32;20717:81;;;20785:12;;20775:6;:22;;20767:31;;;;;;20717:81;21099:28;21130:24;21148:4;21130:9;:24::i;:::-;21099:55;;21165:24;21216:19;;21192:20;:43;;21165:70;;21264:19;:53;;;;;21301:16;;;;;;;;;;;21300:17;21264:53;:89;;;;;21342:11;;;;;;;;;;;21334:19;;:4;:19;;;;21264:89;:127;;;;;21370:21;;;;;;;;;;21264:127;21246:249;;;21447:36;21462:20;21447:14;:36::i;:::-;21246:249;21576:12;21591:4;21576:19;;21703:18;:24;21722:4;21703:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;21731:18;:22;21750:2;21731:22;;;;;;;;;;;;;;;;;;;;;;;;;21703:50;21700:96;;;21779:5;21769:15;;21700:96;21882:38;21897:4;21902:2;21905:6;21912:7;21882:14;:38::i;:::-;19749:2179;;;;;;:::o;4996:192::-;5082:7;5115:1;5110;:6;;5118:12;5102:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5142:9;5158:1;5154;:5;5142:17;;5179:1;5172:8;;;4996:192;;;;;:::o;28983:163::-;29024:7;29045:15;29062;29081:19;:17;:19::i;:::-;29044:56;;;;29118:20;29130:7;29118;:11;;:20;;;;:::i;:::-;29111:27;;;;28983:163;:::o;6394:132::-;6452:7;6479:39;6483:1;6486;6479:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6472:46;;6394:132;;;;:::o;4093:181::-;4151:7;4171:9;4187:1;4183;:5;4171:17;;4212:1;4207;:6;;4199:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4265:1;4258:8;;;4093:181;;;;:::o;27781:419::-;27840:7;27849;27858;27867;27876;27885;27906:23;27931:12;27945:18;27967:20;27979:7;27967:11;:20::i;:::-;27905:82;;;;;;27999:15;28016:23;28041:12;28057:50;28069:7;28078:4;28084:10;28096;:8;:10::i;:::-;28057:11;:50::i;:::-;27998:109;;;;;;28126:7;28135:15;28152:4;28158:15;28175:4;28181:10;28118:74;;;;;;;;;;;;;;;;;;27781:419;;;;;;;:::o;4557:136::-;4615:7;4642:43;4646:1;4649;4642:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4635:50;;4557:136;;;;:::o;5447:471::-;5505:7;5755:1;5750;:6;5746:47;;;5780:1;5773:8;;;;5746:47;5805:9;5821:1;5817;:5;5805:17;;5850:1;5845;5841;:5;;;;;;:10;5833:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5909:1;5902:8;;;5447:471;;;;;:::o;21940:1312::-;14104:4;14085:16;;:23;;;;;;;;;;;;;;;;;;22076:20:::1;22099:27;22124:1;22099:20;:24;;:27;;;;:::i;:::-;22076:50;;22137:14;22154:27;22179:1;22154:20;:24;;:27;;;;:::i;:::-;22137:44;;22192:18;22213:27;22238:1;22213:20;:24;;:27;;;;:::i;:::-;22192:48;;22283:12;22298:19;22315:1;22298:12;:16;;:19;;;;:::i;:::-;22283:34;;22328:17;22348:22;22365:4;22348:12;:16;;:22;;;;:::i;:::-;22328:42;;22646:22;22671:21;22646:46;;22737:50;22754:32;22775:10;22754:16;22763:6;22754:4;:8;;:16;;;;:::i;:::-;:20;;:32;;;;:::i;:::-;22737:16;:50::i;:::-;22918:15;22936:41;22962:14;22936:21;:25;;:41;;;;:::i;:::-;22918:59;;22988:16;23007:14;23019:1;23007:7;:11;;:14;;;;:::i;:::-;22988:33;;23032:6;;;;;;;;;;;:15;;:25;23048:8;23032:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23068:7;;;;;;;;;;;:16;;:26;23085:8;23068:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23144:33;23157:9;23168:8;23144:12;:33::i;:::-;23203:41;23218:4;23224:8;23234:9;23203:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14120:1;;;;;;;;14151:5:::0;14132:16;;:24;;;;;;;;;;;;;;;;;;21940:1312;:::o;24456:834::-;24567:7;24563:40;;24589:14;:12;:14::i;:::-;24563:40;24628:11;:19;24640:6;24628:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24652:11;:22;24664:9;24652:22;;;;;;;;;;;;;;;;;;;;;;;;;24651:23;24628:46;24624:597;;;24691:48;24713:6;24721:9;24732:6;24691:21;:48::i;:::-;24624:597;;;24762:11;:19;24774:6;24762:19;;;;;;;;;;;;;;;;;;;;;;;;;24761:20;:46;;;;;24785:11;:22;24797:9;24785:22;;;;;;;;;;;;;;;;;;;;;;;;;24761:46;24757:464;;;24824:46;24844:6;24852:9;24863:6;24824:19;:46::i;:::-;24757:464;;;24893:11;:19;24905:6;24893:19;;;;;;;;;;;;;;;;;;;;;;;;;24892:20;:47;;;;;24917:11;:22;24929:9;24917:22;;;;;;;;;;;;;;;;;;;;;;;;;24916:23;24892:47;24888:333;;;24956:44;24974:6;24982:9;24993:6;24956:17;:44::i;:::-;24888:333;;;25022:11;:19;25034:6;25022:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25045:11;:22;25057:9;25045:22;;;;;;;;;;;;;;;;;;;;;;;;;25022:45;25018:203;;;25084:48;25106:6;25114:9;25125:6;25084:21;:48::i;:::-;25018:203;;;25165:44;25183:6;25191:9;25202:6;25165:17;:44::i;:::-;25018:203;24888:333;24757:464;24624:597;25245:7;25241:41;;25267:15;:13;:15::i;:::-;25241:41;24456:834;;;;:::o;29154:561::-;29204:7;29213;29233:15;29251:7;;29233:25;;29269:15;29287:7;;29269:25;;29316:9;29311:289;29335:9;:16;;;;29331:1;:20;29311:289;;;29401:7;29377;:21;29385:9;29395:1;29385:12;;;;;;;;;;;;;;;;;;;;;;;;;29377:21;;;;;;;;;;;;;;;;:31;:66;;;;29436:7;29412;:21;29420:9;29430:1;29420:12;;;;;;;;;;;;;;;;;;;;;;;;;29412:21;;;;;;;;;;;;;;;;:31;29377:66;29373:97;;;29453:7;;29462;;29445:25;;;;;;;;;29373:97;29495:34;29507:7;:21;29515:9;29525:1;29515:12;;;;;;;;;;;;;;;;;;;;;;;;;29507:21;;;;;;;;;;;;;;;;29495:7;:11;;:34;;;;:::i;:::-;29485:44;;29554:34;29566:7;:21;29574:9;29584:1;29574:12;;;;;;;;;;;;;;;;;;;;;;;;;29566:21;;;;;;;;;;;;;;;;29554:7;:11;;:34;;;;:::i;:::-;29544:44;;29353:3;;;;;;;29311:289;;;;29624:20;29636:7;;29624;;:11;;:20;;;;:::i;:::-;29614:7;:30;29610:61;;;29654:7;;29663;;29646:25;;;;;;;;29610:61;29690:7;29699;29682:25;;;;;;29154:561;;;:::o;7022:278::-;7108:7;7140:1;7136;:5;7143:12;7128:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7167:9;7183:1;7179;:5;;;;;;7167:17;;7291:1;7284:8;;;7022:278;;;;;:::o;28208:330::-;28268:7;28277;28286;28306:12;28321:24;28337:7;28321:15;:24::i;:::-;28306:39;;28356:18;28377:30;28399:7;28377:21;:30::i;:::-;28356:51;;28418:23;28444:33;28466:10;28444:17;28456:4;28444:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28418:59;;28496:15;28513:4;28519:10;28488:42;;;;;;;;;28208:330;;;;;:::o;28546:429::-;28661:7;28670;28679;28699:15;28717:24;28729:11;28717:7;:11;;:24;;;;:::i;:::-;28699:42;;28752:12;28767:21;28776:11;28767:4;:8;;:21;;;;:::i;:::-;28752:36;;28799:18;28820:27;28835:11;28820:10;:14;;:27;;;;:::i;:::-;28799:48;;28858:23;28884:33;28906:10;28884:17;28896:4;28884:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28858:59;;28936:7;28945:15;28962:4;28928:39;;;;;;;;;;28546:429;;;;;;;;:::o;23276:583::-;23402:21;23440:1;23426:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23402:40;;23471:4;23453;23458:1;23453:7;;;;;;;;;;;;;:23;;;;;;;;;;;23497:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23487:4;23492:1;23487:7;;;;;;;;;;;;;:30;;;;;;;;;;;23530:60;23547:4;23562:13;;;;;;;;;;;23578:11;23530:8;:60::i;:::-;23629:13;;;;;;;;;;;:64;;;23708:11;23734:1;23778:4;23805;23825:15;23629:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23276:583;;:::o;23867:508::-;24015:60;24032:4;24047:13;;;;;;;;;;;24063:11;24015:8;:60::i;:::-;24118:13;;;;;;;;;;;:29;;;24155:9;24188:4;24208:11;24234:1;24277;24320:6;;;;;;;;;;;24341:15;24118:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23867:508;;:::o;30434:250::-;30491:1;30480:7;;:12;:34;;;;;30513:1;30496:13;;:18;30480:34;30477:46;;;30516:7;;30477:46;30561:7;;30543:15;:25;;;;30603:13;;30579:21;:37;;;;30647:1;30637:7;:11;;;;30675:1;30659:13;:17;;;;30434:250;:::o;26402:566::-;26505:15;26522:23;26547:12;26561:23;26586:12;26600:18;26622:19;26633:7;26622:10;:19::i;:::-;26504:137;;;;;;;;;;;;26670:28;26690:7;26670;:15;26678:6;26670:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26652:7;:15;26660:6;26652:15;;;;;;;;;;;;;;;:46;;;;26727:28;26747:7;26727;:15;26735:6;26727:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26709:7;:15;26717:6;26709:15;;;;;;;;;;;;;;;:46;;;;26787:39;26810:15;26787:7;:18;26795:9;26787:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26766:7;:18;26774:9;26766:18;;;;;;;;;;;;;;;:60;;;;26840:26;26855:10;26840:14;:26::i;:::-;26877:23;26889:4;26895;26877:11;:23::i;:::-;26933:9;26916:44;;26925:6;26916:44;;;26944:15;26916:44;;;;;;;;;;;;;;;;;;26402:566;;;;;;;;;:::o;25808:586::-;25909:15;25926:23;25951:12;25965:23;25990:12;26004:18;26026:19;26037:7;26026:10;:19::i;:::-;25908:137;;;;;;;;;;;;26074:28;26094:7;26074;:15;26082:6;26074:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26056:7;:15;26064:6;26056:15;;;;;;;;;;;;;;;:46;;;;26134:39;26157:15;26134:7;:18;26142:9;26134:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26113:7;:18;26121:9;26113:18;;;;;;;;;;;;;;;:60;;;;26205:39;26228:15;26205:7;:18;26213:9;26205:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26184:7;:18;26192:9;26184:18;;;;;;;;;;;;;;;:60;;;;26266:26;26281:10;26266:14;:26::i;:::-;26303:23;26315:4;26321;26303:11;:23::i;:::-;26359:9;26342:44;;26351:6;26342:44;;;26370:15;26342:44;;;;;;;;;;;;;;;;;;25808:586;;;;;;;;;:::o;25298:502::-;25397:15;25414:23;25439:12;25453:23;25478:12;25492:18;25514:19;25525:7;25514:10;:19::i;:::-;25396:137;;;;;;;;;;;;25562:28;25582:7;25562;:15;25570:6;25562:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25544:7;:15;25552:6;25544:15;;;;;;;;;;;;;;;:46;;;;25622:39;25645:15;25622:7;:18;25630:9;25622:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25601:7;:18;25609:9;25601:18;;;;;;;;;;;;;;;:60;;;;25672:26;25687:10;25672:14;:26::i;:::-;25709:23;25721:4;25727;25709:11;:23::i;:::-;25765:9;25748:44;;25757:6;25748:44;;;25776:15;25748:44;;;;;;;;;;;;;;;;;;25298:502;;;;;;;;;:::o;26976:642::-;27079:15;27096:23;27121:12;27135:23;27160:12;27174:18;27196:19;27207:7;27196:10;:19::i;:::-;27078:137;;;;;;;;;;;;27244:28;27264:7;27244;:15;27252:6;27244:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27226:7;:15;27234:6;27226:15;;;;;;;;;;;;;;;:46;;;;27301:28;27321:7;27301;:15;27309:6;27301:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27283:7;:15;27291:6;27283:15;;;;;;;;;;;;;;;:46;;;;27361:39;27384:15;27361:7;:18;27369:9;27361:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27340:7;:18;27348:9;27340:18;;;;;;;;;;;;;;;:60;;;;27432:39;27455:15;27432:7;:18;27440:9;27432:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27411:7;:18;27419:9;27411:18;;;;;;;;;;;;;;;:60;;;;27490:26;27505:10;27490:14;:26::i;:::-;27527:23;27539:4;27545;27527:11;:23::i;:::-;27583:9;27566:44;;27575:6;27566:44;;;27594:15;27566:44;;;;;;;;;;;;;;;;;;26976:642;;;;;;;;;:::o;30696:125::-;30750:15;;30740:7;:25;;;;30792:21;;30776:13;:37;;;;30696:125::o;30094:154::-;30158:7;30185:55;30224:5;30185:20;30197:7;;30185;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;30178:62;;30094:154;;;:::o;30256:166::-;30326:7;30353:61;30398:5;30353:26;30365:13;;30353:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;30346:68;;30256:166;;;:::o;29727:355::-;29790:19;29813:10;:8;:10::i;:::-;29790:33;;29834:18;29855:27;29870:11;29855:10;:14;;:27;;;;:::i;:::-;29834:48;;29918:38;29945:10;29918:7;:22;29934:4;29918:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;29893:7;:22;29909:4;29893:22;;;;;;;;;;;;;;;:63;;;;29970:11;:26;29990:4;29970:26;;;;;;;;;;;;;;;;;;;;;;;;;29967:107;;;30036:38;30063:10;30036:7;:22;30052:4;30036:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30011:7;:22;30027:4;30011:22;;;;;;;;;;;;;;;:63;;;;29967:107;29727:355;;;:::o;27626:147::-;27704:17;27716:4;27704:7;;:11;;:17;;;;:::i;:::-;27694:7;:27;;;;27745:20;27760:4;27745:10;;:14;;:20;;;;:::i;:::-;27732:10;:33;;;;27626:147;;:::o

Swarm Source

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