ETH Price: $2,666.87 (+2.32%)

Token

Cthulhu (CTHULHU)
 

Overview

Max Total Supply

100,000,000,000,000 CTHULHU

Holders

28

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,377,562,175,188.943718543534927947 CTHULHU

Value
$0.00
0x8c48b5a6e5e128c0b8e4e3b28052ef5f846b3b20
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:
Cthulhu

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-28
*/

// SPDX-License-Identifier: Unlicensed


/*

    Join our socials,
    Telegram : https://t.me/cthulhuerc
    Website : https://cthulhu.site/

*/
pragma solidity ^0.8.4;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(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;
    }
}


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    

}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by 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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    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 DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}





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

    event TokenBurn(address indexed from, uint256 value);
    event SetLiquidityFee(uint256 amount);
    event SetMarketingFee(uint256 amount);
    event SetBurnFee(uint256 amount);
    
    string private _name = "Cthulhu";
    string private _symbol = "CTHULHU";
    uint8 private _decimals = 18;
    uint256 private _totalSupply = 100000 * 10**9 * 10**_decimals;
    
    address payable public marketingAddress = payable(0xddbe42ed35582a6457d712cc6e4D408537A301c1);
    address public devandmarketingWalletToken = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    address public constant deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromMaxBalance;

    uint256 private constant _maxFees = 25;
    uint256 private _totalFees;
    uint256 private _totalFeesToContract;
    uint256 private _liquidityFee;
    uint256 private _burnFee;
    uint256 private _devmarketingFee;
    
    uint256 private _maxBalance;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    uint256 private _liquifyThreshhold;
    bool inSwapAndLiquify;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        
        _isExcludedFromMaxBalance[owner()] = true;
        _isExcludedFromMaxBalance[address(this)] = true;
        _isExcludedFromMaxBalance[uniswapV2Pair] = true;

        _liquidityFee = 2;
        _devmarketingFee = 14;
        _burnFee = 2;
        _totalFees = _liquidityFee.add(_devmarketingFee).add(_burnFee);
        _totalFeesToContract = _liquidityFee.add(_devmarketingFee);

        _liquifyThreshhold = 10 * 10**9 * 10**_decimals;
        _maxBalance = 2000 * 10**9 * 10**_decimals;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    receive() external payable {}

    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 _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[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 _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function setMarketingAddress(address payable newMarketingAddress) external onlyOwner() {
        marketingAddress = newMarketingAddress;
    }

    function setLiquidityFeePercent(uint256 newLiquidityFee) external onlyOwner() {
        require(!inSwapAndLiquify, "inSwapAndLiquify");
        require(newLiquidityFee.add(_burnFee).add(_devmarketingFee) <= _maxFees, "Fees are too high.");
        _liquidityFee = newLiquidityFee;
        _totalFees = _liquidityFee.add(_devmarketingFee).add(_burnFee);
        _totalFeesToContract = _liquidityFee.add(_devmarketingFee);
        emit SetLiquidityFee(_liquidityFee);
    }

    function setMarketingFeePercent(uint256 newMarketingFee) external onlyOwner() {
        require(!inSwapAndLiquify, "inSwapAndLiquify");
        require(_liquidityFee.add(_burnFee).add(newMarketingFee) <= _maxFees, "Fees are too high.");
        _devmarketingFee = newMarketingFee;
        _totalFees = _liquidityFee.add(_devmarketingFee).add(_burnFee);
        _totalFeesToContract = _liquidityFee.add(_devmarketingFee);
        emit SetMarketingFee(_devmarketingFee);
    }

    function setBurnFeePercent(uint256 newBurnFee) external onlyOwner() {
        require(_liquidityFee.add(newBurnFee).add(_devmarketingFee) <= _maxFees, "Fees are too high.");
        _burnFee = newBurnFee;
        _totalFees = _liquidityFee.add(_devmarketingFee).add(_burnFee);
        emit SetBurnFee(_burnFee);
    }
    
    function setLiquifyThreshhold(uint256 newLiquifyThreshhold) external onlyOwner() {
        _liquifyThreshhold = newLiquifyThreshhold;
    }   

    function setdevandMarketingWalletToken(address _devandmarketingWalletToken) external onlyOwner(){
        devandmarketingWalletToken = _devandmarketingWalletToken;
    }

    function setMaxBalance(uint256 newMaxBalance) external onlyOwner(){
        // Minimum _maxBalance is 0.5% of _totalSupply 
        require(newMaxBalance >= _totalSupply.mul(5).div(1000));
        _maxBalance = newMaxBalance;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function excludeFromFees(address account) public onlyOwner {
        _isExcludedFromFees[account] = true;
    }
    
    function includeInFees(address account) public onlyOwner {
        _isExcludedFromFees[account] = false;
    }

    function isExcludedFromMaxBalance(address account) public view returns(bool) {
        return _isExcludedFromMaxBalance[account];
    }
    
    function excludeFromMaxBalance(address account) public onlyOwner {
        _isExcludedFromMaxBalance[account] = true;
    }
    
    function includeInMaxBalance(address account) public onlyOwner {
        _isExcludedFromMaxBalance[account] = false;
    }

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

    function liquidityFee() public view returns (uint256) {
        return _liquidityFee;
    }

    function marketingFee() public view returns (uint256) {
        return _devmarketingFee;
    }

    function burnFee() public view returns (uint256) {
        return _burnFee;
    }

    function maxFees() public pure returns (uint256) {
        return _maxFees;
    }

    function liquifyThreshhold() public view returns(uint256){
        return _liquifyThreshhold;
    }

    function maxBalance() public view returns (uint256) {
        return _maxBalance;
    }


    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");

        // Make sure that: Balance + Buy Amount <= _maxBalance
        if(
            from != owner() &&              // Not from Owner
            to != owner() &&                // Not to Owner
            !_isExcludedFromMaxBalance[to]  // is excludedFromMaxBalance
        ){
            require(
                balanceOf(to).add(amount) <= _maxBalance,
                "Max Balance is reached."
            );
        }
        
        // Swap Fees 
        if(
            to == uniswapV2Pair &&                              // Sell
            !inSwapAndLiquify &&                                // Swap is not locked
            balanceOf(address(this)) >= _liquifyThreshhold &&   // liquifyThreshhold is reached
            _totalFeesToContract > 0 &&                         // LiquidityFee + MarketingFee > 0
            from != owner() &&                                  // Not from Owner
            to != owner()                                       // Not to Owner
        ) {
            collectFees();
        }

        // Take Fees 
        if(
            !(_isExcludedFromFees[from] || _isExcludedFromFees[to])
            && _totalFees > 0
        ) {
            
        	uint256 feesToContract = amount.mul(_totalFeesToContract).div(100);
            uint256 toBurnAmount = amount.mul(_burnFee).div(100);
            
        	amount = amount.sub(feesToContract.add(toBurnAmount)); 

            transferToken(from, address(this), feesToContract);
            transferToken(from, deadAddress, toBurnAmount);
            emit TokenBurn(from, toBurnAmount);
        }

        transferToken(from, to, amount);
    }
    
    function collectFees() private lockTheSwap {
        
        uint256 liquidityTokensToSell = balanceOf(address(this)).mul(_liquidityFee).div(_totalFeesToContract);
        uint256 marketingTokensToSell = balanceOf(address(this)).mul(_devmarketingFee).div(_totalFeesToContract);
        
        // Get collected Liquidity Fees 
        swapAndLiquify(liquidityTokensToSell);  

        // Get collected Marketing Fees 
        swapAndSendToFee(marketingTokensToSell); 
    }

    function swapAndLiquify(uint256 tokens) private {
       
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        // current ETH balance
        uint256 initialBalance = address(this).balance;

        swapTokensForEth(half); 

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        addLiquidity(otherHalf, newBalance);
    }

    function swapAndSendToFee(uint256 tokens) private  {

        swapTokensForMarketingToken(tokens);

        // Transfer sold Token to marketingWallet
        IERC20(devandmarketingWalletToken).transfer(marketingAddress, IERC20(devandmarketingWalletToken).balanceOf(address(this)));
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function swapTokensForMarketingToken(uint256 tokenAmount) private {

        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = devandmarketingWalletToken;

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

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            address(0),
            block.timestamp
        );
    }

    function transferToken(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
}

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":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":"amount","type":"uint256"}],"name":"SetBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SetMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"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":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devandmarketingWalletToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxBalance","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquifyThreshhold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBurnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquifyThreshhold","type":"uint256"}],"name":"setLiquifyThreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBalance","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devandmarketingWalletToken","type":"address"}],"name":"setdevandMarketingWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600781526020017f437468756c6875000000000000000000000000000000000000000000000000008152506003908051906020019062000051929190620008d0565b506040518060400160405280600781526020017f435448554c485500000000000000000000000000000000000000000000000000815250600490805190602001906200009f929190620008d0565b506012600560006101000a81548160ff021916908360ff160217905550600560009054906101000a900460ff16600a620000da919062000b41565b655af3107a4000620000ed919062000c7e565b60065573ddbe42ed35582a6457d712cc6e4d408537a301c1600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dac17f958d2ee523a2206206994597c13d831ec7600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001a757600080fd5b506000620001ba6200083c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b857600080fd5b505afa158015620002cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f3919062000997565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035657600080fd5b505afa1580156200036b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000391919062000997565b6040518363ffffffff1660e01b8152600401620003b092919062000a0c565b602060405180830381600087803b158015620003cb57600080fd5b505af1158015620003e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000406919062000997565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006200049d6200084460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006200055c6200084460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002600f81905550600e6011819055506002601081905550620006d0601054620006bc601154600f546200086d60201b62001ed91790919060201c565b6200086d60201b62001ed91790919060201c565b600d81905550620006f4601154600f546200086d60201b62001ed91790919060201c565b600e81905550600560009054906101000a900460ff16600a62000718919062000b41565b6402540be4006200072a919062000c7e565b601581905550600560009054906101000a900460ff16600a6200074e919062000b41565b6501d1a94a200062000761919062000c7e565b601281905550600654600960006200077e6200083c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620007cc6200083c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040516200082d919062000a5b565b60405180910390a35062000e0e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008082846200087e919062000a89565b905083811015620008c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008bd9062000a39565b60405180910390fd5b8091505092915050565b828054620008de9062000d2a565b90600052602060002090601f0160209004810192826200090257600085556200094e565b82601f106200091d57805160ff19168380011785556200094e565b828001600101855582156200094e579182015b828111156200094d57825182559160200191906001019062000930565b5b5090506200095d919062000961565b5090565b5b808211156200097c57600081600090555060010162000962565b5090565b600081519050620009918162000df4565b92915050565b600060208284031215620009aa57600080fd5b6000620009ba8482850162000980565b91505092915050565b620009ce8162000cdf565b82525050565b6000620009e3601b8362000a78565b9150620009f08262000dcb565b602082019050919050565b62000a068162000d13565b82525050565b600060408201905062000a236000830185620009c3565b62000a326020830184620009c3565b9392505050565b6000602082019050818103600083015262000a5481620009d4565b9050919050565b600060208201905062000a726000830184620009fb565b92915050565b600082825260208201905092915050565b600062000a968262000d13565b915062000aa38362000d13565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000adb5762000ada62000d60565b5b828201905092915050565b6000808291508390505b600185111562000b385780860481111562000b105762000b0f62000d60565b5b600185161562000b205780820291505b808102905062000b308562000dbe565b945062000af0565b94509492505050565b600062000b4e8262000d13565b915062000b5b8362000d1d565b925062000b8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b92565b905092915050565b60008262000ba4576001905062000c77565b8162000bb4576000905062000c77565b816001811462000bcd576002811462000bd85762000c0e565b600191505062000c77565b60ff84111562000bed5762000bec62000d60565b5b8360020a91508482111562000c075762000c0662000d60565b5b5062000c77565b5060208310610133831016604e8410600b841016171562000c485782820a90508381111562000c425762000c4162000d60565b5b62000c77565b62000c57848484600162000ae6565b9250905081840481111562000c715762000c7062000d60565b5b81810290505b9392505050565b600062000c8b8262000d13565b915062000c988362000d13565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cd45762000cd362000d60565b5b828202905092915050565b600062000cec8262000cf3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000d4357607f821691505b6020821081141562000d5a5762000d5962000d8f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b62000dff8162000cdf565b811462000e0b57600080fd5b50565b6144008062000e1e6000396000f3fe6080604052600436106102345760003560e01c806370a082311161012e578063a457c2d7116100ab578063e57f14e11161006f578063e57f14e114610870578063e83e34b114610899578063f2fde38b146108c4578063fce589d8146108ed578063fd3cba9f146109185761023b565b8063a457c2d714610765578063a5ece941146107a2578063a9059cbb146107cd578063cea269581461080a578063dd62ed3e146108335761023b565b80638ee88c53116100f25780638ee88c5314610694578063906e9dd0146106bd57806395d89b41146106e657806398118cb4146107115780639d51d9b71461073c5761023b565b806370a08231146105c1578063715018a6146105fe57806373ad468a146106155780638861527c146106405780638da5cb5b146106695761023b565b80632b151cfe116101bc57806349bd5a5e1161018057806349bd5a5e146104da5780634fbee193146105055780635e8bc4bc146105425780635eb10c941461056d5780636b67c4df146105965761023b565b80632b151cfe146103f75780632b9a9ca314610420578063313ce567146104495780633950935114610474578063457c194c146104b15761023b565b806316a2f82a1161020357806316a2f82a146102fe57806318160ddd14610327578063181cec1c1461035257806323b872dd1461038f57806327c8f835146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806313114a9d146102a85780631694505e146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610943565b6040516102629190613a93565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906135bd565b6109d5565b60405161029f9190613a5d565b60405180910390f35b3480156102b457600080fd5b506102bd6109f3565b6040516102ca9190613c35565b60405180910390f35b3480156102df57600080fd5b506102e86109fd565b6040516102f59190613a78565b60405180910390f35b34801561030a57600080fd5b50610325600480360381019061032091906134b7565b610a23565b005b34801561033357600080fd5b5061033c610b13565b6040516103499190613c35565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906134b7565b610b1d565b6040516103869190613a5d565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b1919061356e565b610b73565b6040516103c39190613a5d565b60405180910390f35b3480156103d857600080fd5b506103e1610c4c565b6040516103ee919061399d565b60405180910390f35b34801561040357600080fd5b5061041e600480360381019061041991906134b7565b610c52565b005b34801561042c57600080fd5b5061044760048036038101906104429190613622565b610d42565b005b34801561045557600080fd5b5061045e610de1565b60405161046b9190613caa565b60405180910390f35b34801561048057600080fd5b5061049b600480360381019061049691906135bd565b610df8565b6040516104a89190613a5d565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190613622565b610eab565b005b3480156104e657600080fd5b506104ef61108d565b6040516104fc919061399d565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906134b7565b6110b3565b6040516105399190613a5d565b60405180910390f35b34801561054e57600080fd5b50610557611109565b6040516105649190613c35565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f91906134b7565b611113565b005b3480156105a257600080fd5b506105ab611203565b6040516105b89190613c35565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e391906134b7565b61120d565b6040516105f59190613c35565b60405180910390f35b34801561060a57600080fd5b50610613611256565b005b34801561062157600080fd5b5061062a6113a9565b6040516106379190613c35565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906134b7565b6113b3565b005b34801561067557600080fd5b5061067e61148c565b60405161068b919061399d565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190613622565b6114b5565b005b3480156106c957600080fd5b506106e460048036038101906106df9190613509565b611697565b005b3480156106f257600080fd5b506106fb611770565b6040516107089190613a93565b60405180910390f35b34801561071d57600080fd5b50610726611802565b6040516107339190613c35565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190613622565b61180c565b005b34801561077157600080fd5b5061078c600480360381019061078791906135bd565b6118e1565b6040516107999190613a5d565b60405180910390f35b3480156107ae57600080fd5b506107b76119ae565b6040516107c491906139b8565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef91906135bd565b6119d4565b6040516108019190613a5d565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613622565b6119f2565b005b34801561083f57600080fd5b5061085a60048036038101906108559190613532565b611b67565b6040516108679190613c35565b60405180910390f35b34801561087c57600080fd5b50610897600480360381019061089291906134b7565b611bee565b005b3480156108a557600080fd5b506108ae611cde565b6040516108bb9190613c35565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906134b7565b611ce7565b005b3480156108f957600080fd5b50610902611ea9565b60405161090f9190613c35565b60405180910390f35b34801561092457600080fd5b5061092d611eb3565b60405161093a919061399d565b60405180910390f35b60606003805461095290613f35565b80601f016020809104026020016040519081016040528092919081815260200182805461097e90613f35565b80156109cb5780601f106109a0576101008083540402835291602001916109cb565b820191906000526020600020905b8154815290600101906020018083116109ae57829003601f168201915b5050505050905090565b60006109e96109e2611f37565b8484611f3f565b6001905092915050565b6000600d54905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a2b611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90613b95565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610b8084848461210a565b610c4184610b8c611f37565b610c3c8560405180606001604052806028815260200161437e60289139600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bf2611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b611f3f565b600190509392505050565b61dead81565b610c5a611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde90613b95565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d4a611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90613b95565b60405180910390fd5b8060158190555050565b6000600560009054906101000a900460ff16905090565b6000610ea1610e05611f37565b84610e9c85600a6000610e16611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed990919063ffffffff16565b611f3f565b6001905092915050565b610eb3611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790613b95565b60405180910390fd5b601660009054906101000a900460ff1615610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8790613b35565b60405180910390fd5b6019610fbb82610fad601054600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b1115610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390613b55565b60405180910390fd5b8060118190555061102e601054611020601154600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b600d8190555061104b601154600f54611ed990919063ffffffff16565b600e819055507f11792e2e76dd20b61339ffd931c063e7b4f828123d6d257c8d0668279e69c7666011546040516110829190613c35565b60405180910390a150565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601554905090565b61111b611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90613b95565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601154905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125e611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290613b95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601254905090565b6113bb611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90613b95565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114bd611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190613b95565b60405180910390fd5b601660009054906101000a900460ff161561159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190613b35565b60405180910390fd5b60196115c56011546115b760105485611ed990919063ffffffff16565b611ed990919063ffffffff16565b1115611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613b55565b60405180910390fd5b80600f8190555061163860105461162a601154600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b600d81905550611655601154600f54611ed990919063ffffffff16565b600e819055507f9715f273db467af4f604be854ced5f63c93d0132583300aef64376e17685b52d600f5460405161168c9190613c35565b60405180910390a150565b61169f611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172390613b95565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606004805461177f90613f35565b80601f01602080910402602001604051908101604052809291908181526020018280546117ab90613f35565b80156117f85780601f106117cd576101008083540402835291602001916117f8565b820191906000526020600020905b8154815290600101906020018083116117db57829003601f168201915b5050505050905090565b6000600f54905090565b611814611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890613b95565b60405180910390fd5b6118cb6103e86118bd600560065461268990919063ffffffff16565b61270490919063ffffffff16565b8110156118d757600080fd5b8060128190555050565b60006119a46118ee611f37565b8461199f856040518060600160405280602581526020016143a660259139600a6000611918611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b611f3f565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006119e86119e1611f37565b848461210a565b6001905092915050565b6119fa611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613b95565b60405180910390fd5b6019611ab2601154611aa484600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b1115611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90613b55565b60405180910390fd5b80601081905550611b25601054611b17601154600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b600d819055507f0476fcc77110b6ac2d8f2dd346f80d2c5cda54dae5c6ddd6f82b603a4d9b9dc9601054604051611b5c9190613c35565b60405180910390a150565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bf6611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a90613b95565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006019905090565b611cef611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390613b95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de390613ad5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601054905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284611ee89190613d1a565b905083811015611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490613b15565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa690613c15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690613af5565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120fd9190613c35565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190613bd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e190613ab5565b60405180910390fd5b6000811161222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490613bb5565b60405180910390fd5b61223561148c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122a3575061227361148c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122f95750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561235e5760125461231c8261230e8561120d565b611ed990919063ffffffff16565b111561235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490613bf5565b60405180910390fd5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156123c85750601660009054906101000a900460ff16155b80156123de57506015546123db3061120d565b10155b80156123ec57506000600e54115b801561242b57506123fb61148c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561246a575061243a61148c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124785761247761274e565b5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125195750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15801561252857506000600d54115b156126155760006125576064612549600e548561268990919063ffffffff16565b61270490919063ffffffff16565b9050600061258360646125756010548661268990919063ffffffff16565b61270490919063ffffffff16565b90506125aa61259b8284611ed990919063ffffffff16565b8461280490919063ffffffff16565b92506125b785308461284e565b6125c48561dead8361284e565b8473ffffffffffffffffffffffffffffffffffffffff167fab85194d35c4ea153d0b51f3a304d1d22cb8023e499a6503fb6c28c5864ae90e8260405161260a9190613c35565b60405180910390a250505b61262083838361284e565b505050565b600083831115829061266d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126649190613a93565b60405180910390fd5b506000838561267c9190613dfb565b9050809150509392505050565b60008083141561269c57600090506126fe565b600082846126aa9190613da1565b90508284826126b99190613d70565b146126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f090613b75565b60405180910390fd5b809150505b92915050565b600061274683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612adc565b905092915050565b6001601660006101000a81548160ff021916908315150217905550600061279c600e5461278e600f546127803061120d565b61268990919063ffffffff16565b61270490919063ffffffff16565b905060006127d1600e546127c36011546127b53061120d565b61268990919063ffffffff16565b61270490919063ffffffff16565b90506127dc82612b3f565b6127e581612ba4565b50506000601660006101000a81548160ff021916908315150217905550565b600061284683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612625565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b590613bd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561292e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292590613ab5565b60405180910390fd5b61299a8160405180606001604052806026815260200161435860269139600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a2f81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed990919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612acf9190613c35565b60405180910390a3505050565b60008083118290612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a9190613a93565b60405180910390fd5b5060008385612b329190613d70565b9050809150509392505050565b6000612b5560028361270490919063ffffffff16565b90506000612b6c828461280490919063ffffffff16565b90506000479050612b7c83612d2c565b6000612b91824761280490919063ffffffff16565b9050612b9d8382612ff0565b5050505050565b612bad816130de565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c69919061399d565b60206040518083038186803b158015612c8157600080fd5b505afa158015612c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb9919061364b565b6040518363ffffffff1660e01b8152600401612cd69291906139d3565b602060405180830381600087803b158015612cf057600080fd5b505af1158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2891906135f9565b5050565b6000600267ffffffffffffffff811115612d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612d9d5781602001602082028036833780820191505090505b5090503081600081518110612ddb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612e7d57600080fd5b505afa158015612e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb591906134e0565b81600181518110612eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f5630601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3f565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612fba959493929190613c50565b600060405180830381600087803b158015612fd457600080fd5b505af1158015612fe8573d6000803e3d6000fd5b505050505050565b61301d30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3f565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806000426040518863ffffffff1660e01b8152600401613085969594939291906139fc565b6060604051808303818588803b15801561309e57600080fd5b505af11580156130b2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130d79190613674565b5050505050565b6000600367ffffffffffffffff811115613121577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561314f5781602001602082028036833780820191505090505b509050308160008151811061318d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561322f57600080fd5b505afa158015613243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326791906134e0565b816001815181106132a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110613338577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061339f30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3f565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958360008430426040518663ffffffff1660e01b8152600401613403959493929190613c50565b600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b505050505050565b600081359050613448816142fb565b92915050565b60008151905061345d816142fb565b92915050565b60008135905061347281614312565b92915050565b60008151905061348781614329565b92915050565b60008135905061349c81614340565b92915050565b6000815190506134b181614340565b92915050565b6000602082840312156134c957600080fd5b60006134d784828501613439565b91505092915050565b6000602082840312156134f257600080fd5b60006135008482850161344e565b91505092915050565b60006020828403121561351b57600080fd5b600061352984828501613463565b91505092915050565b6000806040838503121561354557600080fd5b600061355385828601613439565b925050602061356485828601613439565b9150509250929050565b60008060006060848603121561358357600080fd5b600061359186828701613439565b93505060206135a286828701613439565b92505060406135b38682870161348d565b9150509250925092565b600080604083850312156135d057600080fd5b60006135de85828601613439565b92505060206135ef8582860161348d565b9150509250929050565b60006020828403121561360b57600080fd5b600061361984828501613478565b91505092915050565b60006020828403121561363457600080fd5b60006136428482850161348d565b91505092915050565b60006020828403121561365d57600080fd5b600061366b848285016134a2565b91505092915050565b60008060006060848603121561368957600080fd5b6000613697868287016134a2565b93505060206136a8868287016134a2565b92505060406136b9868287016134a2565b9150509250925092565b60006136cf83836136f9565b60208301905092915050565b6136e481613e96565b82525050565b6136f381613e41565b82525050565b61370281613e2f565b82525050565b61371181613e2f565b82525050565b600061372282613cd5565b61372c8185613cf8565b935061373783613cc5565b8060005b8381101561376857815161374f88826136c3565b975061375a83613ceb565b92505060018101905061373b565b5085935050505092915050565b61377e81613e53565b82525050565b61378d81613ea8565b82525050565b61379c81613ecc565b82525050565b60006137ad82613ce0565b6137b78185613d09565b93506137c7818560208601613f02565b6137d081613ff4565b840191505092915050565b60006137e8602383613d09565b91506137f382614005565b604082019050919050565b600061380b602683613d09565b915061381682614054565b604082019050919050565b600061382e602283613d09565b9150613839826140a3565b604082019050919050565b6000613851601b83613d09565b915061385c826140f2565b602082019050919050565b6000613874601083613d09565b915061387f8261411b565b602082019050919050565b6000613897601283613d09565b91506138a282614144565b602082019050919050565b60006138ba602183613d09565b91506138c58261416d565b604082019050919050565b60006138dd602083613d09565b91506138e8826141bc565b602082019050919050565b6000613900602983613d09565b915061390b826141e5565b604082019050919050565b6000613923602583613d09565b915061392e82614234565b604082019050919050565b6000613946601783613d09565b915061395182614283565b602082019050919050565b6000613969602483613d09565b9150613974826142ac565b604082019050919050565b61398881613e7f565b82525050565b61399781613e89565b82525050565b60006020820190506139b26000830184613708565b92915050565b60006020820190506139cd60008301846136ea565b92915050565b60006040820190506139e860008301856136db565b6139f5602083018461397f565b9392505050565b600060c082019050613a116000830189613708565b613a1e602083018861397f565b613a2b6040830187613793565b613a386060830186613793565b613a456080830185613708565b613a5260a083018461397f565b979650505050505050565b6000602082019050613a726000830184613775565b92915050565b6000602082019050613a8d6000830184613784565b92915050565b60006020820190508181036000830152613aad81846137a2565b905092915050565b60006020820190508181036000830152613ace816137db565b9050919050565b60006020820190508181036000830152613aee816137fe565b9050919050565b60006020820190508181036000830152613b0e81613821565b9050919050565b60006020820190508181036000830152613b2e81613844565b9050919050565b60006020820190508181036000830152613b4e81613867565b9050919050565b60006020820190508181036000830152613b6e8161388a565b9050919050565b60006020820190508181036000830152613b8e816138ad565b9050919050565b60006020820190508181036000830152613bae816138d0565b9050919050565b60006020820190508181036000830152613bce816138f3565b9050919050565b60006020820190508181036000830152613bee81613916565b9050919050565b60006020820190508181036000830152613c0e81613939565b9050919050565b60006020820190508181036000830152613c2e8161395c565b9050919050565b6000602082019050613c4a600083018461397f565b92915050565b600060a082019050613c65600083018861397f565b613c726020830187613793565b8181036040830152613c848186613717565b9050613c936060830185613708565b613ca0608083018461397f565b9695505050505050565b6000602082019050613cbf600083018461398e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613d2582613e7f565b9150613d3083613e7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d6557613d64613f67565b5b828201905092915050565b6000613d7b82613e7f565b9150613d8683613e7f565b925082613d9657613d95613f96565b5b828204905092915050565b6000613dac82613e7f565b9150613db783613e7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613df057613def613f67565b5b828202905092915050565b6000613e0682613e7f565b9150613e1183613e7f565b925082821015613e2457613e23613f67565b5b828203905092915050565b6000613e3a82613e5f565b9050919050565b6000613e4c82613e5f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613ea182613ede565b9050919050565b6000613eb382613eba565b9050919050565b6000613ec582613e5f565b9050919050565b6000613ed782613e7f565b9050919050565b6000613ee982613ef0565b9050919050565b6000613efb82613e5f565b9050919050565b60005b83811015613f20578082015181840152602081019050613f05565b83811115613f2f576000848401525b50505050565b60006002820490506001821680613f4d57607f821691505b60208210811415613f6157613f60613fc5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f696e53776170416e644c69717569667900000000000000000000000000000000600082015250565b7f466565732061726520746f6f20686967682e0000000000000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782042616c616e636520697320726561636865642e000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61430481613e2f565b811461430f57600080fd5b50565b61431b81613e41565b811461432657600080fd5b50565b61433281613e53565b811461433d57600080fd5b50565b61434981613e7f565b811461435457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d0e2175fde6185851d9d4abfae96062b1c44b5a7c50861494ec2c5812d94a52464736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806370a082311161012e578063a457c2d7116100ab578063e57f14e11161006f578063e57f14e114610870578063e83e34b114610899578063f2fde38b146108c4578063fce589d8146108ed578063fd3cba9f146109185761023b565b8063a457c2d714610765578063a5ece941146107a2578063a9059cbb146107cd578063cea269581461080a578063dd62ed3e146108335761023b565b80638ee88c53116100f25780638ee88c5314610694578063906e9dd0146106bd57806395d89b41146106e657806398118cb4146107115780639d51d9b71461073c5761023b565b806370a08231146105c1578063715018a6146105fe57806373ad468a146106155780638861527c146106405780638da5cb5b146106695761023b565b80632b151cfe116101bc57806349bd5a5e1161018057806349bd5a5e146104da5780634fbee193146105055780635e8bc4bc146105425780635eb10c941461056d5780636b67c4df146105965761023b565b80632b151cfe146103f75780632b9a9ca314610420578063313ce567146104495780633950935114610474578063457c194c146104b15761023b565b806316a2f82a1161020357806316a2f82a146102fe57806318160ddd14610327578063181cec1c1461035257806323b872dd1461038f57806327c8f835146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806313114a9d146102a85780631694505e146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610943565b6040516102629190613a93565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906135bd565b6109d5565b60405161029f9190613a5d565b60405180910390f35b3480156102b457600080fd5b506102bd6109f3565b6040516102ca9190613c35565b60405180910390f35b3480156102df57600080fd5b506102e86109fd565b6040516102f59190613a78565b60405180910390f35b34801561030a57600080fd5b50610325600480360381019061032091906134b7565b610a23565b005b34801561033357600080fd5b5061033c610b13565b6040516103499190613c35565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906134b7565b610b1d565b6040516103869190613a5d565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b1919061356e565b610b73565b6040516103c39190613a5d565b60405180910390f35b3480156103d857600080fd5b506103e1610c4c565b6040516103ee919061399d565b60405180910390f35b34801561040357600080fd5b5061041e600480360381019061041991906134b7565b610c52565b005b34801561042c57600080fd5b5061044760048036038101906104429190613622565b610d42565b005b34801561045557600080fd5b5061045e610de1565b60405161046b9190613caa565b60405180910390f35b34801561048057600080fd5b5061049b600480360381019061049691906135bd565b610df8565b6040516104a89190613a5d565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190613622565b610eab565b005b3480156104e657600080fd5b506104ef61108d565b6040516104fc919061399d565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906134b7565b6110b3565b6040516105399190613a5d565b60405180910390f35b34801561054e57600080fd5b50610557611109565b6040516105649190613c35565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f91906134b7565b611113565b005b3480156105a257600080fd5b506105ab611203565b6040516105b89190613c35565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e391906134b7565b61120d565b6040516105f59190613c35565b60405180910390f35b34801561060a57600080fd5b50610613611256565b005b34801561062157600080fd5b5061062a6113a9565b6040516106379190613c35565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906134b7565b6113b3565b005b34801561067557600080fd5b5061067e61148c565b60405161068b919061399d565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190613622565b6114b5565b005b3480156106c957600080fd5b506106e460048036038101906106df9190613509565b611697565b005b3480156106f257600080fd5b506106fb611770565b6040516107089190613a93565b60405180910390f35b34801561071d57600080fd5b50610726611802565b6040516107339190613c35565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190613622565b61180c565b005b34801561077157600080fd5b5061078c600480360381019061078791906135bd565b6118e1565b6040516107999190613a5d565b60405180910390f35b3480156107ae57600080fd5b506107b76119ae565b6040516107c491906139b8565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef91906135bd565b6119d4565b6040516108019190613a5d565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613622565b6119f2565b005b34801561083f57600080fd5b5061085a60048036038101906108559190613532565b611b67565b6040516108679190613c35565b60405180910390f35b34801561087c57600080fd5b50610897600480360381019061089291906134b7565b611bee565b005b3480156108a557600080fd5b506108ae611cde565b6040516108bb9190613c35565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906134b7565b611ce7565b005b3480156108f957600080fd5b50610902611ea9565b60405161090f9190613c35565b60405180910390f35b34801561092457600080fd5b5061092d611eb3565b60405161093a919061399d565b60405180910390f35b60606003805461095290613f35565b80601f016020809104026020016040519081016040528092919081815260200182805461097e90613f35565b80156109cb5780601f106109a0576101008083540402835291602001916109cb565b820191906000526020600020905b8154815290600101906020018083116109ae57829003601f168201915b5050505050905090565b60006109e96109e2611f37565b8484611f3f565b6001905092915050565b6000600d54905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a2b611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90613b95565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610b8084848461210a565b610c4184610b8c611f37565b610c3c8560405180606001604052806028815260200161437e60289139600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bf2611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b611f3f565b600190509392505050565b61dead81565b610c5a611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde90613b95565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d4a611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90613b95565b60405180910390fd5b8060158190555050565b6000600560009054906101000a900460ff16905090565b6000610ea1610e05611f37565b84610e9c85600a6000610e16611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed990919063ffffffff16565b611f3f565b6001905092915050565b610eb3611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790613b95565b60405180910390fd5b601660009054906101000a900460ff1615610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8790613b35565b60405180910390fd5b6019610fbb82610fad601054600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b1115610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390613b55565b60405180910390fd5b8060118190555061102e601054611020601154600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b600d8190555061104b601154600f54611ed990919063ffffffff16565b600e819055507f11792e2e76dd20b61339ffd931c063e7b4f828123d6d257c8d0668279e69c7666011546040516110829190613c35565b60405180910390a150565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601554905090565b61111b611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90613b95565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601154905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61125e611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290613b95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601254905090565b6113bb611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90613b95565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114bd611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190613b95565b60405180910390fd5b601660009054906101000a900460ff161561159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190613b35565b60405180910390fd5b60196115c56011546115b760105485611ed990919063ffffffff16565b611ed990919063ffffffff16565b1115611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613b55565b60405180910390fd5b80600f8190555061163860105461162a601154600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b600d81905550611655601154600f54611ed990919063ffffffff16565b600e819055507f9715f273db467af4f604be854ced5f63c93d0132583300aef64376e17685b52d600f5460405161168c9190613c35565b60405180910390a150565b61169f611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172390613b95565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606004805461177f90613f35565b80601f01602080910402602001604051908101604052809291908181526020018280546117ab90613f35565b80156117f85780601f106117cd576101008083540402835291602001916117f8565b820191906000526020600020905b8154815290600101906020018083116117db57829003601f168201915b5050505050905090565b6000600f54905090565b611814611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890613b95565b60405180910390fd5b6118cb6103e86118bd600560065461268990919063ffffffff16565b61270490919063ffffffff16565b8110156118d757600080fd5b8060128190555050565b60006119a46118ee611f37565b8461199f856040518060600160405280602581526020016143a660259139600a6000611918611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b611f3f565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006119e86119e1611f37565b848461210a565b6001905092915050565b6119fa611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613b95565b60405180910390fd5b6019611ab2601154611aa484600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b1115611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90613b55565b60405180910390fd5b80601081905550611b25601054611b17601154600f54611ed990919063ffffffff16565b611ed990919063ffffffff16565b600d819055507f0476fcc77110b6ac2d8f2dd346f80d2c5cda54dae5c6ddd6f82b603a4d9b9dc9601054604051611b5c9190613c35565b60405180910390a150565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bf6611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a90613b95565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006019905090565b611cef611f37565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390613b95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de390613ad5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601054905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284611ee89190613d1a565b905083811015611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490613b15565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa690613c15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561201f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201690613af5565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120fd9190613c35565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190613bd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e190613ab5565b60405180910390fd5b6000811161222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490613bb5565b60405180910390fd5b61223561148c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122a3575061227361148c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122f95750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561235e5760125461231c8261230e8561120d565b611ed990919063ffffffff16565b111561235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490613bf5565b60405180910390fd5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156123c85750601660009054906101000a900460ff16155b80156123de57506015546123db3061120d565b10155b80156123ec57506000600e54115b801561242b57506123fb61148c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561246a575061243a61148c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124785761247761274e565b5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125195750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15801561252857506000600d54115b156126155760006125576064612549600e548561268990919063ffffffff16565b61270490919063ffffffff16565b9050600061258360646125756010548661268990919063ffffffff16565b61270490919063ffffffff16565b90506125aa61259b8284611ed990919063ffffffff16565b8461280490919063ffffffff16565b92506125b785308461284e565b6125c48561dead8361284e565b8473ffffffffffffffffffffffffffffffffffffffff167fab85194d35c4ea153d0b51f3a304d1d22cb8023e499a6503fb6c28c5864ae90e8260405161260a9190613c35565b60405180910390a250505b61262083838361284e565b505050565b600083831115829061266d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126649190613a93565b60405180910390fd5b506000838561267c9190613dfb565b9050809150509392505050565b60008083141561269c57600090506126fe565b600082846126aa9190613da1565b90508284826126b99190613d70565b146126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f090613b75565b60405180910390fd5b809150505b92915050565b600061274683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612adc565b905092915050565b6001601660006101000a81548160ff021916908315150217905550600061279c600e5461278e600f546127803061120d565b61268990919063ffffffff16565b61270490919063ffffffff16565b905060006127d1600e546127c36011546127b53061120d565b61268990919063ffffffff16565b61270490919063ffffffff16565b90506127dc82612b3f565b6127e581612ba4565b50506000601660006101000a81548160ff021916908315150217905550565b600061284683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612625565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b590613bd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561292e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292590613ab5565b60405180910390fd5b61299a8160405180606001604052806026815260200161435860269139600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a2f81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed990919063ffffffff16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612acf9190613c35565b60405180910390a3505050565b60008083118290612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a9190613a93565b60405180910390fd5b5060008385612b329190613d70565b9050809150509392505050565b6000612b5560028361270490919063ffffffff16565b90506000612b6c828461280490919063ffffffff16565b90506000479050612b7c83612d2c565b6000612b91824761280490919063ffffffff16565b9050612b9d8382612ff0565b5050505050565b612bad816130de565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c69919061399d565b60206040518083038186803b158015612c8157600080fd5b505afa158015612c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb9919061364b565b6040518363ffffffff1660e01b8152600401612cd69291906139d3565b602060405180830381600087803b158015612cf057600080fd5b505af1158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2891906135f9565b5050565b6000600267ffffffffffffffff811115612d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612d9d5781602001602082028036833780820191505090505b5090503081600081518110612ddb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612e7d57600080fd5b505afa158015612e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb591906134e0565b81600181518110612eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f5630601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3f565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612fba959493929190613c50565b600060405180830381600087803b158015612fd457600080fd5b505af1158015612fe8573d6000803e3d6000fd5b505050505050565b61301d30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3f565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806000426040518863ffffffff1660e01b8152600401613085969594939291906139fc565b6060604051808303818588803b15801561309e57600080fd5b505af11580156130b2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130d79190613674565b5050505050565b6000600367ffffffffffffffff811115613121577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561314f5781602001602082028036833780820191505090505b509050308160008151811061318d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561322f57600080fd5b505afa158015613243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326791906134e0565b816001815181106132a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110613338577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061339f30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3f565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958360008430426040518663ffffffff1660e01b8152600401613403959493929190613c50565b600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b505050505050565b600081359050613448816142fb565b92915050565b60008151905061345d816142fb565b92915050565b60008135905061347281614312565b92915050565b60008151905061348781614329565b92915050565b60008135905061349c81614340565b92915050565b6000815190506134b181614340565b92915050565b6000602082840312156134c957600080fd5b60006134d784828501613439565b91505092915050565b6000602082840312156134f257600080fd5b60006135008482850161344e565b91505092915050565b60006020828403121561351b57600080fd5b600061352984828501613463565b91505092915050565b6000806040838503121561354557600080fd5b600061355385828601613439565b925050602061356485828601613439565b9150509250929050565b60008060006060848603121561358357600080fd5b600061359186828701613439565b93505060206135a286828701613439565b92505060406135b38682870161348d565b9150509250925092565b600080604083850312156135d057600080fd5b60006135de85828601613439565b92505060206135ef8582860161348d565b9150509250929050565b60006020828403121561360b57600080fd5b600061361984828501613478565b91505092915050565b60006020828403121561363457600080fd5b60006136428482850161348d565b91505092915050565b60006020828403121561365d57600080fd5b600061366b848285016134a2565b91505092915050565b60008060006060848603121561368957600080fd5b6000613697868287016134a2565b93505060206136a8868287016134a2565b92505060406136b9868287016134a2565b9150509250925092565b60006136cf83836136f9565b60208301905092915050565b6136e481613e96565b82525050565b6136f381613e41565b82525050565b61370281613e2f565b82525050565b61371181613e2f565b82525050565b600061372282613cd5565b61372c8185613cf8565b935061373783613cc5565b8060005b8381101561376857815161374f88826136c3565b975061375a83613ceb565b92505060018101905061373b565b5085935050505092915050565b61377e81613e53565b82525050565b61378d81613ea8565b82525050565b61379c81613ecc565b82525050565b60006137ad82613ce0565b6137b78185613d09565b93506137c7818560208601613f02565b6137d081613ff4565b840191505092915050565b60006137e8602383613d09565b91506137f382614005565b604082019050919050565b600061380b602683613d09565b915061381682614054565b604082019050919050565b600061382e602283613d09565b9150613839826140a3565b604082019050919050565b6000613851601b83613d09565b915061385c826140f2565b602082019050919050565b6000613874601083613d09565b915061387f8261411b565b602082019050919050565b6000613897601283613d09565b91506138a282614144565b602082019050919050565b60006138ba602183613d09565b91506138c58261416d565b604082019050919050565b60006138dd602083613d09565b91506138e8826141bc565b602082019050919050565b6000613900602983613d09565b915061390b826141e5565b604082019050919050565b6000613923602583613d09565b915061392e82614234565b604082019050919050565b6000613946601783613d09565b915061395182614283565b602082019050919050565b6000613969602483613d09565b9150613974826142ac565b604082019050919050565b61398881613e7f565b82525050565b61399781613e89565b82525050565b60006020820190506139b26000830184613708565b92915050565b60006020820190506139cd60008301846136ea565b92915050565b60006040820190506139e860008301856136db565b6139f5602083018461397f565b9392505050565b600060c082019050613a116000830189613708565b613a1e602083018861397f565b613a2b6040830187613793565b613a386060830186613793565b613a456080830185613708565b613a5260a083018461397f565b979650505050505050565b6000602082019050613a726000830184613775565b92915050565b6000602082019050613a8d6000830184613784565b92915050565b60006020820190508181036000830152613aad81846137a2565b905092915050565b60006020820190508181036000830152613ace816137db565b9050919050565b60006020820190508181036000830152613aee816137fe565b9050919050565b60006020820190508181036000830152613b0e81613821565b9050919050565b60006020820190508181036000830152613b2e81613844565b9050919050565b60006020820190508181036000830152613b4e81613867565b9050919050565b60006020820190508181036000830152613b6e8161388a565b9050919050565b60006020820190508181036000830152613b8e816138ad565b9050919050565b60006020820190508181036000830152613bae816138d0565b9050919050565b60006020820190508181036000830152613bce816138f3565b9050919050565b60006020820190508181036000830152613bee81613916565b9050919050565b60006020820190508181036000830152613c0e81613939565b9050919050565b60006020820190508181036000830152613c2e8161395c565b9050919050565b6000602082019050613c4a600083018461397f565b92915050565b600060a082019050613c65600083018861397f565b613c726020830187613793565b8181036040830152613c848186613717565b9050613c936060830185613708565b613ca0608083018461397f565b9695505050505050565b6000602082019050613cbf600083018461398e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613d2582613e7f565b9150613d3083613e7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d6557613d64613f67565b5b828201905092915050565b6000613d7b82613e7f565b9150613d8683613e7f565b925082613d9657613d95613f96565b5b828204905092915050565b6000613dac82613e7f565b9150613db783613e7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613df057613def613f67565b5b828202905092915050565b6000613e0682613e7f565b9150613e1183613e7f565b925082821015613e2457613e23613f67565b5b828203905092915050565b6000613e3a82613e5f565b9050919050565b6000613e4c82613e5f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613ea182613ede565b9050919050565b6000613eb382613eba565b9050919050565b6000613ec582613e5f565b9050919050565b6000613ed782613e7f565b9050919050565b6000613ee982613ef0565b9050919050565b6000613efb82613e5f565b9050919050565b60005b83811015613f20578082015181840152602081019050613f05565b83811115613f2f576000848401525b50505050565b60006002820490506001821680613f4d57607f821691505b60208210811415613f6157613f60613fc5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f696e53776170416e644c69717569667900000000000000000000000000000000600082015250565b7f466565732061726520746f6f20686967682e0000000000000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782042616c616e636520697320726561636865642e000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61430481613e2f565b811461430f57600080fd5b50565b61431b81613e41565b811461432657600080fd5b50565b61433281613e53565b811461433d57600080fd5b50565b61434981613e7f565b811461435457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d0e2175fde6185851d9d4abfae96062b1c44b5a7c50861494ec2c5812d94a52464736f6c63430008040033

Deployed Bytecode Sourcemap

14530:13557:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17216:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18054:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22227:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15842:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21689:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17493:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21809:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18223:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15223:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21958:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20853:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17402:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18544:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20030:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15890:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21427:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22709:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22095:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22423:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17601:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6153:148;;;;;;;;;;;;;:::i;:::-;;22818:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21005:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5928:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19544:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19392:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17307:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22322:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21184:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18770:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15030:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17728:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20519:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17903:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21564:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22618:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6309:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22527:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15130:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17216:83;17253:13;17286:5;17279:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17216:83;:::o;18054:161::-;18129:4;18146:39;18155:12;:10;:12::i;:::-;18169:7;18178:6;18146:8;:39::i;:::-;18203:4;18196:11;;18054:161;;;;:::o;22227:87::-;22269:7;22296:10;;22289:17;;22227:87;:::o;15842:41::-;;;;;;;;;;;;;:::o;21689:112::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21788:5:::1;21757:19;:28;21777:7;21757:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21689:112:::0;:::o;17493:100::-;17546:7;17573:12;;17566:19;;17493:100;:::o;21809:137::-;21880:4;21904:25;:34;21930:7;21904:34;;;;;;;;;;;;;;;;;;;;;;;;;21897:41;;21809:137;;;:::o;18223:313::-;18321:4;18338:36;18348:6;18356:9;18367:6;18338:9;:36::i;:::-;18385:121;18394:6;18402:12;:10;:12::i;:::-;18416:89;18454:6;18416:89;;;;;;;;;;;;;;;;;:11;:19;18428:6;18416:19;;;;;;;;;;;;;;;:33;18436:12;:10;:12::i;:::-;18416:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;18385:8;:121::i;:::-;18524:4;18517:11;;18223:313;;;;;:::o;15223:80::-;15261:42;15223:80;:::o;21958:125::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22071:4:::1;22034:25;:34;22060:7;22034:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;21958:125:::0;:::o;20853:141::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20966:20:::1;20945:18;:41;;;;20853:141:::0;:::o;17402:83::-;17443:5;17468:9;;;;;;;;;;;17461:16;;17402:83;:::o;18544:218::-;18632:4;18649:83;18658:12;:10;:12::i;:::-;18672:7;18681:50;18720:10;18681:11;:25;18693:12;:10;:12::i;:::-;18681:25;;;;;;;;;;;;;;;:34;18707:7;18681:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18649:8;:83::i;:::-;18750:4;18743:11;;18544:218;;;;:::o;20030:481::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20128:16:::1;;;;;;;;;;;20127:17;20119:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15609:2;20184:48;20216:15;20184:27;20202:8;;20184:13;;:17;;:27;;;;:::i;:::-;:31;;:48;;;;:::i;:::-;:60;;20176:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;20297:15;20278:16;:34;;;;20336:49;20376:8;;20336:35;20354:16;;20336:13;;:17;;:35;;;;:::i;:::-;:39;;:49;;;;:::i;:::-;20323:10;:62;;;;20419:35;20437:16;;20419:13;;:17;;:35;;;;:::i;:::-;20396:20;:58;;;;20470:33;20486:16;;20470:33;;;;;;:::i;:::-;;;;;;;;20030:481:::0;:::o;15890:28::-;;;;;;;;;;;;;:::o;21427:125::-;21492:4;21516:19;:28;21536:7;21516:28;;;;;;;;;;;;;;;;;;;;;;;;;21509:35;;21427:125;;;:::o;22709:101::-;22758:7;22784:18;;22777:25;;22709:101;:::o;22095:124::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:5:::1;22169:25;:34;22195:7;22169:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;22095:124:::0;:::o;22423:96::-;22468:7;22495:16;;22488:23;;22423:96;:::o;17601:119::-;17667:7;17694:9;:18;17704:7;17694:18;;;;;;;;;;;;;;;;17687:25;;17601:119;;;:::o;6153:148::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:1:::1;6223:40;;6244:6;::::0;::::1;;;;;;;;6223:40;;;;;;;;;;;;6291:1;6274:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6153:148::o:0;22818:89::-;22861:7;22888:11;;22881:18;;22818:89;:::o;21005:171::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21141:27:::1;21112:26;;:56;;;;;;;;;;;;;;;;;;21005:171:::0;:::o;5928:79::-;5966:7;5993:6;;;;;;;;;;;5986:13;;5928:79;:::o;19544:478::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19642:16:::1;;;;;;;;;;;19641:17;19633:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15609:2;19698:51;19732:16;;19698:29;19718:8;;19698:15;:19;;:29;;;;:::i;:::-;:33;;:51;;;;:::i;:::-;:63;;19690:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;19811:15;19795:13;:31;;;;19850:49;19890:8;;19850:35;19868:16;;19850:13;;:17;;:35;;;;:::i;:::-;:39;;:49;;;;:::i;:::-;19837:10;:62;;;;19933:35;19951:16;;19933:13;;:17;;:35;;;;:::i;:::-;19910:20;:58;;;;19984:30;20000:13;;19984:30;;;;;;:::i;:::-;;;;;;;;19544:478:::0;:::o;19392:144::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19509:19:::1;19490:16;;:38;;;;;;;;;;;;;;;;;;19392:144:::0;:::o;17307:87::-;17346:13;17379:7;17372:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17307:87;:::o;22322:93::-;22367:7;22394:13;;22387:20;;22322:93;:::o;21184:235::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21343:29:::1;21367:4;21343:19;21360:1;21343:12;;:16;;:19;;;;:::i;:::-;:23;;:29;;;;:::i;:::-;21326:13;:46;;21318:55;;;::::0;::::1;;21398:13;21384:11;:27;;;;21184:235:::0;:::o;18770:269::-;18863:4;18880:129;18889:12;:10;:12::i;:::-;18903:7;18912:96;18951:15;18912:96;;;;;;;;;;;;;;;;;:11;:25;18924:12;:10;:12::i;:::-;18912:25;;;;;;;;;;;;;;;:34;18938:7;18912:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18880:8;:129::i;:::-;19027:4;19020:11;;18770:269;;;;:::o;15030:93::-;;;;;;;;;;;;;:::o;17728:167::-;17806:4;17823:42;17833:12;:10;:12::i;:::-;17847:9;17858:6;17823:9;:42::i;:::-;17883:4;17876:11;;17728:167;;;;:::o;20519:322::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15609:2:::1;20606:51;20640:16;;20606:29;20624:10;20606:13;;:17;;:29;;;;:::i;:::-;:33;;:51;;;;:::i;:::-;:63;;20598:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;20714:10;20703:8;:21;;;;20748:49;20788:8;;20748:35;20766:16;;20748:13;;:17;;:35;;;;:::i;:::-;:39;;:49;;;;:::i;:::-;20735:10;:62;;;;20813:20;20824:8;;20813:20;;;;;;:::i;:::-;;;;;;;;20519:322:::0;:::o;17903:143::-;17984:7;18011:11;:18;18023:5;18011:18;;;;;;;;;;;;;;;:27;18030:7;18011:27;;;;;;;;;;;;;;;;18004:34;;17903:143;;;;:::o;21564:113::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21665:4:::1;21634:19;:28;21654:7;21634:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;21564:113:::0;:::o;22618:83::-;22658:7;15609:2;22678:15;;22618:83;:::o;6309:244::-;6072:12;:10;:12::i;:::-;6062:22;;:6;;;;;;;;;;:22;;;6054:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6418:1:::1;6398:22;;:8;:22;;;;6390:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6508:8;6479:38;;6500:6;::::0;::::1;;;;;;;;6479:38;;;;;;;;;;;;6537:8;6528:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6309:244:::0;:::o;22527:83::-;22567:7;22594:8;;22587:15;;22527:83;:::o;15130:86::-;;;;;;;;;;;;;:::o;1294:181::-;1352:7;1372:9;1388:1;1384;:5;;;;:::i;:::-;1372:17;;1413:1;1408;:6;;1400:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1466:1;1459:8;;;1294:181;;;;:::o;216:115::-;269:15;312:10;297:26;;216:115;:::o;19047:337::-;19157:1;19140:19;;:5;:19;;;;19132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19238:1;19219:21;;:7;:21;;;;19211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19322:6;19292:11;:18;19304:5;19292:18;;;;;;;;;;;;;;;:27;19311:7;19292:27;;;;;;;;;;;;;;;:36;;;;19360:7;19344:32;;19353:5;19344:32;;;19369:6;19344:32;;;;;;:::i;:::-;;;;;;;;19047:337;;;:::o;22917:2021::-;23055:1;23039:18;;:4;:18;;;;23031:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23132:1;23118:16;;:2;:16;;;;23110:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23202:1;23193:6;:10;23185:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23351:7;:5;:7::i;:::-;23343:15;;:4;:15;;;;:76;;;;;23412:7;:5;:7::i;:::-;23406:13;;:2;:13;;;;23343:76;:154;;;;;23468:25;:29;23494:2;23468:29;;;;;;;;;;;;;;;;;;;;;;;;;23467:30;23343:154;23326:364;;;23608:11;;23579:25;23597:6;23579:13;23589:2;23579:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:40;;23553:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;23326:364;23756:13;;;;;;;;;;;23750:19;;:2;:19;;;:90;;;;;23824:16;;;;;;;;;;;23823:17;23750:90;:206;;;;;23938:18;;23910:24;23928:4;23910:9;:24::i;:::-;:46;;23750:206;:281;;;;;24030:1;24007:20;;:24;23750:281;:372;;;;;24115:7;:5;:7::i;:::-;24107:15;;:4;:15;;;;23750:372;:453;;;;;24196:7;:5;:7::i;:::-;24190:13;;:2;:13;;;;23750:453;23733:576;;;24284:13;:11;:13::i;:::-;23733:576;24363:19;:25;24383:4;24363:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24392:19;:23;24412:2;24392:23;;;;;;;;;;;;;;;;;;;;;;;;;24363:52;24361:55;:86;;;;;24446:1;24433:10;;:14;24361:86;24344:543;;;24485:22;24510:41;24547:3;24510:32;24521:20;;24510:6;:10;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;24485:66;;24566:20;24589:29;24614:3;24589:20;24600:8;;24589:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;24566:52;;24653:44;24664:32;24683:12;24664:14;:18;;:32;;;;:::i;:::-;24653:6;:10;;:44;;;;:::i;:::-;24644:53;;24715:50;24729:4;24743;24750:14;24715:13;:50::i;:::-;24780:46;24794:4;15261:42;24813:12;24780:13;:46::i;:::-;24856:4;24846:29;;;24862:12;24846:29;;;;;;:::i;:::-;;;;;;;;24344:543;;;24899:31;24913:4;24919:2;24923:6;24899:13;:31::i;:::-;22917:2021;;;:::o;1627:192::-;1713:7;1746:1;1741;:6;;1749:12;1733:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1773:9;1789:1;1785;:5;;;;:::i;:::-;1773:17;;1810:1;1803:8;;;1627:192;;;;;:::o;1827:250::-;1885:7;1914:1;1909;:6;1905:47;;;1939:1;1932:8;;;;1905:47;1964:9;1980:1;1976;:5;;;;:::i;:::-;1964:17;;2009:1;2004;2000;:5;;;;:::i;:::-;:10;1992:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2068:1;2061:8;;;1827:250;;;;;:::o;2087:132::-;2145:7;2172:39;2176:1;2179;2172:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2165:46;;2087:132;;;;:::o;24950:485::-;16053:4;16034:16;;:23;;;;;;;;;;;;;;;;;;25014:29:::1;25046:69;25094:20;;25046:43;25075:13;;25046:24;25064:4;25046:9;:24::i;:::-;:28;;:43;;;;:::i;:::-;:47;;:69;;;;:::i;:::-;25014:101;;25126:29;25158:72;25209:20;;25158:46;25187:16;;25158:24;25176:4;25158:9;:24::i;:::-;:28;;:46;;;;:::i;:::-;:50;;:72;;;;:::i;:::-;25126:104;;25293:37;25308:21;25293:14;:37::i;:::-;25387:39;25404:21;25387:16;:39::i;:::-;16068:1;;16099:5:::0;16080:16;;:24;;;;;;;;;;;;;;;;;;24950:485::o;1483:136::-;1541:7;1568:43;1572:1;1575;1568:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1561:50;;1483:136;;;;:::o;27610:474::-;27729:1;27711:20;;:6;:20;;;;27703:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27813:1;27792:23;;:9;:23;;;;27784:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27888;27910:6;27888:71;;;;;;;;;;;;;;;;;:9;:17;27898:6;27888:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;27868:9;:17;27878:6;27868:17;;;;;;;;;;;;;;;:91;;;;27993:32;28018:6;27993:9;:20;28003:9;27993:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;27970:9;:20;27980:9;27970:20;;;;;;;;;;;;;;;:55;;;;28058:9;28041:35;;28050:6;28041:35;;;28069:6;28041:35;;;;;;:::i;:::-;;;;;;;;27610:474;;;:::o;2227:278::-;2313:7;2345:1;2341;:5;2348:12;2333:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2372:9;2388:1;2384;:5;;;;:::i;:::-;2372:17;;2496:1;2489:8;;;2227:278;;;;;:::o;25443:449::-;25511:12;25526:13;25537:1;25526:6;:10;;:13;;;;:::i;:::-;25511:28;;25550:17;25570:16;25581:4;25570:6;:10;;:16;;;;:::i;:::-;25550:36;;25631:22;25656:21;25631:46;;25690:22;25707:4;25690:16;:22::i;:::-;25774:18;25795:41;25821:14;25795:21;:25;;:41;;;;:::i;:::-;25774:62;;25849:35;25862:9;25873:10;25849:12;:35::i;:::-;25443:449;;;;;:::o;25900:293::-;25964:35;25992:6;25964:27;:35::i;:::-;26070:26;;;;;;;;;;;26063:43;;;26107:16;;;;;;;;;;;26132:26;;;;;;;;;;;26125:44;;;26178:4;26125:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26063:122;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25900:293;:::o;26201:478::-;26269:21;26307:1;26293:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26269:40;;26338:4;26320;26325:1;26320:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26364:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26354:4;26359:1;26354:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26399:62;26416:4;26431:15;;;;;;;;;;;26449:11;26399:8;:62::i;:::-;26474:15;;;;;;;;;;;:66;;;26555:11;26581:1;26598:4;26625;26645:15;26474:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26201:478;;:::o;27233:369::-;27316:62;27333:4;27348:15;;;;;;;;;;;27366:11;27316:8;:62::i;:::-;27391:15;;;;;;;;;;;:31;;;27430:9;27463:4;27483:11;27509:1;27526;27551;27568:15;27391:203;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27233:369;;:::o;26687:538::-;26766:21;26804:1;26790:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26766:40;;26835:4;26817;26822:1;26817:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26861:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26851:4;26856:1;26851:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26904:26;;;;;;;;;;;26894:4;26899:1;26894:7;;;;;;;;;;;;;;;;;;;;;:36;;;;;;;;;;;26943:62;26960:4;26975:15;;;;;;;;;;;26993:11;26943:8;:62::i;:::-;27018:15;;;;;;;;;;;:69;;;27102:11;27128:1;27144:4;27171;27191:15;27018:199;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26687:538;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;361:95;;;;:::o;462:137::-;516:5;547:6;541:13;532:22;;563:30;587:5;563:30;:::i;:::-;522:77;;;;:::o;605:139::-;651:5;689:6;676:20;667:29;;705:33;732:5;705:33;:::i;:::-;657:87;;;;:::o;750:143::-;807:5;838:6;832:13;823:22;;854:33;881:5;854:33;:::i;:::-;813:80;;;;:::o;899:262::-;958:6;1007:2;995:9;986:7;982:23;978:32;975:2;;;1023:1;1020;1013:12;975:2;1066:1;1091:53;1136:7;1127:6;1116:9;1112:22;1091:53;:::i;:::-;1081:63;;1037:117;965:196;;;;:::o;1167:284::-;1237:6;1286:2;1274:9;1265:7;1261:23;1257:32;1254:2;;;1302:1;1299;1292:12;1254:2;1345:1;1370:64;1426:7;1417:6;1406:9;1402:22;1370:64;:::i;:::-;1360:74;;1316:128;1244:207;;;;:::o;1457:278::-;1524:6;1573:2;1561:9;1552:7;1548:23;1544:32;1541:2;;;1589:1;1586;1579:12;1541:2;1632:1;1657:61;1710:7;1701:6;1690:9;1686:22;1657:61;:::i;:::-;1647:71;;1603:125;1531:204;;;;:::o;1741:407::-;1809:6;1817;1866:2;1854:9;1845:7;1841:23;1837:32;1834:2;;;1882:1;1879;1872:12;1834:2;1925:1;1950:53;1995:7;1986:6;1975:9;1971:22;1950:53;:::i;:::-;1940:63;;1896:117;2052:2;2078:53;2123:7;2114:6;2103:9;2099:22;2078:53;:::i;:::-;2068:63;;2023:118;1824:324;;;;;:::o;2154:552::-;2231:6;2239;2247;2296:2;2284:9;2275:7;2271:23;2267:32;2264:2;;;2312:1;2309;2302:12;2264:2;2355:1;2380:53;2425:7;2416:6;2405:9;2401:22;2380:53;:::i;:::-;2370:63;;2326:117;2482:2;2508:53;2553:7;2544:6;2533:9;2529:22;2508:53;:::i;:::-;2498:63;;2453:118;2610:2;2636:53;2681:7;2672:6;2661:9;2657:22;2636:53;:::i;:::-;2626:63;;2581:118;2254:452;;;;;:::o;2712:407::-;2780:6;2788;2837:2;2825:9;2816:7;2812:23;2808:32;2805:2;;;2853:1;2850;2843:12;2805:2;2896:1;2921:53;2966:7;2957:6;2946:9;2942:22;2921:53;:::i;:::-;2911:63;;2867:117;3023:2;3049:53;3094:7;3085:6;3074:9;3070:22;3049:53;:::i;:::-;3039:63;;2994:118;2795:324;;;;;:::o;3125:278::-;3192:6;3241:2;3229:9;3220:7;3216:23;3212:32;3209:2;;;3257:1;3254;3247:12;3209:2;3300:1;3325:61;3378:7;3369:6;3358:9;3354:22;3325:61;:::i;:::-;3315:71;;3271:125;3199:204;;;;:::o;3409:262::-;3468:6;3517:2;3505:9;3496:7;3492:23;3488:32;3485:2;;;3533:1;3530;3523:12;3485:2;3576:1;3601:53;3646:7;3637:6;3626:9;3622:22;3601:53;:::i;:::-;3591:63;;3547:117;3475:196;;;;:::o;3677:284::-;3747:6;3796:2;3784:9;3775:7;3771:23;3767:32;3764:2;;;3812:1;3809;3802:12;3764:2;3855:1;3880:64;3936:7;3927:6;3916:9;3912:22;3880:64;:::i;:::-;3870:74;;3826:128;3754:207;;;;:::o;3967:596::-;4055:6;4063;4071;4120:2;4108:9;4099:7;4095:23;4091:32;4088:2;;;4136:1;4133;4126:12;4088:2;4179:1;4204:64;4260:7;4251:6;4240:9;4236:22;4204:64;:::i;:::-;4194:74;;4150:128;4317:2;4343:64;4399:7;4390:6;4379:9;4375:22;4343:64;:::i;:::-;4333:74;;4288:129;4456:2;4482:64;4538:7;4529:6;4518:9;4514:22;4482:64;:::i;:::-;4472:74;;4427:129;4078:485;;;;;:::o;4569:179::-;4638:10;4659:46;4701:3;4693:6;4659:46;:::i;:::-;4737:4;4732:3;4728:14;4714:28;;4649:99;;;;:::o;4754:147::-;4849:45;4888:5;4849:45;:::i;:::-;4844:3;4837:58;4827:74;;:::o;4907:142::-;5010:32;5036:5;5010:32;:::i;:::-;5005:3;4998:45;4988:61;;:::o;5055:108::-;5132:24;5150:5;5132:24;:::i;:::-;5127:3;5120:37;5110:53;;:::o;5169:118::-;5256:24;5274:5;5256:24;:::i;:::-;5251:3;5244:37;5234:53;;:::o;5323:732::-;5442:3;5471:54;5519:5;5471:54;:::i;:::-;5541:86;5620:6;5615:3;5541:86;:::i;:::-;5534:93;;5651:56;5701:5;5651:56;:::i;:::-;5730:7;5761:1;5746:284;5771:6;5768:1;5765:13;5746:284;;;5847:6;5841:13;5874:63;5933:3;5918:13;5874:63;:::i;:::-;5867:70;;5960:60;6013:6;5960:60;:::i;:::-;5950:70;;5806:224;5793:1;5790;5786:9;5781:14;;5746:284;;;5750:14;6046:3;6039:10;;5447:608;;;;;;;:::o;6061:109::-;6142:21;6157:5;6142:21;:::i;:::-;6137:3;6130:34;6120:50;;:::o;6176:185::-;6290:64;6348:5;6290:64;:::i;:::-;6285:3;6278:77;6268:93;;:::o;6367:147::-;6462:45;6501:5;6462:45;:::i;:::-;6457:3;6450:58;6440:74;;:::o;6520:364::-;6608:3;6636:39;6669:5;6636:39;:::i;:::-;6691:71;6755:6;6750:3;6691:71;:::i;:::-;6684:78;;6771:52;6816:6;6811:3;6804:4;6797:5;6793:16;6771:52;:::i;:::-;6848:29;6870:6;6848:29;:::i;:::-;6843:3;6839:39;6832:46;;6612:272;;;;;:::o;6890:366::-;7032:3;7053:67;7117:2;7112:3;7053:67;:::i;:::-;7046:74;;7129:93;7218:3;7129:93;:::i;:::-;7247:2;7242:3;7238:12;7231:19;;7036:220;;;:::o;7262:366::-;7404:3;7425:67;7489:2;7484:3;7425:67;:::i;:::-;7418:74;;7501:93;7590:3;7501:93;:::i;:::-;7619:2;7614:3;7610:12;7603:19;;7408:220;;;:::o;7634:366::-;7776:3;7797:67;7861:2;7856:3;7797:67;:::i;:::-;7790:74;;7873:93;7962:3;7873:93;:::i;:::-;7991:2;7986:3;7982:12;7975:19;;7780:220;;;:::o;8006:366::-;8148:3;8169:67;8233:2;8228:3;8169:67;:::i;:::-;8162:74;;8245:93;8334:3;8245:93;:::i;:::-;8363:2;8358:3;8354:12;8347:19;;8152:220;;;:::o;8378:366::-;8520:3;8541:67;8605:2;8600:3;8541:67;:::i;:::-;8534:74;;8617:93;8706:3;8617:93;:::i;:::-;8735:2;8730:3;8726:12;8719:19;;8524:220;;;:::o;8750:366::-;8892:3;8913:67;8977:2;8972:3;8913:67;:::i;:::-;8906:74;;8989:93;9078:3;8989:93;:::i;:::-;9107:2;9102:3;9098:12;9091:19;;8896:220;;;:::o;9122:366::-;9264:3;9285:67;9349:2;9344:3;9285:67;:::i;:::-;9278:74;;9361:93;9450:3;9361:93;:::i;:::-;9479:2;9474:3;9470:12;9463:19;;9268:220;;;:::o;9494:366::-;9636:3;9657:67;9721:2;9716:3;9657:67;:::i;:::-;9650:74;;9733:93;9822:3;9733:93;:::i;:::-;9851:2;9846:3;9842:12;9835:19;;9640:220;;;:::o;9866:366::-;10008:3;10029:67;10093:2;10088:3;10029:67;:::i;:::-;10022:74;;10105:93;10194:3;10105:93;:::i;:::-;10223:2;10218:3;10214:12;10207:19;;10012:220;;;:::o;10238:366::-;10380:3;10401:67;10465:2;10460:3;10401:67;:::i;:::-;10394:74;;10477:93;10566:3;10477:93;:::i;:::-;10595:2;10590:3;10586:12;10579:19;;10384:220;;;:::o;10610:366::-;10752:3;10773:67;10837:2;10832:3;10773:67;:::i;:::-;10766:74;;10849:93;10938:3;10849:93;:::i;:::-;10967:2;10962:3;10958:12;10951:19;;10756:220;;;:::o;10982:366::-;11124:3;11145:67;11209:2;11204:3;11145:67;:::i;:::-;11138:74;;11221:93;11310:3;11221:93;:::i;:::-;11339:2;11334:3;11330:12;11323:19;;11128:220;;;:::o;11354:118::-;11441:24;11459:5;11441:24;:::i;:::-;11436:3;11429:37;11419:53;;:::o;11478:112::-;11561:22;11577:5;11561:22;:::i;:::-;11556:3;11549:35;11539:51;;:::o;11596:222::-;11689:4;11727:2;11716:9;11712:18;11704:26;;11740:71;11808:1;11797:9;11793:17;11784:6;11740:71;:::i;:::-;11694:124;;;;:::o;11824:254::-;11933:4;11971:2;11960:9;11956:18;11948:26;;11984:87;12068:1;12057:9;12053:17;12044:6;11984:87;:::i;:::-;11938:140;;;;:::o;12084:348::-;12213:4;12251:2;12240:9;12236:18;12228:26;;12264:79;12340:1;12329:9;12325:17;12316:6;12264:79;:::i;:::-;12353:72;12421:2;12410:9;12406:18;12397:6;12353:72;:::i;:::-;12218:214;;;;;:::o;12438:807::-;12687:4;12725:3;12714:9;12710:19;12702:27;;12739:71;12807:1;12796:9;12792:17;12783:6;12739:71;:::i;:::-;12820:72;12888:2;12877:9;12873:18;12864:6;12820:72;:::i;:::-;12902:80;12978:2;12967:9;12963:18;12954:6;12902:80;:::i;:::-;12992;13068:2;13057:9;13053:18;13044:6;12992:80;:::i;:::-;13082:73;13150:3;13139:9;13135:19;13126:6;13082:73;:::i;:::-;13165;13233:3;13222:9;13218:19;13209:6;13165:73;:::i;:::-;12692:553;;;;;;;;;:::o;13251:210::-;13338:4;13376:2;13365:9;13361:18;13353:26;;13389:65;13451:1;13440:9;13436:17;13427:6;13389:65;:::i;:::-;13343:118;;;;:::o;13467:276::-;13587:4;13625:2;13614:9;13610:18;13602:26;;13638:98;13733:1;13722:9;13718:17;13709:6;13638:98;:::i;:::-;13592:151;;;;:::o;13749:313::-;13862:4;13900:2;13889:9;13885:18;13877:26;;13949:9;13943:4;13939:20;13935:1;13924:9;13920:17;13913:47;13977:78;14050:4;14041:6;13977:78;:::i;:::-;13969:86;;13867:195;;;;:::o;14068:419::-;14234:4;14272:2;14261:9;14257:18;14249:26;;14321:9;14315:4;14311:20;14307:1;14296:9;14292:17;14285:47;14349:131;14475:4;14349:131;:::i;:::-;14341:139;;14239:248;;;:::o;14493:419::-;14659:4;14697:2;14686:9;14682:18;14674:26;;14746:9;14740:4;14736:20;14732:1;14721:9;14717:17;14710:47;14774:131;14900:4;14774:131;:::i;:::-;14766:139;;14664:248;;;:::o;14918:419::-;15084:4;15122:2;15111:9;15107:18;15099:26;;15171:9;15165:4;15161:20;15157:1;15146:9;15142:17;15135:47;15199:131;15325:4;15199:131;:::i;:::-;15191:139;;15089:248;;;:::o;15343:419::-;15509:4;15547:2;15536:9;15532:18;15524:26;;15596:9;15590:4;15586:20;15582:1;15571:9;15567:17;15560:47;15624:131;15750:4;15624:131;:::i;:::-;15616:139;;15514:248;;;:::o;15768:419::-;15934:4;15972:2;15961:9;15957:18;15949:26;;16021:9;16015:4;16011:20;16007:1;15996:9;15992:17;15985:47;16049:131;16175:4;16049:131;:::i;:::-;16041:139;;15939:248;;;:::o;16193:419::-;16359:4;16397:2;16386:9;16382:18;16374:26;;16446:9;16440:4;16436:20;16432:1;16421:9;16417:17;16410:47;16474:131;16600:4;16474:131;:::i;:::-;16466:139;;16364:248;;;:::o;16618:419::-;16784:4;16822:2;16811:9;16807:18;16799:26;;16871:9;16865:4;16861:20;16857:1;16846:9;16842:17;16835:47;16899:131;17025:4;16899:131;:::i;:::-;16891:139;;16789:248;;;:::o;17043:419::-;17209:4;17247:2;17236:9;17232:18;17224:26;;17296:9;17290:4;17286:20;17282:1;17271:9;17267:17;17260:47;17324:131;17450:4;17324:131;:::i;:::-;17316:139;;17214:248;;;:::o;17468:419::-;17634:4;17672:2;17661:9;17657:18;17649:26;;17721:9;17715:4;17711:20;17707:1;17696:9;17692:17;17685:47;17749:131;17875:4;17749:131;:::i;:::-;17741:139;;17639:248;;;:::o;17893:419::-;18059:4;18097:2;18086:9;18082:18;18074:26;;18146:9;18140:4;18136:20;18132:1;18121:9;18117:17;18110:47;18174:131;18300:4;18174:131;:::i;:::-;18166:139;;18064:248;;;:::o;18318:419::-;18484:4;18522:2;18511:9;18507:18;18499:26;;18571:9;18565:4;18561:20;18557:1;18546:9;18542:17;18535:47;18599:131;18725:4;18599:131;:::i;:::-;18591:139;;18489:248;;;:::o;18743:419::-;18909:4;18947:2;18936:9;18932:18;18924:26;;18996:9;18990:4;18986:20;18982:1;18971:9;18967:17;18960:47;19024:131;19150:4;19024:131;:::i;:::-;19016:139;;18914:248;;;:::o;19168:222::-;19261:4;19299:2;19288:9;19284:18;19276:26;;19312:71;19380:1;19369:9;19365:17;19356:6;19312:71;:::i;:::-;19266:124;;;;:::o;19396:831::-;19659:4;19697:3;19686:9;19682:19;19674:27;;19711:71;19779:1;19768:9;19764:17;19755:6;19711:71;:::i;:::-;19792:80;19868:2;19857:9;19853:18;19844:6;19792:80;:::i;:::-;19919:9;19913:4;19909:20;19904:2;19893:9;19889:18;19882:48;19947:108;20050:4;20041:6;19947:108;:::i;:::-;19939:116;;20065:72;20133:2;20122:9;20118:18;20109:6;20065:72;:::i;:::-;20147:73;20215:3;20204:9;20200:19;20191:6;20147:73;:::i;:::-;19664:563;;;;;;;;:::o;20233:214::-;20322:4;20360:2;20349:9;20345:18;20337:26;;20373:67;20437:1;20426:9;20422:17;20413:6;20373:67;:::i;:::-;20327:120;;;;:::o;20453:132::-;20520:4;20543:3;20535:11;;20573:4;20568:3;20564:14;20556:22;;20525:60;;;:::o;20591:114::-;20658:6;20692:5;20686:12;20676:22;;20665:40;;;:::o;20711:99::-;20763:6;20797:5;20791:12;20781:22;;20770:40;;;:::o;20816:113::-;20886:4;20918;20913:3;20909:14;20901:22;;20891:38;;;:::o;20935:184::-;21034:11;21068:6;21063:3;21056:19;21108:4;21103:3;21099:14;21084:29;;21046:73;;;;:::o;21125:169::-;21209:11;21243:6;21238:3;21231:19;21283:4;21278:3;21274:14;21259:29;;21221:73;;;;:::o;21300:305::-;21340:3;21359:20;21377:1;21359:20;:::i;:::-;21354:25;;21393:20;21411:1;21393:20;:::i;:::-;21388:25;;21547:1;21479:66;21475:74;21472:1;21469:81;21466:2;;;21553:18;;:::i;:::-;21466:2;21597:1;21594;21590:9;21583:16;;21344:261;;;;:::o;21611:185::-;21651:1;21668:20;21686:1;21668:20;:::i;:::-;21663:25;;21702:20;21720:1;21702:20;:::i;:::-;21697:25;;21741:1;21731:2;;21746:18;;:::i;:::-;21731:2;21788:1;21785;21781:9;21776:14;;21653:143;;;;:::o;21802:348::-;21842:7;21865:20;21883:1;21865:20;:::i;:::-;21860:25;;21899:20;21917:1;21899:20;:::i;:::-;21894:25;;22087:1;22019:66;22015:74;22012:1;22009:81;22004:1;21997:9;21990:17;21986:105;21983:2;;;22094:18;;:::i;:::-;21983:2;22142:1;22139;22135:9;22124:20;;21850:300;;;;:::o;22156:191::-;22196:4;22216:20;22234:1;22216:20;:::i;:::-;22211:25;;22250:20;22268:1;22250:20;:::i;:::-;22245:25;;22289:1;22286;22283:8;22280:2;;;22294:18;;:::i;:::-;22280:2;22339:1;22336;22332:9;22324:17;;22201:146;;;;:::o;22353:96::-;22390:7;22419:24;22437:5;22419:24;:::i;:::-;22408:35;;22398:51;;;:::o;22455:104::-;22500:7;22529:24;22547:5;22529:24;:::i;:::-;22518:35;;22508:51;;;:::o;22565:90::-;22599:7;22642:5;22635:13;22628:21;22617:32;;22607:48;;;:::o;22661:126::-;22698:7;22738:42;22731:5;22727:54;22716:65;;22706:81;;;:::o;22793:77::-;22830:7;22859:5;22848:16;;22838:32;;;:::o;22876:86::-;22911:7;22951:4;22944:5;22940:16;22929:27;;22919:43;;;:::o;22968:134::-;23026:9;23059:37;23090:5;23059:37;:::i;:::-;23046:50;;23036:66;;;:::o;23108:180::-;23185:9;23218:64;23276:5;23218:64;:::i;:::-;23205:77;;23195:93;;;:::o;23294:140::-;23371:9;23404:24;23422:5;23404:24;:::i;:::-;23391:37;;23381:53;;;:::o;23440:121::-;23498:9;23531:24;23549:5;23531:24;:::i;:::-;23518:37;;23508:53;;;:::o;23567:126::-;23617:9;23650:37;23681:5;23650:37;:::i;:::-;23637:50;;23627:66;;;:::o;23699:113::-;23749:9;23782:24;23800:5;23782:24;:::i;:::-;23769:37;;23759:53;;;:::o;23818:307::-;23886:1;23896:113;23910:6;23907:1;23904:13;23896:113;;;23995:1;23990:3;23986:11;23980:18;23976:1;23971:3;23967:11;23960:39;23932:2;23929:1;23925:10;23920:15;;23896:113;;;24027:6;24024:1;24021:13;24018:2;;;24107:1;24098:6;24093:3;24089:16;24082:27;24018:2;23867:258;;;;:::o;24131:320::-;24175:6;24212:1;24206:4;24202:12;24192:22;;24259:1;24253:4;24249:12;24280:18;24270:2;;24336:4;24328:6;24324:17;24314:27;;24270:2;24398;24390:6;24387:14;24367:18;24364:38;24361:2;;;24417:18;;:::i;:::-;24361:2;24182:269;;;;:::o;24457:180::-;24505:77;24502:1;24495:88;24602:4;24599:1;24592:15;24626:4;24623:1;24616:15;24643:180;24691:77;24688:1;24681:88;24788:4;24785:1;24778:15;24812:4;24809:1;24802:15;24829:180;24877:77;24874:1;24867:88;24974:4;24971:1;24964:15;24998:4;24995:1;24988:15;25015:102;25056:6;25107:2;25103:7;25098:2;25091:5;25087:14;25083:28;25073:38;;25063:54;;;:::o;25123:222::-;25263:34;25259:1;25251:6;25247:14;25240:58;25332:5;25327:2;25319:6;25315:15;25308:30;25229:116;:::o;25351:225::-;25491:34;25487:1;25479:6;25475:14;25468:58;25560:8;25555:2;25547:6;25543:15;25536:33;25457:119;:::o;25582:221::-;25722:34;25718:1;25710:6;25706:14;25699:58;25791:4;25786:2;25778:6;25774:15;25767:29;25688:115;:::o;25809:177::-;25949:29;25945:1;25937:6;25933:14;25926:53;25915:71;:::o;25992:166::-;26132:18;26128:1;26120:6;26116:14;26109:42;26098:60;:::o;26164:168::-;26304:20;26300:1;26292:6;26288:14;26281:44;26270:62;:::o;26338:220::-;26478:34;26474:1;26466:6;26462:14;26455:58;26547:3;26542:2;26534:6;26530:15;26523:28;26444:114;:::o;26564:182::-;26704:34;26700:1;26692:6;26688:14;26681:58;26670:76;:::o;26752:228::-;26892:34;26888:1;26880:6;26876:14;26869:58;26961:11;26956:2;26948:6;26944:15;26937:36;26858:122;:::o;26986:224::-;27126:34;27122:1;27114:6;27110:14;27103:58;27195:7;27190:2;27182:6;27178:15;27171:32;27092:118;:::o;27216:173::-;27356:25;27352:1;27344:6;27340:14;27333:49;27322:67;:::o;27395:223::-;27535:34;27531:1;27523:6;27519:14;27512:58;27604:6;27599:2;27591:6;27587:15;27580:31;27501:117;:::o;27624:122::-;27697:24;27715:5;27697:24;:::i;:::-;27690:5;27687:35;27677:2;;27736:1;27733;27726:12;27677:2;27667:79;:::o;27752:138::-;27833:32;27859:5;27833:32;:::i;:::-;27826:5;27823:43;27813:2;;27880:1;27877;27870:12;27813:2;27803:87;:::o;27896:116::-;27966:21;27981:5;27966:21;:::i;:::-;27959:5;27956:32;27946:2;;28002:1;27999;27992:12;27946:2;27936:76;:::o;28018:122::-;28091:24;28109:5;28091:24;:::i;:::-;28084:5;28081:35;28071:2;;28130:1;28127;28120:12;28071:2;28061:79;:::o

Swarm Source

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