ETH Price: $3,448.15 (+4.13%)

Token

NEWPEPE (PEPE)
 

Overview

Max Total Supply

420,690,000,000,000 PEPE

Holders

1,840 ( -0.054%)

Market

Price

$0.00 @ 0.000000 ETH (+1.48%)

Onchain Market Cap

$142,343.83

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,635,493,843.474667944235726176 PEPE

Value
$0.55 ( ~0.000159505698209942 Eth) [0.0004%]
0x0e549c8fce94050704a5e1bb92f0f70e54032b73
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Pepe is the most famous meme of all time. The frog has been reaching every corner of the earth, and is a symbol for so much. Pepe is a proof of the true power of meme magic, thanks to the power of anonymous communities and meme enthusiasts.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PEPE

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-11
*/

// SPDX-License-Identifier: MIT

// twitter(X) : https://twitter.com/pepeonerc
// telegram : https://t.me/pepeonerc
// website : https://newpepe.lol/

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 PEPE 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", "PEPE") {
 
        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 = 420690000000000 * 1e18;

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

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

        _fees.sellMarketingFee = 20;
        _fees.sellLiquidityFee = 3;
        _fees.sellDevFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;


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

        // 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"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001ad57600080fd5b506040518060400160405280600481526020017f50455045000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f504550450000000000000000000000000000000000000000000000000000000081525081600390805190602001906200023292919062000f31565b5080600490805190602001906200024b92919062000f31565b50505060006200026062000be660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb91906200104b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043057600080fd5b505afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b91906200104b565b6040518363ffffffff1660e01b81526004016200048a9291906200108e565b602060405180830381600087803b158015620004a557600080fd5b505af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e091906200104b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016013600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620005dd62000bee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006200069c62000bee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200075b62000bee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008ec6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c1860201b60201c565b5060006d14bddab3e51a57cff87a5000000090506064600282620009119190620010f4565b6200091d919062001184565b6008819055506064600282620009349190620010f4565b62000940919062001184565b6009819055506064600382620009579190620010f4565b62000963919062001184565b600a819055506127106001826200097b9190620010f4565b62000987919062001184565b600b81905550600e600d60000160016101000a81548160ff021916908360ff1602179055506001600d60000160036101000a81548160ff021916908360ff1602179055506000600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff1662000a2f9190620011c9565b62000a3b9190620011c9565b600d60000160006101000a81548160ff021916908360ff1602179055506014600d60000160056101000a81548160ff021916908360ff1602179055506003600d60000160076101000a81548160ff021916908360ff1602179055506000600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1662000afa9190620011c9565b62000b069190620011c9565b600d60000160046101000a81548160ff021916908360ff160217905550735d3c2dc991926a81430c17ac4b46844a88dcaf45600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735d3c2dc991926a81430c17ac4b46844a88dcaf45600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000bdf338262000c4660201b60201c565b50620013ec565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000c3c62000c2e62000be660201b60201c565b848462000de160201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cb09062001268565b60405180910390fd5b62000cd58160025462000ece60201b620022421790919060201c565b60028190555062000d33816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ece60201b620022421790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dd591906200129b565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ec191906200129b565b60405180910390a3505050565b600080828462000edf9190620012b8565b90508381101562000f27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f1e9062001365565b60405180910390fd5b8091505092915050565b82805462000f3f90620013b6565b90600052602060002090601f01602090048101928262000f63576000855562000faf565b82601f1062000f7e57805160ff191683800117855562000faf565b8280016001018555821562000faf579182015b8281111562000fae57825182559160200191906001019062000f91565b5b50905062000fbe919062000fc2565b5090565b5b8082111562000fdd57600081600090555060010162000fc3565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010138262000fe6565b9050919050565b620010258162001006565b81146200103157600080fd5b50565b60008151905062001045816200101a565b92915050565b60006020828403121562001064576200106362000fe1565b5b6000620010748482850162001034565b91505092915050565b620010888162001006565b82525050565b6000604082019050620010a560008301856200107d565b620010b460208301846200107d565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200110182620010bb565b91506200110e83620010bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200114a5762001149620010c5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200119182620010bb565b91506200119e83620010bb565b925082620011b157620011b062001155565b5b828204905092915050565b600060ff82169050919050565b6000620011d682620011bc565b9150620011e383620011bc565b92508260ff03821115620011fc57620011fb620010c5565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001250601f8362001207565b91506200125d8262001218565b602082019050919050565b60006020820190508181036000830152620012838162001241565b9050919050565b6200129581620010bb565b82525050565b6000602082019050620012b260008301846200128a565b92915050565b6000620012c582620010bb565b9150620012d283620010bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200130a5762001309620010c5565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200134d601b8362001207565b91506200135a8262001315565b602082019050919050565b6000602082019050818103600083015262001380816200133e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013cf57607f821691505b60208210811415620013e657620013e562001387565b5b50919050565b60805160a051614a2f6200143c600039600081816110950152611ae601526000818161222001528181613513015281816136030152818161362a015281816136c601526136ed0152614a2f6000f3fe6080604052600436106102345760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610877578063e16830a8146108b4578063f2fde38b146108dd578063f5b3c3bf14610906578063f887ea40146109435761023b565b8063c0246668146107a1578063c16dd4a4146107ca578063c18bc195146107f3578063d212a69a1461081c578063d3f6a1571461084e5761023b565b80639fccce32116100f25780639fccce32146106ba578063a457c2d7146106e5578063a9059cbb14610722578063b88631151461075f578063b9e418e71461078a5761023b565b80638da5cb5b146105d35780638ea5220f146105fe57806395d89b411461062957806396880b17146106545780639e252f00146106915761023b565b80633265e846116101bc5780636ddd1713116101805780636ddd17131461050257806370a082311461052d578063715018a61461056a5780637571336a146105815780638cd4426d146105aa5761023b565b80633265e846146103f7578063395093511461042057806349bd5a5e1461045d5780634fbee19314610488578063555467a1146104c55761023b565b806318160ddd1161020357806318160ddd1461030e5780631a8145bb146103395780631f3fed8f1461036457806323b872dd1461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561096e565b60405161026291906138a5565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613960565b610a00565b60405161029f91906139bb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139d6565b610a1e565b6040516102dc91906139bb565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613a03565b610a3e565b005b34801561031a57600080fd5b50610323610c0f565b6040516103309190613a52565b60405180910390f35b34801561034557600080fd5b5061034e610c19565b60405161035b9190613a52565b60405180910390f35b34801561037057600080fd5b50610379610c1f565b6040516103869190613a52565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a6d565b610c25565b6040516103c391906139bb565b60405180910390f35b3480156103d857600080fd5b506103e1610cfe565b6040516103ee9190613adc565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b23565b610d07565b005b34801561042c57600080fd5b5061044760048036038101906104429190613960565b610fe0565b60405161045491906139bb565b60405180910390f35b34801561046957600080fd5b50610472611093565b60405161047f9190613bbf565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906139d6565b6110b7565b6040516104bc91906139bb565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613bda565b61110d565b6040516104f991906139bb565b60405180910390f35b34801561050e57600080fd5b506105176111b6565b60405161052491906139bb565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906139d6565b6111c9565b6040516105619190613a52565b60405180910390f35b34801561057657600080fd5b5061057f611211565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613c33565b611369565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613960565b61145b565b005b3480156105df57600080fd5b506105e861158b565b6040516105f59190613bbf565b60405180910390f35b34801561060a57600080fd5b506106136115b5565b6040516106209190613bbf565b60405180910390f35b34801561063557600080fd5b5061063e6115db565b60405161064b91906138a5565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906139d6565b61166d565b60405161068891906139bb565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bda565b61168d565b005b3480156106c657600080fd5b506106cf611775565b6040516106dc9190613a52565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613960565b61177b565b60405161071991906139bb565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613960565b611848565b60405161075691906139bb565b60405180910390f35b34801561076b57600080fd5b50610774611866565b60405161078191906139bb565b60405180910390f35b34801561079657600080fd5b5061079f611879565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613c33565b61195b565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613c33565b611a4d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613bda565b611bce565b005b34801561082857600080fd5b50610831611d03565b604051610845989796959493929190613c73565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613cf1565b611da1565b005b34801561088357600080fd5b5061089e60048036038101906108999190613cf1565b611ebe565b6040516108ab9190613a52565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613c33565b611f45565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906139d6565b612037565b005b34801561091257600080fd5b5061092d600480360381019061092891906139d6565b6121fe565b60405161093a91906139bb565b60405180910390f35b34801561094f57600080fd5b5061095861221e565b6040516109659190613d90565b60405180910390f35b60606003805461097d90613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990613dda565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a14610a0d6122a0565b84846122a8565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a466122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613e58565b60405180910390fd5b6064610adf610c0f565b610ae99190613ed6565b6103e883610af5610c0f565b610aff9190613f07565b610b099190613ed6565b1015610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190613fd3565b60405180910390fd5b6064610b54610c0f565b610b5e9190613ed6565b6103e882610b6a610c0f565b610b749190613f07565b610b7e9190613ed6565b1015610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614065565b60405180910390fd5b6103e882610bcb610c0f565b610bd59190613f07565b610bdf9190613ed6565b6008819055506103e881610bf1610c0f565b610bfb9190613f07565b610c059190613ed6565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610c32848484612393565b610cf384610c3e6122a0565b610cee856040518060600160405280602881526020016149d260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b600190509392505050565b60006012905090565b610d0f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e58565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e3b9190614085565b610e459190614085565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610eff9190614085565b610f099190614085565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690614108565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614108565b60405180910390fd5b505050505050565b6000611089610fed6122a0565b846110848560016000610ffe6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6122a8565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111176122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e58565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112196122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113716122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613e58565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613e58565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61151661158b565b836040518363ffffffff1660e01b8152600401611534929190614128565b602060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190614166565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115ea90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613dda565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6116956122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e58565b60405180910390fd5b61172c61158b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611771573d6000803e3d6000fd5b5050565b60105481565b600061183e6117886122a0565b846118398560405180606001604052806025815260200161498760259139600160006117b26122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b6001905092915050565b600061185c6118556122a0565b8484612393565b6001905092915050565b600c60029054906101000a900460ff1681565b6118816122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e58565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436119539190614193565b601181905550565b6119636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613e58565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a556122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90613e58565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614235565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bd66122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613e58565b60405180910390fd5b6064611c6f610c0f565b611c799190613ed6565b6103e882611c85610c0f565b611c8f9190613f07565b611c999190613ed6565b1015611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906142c7565b60405180910390fd5b6103e881611ce6610c0f565b611cf09190613f07565b611cfa9190613ed6565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611da96122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613e58565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4d6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613e58565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61203f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614359565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008082846122519190614193565b905083811015612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906143c5565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123869190613a52565b60405180910390a3505050565b60008114156123ad576123a883836000612ecd565b612e64565b6123b561158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561242357506123f361158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243c5750600c60029054906101000a900460ff16155b156127c257600c60009054906101000a900460ff1661253657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614431565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262857600854811115612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a9061449d565b60405180910390fd5b612717565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cb5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271657600954811115612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614509565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127c157600a54612774836111c9565b8261277f9190614193565b11156127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614575565b60405180910390fd5b5b5b60006127cd306111c9565b90506000600b5482101590508080156127f25750600c60019054906101000a900460ff165b801561280b5750600c60029054906101000a900460ff16155b80156128605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128b65750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561290c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612950576001600c60026101000a81548160ff021916908315150217905550612934613077565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a065750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a1057600090505b8015612e55576000601154431015612ab257612a496064612a3b60638861336590919063ffffffff16565b6133e090919063ffffffff16565b90506063605e82612a5a9190613f07565b612a649190613ed6565b600e6000828254612a759190614193565b925050819055506063600582612a8b9190613f07565b612a959190613ed6565b60106000828254612aa69190614193565b92505081905550612e30565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2057506000600d60000160049054906101000a900460ff1660ff16115b15612c7257612b606064612b52600d60000160049054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612b999190613f07565b612ba39190613ed6565b600f6000828254612bb49190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612bf29190613f07565b612bfc9190613ed6565b600e6000828254612c0d9190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612c4b9190613f07565b612c559190613ed6565b60106000828254612c669190614193565b92505081905550612e2f565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce057506000600d60000160009054906101000a900460ff1660ff16115b15612e2e57612d206064612d12600d60000160009054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612d599190613f07565b612d639190613ed6565b600f6000828254612d749190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612db29190613f07565b612dbc9190613ed6565b600e6000828254612dcd9190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612e0b9190613f07565b612e159190613ed6565b60106000828254612e269190614193565b925050819055505b5b5b6000811115612e4557612e44873083612ecd565b5b8085612e519190614595565b9450505b612e60868686612ecd565b5050505b505050565b6000838311158290612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea891906138a5565b60405180910390fd5b5060008385612ec09190614595565b9050809150509392505050565b612f38816040518060600160405280602681526020016149ac602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fcb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306a9190613a52565b60405180910390a3505050565b6000613082306111c9565b90506000601054600e54600f546130999190614193565b6130a39190614193565b90506000808314806130b55750600082145b156130c257505050613363565b6014600b546130d19190613f07565b8311156130ea576014600b546130e79190613f07565b92505b6000600283600f54866130fd9190613f07565b6131079190613ed6565b6131119190613ed6565b90506000613128828661342a90919063ffffffff16565b9050600047905061313882613474565b600061314d824761342a90919063ffffffff16565b905060006131788761316a600e548561336590919063ffffffff16565b6133e090919063ffffffff16565b905060006131a3886131956010548661336590919063ffffffff16565b6133e090919063ffffffff16565b9050600081836131b39190614193565b846131be9190614595565b90506000600f819055506000600e8190555060006010819055506000871180156131e85750600081115b15613231576131f787826136c0565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516132289291906145c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476132769190614595565b60405161328290614623565b60006040518083038185875af1925050503d80600081146132bf576040519150601f19603f3d011682016040523d82523d6000602084013e6132c4565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161331090614623565b60006040518083038185875af1925050503d806000811461334d576040519150601f19603f3d011682016040523d82523d6000602084013e613352565b606091505b505080985050505050505050505050505b565b60008083141561337857600090506133da565b600082846133869190613f07565b90508284826133959190613ed6565b146133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc906146aa565b60405180910390fd5b809150505b92915050565b600061342283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a9565b905092915050565b600061346c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e69565b905092915050565b6000600267ffffffffffffffff811115613491576134906146ca565b5b6040519080825280602002602001820160405280156134bf5781602001602082028036833780820191505090505b50905030816000815181106134d7576134d66146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561357757600080fd5b505afa15801561358b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135af919061473d565b816001815181106135c3576135c26146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613628307f0000000000000000000000000000000000000000000000000000000000000000846122a8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161368a959493929190614863565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b505050505050565b6136eb307f0000000000000000000000000000000000000000000000000000000000000000846122a8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613750969594939291906148bd565b6060604051808303818588803b15801561376957600080fd5b505af115801561377d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a29190614933565b5050505050565b600080831182906137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e791906138a5565b60405180910390fd5b50600083856137ff9190613ed6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561384657808201518184015260208101905061382b565b83811115613855576000848401525b50505050565b6000601f19601f8301169050919050565b60006138778261380c565b6138818185613817565b9350613891818560208601613828565b61389a8161385b565b840191505092915050565b600060208201905081810360008301526138bf818461386c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f7826138cc565b9050919050565b613907816138ec565b811461391257600080fd5b50565b600081359050613924816138fe565b92915050565b6000819050919050565b61393d8161392a565b811461394857600080fd5b50565b60008135905061395a81613934565b92915050565b60008060408385031215613977576139766138c7565b5b600061398585828601613915565b92505060206139968582860161394b565b9150509250929050565b60008115159050919050565b6139b5816139a0565b82525050565b60006020820190506139d060008301846139ac565b92915050565b6000602082840312156139ec576139eb6138c7565b5b60006139fa84828501613915565b91505092915050565b60008060408385031215613a1a57613a196138c7565b5b6000613a288582860161394b565b9250506020613a398582860161394b565b9150509250929050565b613a4c8161392a565b82525050565b6000602082019050613a676000830184613a43565b92915050565b600080600060608486031215613a8657613a856138c7565b5b6000613a9486828701613915565b9350506020613aa586828701613915565b9250506040613ab68682870161394b565b9150509250925092565b600060ff82169050919050565b613ad681613ac0565b82525050565b6000602082019050613af16000830184613acd565b92915050565b613b0081613ac0565b8114613b0b57600080fd5b50565b600081359050613b1d81613af7565b92915050565b60008060008060008060c08789031215613b4057613b3f6138c7565b5b6000613b4e89828a01613b0e565b9650506020613b5f89828a01613b0e565b9550506040613b7089828a01613b0e565b9450506060613b8189828a01613b0e565b9350506080613b9289828a01613b0e565b92505060a0613ba389828a01613b0e565b9150509295509295509295565b613bb9816138ec565b82525050565b6000602082019050613bd46000830184613bb0565b92915050565b600060208284031215613bf057613bef6138c7565b5b6000613bfe8482850161394b565b91505092915050565b613c10816139a0565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496138c7565b5b6000613c5885828601613915565b9250506020613c6985828601613c1e565b9150509250929050565b600061010082019050613c89600083018b613acd565b613c96602083018a613acd565b613ca36040830189613acd565b613cb06060830188613acd565b613cbd6080830187613acd565b613cca60a0830186613acd565b613cd760c0830185613acd565b613ce460e0830184613acd565b9998505050505050505050565b60008060408385031215613d0857613d076138c7565b5b6000613d1685828601613915565b9250506020613d2785828601613915565b9150509250929050565b6000819050919050565b6000613d56613d51613d4c846138cc565b613d31565b6138cc565b9050919050565b6000613d6882613d3b565b9050919050565b6000613d7a82613d5d565b9050919050565b613d8a81613d6f565b82525050565b6000602082019050613da56000830184613d81565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613dab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e42602083613817565b9150613e4d82613e0c565b602082019050919050565b60006020820190508181036000830152613e7181613e35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ee18261392a565b9150613eec8361392a565b925082613efc57613efb613e78565b5b828204905092915050565b6000613f128261392a565b9150613f1d8361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5657613f55613ea7565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbd602383613817565b9150613fc882613f61565b604082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061404f602483613817565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b600061409082613ac0565b915061409b83613ac0565b92508260ff038211156140b1576140b0613ea7565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006140f2601d83613817565b91506140fd826140bc565b602082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600060408201905061413d6000830185613bb0565b61414a6020830184613a43565b9392505050565b60008151905061416081613c07565b92915050565b60006020828403121561417c5761417b6138c7565b5b600061418a84828501614151565b91505092915050565b600061419e8261392a565b91506141a98361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141de576141dd613ea7565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061421f601783613817565b915061422a826141e9565b602082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b1602283613817565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614343602683613817565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006143af601b83613817565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061441b601683613817565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614487601c83613817565b915061449282614451565b602082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006144f3601d83613817565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061455f601383613817565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a08261392a565b91506145ab8361392a565b9250828210156145be576145bd613ea7565b5b828203905092915050565b60006040820190506145de6000830185613a43565b6145eb6020830184613a43565b9392505050565b600081905092915050565b50565b600061460d6000836145f2565b9150614618826145fd565b600082019050919050565b600061462e82614600565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614694602183613817565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614737816138fe565b92915050565b600060208284031215614753576147526138c7565b5b600061476184828501614728565b91505092915050565b6000819050919050565b600061478f61478a6147858461476a565b613d31565b61392a565b9050919050565b61479f81614774565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147da816138ec565b82525050565b60006147ec83836147d1565b60208301905092915050565b6000602082019050919050565b6000614810826147a5565b61481a81856147b0565b9350614825836147c1565b8060005b8381101561485657815161483d88826147e0565b9750614848836147f8565b925050600181019050614829565b5085935050505092915050565b600060a0820190506148786000830188613a43565b6148856020830187614796565b81810360408301526148978186614805565b90506148a66060830185613bb0565b6148b36080830184613a43565b9695505050505050565b600060c0820190506148d26000830189613bb0565b6148df6020830188613a43565b6148ec6040830187614796565b6148f96060830186614796565b6149066080830185613bb0565b61491360a0830184613a43565b979650505050505050565b60008151905061492d81613934565b92915050565b60008060006060848603121561494c5761494b6138c7565b5b600061495a8682870161491e565b935050602061496b8682870161491e565b925050604061497c8682870161491e565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a3fba18a51b5c286257c0a8c51096d374c991917ee3489be400bbda5293fe8a364736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610877578063e16830a8146108b4578063f2fde38b146108dd578063f5b3c3bf14610906578063f887ea40146109435761023b565b8063c0246668146107a1578063c16dd4a4146107ca578063c18bc195146107f3578063d212a69a1461081c578063d3f6a1571461084e5761023b565b80639fccce32116100f25780639fccce32146106ba578063a457c2d7146106e5578063a9059cbb14610722578063b88631151461075f578063b9e418e71461078a5761023b565b80638da5cb5b146105d35780638ea5220f146105fe57806395d89b411461062957806396880b17146106545780639e252f00146106915761023b565b80633265e846116101bc5780636ddd1713116101805780636ddd17131461050257806370a082311461052d578063715018a61461056a5780637571336a146105815780638cd4426d146105aa5761023b565b80633265e846146103f7578063395093511461042057806349bd5a5e1461045d5780634fbee19314610488578063555467a1146104c55761023b565b806318160ddd1161020357806318160ddd1461030e5780631a8145bb146103395780631f3fed8f1461036457806323b872dd1461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561096e565b60405161026291906138a5565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613960565b610a00565b60405161029f91906139bb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139d6565b610a1e565b6040516102dc91906139bb565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613a03565b610a3e565b005b34801561031a57600080fd5b50610323610c0f565b6040516103309190613a52565b60405180910390f35b34801561034557600080fd5b5061034e610c19565b60405161035b9190613a52565b60405180910390f35b34801561037057600080fd5b50610379610c1f565b6040516103869190613a52565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a6d565b610c25565b6040516103c391906139bb565b60405180910390f35b3480156103d857600080fd5b506103e1610cfe565b6040516103ee9190613adc565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b23565b610d07565b005b34801561042c57600080fd5b5061044760048036038101906104429190613960565b610fe0565b60405161045491906139bb565b60405180910390f35b34801561046957600080fd5b50610472611093565b60405161047f9190613bbf565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906139d6565b6110b7565b6040516104bc91906139bb565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613bda565b61110d565b6040516104f991906139bb565b60405180910390f35b34801561050e57600080fd5b506105176111b6565b60405161052491906139bb565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906139d6565b6111c9565b6040516105619190613a52565b60405180910390f35b34801561057657600080fd5b5061057f611211565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613c33565b611369565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613960565b61145b565b005b3480156105df57600080fd5b506105e861158b565b6040516105f59190613bbf565b60405180910390f35b34801561060a57600080fd5b506106136115b5565b6040516106209190613bbf565b60405180910390f35b34801561063557600080fd5b5061063e6115db565b60405161064b91906138a5565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906139d6565b61166d565b60405161068891906139bb565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bda565b61168d565b005b3480156106c657600080fd5b506106cf611775565b6040516106dc9190613a52565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613960565b61177b565b60405161071991906139bb565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613960565b611848565b60405161075691906139bb565b60405180910390f35b34801561076b57600080fd5b50610774611866565b60405161078191906139bb565b60405180910390f35b34801561079657600080fd5b5061079f611879565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613c33565b61195b565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613c33565b611a4d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613bda565b611bce565b005b34801561082857600080fd5b50610831611d03565b604051610845989796959493929190613c73565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613cf1565b611da1565b005b34801561088357600080fd5b5061089e60048036038101906108999190613cf1565b611ebe565b6040516108ab9190613a52565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613c33565b611f45565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906139d6565b612037565b005b34801561091257600080fd5b5061092d600480360381019061092891906139d6565b6121fe565b60405161093a91906139bb565b60405180910390f35b34801561094f57600080fd5b5061095861221e565b6040516109659190613d90565b60405180910390f35b60606003805461097d90613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990613dda565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a14610a0d6122a0565b84846122a8565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a466122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613e58565b60405180910390fd5b6064610adf610c0f565b610ae99190613ed6565b6103e883610af5610c0f565b610aff9190613f07565b610b099190613ed6565b1015610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190613fd3565b60405180910390fd5b6064610b54610c0f565b610b5e9190613ed6565b6103e882610b6a610c0f565b610b749190613f07565b610b7e9190613ed6565b1015610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614065565b60405180910390fd5b6103e882610bcb610c0f565b610bd59190613f07565b610bdf9190613ed6565b6008819055506103e881610bf1610c0f565b610bfb9190613f07565b610c059190613ed6565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610c32848484612393565b610cf384610c3e6122a0565b610cee856040518060600160405280602881526020016149d260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b600190509392505050565b60006012905090565b610d0f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e58565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e3b9190614085565b610e459190614085565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610eff9190614085565b610f099190614085565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690614108565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614108565b60405180910390fd5b505050505050565b6000611089610fed6122a0565b846110848560016000610ffe6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6122a8565b6001905092915050565b7f000000000000000000000000647b364ee561b8a00245d724309b9fa5c72fa65c81565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111176122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e58565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112196122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113716122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613e58565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613e58565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61151661158b565b836040518363ffffffff1660e01b8152600401611534929190614128565b602060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190614166565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115ea90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613dda565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6116956122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e58565b60405180910390fd5b61172c61158b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611771573d6000803e3d6000fd5b5050565b60105481565b600061183e6117886122a0565b846118398560405180606001604052806025815260200161498760259139600160006117b26122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b6001905092915050565b600061185c6118556122a0565b8484612393565b6001905092915050565b600c60029054906101000a900460ff1681565b6118816122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e58565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506002436119539190614193565b601181905550565b6119636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613e58565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a556122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90613e58565b60405180910390fd5b7f000000000000000000000000647b364ee561b8a00245d724309b9fa5c72fa65c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614235565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bd66122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613e58565b60405180910390fd5b6064611c6f610c0f565b611c799190613ed6565b6103e882611c85610c0f565b611c8f9190613f07565b611c999190613ed6565b1015611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906142c7565b60405180910390fd5b6103e881611ce6610c0f565b611cf09190613f07565b611cfa9190613ed6565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611da96122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613e58565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4d6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613e58565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61203f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614359565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60008082846122519190614193565b905083811015612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906143c5565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123869190613a52565b60405180910390a3505050565b60008114156123ad576123a883836000612ecd565b612e64565b6123b561158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561242357506123f361158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243c5750600c60029054906101000a900460ff16155b156127c257600c60009054906101000a900460ff1661253657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614431565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262857600854811115612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a9061449d565b60405180910390fd5b612717565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cb5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271657600954811115612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614509565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127c157600a54612774836111c9565b8261277f9190614193565b11156127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614575565b60405180910390fd5b5b5b60006127cd306111c9565b90506000600b5482101590508080156127f25750600c60019054906101000a900460ff165b801561280b5750600c60029054906101000a900460ff16155b80156128605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128b65750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561290c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612950576001600c60026101000a81548160ff021916908315150217905550612934613077565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a065750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a1057600090505b8015612e55576000601154431015612ab257612a496064612a3b60638861336590919063ffffffff16565b6133e090919063ffffffff16565b90506063605e82612a5a9190613f07565b612a649190613ed6565b600e6000828254612a759190614193565b925050819055506063600582612a8b9190613f07565b612a959190613ed6565b60106000828254612aa69190614193565b92505081905550612e30565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2057506000600d60000160049054906101000a900460ff1660ff16115b15612c7257612b606064612b52600d60000160049054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612b999190613f07565b612ba39190613ed6565b600f6000828254612bb49190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612bf29190613f07565b612bfc9190613ed6565b600e6000828254612c0d9190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612c4b9190613f07565b612c559190613ed6565b60106000828254612c669190614193565b92505081905550612e2f565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce057506000600d60000160009054906101000a900460ff1660ff16115b15612e2e57612d206064612d12600d60000160009054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612d599190613f07565b612d639190613ed6565b600f6000828254612d749190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612db29190613f07565b612dbc9190613ed6565b600e6000828254612dcd9190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612e0b9190613f07565b612e159190613ed6565b60106000828254612e269190614193565b925050819055505b5b5b6000811115612e4557612e44873083612ecd565b5b8085612e519190614595565b9450505b612e60868686612ecd565b5050505b505050565b6000838311158290612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea891906138a5565b60405180910390fd5b5060008385612ec09190614595565b9050809150509392505050565b612f38816040518060600160405280602681526020016149ac602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fcb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306a9190613a52565b60405180910390a3505050565b6000613082306111c9565b90506000601054600e54600f546130999190614193565b6130a39190614193565b90506000808314806130b55750600082145b156130c257505050613363565b6014600b546130d19190613f07565b8311156130ea576014600b546130e79190613f07565b92505b6000600283600f54866130fd9190613f07565b6131079190613ed6565b6131119190613ed6565b90506000613128828661342a90919063ffffffff16565b9050600047905061313882613474565b600061314d824761342a90919063ffffffff16565b905060006131788761316a600e548561336590919063ffffffff16565b6133e090919063ffffffff16565b905060006131a3886131956010548661336590919063ffffffff16565b6133e090919063ffffffff16565b9050600081836131b39190614193565b846131be9190614595565b90506000600f819055506000600e8190555060006010819055506000871180156131e85750600081115b15613231576131f787826136c0565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516132289291906145c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476132769190614595565b60405161328290614623565b60006040518083038185875af1925050503d80600081146132bf576040519150601f19603f3d011682016040523d82523d6000602084013e6132c4565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161331090614623565b60006040518083038185875af1925050503d806000811461334d576040519150601f19603f3d011682016040523d82523d6000602084013e613352565b606091505b505080985050505050505050505050505b565b60008083141561337857600090506133da565b600082846133869190613f07565b90508284826133959190613ed6565b146133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc906146aa565b60405180910390fd5b809150505b92915050565b600061342283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a9565b905092915050565b600061346c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e69565b905092915050565b6000600267ffffffffffffffff811115613491576134906146ca565b5b6040519080825280602002602001820160405280156134bf5781602001602082028036833780820191505090505b50905030816000815181106134d7576134d66146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561357757600080fd5b505afa15801561358b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135af919061473d565b816001815181106135c3576135c26146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613628307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122a8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161368a959493929190614863565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b505050505050565b6136eb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122a8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613750969594939291906148bd565b6060604051808303818588803b15801561376957600080fd5b505af115801561377d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a29190614933565b5050505050565b600080831182906137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e791906138a5565b60405180910390fd5b50600083856137ff9190613ed6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561384657808201518184015260208101905061382b565b83811115613855576000848401525b50505050565b6000601f19601f8301169050919050565b60006138778261380c565b6138818185613817565b9350613891818560208601613828565b61389a8161385b565b840191505092915050565b600060208201905081810360008301526138bf818461386c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f7826138cc565b9050919050565b613907816138ec565b811461391257600080fd5b50565b600081359050613924816138fe565b92915050565b6000819050919050565b61393d8161392a565b811461394857600080fd5b50565b60008135905061395a81613934565b92915050565b60008060408385031215613977576139766138c7565b5b600061398585828601613915565b92505060206139968582860161394b565b9150509250929050565b60008115159050919050565b6139b5816139a0565b82525050565b60006020820190506139d060008301846139ac565b92915050565b6000602082840312156139ec576139eb6138c7565b5b60006139fa84828501613915565b91505092915050565b60008060408385031215613a1a57613a196138c7565b5b6000613a288582860161394b565b9250506020613a398582860161394b565b9150509250929050565b613a4c8161392a565b82525050565b6000602082019050613a676000830184613a43565b92915050565b600080600060608486031215613a8657613a856138c7565b5b6000613a9486828701613915565b9350506020613aa586828701613915565b9250506040613ab68682870161394b565b9150509250925092565b600060ff82169050919050565b613ad681613ac0565b82525050565b6000602082019050613af16000830184613acd565b92915050565b613b0081613ac0565b8114613b0b57600080fd5b50565b600081359050613b1d81613af7565b92915050565b60008060008060008060c08789031215613b4057613b3f6138c7565b5b6000613b4e89828a01613b0e565b9650506020613b5f89828a01613b0e565b9550506040613b7089828a01613b0e565b9450506060613b8189828a01613b0e565b9350506080613b9289828a01613b0e565b92505060a0613ba389828a01613b0e565b9150509295509295509295565b613bb9816138ec565b82525050565b6000602082019050613bd46000830184613bb0565b92915050565b600060208284031215613bf057613bef6138c7565b5b6000613bfe8482850161394b565b91505092915050565b613c10816139a0565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496138c7565b5b6000613c5885828601613915565b9250506020613c6985828601613c1e565b9150509250929050565b600061010082019050613c89600083018b613acd565b613c96602083018a613acd565b613ca36040830189613acd565b613cb06060830188613acd565b613cbd6080830187613acd565b613cca60a0830186613acd565b613cd760c0830185613acd565b613ce460e0830184613acd565b9998505050505050505050565b60008060408385031215613d0857613d076138c7565b5b6000613d1685828601613915565b9250506020613d2785828601613915565b9150509250929050565b6000819050919050565b6000613d56613d51613d4c846138cc565b613d31565b6138cc565b9050919050565b6000613d6882613d3b565b9050919050565b6000613d7a82613d5d565b9050919050565b613d8a81613d6f565b82525050565b6000602082019050613da56000830184613d81565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613dab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e42602083613817565b9150613e4d82613e0c565b602082019050919050565b60006020820190508181036000830152613e7181613e35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ee18261392a565b9150613eec8361392a565b925082613efc57613efb613e78565b5b828204905092915050565b6000613f128261392a565b9150613f1d8361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5657613f55613ea7565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbd602383613817565b9150613fc882613f61565b604082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061404f602483613817565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b600061409082613ac0565b915061409b83613ac0565b92508260ff038211156140b1576140b0613ea7565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006140f2601d83613817565b91506140fd826140bc565b602082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600060408201905061413d6000830185613bb0565b61414a6020830184613a43565b9392505050565b60008151905061416081613c07565b92915050565b60006020828403121561417c5761417b6138c7565b5b600061418a84828501614151565b91505092915050565b600061419e8261392a565b91506141a98361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141de576141dd613ea7565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061421f601783613817565b915061422a826141e9565b602082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b1602283613817565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614343602683613817565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006143af601b83613817565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061441b601683613817565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614487601c83613817565b915061449282614451565b602082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006144f3601d83613817565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061455f601383613817565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a08261392a565b91506145ab8361392a565b9250828210156145be576145bd613ea7565b5b828203905092915050565b60006040820190506145de6000830185613a43565b6145eb6020830184613a43565b9392505050565b600081905092915050565b50565b600061460d6000836145f2565b9150614618826145fd565b600082019050919050565b600061462e82614600565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614694602183613817565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614737816138fe565b92915050565b600060208284031215614753576147526138c7565b5b600061476184828501614728565b91505092915050565b6000819050919050565b600061478f61478a6147858461476a565b613d31565b61392a565b9050919050565b61479f81614774565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147da816138ec565b82525050565b60006147ec83836147d1565b60208301905092915050565b6000602082019050919050565b6000614810826147a5565b61481a81856147b0565b9350614825836147c1565b8060005b8381101561485657815161483d88826147e0565b9750614848836147f8565b925050600181019050614829565b5085935050505092915050565b600060a0820190506148786000830188613a43565b6148856020830187614796565b81810360408301526148978186614805565b90506148a66060830185613bb0565b6148b36080830184613a43565b9695505050505050565b600060c0820190506148d26000830189613bb0565b6148df6020830188613a43565b6148ec6040830187614796565b6148f96060830186614796565b6149066080830185613bb0565b61491360a0830184613a43565b979650505050505050565b60008151905061492d81613934565b92915050565b60008060006060848603121561494c5761494b6138c7565b5b600061495a8682870161491e565b935050602061496b8682870161491e565b925050604061497c8682870161491e565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a3fba18a51b5c286257c0a8c51096d374c991917ee3489be400bbda5293fe8a364736f6c63430008090033

Deployed Bytecode Sourcemap

13979:12925:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1933:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2880:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15347:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18359:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2267:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15131:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15091;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3062:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2162:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19106:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3430:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14102:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21012:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18191:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14474:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2388:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6954:148;;;;;;;;;;;;;:::i;:::-;;20235:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20692:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6650:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14169:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2045:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15417:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20572:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15171:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3661:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2528:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14512:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17974:143;;;;;;;;;;;;;:::i;:::-;;19945:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20389:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18827:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14819:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;20835:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2716:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20083:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7116:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15633:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14053;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1933:99;1986:13;2019:5;2012:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1933:99;:::o;2880:168::-;2962:4;2979:39;2988:12;:10;:12::i;:::-;3002:7;3011:6;2979:8;:39::i;:::-;3036:4;3029:11;;2880:168;;;;:::o;15347:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;18359:458::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18521:3:::1;18505:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18495:4;18482:9;18466:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18465:34;;;;:::i;:::-;18464:61;;18456:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18642:3;18626:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18616:4;18602:10;18586:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18585:35;;;;:::i;:::-;18584:62;;18576:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;18743:4;18730:9;18714:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18713:34;;;;:::i;:::-;18698:12;:49;;;;18805:4;18791:10;18775:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18774:35;;;;:::i;:::-;18758:13;:51;;;;18359:458:::0;;:::o;2267:107::-;2327:7;2354:12;;2347:19;;2267:107;:::o;15131:33::-;;;;:::o;15091:::-;;;;:::o;3062:354::-;3201:4;3218:36;3228:6;3236:9;3247:6;3218:9;:36::i;:::-;3265:121;3274:6;3282:12;:10;:12::i;:::-;3296:89;3334:6;3296:89;;;;;;;;;;;;;;;;;:11;:19;3308:6;3296:19;;;;;;;;;;;;;;;:33;3316:12;:10;:12::i;:::-;3296:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3265:8;:121::i;:::-;3404:4;3397:11;;3062:354;;;;;:::o;2162:92::-;2219:5;2244:2;2237:9;;2162:92;:::o;19106:827::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19311:16:::1;19287:5;:21;;;:40;;;;;;;;;;;;;;;;;;19362:16;19338:5;:21;;;:40;;;;;;;;;;;;;;;;;;19407:10;19389:5;:15;;;:28;;;;;;;;;;;;;;;;;;19497:5;:15;;;;;;;;;;;;19473:5;:21;;;;;;;;;;;;19449:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;19428:5;:18;;;:84;;;;;;;;;;;;;;;;;;19550:17;19525:5;:22;;;:42;;;;;;;;;;;;;;;;;;19603:17;19578:5;:22;;;:42;;;;;;;;;;;;;;;;;;19650:11;19631:5;:16;;;:30;;;;;;;;;;;;;;;;;;19744:5;:16;;;;;;;;;;;;19719:5;:22;;;;;;;;;;;;19694:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;19672:5;:19;;;:88;;;;;;;;;;;;;;;;;;19801:2;19779:5;:18;;;;;;;;;;;;:24;;;;19771:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19882:2;19859:5;:19;;;;;;;;;;;;:25;;;;19851:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19106:827:::0;;;;;;:::o;3430:217::-;3517:4;3534:83;3543:12;:10;:12::i;:::-;3557:7;3566:50;3605:10;3566:11;:25;3578:12;:10;:12::i;:::-;3566:25;;;;;;;;;;;;;;;:34;3592:7;3566:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3534:8;:83::i;:::-;3635:4;3628:11;;3430:217;;;;:::o;14102:38::-;;;:::o;21012:125::-;21077:4;21101:19;:28;21121:7;21101:28;;;;;;;;;;;;;;;;;;;;;;;;;21094:35;;21012:125;;;:::o;18191:158::-;18272:4;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18310:9:::1;18288:19;:31;;;;18337:4;18330:11;;18191:158:::0;;;:::o;14474:31::-;;;;;;;;;;;;;:::o;2388:126::-;2461:7;2488:9;:18;2498:7;2488:18;;;;;;;;;;;;;;;;2481:25;;2388:126;;;:::o;6954:148::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7061:1:::1;7024:40;;7045:6;;;;;;;;;;;7024:40;;;;;;;;;;;;7092:1;7075:6;;:19;;;;;;;;;;;;;;;;;;6954:148::o:0;20235:144::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20367:4:::1;20325:31;:39;20357:6;20325:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20235:144:::0;;:::o;20692:135::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20784:8:::1;20777:25;;;20803:7;:5;:7::i;:::-;20812:6;20777:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20692:135:::0;;:::o;6650:78::-;6687:7;6714:6;;;;;;;;;;;6707:13;;6650:78;:::o;14169:25::-;;;;;;;;;;;;;:::o;2045:103::-;2100:13;2133:7;2126:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2045:103;:::o;15417:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20572:112::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20648:7:::1;:5;:7::i;:::-;20640:25;;:36;20666:9;20640:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20572:112:::0;:::o;15171:27::-;;;;:::o;3661:268::-;3753:4;3770:129;3779:12;:10;:12::i;:::-;3793:7;3802:96;3841:15;3802:96;;;;;;;;;;;;;;;;;:11;:25;3814:12;:10;:12::i;:::-;3802:25;;;;;;;;;;;;;;;:34;3828:7;3802:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3770:8;:129::i;:::-;3917:4;3910:11;;3661:268;;;;:::o;2528:174::-;2613:4;2630:42;2640:12;:10;:12::i;:::-;2654:9;2665:6;2630:9;:42::i;:::-;2690:4;2683:11;;2528:174;;;;:::o;14512:22::-;;;;;;;;;;;;;:::o;17974:143::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18039:4:::1;18027:9;;:16;;;;;;;;;;;;;;;;;;18068:4;18054:11;;:18;;;;;;;;;;;;;;;;;;18108:1;18093:12;:16;;;;:::i;:::-;18083:7;:26;;;;17974:143::o:0;19945:132::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20061:8:::1;20030:19;:28;20050:7;20030:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19945:132:::0;;:::o;20389:177::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20482:13:::1;20474:21;;:4;:21;;;;20466:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20553:5;20534:10;:16;20545:4;20534:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20389:177:::0;;:::o;18827:271::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18980:3:::1;18964:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18954:4;18937:13;18921;:11;:13::i;:::-;:29;;;;:::i;:::-;18920:38;;;;:::i;:::-;18919:65;;18911:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;19086:4;19069:13;19053;:11;:13::i;:::-;:29;;;;:::i;:::-;19052:38;;;;:::i;:::-;19034:15;:56;;;;18827:271:::0;:::o;14819:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20835:169::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20947:16:::1;20929:15;;:34;;;;;;;;;;;;;;;;;;20986:10;20974:9;;:22;;;;;;;;;;;;;;;;;;20835:169:::0;;:::o;2716:150::-;2804:7;2831:11;:18;2843:5;2831:18;;;;;;;;;;;;;;;:27;2850:7;2831:27;;;;;;;;;;;;;;;;2824:34;;2716:150;;;;:::o;20083:146::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20213:8:::1;20175:26;:35;20202:7;20175:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20083:146:::0;;:::o;7116:244::-;6871:12;:10;:12::i;:::-;6861:22;;:6;;;;;;;;;;;:22;;;6853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7225:1:::1;7205:22;;:8;:22;;;;7197:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7315:8;7286:38;;7307:6;;;;;;;;;;;7286:38;;;;;;;;;;;;7344:8;7335:6;;:17;;;;;;;;;;;;;;;;;;7116:244:::0;:::o;15633:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14053:::-;;;:::o;4915:180::-;4972:7;4992:9;5008:1;5004;:5;;;;:::i;:::-;4992:17;;5033:1;5028;:6;;5020:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5086:1;5079:8;;;4915:180;;;;:::o;1365:97::-;1417:7;1444:10;1437:17;;1365:97;:::o;4650:220::-;4808:6;4778:11;:18;4790:5;4778:18;;;;;;;;;;;;;;;:27;4797:7;4778:27;;;;;;;;;;;;;;;:36;;;;4846:7;4830:32;;4839:5;4830:32;;;4855:6;4830:32;;;;;;:::i;:::-;;;;;;;;4650:220;;;:::o;21145:3261::-;21312:1;21302:6;:11;21298:102;;;21330:37;21346:6;21354:9;21365:1;21330:15;:37::i;:::-;21382:7;;21298:102;21440:7;:5;:7::i;:::-;21430:17;;:6;:17;;;;:54;;;;;21477:7;:5;:7::i;:::-;21464:20;;:9;:20;;;;21430:54;:82;;;;;21502:10;;;;;;;;;;;21501:11;21430:82;21412:849;;;21546:9;;;;;;;;;;;21541:147;;21584:19;:27;21604:6;21584:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;21615:19;:30;21635:9;21615:30;;;;;;;;;;;;;;;;;;;;;;;;;21584:61;21576:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21541:147;21706:10;:18;21717:6;21706:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21729:31;:42;21761:9;21729:42;;;;;;;;;;;;;;;;;;;;;;;;;21728:43;21706:65;21702:360;;;21810:12;;21800:6;:22;;21792:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21702:360;;;21895:10;:21;21906:9;21895:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21921:31;:39;21953:6;21921:39;;;;;;;;;;;;;;;;;;;;;;;;;21920:40;21895:65;21891:171;;;21999:13;;21989:6;:23;;21981:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21891:171;21702:360;22083:26;:37;22110:9;22083:37;;;;;;;;;;;;;;;;;;;;;;;;;22078:159;;22182:15;;22158:20;22168:9;22158;:20::i;:::-;22149:6;:29;;;;:::i;:::-;:48;;22141:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22078:159;21412:849;22287:28;22318:24;22336:4;22318:9;:24::i;:::-;22287:55;;22356:12;22395:19;;22371:20;:43;;22356:58;;22445:7;:35;;;;;22469:11;;;;;;;;;;;22445:35;:63;;;;;22498:10;;;;;;;;;;;22497:11;22445:63;:101;;;;;22525:10;:21;22536:9;22525:21;;;;;;;;;;;;;;;;;;;;;;;;;22445:101;:146;;;;;22564:19;:27;22584:6;22564:27;;;;;;;;;;;;;;;;;;;;;;;;;22563:28;22445:146;:194;;;;;22609:19;:30;22629:9;22609:30;;;;;;;;;;;;;;;;;;;;;;;;;22608:31;22445:194;22427:326;;;22679:4;22666:10;;:17;;;;;;;;;;;;;;;;;;22698:10;:8;:10::i;:::-;22736:5;22723:10;;:18;;;;;;;;;;;;;;;;;;22427:326;22766:12;22782:10;;;;;;;;;;;22781:11;22766:26;;22894:19;:27;22914:6;22894:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;22925:19;:30;22945:9;22925:30;;;;;;;;;;;;;;;;;;;;;;;;;22894:61;22890:109;;;22982:5;22972:15;;22890:109;23100:7;23096:1248;;;23124:12;23173:7;;23158:12;:22;23155:1036;;;23208:23;23227:3;23208:14;23219:2;23208:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;23201:30;;23286:2;23280;23273:4;:9;;;;:::i;:::-;23272:16;;;;:::i;:::-;23250:18;;:38;;;;;;;:::i;:::-;;;;;;;;23336:2;23331:1;23324:4;:8;;;;:::i;:::-;23323:15;;;;:::i;:::-;23307:12;;:31;;;;;;;:::i;:::-;;;;;;;;23155:1036;;;23364:10;:21;23375:9;23364:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;23411:1;23389:5;:19;;;;;;;;;;;;:23;;;23364:48;23360:831;;;23440:40;23476:3;23440:31;23451:5;:19;;;;;;;;;;;;23440:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23433:47;;23553:5;:19;;;;;;;;;;;;23521:51;;23528:5;:22;;;;;;;;;;;;23521:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23499:18;;:73;;;;;;;:::i;:::-;;;;;;;;23645:5;:19;;;;;;;;;;;;23613:51;;23620:5;:22;;;;;;;;;;;;23613:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23591:18;;:73;;;;;;;:::i;:::-;;;;;;;;23725:5;:19;;;;;;;;;;;;23699:45;;23706:5;:16;;;;;;;;;;;;23699:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;23683:12;;:61;;;;;;;:::i;:::-;;;;;;;;23360:831;;;23806:10;:18;23817:6;23806:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;23849:1;23828:5;:18;;;;;;;;;;;;:22;;;23806:44;23802:389;;;23878:39;23913:3;23878:30;23889:5;:18;;;;;;;;;;;;23878:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;23871:46;;23989:5;:18;;;;;;;;;;;;23958:49;;23965:5;:21;;;;;;;;;;;;23958:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;23936:18;;:71;;;;;;;:::i;:::-;;;;;;;;24079:5;:18;;;;;;;;;;;;24048:49;;24055:5;:21;;;;;;;;;;;;24048:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;24026:18;;:71;;;;;;;:::i;:::-;;;;;;;;24157:5;:18;;;;;;;;;;;;24132:43;;24139:5;:15;;;;;;;;;;;;24132:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;24116:12;;:59;;;;;;;:::i;:::-;;;;;;;;23802:389;23360:831;23155:1036;24218:1;24211:4;:8;24207:93;;;24240:44;24256:6;24272:4;24279;24240:15;:44::i;:::-;24207:93;24326:4;24316:14;;;;;:::i;:::-;;;23109:1235;23096:1248;24356:42;24372:6;24380:9;24391:6;24356:15;:42::i;:::-;21277:3129;;;21145:3261;;;;:::o;5256:191::-;5341:7;5374:1;5369;:6;;5377:12;5361:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5401:9;5417:1;5413;:5;;;;:::i;:::-;5401:17;;5438:1;5431:8;;;5256:191;;;;;:::o;3943:358::-;4105:71;4127:6;4105:71;;;;;;;;;;;;;;;;;:9;:17;4115:6;4105:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4085:9;:17;4095:6;4085:17;;;;;;;;;;;;;;;:91;;;;4210:32;4235:6;4210:9;:20;4220:9;4210:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4187:9;:20;4197:9;4187:20;;;;;;;;;;;;;;;:55;;;;4275:9;4258:35;;4267:6;4258:35;;;4286:6;4258:35;;;;;;:::i;:::-;;;;;;;;3943:358;;;:::o;25334:1565::-;25373:28;25404:24;25422:4;25404:9;:24::i;:::-;25373:55;;25439:14;25498:12;;25477:18;;25456;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;25439:71;;25521:12;25574:1;25550:20;:25;:40;;;;25589:1;25579:6;:11;25550:40;25546:57;;;25594:7;;;;;25546:57;25664:2;25642:19;;:24;;;;:::i;:::-;25619:20;:47;25615:127;;;25728:2;25706:19;;:24;;;;:::i;:::-;25683:47;;25615:127;25803:23;25882:1;25873:6;25852:18;;25829:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;25803:80;;25894:26;25923:41;25948:15;25923:20;:24;;:41;;;;:::i;:::-;25894:70;;25978:25;26006:21;25978:49;;26040:36;26057:18;26040:16;:36::i;:::-;26091:18;26112:44;26138:17;26112:21;:25;;:44;;;;:::i;:::-;26091:65;;26170:23;26196:46;26235:6;26196:34;26211:18;;26196:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;26170:72;;26253:17;26273:40;26306:6;26273:28;26288:12;;26273:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;26253:60;;26324:23;26382:9;26364:15;:27;;;;:::i;:::-;26350:10;:42;;;;:::i;:::-;26324:68;;26428:1;26407:18;:22;;;;26461:1;26440:18;:22;;;;26488:1;26473:12;:16;;;;26526:1;26508:15;:19;:42;;;;;26549:1;26531:15;:19;26508:42;26504:192;;;26567:46;26580:15;26597;26567:12;:46::i;:::-;26633:51;26648:18;26668:15;26633:51;;;;;;;:::i;:::-;;;;;;;;26504:192;26729:9;;;;;;;;;;;26721:23;;26778:15;26754:21;:39;;;;:::i;:::-;26721:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26708:93;;;;;26833:15;;;;;;;;;;;26825:29;;26863:21;26825:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26812:79;;;;;25362:1537;;;;;;;;;;25334:1565;:::o;5455:256::-;5512:7;5547:1;5542;:6;5538:47;;;5572:1;5565:8;;;;5538:47;5598:9;5614:1;5610;:5;;;;:::i;:::-;5598:17;;5643:1;5638;5634;:5;;;;:::i;:::-;:10;5626:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5702:1;5695:8;;;5455:256;;;;;:::o;5722:131::-;5779:7;5806:39;5810:1;5813;5806:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5799:46;;5722:131;;;;:::o;5108:135::-;5165:7;5192:43;5196:1;5199;5192:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5185:50;;5108:135;;;;:::o;24414:554::-;24538:21;24576:1;24562:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24538:40;;24607:4;24589;24594:1;24589:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24633:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24623:4;24628:1;24623:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24659:49;24676:4;24691:6;24700:7;24659:8;:49::i;:::-;24747:6;:57;;;24819:7;24841:1;24885:4;24912;24932:15;24747:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24465:503;24414:554;:::o;24976:350::-;25120:49;25137:4;25152:6;25161:7;25120:8;:49::i;:::-;25212:6;:22;;;25243:9;25264:4;25271:7;25280:1;25283;25295:4;25302:15;25212:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24976:350;;:::o;5865:277::-;5950:7;5982:1;5978;:5;5985:12;5970:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6009:9;6025:1;6021;:5;;;;:::i;:::-;6009:17;;6133:1;6126:8;;;5865: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://a3fba18a51b5c286257c0a8c51096d374c991917ee3489be400bbda5293fe8a3
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.