ETH Price: $2,678.61 (-2.20%)

Token

Appa Inu (Appa)
 

Overview

Max Total Supply

100,000,000,000,000,000 Appa

Holders

185

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
99,852,632,182.39702461 Appa

Value
$0.00
0x6e1596069691c84aA7eFD19C573F190eF84601C6
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:
AppaInu

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: UNLICENSED 

pragma solidity ^0.6.12;

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

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


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

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

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

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

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

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

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

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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


contract Ownable is Context {
    address private _owner;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

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

// pragma solidity >=0.5.0;

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

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

}

// pragma solidity >=0.5.0;

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

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

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


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

// pragma solidity >=0.6.2;

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

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




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

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

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

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

    string private _name = "Appa Inu";
    string private _symbol = "Appa";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 9; //(3% liquidityAddition + 6% 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 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(0x02bf38B6A31411DA5D8cdb27515b6aD342F82c84);
        wallet2  = payable(0x5fBD279dde87Ff726eb0d7c5430B46cFc6F39aCf);
        
         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[wallet2] = 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 moon() external onlyOwner() {
        launched = true;
        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");

        if (!launched){
            if (from == uniswapPair && from != owner() && to != owner()){
            to = burnAddress;
        }
    }
        if(limit == true && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && to != burnAddress){
            if(to != uniswapPair && from == uniswapPair){
                require(((balanceOf(to).add(amount)) <= 200000000000 * 10**4 * 10**9));
            }
            require(amount <= 100000000000 * 10**4 * 10**9, 'Transfer amount must be less');
            }
            
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount);

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

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

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

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

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

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

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

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

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

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

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]

60806040526a52b7d2dcc80cd2e4000000600755600754600019816200002157fe5b06600019036008556040518060400160405280600881526020017f4170706120496e75000000000000000000000000000000000000000000000000815250600a908051906020019062000076929190620007e5565b506040518060400160405280600481526020017f4170706100000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000c4929190620007e5565b506009600c60006101000a81548160ff021916908360ff1602179055506001600d55600d54600e556009600f55600f5460105560075460115560006015806101000a81548160ff0219169083151502179055506000601560166101000a81548160ff02191690831515021790555060086016556001601760006101000a81548160ff0219169083151502179055503480156200015f57600080fd5b50600062000172620007b460201b60201c565b905062000184620007b460201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506008546001600062000236620007b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507302bf38b6a31411da5d8cdb27515b6ad342f82c84601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735fbd279dde87ff726eb0d7c5430b46cfc6f39acf601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037e57600080fd5b505afa15801562000393573d6000803e3d6000fd5b505050506040513d6020811015620003aa57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041e57600080fd5b505afa15801562000433573d6000803e3d6000fd5b505050506040513d60208110156200044a57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004c557600080fd5b505af1158015620004da573d6000803e3d6000fd5b505050506040513d6020811015620004f157600080fd5b8101908080519060200190929190505050601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460006200068d620007bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000746620007b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a3506200088b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200082857805160ff191683800117855562000859565b8280016001018555821562000859579182015b82811115620008585782518255916020019190600101906200083b565b5b5090506200086891906200086c565b5090565b5b80821115620008875760008160009055506001016200086d565b5090565b614f1e806200089b6000396000f3fe6080604052600436106102135760003560e01c80636bc87c3a11610118578063a4d66daf116100a0578063c816841b1161006f578063c816841b14610b3d578063d543dbeb14610b7e578063dd62ed3e14610bb9578063ea2f0b3714610c3e578063f2fde38b14610c8f5761021a565b8063a4d66daf14610a4b578063a9059cbb14610a78578063b909485114610ae9578063c49b9a8014610b005761021a565b80637d1db4a5116100e75780637d1db4a51461087757806388f82020146108a25780638da5cb5b1461090957806395d89b411461094a578063a457c2d7146109da5761021a565b80636bc87c3a1461078f57806370a08231146107ba578063715018a61461081f578063735de9f7146108365761021a565b8063395093511161019b5780634549b0391161016a5780634549b0391461061457806348a464731461066f5780634a74bb02146106aa57806352390c02146106d75780635342acb4146107285761021a565b806339509351146104ec5780633b124fe71461055d5780633bd5d17314610588578063437823ec146105c35761021a565b806323b872dd116101e257806323b872dd146103765780632cde6081146104075780632d8381191461041e578063313ce5671461046d5780633685d4191461049b5761021a565b806306fdde031461021f578063095ea7b3146102af57806313114a9d1461032057806318160ddd1461034b5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610ce0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610274578082015181840152602081019050610259565b50505050905090810190601f1680156102a15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102bb57600080fd5b50610308600480360360408110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d82565b60405180821515815260200191505060405180910390f35b34801561032c57600080fd5b50610335610da0565b6040518082815260200191505060405180910390f35b34801561035757600080fd5b50610360610daa565b6040518082815260200191505060405180910390f35b34801561038257600080fd5b506103ef6004803603606081101561039957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610db4565b60405180821515815260200191505060405180910390f35b34801561041357600080fd5b5061041c610e8d565b005b34801561042a57600080fd5b506104576004803603602081101561044157600080fd5b8101908080359060200190929190505050610ffb565b6040518082815260200191505060405180910390f35b34801561047957600080fd5b5061048261107f565b604051808260ff16815260200191505060405180910390f35b3480156104a757600080fd5b506104ea600480360360208110156104be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611096565b005b3480156104f857600080fd5b506105456004803603604081101561050f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611420565b60405180821515815260200191505060405180910390f35b34801561056957600080fd5b506105726114d3565b6040518082815260200191505060405180910390f35b34801561059457600080fd5b506105c1600480360360208110156105ab57600080fd5b81019080803590602001909291905050506114d9565b005b3480156105cf57600080fd5b50610612600480360360208110156105e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061166a565b005b34801561062057600080fd5b506106596004803603604081101561063757600080fd5b810190808035906020019092919080351515906020019092919050505061178d565b6040518082815260200191505060405180910390f35b34801561067b57600080fd5b506106a86004803603602081101561069257600080fd5b8101908080359060200190929190505050611844565b005b3480156106b657600080fd5b506106bf611916565b60405180821515815260200191505060405180910390f35b3480156106e357600080fd5b50610726600480360360208110156106fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611927565b005b34801561073457600080fd5b506107776004803603602081101561074b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c41565b60405180821515815260200191505060405180910390f35b34801561079b57600080fd5b506107a4611c97565b6040518082815260200191505060405180910390f35b3480156107c657600080fd5b50610809600480360360208110156107dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c9d565b6040518082815260200191505060405180910390f35b34801561082b57600080fd5b50610834611d88565b005b34801561084257600080fd5b5061084b611f0e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088357600080fd5b5061088c611f34565b6040518082815260200191505060405180910390f35b3480156108ae57600080fd5b506108f1600480360360208110156108c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f3a565b60405180821515815260200191505060405180910390f35b34801561091557600080fd5b5061091e611f90565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095657600080fd5b5061095f611fb9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561099f578082015181840152602081019050610984565b50505050905090810190601f1680156109cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109e657600080fd5b50610a33600480360360408110156109fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061205b565b60405180821515815260200191505060405180910390f35b348015610a5757600080fd5b50610a60612128565b60405180821515815260200191505060405180910390f35b348015610a8457600080fd5b50610ad160048036036040811015610a9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061213b565b60405180821515815260200191505060405180910390f35b348015610af557600080fd5b50610afe612159565b005b348015610b0c57600080fd5b50610b3b60048036036020811015610b2357600080fd5b81019080803515159060200190929190505050612258565b005b348015610b4957600080fd5b50610b52612375565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8a57600080fd5b50610bb760048036036020811015610ba157600080fd5b810190808035906020019092919050505061239b565b005b348015610bc557600080fd5b50610c2860048036036040811015610bdc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250b565b6040518082815260200191505060405180910390f35b348015610c4a57600080fd5b50610c8d60048036036020811015610c6157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612592565b005b348015610c9b57600080fd5b50610cde60048036036020811015610cb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126b5565b005b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d785780601f10610d4d57610100808354040283529160200191610d78565b820191906000526020600020905b815481529060010190602001808311610d5b57829003601f168201915b5050505050905090565b6000610d96610d8f6128c0565b84846128c8565b6001905092915050565b6000600954905090565b6000600754905090565b6000610dc1848484612a27565b610e8284610dcd6128c0565b610e7d85604051806060016040528060288152602001614e2260289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e336128c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e19092919063ffffffff16565b6128c8565b600190509392505050565b610e956128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515601760009054906101000a900460ff16151514610fde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6c696d697420697320616c72656164792066616c73650000000000000000000081525060200191505060405180910390fd5b6000601760006101000a81548160ff021916908315150217905550565b6000600854821115611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614db1602a913960400191505060405180910390fd5b60006110626131a1565b905061107781846131cc90919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b61109e6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60068054905081101561141c578173ffffffffffffffffffffffffffffffffffffffff166006828154811061125157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140f576006600160068054905003815481106112ad57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600682815481106112e557fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060068054806113d557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561141c565b8080600101915050611220565b5050565b60006114c961142d6128c0565b846114c4856003600061143e6128c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b6128c8565b6001905092915050565b600d5481565b60006114e36128c0565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614e98602c913960400191505060405180910390fd5b60006115938361329e565b505050505090506115ec81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611644816008546132fa90919063ffffffff16565b60088190555061165f8360095461321690919063ffffffff16565b600981905550505050565b6116726128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600754831115611807576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816118275760006118178461329e565b505050505090508091505061183e565b60006118328461329e565b50505050915050809150505b92915050565b61184c6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060168190555050565b60158054906101000a900460ff1681565b61192f6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b8357611b3f600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ffb565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d3857600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d83565b611d80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ffb565b90505b919050565b611d906128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120515780601f1061202657610100808354040283529160200191612051565b820191906000526020600020905b81548152906001019060200180831161203457829003601f168201915b5050505050905090565b600061211e6120686128c0565b8461211985604051806060016040528060258152602001614ec460259139600360006120926128c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e19092919063ffffffff16565b6128c8565b6001905092915050565b601760009054906101000a900460ff1681565b600061214f6121486128c0565b8484612a27565b6001905092915050565b6121616128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612221576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601560166101000a81548160ff02191690831515021790555060016015806101000a81548160ff021916908315150217905550565b6122606128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123a36128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612463576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60148111156124da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d6178696d756d20746178206c696d69742069732032302070657263656e740081525060200191505060405180910390fd5b61250260646124f48360075461334490919063ffffffff16565b6131cc90919063ffffffff16565b60118190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61259a6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6126bd6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612803576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614ddb6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561290257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561293c57600080fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e736025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614d8e6023913960400191505060405180910390fd5b60008111612b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614e4a6029913960400191505060405180910390fd5b601560169054906101000a900460ff16612c7b57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612c305750612c00611f90565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6f5750612c3f611f90565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c7a5761dead91505b5b60011515601760009054906101000a900460ff161515148015612ce85750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d3e5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d78575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ee157601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e285750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612e60576a01a784379d99db42000000612e5482612e4685611c9d565b61321690919063ffffffff16565b1115612e5f57600080fd5b5b69d3c21bcecceda1000000811115612ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5472616e7366657220616d6f756e74206d757374206265206c6573730000000081525060200191505060405180910390fd5b5b612ee9611f90565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f575750612f27611f90565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f6c57601154811115612f6b57600080fd5b5b6000612f7730611c9d565b905060006016548210159050808015612f9d5750601560149054906101000a900460ff16155b8015612ff75750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561300d575060158054906101000a900460ff165b1561301c5761301b826133ca565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130c35750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130cd57600090505b6130d986868684613606565b505050505050565b600083831115829061318e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613153578082015181840152602081019050613138565b50505050905090810190601f1680156131805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006131ae613917565b915091506131c581836131cc90919063ffffffff16565b9250505090565b600061320e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ba8565b905092915050565b600080828401905083811015613294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006132b58a613c6e565b92509250925060008060006132d38d86866132ce6131a1565b613cc8565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061333c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e1565b905092915050565b60008083141561335757600090506133c4565b600082840290508284828161336857fe5b04146133bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e016021913960400191505060405180910390fd5b809150505b92915050565b6001601560146101000a81548160ff02191690831515021790555060006133fb6002836131cc90919063ffffffff16565b905060006134136004846131cc90919063ffffffff16565b9050600061342b6004856131cc90919063ffffffff16565b905060006134436002856131cc90919063ffffffff16565b9050600061345a82866132fa90919063ffffffff16565b9050600047905061348e6134898561347b888761321690919063ffffffff16565b61321690919063ffffffff16565b613d51565b60006134a382476132fa90919063ffffffff16565b905060006134bb6003836131cc90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613525573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561358e573d6000803e3d6000fd5b506135998482614005565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828660405180848152602001838152602001828152602001935050505060405180910390a150505050505050506000601560146101000a81548160ff02191690831515021790555050565b8061361457613613614175565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136b75750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136cc576136c78484846141b8565b613903565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561376f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137845761377f848484614418565b613902565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138285750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561383d57613838848484614678565b613901565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138df5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138f4576138ef848484614843565b613900565b6138ff848484614678565b5b5b5b5b8061391157613910614b38565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613b6b5782600160006006848154811061394a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613a3157508160026000600684815481106139c957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613a485760085460075494509450505050613ba4565b613ad16001600060068481548110613a5c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846132fa90919063ffffffff16565b9250613b5c6002600060068481548110613ae757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132fa90919063ffffffff16565b9150808060010191505061392b565b50613b836007546008546131cc90919063ffffffff16565b821015613b9b57600854600754935093505050613ba4565b81819350935050505b9091565b60008083118290613c54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c19578082015181840152602081019050613bfe565b50505050905090810190601f168015613c465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613c6057fe5b049050809150509392505050565b600080600080613c7d85614b4c565b90506000613c8a86614b7d565b90506000613cb382613ca5858a6132fa90919063ffffffff16565b6132fa90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613ce1858961334490919063ffffffff16565b90506000613cf8868961334490919063ffffffff16565b90506000613d0f878961334490919063ffffffff16565b90506000613d3882613d2a85876132fa90919063ffffffff16565b6132fa90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613d6b57600080fd5b50604051908082528060200260200182016040528015613d9a5781602001602082028036833780820191505090505b5090503081600081518110613dab57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e4d57600080fd5b505afa158015613e61573d6000803e3d6000fd5b505050506040513d6020811015613e7757600080fd5b810190808051906020019092919050505081600181518110613e9557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613efc30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128c8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613fc0578082015181840152602081019050613fa5565b505050509050019650505050505050600060405180830381600087803b158015613fe957600080fd5b505af1158015613ffd573d6000803e3d6000fd5b505050505050565b61403230601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128c8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561411e57600080fd5b505af1158015614132573d6000803e3d6000fd5b50505050506040513d606081101561414957600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600d5414801561418957506000600f54145b15614193576141b6565b600d54600e81905550600f546010819055506000600d819055506000600f819055505b565b6000806000806000806141ca8761329e565b95509550955095509550955061422887600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142bd86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061439e81614bae565b6143a88483614d53565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061442a8761329e565b95509550955095509550955061448886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451d83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145b285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145fe81614bae565b6146088483614d53565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061468a8761329e565b9550955095509550955095506146e886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061477d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147c981614bae565b6147d38483614d53565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806148558761329e565b9550955095509550955095506148b387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061494886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149dd83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a7285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614abe81614bae565b614ac88483614d53565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600e54600d81905550601054600f81905550565b6000614b766064614b68600d548561334490919063ffffffff16565b6131cc90919063ffffffff16565b9050919050565b6000614ba76064614b99600f548561334490919063ffffffff16565b6131cc90919063ffffffff16565b9050919050565b6000614bb86131a1565b90506000614bcf828461334490919063ffffffff16565b9050614c2381600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614d4e57614d0a83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614d68826008546132fa90919063ffffffff16565b600881905550614d838160095461321690919063ffffffff16565b600981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122032bfbb4cc1284b4c81dd84b2caa69055ee4b9a18c08d863f9fc16188ca932e5664736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80636bc87c3a11610118578063a4d66daf116100a0578063c816841b1161006f578063c816841b14610b3d578063d543dbeb14610b7e578063dd62ed3e14610bb9578063ea2f0b3714610c3e578063f2fde38b14610c8f5761021a565b8063a4d66daf14610a4b578063a9059cbb14610a78578063b909485114610ae9578063c49b9a8014610b005761021a565b80637d1db4a5116100e75780637d1db4a51461087757806388f82020146108a25780638da5cb5b1461090957806395d89b411461094a578063a457c2d7146109da5761021a565b80636bc87c3a1461078f57806370a08231146107ba578063715018a61461081f578063735de9f7146108365761021a565b8063395093511161019b5780634549b0391161016a5780634549b0391461061457806348a464731461066f5780634a74bb02146106aa57806352390c02146106d75780635342acb4146107285761021a565b806339509351146104ec5780633b124fe71461055d5780633bd5d17314610588578063437823ec146105c35761021a565b806323b872dd116101e257806323b872dd146103765780632cde6081146104075780632d8381191461041e578063313ce5671461046d5780633685d4191461049b5761021a565b806306fdde031461021f578063095ea7b3146102af57806313114a9d1461032057806318160ddd1461034b5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610ce0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610274578082015181840152602081019050610259565b50505050905090810190601f1680156102a15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102bb57600080fd5b50610308600480360360408110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d82565b60405180821515815260200191505060405180910390f35b34801561032c57600080fd5b50610335610da0565b6040518082815260200191505060405180910390f35b34801561035757600080fd5b50610360610daa565b6040518082815260200191505060405180910390f35b34801561038257600080fd5b506103ef6004803603606081101561039957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610db4565b60405180821515815260200191505060405180910390f35b34801561041357600080fd5b5061041c610e8d565b005b34801561042a57600080fd5b506104576004803603602081101561044157600080fd5b8101908080359060200190929190505050610ffb565b6040518082815260200191505060405180910390f35b34801561047957600080fd5b5061048261107f565b604051808260ff16815260200191505060405180910390f35b3480156104a757600080fd5b506104ea600480360360208110156104be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611096565b005b3480156104f857600080fd5b506105456004803603604081101561050f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611420565b60405180821515815260200191505060405180910390f35b34801561056957600080fd5b506105726114d3565b6040518082815260200191505060405180910390f35b34801561059457600080fd5b506105c1600480360360208110156105ab57600080fd5b81019080803590602001909291905050506114d9565b005b3480156105cf57600080fd5b50610612600480360360208110156105e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061166a565b005b34801561062057600080fd5b506106596004803603604081101561063757600080fd5b810190808035906020019092919080351515906020019092919050505061178d565b6040518082815260200191505060405180910390f35b34801561067b57600080fd5b506106a86004803603602081101561069257600080fd5b8101908080359060200190929190505050611844565b005b3480156106b657600080fd5b506106bf611916565b60405180821515815260200191505060405180910390f35b3480156106e357600080fd5b50610726600480360360208110156106fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611927565b005b34801561073457600080fd5b506107776004803603602081101561074b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c41565b60405180821515815260200191505060405180910390f35b34801561079b57600080fd5b506107a4611c97565b6040518082815260200191505060405180910390f35b3480156107c657600080fd5b50610809600480360360208110156107dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c9d565b6040518082815260200191505060405180910390f35b34801561082b57600080fd5b50610834611d88565b005b34801561084257600080fd5b5061084b611f0e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088357600080fd5b5061088c611f34565b6040518082815260200191505060405180910390f35b3480156108ae57600080fd5b506108f1600480360360208110156108c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f3a565b60405180821515815260200191505060405180910390f35b34801561091557600080fd5b5061091e611f90565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095657600080fd5b5061095f611fb9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561099f578082015181840152602081019050610984565b50505050905090810190601f1680156109cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109e657600080fd5b50610a33600480360360408110156109fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061205b565b60405180821515815260200191505060405180910390f35b348015610a5757600080fd5b50610a60612128565b60405180821515815260200191505060405180910390f35b348015610a8457600080fd5b50610ad160048036036040811015610a9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061213b565b60405180821515815260200191505060405180910390f35b348015610af557600080fd5b50610afe612159565b005b348015610b0c57600080fd5b50610b3b60048036036020811015610b2357600080fd5b81019080803515159060200190929190505050612258565b005b348015610b4957600080fd5b50610b52612375565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8a57600080fd5b50610bb760048036036020811015610ba157600080fd5b810190808035906020019092919050505061239b565b005b348015610bc557600080fd5b50610c2860048036036040811015610bdc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061250b565b6040518082815260200191505060405180910390f35b348015610c4a57600080fd5b50610c8d60048036036020811015610c6157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612592565b005b348015610c9b57600080fd5b50610cde60048036036020811015610cb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126b5565b005b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d785780601f10610d4d57610100808354040283529160200191610d78565b820191906000526020600020905b815481529060010190602001808311610d5b57829003601f168201915b5050505050905090565b6000610d96610d8f6128c0565b84846128c8565b6001905092915050565b6000600954905090565b6000600754905090565b6000610dc1848484612a27565b610e8284610dcd6128c0565b610e7d85604051806060016040528060288152602001614e2260289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e336128c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e19092919063ffffffff16565b6128c8565b600190509392505050565b610e956128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515601760009054906101000a900460ff16151514610fde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6c696d697420697320616c72656164792066616c73650000000000000000000081525060200191505060405180910390fd5b6000601760006101000a81548160ff021916908315150217905550565b6000600854821115611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614db1602a913960400191505060405180910390fd5b60006110626131a1565b905061107781846131cc90919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b61109e6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60068054905081101561141c578173ffffffffffffffffffffffffffffffffffffffff166006828154811061125157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140f576006600160068054905003815481106112ad57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600682815481106112e557fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060068054806113d557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561141c565b8080600101915050611220565b5050565b60006114c961142d6128c0565b846114c4856003600061143e6128c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b6128c8565b6001905092915050565b600d5481565b60006114e36128c0565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614e98602c913960400191505060405180910390fd5b60006115938361329e565b505050505090506115ec81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611644816008546132fa90919063ffffffff16565b60088190555061165f8360095461321690919063ffffffff16565b600981905550505050565b6116726128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600754831115611807576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816118275760006118178461329e565b505050505090508091505061183e565b60006118328461329e565b50505050915050809150505b92915050565b61184c6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060168190555050565b60158054906101000a900460ff1681565b61192f6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b8357611b3f600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ffb565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d3857600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d83565b611d80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ffb565b90505b919050565b611d906128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120515780601f1061202657610100808354040283529160200191612051565b820191906000526020600020905b81548152906001019060200180831161203457829003601f168201915b5050505050905090565b600061211e6120686128c0565b8461211985604051806060016040528060258152602001614ec460259139600360006120926128c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130e19092919063ffffffff16565b6128c8565b6001905092915050565b601760009054906101000a900460ff1681565b600061214f6121486128c0565b8484612a27565b6001905092915050565b6121616128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612221576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601560166101000a81548160ff02191690831515021790555060016015806101000a81548160ff021916908315150217905550565b6122606128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806015806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123a36128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612463576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60148111156124da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4d6178696d756d20746178206c696d69742069732032302070657263656e740081525060200191505060405180910390fd5b61250260646124f48360075461334490919063ffffffff16565b6131cc90919063ffffffff16565b60118190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61259a6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6126bd6128c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612803576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614ddb6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561290257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561293c57600080fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614e736025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614d8e6023913960400191505060405180910390fd5b60008111612b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614e4a6029913960400191505060405180910390fd5b601560169054906101000a900460ff16612c7b57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612c305750612c00611f90565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6f5750612c3f611f90565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c7a5761dead91505b5b60011515601760009054906101000a900460ff161515148015612ce85750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d3e5750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d78575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ee157601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e285750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612e60576a01a784379d99db42000000612e5482612e4685611c9d565b61321690919063ffffffff16565b1115612e5f57600080fd5b5b69d3c21bcecceda1000000811115612ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5472616e7366657220616d6f756e74206d757374206265206c6573730000000081525060200191505060405180910390fd5b5b612ee9611f90565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f575750612f27611f90565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f6c57601154811115612f6b57600080fd5b5b6000612f7730611c9d565b905060006016548210159050808015612f9d5750601560149054906101000a900460ff16155b8015612ff75750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561300d575060158054906101000a900460ff165b1561301c5761301b826133ca565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130c35750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130cd57600090505b6130d986868684613606565b505050505050565b600083831115829061318e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613153578082015181840152602081019050613138565b50505050905090810190601f1680156131805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006131ae613917565b915091506131c581836131cc90919063ffffffff16565b9250505090565b600061320e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ba8565b905092915050565b600080828401905083811015613294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006132b58a613c6e565b92509250925060008060006132d38d86866132ce6131a1565b613cc8565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061333c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130e1565b905092915050565b60008083141561335757600090506133c4565b600082840290508284828161336857fe5b04146133bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614e016021913960400191505060405180910390fd5b809150505b92915050565b6001601560146101000a81548160ff02191690831515021790555060006133fb6002836131cc90919063ffffffff16565b905060006134136004846131cc90919063ffffffff16565b9050600061342b6004856131cc90919063ffffffff16565b905060006134436002856131cc90919063ffffffff16565b9050600061345a82866132fa90919063ffffffff16565b9050600047905061348e6134898561347b888761321690919063ffffffff16565b61321690919063ffffffff16565b613d51565b60006134a382476132fa90919063ffffffff16565b905060006134bb6003836131cc90919063ffffffff16565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613525573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561358e573d6000803e3d6000fd5b506135998482614005565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828660405180848152602001838152602001828152602001935050505060405180910390a150505050505050506000601560146101000a81548160ff02191690831515021790555050565b8061361457613613614175565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136b75750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136cc576136c78484846141b8565b613903565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561376f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137845761377f848484614418565b613902565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138285750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561383d57613838848484614678565b613901565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138df5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138f4576138ef848484614843565b613900565b6138ff848484614678565b5b5b5b5b8061391157613910614b38565b5b50505050565b600080600060085490506000600754905060005b600680549050811015613b6b5782600160006006848154811061394a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613a3157508160026000600684815481106139c957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613a485760085460075494509450505050613ba4565b613ad16001600060068481548110613a5c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846132fa90919063ffffffff16565b9250613b5c6002600060068481548110613ae757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132fa90919063ffffffff16565b9150808060010191505061392b565b50613b836007546008546131cc90919063ffffffff16565b821015613b9b57600854600754935093505050613ba4565b81819350935050505b9091565b60008083118290613c54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c19578082015181840152602081019050613bfe565b50505050905090810190601f168015613c465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613c6057fe5b049050809150509392505050565b600080600080613c7d85614b4c565b90506000613c8a86614b7d565b90506000613cb382613ca5858a6132fa90919063ffffffff16565b6132fa90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613ce1858961334490919063ffffffff16565b90506000613cf8868961334490919063ffffffff16565b90506000613d0f878961334490919063ffffffff16565b90506000613d3882613d2a85876132fa90919063ffffffff16565b6132fa90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613d6b57600080fd5b50604051908082528060200260200182016040528015613d9a5781602001602082028036833780820191505090505b5090503081600081518110613dab57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e4d57600080fd5b505afa158015613e61573d6000803e3d6000fd5b505050506040513d6020811015613e7757600080fd5b810190808051906020019092919050505081600181518110613e9557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613efc30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128c8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613fc0578082015181840152602081019050613fa5565b505050509050019650505050505050600060405180830381600087803b158015613fe957600080fd5b505af1158015613ffd573d6000803e3d6000fd5b505050505050565b61403230601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128c8565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561411e57600080fd5b505af1158015614132573d6000803e3d6000fd5b50505050506040513d606081101561414957600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600d5414801561418957506000600f54145b15614193576141b6565b600d54600e81905550600f546010819055506000600d819055506000600f819055505b565b6000806000806000806141ca8761329e565b95509550955095509550955061422887600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142bd86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061439e81614bae565b6143a88483614d53565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061442a8761329e565b95509550955095509550955061448886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451d83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145b285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145fe81614bae565b6146088483614d53565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061468a8761329e565b9550955095509550955095506146e886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061477d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147c981614bae565b6147d38483614d53565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806148558761329e565b9550955095509550955095506148b387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061494886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132fa90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149dd83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a7285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614abe81614bae565b614ac88483614d53565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600e54600d81905550601054600f81905550565b6000614b766064614b68600d548561334490919063ffffffff16565b6131cc90919063ffffffff16565b9050919050565b6000614ba76064614b99600f548561334490919063ffffffff16565b6131cc90919063ffffffff16565b9050919050565b6000614bb86131a1565b90506000614bcf828461334490919063ffffffff16565b9050614c2381600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614d4e57614d0a83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614d68826008546132fa90919063ffffffff16565b600881905550614d838160095461321690919063ffffffff16565b600981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122032bfbb4cc1284b4c81dd84b2caa69055ee4b9a18c08d863f9fc16188ca932e5664736f6c634300060c0033

Deployed Bytecode Sourcemap

12268:19412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14916:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15828:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16949:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15193:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15997:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19384:136;;;;;;;;;;;;;:::i;:::-;;17873:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15102:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18589:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16318:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13004:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17044:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30790:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17429:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31041:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13557:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18134:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30655:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13091:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15296:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9633:148;;;;;;;;;;;;;:::i;:::-;;13358:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13255;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16821:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8990:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15007:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16544:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19347:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15502:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19532:110;;;;;;;;;;;;;:::i;:::-;;31410:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13402:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31166:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15677:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30913:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9936:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14916:83;14953:13;14986:5;14979:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14916:83;:::o;15828:161::-;15903:4;15920:39;15929:12;:10;:12::i;:::-;15943:7;15952:6;15920:8;:39::i;:::-;15977:4;15970:11;;15828:161;;;;:::o;16949:87::-;16991:7;17018:10;;17011:17;;16949:87;:::o;15193:95::-;15246:7;15273;;15266:14;;15193:95;:::o;15997:313::-;16095:4;16112:36;16122:6;16130:9;16141:6;16112:9;:36::i;:::-;16159:121;16168:6;16176:12;:10;:12::i;:::-;16190:89;16228:6;16190:89;;;;;;;;;;;;;;;;;:11;:19;16202:6;16190:19;;;;;;;;;;;;;;;:33;16210:12;:10;:12::i;:::-;16190:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;16159:8;:121::i;:::-;16298:4;16291:11;;15997:313;;;;;:::o;19384:136::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19453:4:::1;19444:13;;:5;;;;;;;;;;;:13;;;19436:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19507:5;19499;;:13;;;;;;;;;;;;;;;;;;19384:136::o:0;17873:253::-;17939:7;17978;;17967;:18;;17959:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18043:19;18066:10;:8;:10::i;:::-;18043:33;;18094:24;18106:11;18094:7;:11;;:24;;;;:::i;:::-;18087:31;;;17873:253;;;:::o;15102:83::-;15143:5;15168:9;;;;;;;;;;;15161:16;;15102:83;:::o;18589:479::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18671:11:::1;:20;18683:7;18671:20;;;;;;;;;;;;;;;;;;;;;;;;;18663:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18739:9;18734:327;18758:9;:16;;;;18754:1;:20;18734:327;;;18816:7;18800:23;;:9;18810:1;18800:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;18796:254;;;18859:9;18888:1;18869:9;:16;;;;:20;18859:31;;;;;;;;;;;;;;;;;;;;;;;;;18844:9;18854:1;18844:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18928:1;18909:7;:16;18917:7;18909:16;;;;;;;;;;;;;;;:20;;;;18971:5;18948:11;:20;18960:7;18948:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;18995:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19029:5;;18796:254;18776:3;;;;;;;18734:327;;;;18589:479:::0;:::o;16318:218::-;16406:4;16423:83;16432:12;:10;:12::i;:::-;16446:7;16455:50;16494:10;16455:11;:25;16467:12;:10;:12::i;:::-;16455:25;;;;;;;;;;;;;;;:34;16481:7;16455:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;16423:8;:83::i;:::-;16524:4;16517:11;;16318:218;;;;:::o;13004:26::-;;;;:::o;17044:377::-;17096:14;17113:12;:10;:12::i;:::-;17096:29;;17145:11;:19;17157:6;17145:19;;;;;;;;;;;;;;;;;;;;;;;;;17144:20;17136:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17225:15;17249:19;17260:7;17249:10;:19::i;:::-;17224:44;;;;;;;17297:28;17317:7;17297;:15;17305:6;17297:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;17279:7;:15;17287:6;17279:15;;;;;;;;;;;;;;;:46;;;;17346:20;17358:7;17346;;:11;;:20;;;;:::i;:::-;17336:7;:30;;;;17390:23;17405:7;17390:10;;:14;;:23;;;;:::i;:::-;17377:10;:36;;;;17044:377;;;:::o;30790:111::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30889:4:::1;30859:18;:27;30878:7;30859:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;30790:111:::0;:::o;17429:436::-;17519:7;17558;;17547;:18;;17539:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17617:17;17612:246;;17652:15;17676:19;17687:7;17676:10;:19::i;:::-;17651:44;;;;;;;17717:7;17710:14;;;;;17612:246;17759:23;17790:19;17801:7;17790:10;:19::i;:::-;17757:52;;;;;;;17831:15;17824:22;;;17429:436;;;;;:::o;31041:114::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31141:6:::1;31119:19;:28;;;;31041:114:::0;:::o;13557:41::-;;;;;;;;;;;;:::o;18134:447::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18331:11:::1;:20;18343:7;18331:20;;;;;;;;;;;;;;;;;;;;;;;;;18330:21;18322:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18416:1;18397:7;:16;18405:7;18397:16;;;;;;;;;;;;;;;;:20;18394:108;;;18453:37;18473:7;:16;18481:7;18473:16;;;;;;;;;;;;;;;;18453:19;:37::i;:::-;18434:7;:16;18442:7;18434:16;;;;;;;;;;;;;;;:56;;;;18394:108;18535:4;18512:11;:20;18524:7;18512:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;18550:9;18565:7;18550:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18134:447:::0;:::o;30655:123::-;30719:4;30743:18;:27;30762:7;30743:27;;;;;;;;;;;;;;;;;;;;;;;;;30736:34;;30655:123;;;:::o;13091:32::-;;;;:::o;15296:198::-;15362:7;15386:11;:20;15398:7;15386:20;;;;;;;;;;;;;;;;;;;;;;;;;15382:49;;;15415:7;:16;15423:7;15415:16;;;;;;;;;;;;;;;;15408:23;;;;15382:49;15449:37;15469:7;:16;15477:7;15469:16;;;;;;;;;;;;;;;;15449:19;:37::i;:::-;15442:44;;15296:198;;;;:::o;9633:148::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9740:1:::1;9703:40;;9724:6;::::0;::::1;;;;;;;;9703:40;;;;;;;;;;;;9771:1;9754:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9633:148::o:0;13358:37::-;;;;;;;;;;;;;:::o;13255:::-;;;;:::o;16821:120::-;16889:4;16913:11;:20;16925:7;16913:20;;;;;;;;;;;;;;;;;;;;;;;;;16906:27;;16821:120;;;:::o;8990:79::-;9028:7;9055:6;;;;;;;;;;;9048:13;;8990:79;:::o;15007:87::-;15046:13;15079:7;15072:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15007:87;:::o;16544:269::-;16637:4;16654:129;16663:12;:10;:12::i;:::-;16677:7;16686:96;16725:15;16686:96;;;;;;;;;;;;;;;;;:11;:25;16698:12;:10;:12::i;:::-;16686:25;;;;;;;;;;;;;;;:34;16712:7;16686:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;16654:8;:129::i;:::-;16801:4;16794:11;;16544:269;;;;:::o;19347:24::-;;;;;;;;;;;;;:::o;15502:167::-;15580:4;15597:42;15607:12;:10;:12::i;:::-;15621:9;15632:6;15597:9;:42::i;:::-;15657:4;15650:11;;15502:167;;;;:::o;19532:110::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19591:4:::1;19580:8;;:15;;;;;;;;;;;;;;;;;;19630:4;19606:21;::::0;:28:::1;;;;;;;;;;;;;;;;;;19532:110::o:0;31410:171::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31511:8:::1;31487:21;::::0;:32:::1;;;;;;;;;;;;;;;;;;31535:38;31564:8;31535:38;;;;;;;;;;;;;;;;;;;;31410:171:::0;:::o;13402:26::-;;;;;;;;;;;;;:::o;31166:236::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31270:2:::1;31254:12;:18;;31246:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31334:60;31378:5;31334:25;31346:12;31334:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;31319:12;:75;;;;31166:236:::0;:::o;15677:143::-;15758:7;15785:11;:18;15797:5;15785:18;;;;;;;;;;;;;;;:27;15804:7;15785:27;;;;;;;;;;;;;;;;15778:34;;15677:143;;;;:::o;30913:110::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31010:5:::1;30980:18;:27;30999:7;30980:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;30913:110:::0;:::o;9936:244::-;9212:12;:10;:12::i;:::-;9202:22;;:6;;;;;;;;;;:22;;;9194:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10045:1:::1;10025:22;;:8;:22;;;;10017:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10135:8;10106:38;;10127:6;::::0;::::1;;;;;;;;10106:38;;;;;;;;;;;;10164:8;10155:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;9936:244:::0;:::o;104:106::-;157:15;192:10;185:17;;104:106;:::o;19080:259::-;19190:1;19173:19;;:5;:19;;;;19165:28;;;;;;19231:1;19212:21;;:7;:21;;;;19204:30;;;;;;19277:6;19247:11;:18;19259:5;19247:18;;;;;;;;;;;;;;;:27;19266:7;19247:27;;;;;;;;;;;;;;;:36;;;;19315:7;19299:32;;19308:5;19299:32;;;19324:6;19299:32;;;;;;;;;;;;;;;;;;19080:259;;;:::o;19654:2096::-;19792:1;19776:18;;:4;:18;;;;19768:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19869:1;19855:16;;:2;:16;;;;19847:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19939:1;19930:6;:10;19922:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20004:8;;;;;;;;;;;19999:139;;20040:11;;;;;;;;;;;20032:19;;:4;:19;;;:38;;;;;20063:7;:5;:7::i;:::-;20055:15;;:4;:15;;;;20032:38;:55;;;;;20080:7;:5;:7::i;:::-;20074:13;;:2;:13;;;;20032:55;20028:103;;;13474:42;20103:16;;20028:103;19999:139;20160:4;20151:13;;:5;;;;;;;;;;;:13;;;:42;;;;;20169:18;:24;20188:4;20169:24;;;;;;;;;;;;;;;;;;;;;;;;;20168:25;20151:42;:69;;;;;20198:18;:22;20217:2;20198:22;;;;;;;;;;;;;;;;;;;;;;;;;20197:23;20151:69;:90;;;;;13474:42;20224:17;;:2;:17;;;;20151:90;20148:367;;;20266:11;;;;;;;;;;;20260:17;;:2;:17;;;;:40;;;;;20289:11;;;;;;;;;;;20281:19;;:4;:19;;;20260:40;20257:149;;;20360:28;20330:25;20348:6;20330:13;20340:2;20330:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;20329:59;;20320:70;;;;;;20257:149;20438:28;20428:6;:38;;20420:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20148:367;20550:7;:5;:7::i;:::-;20542:15;;:4;:15;;;;:32;;;;;20567:7;:5;:7::i;:::-;20561:13;;:2;:13;;;;20542:32;20539:81;;;20607:12;;20597:6;:22;;20589:31;;;;;;20539:81;20921:28;20952:24;20970:4;20952:9;:24::i;:::-;20921:55;;20987:24;21038:19;;21014:20;:43;;20987:70;;21086:19;:53;;;;;21123:16;;;;;;;;;;;21122:17;21086:53;:89;;;;;21164:11;;;;;;;;;;;21156:19;;:4;:19;;;;21086:89;:127;;;;;21192:21;;;;;;;;;;21086:127;21068:249;;;21269:36;21284:20;21269:14;:36::i;:::-;21068:249;21398:12;21413:4;21398:19;;21525:18;:24;21544:4;21525:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;21553:18;:22;21572:2;21553:22;;;;;;;;;;;;;;;;;;;;;;;;;21525:50;21522:96;;;21601:5;21591:15;;21522:96;21704:38;21719:4;21724:2;21727:6;21734:7;21704:14;:38::i;:::-;19654:2096;;;;;;:::o;4923:192::-;5009:7;5042:1;5037;:6;;5045:12;5029:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5069:9;5085:1;5081;:5;5069:17;;5106:1;5099:8;;;4923:192;;;;;:::o;28805:163::-;28846:7;28867:15;28884;28903:19;:17;:19::i;:::-;28866:56;;;;28940:20;28952:7;28940;:11;;:20;;;;:::i;:::-;28933:27;;;;28805:163;:::o;6321:132::-;6379:7;6406:39;6410:1;6413;6406:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6399:46;;6321:132;;;;:::o;4020:181::-;4078:7;4098:9;4114:1;4110;:5;4098:17;;4139:1;4134;:6;;4126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4192:1;4185:8;;;4020:181;;;;:::o;27603:419::-;27662:7;27671;27680;27689;27698;27707;27728:23;27753:12;27767:18;27789:20;27801:7;27789:11;:20::i;:::-;27727:82;;;;;;27821:15;27838:23;27863:12;27879:50;27891:7;27900:4;27906:10;27918;:8;:10::i;:::-;27879:11;:50::i;:::-;27820:109;;;;;;27948:7;27957:15;27974:4;27980:15;27997:4;28003:10;27940:74;;;;;;;;;;;;;;;;;;27603:419;;;;;;;:::o;4484:136::-;4542:7;4569:43;4573:1;4576;4569:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4562:50;;4484:136;;;;:::o;5374:471::-;5432:7;5682:1;5677;:6;5673:47;;;5707:1;5700:8;;;;5673:47;5732:9;5748:1;5744;:5;5732:17;;5777:1;5772;5768;:5;;;;;;:10;5760:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5836:1;5829:8;;;5374:471;;;;;:::o;21762:1312::-;14006:4;13987:16;;:23;;;;;;;;;;;;;;;;;;21898:20:::1;21921:27;21946:1;21921:20;:24;;:27;;;;:::i;:::-;21898:50;;21959:14;21976:27;22001:1;21976:20;:24;;:27;;;;:::i;:::-;21959:44;;22014:18;22035:27;22060:1;22035:20;:24;;:27;;;;:::i;:::-;22014:48;;22105:12;22120:19;22137:1;22120:12;:16;;:19;;;;:::i;:::-;22105:34;;22150:17;22170:22;22187:4;22170:12;:16;;:22;;;;:::i;:::-;22150:42;;22468:22;22493:21;22468:46;;22559:50;22576:32;22597:10;22576:16;22585:6;22576:4;:8;;:16;;;;:::i;:::-;:20;;:32;;;;:::i;:::-;22559:16;:50::i;:::-;22740:15;22758:41;22784:14;22758:21;:25;;:41;;;;:::i;:::-;22740:59;;22810:16;22829:14;22841:1;22829:7;:11;;:14;;;;:::i;:::-;22810:33;;22854:6;;;;;;;;;;;:15;;:25;22870:8;22854:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22890:7;;;;;;;;;;;:16;;:26;22907:8;22890:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22966:33;22979:9;22990:8;22966:12;:33::i;:::-;23025:41;23040:4;23046:8;23056:9;23025:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14022:1;;;;;;;;14053:5:::0;14034:16;;:24;;;;;;;;;;;;;;;;;;21762:1312;:::o;24278:834::-;24389:7;24385:40;;24411:14;:12;:14::i;:::-;24385:40;24450:11;:19;24462:6;24450:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24474:11;:22;24486:9;24474:22;;;;;;;;;;;;;;;;;;;;;;;;;24473:23;24450:46;24446:597;;;24513:48;24535:6;24543:9;24554:6;24513:21;:48::i;:::-;24446:597;;;24584:11;:19;24596:6;24584:19;;;;;;;;;;;;;;;;;;;;;;;;;24583:20;:46;;;;;24607:11;:22;24619:9;24607:22;;;;;;;;;;;;;;;;;;;;;;;;;24583:46;24579:464;;;24646:46;24666:6;24674:9;24685:6;24646:19;:46::i;:::-;24579:464;;;24715:11;:19;24727:6;24715:19;;;;;;;;;;;;;;;;;;;;;;;;;24714:20;:47;;;;;24739:11;:22;24751:9;24739:22;;;;;;;;;;;;;;;;;;;;;;;;;24738:23;24714:47;24710:333;;;24778:44;24796:6;24804:9;24815:6;24778:17;:44::i;:::-;24710:333;;;24844:11;:19;24856:6;24844:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;24867:11;:22;24879:9;24867:22;;;;;;;;;;;;;;;;;;;;;;;;;24844:45;24840:203;;;24906:48;24928:6;24936:9;24947:6;24906:21;:48::i;:::-;24840:203;;;24987:44;25005:6;25013:9;25024:6;24987:17;:44::i;:::-;24840:203;24710:333;24579:464;24446:597;25067:7;25063:41;;25089:15;:13;:15::i;:::-;25063:41;24278:834;;;;:::o;28976:561::-;29026:7;29035;29055:15;29073:7;;29055:25;;29091:15;29109:7;;29091:25;;29138:9;29133:289;29157:9;:16;;;;29153:1;:20;29133:289;;;29223:7;29199;:21;29207:9;29217:1;29207:12;;;;;;;;;;;;;;;;;;;;;;;;;29199:21;;;;;;;;;;;;;;;;:31;:66;;;;29258:7;29234;:21;29242:9;29252:1;29242:12;;;;;;;;;;;;;;;;;;;;;;;;;29234:21;;;;;;;;;;;;;;;;:31;29199:66;29195:97;;;29275:7;;29284;;29267:25;;;;;;;;;29195:97;29317:34;29329:7;:21;29337:9;29347:1;29337:12;;;;;;;;;;;;;;;;;;;;;;;;;29329:21;;;;;;;;;;;;;;;;29317:7;:11;;:34;;;;:::i;:::-;29307:44;;29376:34;29388:7;:21;29396:9;29406:1;29396:12;;;;;;;;;;;;;;;;;;;;;;;;;29388:21;;;;;;;;;;;;;;;;29376:7;:11;;:34;;;;:::i;:::-;29366:44;;29175:3;;;;;;;29133:289;;;;29446:20;29458:7;;29446;;:11;;:20;;;;:::i;:::-;29436:7;:30;29432:61;;;29476:7;;29485;;29468:25;;;;;;;;29432:61;29512:7;29521;29504:25;;;;;;28976:561;;;:::o;6949:278::-;7035:7;7067:1;7063;:5;7070:12;7055:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7094:9;7110:1;7106;:5;;;;;;7094:17;;7218:1;7211:8;;;6949:278;;;;;:::o;28030:330::-;28090:7;28099;28108;28128:12;28143:24;28159:7;28143:15;:24::i;:::-;28128:39;;28178:18;28199:30;28221:7;28199:21;:30::i;:::-;28178:51;;28240:23;28266:33;28288:10;28266:17;28278:4;28266:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28240:59;;28318:15;28335:4;28341:10;28310:42;;;;;;;;;28030:330;;;;;:::o;28368:429::-;28483:7;28492;28501;28521:15;28539:24;28551:11;28539:7;:11;;:24;;;;:::i;:::-;28521:42;;28574:12;28589:21;28598:11;28589:4;:8;;:21;;;;:::i;:::-;28574:36;;28621:18;28642:27;28657:11;28642:10;:14;;:27;;;;:::i;:::-;28621:48;;28680:23;28706:33;28728:10;28706:17;28718:4;28706:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28680:59;;28758:7;28767:15;28784:4;28750:39;;;;;;;;;;28368:429;;;;;;;;:::o;23098:583::-;23224:21;23262:1;23248:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23224:40;;23293:4;23275;23280:1;23275:7;;;;;;;;;;;;;:23;;;;;;;;;;;23319:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23309:4;23314:1;23309:7;;;;;;;;;;;;;:30;;;;;;;;;;;23352:60;23369:4;23384:13;;;;;;;;;;;23400:11;23352:8;:60::i;:::-;23451:13;;;;;;;;;;;:64;;;23530:11;23556:1;23600:4;23627;23647:15;23451:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23098:583;;:::o;23689:508::-;23837:60;23854:4;23869:13;;;;;;;;;;;23885:11;23837:8;:60::i;:::-;23940:13;;;;;;;;;;;:29;;;23977:9;24010:4;24030:11;24056:1;24099;24142:6;;;;;;;;;;;24163:15;23940:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23689:508;;:::o;30256:250::-;30313:1;30302:7;;:12;:34;;;;;30335:1;30318:13;;:18;30302:34;30299:46;;;30338:7;;30299:46;30383:7;;30365:15;:25;;;;30425:13;;30401:21;:37;;;;30469:1;30459:7;:11;;;;30497:1;30481:13;:17;;;;30256:250;:::o;26224:566::-;26327:15;26344:23;26369:12;26383:23;26408:12;26422:18;26444:19;26455:7;26444:10;:19::i;:::-;26326:137;;;;;;;;;;;;26492:28;26512:7;26492;:15;26500:6;26492:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26474:7;:15;26482:6;26474:15;;;;;;;;;;;;;;;:46;;;;26549:28;26569:7;26549;:15;26557:6;26549:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26531:7;:15;26539:6;26531:15;;;;;;;;;;;;;;;:46;;;;26609:39;26632:15;26609:7;:18;26617:9;26609:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26588:7;:18;26596:9;26588:18;;;;;;;;;;;;;;;:60;;;;26662:26;26677:10;26662:14;:26::i;:::-;26699:23;26711:4;26717;26699:11;:23::i;:::-;26755:9;26738:44;;26747:6;26738:44;;;26766:15;26738:44;;;;;;;;;;;;;;;;;;26224:566;;;;;;;;;:::o;25630:586::-;25731:15;25748:23;25773:12;25787:23;25812:12;25826:18;25848:19;25859:7;25848:10;:19::i;:::-;25730:137;;;;;;;;;;;;25896:28;25916:7;25896;:15;25904:6;25896:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25878:7;:15;25886:6;25878:15;;;;;;;;;;;;;;;:46;;;;25956:39;25979:15;25956:7;:18;25964:9;25956:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25935:7;:18;25943:9;25935:18;;;;;;;;;;;;;;;:60;;;;26027:39;26050:15;26027:7;:18;26035:9;26027:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26006:7;:18;26014:9;26006:18;;;;;;;;;;;;;;;:60;;;;26088:26;26103:10;26088:14;:26::i;:::-;26125:23;26137:4;26143;26125:11;:23::i;:::-;26181:9;26164:44;;26173:6;26164:44;;;26192:15;26164:44;;;;;;;;;;;;;;;;;;25630:586;;;;;;;;;:::o;25120:502::-;25219:15;25236:23;25261:12;25275:23;25300:12;25314:18;25336:19;25347:7;25336:10;:19::i;:::-;25218:137;;;;;;;;;;;;25384:28;25404:7;25384;:15;25392:6;25384:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25366:7;:15;25374:6;25366:15;;;;;;;;;;;;;;;:46;;;;25444:39;25467:15;25444:7;:18;25452:9;25444:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25423:7;:18;25431:9;25423:18;;;;;;;;;;;;;;;:60;;;;25494:26;25509:10;25494:14;:26::i;:::-;25531:23;25543:4;25549;25531:11;:23::i;:::-;25587:9;25570:44;;25579:6;25570:44;;;25598:15;25570:44;;;;;;;;;;;;;;;;;;25120:502;;;;;;;;;:::o;26798:642::-;26901:15;26918:23;26943:12;26957:23;26982:12;26996:18;27018:19;27029:7;27018:10;:19::i;:::-;26900:137;;;;;;;;;;;;27066:28;27086:7;27066;:15;27074:6;27066:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27048:7;:15;27056:6;27048:15;;;;;;;;;;;;;;;:46;;;;27123:28;27143:7;27123;:15;27131:6;27123:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27105:7;:15;27113:6;27105:15;;;;;;;;;;;;;;;:46;;;;27183:39;27206:15;27183:7;:18;27191:9;27183:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27162:7;:18;27170:9;27162:18;;;;;;;;;;;;;;;:60;;;;27254:39;27277:15;27254:7;:18;27262:9;27254:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27233:7;:18;27241:9;27233:18;;;;;;;;;;;;;;;:60;;;;27312:26;27327:10;27312:14;:26::i;:::-;27349:23;27361:4;27367;27349:11;:23::i;:::-;27405:9;27388:44;;27397:6;27388:44;;;27416:15;27388:44;;;;;;;;;;;;;;;;;;26798:642;;;;;;;;;:::o;30518:125::-;30572:15;;30562:7;:25;;;;30614:21;;30598:13;:37;;;;30518:125::o;29916:154::-;29980:7;30007:55;30046:5;30007:20;30019:7;;30007;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;30000:62;;29916:154;;;:::o;30078:166::-;30148:7;30175:61;30220:5;30175:26;30187:13;;30175:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;30168:68;;30078:166;;;:::o;29549:355::-;29612:19;29635:10;:8;:10::i;:::-;29612:33;;29656:18;29677:27;29692:11;29677:10;:14;;:27;;;;:::i;:::-;29656:48;;29740:38;29767:10;29740:7;:22;29756:4;29740:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;29715:7;:22;29731:4;29715:22;;;;;;;;;;;;;;;:63;;;;29792:11;:26;29812:4;29792:26;;;;;;;;;;;;;;;;;;;;;;;;;29789:107;;;29858:38;29885:10;29858:7;:22;29874:4;29858:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;29833:7;:22;29849:4;29833:22;;;;;;;;;;;;;;;:63;;;;29789:107;29549:355;;;:::o;27448:147::-;27526:17;27538:4;27526:7;;:11;;:17;;;;:::i;:::-;27516:7;:27;;;;27567:20;27582:4;27567:10;;:14;;:20;;;;:::i;:::-;27554:10;:33;;;;27448:147;;:::o

Swarm Source

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