ETH Price: $3,390.61 (-1.49%)
Gas: 3 Gwei

Token

Pepe Of Wallstreet (POW)
 

Overview

Max Total Supply

1,000,000,000,000 POW

Holders

1,159

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
20,000,000.000000198367020999 POW

Value
$0.00
0xf746fb75a9c1d0f1c9799e434aea2aef90f7aa22
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:
PepeOfWallstreet

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-04
*/

// SPDX-License-Identifier: MIT

// twitter(X) : Twitter.com/powcommunityeth
// telegram : https://t.me/pepeofwallstreetportal
// website : https://pepeofwallstreet.live/

pragma solidity 0.8.9;
 


interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}

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

interface IERC20Metadata is IERC20 {
    
    function name() external view returns(string memory);

   
    function symbol() external view returns(string memory);

    
    function decimals() external view returns(uint8);
}

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

}

 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

    
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    
    function decimals() public view virtual override returns(uint8) {
        return 18;
    }

   
    function totalSupply() public view virtual override returns(uint256) {
        return _totalSupply;
    }

    
    function balanceOf(address account) public view virtual override returns(uint256) {
        return _balances[account];
    }

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

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

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

    
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual 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 cannot be below zero"));
        return true;
    }

    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    
   
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

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

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

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

    
    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;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

   
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


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

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 PepeOfWallstreet is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address public  devWallet;
    address private marketingWallet;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;


    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyDevFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellDevFee;
        uint8 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevFee:0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 private taxTill;
    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public marketPair;
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("Pepe Of Wallstreet", "POW") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

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

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;


        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 1e12 * 1e18;

        maxBuyAmount = totalSupply * 100 / 100; // 1% maxTransactionAmountTxn
        maxSellAmount = totalSupply * 100 / 100; // 1% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 100 / 100; // 1% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 10000; // 0.01% swap wallet

        _fees.buyMarketingFee = 5;
        _fees.buyLiquidityFee = 1;
        _fees.buyDevFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = 5;
        _fees.sellLiquidityFee = 1;
        _fees.sellDevFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;


        marketingWallet = address(0x185Fd6aDae886cfbCC1492beB0a386B685Fa90ac);
        devWallet = address(0x185Fd6aDae886cfbCC1492beB0a386B685Fa90ac);

        // exclude from paying fees or having max transaction amount

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 2;
    }



    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    function updateFees(uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy,uint8 _devFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _devFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevFee = _devFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevFee = _devFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
        require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less");   
        require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }
    function rescueETH(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner {
        IERC20(tokenAdd).transfer(owner(), amount);
    }

    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
        
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer over max amount");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }
           
        }
 
        
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDev += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);

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

    }

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(devWallet).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","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":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001ad57600080fd5b506040518060400160405280601281526020017f50657065204f662057616c6c73747265657400000000000000000000000000008152506040518060400160405280600381526020017f504f57000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200023292919062000f2d565b5080600490805190602001906200024b92919062000f2d565b50505060006200026062000be260201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb919062001047565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043057600080fd5b505afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b919062001047565b6040518363ffffffff1660e01b81526004016200048a9291906200108a565b602060405180830381600087803b158015620004a557600080fd5b505af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e0919062001047565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016013600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620005dd62000bea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006200069c62000bea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200075b62000bea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008ec6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c1460201b60201c565b5060006c0c9f2c9cd04674edea400000009050606480826200090f9190620010f0565b6200091b919062001180565b60088190555060648082620009319190620010f0565b6200093d919062001180565b60098190555060648082620009539190620010f0565b6200095f919062001180565b600a81905550612710600182620009779190620010f0565b62000983919062001180565b600b819055506005600d60000160016101000a81548160ff021916908360ff1602179055506001600d60000160036101000a81548160ff021916908360ff1602179055506000600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff1662000a2b9190620011c5565b62000a379190620011c5565b600d60000160006101000a81548160ff021916908360ff1602179055506005600d60000160056101000a81548160ff021916908360ff1602179055506001600d60000160076101000a81548160ff021916908360ff1602179055506000600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1662000af69190620011c5565b62000b029190620011c5565b600d60000160046101000a81548160ff021916908360ff16021790555073185fd6adae886cfbcc1492beb0a386b685fa90ac600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073185fd6adae886cfbcc1492beb0a386b685fa90ac600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000bdb338262000c4260201b60201c565b50620013e8565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000c3862000c2a62000be260201b60201c565b848462000ddd60201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cac9062001264565b60405180910390fd5b62000cd18160025462000eca60201b620022421790919060201c565b60028190555062000d2f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000eca60201b620022421790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dd1919062001297565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ebd919062001297565b60405180910390a3505050565b600080828462000edb9190620012b4565b90508381101562000f23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f1a9062001361565b60405180910390fd5b8091505092915050565b82805462000f3b90620013b2565b90600052602060002090601f01602090048101928262000f5f576000855562000fab565b82601f1062000f7a57805160ff191683800117855562000fab565b8280016001018555821562000fab579182015b8281111562000faa57825182559160200191906001019062000f8d565b5b50905062000fba919062000fbe565b5090565b5b8082111562000fd957600081600090555060010162000fbf565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200100f8262000fe2565b9050919050565b620010218162001002565b81146200102d57600080fd5b50565b600081519050620010418162001016565b92915050565b60006020828403121562001060576200105f62000fdd565b5b6000620010708482850162001030565b91505092915050565b620010848162001002565b82525050565b6000604082019050620010a1600083018562001079565b620010b0602083018462001079565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010fd82620010b7565b91506200110a83620010b7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011465762001145620010c1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200118d82620010b7565b91506200119a83620010b7565b925082620011ad57620011ac62001151565b5b828204905092915050565b600060ff82169050919050565b6000620011d282620011b8565b9150620011df83620011b8565b92508260ff03821115620011f857620011f7620010c1565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200124c601f8362001203565b9150620012598262001214565b602082019050919050565b600060208201905081810360008301526200127f816200123d565b9050919050565b6200129181620010b7565b82525050565b6000602082019050620012ae600083018462001286565b92915050565b6000620012c182620010b7565b9150620012ce83620010b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013065762001305620010c1565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001349601b8362001203565b9150620013568262001311565b602082019050919050565b600060208201905081810360008301526200137c816200133a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013cb57607f821691505b60208210811415620013e257620013e162001383565b5b50919050565b60805160a051614a2f62001438600039600081816110950152611ae601526000818161222001528181613513015281816136030152818161362a015281816136c601526136ed0152614a2f6000f3fe6080604052600436106102345760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610877578063e16830a8146108b4578063f2fde38b146108dd578063f5b3c3bf14610906578063f887ea40146109435761023b565b8063c0246668146107a1578063c16dd4a4146107ca578063c18bc195146107f3578063d212a69a1461081c578063d3f6a1571461084e5761023b565b80639fccce32116100f25780639fccce32146106ba578063a457c2d7146106e5578063a9059cbb14610722578063b88631151461075f578063b9e418e71461078a5761023b565b80638da5cb5b146105d35780638ea5220f146105fe57806395d89b411461062957806396880b17146106545780639e252f00146106915761023b565b80633265e846116101bc5780636ddd1713116101805780636ddd17131461050257806370a082311461052d578063715018a61461056a5780637571336a146105815780638cd4426d146105aa5761023b565b80633265e846146103f7578063395093511461042057806349bd5a5e1461045d5780634fbee19314610488578063555467a1146104c55761023b565b806318160ddd1161020357806318160ddd1461030e5780631a8145bb146103395780631f3fed8f1461036457806323b872dd1461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561096e565b60405161026291906138a5565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613960565b610a00565b60405161029f91906139bb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139d6565b610a1e565b6040516102dc91906139bb565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613a03565b610a3e565b005b34801561031a57600080fd5b50610323610c0f565b6040516103309190613a52565b60405180910390f35b34801561034557600080fd5b5061034e610c19565b60405161035b9190613a52565b60405180910390f35b34801561037057600080fd5b50610379610c1f565b6040516103869190613a52565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a6d565b610c25565b6040516103c391906139bb565b60405180910390f35b3480156103d857600080fd5b506103e1610cfe565b6040516103ee9190613adc565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b23565b610d07565b005b34801561042c57600080fd5b5061044760048036038101906104429190613960565b610fe0565b60405161045491906139bb565b60405180910390f35b34801561046957600080fd5b50610472611093565b60405161047f9190613bbf565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906139d6565b6110b7565b6040516104bc91906139bb565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613bda565b61110d565b6040516104f991906139bb565b60405180910390f35b34801561050e57600080fd5b506105176111b6565b60405161052491906139bb565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906139d6565b6111c9565b6040516105619190613a52565b60405180910390f35b34801561057657600080fd5b5061057f611211565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613c33565b611369565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613960565b61145b565b005b3480156105df57600080fd5b506105e861158b565b6040516105f59190613bbf565b60405180910390f35b34801561060a57600080fd5b506106136115b5565b6040516106209190613bbf565b60405180910390f35b34801561063557600080fd5b5061063e6115db565b60405161064b91906138a5565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906139d6565b61166d565b60405161068891906139bb565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bda565b61168d565b005b3480156106c657600080fd5b506106cf611775565b6040516106dc9190613a52565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613960565b61177b565b60405161071991906139bb565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613960565b611848565b60405161075691906139bb565b60405180910390f35b34801561076b57600080fd5b50610774611866565b60405161078191906139bb565b60405180910390f35b34801561079657600080fd5b5061079f611879565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613c33565b61195b565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613c33565b611a4d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613bda565b611bce565b005b34801561082857600080fd5b50610831611d03565b604051610845989796959493929190613c73565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613cf1565b611da1565b005b34801561088357600080fd5b5061089e60048036038101906108999190613cf1565b611ebe565b6040516108ab9190613a52565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613c33565b611f45565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906139d6565b612037565b005b34801561091257600080fd5b5061092d600480360381019061092891906139d6565b6121fe565b60405161093a91906139bb565b60405180910390f35b34801561094f57600080fd5b5061095861221e565b6040516109659190613d90565b60405180910390f35b60606003805461097d90613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990613dda565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a14610a0d6122a0565b84846122a8565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a466122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613e58565b60405180910390fd5b6064610adf610c0f565b610ae99190613ed6565b6103e883610af5610c0f565b610aff9190613f07565b610b099190613ed6565b1015610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190613fd3565b60405180910390fd5b6064610b54610c0f565b610b5e9190613ed6565b6103e882610b6a610c0f565b610b749190613f07565b610b7e9190613ed6565b1015610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614065565b60405180910390fd5b6103e882610bcb610c0f565b610bd59190613f07565b610bdf9190613ed6565b6008819055506103e881610bf1610c0f565b610bfb9190613f07565b610c059190613ed6565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610c32848484612393565b610cf384610c3e6122a0565b610cee856040518060600160405280602881526020016149d260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b600190509392505050565b60006012905090565b610d0f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e58565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e3b9190614085565b610e459190614085565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610eff9190614085565b610f099190614085565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690614108565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614108565b60405180910390fd5b505050505050565b6000611089610fed6122a0565b846110848560016000610ffe6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6122a8565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111176122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e58565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112196122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113716122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613e58565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613e58565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61151661158b565b836040518363ffffffff1660e01b8152600401611534929190614128565b602060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190614166565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115ea90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613dda565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6116956122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e58565b60405180910390fd5b61172c61158b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611771573d6000803e3d6000fd5b5050565b60105481565b600061183e6117886122a0565b846118398560405180606001604052806025815260200161498760259139600160006117b26122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b6001905092915050565b600061185c6118556122a0565b8484612393565b6001905092915050565b600c60029054906101000a900460ff1681565b6118816122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e58565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436119539190614193565b601181905550565b6119636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613e58565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a556122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90613e58565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614235565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bd66122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613e58565b60405180910390fd5b6064611c6f610c0f565b611c799190613ed6565b6103e882611c85610c0f565b611c8f9190613f07565b611c999190613ed6565b1015611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906142c7565b60405180910390fd5b6103e881611ce6610c0f565b611cf09190613f07565b611cfa9190613ed6565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611da96122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613e58565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4d6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613e58565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61203f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614359565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008082846122519190614193565b905083811015612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906143c5565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123869190613a52565b60405180910390a3505050565b60008114156123ad576123a883836000612ecd565b612e64565b6123b561158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561242357506123f361158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243c5750600c60029054906101000a900460ff16155b156127c257600c60009054906101000a900460ff1661253657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614431565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262857600854811115612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a9061449d565b60405180910390fd5b612717565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cb5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271657600954811115612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614509565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127c157600a54612774836111c9565b8261277f9190614193565b11156127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614575565b60405180910390fd5b5b5b60006127cd306111c9565b90506000600b5482101590508080156127f25750600c60019054906101000a900460ff165b801561280b5750600c60029054906101000a900460ff16155b80156128605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128b65750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561290c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612950576001600c60026101000a81548160ff021916908315150217905550612934613077565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a065750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a1057600090505b8015612e55576000601154431015612ab257612a496064612a3b60638861336590919063ffffffff16565b6133e090919063ffffffff16565b90506063605e82612a5a9190613f07565b612a649190613ed6565b600e6000828254612a759190614193565b925050819055506063600582612a8b9190613f07565b612a959190613ed6565b60106000828254612aa69190614193565b92505081905550612e30565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2057506000600d60000160049054906101000a900460ff1660ff16115b15612c7257612b606064612b52600d60000160049054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612b999190613f07565b612ba39190613ed6565b600f6000828254612bb49190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612bf29190613f07565b612bfc9190613ed6565b600e6000828254612c0d9190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612c4b9190613f07565b612c559190613ed6565b60106000828254612c669190614193565b92505081905550612e2f565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce057506000600d60000160009054906101000a900460ff1660ff16115b15612e2e57612d206064612d12600d60000160009054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612d599190613f07565b612d639190613ed6565b600f6000828254612d749190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612db29190613f07565b612dbc9190613ed6565b600e6000828254612dcd9190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612e0b9190613f07565b612e159190613ed6565b60106000828254612e269190614193565b925050819055505b5b5b6000811115612e4557612e44873083612ecd565b5b8085612e519190614595565b9450505b612e60868686612ecd565b5050505b505050565b6000838311158290612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea891906138a5565b60405180910390fd5b5060008385612ec09190614595565b9050809150509392505050565b612f38816040518060600160405280602681526020016149ac602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fcb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306a9190613a52565b60405180910390a3505050565b6000613082306111c9565b90506000601054600e54600f546130999190614193565b6130a39190614193565b90506000808314806130b55750600082145b156130c257505050613363565b6014600b546130d19190613f07565b8311156130ea576014600b546130e79190613f07565b92505b6000600283600f54866130fd9190613f07565b6131079190613ed6565b6131119190613ed6565b90506000613128828661342a90919063ffffffff16565b9050600047905061313882613474565b600061314d824761342a90919063ffffffff16565b905060006131788761316a600e548561336590919063ffffffff16565b6133e090919063ffffffff16565b905060006131a3886131956010548661336590919063ffffffff16565b6133e090919063ffffffff16565b9050600081836131b39190614193565b846131be9190614595565b90506000600f819055506000600e8190555060006010819055506000871180156131e85750600081115b15613231576131f787826136c0565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516132289291906145c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476132769190614595565b60405161328290614623565b60006040518083038185875af1925050503d80600081146132bf576040519150601f19603f3d011682016040523d82523d6000602084013e6132c4565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161331090614623565b60006040518083038185875af1925050503d806000811461334d576040519150601f19603f3d011682016040523d82523d6000602084013e613352565b606091505b505080985050505050505050505050505b565b60008083141561337857600090506133da565b600082846133869190613f07565b90508284826133959190613ed6565b146133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc906146aa565b60405180910390fd5b809150505b92915050565b600061342283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a9565b905092915050565b600061346c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e69565b905092915050565b6000600267ffffffffffffffff811115613491576134906146ca565b5b6040519080825280602002602001820160405280156134bf5781602001602082028036833780820191505090505b50905030816000815181106134d7576134d66146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561357757600080fd5b505afa15801561358b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135af919061473d565b816001815181106135c3576135c26146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613628307f0000000000000000000000000000000000000000000000000000000000000000846122a8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161368a959493929190614863565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b505050505050565b6136eb307f0000000000000000000000000000000000000000000000000000000000000000846122a8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613750969594939291906148bd565b6060604051808303818588803b15801561376957600080fd5b505af115801561377d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a29190614933565b5050505050565b600080831182906137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e791906138a5565b60405180910390fd5b50600083856137ff9190613ed6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561384657808201518184015260208101905061382b565b83811115613855576000848401525b50505050565b6000601f19601f8301169050919050565b60006138778261380c565b6138818185613817565b9350613891818560208601613828565b61389a8161385b565b840191505092915050565b600060208201905081810360008301526138bf818461386c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f7826138cc565b9050919050565b613907816138ec565b811461391257600080fd5b50565b600081359050613924816138fe565b92915050565b6000819050919050565b61393d8161392a565b811461394857600080fd5b50565b60008135905061395a81613934565b92915050565b60008060408385031215613977576139766138c7565b5b600061398585828601613915565b92505060206139968582860161394b565b9150509250929050565b60008115159050919050565b6139b5816139a0565b82525050565b60006020820190506139d060008301846139ac565b92915050565b6000602082840312156139ec576139eb6138c7565b5b60006139fa84828501613915565b91505092915050565b60008060408385031215613a1a57613a196138c7565b5b6000613a288582860161394b565b9250506020613a398582860161394b565b9150509250929050565b613a4c8161392a565b82525050565b6000602082019050613a676000830184613a43565b92915050565b600080600060608486031215613a8657613a856138c7565b5b6000613a9486828701613915565b9350506020613aa586828701613915565b9250506040613ab68682870161394b565b9150509250925092565b600060ff82169050919050565b613ad681613ac0565b82525050565b6000602082019050613af16000830184613acd565b92915050565b613b0081613ac0565b8114613b0b57600080fd5b50565b600081359050613b1d81613af7565b92915050565b60008060008060008060c08789031215613b4057613b3f6138c7565b5b6000613b4e89828a01613b0e565b9650506020613b5f89828a01613b0e565b9550506040613b7089828a01613b0e565b9450506060613b8189828a01613b0e565b9350506080613b9289828a01613b0e565b92505060a0613ba389828a01613b0e565b9150509295509295509295565b613bb9816138ec565b82525050565b6000602082019050613bd46000830184613bb0565b92915050565b600060208284031215613bf057613bef6138c7565b5b6000613bfe8482850161394b565b91505092915050565b613c10816139a0565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496138c7565b5b6000613c5885828601613915565b9250506020613c6985828601613c1e565b9150509250929050565b600061010082019050613c89600083018b613acd565b613c96602083018a613acd565b613ca36040830189613acd565b613cb06060830188613acd565b613cbd6080830187613acd565b613cca60a0830186613acd565b613cd760c0830185613acd565b613ce460e0830184613acd565b9998505050505050505050565b60008060408385031215613d0857613d076138c7565b5b6000613d1685828601613915565b9250506020613d2785828601613915565b9150509250929050565b6000819050919050565b6000613d56613d51613d4c846138cc565b613d31565b6138cc565b9050919050565b6000613d6882613d3b565b9050919050565b6000613d7a82613d5d565b9050919050565b613d8a81613d6f565b82525050565b6000602082019050613da56000830184613d81565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613dab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e42602083613817565b9150613e4d82613e0c565b602082019050919050565b60006020820190508181036000830152613e7181613e35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ee18261392a565b9150613eec8361392a565b925082613efc57613efb613e78565b5b828204905092915050565b6000613f128261392a565b9150613f1d8361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5657613f55613ea7565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbd602383613817565b9150613fc882613f61565b604082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061404f602483613817565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b600061409082613ac0565b915061409b83613ac0565b92508260ff038211156140b1576140b0613ea7565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006140f2601d83613817565b91506140fd826140bc565b602082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600060408201905061413d6000830185613bb0565b61414a6020830184613a43565b9392505050565b60008151905061416081613c07565b92915050565b60006020828403121561417c5761417b6138c7565b5b600061418a84828501614151565b91505092915050565b600061419e8261392a565b91506141a98361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141de576141dd613ea7565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061421f601783613817565b915061422a826141e9565b602082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b1602283613817565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614343602683613817565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006143af601b83613817565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061441b601683613817565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614487601c83613817565b915061449282614451565b602082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006144f3601d83613817565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061455f601383613817565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a08261392a565b91506145ab8361392a565b9250828210156145be576145bd613ea7565b5b828203905092915050565b60006040820190506145de6000830185613a43565b6145eb6020830184613a43565b9392505050565b600081905092915050565b50565b600061460d6000836145f2565b9150614618826145fd565b600082019050919050565b600061462e82614600565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614694602183613817565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614737816138fe565b92915050565b600060208284031215614753576147526138c7565b5b600061476184828501614728565b91505092915050565b6000819050919050565b600061478f61478a6147858461476a565b613d31565b61392a565b9050919050565b61479f81614774565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147da816138ec565b82525050565b60006147ec83836147d1565b60208301905092915050565b6000602082019050919050565b6000614810826147a5565b61481a81856147b0565b9350614825836147c1565b8060005b8381101561485657815161483d88826147e0565b9750614848836147f8565b925050600181019050614829565b5085935050505092915050565b600060a0820190506148786000830188613a43565b6148856020830187614796565b81810360408301526148978186614805565b90506148a66060830185613bb0565b6148b36080830184613a43565b9695505050505050565b600060c0820190506148d26000830189613bb0565b6148df6020830188613a43565b6148ec6040830187614796565b6148f96060830186614796565b6149066080830185613bb0565b61491360a0830184613a43565b979650505050505050565b60008151905061492d81613934565b92915050565b60008060006060848603121561494c5761494b6138c7565b5b600061495a8682870161491e565b935050602061496b8682870161491e565b925050604061497c8682870161491e565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204e8c2c63ad02923282cbc50ba0aa65369c186003ff6320f7bd4e66478bd0323864736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610877578063e16830a8146108b4578063f2fde38b146108dd578063f5b3c3bf14610906578063f887ea40146109435761023b565b8063c0246668146107a1578063c16dd4a4146107ca578063c18bc195146107f3578063d212a69a1461081c578063d3f6a1571461084e5761023b565b80639fccce32116100f25780639fccce32146106ba578063a457c2d7146106e5578063a9059cbb14610722578063b88631151461075f578063b9e418e71461078a5761023b565b80638da5cb5b146105d35780638ea5220f146105fe57806395d89b411461062957806396880b17146106545780639e252f00146106915761023b565b80633265e846116101bc5780636ddd1713116101805780636ddd17131461050257806370a082311461052d578063715018a61461056a5780637571336a146105815780638cd4426d146105aa5761023b565b80633265e846146103f7578063395093511461042057806349bd5a5e1461045d5780634fbee19314610488578063555467a1146104c55761023b565b806318160ddd1161020357806318160ddd1461030e5780631a8145bb146103395780631f3fed8f1461036457806323b872dd1461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561096e565b60405161026291906138a5565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613960565b610a00565b60405161029f91906139bb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139d6565b610a1e565b6040516102dc91906139bb565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613a03565b610a3e565b005b34801561031a57600080fd5b50610323610c0f565b6040516103309190613a52565b60405180910390f35b34801561034557600080fd5b5061034e610c19565b60405161035b9190613a52565b60405180910390f35b34801561037057600080fd5b50610379610c1f565b6040516103869190613a52565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a6d565b610c25565b6040516103c391906139bb565b60405180910390f35b3480156103d857600080fd5b506103e1610cfe565b6040516103ee9190613adc565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b23565b610d07565b005b34801561042c57600080fd5b5061044760048036038101906104429190613960565b610fe0565b60405161045491906139bb565b60405180910390f35b34801561046957600080fd5b50610472611093565b60405161047f9190613bbf565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906139d6565b6110b7565b6040516104bc91906139bb565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613bda565b61110d565b6040516104f991906139bb565b60405180910390f35b34801561050e57600080fd5b506105176111b6565b60405161052491906139bb565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906139d6565b6111c9565b6040516105619190613a52565b60405180910390f35b34801561057657600080fd5b5061057f611211565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613c33565b611369565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613960565b61145b565b005b3480156105df57600080fd5b506105e861158b565b6040516105f59190613bbf565b60405180910390f35b34801561060a57600080fd5b506106136115b5565b6040516106209190613bbf565b60405180910390f35b34801561063557600080fd5b5061063e6115db565b60405161064b91906138a5565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906139d6565b61166d565b60405161068891906139bb565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bda565b61168d565b005b3480156106c657600080fd5b506106cf611775565b6040516106dc9190613a52565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613960565b61177b565b60405161071991906139bb565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613960565b611848565b60405161075691906139bb565b60405180910390f35b34801561076b57600080fd5b50610774611866565b60405161078191906139bb565b60405180910390f35b34801561079657600080fd5b5061079f611879565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613c33565b61195b565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613c33565b611a4d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613bda565b611bce565b005b34801561082857600080fd5b50610831611d03565b604051610845989796959493929190613c73565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613cf1565b611da1565b005b34801561088357600080fd5b5061089e60048036038101906108999190613cf1565b611ebe565b6040516108ab9190613a52565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613c33565b611f45565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906139d6565b612037565b005b34801561091257600080fd5b5061092d600480360381019061092891906139d6565b6121fe565b60405161093a91906139bb565b60405180910390f35b34801561094f57600080fd5b5061095861221e565b6040516109659190613d90565b60405180910390f35b60606003805461097d90613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990613dda565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a14610a0d6122a0565b84846122a8565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a466122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613e58565b60405180910390fd5b6064610adf610c0f565b610ae99190613ed6565b6103e883610af5610c0f565b610aff9190613f07565b610b099190613ed6565b1015610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190613fd3565b60405180910390fd5b6064610b54610c0f565b610b5e9190613ed6565b6103e882610b6a610c0f565b610b749190613f07565b610b7e9190613ed6565b1015610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614065565b60405180910390fd5b6103e882610bcb610c0f565b610bd59190613f07565b610bdf9190613ed6565b6008819055506103e881610bf1610c0f565b610bfb9190613f07565b610c059190613ed6565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610c32848484612393565b610cf384610c3e6122a0565b610cee856040518060600160405280602881526020016149d260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b600190509392505050565b60006012905090565b610d0f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e58565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e3b9190614085565b610e459190614085565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610eff9190614085565b610f099190614085565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690614108565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614108565b60405180910390fd5b505050505050565b6000611089610fed6122a0565b846110848560016000610ffe6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6122a8565b6001905092915050565b7f000000000000000000000000a19bbaa46d3301e948861fb76483879dc71524dc81565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111176122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e58565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112196122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113716122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613e58565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613e58565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61151661158b565b836040518363ffffffff1660e01b8152600401611534929190614128565b602060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190614166565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115ea90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613dda565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6116956122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e58565b60405180910390fd5b61172c61158b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611771573d6000803e3d6000fd5b5050565b60105481565b600061183e6117886122a0565b846118398560405180606001604052806025815260200161498760259139600160006117b26122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b6001905092915050565b600061185c6118556122a0565b8484612393565b6001905092915050565b600c60029054906101000a900460ff1681565b6118816122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e58565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436119539190614193565b601181905550565b6119636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613e58565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a556122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90613e58565b60405180910390fd5b7f000000000000000000000000a19bbaa46d3301e948861fb76483879dc71524dc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614235565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bd66122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613e58565b60405180910390fd5b6064611c6f610c0f565b611c799190613ed6565b6103e882611c85610c0f565b611c8f9190613f07565b611c999190613ed6565b1015611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906142c7565b60405180910390fd5b6103e881611ce6610c0f565b611cf09190613f07565b611cfa9190613ed6565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611da96122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613e58565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4d6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613e58565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61203f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614359565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60008082846122519190614193565b905083811015612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906143c5565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123869190613a52565b60405180910390a3505050565b60008114156123ad576123a883836000612ecd565b612e64565b6123b561158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561242357506123f361158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243c5750600c60029054906101000a900460ff16155b156127c257600c60009054906101000a900460ff1661253657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614431565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262857600854811115612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a9061449d565b60405180910390fd5b612717565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cb5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271657600954811115612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614509565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127c157600a54612774836111c9565b8261277f9190614193565b11156127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614575565b60405180910390fd5b5b5b60006127cd306111c9565b90506000600b5482101590508080156127f25750600c60019054906101000a900460ff165b801561280b5750600c60029054906101000a900460ff16155b80156128605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128b65750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561290c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612950576001600c60026101000a81548160ff021916908315150217905550612934613077565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a065750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a1057600090505b8015612e55576000601154431015612ab257612a496064612a3b60638861336590919063ffffffff16565b6133e090919063ffffffff16565b90506063605e82612a5a9190613f07565b612a649190613ed6565b600e6000828254612a759190614193565b925050819055506063600582612a8b9190613f07565b612a959190613ed6565b60106000828254612aa69190614193565b92505081905550612e30565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2057506000600d60000160049054906101000a900460ff1660ff16115b15612c7257612b606064612b52600d60000160049054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612b999190613f07565b612ba39190613ed6565b600f6000828254612bb49190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612bf29190613f07565b612bfc9190613ed6565b600e6000828254612c0d9190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612c4b9190613f07565b612c559190613ed6565b60106000828254612c669190614193565b92505081905550612e2f565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce057506000600d60000160009054906101000a900460ff1660ff16115b15612e2e57612d206064612d12600d60000160009054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612d599190613f07565b612d639190613ed6565b600f6000828254612d749190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612db29190613f07565b612dbc9190613ed6565b600e6000828254612dcd9190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612e0b9190613f07565b612e159190613ed6565b60106000828254612e269190614193565b925050819055505b5b5b6000811115612e4557612e44873083612ecd565b5b8085612e519190614595565b9450505b612e60868686612ecd565b5050505b505050565b6000838311158290612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea891906138a5565b60405180910390fd5b5060008385612ec09190614595565b9050809150509392505050565b612f38816040518060600160405280602681526020016149ac602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fcb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306a9190613a52565b60405180910390a3505050565b6000613082306111c9565b90506000601054600e54600f546130999190614193565b6130a39190614193565b90506000808314806130b55750600082145b156130c257505050613363565b6014600b546130d19190613f07565b8311156130ea576014600b546130e79190613f07565b92505b6000600283600f54866130fd9190613f07565b6131079190613ed6565b6131119190613ed6565b90506000613128828661342a90919063ffffffff16565b9050600047905061313882613474565b600061314d824761342a90919063ffffffff16565b905060006131788761316a600e548561336590919063ffffffff16565b6133e090919063ffffffff16565b905060006131a3886131956010548661336590919063ffffffff16565b6133e090919063ffffffff16565b9050600081836131b39190614193565b846131be9190614595565b90506000600f819055506000600e8190555060006010819055506000871180156131e85750600081115b15613231576131f787826136c0565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516132289291906145c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476132769190614595565b60405161328290614623565b60006040518083038185875af1925050503d80600081146132bf576040519150601f19603f3d011682016040523d82523d6000602084013e6132c4565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161331090614623565b60006040518083038185875af1925050503d806000811461334d576040519150601f19603f3d011682016040523d82523d6000602084013e613352565b606091505b505080985050505050505050505050505b565b60008083141561337857600090506133da565b600082846133869190613f07565b90508284826133959190613ed6565b146133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc906146aa565b60405180910390fd5b809150505b92915050565b600061342283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a9565b905092915050565b600061346c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e69565b905092915050565b6000600267ffffffffffffffff811115613491576134906146ca565b5b6040519080825280602002602001820160405280156134bf5781602001602082028036833780820191505090505b50905030816000815181106134d7576134d66146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561357757600080fd5b505afa15801561358b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135af919061473d565b816001815181106135c3576135c26146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613628307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122a8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161368a959493929190614863565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b505050505050565b6136eb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122a8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613750969594939291906148bd565b6060604051808303818588803b15801561376957600080fd5b505af115801561377d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a29190614933565b5050505050565b600080831182906137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e791906138a5565b60405180910390fd5b50600083856137ff9190613ed6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561384657808201518184015260208101905061382b565b83811115613855576000848401525b50505050565b6000601f19601f8301169050919050565b60006138778261380c565b6138818185613817565b9350613891818560208601613828565b61389a8161385b565b840191505092915050565b600060208201905081810360008301526138bf818461386c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f7826138cc565b9050919050565b613907816138ec565b811461391257600080fd5b50565b600081359050613924816138fe565b92915050565b6000819050919050565b61393d8161392a565b811461394857600080fd5b50565b60008135905061395a81613934565b92915050565b60008060408385031215613977576139766138c7565b5b600061398585828601613915565b92505060206139968582860161394b565b9150509250929050565b60008115159050919050565b6139b5816139a0565b82525050565b60006020820190506139d060008301846139ac565b92915050565b6000602082840312156139ec576139eb6138c7565b5b60006139fa84828501613915565b91505092915050565b60008060408385031215613a1a57613a196138c7565b5b6000613a288582860161394b565b9250506020613a398582860161394b565b9150509250929050565b613a4c8161392a565b82525050565b6000602082019050613a676000830184613a43565b92915050565b600080600060608486031215613a8657613a856138c7565b5b6000613a9486828701613915565b9350506020613aa586828701613915565b9250506040613ab68682870161394b565b9150509250925092565b600060ff82169050919050565b613ad681613ac0565b82525050565b6000602082019050613af16000830184613acd565b92915050565b613b0081613ac0565b8114613b0b57600080fd5b50565b600081359050613b1d81613af7565b92915050565b60008060008060008060c08789031215613b4057613b3f6138c7565b5b6000613b4e89828a01613b0e565b9650506020613b5f89828a01613b0e565b9550506040613b7089828a01613b0e565b9450506060613b8189828a01613b0e565b9350506080613b9289828a01613b0e565b92505060a0613ba389828a01613b0e565b9150509295509295509295565b613bb9816138ec565b82525050565b6000602082019050613bd46000830184613bb0565b92915050565b600060208284031215613bf057613bef6138c7565b5b6000613bfe8482850161394b565b91505092915050565b613c10816139a0565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496138c7565b5b6000613c5885828601613915565b9250506020613c6985828601613c1e565b9150509250929050565b600061010082019050613c89600083018b613acd565b613c96602083018a613acd565b613ca36040830189613acd565b613cb06060830188613acd565b613cbd6080830187613acd565b613cca60a0830186613acd565b613cd760c0830185613acd565b613ce460e0830184613acd565b9998505050505050505050565b60008060408385031215613d0857613d076138c7565b5b6000613d1685828601613915565b9250506020613d2785828601613915565b9150509250929050565b6000819050919050565b6000613d56613d51613d4c846138cc565b613d31565b6138cc565b9050919050565b6000613d6882613d3b565b9050919050565b6000613d7a82613d5d565b9050919050565b613d8a81613d6f565b82525050565b6000602082019050613da56000830184613d81565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613dab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e42602083613817565b9150613e4d82613e0c565b602082019050919050565b60006020820190508181036000830152613e7181613e35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ee18261392a565b9150613eec8361392a565b925082613efc57613efb613e78565b5b828204905092915050565b6000613f128261392a565b9150613f1d8361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5657613f55613ea7565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbd602383613817565b9150613fc882613f61565b604082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061404f602483613817565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b600061409082613ac0565b915061409b83613ac0565b92508260ff038211156140b1576140b0613ea7565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006140f2601d83613817565b91506140fd826140bc565b602082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600060408201905061413d6000830185613bb0565b61414a6020830184613a43565b9392505050565b60008151905061416081613c07565b92915050565b60006020828403121561417c5761417b6138c7565b5b600061418a84828501614151565b91505092915050565b600061419e8261392a565b91506141a98361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141de576141dd613ea7565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061421f601783613817565b915061422a826141e9565b602082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b1602283613817565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614343602683613817565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006143af601b83613817565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061441b601683613817565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614487601c83613817565b915061449282614451565b602082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006144f3601d83613817565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061455f601383613817565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a08261392a565b91506145ab8361392a565b9250828210156145be576145bd613ea7565b5b828203905092915050565b60006040820190506145de6000830185613a43565b6145eb6020830184613a43565b9392505050565b600081905092915050565b50565b600061460d6000836145f2565b9150614618826145fd565b600082019050919050565b600061462e82614600565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614694602183613817565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614737816138fe565b92915050565b600060208284031215614753576147526138c7565b5b600061476184828501614728565b91505092915050565b6000819050919050565b600061478f61478a6147858461476a565b613d31565b61392a565b9050919050565b61479f81614774565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147da816138ec565b82525050565b60006147ec83836147d1565b60208301905092915050565b6000602082019050919050565b6000614810826147a5565b61481a81856147b0565b9350614825836147c1565b8060005b8381101561485657815161483d88826147e0565b9750614848836147f8565b925050600181019050614829565b5085935050505092915050565b600060a0820190506148786000830188613a43565b6148856020830187614796565b81810360408301526148978186614805565b90506148a66060830185613bb0565b6148b36080830184613a43565b9695505050505050565b600060c0820190506148d26000830189613bb0565b6148df6020830188613a43565b6148ec6040830187614796565b6148f96060830186614796565b6149066080830185613bb0565b61491360a0830184613a43565b979650505050505050565b60008151905061492d81613934565b92915050565b60008060006060848603121561494c5761494b6138c7565b5b600061495a8682870161491e565b935050602061496b8682870161491e565b925050604061497c8682870161491e565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204e8c2c63ad02923282cbc50ba0aa65369c186003ff6320f7bd4e66478bd0323864736f6c63430008090033

Deployed Bytecode Sourcemap

14000:12943:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1954:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2901:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15380:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18398:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2288:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15164:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3083:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2183:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19145:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3451:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14135:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21051:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18230:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14507:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2409:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6975:148;;;;;;;;;;;;;:::i;:::-;;20274:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20731:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6671:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14202:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2066:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15450:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20611:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15204:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3682:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2549:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14545:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18013:143;;;;;;;;;;;;;:::i;:::-;;19984:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20428:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18866:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14852:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;20874:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2737:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20122:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7137:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15666:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14086;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1954:99;2007:13;2040:5;2033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1954:99;:::o;2901:168::-;2983:4;3000:39;3009:12;:10;:12::i;:::-;3023:7;3032:6;3000:8;:39::i;:::-;3057:4;3050:11;;2901:168;;;;:::o;15380:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;18398:458::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18560:3:::1;18544:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18534:4;18521:9;18505:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18504:34;;;;:::i;:::-;18503:61;;18495:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18681:3;18665:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18655:4;18641:10;18625:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18624:35;;;;:::i;:::-;18623:62;;18615:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;18782:4;18769:9;18753:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18752:34;;;;:::i;:::-;18737:12;:49;;;;18844:4;18830:10;18814:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18813:35;;;;:::i;:::-;18797:13;:51;;;;18398:458:::0;;:::o;2288:107::-;2348:7;2375:12;;2368:19;;2288:107;:::o;15164:33::-;;;;:::o;15124:::-;;;;:::o;3083:354::-;3222:4;3239:36;3249:6;3257:9;3268:6;3239:9;:36::i;:::-;3286:121;3295:6;3303:12;:10;:12::i;:::-;3317:89;3355:6;3317:89;;;;;;;;;;;;;;;;;:11;:19;3329:6;3317:19;;;;;;;;;;;;;;;:33;3337:12;:10;:12::i;:::-;3317:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3286:8;:121::i;:::-;3425:4;3418:11;;3083:354;;;;;:::o;2183:92::-;2240:5;2265:2;2258:9;;2183:92;:::o;19145:827::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19350:16:::1;19326:5;:21;;;:40;;;;;;;;;;;;;;;;;;19401:16;19377:5;:21;;;:40;;;;;;;;;;;;;;;;;;19446:10;19428:5;:15;;;:28;;;;;;;;;;;;;;;;;;19536:5;:15;;;;;;;;;;;;19512:5;:21;;;;;;;;;;;;19488:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;19467:5;:18;;;:84;;;;;;;;;;;;;;;;;;19589:17;19564:5;:22;;;:42;;;;;;;;;;;;;;;;;;19642:17;19617:5;:22;;;:42;;;;;;;;;;;;;;;;;;19689:11;19670:5;:16;;;:30;;;;;;;;;;;;;;;;;;19783:5;:16;;;;;;;;;;;;19758:5;:22;;;;;;;;;;;;19733:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;19711:5;:19;;;:88;;;;;;;;;;;;;;;;;;19840:2;19818:5;:18;;;;;;;;;;;;:24;;;;19810:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19921:2;19898:5;:19;;;;;;;;;;;;:25;;;;19890:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19145:827:::0;;;;;;:::o;3451:217::-;3538:4;3555:83;3564:12;:10;:12::i;:::-;3578:7;3587:50;3626:10;3587:11;:25;3599:12;:10;:12::i;:::-;3587:25;;;;;;;;;;;;;;;:34;3613:7;3587:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3555:8;:83::i;:::-;3656:4;3649:11;;3451:217;;;;:::o;14135:38::-;;;:::o;21051:125::-;21116:4;21140:19;:28;21160:7;21140:28;;;;;;;;;;;;;;;;;;;;;;;;;21133:35;;21051:125;;;:::o;18230:158::-;18311:4;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18349:9:::1;18327:19;:31;;;;18376:4;18369:11;;18230:158:::0;;;:::o;14507:31::-;;;;;;;;;;;;;:::o;2409:126::-;2482:7;2509:9;:18;2519:7;2509:18;;;;;;;;;;;;;;;;2502:25;;2409:126;;;:::o;6975:148::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7082:1:::1;7045:40;;7066:6;;;;;;;;;;;7045:40;;;;;;;;;;;;7113:1;7096:6;;:19;;;;;;;;;;;;;;;;;;6975:148::o:0;20274:144::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20406:4:::1;20364:31;:39;20396:6;20364:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20274:144:::0;;:::o;20731:135::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20823:8:::1;20816:25;;;20842:7;:5;:7::i;:::-;20851:6;20816:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20731:135:::0;;:::o;6671:78::-;6708:7;6735:6;;;;;;;;;;;6728:13;;6671:78;:::o;14202:25::-;;;;;;;;;;;;;:::o;2066:103::-;2121:13;2154:7;2147:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2066:103;:::o;15450:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20611:112::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20687:7:::1;:5;:7::i;:::-;20679:25;;:36;20705:9;20679:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20611:112:::0;:::o;15204:27::-;;;;:::o;3682:268::-;3774:4;3791:129;3800:12;:10;:12::i;:::-;3814:7;3823:96;3862:15;3823:96;;;;;;;;;;;;;;;;;:11;:25;3835:12;:10;:12::i;:::-;3823:25;;;;;;;;;;;;;;;:34;3849:7;3823:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3791:8;:129::i;:::-;3938:4;3931:11;;3682:268;;;;:::o;2549:174::-;2634:4;2651:42;2661:12;:10;:12::i;:::-;2675:9;2686:6;2651:9;:42::i;:::-;2711:4;2704:11;;2549:174;;;;:::o;14545:22::-;;;;;;;;;;;;;:::o;18013:143::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18078:4:::1;18066:9;;:16;;;;;;;;;;;;;;;;;;18107:4;18093:11;;:18;;;;;;;;;;;;;;;;;;18147:1;18132:12;:16;;;;:::i;:::-;18122:7;:26;;;;18013:143::o:0;19984:132::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20100:8:::1;20069:19;:28;20089:7;20069:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19984:132:::0;;:::o;20428:177::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20521:13:::1;20513:21;;:4;:21;;;;20505:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20592:5;20573:10;:16;20584:4;20573:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20428:177:::0;;:::o;18866:271::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19019:3:::1;19003:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18993:4;18976:13;18960;:11;:13::i;:::-;:29;;;;:::i;:::-;18959:38;;;;:::i;:::-;18958:65;;18950:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;19125:4;19108:13;19092;:11;:13::i;:::-;:29;;;;:::i;:::-;19091:38;;;;:::i;:::-;19073:15;:56;;;;18866:271:::0;:::o;14852:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20874:169::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20986:16:::1;20968:15;;:34;;;;;;;;;;;;;;;;;;21025:10;21013:9;;:22;;;;;;;;;;;;;;;;;;20874:169:::0;;:::o;2737:150::-;2825:7;2852:11;:18;2864:5;2852:18;;;;;;;;;;;;;;;:27;2871:7;2852:27;;;;;;;;;;;;;;;;2845:34;;2737:150;;;;:::o;20122:146::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20252:8:::1;20214:26;:35;20241:7;20214:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20122:146:::0;;:::o;7137:244::-;6892:12;:10;:12::i;:::-;6882:22;;:6;;;;;;;;;;;:22;;;6874:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7246:1:::1;7226:22;;:8;:22;;;;7218:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7336:8;7307:38;;7328:6;;;;;;;;;;;7307:38;;;;;;;;;;;;7365:8;7356:6;;:17;;;;;;;;;;;;;;;;;;7137:244:::0;:::o;15666:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14086:::-;;;:::o;4936:180::-;4993:7;5013:9;5029:1;5025;:5;;;;:::i;:::-;5013:17;;5054:1;5049;:6;;5041:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5107:1;5100:8;;;4936:180;;;;:::o;1386:97::-;1438:7;1465:10;1458:17;;1386:97;:::o;4671:220::-;4829:6;4799:11;:18;4811:5;4799:18;;;;;;;;;;;;;;;:27;4818:7;4799:27;;;;;;;;;;;;;;;:36;;;;4867:7;4851:32;;4860:5;4851:32;;;4876:6;4851:32;;;;;;:::i;:::-;;;;;;;;4671:220;;;:::o;21184:3261::-;21351:1;21341:6;:11;21337:102;;;21369:37;21385:6;21393:9;21404:1;21369:15;:37::i;:::-;21421:7;;21337:102;21479:7;:5;:7::i;:::-;21469:17;;:6;:17;;;;:54;;;;;21516:7;:5;:7::i;:::-;21503:20;;:9;:20;;;;21469:54;:82;;;;;21541:10;;;;;;;;;;;21540:11;21469:82;21451:849;;;21585:9;;;;;;;;;;;21580:147;;21623:19;:27;21643:6;21623:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;21654:19;:30;21674:9;21654:30;;;;;;;;;;;;;;;;;;;;;;;;;21623:61;21615:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21580:147;21745:10;:18;21756:6;21745:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21768:31;:42;21800:9;21768:42;;;;;;;;;;;;;;;;;;;;;;;;;21767:43;21745:65;21741:360;;;21849:12;;21839:6;:22;;21831:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21741:360;;;21934:10;:21;21945:9;21934:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21960:31;:39;21992:6;21960:39;;;;;;;;;;;;;;;;;;;;;;;;;21959:40;21934:65;21930:171;;;22038:13;;22028:6;:23;;22020:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21930:171;21741:360;22122:26;:37;22149:9;22122:37;;;;;;;;;;;;;;;;;;;;;;;;;22117:159;;22221:15;;22197:20;22207:9;22197;:20::i;:::-;22188:6;:29;;;;:::i;:::-;:48;;22180:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22117:159;21451:849;22326:28;22357:24;22375:4;22357:9;:24::i;:::-;22326:55;;22395:12;22434:19;;22410:20;:43;;22395:58;;22484:7;:35;;;;;22508:11;;;;;;;;;;;22484:35;:63;;;;;22537:10;;;;;;;;;;;22536:11;22484:63;:101;;;;;22564:10;:21;22575:9;22564:21;;;;;;;;;;;;;;;;;;;;;;;;;22484:101;:146;;;;;22603:19;:27;22623:6;22603:27;;;;;;;;;;;;;;;;;;;;;;;;;22602:28;22484:146;:194;;;;;22648:19;:30;22668:9;22648:30;;;;;;;;;;;;;;;;;;;;;;;;;22647:31;22484:194;22466:326;;;22718:4;22705:10;;:17;;;;;;;;;;;;;;;;;;22737:10;:8;:10::i;:::-;22775:5;22762:10;;:18;;;;;;;;;;;;;;;;;;22466:326;22805:12;22821:10;;;;;;;;;;;22820:11;22805:26;;22933:19;:27;22953:6;22933:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;22964:19;:30;22984:9;22964:30;;;;;;;;;;;;;;;;;;;;;;;;;22933:61;22929:109;;;23021:5;23011:15;;22929:109;23139:7;23135:1248;;;23163:12;23212:7;;23197:12;:22;23194:1036;;;23247:23;23266:3;23247:14;23258:2;23247:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;23240:30;;23325:2;23319;23312:4;:9;;;;:::i;:::-;23311:16;;;;:::i;:::-;23289:18;;:38;;;;;;;:::i;:::-;;;;;;;;23375:2;23370:1;23363:4;:8;;;;:::i;:::-;23362:15;;;;:::i;:::-;23346:12;;:31;;;;;;;:::i;:::-;;;;;;;;23194:1036;;;23403:10;:21;23414:9;23403:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;23450:1;23428:5;:19;;;;;;;;;;;;:23;;;23403:48;23399:831;;;23479:40;23515:3;23479:31;23490:5;:19;;;;;;;;;;;;23479:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23472:47;;23592:5;:19;;;;;;;;;;;;23560:51;;23567:5;:22;;;;;;;;;;;;23560:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23538:18;;:73;;;;;;;:::i;:::-;;;;;;;;23684:5;:19;;;;;;;;;;;;23652:51;;23659:5;:22;;;;;;;;;;;;23652:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23630:18;;:73;;;;;;;:::i;:::-;;;;;;;;23764:5;:19;;;;;;;;;;;;23738:45;;23745:5;:16;;;;;;;;;;;;23738:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;23722:12;;:61;;;;;;;:::i;:::-;;;;;;;;23399:831;;;23845:10;:18;23856:6;23845:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;23888:1;23867:5;:18;;;;;;;;;;;;:22;;;23845:44;23841:389;;;23917:39;23952:3;23917:30;23928:5;:18;;;;;;;;;;;;23917:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;23910:46;;24028:5;:18;;;;;;;;;;;;23997:49;;24004:5;:21;;;;;;;;;;;;23997:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;23975:18;;:71;;;;;;;:::i;:::-;;;;;;;;24118:5;:18;;;;;;;;;;;;24087:49;;24094:5;:21;;;;;;;;;;;;24087:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;24065:18;;:71;;;;;;;:::i;:::-;;;;;;;;24196:5;:18;;;;;;;;;;;;24171:43;;24178:5;:15;;;;;;;;;;;;24171:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;24155:12;;:59;;;;;;;:::i;:::-;;;;;;;;23841:389;23399:831;23194:1036;24257:1;24250:4;:8;24246:93;;;24279:44;24295:6;24311:4;24318;24279:15;:44::i;:::-;24246:93;24365:4;24355:14;;;;;:::i;:::-;;;23148:1235;23135:1248;24395:42;24411:6;24419:9;24430:6;24395:15;:42::i;:::-;21316:3129;;;21184:3261;;;;:::o;5277:191::-;5362:7;5395:1;5390;:6;;5398:12;5382:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5422:9;5438:1;5434;:5;;;;:::i;:::-;5422:17;;5459:1;5452:8;;;5277:191;;;;;:::o;3964:358::-;4126:71;4148:6;4126:71;;;;;;;;;;;;;;;;;:9;:17;4136:6;4126:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4106:9;:17;4116:6;4106:17;;;;;;;;;;;;;;;:91;;;;4231:32;4256:6;4231:9;:20;4241:9;4231:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4208:9;:20;4218:9;4208:20;;;;;;;;;;;;;;;:55;;;;4296:9;4279:35;;4288:6;4279:35;;;4307:6;4279:35;;;;;;:::i;:::-;;;;;;;;3964:358;;;:::o;25373:1565::-;25412:28;25443:24;25461:4;25443:9;:24::i;:::-;25412:55;;25478:14;25537:12;;25516:18;;25495;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;25478:71;;25560:12;25613:1;25589:20;:25;:40;;;;25628:1;25618:6;:11;25589:40;25585:57;;;25633:7;;;;;25585:57;25703:2;25681:19;;:24;;;;:::i;:::-;25658:20;:47;25654:127;;;25767:2;25745:19;;:24;;;;:::i;:::-;25722:47;;25654:127;25842:23;25921:1;25912:6;25891:18;;25868:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;25842:80;;25933:26;25962:41;25987:15;25962:20;:24;;:41;;;;:::i;:::-;25933:70;;26017:25;26045:21;26017:49;;26079:36;26096:18;26079:16;:36::i;:::-;26130:18;26151:44;26177:17;26151:21;:25;;:44;;;;:::i;:::-;26130:65;;26209:23;26235:46;26274:6;26235:34;26250:18;;26235:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;26209:72;;26292:17;26312:40;26345:6;26312:28;26327:12;;26312:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;26292:60;;26363:23;26421:9;26403:15;:27;;;;:::i;:::-;26389:10;:42;;;;:::i;:::-;26363:68;;26467:1;26446:18;:22;;;;26500:1;26479:18;:22;;;;26527:1;26512:12;:16;;;;26565:1;26547:15;:19;:42;;;;;26588:1;26570:15;:19;26547:42;26543:192;;;26606:46;26619:15;26636;26606:12;:46::i;:::-;26672:51;26687:18;26707:15;26672:51;;;;;;;:::i;:::-;;;;;;;;26543:192;26768:9;;;;;;;;;;;26760:23;;26817:15;26793:21;:39;;;;:::i;:::-;26760:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26747:93;;;;;26872:15;;;;;;;;;;;26864:29;;26902:21;26864:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26851:79;;;;;25401:1537;;;;;;;;;;25373:1565;:::o;5476:256::-;5533:7;5568:1;5563;:6;5559:47;;;5593:1;5586:8;;;;5559:47;5619:9;5635:1;5631;:5;;;;:::i;:::-;5619:17;;5664:1;5659;5655;:5;;;;:::i;:::-;:10;5647:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5723:1;5716:8;;;5476:256;;;;;:::o;5743:131::-;5800:7;5827:39;5831:1;5834;5827:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5820:46;;5743:131;;;;:::o;5129:135::-;5186:7;5213:43;5217:1;5220;5213:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5206:50;;5129:135;;;;:::o;24453:554::-;24577:21;24615:1;24601:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24577:40;;24646:4;24628;24633:1;24628:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24672:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24662:4;24667:1;24662:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24698:49;24715:4;24730:6;24739:7;24698:8;:49::i;:::-;24786:6;:57;;;24858:7;24880:1;24924:4;24951;24971:15;24786:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24504:503;24453:554;:::o;25015:350::-;25159:49;25176:4;25191:6;25200:7;25159:8;:49::i;:::-;25251:6;:22;;;25282:9;25303:4;25310:7;25319:1;25322;25334:4;25341:15;25251:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25015:350;;:::o;5886:277::-;5971:7;6003:1;5999;:5;6006:12;5991:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6030:9;6046:1;6042;:5;;;;:::i;:::-;6030:17;;6154:1;6147:8;;;5886:277;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:619::-;4738:6;4746;4754;4803:2;4791:9;4782:7;4778:23;4774:32;4771:119;;;4809:79;;:::i;:::-;4771:119;4929:1;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4900:117;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;5184:2;5210:53;5255:7;5246:6;5235:9;5231:22;5210:53;:::i;:::-;5200:63;;5155:118;4661:619;;;;;:::o;5286:86::-;5321:7;5361:4;5354:5;5350:16;5339:27;;5286:86;;;:::o;5378:112::-;5461:22;5477:5;5461:22;:::i;:::-;5456:3;5449:35;5378:112;;:::o;5496:214::-;5585:4;5623:2;5612:9;5608:18;5600:26;;5636:67;5700:1;5689:9;5685:17;5676:6;5636:67;:::i;:::-;5496:214;;;;:::o;5716:118::-;5787:22;5803:5;5787:22;:::i;:::-;5780:5;5777:33;5767:61;;5824:1;5821;5814:12;5767:61;5716:118;:::o;5840:135::-;5884:5;5922:6;5909:20;5900:29;;5938:31;5963:5;5938:31;:::i;:::-;5840:135;;;;:::o;5981:1033::-;6073:6;6081;6089;6097;6105;6113;6162:3;6150:9;6141:7;6137:23;6133:33;6130:120;;;6169:79;;:::i;:::-;6130:120;6289:1;6314:51;6357:7;6348:6;6337:9;6333:22;6314:51;:::i;:::-;6304:61;;6260:115;6414:2;6440:51;6483:7;6474:6;6463:9;6459:22;6440:51;:::i;:::-;6430:61;;6385:116;6540:2;6566:51;6609:7;6600:6;6589:9;6585:22;6566:51;:::i;:::-;6556:61;;6511:116;6666:2;6692:51;6735:7;6726:6;6715:9;6711:22;6692:51;:::i;:::-;6682:61;;6637:116;6792:3;6819:51;6862:7;6853:6;6842:9;6838:22;6819:51;:::i;:::-;6809:61;;6763:117;6919:3;6946:51;6989:7;6980:6;6969:9;6965:22;6946:51;:::i;:::-;6936:61;;6890:117;5981:1033;;;;;;;;:::o;7020:118::-;7107:24;7125:5;7107:24;:::i;:::-;7102:3;7095:37;7020:118;;:::o;7144:222::-;7237:4;7275:2;7264:9;7260:18;7252:26;;7288:71;7356:1;7345:9;7341:17;7332:6;7288:71;:::i;:::-;7144:222;;;;:::o;7372:329::-;7431:6;7480:2;7468:9;7459:7;7455:23;7451:32;7448:119;;;7486:79;;:::i;:::-;7448:119;7606:1;7631:53;7676:7;7667:6;7656:9;7652:22;7631:53;:::i;:::-;7621:63;;7577:117;7372:329;;;;:::o;7707:116::-;7777:21;7792:5;7777:21;:::i;:::-;7770:5;7767:32;7757:60;;7813:1;7810;7803:12;7757:60;7707:116;:::o;7829:133::-;7872:5;7910:6;7897:20;7888:29;;7926:30;7950:5;7926:30;:::i;:::-;7829:133;;;;:::o;7968:468::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:50;8411:7;8402:6;8391:9;8387:22;8369:50;:::i;:::-;8359:60;;8314:115;7968:468;;;;;:::o;8442:933::-;8699:4;8737:3;8726:9;8722:19;8714:27;;8751:67;8815:1;8804:9;8800:17;8791:6;8751:67;:::i;:::-;8828:68;8892:2;8881:9;8877:18;8868:6;8828:68;:::i;:::-;8906;8970:2;8959:9;8955:18;8946:6;8906:68;:::i;:::-;8984;9048:2;9037:9;9033:18;9024:6;8984:68;:::i;:::-;9062:69;9126:3;9115:9;9111:19;9102:6;9062:69;:::i;:::-;9141;9205:3;9194:9;9190:19;9181:6;9141:69;:::i;:::-;9220;9284:3;9273:9;9269:19;9260:6;9220:69;:::i;:::-;9299;9363:3;9352:9;9348:19;9339:6;9299:69;:::i;:::-;8442:933;;;;;;;;;;;:::o;9381:474::-;9449:6;9457;9506:2;9494:9;9485:7;9481:23;9477:32;9474:119;;;9512:79;;:::i;:::-;9474:119;9632:1;9657:53;9702:7;9693:6;9682:9;9678:22;9657:53;:::i;:::-;9647:63;;9603:117;9759:2;9785:53;9830:7;9821:6;9810:9;9806:22;9785:53;:::i;:::-;9775:63;;9730:118;9381:474;;;;;:::o;9861:60::-;9889:3;9910:5;9903:12;;9861:60;;;:::o;9927:142::-;9977:9;10010:53;10028:34;10037:24;10055:5;10037:24;:::i;:::-;10028:34;:::i;:::-;10010:53;:::i;:::-;9997:66;;9927:142;;;:::o;10075:126::-;10125:9;10158:37;10189:5;10158:37;:::i;:::-;10145:50;;10075:126;;;:::o;10207:153::-;10284:9;10317:37;10348:5;10317:37;:::i;:::-;10304:50;;10207:153;;;:::o;10366:185::-;10480:64;10538:5;10480:64;:::i;:::-;10475:3;10468:77;10366:185;;:::o;10557:276::-;10677:4;10715:2;10704:9;10700:18;10692:26;;10728:98;10823:1;10812:9;10808:17;10799:6;10728:98;:::i;:::-;10557:276;;;;:::o;10839:180::-;10887:77;10884:1;10877:88;10984:4;10981:1;10974:15;11008:4;11005:1;10998:15;11025:320;11069:6;11106:1;11100:4;11096:12;11086:22;;11153:1;11147:4;11143:12;11174:18;11164:81;;11230:4;11222:6;11218:17;11208:27;;11164:81;11292:2;11284:6;11281:14;11261:18;11258:38;11255:84;;;11311:18;;:::i;:::-;11255:84;11076:269;11025:320;;;:::o;11351:182::-;11491:34;11487:1;11479:6;11475:14;11468:58;11351:182;:::o;11539:366::-;11681:3;11702:67;11766:2;11761:3;11702:67;:::i;:::-;11695:74;;11778:93;11867:3;11778:93;:::i;:::-;11896:2;11891:3;11887:12;11880:19;;11539:366;;;:::o;11911:419::-;12077:4;12115:2;12104:9;12100:18;12092:26;;12164:9;12158:4;12154:20;12150:1;12139:9;12135:17;12128:47;12192:131;12318:4;12192:131;:::i;:::-;12184:139;;11911:419;;;:::o;12336:180::-;12384:77;12381:1;12374:88;12481:4;12478:1;12471:15;12505:4;12502:1;12495:15;12522:180;12570:77;12567:1;12560:88;12667:4;12664:1;12657:15;12691:4;12688:1;12681:15;12708:185;12748:1;12765:20;12783:1;12765:20;:::i;:::-;12760:25;;12799:20;12817:1;12799:20;:::i;:::-;12794:25;;12838:1;12828:35;;12843:18;;:::i;:::-;12828:35;12885:1;12882;12878:9;12873:14;;12708:185;;;;:::o;12899:348::-;12939:7;12962:20;12980:1;12962:20;:::i;:::-;12957:25;;12996:20;13014:1;12996:20;:::i;:::-;12991:25;;13184:1;13116:66;13112:74;13109:1;13106:81;13101:1;13094:9;13087:17;13083:105;13080:131;;;13191:18;;:::i;:::-;13080:131;13239:1;13236;13232:9;13221:20;;12899:348;;;;:::o;13253:222::-;13393:34;13389:1;13381:6;13377:14;13370:58;13462:5;13457:2;13449:6;13445:15;13438:30;13253:222;:::o;13481:366::-;13623:3;13644:67;13708:2;13703:3;13644:67;:::i;:::-;13637:74;;13720:93;13809:3;13720:93;:::i;:::-;13838:2;13833:3;13829:12;13822:19;;13481:366;;;:::o;13853:419::-;14019:4;14057:2;14046:9;14042:18;14034:26;;14106:9;14100:4;14096:20;14092:1;14081:9;14077:17;14070:47;14134:131;14260:4;14134:131;:::i;:::-;14126:139;;13853:419;;;:::o;14278:223::-;14418:34;14414:1;14406:6;14402:14;14395:58;14487:6;14482:2;14474:6;14470:15;14463:31;14278:223;:::o;14507:366::-;14649:3;14670:67;14734:2;14729:3;14670:67;:::i;:::-;14663:74;;14746:93;14835:3;14746:93;:::i;:::-;14864:2;14859:3;14855:12;14848:19;;14507:366;;;:::o;14879:419::-;15045:4;15083:2;15072:9;15068:18;15060:26;;15132:9;15126:4;15122:20;15118:1;15107:9;15103:17;15096:47;15160:131;15286:4;15160:131;:::i;:::-;15152:139;;14879:419;;;:::o;15304:237::-;15342:3;15361:18;15377:1;15361:18;:::i;:::-;15356:23;;15393:18;15409:1;15393:18;:::i;:::-;15388:23;;15483:1;15477:4;15473:12;15470:1;15467:19;15464:45;;;15489:18;;:::i;:::-;15464:45;15533:1;15530;15526:9;15519:16;;15304:237;;;;:::o;15547:179::-;15687:31;15683:1;15675:6;15671:14;15664:55;15547:179;:::o;15732:366::-;15874:3;15895:67;15959:2;15954:3;15895:67;:::i;:::-;15888:74;;15971:93;16060:3;15971:93;:::i;:::-;16089:2;16084:3;16080:12;16073:19;;15732:366;;;:::o;16104:419::-;16270:4;16308:2;16297:9;16293:18;16285:26;;16357:9;16351:4;16347:20;16343:1;16332:9;16328:17;16321:47;16385:131;16511:4;16385:131;:::i;:::-;16377:139;;16104:419;;;:::o;16529:332::-;16650:4;16688:2;16677:9;16673:18;16665:26;;16701:71;16769:1;16758:9;16754:17;16745:6;16701:71;:::i;:::-;16782:72;16850:2;16839:9;16835:18;16826:6;16782:72;:::i;:::-;16529:332;;;;;:::o;16867:137::-;16921:5;16952:6;16946:13;16937:22;;16968:30;16992:5;16968:30;:::i;:::-;16867:137;;;;:::o;17010:345::-;17077:6;17126:2;17114:9;17105:7;17101:23;17097:32;17094:119;;;17132:79;;:::i;:::-;17094:119;17252:1;17277:61;17330:7;17321:6;17310:9;17306:22;17277:61;:::i;:::-;17267:71;;17223:125;17010:345;;;;:::o;17361:305::-;17401:3;17420:20;17438:1;17420:20;:::i;:::-;17415:25;;17454:20;17472:1;17454:20;:::i;:::-;17449:25;;17608:1;17540:66;17536:74;17533:1;17530:81;17527:107;;;17614:18;;:::i;:::-;17527:107;17658:1;17655;17651:9;17644:16;;17361:305;;;;:::o;17672:173::-;17812:25;17808:1;17800:6;17796:14;17789:49;17672:173;:::o;17851:366::-;17993:3;18014:67;18078:2;18073:3;18014:67;:::i;:::-;18007:74;;18090:93;18179:3;18090:93;:::i;:::-;18208:2;18203:3;18199:12;18192:19;;17851:366;;;:::o;18223:419::-;18389:4;18427:2;18416:9;18412:18;18404:26;;18476:9;18470:4;18466:20;18462:1;18451:9;18447:17;18440:47;18504:131;18630:4;18504:131;:::i;:::-;18496:139;;18223:419;;;:::o;18648:221::-;18788:34;18784:1;18776:6;18772:14;18765:58;18857:4;18852:2;18844:6;18840:15;18833:29;18648:221;:::o;18875:366::-;19017:3;19038:67;19102:2;19097:3;19038:67;:::i;:::-;19031:74;;19114:93;19203:3;19114:93;:::i;:::-;19232:2;19227:3;19223:12;19216:19;;18875:366;;;:::o;19247:419::-;19413:4;19451:2;19440:9;19436:18;19428:26;;19500:9;19494:4;19490:20;19486:1;19475:9;19471:17;19464:47;19528:131;19654:4;19528:131;:::i;:::-;19520:139;;19247:419;;;:::o;19672:225::-;19812:34;19808:1;19800:6;19796:14;19789:58;19881:8;19876:2;19868:6;19864:15;19857:33;19672:225;:::o;19903:366::-;20045:3;20066:67;20130:2;20125:3;20066:67;:::i;:::-;20059:74;;20142:93;20231:3;20142:93;:::i;:::-;20260:2;20255:3;20251:12;20244:19;;19903:366;;;:::o;20275:419::-;20441:4;20479:2;20468:9;20464:18;20456:26;;20528:9;20522:4;20518:20;20514:1;20503:9;20499:17;20492:47;20556:131;20682:4;20556:131;:::i;:::-;20548:139;;20275:419;;;:::o;20700:177::-;20840:29;20836:1;20828:6;20824:14;20817:53;20700:177;:::o;20883:366::-;21025:3;21046:67;21110:2;21105:3;21046:67;:::i;:::-;21039:74;;21122:93;21211:3;21122:93;:::i;:::-;21240:2;21235:3;21231:12;21224:19;;20883:366;;;:::o;21255:419::-;21421:4;21459:2;21448:9;21444:18;21436:26;;21508:9;21502:4;21498:20;21494:1;21483:9;21479:17;21472:47;21536:131;21662:4;21536:131;:::i;:::-;21528:139;;21255:419;;;:::o;21680:172::-;21820:24;21816:1;21808:6;21804:14;21797:48;21680:172;:::o;21858:366::-;22000:3;22021:67;22085:2;22080:3;22021:67;:::i;:::-;22014:74;;22097:93;22186:3;22097:93;:::i;:::-;22215:2;22210:3;22206:12;22199:19;;21858:366;;;:::o;22230:419::-;22396:4;22434:2;22423:9;22419:18;22411:26;;22483:9;22477:4;22473:20;22469:1;22458:9;22454:17;22447:47;22511:131;22637:4;22511:131;:::i;:::-;22503:139;;22230:419;;;:::o;22655:178::-;22795:30;22791:1;22783:6;22779:14;22772:54;22655:178;:::o;22839:366::-;22981:3;23002:67;23066:2;23061:3;23002:67;:::i;:::-;22995:74;;23078:93;23167:3;23078:93;:::i;:::-;23196:2;23191:3;23187:12;23180:19;;22839:366;;;:::o;23211:419::-;23377:4;23415:2;23404:9;23400:18;23392:26;;23464:9;23458:4;23454:20;23450:1;23439:9;23435:17;23428:47;23492:131;23618:4;23492:131;:::i;:::-;23484:139;;23211:419;;;:::o;23636:179::-;23776:31;23772:1;23764:6;23760:14;23753:55;23636:179;:::o;23821:366::-;23963:3;23984:67;24048:2;24043:3;23984:67;:::i;:::-;23977:74;;24060:93;24149:3;24060:93;:::i;:::-;24178:2;24173:3;24169:12;24162:19;;23821:366;;;:::o;24193:419::-;24359:4;24397:2;24386:9;24382:18;24374:26;;24446:9;24440:4;24436:20;24432:1;24421:9;24417:17;24410:47;24474:131;24600:4;24474:131;:::i;:::-;24466:139;;24193:419;;;:::o;24618:169::-;24758:21;24754:1;24746:6;24742:14;24735:45;24618:169;:::o;24793:366::-;24935:3;24956:67;25020:2;25015:3;24956:67;:::i;:::-;24949:74;;25032:93;25121:3;25032:93;:::i;:::-;25150:2;25145:3;25141:12;25134:19;;24793:366;;;:::o;25165:419::-;25331:4;25369:2;25358:9;25354:18;25346:26;;25418:9;25412:4;25408:20;25404:1;25393:9;25389:17;25382:47;25446:131;25572:4;25446:131;:::i;:::-;25438:139;;25165:419;;;:::o;25590:191::-;25630:4;25650:20;25668:1;25650:20;:::i;:::-;25645:25;;25684:20;25702:1;25684:20;:::i;:::-;25679:25;;25723:1;25720;25717:8;25714:34;;;25728:18;;:::i;:::-;25714:34;25773:1;25770;25766:9;25758:17;;25590:191;;;;:::o;25787:332::-;25908:4;25946:2;25935:9;25931:18;25923:26;;25959:71;26027:1;26016:9;26012:17;26003:6;25959:71;:::i;:::-;26040:72;26108:2;26097:9;26093:18;26084:6;26040:72;:::i;:::-;25787:332;;;;;:::o;26125:147::-;26226:11;26263:3;26248:18;;26125:147;;;;:::o;26278:114::-;;:::o;26398:398::-;26557:3;26578:83;26659:1;26654:3;26578:83;:::i;:::-;26571:90;;26670:93;26759:3;26670:93;:::i;:::-;26788:1;26783:3;26779:11;26772:18;;26398:398;;;:::o;26802:379::-;26986:3;27008:147;27151:3;27008:147;:::i;:::-;27001:154;;27172:3;27165:10;;26802:379;;;:::o;27187:220::-;27327:34;27323:1;27315:6;27311:14;27304:58;27396:3;27391:2;27383:6;27379:15;27372:28;27187:220;:::o;27413:366::-;27555:3;27576:67;27640:2;27635:3;27576:67;:::i;:::-;27569:74;;27652:93;27741:3;27652:93;:::i;:::-;27770:2;27765:3;27761:12;27754:19;;27413:366;;;:::o;27785:419::-;27951:4;27989:2;27978:9;27974:18;27966:26;;28038:9;28032:4;28028:20;28024:1;28013:9;28009:17;28002:47;28066:131;28192:4;28066:131;:::i;:::-;28058:139;;27785:419;;;:::o;28210:180::-;28258:77;28255:1;28248:88;28355:4;28352:1;28345:15;28379:4;28376:1;28369:15;28396:180;28444:77;28441:1;28434:88;28541:4;28538:1;28531:15;28565:4;28562:1;28555:15;28582:143;28639:5;28670:6;28664:13;28655:22;;28686:33;28713:5;28686:33;:::i;:::-;28582:143;;;;:::o;28731:351::-;28801:6;28850:2;28838:9;28829:7;28825:23;28821:32;28818:119;;;28856:79;;:::i;:::-;28818:119;28976:1;29001:64;29057:7;29048:6;29037:9;29033:22;29001:64;:::i;:::-;28991:74;;28947:128;28731:351;;;;:::o;29088:85::-;29133:7;29162:5;29151:16;;29088:85;;;:::o;29179:158::-;29237:9;29270:61;29288:42;29297:32;29323:5;29297:32;:::i;:::-;29288:42;:::i;:::-;29270:61;:::i;:::-;29257:74;;29179:158;;;:::o;29343:147::-;29438:45;29477:5;29438:45;:::i;:::-;29433:3;29426:58;29343:147;;:::o;29496:114::-;29563:6;29597:5;29591:12;29581:22;;29496:114;;;:::o;29616:184::-;29715:11;29749:6;29744:3;29737:19;29789:4;29784:3;29780:14;29765:29;;29616:184;;;;:::o;29806:132::-;29873:4;29896:3;29888:11;;29926:4;29921:3;29917:14;29909:22;;29806:132;;;:::o;29944:108::-;30021:24;30039:5;30021:24;:::i;:::-;30016:3;30009:37;29944:108;;:::o;30058:179::-;30127:10;30148:46;30190:3;30182:6;30148:46;:::i;:::-;30226:4;30221:3;30217:14;30203:28;;30058:179;;;;:::o;30243:113::-;30313:4;30345;30340:3;30336:14;30328:22;;30243:113;;;:::o;30392:732::-;30511:3;30540:54;30588:5;30540:54;:::i;:::-;30610:86;30689:6;30684:3;30610:86;:::i;:::-;30603:93;;30720:56;30770:5;30720:56;:::i;:::-;30799:7;30830:1;30815:284;30840:6;30837:1;30834:13;30815:284;;;30916:6;30910:13;30943:63;31002:3;30987:13;30943:63;:::i;:::-;30936:70;;31029:60;31082:6;31029:60;:::i;:::-;31019:70;;30875:224;30862:1;30859;30855:9;30850:14;;30815:284;;;30819:14;31115:3;31108:10;;30516:608;;;30392:732;;;;:::o;31130:831::-;31393:4;31431:3;31420:9;31416:19;31408:27;;31445:71;31513:1;31502:9;31498:17;31489:6;31445:71;:::i;:::-;31526:80;31602:2;31591:9;31587:18;31578:6;31526:80;:::i;:::-;31653:9;31647:4;31643:20;31638:2;31627:9;31623:18;31616:48;31681:108;31784:4;31775:6;31681:108;:::i;:::-;31673:116;;31799:72;31867:2;31856:9;31852:18;31843:6;31799:72;:::i;:::-;31881:73;31949:3;31938:9;31934:19;31925:6;31881:73;:::i;:::-;31130:831;;;;;;;;:::o;31967:807::-;32216:4;32254:3;32243:9;32239:19;32231:27;;32268:71;32336:1;32325:9;32321:17;32312:6;32268:71;:::i;:::-;32349:72;32417:2;32406:9;32402:18;32393:6;32349:72;:::i;:::-;32431:80;32507:2;32496:9;32492:18;32483:6;32431:80;:::i;:::-;32521;32597:2;32586:9;32582:18;32573:6;32521:80;:::i;:::-;32611:73;32679:3;32668:9;32664:19;32655:6;32611:73;:::i;:::-;32694;32762:3;32751:9;32747:19;32738:6;32694:73;:::i;:::-;31967:807;;;;;;;;;:::o;32780:143::-;32837:5;32868:6;32862:13;32853:22;;32884:33;32911:5;32884:33;:::i;:::-;32780:143;;;;:::o;32929:663::-;33017:6;33025;33033;33082:2;33070:9;33061:7;33057:23;33053:32;33050:119;;;33088:79;;:::i;:::-;33050:119;33208:1;33233:64;33289:7;33280:6;33269:9;33265:22;33233:64;:::i;:::-;33223:74;;33179:128;33346:2;33372:64;33428:7;33419:6;33408:9;33404:22;33372:64;:::i;:::-;33362:74;;33317:129;33485:2;33511:64;33567:7;33558:6;33547:9;33543:22;33511:64;:::i;:::-;33501:74;;33456:129;32929:663;;;;;:::o

Swarm Source

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