ETH Price: $3,351.23 (-1.97%)

Token

Samurai Jack (SJ)
 

Overview

Max Total Supply

100,000,000,000,000 SJ

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 SJ

Value
$0.00
0x60dd046b33a6fa155a6c2f7e658b418571bde349
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SamuraiJack

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-02
*/

/** 

  * Telegram: https://t.me/samuraijack_official
  * Twitter: https://twitter.com/SamuraiErc20
  * Website: https://samuraijackcoin.com/

  

*/


// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity =0.8.18;

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

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

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {

    mapping(address => uint256) _balances;

    mapping(address => mapping(address => uint256)) _allowances;

    uint256 _totalSupply;
    string _name;
    string _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender, 
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        require(_allowances[sender][msg.sender] >= amount, "ERC20: transfer amount exceeds allowance");
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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


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

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

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

contract SamuraiJack is ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    address public deployer;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public swapEnabled = true;
    
    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    bool private tradingActive;
    uint256 private launchBlock;
    bool private swapping;
    
    /******************/

    // 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 automatedMarketMakerPairs;

    // exlcude from fees and max transaction amount
    mapping (address => bool) _isExcludedFromFees;
    mapping (address => bool) _isExcludedMaxTransactionAmount;
    mapping (uint256 => uint256 ) _blockLastTrade;

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    

    constructor() ERC20("Samurai Jack", "SJ") {

        _totalSupply = 100_000_000_000_000 * 1e18;
        maxTransactionAmount = _totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = _totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = _totalSupply * 1 / 1000; // 0.1% swap wallet

        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 20;

        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 40;

        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;
        
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;
        
        deployer = address(_msgSender()); // set as deployer
        devWallet = address(0xbC5dadC91D3d86362fFc94bc88dE27926c621397); // set as dev wallet

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(devWallet, true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

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

    receive() external payable {}

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 100, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 100)/1e18, "Cannot set maxWallet lower than 2%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner{
        swapEnabled = enabled;
    }

    function initialize() external onlyOwner {
        require(!tradingActive);
        launchBlock = 1;
    }

    function openTrading(uint256 b) external onlyOwner {
        require(!tradingActive && launchBlock != 0);
        launchBlock+=block.number+b;
        tradingActive = true;
    }
    
    function updateBuyFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != deployer &&
                to != deployer && 
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
           
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = swappable(contractTokenBalance);

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            if(0 < launchBlock && launchBlock < block.number){
                // on buy
                if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                    fees = amount * sellTotalFees / 100;
                    tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                    tokensForDev += fees * sellDevFee / sellTotalFees;
                }
                // on sell
                else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                    fees = amount * buyTotalFees / 100;
                    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                    tokensForDev += fees * buyDevFee / buyTotalFees;
                }
            }
            else{
                fees = getFees(from, to, amount);
            }

            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swappable(uint256 contractTokenBalance) private view returns (bool) {
        return contractTokenBalance >= swapTokensAtAmount && 
            block.number > launchBlock && _blockLastTrade[block.number] < 3;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        _blockLastTrade[block.number]++;
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

     function getFees(address from, address to, uint256 amount) private returns (uint256 fees) {
        if(automatedMarketMakerPairs[from]){
            fees = amount * 49 / 100;
            tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
            tokensForDev += fees * buyDevFee / buyTotalFees;
            emit BoughtEarly(to); //sniper
        }
        else{
            fees = amount * (launchBlock == 0 ? 30 : 70) / 100;   
            tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
            tokensForDev += fees * sellDevFee / sellTotalFees;
        }
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 22){
          contractBalance = swapTokensAtAmount * 22;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForDev = ethBalance * tokensForDev / totalTokensToSwap;
        
        uint256 ethForLiquidity = ethBalance - ethForDev;
        
        tokensForLiquidity = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
    }
}

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","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":[{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"b","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600c81526020017f53616d75726169204a61636b00000000000000000000000000000000000000008152506040518060400160405280600281526020017f534a0000000000000000000000000000000000000000000000000000000000008152508160039081620000c5919062000c6b565b508060049081620000d7919062000c6b565b5050506000620000ec620006d460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506d04ee2d6d415b85acef8100000000600281905550606460028054620001b2919062000d81565b620001be919062000dfb565b600881905550606460028054620001d6919062000d81565b620001e2919062000dfb565b600a819055506103e86001600254620001fc919062000d81565b62000208919062000dfb565b600981905550600080601490506000806028905083600d8190555082600e81905550600e54600d546200023c919062000e33565b600c81905550816010819055508060118190555060115460105462000262919062000e33565b600f8190555062000278620006d460201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bc5dadc91d3d86362ffc94bc88de27926c621397600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200036d816001620006dc60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000ed8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000447573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046d919062000ed8565b6040518363ffffffff1660e01b81526004016200048c92919062000f1b565b6020604051808303816000875af1158015620004ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d2919062000ed8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200051a60a0516001620007d960201b60201c565b6200052f60a0516001620006dc60201b60201c565b620005423060016200087a60201b60201c565b6200055761dead60016200087a60201b60201c565b6200058c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087a60201b60201c565b620005ae620005a0620009c760201b60201c565b6001620006dc60201b60201c565b620005c1306001620006dc60201b60201c565b620005d661dead6001620006dc60201b60201c565b600254600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600254604051620006c1919062000f59565b60405180910390a3505050505062001033565b600033905090565b620006ec620006d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007759062000fd7565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6200088a620006d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200091c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009139062000fd7565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009bb919062001016565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a7357607f821691505b60208210810362000a895762000a8862000a2b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000af37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ab4565b62000aff868362000ab4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b4c62000b4662000b408462000b17565b62000b21565b62000b17565b9050919050565b6000819050919050565b62000b688362000b2b565b62000b8062000b778262000b53565b84845462000ac1565b825550505050565b600090565b62000b9762000b88565b62000ba481848462000b5d565b505050565b5b8181101562000bcc5762000bc060008262000b8d565b60018101905062000baa565b5050565b601f82111562000c1b5762000be58162000a8f565b62000bf08462000aa4565b8101602085101562000c00578190505b62000c1862000c0f8562000aa4565b83018262000ba9565b50505b505050565b600082821c905092915050565b600062000c406000198460080262000c20565b1980831691505092915050565b600062000c5b838362000c2d565b9150826002028217905092915050565b62000c7682620009f1565b67ffffffffffffffff81111562000c925762000c91620009fc565b5b62000c9e825462000a5a565b62000cab82828562000bd0565b600060209050601f83116001811462000ce3576000841562000cce578287015190505b62000cda858262000c4d565b86555062000d4a565b601f19841662000cf38662000a8f565b60005b8281101562000d1d5784890151825560018201915060208501945060208101905062000cf6565b8683101562000d3d578489015162000d39601f89168262000c2d565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d8e8262000b17565b915062000d9b8362000b17565b925082820262000dab8162000b17565b9150828204841483151762000dc55762000dc462000d52565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e088262000b17565b915062000e158362000b17565b92508262000e285762000e2762000dcc565b5b828204905092915050565b600062000e408262000b17565b915062000e4d8362000b17565b925082820190508082111562000e685762000e6762000d52565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ea08262000e73565b9050919050565b62000eb28162000e93565b811462000ebe57600080fd5b50565b60008151905062000ed28162000ea7565b92915050565b60006020828403121562000ef15762000ef062000e6e565b5b600062000f018482850162000ec1565b91505092915050565b62000f158162000e93565b82525050565b600060408201905062000f32600083018562000f0a565b62000f41602083018462000f0a565b9392505050565b62000f538162000b17565b82525050565b600060208201905062000f70600083018462000f48565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fbf60208362000f76565b915062000fcc8262000f87565b602082019050919050565b6000602082019050818103600083015262000ff28162000fb0565b9050919050565b60008115159050919050565b620010108162000ff9565b82525050565b60006020820190506200102d600083018462001005565b92915050565b60805160a051614b666200108360003960008181610f820152611762015260008181610c760152818161343d0152818161351e015281816135450152818161360a01526136310152614b666000f3fe6080604052600436106102815760003560e01c80638ea5220f1161014f578063c18bc195116100c1578063dd62ed3e1161007a578063dd62ed3e146109ad578063e2f45605146109ea578063f11a24d314610a15578063f2fde38b14610a40578063f637434214610a69578063f8b45b0514610a9457610288565b8063c18bc1951461089d578063c8c8ebe4146108c6578063d1633649146108f1578063d257b34f1461091a578063d5f3948814610957578063d85ba0631461098257610288565b80639fccce32116101135780639fccce3214610767578063a0d82dc514610792578063a457c2d7146107bd578063a9059cbb146107fa578063b62496f514610837578063c02466681461087457610288565b80638ea5220f14610694578063924de9b7146106bf57806395d89b41146106e85780639a7a23d6146107135780639c3b4fdc1461073c57610288565b806349bd5a5e116101f357806370a08231116101ac57806370a08231146105aa578063715018a6146105e7578063751039fc146105fe5780637571336a146106295780638129fc1c146106525780638da5cb5b1461066957610288565b806349bd5a5e146104985780634a62bb65146104c35780634fbee193146104ee57806366ca9b831461052b5780636a486a8e146105545780636ddd17131461057f57610288565b80631a8145bb116102455780631a8145bb14610374578063203e727e1461039f57806323b872dd146103c857806327c8f83514610405578063313ce56714610430578063395093511461045b57610288565b806302dbd8f81461028d57806306fdde03146102b6578063095ea7b3146102e15780631694505e1461031e57806318160ddd1461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061371b565b610abf565b005b3480156102c257600080fd5b506102cb610bc4565b6040516102d891906137eb565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061386b565b610c56565b60405161031591906138c6565b60405180910390f35b34801561032a57600080fd5b50610333610c74565b6040516103409190613940565b60405180910390f35b34801561035557600080fd5b5061035e610c98565b60405161036b919061396a565b60405180910390f35b34801561038057600080fd5b50610389610ca2565b604051610396919061396a565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190613985565b610ca8565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906139b2565b610dd1565b6040516103fc91906138c6565b60405180910390f35b34801561041157600080fd5b5061041a610f3a565b6040516104279190613a14565b60405180910390f35b34801561043c57600080fd5b50610445610f40565b6040516104529190613a4b565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d919061386b565b610f49565b60405161048f91906138c6565b60405180910390f35b3480156104a457600080fd5b506104ad610f80565b6040516104ba9190613a14565b60405180910390f35b3480156104cf57600080fd5b506104d8610fa4565b6040516104e591906138c6565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613a66565b610fb7565b60405161052291906138c6565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061371b565b61100d565b005b34801561056057600080fd5b50610569611112565b604051610576919061396a565b60405180910390f35b34801561058b57600080fd5b50610594611118565b6040516105a191906138c6565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613a66565b61112b565b6040516105de919061396a565b60405180910390f35b3480156105f357600080fd5b506105fc611173565b005b34801561060a57600080fd5b506106136112cb565b60405161062091906138c6565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613abf565b611386565b005b34801561065e57600080fd5b50610667611478565b005b34801561067557600080fd5b5061067e611533565b60405161068b9190613a14565b60405180910390f35b3480156106a057600080fd5b506106a961155d565b6040516106b69190613a14565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613aff565b611583565b005b3480156106f457600080fd5b506106fd611637565b60405161070a91906137eb565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613abf565b6116c9565b005b34801561074857600080fd5b506107516117fc565b60405161075e919061396a565b60405180910390f35b34801561077357600080fd5b5061077c611802565b604051610789919061396a565b60405180910390f35b34801561079e57600080fd5b506107a7611808565b6040516107b4919061396a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061386b565b61180e565b6040516107f191906138c6565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c919061386b565b611885565b60405161082e91906138c6565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190613a66565b6118a3565b60405161086b91906138c6565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613abf565b6118c3565b005b3480156108a957600080fd5b506108c460048036038101906108bf9190613985565b611a03565b005b3480156108d257600080fd5b506108db611b2c565b6040516108e8919061396a565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613985565b611b32565b005b34801561092657600080fd5b50610941600480360381019061093c9190613985565b611c34565b60405161094e91906138c6565b60405180910390f35b34801561096357600080fd5b5061096c611da3565b6040516109799190613a14565b60405180910390f35b34801561098e57600080fd5b50610997611dc9565b6040516109a4919061396a565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190613b2c565b611dcf565b6040516109e1919061396a565b60405180910390f35b3480156109f657600080fd5b506109ff611e56565b604051610a0c919061396a565b60405180910390f35b348015610a2157600080fd5b50610a2a611e5c565b604051610a37919061396a565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190613a66565b611e62565b005b348015610a7557600080fd5b50610a7e612028565b604051610a8b919061396a565b60405180910390f35b348015610aa057600080fd5b50610aa961202e565b604051610ab6919061396a565b60405180910390f35b610ac7612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613bb8565b60405180910390fd5b8160108190555080601181905550601154601054610b749190613c07565b600f819055506019600f541115610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613c87565b60405180910390fd5b5050565b606060038054610bd390613cd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613cd6565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b5050505050905090565b6000610c6a610c63612034565b848461203c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60125481565b610cb0612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690613bb8565b60405180910390fd5b670de0b6b3a764000060646001610d54610c98565b610d5e9190613d07565b610d689190613d78565b610d729190613d78565b811015610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90613e1b565b60405180910390fd5b670de0b6b3a764000081610dc89190613d07565b60088190555050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613ead565b60405180910390fd5b610e9d848484612205565b610f2f843384600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2a9190613ecd565b61203c565b600190509392505050565b61dead81565b60006012905090565b600080610f54612034565b9050610f75818585610f668589611dcf565b610f709190613c07565b61203c565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611015612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613bb8565b60405180910390fd5b81600d8190555080600e81905550600e54600d546110c29190613c07565b600c819055506014600c54111561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590613f4d565b60405180910390fd5b5050565b600f5481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112d5612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613bb8565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61138e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613bb8565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611480612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690613bb8565b60405180910390fd5b601460009054906101000a900460ff161561152957600080fd5b6001601581905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61158b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613bb8565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461164690613cd6565b80601f016020809104026020016040519081016040528092919081815260200182805461167290613cd6565b80156116bf5780601f10611694576101008083540402835291602001916116bf565b820191906000526020600020905b8154815290600101906020018083116116a257829003601f168201915b5050505050905090565b6116d1612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790613bb8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613fdf565b60405180910390fd5b6117f88282612cb6565b5050565b600e5481565b60135481565b60115481565b600080611819612034565b905060006118278286611dcf565b90508381101561186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614071565b60405180910390fd5b611879828686840361203c565b60019250505092915050565b6000611899611892612034565b8484612205565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b6118cb612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190613bb8565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f791906138c6565b60405180910390a25050565b611a0b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190613bb8565b60405180910390fd5b670de0b6b3a764000060646002611aaf610c98565b611ab99190613d07565b611ac39190613d78565b611acd9190613d78565b811015611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614103565b60405180910390fd5b670de0b6b3a764000081611b239190613d07565b600a8190555050565b60085481565b611b3a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613bb8565b60405180910390fd5b601460009054906101000a900460ff16158015611be95750600060155414155b611bf257600080fd5b8043611bfe9190613c07565b60156000828254611c0f9190613c07565b925050819055506001601460006101000a81548160ff02191690831515021790555050565b6000611c3e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490613bb8565b60405180910390fd5b620186a06001611cdb610c98565b611ce59190613d07565b611cef9190613d78565b821015611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890614195565b60405180910390fd5b60646001611d3d610c98565b611d479190613d07565b611d519190613d78565b821115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614227565b60405180910390fd5b8160098190555060019050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600d5481565b611e6a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f906142b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061434b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612111906143dd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f8919061396a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90614501565b60405180910390fd5b600081036122fc576122f783836000612d57565b612cb1565b600b60009054906101000a900460ff161561282d57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123f65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612430575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124495750601660009054906101000a900460ff16155b1561282c57601460009054906101000a900460ff1661254357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125035750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125399061456d565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561268d57600854811115612630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612627906145ff565b60405180910390fd5b600a5461263c8361112b565b826126479190613c07565b1115612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267f9061466b565b60405180910390fd5b61282b565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127305750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561277f5760085481111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906146fd565b60405180910390fd5b61282a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661282957600a546127dc8361112b565b826127e79190613c07565b1115612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9061466b565b60405180910390fd5b5b5b5b5b5b60006128383061112b565b9050600061284582612fb7565b90508080156128605750600b60019054906101000a900460ff165b80156128795750601660009054906101000a900460ff16155b80156128cf5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129255750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561297b5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129bf576001601660006101000a81548160ff0219169083151502179055506129a3612ff2565b6000601660006101000a81548160ff0219169083151502179055505b6000601660009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a755750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7f57600090505b60008115612ca1576015546000108015612a9a575043601554105b15612c6f57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afa57506000600f54115b15612b86576064600f5486612b0f9190613d07565b612b199190613d78565b9050600f5460105482612b2c9190613d07565b612b369190613d78565b60126000828254612b479190613c07565b92505081905550600f5460115482612b5f9190613d07565b612b699190613d78565b60136000828254612b7a9190613c07565b92505081905550612c6a565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612be157506000600c54115b15612c69576064600c5486612bf69190613d07565b612c009190613d78565b9050600c54600d5482612c139190613d07565b612c1d9190613d78565b60126000828254612c2e9190613c07565b92505081905550600c54600e5482612c469190613d07565b612c509190613d78565b60136000828254612c619190613c07565b925050819055505b5b612c7d565b612c7a8787876131e3565b90505b6000811115612c9257612c91873083612d57565b5b8085612c9e9190613ecd565b94505b612cac878787612d57565b505050505b505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2c90614501565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061478f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fa9919061396a565b60405180910390a350505050565b60006009548210158015612fcc575060155443115b8015612feb57506003601a600043815260200190815260200160002054105b9050919050565b6000612ffd3061112b565b905060006013546012546130119190613c07565b90506000808314806130235750600082145b15613030575050506131e1565b601660095461303f9190613d07565b8311156130585760166009546130559190613d07565b92505b60006002836012548661306b9190613d07565b6130759190613d78565b61307f9190613d78565b90506000818561308f9190613ecd565b9050600047905061309f8261339e565b600081476130ad9190613ecd565b9050600086601354836130c09190613d07565b6130ca9190613d78565b9050600081836130da9190613ecd565b905060006012819055506000601381905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613132906147e0565b60006040518083038185875af1925050503d806000811461316f576040519150601f19603f3d011682016040523d82523d6000602084013e613174565b606091505b50508097505060008611801561318a5750600081115b156131d7576131998682613604565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826012546040516131ce939291906147f5565b60405180910390a15b5050505050505050505b565b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133005760646031836132469190613d07565b6132509190613d78565b9050600c54600d54826132639190613d07565b61326d9190613d78565b6012600082825461327e9190613c07565b92505081905550600c54600e54826132969190613d07565b6132a09190613d78565b601360008282546132b19190613c07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a2613397565b6064600060155414613313576046613316565b601e5b60ff16836133249190613d07565b61332e9190613d78565b9050600f54601054826133419190613d07565b61334b9190613d78565b6012600082825461335c9190613c07565b92505081905550600f54601154826133749190613d07565b61337e9190613d78565b6013600082825461338f9190613c07565b925050819055505b9392505050565b6000600267ffffffffffffffff8111156133bb576133ba61482c565b5b6040519080825280602002602001820160405280156133e95781602001602082028036833780820191505090505b50905030816000815181106134015761340061485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca919061489f565b816001815181106134de576134dd61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613543307f00000000000000000000000000000000000000000000000000000000000000008461203c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135a59594939291906149c5565b600060405180830381600087803b1580156135bf57600080fd5b505af11580156135d3573d6000803e3d6000fd5b50505050601a600043815260200190815260200160002060008154809291906135fb90614a1f565b91905055505050565b61362f307f00000000000000000000000000000000000000000000000000000000000000008461203c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161369696959493929190614a67565b60606040518083038185885af11580156136b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d99190614add565b5050505050565b600080fd5b6000819050919050565b6136f8816136e5565b811461370357600080fd5b50565b600081359050613715816136ef565b92915050565b60008060408385031215613732576137316136e0565b5b600061374085828601613706565b925050602061375185828601613706565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561379557808201518184015260208101905061377a565b60008484015250505050565b6000601f19601f8301169050919050565b60006137bd8261375b565b6137c78185613766565b93506137d7818560208601613777565b6137e0816137a1565b840191505092915050565b6000602082019050818103600083015261380581846137b2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138388261380d565b9050919050565b6138488161382d565b811461385357600080fd5b50565b6000813590506138658161383f565b92915050565b60008060408385031215613882576138816136e0565b5b600061389085828601613856565b92505060206138a185828601613706565b9150509250929050565b60008115159050919050565b6138c0816138ab565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6000819050919050565b60006139066139016138fc8461380d565b6138e1565b61380d565b9050919050565b6000613918826138eb565b9050919050565b600061392a8261390d565b9050919050565b61393a8161391f565b82525050565b60006020820190506139556000830184613931565b92915050565b613964816136e5565b82525050565b600060208201905061397f600083018461395b565b92915050565b60006020828403121561399b5761399a6136e0565b5b60006139a984828501613706565b91505092915050565b6000806000606084860312156139cb576139ca6136e0565b5b60006139d986828701613856565b93505060206139ea86828701613856565b92505060406139fb86828701613706565b9150509250925092565b613a0e8161382d565b82525050565b6000602082019050613a296000830184613a05565b92915050565b600060ff82169050919050565b613a4581613a2f565b82525050565b6000602082019050613a606000830184613a3c565b92915050565b600060208284031215613a7c57613a7b6136e0565b5b6000613a8a84828501613856565b91505092915050565b613a9c816138ab565b8114613aa757600080fd5b50565b600081359050613ab981613a93565b92915050565b60008060408385031215613ad657613ad56136e0565b5b6000613ae485828601613856565b9250506020613af585828601613aaa565b9150509250929050565b600060208284031215613b1557613b146136e0565b5b6000613b2384828501613aaa565b91505092915050565b60008060408385031215613b4357613b426136e0565b5b6000613b5185828601613856565b9250506020613b6285828601613856565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ba2602083613766565b9150613bad82613b6c565b602082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c12826136e5565b9150613c1d836136e5565b9250828201905080821115613c3557613c34613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613c71601d83613766565b9150613c7c82613c3b565b602082019050919050565b60006020820190508181036000830152613ca081613c64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cee57607f821691505b602082108103613d0157613d00613ca7565b5b50919050565b6000613d12826136e5565b9150613d1d836136e5565b9250828202613d2b816136e5565b91508282048414831517613d4257613d41613bd8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d83826136e5565b9150613d8e836136e5565b925082613d9e57613d9d613d49565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000613e05602d83613766565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e97602883613766565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed8826136e5565b9150613ee3836136e5565b9250828203905081811115613efb57613efa613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613f37601d83613766565b9150613f4282613f01565b602082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fc9603983613766565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061405b602583613766565b915061406682613fff565b604082019050919050565b6000602082019050818103600083015261408a8161404e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b60006140ed602283613766565b91506140f882614091565b604082019050919050565b6000602082019050818103600083015261411c816140e0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061417f603583613766565b915061418a82614123565b604082019050919050565b600060208201905081810360008301526141ae81614172565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614211603483613766565b915061421c826141b5565b604082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142a3602683613766565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614335602483613766565b9150614340826142d9565b604082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143c7602283613766565b91506143d28261436b565b604082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614459602583613766565b9150614464826143fd565b604082019050919050565b600060208201905081810360008301526144888161444c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144eb602383613766565b91506144f68261448f565b604082019050919050565b6000602082019050818103600083015261451a816144de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614557601683613766565b915061456282614521565b602082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006145e9603583613766565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614655601383613766565b91506146608261461f565b602082019050919050565b6000602082019050818103600083015261468481614648565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006146e7603683613766565b91506146f28261468b565b604082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614779602683613766565b91506147848261471d565b604082019050919050565b600060208201905081810360008301526147a88161476c565b9050919050565b600081905092915050565b50565b60006147ca6000836147af565b91506147d5826147ba565b600082019050919050565b60006147eb826147bd565b9150819050919050565b600060608201905061480a600083018661395b565b614817602083018561395b565b614824604083018461395b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148998161383f565b92915050565b6000602082840312156148b5576148b46136e0565b5b60006148c38482850161488a565b91505092915050565b6000819050919050565b60006148f16148ec6148e7846148cc565b6138e1565b6136e5565b9050919050565b614901816148d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61493c8161382d565b82525050565b600061494e8383614933565b60208301905092915050565b6000602082019050919050565b600061497282614907565b61497c8185614912565b935061498783614923565b8060005b838110156149b857815161499f8882614942565b97506149aa8361495a565b92505060018101905061498b565b5085935050505092915050565b600060a0820190506149da600083018861395b565b6149e760208301876148f8565b81810360408301526149f98186614967565b9050614a086060830185613a05565b614a15608083018461395b565b9695505050505050565b6000614a2a826136e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5c57614a5b613bd8565b5b600182019050919050565b600060c082019050614a7c6000830189613a05565b614a89602083018861395b565b614a9660408301876148f8565b614aa360608301866148f8565b614ab06080830185613a05565b614abd60a083018461395b565b979650505050505050565b600081519050614ad7816136ef565b92915050565b600080600060608486031215614af657614af56136e0565b5b6000614b0486828701614ac8565b9350506020614b1586828701614ac8565b9250506040614b2686828701614ac8565b915050925092509256fea2646970667358221220d4de59c7e30dc6205242a75854d3b27719cc6ec9af520331912e92f2c24df47464736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80638ea5220f1161014f578063c18bc195116100c1578063dd62ed3e1161007a578063dd62ed3e146109ad578063e2f45605146109ea578063f11a24d314610a15578063f2fde38b14610a40578063f637434214610a69578063f8b45b0514610a9457610288565b8063c18bc1951461089d578063c8c8ebe4146108c6578063d1633649146108f1578063d257b34f1461091a578063d5f3948814610957578063d85ba0631461098257610288565b80639fccce32116101135780639fccce3214610767578063a0d82dc514610792578063a457c2d7146107bd578063a9059cbb146107fa578063b62496f514610837578063c02466681461087457610288565b80638ea5220f14610694578063924de9b7146106bf57806395d89b41146106e85780639a7a23d6146107135780639c3b4fdc1461073c57610288565b806349bd5a5e116101f357806370a08231116101ac57806370a08231146105aa578063715018a6146105e7578063751039fc146105fe5780637571336a146106295780638129fc1c146106525780638da5cb5b1461066957610288565b806349bd5a5e146104985780634a62bb65146104c35780634fbee193146104ee57806366ca9b831461052b5780636a486a8e146105545780636ddd17131461057f57610288565b80631a8145bb116102455780631a8145bb14610374578063203e727e1461039f57806323b872dd146103c857806327c8f83514610405578063313ce56714610430578063395093511461045b57610288565b806302dbd8f81461028d57806306fdde03146102b6578063095ea7b3146102e15780631694505e1461031e57806318160ddd1461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061371b565b610abf565b005b3480156102c257600080fd5b506102cb610bc4565b6040516102d891906137eb565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061386b565b610c56565b60405161031591906138c6565b60405180910390f35b34801561032a57600080fd5b50610333610c74565b6040516103409190613940565b60405180910390f35b34801561035557600080fd5b5061035e610c98565b60405161036b919061396a565b60405180910390f35b34801561038057600080fd5b50610389610ca2565b604051610396919061396a565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190613985565b610ca8565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906139b2565b610dd1565b6040516103fc91906138c6565b60405180910390f35b34801561041157600080fd5b5061041a610f3a565b6040516104279190613a14565b60405180910390f35b34801561043c57600080fd5b50610445610f40565b6040516104529190613a4b565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d919061386b565b610f49565b60405161048f91906138c6565b60405180910390f35b3480156104a457600080fd5b506104ad610f80565b6040516104ba9190613a14565b60405180910390f35b3480156104cf57600080fd5b506104d8610fa4565b6040516104e591906138c6565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613a66565b610fb7565b60405161052291906138c6565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d919061371b565b61100d565b005b34801561056057600080fd5b50610569611112565b604051610576919061396a565b60405180910390f35b34801561058b57600080fd5b50610594611118565b6040516105a191906138c6565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613a66565b61112b565b6040516105de919061396a565b60405180910390f35b3480156105f357600080fd5b506105fc611173565b005b34801561060a57600080fd5b506106136112cb565b60405161062091906138c6565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613abf565b611386565b005b34801561065e57600080fd5b50610667611478565b005b34801561067557600080fd5b5061067e611533565b60405161068b9190613a14565b60405180910390f35b3480156106a057600080fd5b506106a961155d565b6040516106b69190613a14565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613aff565b611583565b005b3480156106f457600080fd5b506106fd611637565b60405161070a91906137eb565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613abf565b6116c9565b005b34801561074857600080fd5b506107516117fc565b60405161075e919061396a565b60405180910390f35b34801561077357600080fd5b5061077c611802565b604051610789919061396a565b60405180910390f35b34801561079e57600080fd5b506107a7611808565b6040516107b4919061396a565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061386b565b61180e565b6040516107f191906138c6565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c919061386b565b611885565b60405161082e91906138c6565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190613a66565b6118a3565b60405161086b91906138c6565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613abf565b6118c3565b005b3480156108a957600080fd5b506108c460048036038101906108bf9190613985565b611a03565b005b3480156108d257600080fd5b506108db611b2c565b6040516108e8919061396a565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613985565b611b32565b005b34801561092657600080fd5b50610941600480360381019061093c9190613985565b611c34565b60405161094e91906138c6565b60405180910390f35b34801561096357600080fd5b5061096c611da3565b6040516109799190613a14565b60405180910390f35b34801561098e57600080fd5b50610997611dc9565b6040516109a4919061396a565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190613b2c565b611dcf565b6040516109e1919061396a565b60405180910390f35b3480156109f657600080fd5b506109ff611e56565b604051610a0c919061396a565b60405180910390f35b348015610a2157600080fd5b50610a2a611e5c565b604051610a37919061396a565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a629190613a66565b611e62565b005b348015610a7557600080fd5b50610a7e612028565b604051610a8b919061396a565b60405180910390f35b348015610aa057600080fd5b50610aa961202e565b604051610ab6919061396a565b60405180910390f35b610ac7612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613bb8565b60405180910390fd5b8160108190555080601181905550601154601054610b749190613c07565b600f819055506019600f541115610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613c87565b60405180910390fd5b5050565b606060038054610bd390613cd6565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613cd6565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b5050505050905090565b6000610c6a610c63612034565b848461203c565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60125481565b610cb0612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690613bb8565b60405180910390fd5b670de0b6b3a764000060646001610d54610c98565b610d5e9190613d07565b610d689190613d78565b610d729190613d78565b811015610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90613e1b565b60405180910390fd5b670de0b6b3a764000081610dc89190613d07565b60088190555050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613ead565b60405180910390fd5b610e9d848484612205565b610f2f843384600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2a9190613ecd565b61203c565b600190509392505050565b61dead81565b60006012905090565b600080610f54612034565b9050610f75818585610f668589611dcf565b610f709190613c07565b61203c565b600191505092915050565b7f0000000000000000000000004354ae7127d642516a39824ffa4c45df5ae46ba381565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611015612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613bb8565b60405180910390fd5b81600d8190555080600e81905550600e54600d546110c29190613c07565b600c819055506014600c54111561110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590613f4d565b60405180910390fd5b5050565b600f5481565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006112d5612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613bb8565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61138e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613bb8565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611480612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690613bb8565b60405180910390fd5b601460009054906101000a900460ff161561152957600080fd5b6001601581905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61158b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613bb8565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606004805461164690613cd6565b80601f016020809104026020016040519081016040528092919081815260200182805461167290613cd6565b80156116bf5780601f10611694576101008083540402835291602001916116bf565b820191906000526020600020905b8154815290600101906020018083116116a257829003601f168201915b5050505050905090565b6116d1612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790613bb8565b60405180910390fd5b7f0000000000000000000000004354ae7127d642516a39824ffa4c45df5ae46ba373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613fdf565b60405180910390fd5b6117f88282612cb6565b5050565b600e5481565b60135481565b60115481565b600080611819612034565b905060006118278286611dcf565b90508381101561186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614071565b60405180910390fd5b611879828686840361203c565b60019250505092915050565b6000611899611892612034565b8484612205565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b6118cb612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190613bb8565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f791906138c6565b60405180910390a25050565b611a0b612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190613bb8565b60405180910390fd5b670de0b6b3a764000060646002611aaf610c98565b611ab99190613d07565b611ac39190613d78565b611acd9190613d78565b811015611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614103565b60405180910390fd5b670de0b6b3a764000081611b239190613d07565b600a8190555050565b60085481565b611b3a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc090613bb8565b60405180910390fd5b601460009054906101000a900460ff16158015611be95750600060155414155b611bf257600080fd5b8043611bfe9190613c07565b60156000828254611c0f9190613c07565b925050819055506001601460006101000a81548160ff02191690831515021790555050565b6000611c3e612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490613bb8565b60405180910390fd5b620186a06001611cdb610c98565b611ce59190613d07565b611cef9190613d78565b821015611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890614195565b60405180910390fd5b60646001611d3d610c98565b611d479190613d07565b611d519190613d78565b821115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614227565b60405180910390fd5b8160098190555060019050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600d5481565b611e6a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090613bb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5f906142b9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061434b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612111906143dd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f8919061396a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90614501565b60405180910390fd5b600081036122fc576122f783836000612d57565b612cb1565b600b60009054906101000a900460ff161561282d57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123f65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612430575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124495750601660009054906101000a900460ff16155b1561282c57601460009054906101000a900460ff1661254357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125035750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125399061456d565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561268d57600854811115612630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612627906145ff565b60405180910390fd5b600a5461263c8361112b565b826126479190613c07565b1115612688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267f9061466b565b60405180910390fd5b61282b565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127305750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561277f5760085481111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906146fd565b60405180910390fd5b61282a565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661282957600a546127dc8361112b565b826127e79190613c07565b1115612828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281f9061466b565b60405180910390fd5b5b5b5b5b5b60006128383061112b565b9050600061284582612fb7565b90508080156128605750600b60019054906101000a900460ff165b80156128795750601660009054906101000a900460ff16155b80156128cf5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129255750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561297b5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129bf576001601660006101000a81548160ff0219169083151502179055506129a3612ff2565b6000601660006101000a81548160ff0219169083151502179055505b6000601660009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a755750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7f57600090505b60008115612ca1576015546000108015612a9a575043601554105b15612c6f57601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612afa57506000600f54115b15612b86576064600f5486612b0f9190613d07565b612b199190613d78565b9050600f5460105482612b2c9190613d07565b612b369190613d78565b60126000828254612b479190613c07565b92505081905550600f5460115482612b5f9190613d07565b612b699190613d78565b60136000828254612b7a9190613c07565b92505081905550612c6a565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612be157506000600c54115b15612c69576064600c5486612bf69190613d07565b612c009190613d78565b9050600c54600d5482612c139190613d07565b612c1d9190613d78565b60126000828254612c2e9190613c07565b92505081905550600c54600e5482612c469190613d07565b612c509190613d78565b60136000828254612c619190613c07565b925050819055505b5b612c7d565b612c7a8787876131e3565b90505b6000811115612c9257612c91873083612d57565b5b8085612c9e9190613ecd565b94505b612cac878787612d57565b505050505b505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd9061446f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2c90614501565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061478f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fa9919061396a565b60405180910390a350505050565b60006009548210158015612fcc575060155443115b8015612feb57506003601a600043815260200190815260200160002054105b9050919050565b6000612ffd3061112b565b905060006013546012546130119190613c07565b90506000808314806130235750600082145b15613030575050506131e1565b601660095461303f9190613d07565b8311156130585760166009546130559190613d07565b92505b60006002836012548661306b9190613d07565b6130759190613d78565b61307f9190613d78565b90506000818561308f9190613ecd565b9050600047905061309f8261339e565b600081476130ad9190613ecd565b9050600086601354836130c09190613d07565b6130ca9190613d78565b9050600081836130da9190613ecd565b905060006012819055506000601381905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613132906147e0565b60006040518083038185875af1925050503d806000811461316f576040519150601f19603f3d011682016040523d82523d6000602084013e613174565b606091505b50508097505060008611801561318a5750600081115b156131d7576131998682613604565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826012546040516131ce939291906147f5565b60405180910390a15b5050505050505050505b565b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133005760646031836132469190613d07565b6132509190613d78565b9050600c54600d54826132639190613d07565b61326d9190613d78565b6012600082825461327e9190613c07565b92505081905550600c54600e54826132969190613d07565b6132a09190613d78565b601360008282546132b19190613c07565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a2613397565b6064600060155414613313576046613316565b601e5b60ff16836133249190613d07565b61332e9190613d78565b9050600f54601054826133419190613d07565b61334b9190613d78565b6012600082825461335c9190613c07565b92505081905550600f54601154826133749190613d07565b61337e9190613d78565b6013600082825461338f9190613c07565b925050819055505b9392505050565b6000600267ffffffffffffffff8111156133bb576133ba61482c565b5b6040519080825280602002602001820160405280156133e95781602001602082028036833780820191505090505b50905030816000815181106134015761340061485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca919061489f565b816001815181106134de576134dd61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613543307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461203c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135a59594939291906149c5565b600060405180830381600087803b1580156135bf57600080fd5b505af11580156135d3573d6000803e3d6000fd5b50505050601a600043815260200190815260200160002060008154809291906135fb90614a1f565b91905055505050565b61362f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461203c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161369696959493929190614a67565b60606040518083038185885af11580156136b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136d99190614add565b5050505050565b600080fd5b6000819050919050565b6136f8816136e5565b811461370357600080fd5b50565b600081359050613715816136ef565b92915050565b60008060408385031215613732576137316136e0565b5b600061374085828601613706565b925050602061375185828601613706565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561379557808201518184015260208101905061377a565b60008484015250505050565b6000601f19601f8301169050919050565b60006137bd8261375b565b6137c78185613766565b93506137d7818560208601613777565b6137e0816137a1565b840191505092915050565b6000602082019050818103600083015261380581846137b2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138388261380d565b9050919050565b6138488161382d565b811461385357600080fd5b50565b6000813590506138658161383f565b92915050565b60008060408385031215613882576138816136e0565b5b600061389085828601613856565b92505060206138a185828601613706565b9150509250929050565b60008115159050919050565b6138c0816138ab565b82525050565b60006020820190506138db60008301846138b7565b92915050565b6000819050919050565b60006139066139016138fc8461380d565b6138e1565b61380d565b9050919050565b6000613918826138eb565b9050919050565b600061392a8261390d565b9050919050565b61393a8161391f565b82525050565b60006020820190506139556000830184613931565b92915050565b613964816136e5565b82525050565b600060208201905061397f600083018461395b565b92915050565b60006020828403121561399b5761399a6136e0565b5b60006139a984828501613706565b91505092915050565b6000806000606084860312156139cb576139ca6136e0565b5b60006139d986828701613856565b93505060206139ea86828701613856565b92505060406139fb86828701613706565b9150509250925092565b613a0e8161382d565b82525050565b6000602082019050613a296000830184613a05565b92915050565b600060ff82169050919050565b613a4581613a2f565b82525050565b6000602082019050613a606000830184613a3c565b92915050565b600060208284031215613a7c57613a7b6136e0565b5b6000613a8a84828501613856565b91505092915050565b613a9c816138ab565b8114613aa757600080fd5b50565b600081359050613ab981613a93565b92915050565b60008060408385031215613ad657613ad56136e0565b5b6000613ae485828601613856565b9250506020613af585828601613aaa565b9150509250929050565b600060208284031215613b1557613b146136e0565b5b6000613b2384828501613aaa565b91505092915050565b60008060408385031215613b4357613b426136e0565b5b6000613b5185828601613856565b9250506020613b6285828601613856565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ba2602083613766565b9150613bad82613b6c565b602082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c12826136e5565b9150613c1d836136e5565b9250828201905080821115613c3557613c34613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613c71601d83613766565b9150613c7c82613c3b565b602082019050919050565b60006020820190508181036000830152613ca081613c64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cee57607f821691505b602082108103613d0157613d00613ca7565b5b50919050565b6000613d12826136e5565b9150613d1d836136e5565b9250828202613d2b816136e5565b91508282048414831517613d4257613d41613bd8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d83826136e5565b9150613d8e836136e5565b925082613d9e57613d9d613d49565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000613e05602d83613766565b9150613e1082613da9565b604082019050919050565b60006020820190508181036000830152613e3481613df8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e97602883613766565b9150613ea282613e3b565b604082019050919050565b60006020820190508181036000830152613ec681613e8a565b9050919050565b6000613ed8826136e5565b9150613ee3836136e5565b9250828203905081811115613efb57613efa613bd8565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613f37601d83613766565b9150613f4282613f01565b602082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fc9603983613766565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061405b602583613766565b915061406682613fff565b604082019050919050565b6000602082019050818103600083015261408a8161404e565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3225000000000000000000000000000000000000000000000000000000000000602082015250565b60006140ed602283613766565b91506140f882614091565b604082019050919050565b6000602082019050818103600083015261411c816140e0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061417f603583613766565b915061418a82614123565b604082019050919050565b600060208201905081810360008301526141ae81614172565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614211603483613766565b915061421c826141b5565b604082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142a3602683613766565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614335602483613766565b9150614340826142d9565b604082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143c7602283613766565b91506143d28261436b565b604082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614459602583613766565b9150614464826143fd565b604082019050919050565b600060208201905081810360008301526144888161444c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144eb602383613766565b91506144f68261448f565b604082019050919050565b6000602082019050818103600083015261451a816144de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614557601683613766565b915061456282614521565b602082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006145e9603583613766565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614655601383613766565b91506146608261461f565b602082019050919050565b6000602082019050818103600083015261468481614648565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006146e7603683613766565b91506146f28261468b565b604082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614779602683613766565b91506147848261471d565b604082019050919050565b600060208201905081810360008301526147a88161476c565b9050919050565b600081905092915050565b50565b60006147ca6000836147af565b91506147d5826147ba565b600082019050919050565b60006147eb826147bd565b9150819050919050565b600060608201905061480a600083018661395b565b614817602083018561395b565b614824604083018461395b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148998161383f565b92915050565b6000602082840312156148b5576148b46136e0565b5b60006148c38482850161488a565b91505092915050565b6000819050919050565b60006148f16148ec6148e7846148cc565b6138e1565b6136e5565b9050919050565b614901816148d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61493c8161382d565b82525050565b600061494e8383614933565b60208301905092915050565b6000602082019050919050565b600061497282614907565b61497c8185614912565b935061498783614923565b8060005b838110156149b857815161499f8882614942565b97506149aa8361495a565b92505060018101905061498b565b5085935050505092915050565b600060a0820190506149da600083018861395b565b6149e760208301876148f8565b81810360408301526149f98186614967565b9050614a086060830185613a05565b614a15608083018461395b565b9695505050505050565b6000614a2a826136e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5c57614a5b613bd8565b5b600182019050919050565b600060c082019050614a7c6000830189613a05565b614a89602083018861395b565b614a9660408301876148f8565b614aa360608301866148f8565b614ab06080830185613a05565b614abd60a083018461395b565b979650505050505050565b600081519050614ad7816136ef565b92915050565b600080600060608486031215614af657614af56136e0565b5b6000614b0486828701614ac8565b9350506020614b1586828701614ac8565b9250506040614b2686828701614ac8565b915050925092509256fea2646970667358221220d4de59c7e30dc6205242a75854d3b27719cc6ec9af520331912e92f2c24df47464736f6c63430008120033

Deployed Bytecode Sourcemap

14801:13731:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20455:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5398:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7565:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14849:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6518:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15498:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19032:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8216:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14952:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6360:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9035:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14907:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15196:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20157:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15387:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15236:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6689:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14247:148;;;;;;;;;;;;;:::i;:::-;;18445:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19495:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19846:109;;;;;;;;;;;;;:::i;:::-;;13605:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15044:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19739:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5617:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20946:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15350:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15538:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15460:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9776:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7029:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15852:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20756:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19271:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15081:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19963:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18640:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15014:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15279:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7267:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15123:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15313:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14550:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15422:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15163:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20455:293;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20568:13:::1;20549:16;:32;;;;20605:7;20592:10;:20;;;;20658:10;;20639:16;;:29;;;;:::i;:::-;20623:13;:45;;;;20704:2;20687:13;;:19;;20679:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20455:293:::0;;:::o;5398:100::-;5452:13;5485:5;5478:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5398:100;:::o;7565:169::-;7648:4;7665:39;7674:12;:10;:12::i;:::-;7688:7;7697:6;7665:8;:39::i;:::-;7722:4;7715:11;;7565:169;;;;:::o;14849:51::-;;;:::o;6518:108::-;6579:7;6606:12;;6599:19;;6518:108;:::o;15498:33::-;;;;:::o;19032:231::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19150:4:::1;19145:3;19141:1;19125:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;19124:30;;;;:::i;:::-;19114:6;:40;;19106:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;19248:6;19238;:17;;;;:::i;:::-;19215:20;:40;;;;19032:231:::0;:::o;8216:410::-;8357:4;8417:6;8382:11;:19;8394:6;8382:19;;;;;;;;;;;;;;;:31;8402:10;8382:31;;;;;;;;;;;;;;;;:41;;8374:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;8479:36;8489:6;8497:9;8508:6;8479:9;:36::i;:::-;8526:70;8535:6;8543:10;8589:6;8555:11;:19;8567:6;8555:19;;;;;;;;;;;;;;;:31;8575:10;8555:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;8526:8;:70::i;:::-;8614:4;8607:11;;8216:410;;;;;:::o;14952:53::-;14998:6;14952:53;:::o;6360:93::-;6418:5;6443:2;6436:9;;6360:93;:::o;9035:238::-;9123:4;9140:13;9156:12;:10;:12::i;:::-;9140:28;;9179:64;9188:5;9195:7;9232:10;9204:25;9214:5;9221:7;9204:9;:25::i;:::-;:38;;;;:::i;:::-;9179:8;:64::i;:::-;9261:4;9254:11;;;9035:238;;;;:::o;14907:38::-;;;:::o;15196:33::-;;;;;;;;;;;;;:::o;21395:125::-;21460:4;21484:19;:28;21504:7;21484:28;;;;;;;;;;;;;;;;;;;;;;;;;21477:35;;21395:125;;;:::o;20157:286::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20268:13:::1;20250:15;:31;;;;20304:7;20292:9;:19;;;;20355:9;;20337:15;;:27;;;;:::i;:::-;20322:12;:42;;;;20399:2;20383:12;;:18;;20375:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20157:286:::0;;:::o;15387:28::-;;;;:::o;15236:30::-;;;;;;;;;;;;;:::o;6689:127::-;6763:7;6790:9;:18;6800:7;6790:18;;;;;;;;;;;;;;;;6783:25;;6689:127;;;:::o;14247:148::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14354:1:::1;14317:40;;14338:6;;;;;;;;;;;14317:40;;;;;;;;;;;;14385:1;14368:6;;:19;;;;;;;;;;;;;;;;;;14247:148::o:0;18445:120::-;18497:4;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18530:5:::1;18513:14;;:22;;;;;;;;;;;;;;;;;;18553:4;18546:11;;18445:120:::0;:::o;19495:144::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19627:4:::1;19585:31;:39;19617:6;19585:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19495:144:::0;;:::o;19846:109::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19907:13:::1;;;;;;;;;;;19906:14;19898:23;;;::::0;::::1;;19946:1;19932:11;:15;;;;19846:109::o:0;13605:79::-;13643:7;13670:6;;;;;;;;;;;13663:13;;13605:79;:::o;15044:24::-;;;;;;;;;;;;;:::o;19739:99::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19823:7:::1;19809:11;;:21;;;;;;;;;;;;;;;;;;19739:99:::0;:::o;5617:104::-;5673:13;5706:7;5699:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5617:104;:::o;20946:244::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21053:13:::1;21045:21;;:4;:21;;::::0;21037:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21141:41;21170:4;21176:5;21141:28;:41::i;:::-;20946:244:::0;;:::o;15350:24::-;;;;:::o;15538:27::-;;;;:::o;15460:25::-;;;;:::o;9776:434::-;9869:4;9886:13;9902:12;:10;:12::i;:::-;9886:28;;9925:24;9952:25;9962:5;9969:7;9952:9;:25::i;:::-;9925:52;;10016:15;9996:16;:35;;9988:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10109:60;10118:5;10125:7;10153:15;10134:16;:34;10109:8;:60::i;:::-;10198:4;10191:11;;;;9776:434;;;;:::o;7029:175::-;7115:4;7132:42;7142:12;:10;:12::i;:::-;7156:9;7167:6;7132:9;:42::i;:::-;7192:4;7185:11;;7029:175;;;;:::o;15852:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20756:182::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20872:8:::1;20841:19;:28;20861:7;20841:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20912:7;20896:34;;;20921:8;20896:34;;;;;;:::i;:::-;;;;;;;;20756:182:::0;;:::o;19271:212::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19392:4:::1;19387:3;19383:1;19367:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;19366:30;;;;:::i;:::-;19356:6;:40;;19348:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19468:6;19458;:17;;;;:::i;:::-;19446:9;:29;;;;19271:212:::0;:::o;15081:35::-;;;;:::o;19963:182::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20034:13:::1;;;;;;;;;;;20033:14;:34;;;;;20066:1;20051:11;;:16;;20033:34;20025:43;;;::::0;::::1;;20105:1;20092:12;:14;;;;:::i;:::-;20079:11;;:27;;;;;;;:::i;:::-;;;;;;;;20133:4;20117:13;;:20;;;;;;;;;;;;;;;;;;19963:182:::0;:::o;18640:380::-;18721:4;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18777:6:::1;18773:1;18757:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;18744:9;:39;;18736:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;18892:3;18888:1;18872:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;18859:9;:36;;18851:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;18983:9;18962:18;:30;;;;19009:4;19002:11;;18640:380:::0;;;:::o;15014:23::-;;;;;;;;;;;;;:::o;15279:27::-;;;;:::o;7267:151::-;7356:7;7383:11;:18;7395:5;7383:18;;;;;;;;;;;;;;;:27;7402:7;7383:27;;;;;;;;;;;;;;;;7376:34;;7267:151;;;;:::o;15123:33::-;;;;:::o;15313:30::-;;;;:::o;14550:244::-;13827:12;:10;:12::i;:::-;13817:22;;:6;;;;;;;;;;;:22;;;13809:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14659:1:::1;14639:22;;:8;:22;;::::0;14631:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14749:8;14720:38;;14741:6;;;;;;;;;;;14720:38;;;;;;;;;;;;14778:8;14769:6;;:17;;;;;;;;;;;;;;;;;;14550:244:::0;:::o;15422:31::-;;;;:::o;15163:24::-;;;;:::o;390:98::-;443:7;470:10;463:17;;390:98;:::o;12720:380::-;12873:1;12856:19;;:5;:19;;;12848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12954:1;12935:21;;:7;:21;;;12927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13038:6;13008:11;:18;13020:5;13008:18;;;;;;;;;;;;;;;:27;13027:7;13008:27;;;;;;;;;;;;;;;:36;;;;13076:7;13060:32;;13069:5;13060:32;;;13085:6;13060:32;;;;;;:::i;:::-;;;;;;;;12720:380;;;:::o;21582:3557::-;21730:1;21714:18;;:4;:18;;;21706:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21807:1;21793:16;;:2;:16;;;21785:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21884:1;21874:6;:11;21871:92;;21902:28;21918:4;21924:2;21928:1;21902:15;:28::i;:::-;21945:7;;21871:92;21986:14;;;;;;;;;;;21983:1261;;;22046:8;;;;;;;;;;;22038:16;;:4;:16;;;;:51;;;;;22081:8;;;;;;;;;;;22075:14;;:2;:14;;;;22038:51;:89;;;;;22125:1;22111:16;;:2;:16;;;;22038:89;:131;;;;;22162:6;22148:21;;:2;:21;;;;22038:131;:161;;;;;22191:8;;;;;;;;;;;22190:9;22038:161;22016:1217;;;22237:13;;;;;;;;;;;22233:148;;22282:19;:25;22302:4;22282:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22311:19;:23;22331:2;22311:23;;;;;;;;;;;;;;;;;;;;;;;;;22282:52;22274:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;22233:148;22444:25;:31;22470:4;22444:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;22480:31;:35;22512:2;22480:35;;;;;;;;;;;;;;;;;;;;;;;;;22479:36;22444:71;22440:778;;;22562:20;;22552:6;:30;;22544:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;22701:9;;22684:13;22694:2;22684:9;:13::i;:::-;22675:6;:22;;;;:::i;:::-;:35;;22667:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22440:778;;;22828:25;:29;22854:2;22828:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;22862:31;:37;22894:4;22862:37;;;;;;;;;;;;;;;;;;;;;;;;;22861:38;22828:71;22824:394;;;22946:20;;22936:6;:30;;22928:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;22824:394;;;23072:31;:35;23104:2;23072:35;;;;;;;;;;;;;;;;;;;;;;;;;23068:150;;23165:9;;23148:13;23158:2;23148:9;:13::i;:::-;23139:6;:22;;;;:::i;:::-;:35;;23131:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23068:150;22824:394;22440:778;22016:1217;21983:1261;23258:28;23289:24;23307:4;23289:9;:24::i;:::-;23258:55;;23324:12;23339:31;23349:20;23339:9;:31::i;:::-;23324:46;;23401:7;:35;;;;;23425:11;;;;;;;;;;;23401:35;:61;;;;;23454:8;;;;;;;;;;;23453:9;23401:61;:110;;;;;23480:25;:31;23506:4;23480:31;;;;;;;;;;;;;;;;;;;;;;;;;23479:32;23401:110;:153;;;;;23529:19;:25;23549:4;23529:25;;;;;;;;;;;;;;;;;;;;;;;;;23528:26;23401:153;:194;;;;;23572:19;:23;23592:2;23572:23;;;;;;;;;;;;;;;;;;;;;;;;;23571:24;23401:194;23383:338;;;23633:4;23622:8;;:15;;;;;;;;;;;;;;;;;;23666:10;:8;:10::i;:::-;23704:5;23693:8;;:16;;;;;;;;;;;;;;;;;;23383:338;23741:12;23757:8;;;;;;;;;;;23756:9;23741:24;;23866:19;:25;23886:4;23866:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23895:19;:23;23915:2;23895:23;;;;;;;;;;;;;;;;;;;;;;;;;23866:52;23863:99;;;23945:5;23935:15;;23863:99;23982:12;24086:7;24083:1003;;;24116:11;;24112:1;:15;:45;;;;;24145:12;24131:11;;:26;24112:45;24109:820;;;24208:25;:29;24234:2;24208:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24257:1;24241:13;;:17;24208:50;24204:625;;;24314:3;24298:13;;24289:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;24282:35;;24388:13;;24369:16;;24362:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24340:18;;:61;;;;;;;:::i;:::-;;;;;;;;24460:13;;24447:10;;24440:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;24424:12;;:49;;;;;;;:::i;:::-;;;;;;;;24204:625;;;24547:25;:31;24573:4;24547:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24597:1;24582:12;;:16;24547:51;24544:285;;;24654:3;24639:12;;24630:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24623:34;;24727:12;;24709:15;;24702:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24680:18;;:59;;;;;;;:::i;:::-;;;;;;;;24797:12;;24785:9;;24778:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;24762:12;;:47;;;;;;;:::i;:::-;;;;;;;;24544:285;24204:625;24109:820;;;24888:25;24896:4;24902:2;24906:6;24888:7;:25::i;:::-;24881:32;;24109:820;24955:1;24948:4;:8;24945:93;;;24980:42;24996:4;25010;25017;24980:15;:42::i;:::-;24945:93;25070:4;25060:14;;;;;:::i;:::-;;;24083:1003;25098:33;25114:4;25120:2;25124:6;25098:15;:33::i;:::-;21695:3444;;;;21582:3557;;;;:::o;21198:188::-;21315:5;21281:25;:31;21307:4;21281:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21372:5;21338:40;;21366:4;21338:40;;;;;;;;;;;;21198:188;;:::o;10700:701::-;10813:1;10797:18;;:4;:18;;;10789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10890:1;10876:16;;:2;:16;;;10868:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10943:19;10965:9;:15;10975:4;10965:15;;;;;;;;;;;;;;;;10943:37;;11014:6;10999:11;:21;;10991:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11131:6;11117:11;:20;11099:9;:15;11109:4;11099:15;;;;;;;;;;;;;;;:38;;;;11334:6;11317:9;:13;11327:2;11317:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;11382:2;11367:26;;11376:4;11367:26;;;11386:6;11367:26;;;;;;:::i;:::-;;;;;;;;10778:623;10700:701;;;:::o;25147:226::-;25218:4;25266:18;;25242:20;:42;;:86;;;;;25317:11;;25302:12;:26;25242:86;:123;;;;;25364:1;25332:15;:29;25348:12;25332:29;;;;;;;;;;;;:33;25242:123;25235:130;;25147:226;;;:::o;27168:1361::-;27207:23;27233:24;27251:4;27233:9;:24::i;:::-;27207:50;;27268:25;27317:12;;27296:18;;:33;;;;:::i;:::-;27268:61;;27340:12;27395:1;27376:15;:20;:46;;;;27421:1;27400:17;:22;27376:46;27373:60;;;27425:7;;;;;27373:60;27487:2;27466:18;;:23;;;;:::i;:::-;27448:15;:41;27445:111;;;27542:2;27521:18;;:23;;;;:::i;:::-;27503:41;;27445:111;27625:23;27710:1;27690:17;27669:18;;27651:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;27625:86;;27722:26;27769:15;27751;:33;;;;:::i;:::-;27722:62;;27805:25;27833:21;27805:49;;27867:36;27884:18;27867:16;:36::i;:::-;27925:18;27970:17;27946:21;:41;;;;:::i;:::-;27925:62;;28008:17;28056;28041:12;;28028:10;:25;;;;:::i;:::-;:45;;;;:::i;:::-;28008:65;;28094:23;28133:9;28120:10;:22;;;;:::i;:::-;28094:48;;28184:1;28163:18;:22;;;;28211:1;28196:12;:16;;;;28254:9;;;;;;;;;;;28246:23;;28277:9;28246:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28233:58;;;;;28333:1;28315:15;:19;:42;;;;;28356:1;28338:15;:19;28315:42;28312:210;;;28373:46;28386:15;28403;28373:12;:46::i;:::-;28439:71;28454:18;28474:15;28491:18;;28439:71;;;;;;;;:::i;:::-;;;;;;;;28312:210;27196:1333;;;;;;;;;27168:1361;:::o;26552:608::-;26628:12;26656:25;:31;26682:4;26656:31;;;;;;;;;;;;;;;;;;;;;;;;;26653:500;;;26724:3;26719:2;26710:6;:11;;;;:::i;:::-;:17;;;;:::i;:::-;26703:24;;26789:12;;26771:15;;26764:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26742:18;;:59;;;;;;;:::i;:::-;;;;;;;;26851:12;;26839:9;;26832:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;26816:12;;:47;;;;;;;:::i;:::-;;;;;;;;26895:2;26883:15;;;;;;;;;;;;26653:500;;;26995:3;26980:1;26965:11;;:16;:26;;26989:2;26965:26;;;26984:2;26965:26;26955:37;;:6;:37;;;;:::i;:::-;:43;;;;:::i;:::-;26948:50;;27064:13;;27045:16;;27038:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27016:18;;:61;;;;;;;:::i;:::-;;;;;;;;27128:13;;27115:10;;27108:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;27092:12;;:49;;;;;;;:::i;:::-;;;;;;;;26653:500;26552:608;;;;;:::o;25381:633::-;25509:21;25547:1;25533:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25509:40;;25578:4;25560;25565:1;25560:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25604:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25594:4;25599:1;25594:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25639:62;25656:4;25671:15;25689:11;25639:8;:62::i;:::-;25740:15;:66;;;25821:11;25847:1;25891:4;25918;25938:15;25740:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25975:15;:29;25991:12;25975:29;;;;;;;;;;;;:31;;;;;;;;;:::i;:::-;;;;;;25436:578;25381:633;:::o;26026:517::-;26174:62;26191:4;26206:15;26224:11;26174:8;:62::i;:::-;26279:15;:31;;;26318:9;26351:4;26371:11;26397:1;26440;14998:6;26509:15;26279:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26026:517;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:151::-;4347:9;4380:37;4411:5;4380:37;:::i;:::-;4367:50;;4272:151;;;:::o;4429:181::-;4541:62;4597:5;4541:62;:::i;:::-;4536:3;4529:75;4429:181;;:::o;4616:272::-;4734:4;4772:2;4761:9;4757:18;4749:26;;4785:96;4878:1;4867:9;4863:17;4854:6;4785:96;:::i;:::-;4616:272;;;;:::o;4894:118::-;4981:24;4999:5;4981:24;:::i;:::-;4976:3;4969:37;4894:118;;:::o;5018:222::-;5111:4;5149:2;5138:9;5134:18;5126:26;;5162:71;5230:1;5219:9;5215:17;5206:6;5162:71;:::i;:::-;5018:222;;;;:::o;5246:329::-;5305:6;5354:2;5342:9;5333:7;5329:23;5325:32;5322:119;;;5360:79;;:::i;:::-;5322:119;5480:1;5505:53;5550:7;5541:6;5530:9;5526:22;5505:53;:::i;:::-;5495:63;;5451:117;5246:329;;;;:::o;5581:619::-;5658:6;5666;5674;5723:2;5711:9;5702:7;5698:23;5694:32;5691:119;;;5729:79;;:::i;:::-;5691:119;5849:1;5874:53;5919:7;5910:6;5899:9;5895:22;5874:53;:::i;:::-;5864:63;;5820:117;5976:2;6002:53;6047:7;6038:6;6027:9;6023:22;6002:53;:::i;:::-;5992:63;;5947:118;6104:2;6130:53;6175:7;6166:6;6155:9;6151:22;6130:53;:::i;:::-;6120:63;;6075:118;5581:619;;;;;:::o;6206:118::-;6293:24;6311:5;6293:24;:::i;:::-;6288:3;6281:37;6206:118;;:::o;6330:222::-;6423:4;6461:2;6450:9;6446:18;6438:26;;6474:71;6542:1;6531:9;6527:17;6518:6;6474:71;:::i;:::-;6330:222;;;;:::o;6558:86::-;6593:7;6633:4;6626:5;6622:16;6611:27;;6558:86;;;:::o;6650:112::-;6733:22;6749:5;6733:22;:::i;:::-;6728:3;6721:35;6650:112;;:::o;6768:214::-;6857:4;6895:2;6884:9;6880:18;6872:26;;6908:67;6972:1;6961:9;6957:17;6948:6;6908:67;:::i;:::-;6768:214;;;;:::o;6988:329::-;7047:6;7096:2;7084:9;7075:7;7071:23;7067:32;7064:119;;;7102:79;;:::i;:::-;7064:119;7222:1;7247:53;7292:7;7283:6;7272:9;7268:22;7247:53;:::i;:::-;7237:63;;7193:117;6988:329;;;;:::o;7323:116::-;7393:21;7408:5;7393:21;:::i;:::-;7386:5;7383:32;7373:60;;7429:1;7426;7419:12;7373:60;7323:116;:::o;7445:133::-;7488:5;7526:6;7513:20;7504:29;;7542:30;7566:5;7542:30;:::i;:::-;7445:133;;;;:::o;7584:468::-;7649:6;7657;7706:2;7694:9;7685:7;7681:23;7677:32;7674:119;;;7712:79;;:::i;:::-;7674:119;7832:1;7857:53;7902:7;7893:6;7882:9;7878:22;7857:53;:::i;:::-;7847:63;;7803:117;7959:2;7985:50;8027:7;8018:6;8007:9;8003:22;7985:50;:::i;:::-;7975:60;;7930:115;7584:468;;;;;:::o;8058:323::-;8114:6;8163:2;8151:9;8142:7;8138:23;8134:32;8131:119;;;8169:79;;:::i;:::-;8131:119;8289:1;8314:50;8356:7;8347:6;8336:9;8332:22;8314:50;:::i;:::-;8304:60;;8260:114;8058:323;;;;:::o;8387:474::-;8455:6;8463;8512:2;8500:9;8491:7;8487:23;8483:32;8480:119;;;8518:79;;:::i;:::-;8480:119;8638:1;8663:53;8708:7;8699:6;8688:9;8684:22;8663:53;:::i;:::-;8653:63;;8609:117;8765:2;8791:53;8836:7;8827:6;8816:9;8812:22;8791:53;:::i;:::-;8781:63;;8736:118;8387:474;;;;;:::o;8867:182::-;9007:34;9003:1;8995:6;8991:14;8984:58;8867:182;:::o;9055:366::-;9197:3;9218:67;9282:2;9277:3;9218:67;:::i;:::-;9211:74;;9294:93;9383:3;9294:93;:::i;:::-;9412:2;9407:3;9403:12;9396:19;;9055:366;;;:::o;9427:419::-;9593:4;9631:2;9620:9;9616:18;9608:26;;9680:9;9674:4;9670:20;9666:1;9655:9;9651:17;9644:47;9708:131;9834:4;9708:131;:::i;:::-;9700:139;;9427:419;;;:::o;9852:180::-;9900:77;9897:1;9890:88;9997:4;9994:1;9987:15;10021:4;10018:1;10011:15;10038:191;10078:3;10097:20;10115:1;10097:20;:::i;:::-;10092:25;;10131:20;10149:1;10131:20;:::i;:::-;10126:25;;10174:1;10171;10167:9;10160:16;;10195:3;10192:1;10189:10;10186:36;;;10202:18;;:::i;:::-;10186:36;10038:191;;;;:::o;10235:179::-;10375:31;10371:1;10363:6;10359:14;10352:55;10235:179;:::o;10420:366::-;10562:3;10583:67;10647:2;10642:3;10583:67;:::i;:::-;10576:74;;10659:93;10748:3;10659:93;:::i;:::-;10777:2;10772:3;10768:12;10761:19;;10420:366;;;:::o;10792:419::-;10958:4;10996:2;10985:9;10981:18;10973:26;;11045:9;11039:4;11035:20;11031:1;11020:9;11016:17;11009:47;11073:131;11199:4;11073:131;:::i;:::-;11065:139;;10792:419;;;:::o;11217:180::-;11265:77;11262:1;11255:88;11362:4;11359:1;11352:15;11386:4;11383:1;11376:15;11403:320;11447:6;11484:1;11478:4;11474:12;11464:22;;11531:1;11525:4;11521:12;11552:18;11542:81;;11608:4;11600:6;11596:17;11586:27;;11542:81;11670:2;11662:6;11659:14;11639:18;11636:38;11633:84;;11689:18;;:::i;:::-;11633:84;11454:269;11403:320;;;:::o;11729:410::-;11769:7;11792:20;11810:1;11792:20;:::i;:::-;11787:25;;11826:20;11844:1;11826:20;:::i;:::-;11821:25;;11881:1;11878;11874:9;11903:30;11921:11;11903:30;:::i;:::-;11892:41;;12082:1;12073:7;12069:15;12066:1;12063:22;12043:1;12036:9;12016:83;11993:139;;12112:18;;:::i;:::-;11993:139;11777:362;11729:410;;;;:::o;12145:180::-;12193:77;12190:1;12183:88;12290:4;12287:1;12280:15;12314:4;12311:1;12304:15;12331:185;12371:1;12388:20;12406:1;12388:20;:::i;:::-;12383:25;;12422:20;12440:1;12422:20;:::i;:::-;12417:25;;12461:1;12451:35;;12466:18;;:::i;:::-;12451:35;12508:1;12505;12501:9;12496:14;;12331:185;;;;:::o;12522:232::-;12662:34;12658:1;12650:6;12646:14;12639:58;12731:15;12726:2;12718:6;12714:15;12707:40;12522:232;:::o;12760:366::-;12902:3;12923:67;12987:2;12982:3;12923:67;:::i;:::-;12916:74;;12999:93;13088:3;12999:93;:::i;:::-;13117:2;13112:3;13108:12;13101:19;;12760:366;;;:::o;13132:419::-;13298:4;13336:2;13325:9;13321:18;13313:26;;13385:9;13379:4;13375:20;13371:1;13360:9;13356:17;13349:47;13413:131;13539:4;13413:131;:::i;:::-;13405:139;;13132:419;;;:::o;13557:227::-;13697:34;13693:1;13685:6;13681:14;13674:58;13766:10;13761:2;13753:6;13749:15;13742:35;13557:227;:::o;13790:366::-;13932:3;13953:67;14017:2;14012:3;13953:67;:::i;:::-;13946:74;;14029:93;14118:3;14029:93;:::i;:::-;14147:2;14142:3;14138:12;14131:19;;13790:366;;;:::o;14162:419::-;14328:4;14366:2;14355:9;14351:18;14343:26;;14415:9;14409:4;14405:20;14401:1;14390:9;14386:17;14379:47;14443:131;14569:4;14443:131;:::i;:::-;14435:139;;14162:419;;;:::o;14587:194::-;14627:4;14647:20;14665:1;14647:20;:::i;:::-;14642:25;;14681:20;14699:1;14681:20;:::i;:::-;14676:25;;14725:1;14722;14718:9;14710:17;;14749:1;14743:4;14740:11;14737:37;;;14754:18;;:::i;:::-;14737:37;14587:194;;;;:::o;14787:179::-;14927:31;14923:1;14915:6;14911:14;14904:55;14787:179;:::o;14972:366::-;15114:3;15135:67;15199:2;15194:3;15135:67;:::i;:::-;15128:74;;15211:93;15300:3;15211:93;:::i;:::-;15329:2;15324:3;15320:12;15313:19;;14972:366;;;:::o;15344:419::-;15510:4;15548:2;15537:9;15533:18;15525:26;;15597:9;15591:4;15587:20;15583:1;15572:9;15568:17;15561:47;15625:131;15751:4;15625:131;:::i;:::-;15617:139;;15344:419;;;:::o;15769:244::-;15909:34;15905:1;15897:6;15893:14;15886:58;15978:27;15973:2;15965:6;15961:15;15954:52;15769:244;:::o;16019:366::-;16161:3;16182:67;16246:2;16241:3;16182:67;:::i;:::-;16175:74;;16258:93;16347:3;16258:93;:::i;:::-;16376:2;16371:3;16367:12;16360:19;;16019:366;;;:::o;16391:419::-;16557:4;16595:2;16584:9;16580:18;16572:26;;16644:9;16638:4;16634:20;16630:1;16619:9;16615:17;16608:47;16672:131;16798:4;16672:131;:::i;:::-;16664:139;;16391:419;;;:::o;16816:224::-;16956:34;16952:1;16944:6;16940:14;16933:58;17025:7;17020:2;17012:6;17008:15;17001:32;16816:224;:::o;17046:366::-;17188:3;17209:67;17273:2;17268:3;17209:67;:::i;:::-;17202:74;;17285:93;17374:3;17285:93;:::i;:::-;17403:2;17398:3;17394:12;17387:19;;17046:366;;;:::o;17418:419::-;17584:4;17622:2;17611:9;17607:18;17599:26;;17671:9;17665:4;17661:20;17657:1;17646:9;17642:17;17635:47;17699:131;17825:4;17699:131;:::i;:::-;17691:139;;17418:419;;;:::o;17843:221::-;17983:34;17979:1;17971:6;17967:14;17960:58;18052:4;18047:2;18039:6;18035:15;18028:29;17843:221;:::o;18070:366::-;18212:3;18233:67;18297:2;18292:3;18233:67;:::i;:::-;18226:74;;18309:93;18398:3;18309:93;:::i;:::-;18427:2;18422:3;18418:12;18411:19;;18070:366;;;:::o;18442:419::-;18608:4;18646:2;18635:9;18631:18;18623:26;;18695:9;18689:4;18685:20;18681:1;18670:9;18666:17;18659:47;18723:131;18849:4;18723:131;:::i;:::-;18715:139;;18442:419;;;:::o;18867:240::-;19007:34;19003:1;18995:6;18991:14;18984:58;19076:23;19071:2;19063:6;19059:15;19052:48;18867:240;:::o;19113:366::-;19255:3;19276:67;19340:2;19335:3;19276:67;:::i;:::-;19269:74;;19352:93;19441:3;19352:93;:::i;:::-;19470:2;19465:3;19461:12;19454:19;;19113:366;;;:::o;19485:419::-;19651:4;19689:2;19678:9;19674:18;19666:26;;19738:9;19732:4;19728:20;19724:1;19713:9;19709:17;19702:47;19766:131;19892:4;19766:131;:::i;:::-;19758:139;;19485:419;;;:::o;19910:239::-;20050:34;20046:1;20038:6;20034:14;20027:58;20119:22;20114:2;20106:6;20102:15;20095:47;19910:239;:::o;20155:366::-;20297:3;20318:67;20382:2;20377:3;20318:67;:::i;:::-;20311:74;;20394:93;20483:3;20394:93;:::i;:::-;20512:2;20507:3;20503:12;20496:19;;20155:366;;;:::o;20527:419::-;20693:4;20731:2;20720:9;20716:18;20708:26;;20780:9;20774:4;20770:20;20766:1;20755:9;20751:17;20744:47;20808:131;20934:4;20808:131;:::i;:::-;20800:139;;20527:419;;;:::o;20952:225::-;21092:34;21088:1;21080:6;21076:14;21069:58;21161:8;21156:2;21148:6;21144:15;21137:33;20952:225;:::o;21183:366::-;21325:3;21346:67;21410:2;21405:3;21346:67;:::i;:::-;21339:74;;21422:93;21511:3;21422:93;:::i;:::-;21540:2;21535:3;21531:12;21524:19;;21183:366;;;:::o;21555:419::-;21721:4;21759:2;21748:9;21744:18;21736:26;;21808:9;21802:4;21798:20;21794:1;21783:9;21779:17;21772:47;21836:131;21962:4;21836:131;:::i;:::-;21828:139;;21555:419;;;:::o;21980:223::-;22120:34;22116:1;22108:6;22104:14;22097:58;22189:6;22184:2;22176:6;22172:15;22165:31;21980:223;:::o;22209:366::-;22351:3;22372:67;22436:2;22431:3;22372:67;:::i;:::-;22365:74;;22448:93;22537:3;22448:93;:::i;:::-;22566:2;22561:3;22557:12;22550:19;;22209:366;;;:::o;22581:419::-;22747:4;22785:2;22774:9;22770:18;22762:26;;22834:9;22828:4;22824:20;22820:1;22809:9;22805:17;22798:47;22862:131;22988:4;22862:131;:::i;:::-;22854:139;;22581:419;;;:::o;23006:221::-;23146:34;23142:1;23134:6;23130:14;23123:58;23215:4;23210:2;23202:6;23198:15;23191:29;23006:221;:::o;23233:366::-;23375:3;23396:67;23460:2;23455:3;23396:67;:::i;:::-;23389:74;;23472:93;23561:3;23472:93;:::i;:::-;23590:2;23585:3;23581:12;23574:19;;23233:366;;;:::o;23605:419::-;23771:4;23809:2;23798:9;23794:18;23786:26;;23858:9;23852:4;23848:20;23844:1;23833:9;23829:17;23822:47;23886:131;24012:4;23886:131;:::i;:::-;23878:139;;23605:419;;;:::o;24030:224::-;24170:34;24166:1;24158:6;24154:14;24147:58;24239:7;24234:2;24226:6;24222:15;24215:32;24030:224;:::o;24260:366::-;24402:3;24423:67;24487:2;24482:3;24423:67;:::i;:::-;24416:74;;24499:93;24588:3;24499:93;:::i;:::-;24617:2;24612:3;24608:12;24601:19;;24260:366;;;:::o;24632:419::-;24798:4;24836:2;24825:9;24821:18;24813:26;;24885:9;24879:4;24875:20;24871:1;24860:9;24856:17;24849:47;24913:131;25039:4;24913:131;:::i;:::-;24905:139;;24632:419;;;:::o;25057:222::-;25197:34;25193:1;25185:6;25181:14;25174:58;25266:5;25261:2;25253:6;25249:15;25242:30;25057:222;:::o;25285:366::-;25427:3;25448:67;25512:2;25507:3;25448:67;:::i;:::-;25441:74;;25524:93;25613:3;25524:93;:::i;:::-;25642:2;25637:3;25633:12;25626:19;;25285:366;;;:::o;25657:419::-;25823:4;25861:2;25850:9;25846:18;25838:26;;25910:9;25904:4;25900:20;25896:1;25885:9;25881:17;25874:47;25938:131;26064:4;25938:131;:::i;:::-;25930:139;;25657:419;;;:::o;26082:172::-;26222:24;26218:1;26210:6;26206:14;26199:48;26082:172;:::o;26260:366::-;26402:3;26423:67;26487:2;26482:3;26423:67;:::i;:::-;26416:74;;26499:93;26588:3;26499:93;:::i;:::-;26617:2;26612:3;26608:12;26601:19;;26260:366;;;:::o;26632:419::-;26798:4;26836:2;26825:9;26821:18;26813:26;;26885:9;26879:4;26875:20;26871:1;26860:9;26856:17;26849:47;26913:131;27039:4;26913:131;:::i;:::-;26905:139;;26632:419;;;:::o;27057:240::-;27197:34;27193:1;27185:6;27181:14;27174:58;27266:23;27261:2;27253:6;27249:15;27242:48;27057:240;:::o;27303:366::-;27445:3;27466:67;27530:2;27525:3;27466:67;:::i;:::-;27459:74;;27542:93;27631:3;27542:93;:::i;:::-;27660:2;27655:3;27651:12;27644:19;;27303:366;;;:::o;27675:419::-;27841:4;27879:2;27868:9;27864:18;27856:26;;27928:9;27922:4;27918:20;27914:1;27903:9;27899:17;27892:47;27956:131;28082:4;27956:131;:::i;:::-;27948:139;;27675:419;;;:::o;28100:169::-;28240:21;28236:1;28228:6;28224:14;28217:45;28100:169;:::o;28275:366::-;28417:3;28438:67;28502:2;28497:3;28438:67;:::i;:::-;28431:74;;28514:93;28603:3;28514:93;:::i;:::-;28632:2;28627:3;28623:12;28616:19;;28275:366;;;:::o;28647:419::-;28813:4;28851:2;28840:9;28836:18;28828:26;;28900:9;28894:4;28890:20;28886:1;28875:9;28871:17;28864:47;28928:131;29054:4;28928:131;:::i;:::-;28920:139;;28647:419;;;:::o;29072:241::-;29212:34;29208:1;29200:6;29196:14;29189:58;29281:24;29276:2;29268:6;29264:15;29257:49;29072:241;:::o;29319:366::-;29461:3;29482:67;29546:2;29541:3;29482:67;:::i;:::-;29475:74;;29558:93;29647:3;29558:93;:::i;:::-;29676:2;29671:3;29667:12;29660:19;;29319:366;;;:::o;29691:419::-;29857:4;29895:2;29884:9;29880:18;29872:26;;29944:9;29938:4;29934:20;29930:1;29919:9;29915:17;29908:47;29972:131;30098:4;29972:131;:::i;:::-;29964:139;;29691:419;;;:::o;30116:225::-;30256:34;30252:1;30244:6;30240:14;30233:58;30325:8;30320:2;30312:6;30308:15;30301:33;30116:225;:::o;30347:366::-;30489:3;30510:67;30574:2;30569:3;30510:67;:::i;:::-;30503:74;;30586:93;30675:3;30586:93;:::i;:::-;30704:2;30699:3;30695:12;30688:19;;30347:366;;;:::o;30719:419::-;30885:4;30923:2;30912:9;30908:18;30900:26;;30972:9;30966:4;30962:20;30958:1;30947:9;30943:17;30936:47;31000:131;31126:4;31000:131;:::i;:::-;30992:139;;30719:419;;;:::o;31144:147::-;31245:11;31282:3;31267:18;;31144:147;;;;:::o;31297:114::-;;:::o;31417:398::-;31576:3;31597:83;31678:1;31673:3;31597:83;:::i;:::-;31590:90;;31689:93;31778:3;31689:93;:::i;:::-;31807:1;31802:3;31798:11;31791:18;;31417:398;;;:::o;31821:379::-;32005:3;32027:147;32170:3;32027:147;:::i;:::-;32020:154;;32191:3;32184:10;;31821:379;;;:::o;32206:442::-;32355:4;32393:2;32382:9;32378:18;32370:26;;32406:71;32474:1;32463:9;32459:17;32450:6;32406:71;:::i;:::-;32487:72;32555:2;32544:9;32540:18;32531:6;32487:72;:::i;:::-;32569;32637:2;32626:9;32622:18;32613:6;32569:72;:::i;:::-;32206:442;;;;;;:::o;32654:180::-;32702:77;32699:1;32692:88;32799:4;32796:1;32789:15;32823:4;32820:1;32813:15;32840:180;32888:77;32885:1;32878:88;32985:4;32982:1;32975:15;33009:4;33006:1;32999:15;33026:143;33083:5;33114:6;33108:13;33099:22;;33130:33;33157:5;33130:33;:::i;:::-;33026:143;;;;:::o;33175:351::-;33245:6;33294:2;33282:9;33273:7;33269:23;33265:32;33262:119;;;33300:79;;:::i;:::-;33262:119;33420:1;33445:64;33501:7;33492:6;33481:9;33477:22;33445:64;:::i;:::-;33435:74;;33391:128;33175:351;;;;:::o;33532:85::-;33577:7;33606:5;33595:16;;33532:85;;;:::o;33623:158::-;33681:9;33714:61;33732:42;33741:32;33767:5;33741:32;:::i;:::-;33732:42;:::i;:::-;33714:61;:::i;:::-;33701:74;;33623:158;;;:::o;33787:147::-;33882:45;33921:5;33882:45;:::i;:::-;33877:3;33870:58;33787:147;;:::o;33940:114::-;34007:6;34041:5;34035:12;34025:22;;33940:114;;;:::o;34060:184::-;34159:11;34193:6;34188:3;34181:19;34233:4;34228:3;34224:14;34209:29;;34060:184;;;;:::o;34250:132::-;34317:4;34340:3;34332:11;;34370:4;34365:3;34361:14;34353:22;;34250:132;;;:::o;34388:108::-;34465:24;34483:5;34465:24;:::i;:::-;34460:3;34453:37;34388:108;;:::o;34502:179::-;34571:10;34592:46;34634:3;34626:6;34592:46;:::i;:::-;34670:4;34665:3;34661:14;34647:28;;34502:179;;;;:::o;34687:113::-;34757:4;34789;34784:3;34780:14;34772:22;;34687:113;;;:::o;34836:732::-;34955:3;34984:54;35032:5;34984:54;:::i;:::-;35054:86;35133:6;35128:3;35054:86;:::i;:::-;35047:93;;35164:56;35214:5;35164:56;:::i;:::-;35243:7;35274:1;35259:284;35284:6;35281:1;35278:13;35259:284;;;35360:6;35354:13;35387:63;35446:3;35431:13;35387:63;:::i;:::-;35380:70;;35473:60;35526:6;35473:60;:::i;:::-;35463:70;;35319:224;35306:1;35303;35299:9;35294:14;;35259:284;;;35263:14;35559:3;35552:10;;34960:608;;;34836:732;;;;:::o;35574:831::-;35837:4;35875:3;35864:9;35860:19;35852:27;;35889:71;35957:1;35946:9;35942:17;35933:6;35889:71;:::i;:::-;35970:80;36046:2;36035:9;36031:18;36022:6;35970:80;:::i;:::-;36097:9;36091:4;36087:20;36082:2;36071:9;36067:18;36060:48;36125:108;36228:4;36219:6;36125:108;:::i;:::-;36117:116;;36243:72;36311:2;36300:9;36296:18;36287:6;36243:72;:::i;:::-;36325:73;36393:3;36382:9;36378:19;36369:6;36325:73;:::i;:::-;35574:831;;;;;;;;:::o;36411:233::-;36450:3;36473:24;36491:5;36473:24;:::i;:::-;36464:33;;36519:66;36512:5;36509:77;36506:103;;36589:18;;:::i;:::-;36506:103;36636:1;36629:5;36625:13;36618:20;;36411:233;;;:::o;36650:807::-;36899:4;36937:3;36926:9;36922:19;36914:27;;36951:71;37019:1;37008:9;37004:17;36995:6;36951:71;:::i;:::-;37032:72;37100:2;37089:9;37085:18;37076:6;37032:72;:::i;:::-;37114:80;37190:2;37179:9;37175:18;37166:6;37114:80;:::i;:::-;37204;37280:2;37269:9;37265:18;37256:6;37204:80;:::i;:::-;37294:73;37362:3;37351:9;37347:19;37338:6;37294:73;:::i;:::-;37377;37445:3;37434:9;37430:19;37421:6;37377:73;:::i;:::-;36650:807;;;;;;;;;:::o;37463:143::-;37520:5;37551:6;37545:13;37536:22;;37567:33;37594:5;37567:33;:::i;:::-;37463:143;;;;:::o;37612:663::-;37700:6;37708;37716;37765:2;37753:9;37744:7;37740:23;37736:32;37733:119;;;37771:79;;:::i;:::-;37733:119;37891:1;37916:64;37972:7;37963:6;37952:9;37948:22;37916:64;:::i;:::-;37906:74;;37862:128;38029:2;38055:64;38111:7;38102:6;38091:9;38087:22;38055:64;:::i;:::-;38045:74;;38000:129;38168:2;38194:64;38250:7;38241:6;38230:9;38226:22;38194:64;:::i;:::-;38184:74;;38139:129;37612:663;;;;;:::o

Swarm Source

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