ETH Price: $3,402.65 (+2.69%)

Token

Messier (M87)
 

Overview

Max Total Supply

1,000,000,000,000 M87

Holders

6,922 ( 0.058%)

Market

Price

$0.00 @ 0.000000 ETH (+19.39%)

Onchain Market Cap

$84,640,000.00

Circulating Supply Market Cap

$74,895,852.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
87,420,937.142528633891903995 M87

Value
$7,399.31 ( ~2.1746 Eth) [0.0087%]
0xf84b80a4cd795d26802ea5836d593cba3f4efd44
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A fully decentralized Blackhole for a private transaction on Ethereum.

Market

Volume (24H):$793,506.00
Market Capitalization:$74,895,852.00
Circulating Supply:884,846,293,945.00 M87
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
M87

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }

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

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

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

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

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract M87 is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public  immutable uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  treasuryFeeOnBuy;
    uint256 public  treasuryFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    uint256 private immutable maxFee;

    address public  MTreasury;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MTreasuryChanged(address MTreasury);
    event UpdateBuyFees(uint256 treasuryFeeOnBuy);
    event UpdateSellFees(uint256 treasuryFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);
    event SwapEnabledUpdated(bool enabled);

    constructor () ERC20("Messier", "M87") 
    {   
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        treasuryFeeOnBuy  = 3;
        treasuryFeeOnSell = 3;

        maxFee             = 3;

        _totalFeesOnBuy    = treasuryFeeOnBuy;
        _totalFeesOnSell   = treasuryFeeOnSell;

        MTreasury = 0x22E970c8fFFD9303cEaf054eCf9b427112220161;

        maxTransactionLimitEnabled = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[address(0xdead)] = true;
        _isExcludedFromMaxTxLimit[MTreasury] = true;

        maxWalletLimitEnabled = true;

        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[MTreasury] = true;

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

        _mint(owner(), 1_000_000_000_000 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;
    
        maxTransactionAmountBuy     = totalSupply() * 20 / 1000;
        maxTransactionAmountSell    = totalSupply() * 20 / 1000;
    
        maxWalletAmount             = totalSupply() * 20 / 1000;

        tradingEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {

    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

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

    function updateBuyFees(uint256 _treasuryFeeOnBuy) external onlyOwner {
        treasuryFeeOnBuy = _treasuryFeeOnBuy;

        _totalFeesOnBuy   = treasuryFeeOnBuy;

        require(_totalFeesOnBuy <= maxFee, "Total Fees cannot exceed the maximum");

        emit UpdateBuyFees(treasuryFeeOnBuy);
    }

    function updateSellFees(uint256 _treasuryFeeOnSell) external onlyOwner {
        treasuryFeeOnSell = _treasuryFeeOnSell;

        _totalFeesOnSell   = treasuryFeeOnSell;

        require(_totalFeesOnSell <= maxFee, "Total Fees cannot exceed the maximum");

        emit UpdateSellFees(treasuryFeeOnSell);
    }

    function changeMTreasury(address _MTreasury) external onlyOwner{
        require(_MTreasury != MTreasury,"Treasury wallet is already that address");
        require(_MTreasury != address(0),"Treasury wallet cannot be the zero address");
        MTreasury = _MTreasury;

        emit MTreasuryChanged(MTreasury);
    }

    bool public tradingEnabled;
    uint256 public tradingBlock;
    uint256 public tradingTime;

    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapEnabled = true;
        tradingBlock = block.number;
        tradingTime = block.timestamp;
    }

    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");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                !_isExcludedFromMaxTxLimit[from] && 
                !_isExcludedFromMaxTxLimit[to]
            ) {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            _totalFeesOnBuy + _totalFeesOnSell > 0 &&
            swapEnabled
        ) {
            swapping = true;
            
            swapAndSendMarketing(contractTokenBalance);

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = _totalFeesOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees = _totalFeesOnSell;
        } else {
            _totalFees = 0;
        }

        if(block.timestamp > 30 minutes + tradingTime) {
            // nothing
        } else if (block.timestamp > 15 minutes + tradingTime) {
            if (from == uniswapV2Pair) {
                _totalFees = 3;
            } else if (to == uniswapV2Pair) {
                _totalFees = 15;
            }
        } else{
            if (from == uniswapV2Pair) {
                _totalFees = 3;
                if (block.number == tradingBlock){
                    _totalFees = 99;
                }
            } else if (to == uniswapV2Pair) {
                _totalFees = 30;
            }
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) 
        {
            if (!_isExcludedFromMaxWalletLimit[from] && 
                !_isExcludedFromMaxWalletLimit[to] &&
                to != uniswapV2Pair
            ) {
                uint256 balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }

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

    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;

        emit SwapEnabledUpdated(swapEnabled);
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

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

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

        uint256 newBalance = address(this).balance - initialBalance;

        payable(MTreasury).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled;
    uint256 public maxWalletAmount;

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxWalletLimitAmountChanged(uint256 maxWalletAmount);

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state");
        maxWalletLimitEnabled = enable;

        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%");
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());

        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state");
        maxTransactionLimitEnabled = enable;

        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= (totalSupply() / (10 ** decimals())) / 1_000 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 1_000, 
            "Max Transaction limit cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());

        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxTxLimit[account] = exclude;

        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"MTreasury","type":"address"}],"name":"MTreasuryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"treasuryFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"treasuryFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"UpdateWalletToWalletTransferFee","type":"event"},{"inputs":[],"name":"MTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_MTreasury","type":"address"}],"name":"changeMTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingTime","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":"treasuryFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_treasuryFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b506040518060400160405280600781526020017f4d657373696572000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d3837000000000000000000000000000000000000000000000000000000000081525081600390816200008f91906200103c565b508060049081620000a191906200103c565b5050506000620000b662000a2a60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000603846036200017d577310ed43c718714eb63d5aa57b78b54704e256024e9050620001dd565b60614603620001a35773d99d1c33f9fc3444f8101754abc46c52416550d19050620001dc565b6001461480620001b35750600546145b15620001d657737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001db565b600080fd5b5b5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025691906200118d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e491906200118d565b6040518363ffffffff1660e01b815260040162000303929190620011d0565b6020604051808303816000875af115801562000323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034991906200118d565b90508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003e8306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a3260201b60201c565b60036007819055506003600881905550600360c08181525050600754600981905550600854600a819055507322e970c8fffd9303ceaf054ecf9b427112220161600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601460006101000a81548160ff0219169083151502179055506001601360006200049962000c0360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055506001601060006200064762000c0360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620007da62000c0360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200092d620008f162000c0360201b60201c565b6200090162000c2d60201b60201c565b600a6200090f91906200138d565b64e8d4a51000620009219190620013de565b62000c3660201b60201c565b6113886200094062000dae60201b60201c565b6200094c919062001458565b600c819055506103e860146200096762000dae60201b60201c565b620009739190620013de565b6200097f919062001458565b6015819055506103e860146200099a62000dae60201b60201c565b620009a69190620013de565b620009b2919062001458565b6016819055506103e86014620009cd62000dae60201b60201c565b620009d99190620013de565b620009e5919062001458565b6012819055506000600d60026101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff021916908315150217905550505050620016ac565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9b9062001517565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b0d90620015af565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000bf69190620015e2565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c9f906200164f565b60405180910390fd5b62000cbc6000838362000db860201b60201c565b806002600082825462000cd0919062001671565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000d27919062001671565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d8e9190620015e2565b60405180910390a362000daa6000838362000dbd60201b60201c565b5050565b6000600254905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e4457607f821691505b60208210810362000e5a5762000e5962000dfc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ec47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e85565b62000ed0868362000e85565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f1d62000f1762000f118462000ee8565b62000ef2565b62000ee8565b9050919050565b6000819050919050565b62000f398362000efc565b62000f5162000f488262000f24565b84845462000e92565b825550505050565b600090565b62000f6862000f59565b62000f7581848462000f2e565b505050565b5b8181101562000f9d5762000f9160008262000f5e565b60018101905062000f7b565b5050565b601f82111562000fec5762000fb68162000e60565b62000fc18462000e75565b8101602085101562000fd1578190505b62000fe962000fe08562000e75565b83018262000f7a565b50505b505050565b600082821c905092915050565b6000620010116000198460080262000ff1565b1980831691505092915050565b60006200102c838362000ffe565b9150826002028217905092915050565b620010478262000dc2565b67ffffffffffffffff81111562001063576200106262000dcd565b5b6200106f825462000e2b565b6200107c82828562000fa1565b600060209050601f831160018114620010b457600084156200109f578287015190505b620010ab85826200101e565b8655506200111b565b601f198416620010c48662000e60565b60005b82811015620010ee57848901518255600182019150602085019450602081019050620010c7565b868310156200110e57848901516200110a601f89168262000ffe565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011558262001128565b9050919050565b620011678162001148565b81146200117357600080fd5b50565b60008151905062001187816200115c565b92915050565b600060208284031215620011a657620011a562001123565b5b6000620011b68482850162001176565b91505092915050565b620011ca8162001148565b82525050565b6000604082019050620011e76000830185620011bf565b620011f66020830184620011bf565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200128b57808604811115620012635762001262620011fd565b5b6001851615620012735780820291505b808102905062001283856200122c565b945062001243565b94509492505050565b600082620012a6576001905062001379565b81620012b6576000905062001379565b8160018114620012cf5760028114620012da5762001310565b600191505062001379565b60ff841115620012ef57620012ee620011fd565b5b8360020a915084821115620013095762001308620011fd565b5b5062001379565b5060208310610133831016604e8410600b84101617156200134a5782820a905083811115620013445762001343620011fd565b5b62001379565b62001359848484600162001239565b92509050818404811115620013735762001372620011fd565b5b81810290505b9392505050565b600060ff82169050919050565b60006200139a8262000ee8565b9150620013a78362001380565b9250620013d67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001294565b905092915050565b6000620013eb8262000ee8565b9150620013f88362000ee8565b9250828202620014088162000ee8565b91508282048414831517620014225762001421620011fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620014658262000ee8565b9150620014728362000ee8565b92508262001485576200148462001429565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620014ff60248362001490565b91506200150c82620014a1565b604082019050919050565b600060208201905081810360008301526200153281620014f0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200159760228362001490565b9150620015a48262001539565b604082019050919050565b60006020820190508181036000830152620015ca8162001588565b9050919050565b620015dc8162000ee8565b82525050565b6000602082019050620015f96000830184620015d1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001637601f8362001490565b91506200164482620015ff565b602082019050919050565b600060208201905081810360008301526200166a8162001628565b9050919050565b60006200167e8262000ee8565b91506200168b8362000ee8565b9250828201905080821115620016a657620016a5620011fd565b5b92915050565b60805160a05160c0516157846200173e6000396000818161173d015261271f01526000818161130101528181612fca0152818161301f015281816131200152818161323d015281816133cd0152818161342a015281816134bb0152818161351701528181613575015281816135df015261373a015260008181610dc801528181613be00152613cbd01526157846000f3fe6080604052600436106102815760003560e01c806371fc46881161014f578063b6f7f681116100c1578063dd62ed3e1161007a578063dd62ed3e146109ab578063e01af92c146109e8578063e2f4560514610a11578063eba4c33314610a3c578063f2fde38b14610a65578063f9d0831a14610a8e57610288565b8063b6f7f681146108af578063b8158d60146108d8578063c024666814610903578063cd51e6d41461092c578063cdd4bd7914610957578063d2fcc0011461098257610288565b806395d89b411161011357806395d89b4114610779578063a457c2d7146107a4578063a8a69b9d146107e1578063a9059cbb1461081e578063aa4bde281461085b578063afa4f3b21461088657610288565b806371fc4688146106ba578063824e4605146106e3578063880bcbc11461070e5780638a8c523c146107375780638da5cb5b1461074e57610288565b80632a6c7dba116101f35780634fbee193116101ac5780634fbee193146105aa57806356a6cabf146105e757806359136fa5146106105780636ddd17131461063b57806370a0823114610666578063715018a6146106a357610288565b80632a6c7dba146104985780632ba86bf2146104c1578063313ce567146104ec578063395093511461051757806349bd5a5e146105545780634ada218b1461057f57610288565b80631694505e116102455780631694505e1461037457806318160ddd1461039f57806318d9ceae146103ca57806321a9d82a1461040757806323b872dd1461043257806327a14fc21461046f57610288565b80630105d0fd1461028d5780630133f248146102b857806306fdde03146102e1578063095ea7b31461030c578063118bd3651461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ab7565b6040516102af9190613e0d565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613e8b565b610abd565b005b3480156102ed57600080fd5b506102f6610cf0565b6040516103039190613f48565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613f96565b610d82565b6040516103409190613ff1565b60405180910390f35b34801561035557600080fd5b5061035e610da0565b60405161036b919061401b565b60405180910390f35b34801561038057600080fd5b50610389610dc6565b6040516103969190614095565b60405180910390f35b3480156103ab57600080fd5b506103b4610dea565b6040516103c19190613e0d565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613e8b565b610df4565b6040516103fe9190613ff1565b60405180910390f35b34801561041357600080fd5b5061041c610e4a565b6040516104299190613ff1565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906140b0565b610e5d565b6040516104669190613ff1565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190614103565b610f7c565b005b3480156104a457600080fd5b506104bf60048036038101906104ba919061415c565b6110e8565b005b3480156104cd57600080fd5b506104d6611237565b6040516104e39190613ff1565b60405180910390f35b3480156104f857600080fd5b5061050161124a565b60405161050e91906141a5565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613f96565b611253565b60405161054b9190613ff1565b60405180910390f35b34801561056057600080fd5b506105696112ff565b604051610576919061401b565b60405180910390f35b34801561058b57600080fd5b50610594611323565b6040516105a19190613ff1565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e8b565b611336565b6040516105de9190613ff1565b60405180910390f35b3480156105f357600080fd5b5061060e6004803603810190610609919061415c565b61138c565b005b34801561061c57600080fd5b506106256114db565b6040516106329190613e0d565b60405180910390f35b34801561064757600080fd5b506106506114e1565b60405161065d9190613ff1565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190613e8b565b6114f4565b60405161069a9190613e0d565b60405180910390f35b3480156106af57600080fd5b506106b861153c565b005b3480156106c657600080fd5b506106e160048036038101906106dc9190614103565b611694565b005b3480156106ef57600080fd5b506106f86117dc565b6040516107059190613e0d565b60405180910390f35b34801561071a57600080fd5b50610735600480360381019061073091906141c0565b6117e2565b005b34801561074357600080fd5b5061074c611a22565b005b34801561075a57600080fd5b50610763611b4f565b604051610770919061401b565b60405180910390f35b34801561078557600080fd5b5061078e611b79565b60405161079b9190613f48565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190613f96565b611c0b565b6040516107d89190613ff1565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190613e8b565b611cf6565b6040516108159190613ff1565b60405180910390f35b34801561082a57600080fd5b5061084560048036038101906108409190613f96565b611d4c565b6040516108529190613ff1565b60405180910390f35b34801561086757600080fd5b50610870611d6a565b60405161087d9190613e0d565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a89190614103565b611d70565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190614200565b611ea1565b005b3480156108e457600080fd5b506108ed612076565b6040516108fa9190613e0d565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906141c0565b61207c565b005b34801561093857600080fd5b5061094161224e565b60405161094e9190613e0d565b60405180910390f35b34801561096357600080fd5b5061096c612254565b6040516109799190613e0d565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a491906141c0565b61225a565b005b3480156109b757600080fd5b506109d260048036038101906109cd9190614240565b61249a565b6040516109df9190613e0d565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a919061415c565b612521565b005b348015610a1d57600080fd5b50610a26612670565b604051610a339190613e0d565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190614103565b612676565b005b348015610a7157600080fd5b50610a8c6004803603810190610a879190613e8b565b6127be565b005b348015610a9a57600080fd5b50610ab56004803603810190610ab09190613e8b565b612984565b005b60155481565b610ac5612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b906142cc565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb9061435e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a906143f0565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1f1bc4ab1faa1ed888d49fca460cbbd498ef5a3dc917fa55959dcd2547700556600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610ce5919061401b565b60405180910390a150565b606060038054610cff9061443f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2b9061443f565b8015610d785780601f10610d4d57610100808354040283529160200191610d78565b820191906000526020600020905b815481529060010190602001808311610d5b57829003601f168201915b5050505050905090565b6000610d96610d8f612bf4565b8484612bfc565b6001905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ea9612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f655782811015610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f47906144e2565b60405180910390fd5b610f6485610f5c612bf4565b858403612bfc565b5b610f70858585612dc5565b60019150509392505050565b610f84612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a906142cc565b60405180910390fd5b606461101d61124a565b600a6110299190614664565b611031610dea565b61103b91906146de565b61104591906146de565b811015611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90614781565b60405180910390fd5b61108f61124a565b600a61109b9190614664565b816110a691906147a1565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426012546040516110dd9190613e0d565b60405180910390a150565b6110f0612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611176906142cc565b60405180910390fd5b601160009054906101000a900460ff161515811515036111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90614855565b60405180910390fd5b80601160006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601160009054906101000a900460ff1660405161122c9190613ff1565b60405180910390a150565b601460009054906101000a900460ff1681565b60006012905090565b60006112f5611260612bf4565b84846001600061126e612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f09190614875565b612bfc565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60029054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611394612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906142cc565b60405180910390fd5b601460009054906101000a900460ff16151581151503611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f9061491b565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601460009054906101000a900460ff166040516114d09190613ff1565b60405180910390a150565b60165481565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611544612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ca906142cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61169c612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611722906142cc565b60405180910390fd5b806007819055506007546009819055507f000000000000000000000000000000000000000000000000000000000000000060095411156117a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611797906149ad565b60405180910390fd5b7f2c18bb7f919d244fa8ee59517018a471ec455b76373719d2d6664fa3b1947da96007546040516117d19190613e0d565b60405180910390a150565b60075481565b6117ea612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611870906142cc565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190290614a3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090614aab565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1082604051611a169190613ff1565b60405180910390a25050565b611a2a612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab0906142cc565b60405180910390fd5b600d60029054906101000a900460ff1615611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090614b17565b60405180910390fd5b6001600d60026101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600e8190555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b889061443f565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb49061443f565b8015611c015780601f10611bd657610100808354040283529160200191611c01565b820191906000526020600020905b815481529060010190602001808311611be457829003601f168201915b5050505050905090565b60008060016000611c1a612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90614ba9565b60405180910390fd5b611ceb611ce2612bf4565b85858403612bfc565b600191505092915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611d60611d59612bf4565b8484612dc5565b6001905092915050565b60125481565b611d78612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe906142cc565b60405180910390fd5b620f4240611e13610dea565b611e1d91906146de565b8111611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590614c3b565b60405180910390fd5b80600c819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600c54604051611e969190613e0d565b60405180910390a150565b611ea9612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f906142cc565b60405180910390fd5b6103e8611f4361124a565b600a611f4f9190614664565b611f57610dea565b611f6191906146de565b611f6b91906146de565b8210158015611fac57506103e8611f8061124a565b600a611f8c9190614664565b611f94610dea565b611f9e91906146de565b611fa891906146de565b8110155b611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290614ccd565b60405180910390fd5b611ff361124a565b600a611fff9190614664565b8261200a91906147a1565b60158190555061201861124a565b600a6120249190614664565b8161202f91906147a1565b6016819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13160155460165460405161206a929190614ced565b60405180910390a15050565b600f5481565b612084612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a906142cc565b60405180910390fd5b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c90614d88565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122429190613ff1565b60405180910390a25050565b600e5481565b60085481565b612262612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906142cc565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90614a3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614aab565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161248e9190613ff1565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612529612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906142cc565b60405180910390fd5b801515600d60019054906101000a900460ff1615150361260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490614e1a565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a12600d60019054906101000a900460ff166040516126659190613ff1565b60405180910390a150565b600c5481565b61267e612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461270d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612704906142cc565b60405180910390fd5b80600881905550600854600a819055507f0000000000000000000000000000000000000000000000000000000000000000600a541115612782576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612779906149ad565b60405180910390fd5b7fa54a45ff147b987a50c11919090466ad8b9df105c160d2e6bfb296df2b9abfb76008546040516127b39190613e0d565b60405180910390a150565b6127c6612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c906142cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614eac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61298c612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a12906142cc565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8090614f3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612aec57612ae6473373ffffffffffffffffffffffffffffffffffffffff1661380290919063ffffffff16565b50612bf1565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b2c919061401b565b602060405180830381865afa158015612b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6d9190614f73565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612baa929190614fa0565b6020604051808303816000875af1158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190614fde565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629061507d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd19061510f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612db89190613e0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b906151a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9a90615233565b60405180910390fd5b600d60029054906101000a900460ff1680612f075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f5b5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f919061529f565b60405180910390fd5b60008103612fb357612fae838360006138bd565b6137fd565b601460009054906101000a900460ff1615613203577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061306d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156130c35750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131195750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613202577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131bb576015548111156131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ad90615331565b60405180910390fd5b613201565b601654811115613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790615331565b60405180910390fd5b5b5b5b600061320e306114f4565b90506000600c5482101590508080156132345750600d60009054906101000a900460ff16155b801561328b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156132a657506000600a546009546132a49190614875565b115b80156132be5750600d60019054906101000a900460ff165b15613303576001600d60006101000a81548160ff0219169083151502179055506132e782613b3c565b6000600d60006101000a81548160ff0219169083151502179055505b6000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133a65750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133bd5750600d60009054906101000a900460ff165b156133cb576000905061348c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361342857600954905061348b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361348557600a54905061348a565b600090505b5b5b600f5461070861349c9190614875565b421161363857600f546103846134b29190614875565b421115613573577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603613515576003905061356e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361356d57600f90505b5b613637565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036135dd5760039050600e5443036135d857606390505b613636565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361363557601e90505b5b5b5b60008111156136785760006064828661365191906147a1565b61365b91906146de565b905080856136699190615351565b94506136768730836138bd565b505b601160009054906101000a900460ff16156137ee57601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137315750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561378957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156137ed576000613799866114f4565b905060125485826137aa9190614875565b11156137eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e2906153f7565b60405180910390fd5b505b5b6137f98686866138bd565b5050505b505050565b600081471015613847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383e90615463565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff168360405161386d906154b4565b60006040518083038185875af1925050503d80600081146138aa576040519150601f19603f3d011682016040523d82523d6000602084013e6138af565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361392c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613923906151a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361399b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399290615233565b60405180910390fd5b6139a6838383613dea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a239061553b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613abf9190614875565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b239190613e0d565b60405180910390a3613b36848484613def565b50505050565b60004790506000600267ffffffffffffffff811115613b5e57613b5d61555b565b5b604051908082528060200260200182016040528015613b8c5781602001602082028036833780820191505090505b5090503081600081518110613ba457613ba361558a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6d91906155ce565b81600181518110613c8157613c8061558a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401613d1d9594939291906156f4565b600060405180830381600087803b158015613d3757600080fd5b505af1158015613d4b573d6000803e3d6000fd5b5050505060008247613d5d9190615351565b9050613daa81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661380290919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613ddc929190614ced565b60405180910390a150505050565b505050565b505050565b6000819050919050565b613e0781613df4565b82525050565b6000602082019050613e226000830184613dfe565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e5882613e2d565b9050919050565b613e6881613e4d565b8114613e7357600080fd5b50565b600081359050613e8581613e5f565b92915050565b600060208284031215613ea157613ea0613e28565b5b6000613eaf84828501613e76565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ef2578082015181840152602081019050613ed7565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f1a82613eb8565b613f248185613ec3565b9350613f34818560208601613ed4565b613f3d81613efe565b840191505092915050565b60006020820190508181036000830152613f628184613f0f565b905092915050565b613f7381613df4565b8114613f7e57600080fd5b50565b600081359050613f9081613f6a565b92915050565b60008060408385031215613fad57613fac613e28565b5b6000613fbb85828601613e76565b9250506020613fcc85828601613f81565b9150509250929050565b60008115159050919050565b613feb81613fd6565b82525050565b60006020820190506140066000830184613fe2565b92915050565b61401581613e4d565b82525050565b6000602082019050614030600083018461400c565b92915050565b6000819050919050565b600061405b61405661405184613e2d565b614036565b613e2d565b9050919050565b600061406d82614040565b9050919050565b600061407f82614062565b9050919050565b61408f81614074565b82525050565b60006020820190506140aa6000830184614086565b92915050565b6000806000606084860312156140c9576140c8613e28565b5b60006140d786828701613e76565b93505060206140e886828701613e76565b92505060406140f986828701613f81565b9150509250925092565b60006020828403121561411957614118613e28565b5b600061412784828501613f81565b91505092915050565b61413981613fd6565b811461414457600080fd5b50565b60008135905061415681614130565b92915050565b60006020828403121561417257614171613e28565b5b600061418084828501614147565b91505092915050565b600060ff82169050919050565b61419f81614189565b82525050565b60006020820190506141ba6000830184614196565b92915050565b600080604083850312156141d7576141d6613e28565b5b60006141e585828601613e76565b92505060206141f685828601614147565b9150509250929050565b6000806040838503121561421757614216613e28565b5b600061422585828601613f81565b925050602061423685828601613f81565b9150509250929050565b6000806040838503121561425757614256613e28565b5b600061426585828601613e76565b925050602061427685828601613e76565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142b6602083613ec3565b91506142c182614280565b602082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b7f54726561737572792077616c6c657420697320616c726561647920746861742060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b6000614348602783613ec3565b9150614353826142ec565b604082019050919050565b600060208201905081810360008301526143778161433b565b9050919050565b7f54726561737572792077616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006143da602a83613ec3565b91506143e58261437e565b604082019050919050565b60006020820190508181036000830152614409816143cd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061445757607f821691505b60208210810361446a57614469614410565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144cc602883613ec3565b91506144d782614470565b604082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156145885780860481111561456457614563614502565b5b60018516156145735780820291505b808102905061458185614531565b9450614548565b94509492505050565b6000826145a1576001905061465d565b816145af576000905061465d565b81600181146145c557600281146145cf576145fe565b600191505061465d565b60ff8411156145e1576145e0614502565b5b8360020a9150848211156145f8576145f7614502565b5b5061465d565b5060208310610133831016604e8410600b84101617156146335782820a90508381111561462e5761462d614502565b5b61465d565b614640848484600161453e565b9250905081840481111561465757614656614502565b5b81810290505b9392505050565b600061466f82613df4565b915061467a83614189565b92506146a77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614591565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146e982613df4565b91506146f483613df4565b925082614704576147036146af565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061476b602d83613ec3565b91506147768261470f565b604082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b60006147ac82613df4565b91506147b783613df4565b92508282026147c581613df4565b915082820484148315176147dc576147db614502565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b600061483f602d83613ec3565b915061484a826147e3565b604082019050919050565b6000602082019050818103600083015261486e81614832565b9050919050565b600061488082613df4565b915061488b83613df4565b92508282019050808211156148a3576148a2614502565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b6000614905603283613ec3565b9150614910826148a9565b604082019050919050565b60006020820190508181036000830152614934816148f8565b9050919050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000614997602483613ec3565b91506149a28261493b565b604082019050919050565b600060208201905081810360008301526149c68161498a565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b6000614a29602483613ec3565b9150614a34826149cd565b604082019050919050565b60006020820190508181036000830152614a5881614a1c565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b6000614a95601783613ec3565b9150614aa082614a5f565b602082019050919050565b60006020820190508181036000830152614ac481614a88565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000614b01601883613ec3565b9150614b0c82614acb565b602082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b93602583613ec3565b9150614b9e82614b37565b604082019050919050565b60006020820190508181036000830152614bc281614b86565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000614c25603f83613ec3565b9150614c3082614bc9565b604082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69742063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000614cb7603f83613ec3565b9150614cc282614c5b565b604082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b6000604082019050614d026000830185613dfe565b614d0f6020830184613dfe565b9392505050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614d72602a83613ec3565b9150614d7d82614d16565b604082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e04602283613ec3565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e96602683613ec3565b9150614ea182614e3a565b604082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b6000614f28603783613ec3565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b600081519050614f6d81613f6a565b92915050565b600060208284031215614f8957614f88613e28565b5b6000614f9784828501614f5e565b91505092915050565b6000604082019050614fb5600083018561400c565b614fc26020830184613dfe565b9392505050565b600081519050614fd881614130565b92915050565b600060208284031215614ff457614ff3613e28565b5b600061500284828501614fc9565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615067602483613ec3565b91506150728261500b565b604082019050919050565b600060208201905081810360008301526150968161505a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150f9602283613ec3565b91506151048261509d565b604082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061518b602583613ec3565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061521d602383613ec3565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000615289601883613ec3565b915061529482615253565b602082019050919050565b600060208201905081810360008301526152b88161527c565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b600061531b603b83613ec3565b9150615326826152bf565b604082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b600061535c82613df4565b915061536783613df4565b925082820390508181111561537f5761537e614502565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b60006153e1603083613ec3565b91506153ec82615385565b604082019050919050565b60006020820190508181036000830152615410816153d4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061544d601d83613ec3565b915061545882615417565b602082019050919050565b6000602082019050818103600083015261547c81615440565b9050919050565b600081905092915050565b50565b600061549e600083615483565b91506154a98261548e565b600082019050919050565b60006154bf82615491565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615525602683613ec3565b9150615530826154c9565b604082019050919050565b6000602082019050818103600083015261555481615518565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506155c881613e5f565b92915050565b6000602082840312156155e4576155e3613e28565b5b60006155f2848285016155b9565b91505092915050565b6000819050919050565b600061562061561b615616846155fb565b614036565b613df4565b9050919050565b61563081615605565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61566b81613e4d565b82525050565b600061567d8383615662565b60208301905092915050565b6000602082019050919050565b60006156a182615636565b6156ab8185615641565b93506156b683615652565b8060005b838110156156e75781516156ce8882615671565b97506156d983615689565b9250506001810190506156ba565b5085935050505092915050565b600060a0820190506157096000830188613dfe565b6157166020830187615627565b81810360408301526157288186615696565b9050615737606083018561400c565b6157446080830184613dfe565b969550505050505056fea264697066735822122016326bb7293c473f9b7779947bbe81356c8fe16635272e5ca03b231a71e0504d64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102815760003560e01c806371fc46881161014f578063b6f7f681116100c1578063dd62ed3e1161007a578063dd62ed3e146109ab578063e01af92c146109e8578063e2f4560514610a11578063eba4c33314610a3c578063f2fde38b14610a65578063f9d0831a14610a8e57610288565b8063b6f7f681146108af578063b8158d60146108d8578063c024666814610903578063cd51e6d41461092c578063cdd4bd7914610957578063d2fcc0011461098257610288565b806395d89b411161011357806395d89b4114610779578063a457c2d7146107a4578063a8a69b9d146107e1578063a9059cbb1461081e578063aa4bde281461085b578063afa4f3b21461088657610288565b806371fc4688146106ba578063824e4605146106e3578063880bcbc11461070e5780638a8c523c146107375780638da5cb5b1461074e57610288565b80632a6c7dba116101f35780634fbee193116101ac5780634fbee193146105aa57806356a6cabf146105e757806359136fa5146106105780636ddd17131461063b57806370a0823114610666578063715018a6146106a357610288565b80632a6c7dba146104985780632ba86bf2146104c1578063313ce567146104ec578063395093511461051757806349bd5a5e146105545780634ada218b1461057f57610288565b80631694505e116102455780631694505e1461037457806318160ddd1461039f57806318d9ceae146103ca57806321a9d82a1461040757806323b872dd1461043257806327a14fc21461046f57610288565b80630105d0fd1461028d5780630133f248146102b857806306fdde03146102e1578063095ea7b31461030c578063118bd3651461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ab7565b6040516102af9190613e0d565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613e8b565b610abd565b005b3480156102ed57600080fd5b506102f6610cf0565b6040516103039190613f48565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613f96565b610d82565b6040516103409190613ff1565b60405180910390f35b34801561035557600080fd5b5061035e610da0565b60405161036b919061401b565b60405180910390f35b34801561038057600080fd5b50610389610dc6565b6040516103969190614095565b60405180910390f35b3480156103ab57600080fd5b506103b4610dea565b6040516103c19190613e0d565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190613e8b565b610df4565b6040516103fe9190613ff1565b60405180910390f35b34801561041357600080fd5b5061041c610e4a565b6040516104299190613ff1565b60405180910390f35b34801561043e57600080fd5b50610459600480360381019061045491906140b0565b610e5d565b6040516104669190613ff1565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190614103565b610f7c565b005b3480156104a457600080fd5b506104bf60048036038101906104ba919061415c565b6110e8565b005b3480156104cd57600080fd5b506104d6611237565b6040516104e39190613ff1565b60405180910390f35b3480156104f857600080fd5b5061050161124a565b60405161050e91906141a5565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613f96565b611253565b60405161054b9190613ff1565b60405180910390f35b34801561056057600080fd5b506105696112ff565b604051610576919061401b565b60405180910390f35b34801561058b57600080fd5b50610594611323565b6040516105a19190613ff1565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e8b565b611336565b6040516105de9190613ff1565b60405180910390f35b3480156105f357600080fd5b5061060e6004803603810190610609919061415c565b61138c565b005b34801561061c57600080fd5b506106256114db565b6040516106329190613e0d565b60405180910390f35b34801561064757600080fd5b506106506114e1565b60405161065d9190613ff1565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190613e8b565b6114f4565b60405161069a9190613e0d565b60405180910390f35b3480156106af57600080fd5b506106b861153c565b005b3480156106c657600080fd5b506106e160048036038101906106dc9190614103565b611694565b005b3480156106ef57600080fd5b506106f86117dc565b6040516107059190613e0d565b60405180910390f35b34801561071a57600080fd5b50610735600480360381019061073091906141c0565b6117e2565b005b34801561074357600080fd5b5061074c611a22565b005b34801561075a57600080fd5b50610763611b4f565b604051610770919061401b565b60405180910390f35b34801561078557600080fd5b5061078e611b79565b60405161079b9190613f48565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190613f96565b611c0b565b6040516107d89190613ff1565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190613e8b565b611cf6565b6040516108159190613ff1565b60405180910390f35b34801561082a57600080fd5b5061084560048036038101906108409190613f96565b611d4c565b6040516108529190613ff1565b60405180910390f35b34801561086757600080fd5b50610870611d6a565b60405161087d9190613e0d565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a89190614103565b611d70565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190614200565b611ea1565b005b3480156108e457600080fd5b506108ed612076565b6040516108fa9190613e0d565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906141c0565b61207c565b005b34801561093857600080fd5b5061094161224e565b60405161094e9190613e0d565b60405180910390f35b34801561096357600080fd5b5061096c612254565b6040516109799190613e0d565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a491906141c0565b61225a565b005b3480156109b757600080fd5b506109d260048036038101906109cd9190614240565b61249a565b6040516109df9190613e0d565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a919061415c565b612521565b005b348015610a1d57600080fd5b50610a26612670565b604051610a339190613e0d565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190614103565b612676565b005b348015610a7157600080fd5b50610a8c6004803603810190610a879190613e8b565b6127be565b005b348015610a9a57600080fd5b50610ab56004803603810190610ab09190613e8b565b612984565b005b60155481565b610ac5612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b906142cc565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb9061435e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a906143f0565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1f1bc4ab1faa1ed888d49fca460cbbd498ef5a3dc917fa55959dcd2547700556600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610ce5919061401b565b60405180910390a150565b606060038054610cff9061443f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2b9061443f565b8015610d785780601f10610d4d57610100808354040283529160200191610d78565b820191906000526020600020905b815481529060010190602001808311610d5b57829003601f168201915b5050505050905090565b6000610d96610d8f612bf4565b8484612bfc565b6001905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ea9612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f655782811015610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f47906144e2565b60405180910390fd5b610f6485610f5c612bf4565b858403612bfc565b5b610f70858585612dc5565b60019150509392505050565b610f84612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a906142cc565b60405180910390fd5b606461101d61124a565b600a6110299190614664565b611031610dea565b61103b91906146de565b61104591906146de565b811015611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90614781565b60405180910390fd5b61108f61124a565b600a61109b9190614664565b816110a691906147a1565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426012546040516110dd9190613e0d565b60405180910390a150565b6110f0612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611176906142cc565b60405180910390fd5b601160009054906101000a900460ff161515811515036111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90614855565b60405180910390fd5b80601160006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601160009054906101000a900460ff1660405161122c9190613ff1565b60405180910390a150565b601460009054906101000a900460ff1681565b60006012905090565b60006112f5611260612bf4565b84846001600061126e612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112f09190614875565b612bfc565b6001905092915050565b7f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce81565b600d60029054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611394612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a906142cc565b60405180910390fd5b601460009054906101000a900460ff16151581151503611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f9061491b565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601460009054906101000a900460ff166040516114d09190613ff1565b60405180910390a150565b60165481565b600d60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611544612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ca906142cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61169c612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611722906142cc565b60405180910390fd5b806007819055506007546009819055507f000000000000000000000000000000000000000000000000000000000000000360095411156117a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611797906149ad565b60405180910390fd5b7f2c18bb7f919d244fa8ee59517018a471ec455b76373719d2d6664fa3b1947da96007546040516117d19190613e0d565b60405180910390a150565b60075481565b6117ea612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611870906142cc565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361190b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190290614a3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090614aab565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1082604051611a169190613ff1565b60405180910390a25050565b611a2a612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab0906142cc565b60405180910390fd5b600d60029054906101000a900460ff1615611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090614b17565b60405180910390fd5b6001600d60026101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555043600e8190555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b889061443f565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb49061443f565b8015611c015780601f10611bd657610100808354040283529160200191611c01565b820191906000526020600020905b815481529060010190602001808311611be457829003601f168201915b5050505050905090565b60008060016000611c1a612bf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90614ba9565b60405180910390fd5b611ceb611ce2612bf4565b85858403612bfc565b600191505092915050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611d60611d59612bf4565b8484612dc5565b6001905092915050565b60125481565b611d78612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe906142cc565b60405180910390fd5b620f4240611e13610dea565b611e1d91906146de565b8111611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590614c3b565b60405180910390fd5b80600c819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600c54604051611e969190613e0d565b60405180910390a150565b611ea9612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f906142cc565b60405180910390fd5b6103e8611f4361124a565b600a611f4f9190614664565b611f57610dea565b611f6191906146de565b611f6b91906146de565b8210158015611fac57506103e8611f8061124a565b600a611f8c9190614664565b611f94610dea565b611f9e91906146de565b611fa891906146de565b8110155b611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290614ccd565b60405180910390fd5b611ff361124a565b600a611fff9190614664565b8261200a91906147a1565b60158190555061201861124a565b600a6120249190614664565b8161202f91906147a1565b6016819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13160155460165460405161206a929190614ced565b60405180910390a15050565b600f5481565b612084612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a906142cc565b60405180910390fd5b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c90614d88565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122429190613ff1565b60405180910390a25050565b600e5481565b60085481565b612262612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906142cc565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90614a3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e890614aab565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161248e9190613ff1565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612529612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906142cc565b60405180910390fd5b801515600d60019054906101000a900460ff1615150361260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490614e1a565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a12600d60019054906101000a900460ff166040516126659190613ff1565b60405180910390a150565b600c5481565b61267e612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461270d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612704906142cc565b60405180910390fd5b80600881905550600854600a819055507f0000000000000000000000000000000000000000000000000000000000000003600a541115612782576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612779906149ad565b60405180910390fd5b7fa54a45ff147b987a50c11919090466ad8b9df105c160d2e6bfb296df2b9abfb76008546040516127b39190613e0d565b60405180910390a150565b6127c6612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c906142cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614eac565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61298c612bf4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a12906142cc565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8090614f3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612aec57612ae6473373ffffffffffffffffffffffffffffffffffffffff1661380290919063ffffffff16565b50612bf1565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b2c919061401b565b602060405180830381865afa158015612b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6d9190614f73565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612baa929190614fa0565b6020604051808303816000875af1158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190614fde565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629061507d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd19061510f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612db89190613e0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2b906151a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9a90615233565b60405180910390fd5b600d60029054906101000a900460ff1680612f075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f5b5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f919061529f565b60405180910390fd5b60008103612fb357612fae838360006138bd565b6137fd565b601460009054906101000a900460ff1615613203577f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061306d57507f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156130c35750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131195750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613202577f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131bb576015548111156131b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ad90615331565b60405180910390fd5b613201565b601654811115613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790615331565b60405180910390fd5b5b5b5b600061320e306114f4565b90506000600c5482101590508080156132345750600d60009054906101000a900460ff16155b801561328b57507f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156132a657506000600a546009546132a49190614875565b115b80156132be5750600d60019054906101000a900460ff165b15613303576001600d60006101000a81548160ff0219169083151502179055506132e782613b3c565b6000600d60006101000a81548160ff0219169083151502179055505b6000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133a65750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806133bd5750600d60009054906101000a900460ff165b156133cb576000905061348c565b7f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361342857600954905061348b565b7f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361348557600a54905061348a565b600090505b5b5b600f5461070861349c9190614875565b421161363857600f546103846134b29190614875565b421115613573577f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603613515576003905061356e565b7f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361356d57600f90505b5b613637565b7f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036135dd5760039050600e5443036135d857606390505b613636565b7f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361363557601e90505b5b5b5b60008111156136785760006064828661365191906147a1565b61365b91906146de565b905080856136699190615351565b94506136768730836138bd565b505b601160009054906101000a900460ff16156137ee57601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137315750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561378957507f0000000000000000000000002049df3435bdbb36d22f98fcd2e5027049a1f3ce73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156137ed576000613799866114f4565b905060125485826137aa9190614875565b11156137eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e2906153f7565b60405180910390fd5b505b5b6137f98686866138bd565b5050505b505050565b600081471015613847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383e90615463565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff168360405161386d906154b4565b60006040518083038185875af1925050503d80600081146138aa576040519150601f19603f3d011682016040523d82523d6000602084013e6138af565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361392c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613923906151a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361399b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399290615233565b60405180910390fd5b6139a6838383613dea565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a239061553b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613abf9190614875565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b239190613e0d565b60405180910390a3613b36848484613def565b50505050565b60004790506000600267ffffffffffffffff811115613b5e57613b5d61555b565b5b604051908082528060200260200182016040528015613b8c5781602001602082028036833780820191505090505b5090503081600081518110613ba457613ba361558a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6d91906155ce565b81600181518110613c8157613c8061558a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401613d1d9594939291906156f4565b600060405180830381600087803b158015613d3757600080fd5b505af1158015613d4b573d6000803e3d6000fd5b5050505060008247613d5d9190615351565b9050613daa81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661380290919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613ddc929190614ced565b60405180910390a150505050565b505050565b505050565b6000819050919050565b613e0781613df4565b82525050565b6000602082019050613e226000830184613dfe565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e5882613e2d565b9050919050565b613e6881613e4d565b8114613e7357600080fd5b50565b600081359050613e8581613e5f565b92915050565b600060208284031215613ea157613ea0613e28565b5b6000613eaf84828501613e76565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ef2578082015181840152602081019050613ed7565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f1a82613eb8565b613f248185613ec3565b9350613f34818560208601613ed4565b613f3d81613efe565b840191505092915050565b60006020820190508181036000830152613f628184613f0f565b905092915050565b613f7381613df4565b8114613f7e57600080fd5b50565b600081359050613f9081613f6a565b92915050565b60008060408385031215613fad57613fac613e28565b5b6000613fbb85828601613e76565b9250506020613fcc85828601613f81565b9150509250929050565b60008115159050919050565b613feb81613fd6565b82525050565b60006020820190506140066000830184613fe2565b92915050565b61401581613e4d565b82525050565b6000602082019050614030600083018461400c565b92915050565b6000819050919050565b600061405b61405661405184613e2d565b614036565b613e2d565b9050919050565b600061406d82614040565b9050919050565b600061407f82614062565b9050919050565b61408f81614074565b82525050565b60006020820190506140aa6000830184614086565b92915050565b6000806000606084860312156140c9576140c8613e28565b5b60006140d786828701613e76565b93505060206140e886828701613e76565b92505060406140f986828701613f81565b9150509250925092565b60006020828403121561411957614118613e28565b5b600061412784828501613f81565b91505092915050565b61413981613fd6565b811461414457600080fd5b50565b60008135905061415681614130565b92915050565b60006020828403121561417257614171613e28565b5b600061418084828501614147565b91505092915050565b600060ff82169050919050565b61419f81614189565b82525050565b60006020820190506141ba6000830184614196565b92915050565b600080604083850312156141d7576141d6613e28565b5b60006141e585828601613e76565b92505060206141f685828601614147565b9150509250929050565b6000806040838503121561421757614216613e28565b5b600061422585828601613f81565b925050602061423685828601613f81565b9150509250929050565b6000806040838503121561425757614256613e28565b5b600061426585828601613e76565b925050602061427685828601613e76565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142b6602083613ec3565b91506142c182614280565b602082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b7f54726561737572792077616c6c657420697320616c726561647920746861742060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b6000614348602783613ec3565b9150614353826142ec565b604082019050919050565b600060208201905081810360008301526143778161433b565b9050919050565b7f54726561737572792077616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006143da602a83613ec3565b91506143e58261437e565b604082019050919050565b60006020820190508181036000830152614409816143cd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061445757607f821691505b60208210810361446a57614469614410565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144cc602883613ec3565b91506144d782614470565b604082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156145885780860481111561456457614563614502565b5b60018516156145735780820291505b808102905061458185614531565b9450614548565b94509492505050565b6000826145a1576001905061465d565b816145af576000905061465d565b81600181146145c557600281146145cf576145fe565b600191505061465d565b60ff8411156145e1576145e0614502565b5b8360020a9150848211156145f8576145f7614502565b5b5061465d565b5060208310610133831016604e8410600b84101617156146335782820a90508381111561462e5761462d614502565b5b61465d565b614640848484600161453e565b9250905081840481111561465757614656614502565b5b81810290505b9392505050565b600061466f82613df4565b915061467a83614189565b92506146a77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614591565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146e982613df4565b91506146f483613df4565b925082614704576147036146af565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061476b602d83613ec3565b91506147768261470f565b604082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b60006147ac82613df4565b91506147b783613df4565b92508282026147c581613df4565b915082820484148315176147dc576147db614502565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b600061483f602d83613ec3565b915061484a826147e3565b604082019050919050565b6000602082019050818103600083015261486e81614832565b9050919050565b600061488082613df4565b915061488b83613df4565b92508282019050808211156148a3576148a2614502565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b6000614905603283613ec3565b9150614910826148a9565b604082019050919050565b60006020820190508181036000830152614934816148f8565b9050919050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000614997602483613ec3565b91506149a28261493b565b604082019050919050565b600060208201905081810360008301526149c68161498a565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b6000614a29602483613ec3565b9150614a34826149cd565b604082019050919050565b60006020820190508181036000830152614a5881614a1c565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b6000614a95601783613ec3565b9150614aa082614a5f565b602082019050919050565b60006020820190508181036000830152614ac481614a88565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000614b01601883613ec3565b9150614b0c82614acb565b602082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614b93602583613ec3565b9150614b9e82614b37565b604082019050919050565b60006020820190508181036000830152614bc281614b86565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000614c25603f83613ec3565b9150614c3082614bc9565b604082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69742063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000614cb7603f83613ec3565b9150614cc282614c5b565b604082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b6000604082019050614d026000830185613dfe565b614d0f6020830184613dfe565b9392505050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614d72602a83613ec3565b9150614d7d82614d16565b604082019050919050565b60006020820190508181036000830152614da181614d65565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e04602283613ec3565b9150614e0f82614da8565b604082019050919050565b60006020820190508181036000830152614e3381614df7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e96602683613ec3565b9150614ea182614e3a565b604082019050919050565b60006020820190508181036000830152614ec581614e89565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b6000614f28603783613ec3565b9150614f3382614ecc565b604082019050919050565b60006020820190508181036000830152614f5781614f1b565b9050919050565b600081519050614f6d81613f6a565b92915050565b600060208284031215614f8957614f88613e28565b5b6000614f9784828501614f5e565b91505092915050565b6000604082019050614fb5600083018561400c565b614fc26020830184613dfe565b9392505050565b600081519050614fd881614130565b92915050565b600060208284031215614ff457614ff3613e28565b5b600061500284828501614fc9565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615067602483613ec3565b91506150728261500b565b604082019050919050565b600060208201905081810360008301526150968161505a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150f9602283613ec3565b91506151048261509d565b604082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061518b602583613ec3565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061521d602383613ec3565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000615289601883613ec3565b915061529482615253565b602082019050919050565b600060208201905081810360008301526152b88161527c565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b600061531b603b83613ec3565b9150615326826152bf565b604082019050919050565b6000602082019050818103600083015261534a8161530e565b9050919050565b600061535c82613df4565b915061536783613df4565b925082820390508181111561537f5761537e614502565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b60006153e1603083613ec3565b91506153ec82615385565b604082019050919050565b60006020820190508181036000830152615410816153d4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061544d601d83613ec3565b915061545882615417565b602082019050919050565b6000602082019050818103600083015261547c81615440565b9050919050565b600081905092915050565b50565b600061549e600083615483565b91506154a98261548e565b600082019050919050565b60006154bf82615491565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615525602683613ec3565b9150615530826154c9565b604082019050919050565b6000602082019050818103600083015261555481615518565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506155c881613e5f565b92915050565b6000602082840312156155e4576155e3613e28565b5b60006155f2848285016155b9565b91505092915050565b6000819050919050565b600061562061561b615616846155fb565b614036565b613df4565b9050919050565b61563081615605565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61566b81613e4d565b82525050565b600061567d8383615662565b60208301905092915050565b6000602082019050919050565b60006156a182615636565b6156ab8185615641565b93506156b683615652565b8060005b838110156156e75781516156ce8882615671565b97506156d983615689565b9250506001810190506156ba565b5085935050505092915050565b600060a0820190506157096000830188613dfe565b6157166020830187615627565b81810360408301526157288186615696565b9050615737606083018561400c565b6157446080830184613dfe565b969550505050505056fea264697066735822122016326bb7293c473f9b7779947bbe81356c8fe16635272e5ca03b231a71e0504d64736f6c63430008110033

Deployed Bytecode Sourcemap

19611:14015:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31694:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24721:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14896:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15810:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20060:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19691:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15217:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33482:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30102:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15987:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30680:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30392:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31645:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15116:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16568:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19749:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25052:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23945:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32059:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31740:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20168:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15333:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14083:148;;;;;;;;;;;;;:::i;:::-;;24078:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19859:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33075:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25154:253;;;;;;;;;;;;;:::i;:::-;;13869:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15004:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16791:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31427:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15468:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30145:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29072:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32378:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25119:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23647:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25085:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19898:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31028:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15651:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28836:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20094:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24395:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14239:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23174:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31694:39;;;;:::o;24721:323::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24817:9:::1;;;;;;;;;;;24803:23;;:10;:23;;::::0;24795:74:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24910:1;24888:24;;:10;:24;;::::0;24880:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24981:10;24969:9;;:22;;;;;;;;;;;;;;;;;;25009:27;25026:9;;;;;;;;;;;25009:27;;;;;;:::i;:::-;;;;;;;;24721:323:::0;:::o;14896:100::-;14950:13;14983:5;14976:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14896:100;:::o;15810:169::-;15893:4;15910:39;15919:12;:10;:12::i;:::-;15933:7;15942:6;15910:8;:39::i;:::-;15967:4;15960:11;;15810:169;;;;:::o;20060:25::-;;;;;;;;;;;;;:::o;19691:51::-;;;:::o;15217:108::-;15278:7;15305:12;;15298:19;;15217:108;:::o;33482:141::-;33557:4;33581:25;:34;33607:7;33581:34;;;;;;;;;;;;;;;;;;;;;;;;;33574:41;;33482:141;;;:::o;30102:36::-;;;;;;;;;;;;;:::o;15987:573::-;16127:4;16144:24;16171:11;:19;16183:6;16171:19;;;;;;;;;;;;;;;:33;16191:12;:10;:12::i;:::-;16171:33;;;;;;;;;;;;;;;;16144:60;;16239:17;16219:16;:37;16215:265;;16301:6;16281:16;:26;;16273:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;16396:57;16405:6;16413:12;:10;:12::i;:::-;16446:6;16427:16;:25;16396:8;:57::i;:::-;16215:265;16492:36;16502:6;16510:9;16521:6;16492:9;:36::i;:::-;16548:4;16541:11;;;15987:573;;;;;:::o;30680:340::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30831:3:::1;30816:10;:8;:10::i;:::-;30810:2;:16;;;;:::i;:::-;30793:13;:11;:13::i;:::-;:34;;;;:::i;:::-;30792:42;;;;:::i;:::-;30772:16;:62;;30764:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30939:10;:8;:10::i;:::-;30933:2;:16;;;;:::i;:::-;30913;:37;;;;:::i;:::-;30895:15;:55;;;;30968:44;30996:15;;30968:44;;;;;;:::i;:::-;;;;;;;;30680:340:::0;:::o;30392:280::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30486:21:::1;;;;;;;;;;;30476:31;;:6;:31;;::::0;30468:88:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30591:6;30567:21;;:30;;;;;;;;;;;;;;;;;;30615:49;30642:21;;;;;;;;;;;30615:49;;;;;;:::i;:::-;;;;;;;;30392:280:::0;:::o;31645:42::-;;;;;;;;;;;;;:::o;15116:93::-;15174:5;15199:2;15192:9;;15116:93;:::o;16568:215::-;16656:4;16673:80;16682:12;:10;:12::i;:::-;16696:7;16742:10;16705:11;:25;16717:12;:10;:12::i;:::-;16705:25;;;;;;;;;;;;;;;:34;16731:7;16705:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;16673:8;:80::i;:::-;16771:4;16764:11;;16568:215;;;;:::o;19749:39::-;;;:::o;25052:26::-;;;;;;;;;;;;;:::o;23945:125::-;24010:4;24034:19;:28;24054:7;24034:28;;;;;;;;;;;;;;;;;;;;;;;;;24027:35;;23945:125;;;:::o;32059:311::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32158:26:::1;;;;;;;;;;;32148:36;;:6;:36;;::::0;32140:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32279:6;32250:26;;:35;;;;;;;;;;;;;;;;;;32303:59;32335:26;;;;;;;;;;;32303:59;;;;;;:::i;:::-;;;;;;;;32059:311:::0;:::o;31740:40::-;;;;:::o;20168:26::-;;;;;;;;;;;;;:::o;15333:127::-;15407:7;15434:9;:18;15444:7;15434:18;;;;;;;;;;;;;;;;15427:25;;15333:127;;;:::o;14083:148::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14190:1:::1;14153:40;;14174:6;;;;;;;;;;;14153:40;;;;;;;;;;;;14221:1;14204:6;;:19;;;;;;;;;;;;;;;;;;14083:148::o:0;24078:309::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24177:17:::1;24158:16;:36;;;;24227:16;;24207:15;:36;;;;24283:6;24264:15;;:25;;24256:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24348:31;24362:16;;24348:31;;;;;;:::i;:::-;;;;;;;;24078:309:::0;:::o;19859:32::-;;;;:::o;33075:399::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33223:7:::1;33185:45;;:25;:34;33211:7;33185:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;33176:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33309:4;33290:24;;:7;:24;;::::0;33282:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33392:7;33355:25;:34;33381:7;33355:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;33449:7;33417:49;;;33458:7;33417:49;;;;;;:::i;:::-;;;;;;;;33075:399:::0;;:::o;25154:253::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25217:14:::1;;;;;;;;;;;25216:15;25208:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25288:4;25271:14;;:21;;;;;;;;;;;;;;;;;;25317:4;25303:11;;:18;;;;;;;;;;;;;;;;;;25347:12;25332;:27;;;;25384:15;25370:11;:29;;;;25154:253::o:0;13869:79::-;13907:7;13934:6;;;;;;;;;;;13927:13;;13869:79;:::o;15004:104::-;15060:13;15093:7;15086:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15004:104;:::o;16791:413::-;16884:4;16901:24;16928:11;:25;16940:12;:10;:12::i;:::-;16928:25;;;;;;;;;;;;;;;:34;16954:7;16928:34;;;;;;;;;;;;;;;;16901:61;;17001:15;16981:16;:35;;16973:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17094:67;17103:12;:10;:12::i;:::-;17117:7;17145:15;17126:16;:34;17094:8;:67::i;:::-;17192:4;17185:11;;;16791:413;;;;:::o;31427:145::-;31502:4;31526:29;:38;31556:7;31526:38;;;;;;;;;;;;;;;;;;;;;;;;;31519:45;;31427:145;;;:::o;15468:175::-;15554:4;15571:42;15581:12;:10;:12::i;:::-;15595:9;15606:6;15571:9;:42::i;:::-;15631:4;15624:11;;15468:175;;;;:::o;30145:30::-;;;;:::o;29072:304::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29187:9:::1;29171:13;:11;:13::i;:::-;:25;;;;:::i;:::-;29159:9;:37;29151:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;29296:9;29275:18;:30;;;;29323:45;29349:18;;29323:45;;;;;;:::i;:::-;;;;;;;;29072:304:::0;:::o;32378:689::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32601:5:::1;32586:10;:8;:10::i;:::-;32580:2;:16;;;;:::i;:::-;32563:13;:11;:13::i;:::-;:34;;;;:::i;:::-;32562:44;;;;:::i;:::-;32533:24;:73;;:164;;;;;32692:5;32677:10;:8;:10::i;:::-;32671:2;:16;;;;:::i;:::-;32654:13;:11;:13::i;:::-;:34;;;;:::i;:::-;32653:44;;;;:::i;:::-;32624:25;:73;;32533:164;32511:278;;;;;;;;;;;;:::i;:::-;;;;;;;;;32863:10;:8;:10::i;:::-;32857:2;:16;;;;:::i;:::-;32828:24;:46;;;;:::i;:::-;32801:23;:73;;;;32947:10;:8;:10::i;:::-;32941:2;:16;;;;:::i;:::-;32912:25;:46;;;;:::i;:::-;32885:24;:73;;;;32976:83;33009:23;;33034:24;;32976:83;;;;;;;:::i;:::-;;;;;;;;32378:689:::0;;:::o;25119:26::-;;;;:::o;23647:290::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23773:8:::1;23741:40;;:19;:28;23761:7;23741:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;23733:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23869:8;23838:19;:28;23858:7;23838:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23911:7;23895:34;;;23920:8;23895:34;;;;;;:::i;:::-;;;;;;;;23647:290:::0;;:::o;25085:27::-;;;;:::o;19898:33::-;;;;:::o;31028:391::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31170:7:::1;31128:49;;:29;:38;31158:7;31128:38;;;;;;;;;;;;;;;;;;;;;;;;;:49;;::::0;31119:98:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31255:4;31236:24;;:7;:24;;::::0;31228:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31342:7;31301:29;:38;31331:7;31301:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;31394:7;31367:44;;;31403:7;31367:44;;;;;;:::i;:::-;;;;;;;;31028:391:::0;;:::o;15651:151::-;15740:7;15767:11;:18;15779:5;15767:18;;;;;;;;;;;;;;;:27;15786:7;15767:27;;;;;;;;;;;;;;;;15760:34;;15651:151;;;;:::o;28836:228::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28927:8:::1;28912:23;;:11;;;;;;;;;;;:23;;::::0;28904:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28999:8;28985:11;;:22;;;;;;;;;;;;;;;;;;29025:31;29044:11;;;;;;;;;;;29025:31;;;;;;:::i;:::-;;;;;;;;28836:228:::0;:::o;20094:34::-;;;;:::o;24395:318::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24497:18:::1;24477:17;:38;;;;24549:17;;24528:16;:38;;;;24607:6;24587:16;;:26;;24579:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24672:33;24687:17;;24672:33;;;;;;:::i;:::-;;;;;;;;24395:318:::0;:::o;14239:244::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14348:1:::1;14328:22;;:8;:22;;::::0;14320:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14438:8;14409:38;;14430:6;;;;;;;;;;;14409:38;;;;;;;;;;;;14467:8;14458:6;;:17;;;;;;;;;;;;;;;;;;14239:244:::0;:::o;23174:465::-;14006:12;:10;:12::i;:::-;13996:22;;:6;;;;;;;;;;;:22;;;13988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23270:4:::1;23253:22;;:5;:22;;::::0;23245:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23367:3;23350:21;;:5;:21;;::::0;23346:127:::1;;23388:52;23418:21;23396:10;23388:29;;;;:52;;;;:::i;:::-;;23455:7;;23346:127;23483:17;23510:5;23483:33;;23527:15;23545:10;:20;;;23574:4;23545:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23527:53;;23591:10;:19;;;23611:10;23623:7;23591:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23234:405;;14066:1;23174:465:::0;:::o;13192:98::-;13245:7;13272:10;13265:17;;13192:98;:::o;18959:380::-;19112:1;19095:19;;:5;:19;;;19087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19193:1;19174:21;;:7;:21;;;19166:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19277:6;19247:11;:18;19259:5;19247:18;;;;;;;;;;;;;;;:27;19266:7;19247:27;;;;;;;;;;;;;;;:36;;;;19315:7;19299:32;;19308:5;19299:32;;;19324:6;19299:32;;;;;;:::i;:::-;;;;;;;;18959:380;;;:::o;25415:3413::-;25528:1;25512:18;;:4;:18;;;25504:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25605:1;25591:16;;:2;:16;;;25583:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25666:14;;;;;;;;;;;:43;;;;25684:19;:25;25704:4;25684:25;;;;;;;;;;;;;;;;;;;;;;;;;25666:43;:70;;;;25713:19;:23;25733:2;25713:23;;;;;;;;;;;;;;;;;;;;;;;;;25666:70;25658:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;25799:1;25789:6;:11;25785:93;;25817:28;25833:4;25839:2;25843:1;25817:15;:28::i;:::-;25860:7;;25785:93;25894:26;;;;;;;;;;;25890:752;;;25960:13;25952:21;;:4;:21;;;:44;;;;25983:13;25977:19;;:2;:19;;;25952:44;25951:99;;;;;26019:25;:31;26045:4;26019:31;;;;;;;;;;;;;;;;;;;;;;;;;26018:32;25951:99;:151;;;;;26073:25;:29;26099:2;26073:29;;;;;;;;;;;;;;;;;;;;;;;;;26072:30;25951:151;25947:684;;;26149:13;26141:21;;:4;:21;;;26137:479;;26231:23;;26221:6;:33;;26187:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26137:479;;;26460:24;;26450:6;:34;;26416:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26137:479;25947:684;25890:752;26654:28;26685:24;26703:4;26685:9;:24::i;:::-;26654:55;;26722:12;26761:18;;26737:20;:42;;26722:57;;26796:7;:33;;;;;26821:8;;;;;;;;;;;26820:9;26796:33;:69;;;;;26852:13;26846:19;;:2;:19;;;26796:69;:124;;;;;26919:1;26900:16;;26882:15;;:34;;;;:::i;:::-;:38;26796:124;:152;;;;;26937:11;;;;;;;;;;;26796:152;26792:314;;;26986:4;26975:8;;:15;;;;;;;;;;;;;;;;;;27019:42;27040:20;27019;:42::i;:::-;27089:5;27078:8;;:16;;;;;;;;;;;;;;;;;;26792:314;27118:18;27151:19;:25;27171:4;27151:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27180:19;:23;27200:2;27180:23;;;;;;;;;;;;;;;;;;;;;;;;;27151:52;:64;;;;27207:8;;;;;;;;;;;27151:64;27147:333;;;27245:1;27232:14;;27147:333;;;27276:13;27268:21;;:4;:21;;;27264:216;;27319:15;;27306:28;;27264:216;;;27362:13;27356:19;;:2;:19;;;27352:128;;27405:16;;27392:29;;27352:128;;;27467:1;27454:14;;27352:128;27264:216;27147:333;27526:11;;27513:10;:24;;;;:::i;:::-;27495:15;:42;27492:617;;27616:11;;27603:10;:24;;;;:::i;:::-;27585:15;:42;27581:528;;;27656:13;27648:21;;:4;:21;;;27644:157;;27703:1;27690:14;;27644:157;;;27736:13;27730:19;;:2;:19;;;27726:75;;27783:2;27770:15;;27726:75;27644:157;27581:528;;;27844:13;27836:21;;:4;:21;;;27832:266;;27891:1;27878:14;;27931:12;;27915;:28;27911:91;;27980:2;27967:15;;27911:91;27832:266;;;28033:13;28027:19;;:2;:19;;;28023:75;;28080:2;28067:15;;28023:75;27832:266;27581:528;27492:617;28138:1;28125:10;:14;28121:183;;;28156:12;28195:3;28181:10;28172:6;:19;;;;:::i;:::-;28171:27;;;;:::i;:::-;28156:42;;28231:4;28222:6;:13;;;;:::i;:::-;28213:22;;28250:42;28266:4;28280;28287;28250:15;:42::i;:::-;28141:163;28121:183;28320:21;;;;;;;;;;;28316:459;;;28373:29;:35;28403:4;28373:35;;;;;;;;;;;;;;;;;;;;;;;;;28372:36;:92;;;;;28431:29;:33;28461:2;28431:33;;;;;;;;;;;;;;;;;;;;;;;;;28430:34;28372:92;:132;;;;;28491:13;28485:19;;:2;:19;;;;28372:132;28368:396;;;28539:15;28558:13;28568:2;28558:9;:13::i;:::-;28539:32;;28640:15;;28630:6;28620:7;:16;;;;:::i;:::-;:35;;28590:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;28520:244;28368:396;28316:459;28787:33;28803:4;28809:2;28813:6;28787:15;:33::i;:::-;25493:3335;;;25415:3413;;;;:::o;9102:266::-;9181:4;9230:6;9205:21;:31;;9197:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9284:12;9302:9;:14;;9324:6;9302:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9283:52;;;9353:7;9346:14;;;9102:266;;;;:::o;17212:733::-;17370:1;17352:20;;:6;:20;;;17344:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17454:1;17433:23;;:9;:23;;;17425:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17509:47;17530:6;17538:9;17549:6;17509:20;:47::i;:::-;17569:21;17593:9;:17;17603:6;17593:17;;;;;;;;;;;;;;;;17569:41;;17646:6;17629:13;:23;;17621:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17767:6;17751:13;:22;17731:9;:17;17741:6;17731:17;;;;;;;;;;;;;;;:42;;;;17819:6;17795:9;:20;17805:9;17795:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17860:9;17843:35;;17852:6;17843:35;;;17871:6;17843:35;;;;;;:::i;:::-;;;;;;;;17891:46;17911:6;17919:9;17930:6;17891:19;:46::i;:::-;17333:612;17212:733;;;:::o;29384:641::-;29454:22;29479:21;29454:46;;29513:21;29551:1;29537:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29513:40;;29582:4;29564;29569:1;29564:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29608:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29598:4;29603:1;29598:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29643:15;:66;;;29724:11;29750:1;29766:4;29793;29813:15;29643:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29842:18;29887:14;29863:21;:38;;;;:::i;:::-;29842:59;;29914:40;29943:10;29922:9;;;;;;;;;;;29914:28;;;;:40;;;;:::i;:::-;;29972:45;29993:11;30006:10;29972:45;;;;;;;:::i;:::-;;;;;;;;29443:582;;;29384:641;:::o;19347:125::-;;;;:::o;19480:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:99::-;1663:6;1697:5;1691:12;1681:22;;1611:99;;;:::o;1716:169::-;1800:11;1834:6;1829:3;1822:19;1874:4;1869:3;1865:14;1850:29;;1716:169;;;;:::o;1891:246::-;1972:1;1982:113;1996:6;1993:1;1990:13;1982:113;;;2081:1;2076:3;2072:11;2066:18;2062:1;2057:3;2053:11;2046:39;2018:2;2015:1;2011:10;2006:15;;1982:113;;;2129:1;2120:6;2115:3;2111:16;2104:27;1953:184;1891:246;;;:::o;2143:102::-;2184:6;2235:2;2231:7;2226:2;2219:5;2215:14;2211:28;2201:38;;2143:102;;;:::o;2251:377::-;2339:3;2367:39;2400:5;2367:39;:::i;:::-;2422:71;2486:6;2481:3;2422:71;:::i;:::-;2415:78;;2502:65;2560:6;2555:3;2548:4;2541:5;2537:16;2502:65;:::i;:::-;2592:29;2614:6;2592:29;:::i;:::-;2587:3;2583:39;2576:46;;2343:285;2251:377;;;;:::o;2634:313::-;2747:4;2785:2;2774:9;2770:18;2762:26;;2834:9;2828:4;2824:20;2820:1;2809:9;2805:17;2798:47;2862:78;2935:4;2926:6;2862:78;:::i;:::-;2854:86;;2634:313;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:118::-;4220:24;4238:5;4220:24;:::i;:::-;4215:3;4208:37;4133:118;;:::o;4257:222::-;4350:4;4388:2;4377:9;4373:18;4365:26;;4401:71;4469:1;4458:9;4454:17;4445:6;4401:71;:::i;:::-;4257:222;;;;:::o;4485:60::-;4513:3;4534:5;4527:12;;4485:60;;;:::o;4551:142::-;4601:9;4634:53;4652:34;4661:24;4679:5;4661:24;:::i;:::-;4652:34;:::i;:::-;4634:53;:::i;:::-;4621:66;;4551:142;;;:::o;4699:126::-;4749:9;4782:37;4813:5;4782:37;:::i;:::-;4769:50;;4699:126;;;:::o;4831:152::-;4907:9;4940:37;4971:5;4940:37;:::i;:::-;4927:50;;4831:152;;;:::o;4989:183::-;5102:63;5159:5;5102:63;:::i;:::-;5097:3;5090:76;4989:183;;:::o;5178:274::-;5297:4;5335:2;5324:9;5320:18;5312:26;;5348:97;5442:1;5431:9;5427:17;5418:6;5348:97;:::i;:::-;5178:274;;;;:::o;5458:619::-;5535:6;5543;5551;5600:2;5588:9;5579:7;5575:23;5571:32;5568:119;;;5606:79;;:::i;:::-;5568:119;5726:1;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5697:117;5853:2;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5824:118;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;5458:619;;;;;:::o;6083:329::-;6142:6;6191:2;6179:9;6170:7;6166:23;6162:32;6159:119;;;6197:79;;:::i;:::-;6159:119;6317:1;6342:53;6387:7;6378:6;6367:9;6363:22;6342:53;:::i;:::-;6332:63;;6288:117;6083:329;;;;:::o;6418:116::-;6488:21;6503:5;6488:21;:::i;:::-;6481:5;6478:32;6468:60;;6524:1;6521;6514:12;6468:60;6418:116;:::o;6540:133::-;6583:5;6621:6;6608:20;6599:29;;6637:30;6661:5;6637:30;:::i;:::-;6540:133;;;;:::o;6679:323::-;6735:6;6784:2;6772:9;6763:7;6759:23;6755:32;6752:119;;;6790:79;;:::i;:::-;6752:119;6910:1;6935:50;6977:7;6968:6;6957:9;6953:22;6935:50;:::i;:::-;6925:60;;6881:114;6679:323;;;;:::o;7008:86::-;7043:7;7083:4;7076:5;7072:16;7061:27;;7008:86;;;:::o;7100:112::-;7183:22;7199:5;7183:22;:::i;:::-;7178:3;7171:35;7100:112;;:::o;7218:214::-;7307:4;7345:2;7334:9;7330:18;7322:26;;7358:67;7422:1;7411:9;7407:17;7398:6;7358:67;:::i;:::-;7218:214;;;;:::o;7438:468::-;7503:6;7511;7560:2;7548:9;7539:7;7535:23;7531:32;7528:119;;;7566:79;;:::i;:::-;7528:119;7686:1;7711:53;7756:7;7747:6;7736:9;7732:22;7711:53;:::i;:::-;7701:63;;7657:117;7813:2;7839:50;7881:7;7872:6;7861:9;7857:22;7839:50;:::i;:::-;7829:60;;7784:115;7438:468;;;;;:::o;7912:474::-;7980:6;7988;8037:2;8025:9;8016:7;8012:23;8008:32;8005:119;;;8043:79;;:::i;:::-;8005:119;8163:1;8188:53;8233:7;8224:6;8213:9;8209:22;8188:53;:::i;:::-;8178:63;;8134:117;8290:2;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8261:118;7912:474;;;;;:::o;8392:::-;8460:6;8468;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8770:2;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8741:118;8392:474;;;;;:::o;8872:182::-;9012:34;9008:1;9000:6;8996:14;8989:58;8872:182;:::o;9060:366::-;9202:3;9223:67;9287:2;9282:3;9223:67;:::i;:::-;9216:74;;9299:93;9388:3;9299:93;:::i;:::-;9417:2;9412:3;9408:12;9401:19;;9060:366;;;:::o;9432:419::-;9598:4;9636:2;9625:9;9621:18;9613:26;;9685:9;9679:4;9675:20;9671:1;9660:9;9656:17;9649:47;9713:131;9839:4;9713:131;:::i;:::-;9705:139;;9432:419;;;:::o;9857:226::-;9997:34;9993:1;9985:6;9981:14;9974:58;10066:9;10061:2;10053:6;10049:15;10042:34;9857:226;:::o;10089:366::-;10231:3;10252:67;10316:2;10311:3;10252:67;:::i;:::-;10245:74;;10328:93;10417:3;10328:93;:::i;:::-;10446:2;10441:3;10437:12;10430:19;;10089:366;;;:::o;10461:419::-;10627:4;10665:2;10654:9;10650:18;10642:26;;10714:9;10708:4;10704:20;10700:1;10689:9;10685:17;10678:47;10742:131;10868:4;10742:131;:::i;:::-;10734:139;;10461:419;;;:::o;10886:229::-;11026:34;11022:1;11014:6;11010:14;11003:58;11095:12;11090:2;11082:6;11078:15;11071:37;10886:229;:::o;11121:366::-;11263:3;11284:67;11348:2;11343:3;11284:67;:::i;:::-;11277:74;;11360:93;11449:3;11360:93;:::i;:::-;11478:2;11473:3;11469:12;11462:19;;11121:366;;;:::o;11493:419::-;11659:4;11697:2;11686:9;11682:18;11674:26;;11746:9;11740:4;11736:20;11732:1;11721:9;11717:17;11710:47;11774:131;11900:4;11774:131;:::i;:::-;11766:139;;11493:419;;;:::o;11918:180::-;11966:77;11963:1;11956:88;12063:4;12060:1;12053:15;12087:4;12084:1;12077:15;12104:320;12148:6;12185:1;12179:4;12175:12;12165:22;;12232:1;12226:4;12222:12;12253:18;12243:81;;12309:4;12301:6;12297:17;12287:27;;12243:81;12371:2;12363:6;12360:14;12340:18;12337:38;12334:84;;12390:18;;:::i;:::-;12334:84;12155:269;12104:320;;;:::o;12430:227::-;12570:34;12566:1;12558:6;12554:14;12547:58;12639:10;12634:2;12626:6;12622:15;12615:35;12430:227;:::o;12663:366::-;12805:3;12826:67;12890:2;12885:3;12826:67;:::i;:::-;12819:74;;12902:93;12991:3;12902:93;:::i;:::-;13020:2;13015:3;13011:12;13004:19;;12663:366;;;:::o;13035:419::-;13201:4;13239:2;13228:9;13224:18;13216:26;;13288:9;13282:4;13278:20;13274:1;13263:9;13259:17;13252:47;13316:131;13442:4;13316:131;:::i;:::-;13308:139;;13035:419;;;:::o;13460:180::-;13508:77;13505:1;13498:88;13605:4;13602:1;13595:15;13629:4;13626:1;13619:15;13646:102;13688:8;13735:5;13732:1;13728:13;13707:34;;13646:102;;;:::o;13754:848::-;13815:5;13822:4;13846:6;13837:15;;13870:5;13861:14;;13884:712;13905:1;13895:8;13892:15;13884:712;;;14000:4;13995:3;13991:14;13985:4;13982:24;13979:50;;;14009:18;;:::i;:::-;13979:50;14059:1;14049:8;14045:16;14042:451;;;14474:4;14467:5;14463:16;14454:25;;14042:451;14524:4;14518;14514:15;14506:23;;14554:32;14577:8;14554:32;:::i;:::-;14542:44;;13884:712;;;13754:848;;;;;;;:::o;14608:1073::-;14662:5;14853:8;14843:40;;14874:1;14865:10;;14876:5;;14843:40;14902:4;14892:36;;14919:1;14910:10;;14921:5;;14892:36;14988:4;15036:1;15031:27;;;;15072:1;15067:191;;;;14981:277;;15031:27;15049:1;15040:10;;15051:5;;;15067:191;15112:3;15102:8;15099:17;15096:43;;;15119:18;;:::i;:::-;15096:43;15168:8;15165:1;15161:16;15152:25;;15203:3;15196:5;15193:14;15190:40;;;15210:18;;:::i;:::-;15190:40;15243:5;;;14981:277;;15367:2;15357:8;15354:16;15348:3;15342:4;15339:13;15335:36;15317:2;15307:8;15304:16;15299:2;15293:4;15290:12;15286:35;15270:111;15267:246;;;15423:8;15417:4;15413:19;15404:28;;15458:3;15451:5;15448:14;15445:40;;;15465:18;;:::i;:::-;15445:40;15498:5;;15267:246;15538:42;15576:3;15566:8;15560:4;15557:1;15538:42;:::i;:::-;15523:57;;;;15612:4;15607:3;15603:14;15596:5;15593:25;15590:51;;;15621:18;;:::i;:::-;15590:51;15670:4;15663:5;15659:16;15650:25;;14608:1073;;;;;;:::o;15687:281::-;15745:5;15769:23;15787:4;15769:23;:::i;:::-;15761:31;;15813:25;15829:8;15813:25;:::i;:::-;15801:37;;15857:104;15894:66;15884:8;15878:4;15857:104;:::i;:::-;15848:113;;15687:281;;;;:::o;15974:180::-;16022:77;16019:1;16012:88;16119:4;16116:1;16109:15;16143:4;16140:1;16133:15;16160:185;16200:1;16217:20;16235:1;16217:20;:::i;:::-;16212:25;;16251:20;16269:1;16251:20;:::i;:::-;16246:25;;16290:1;16280:35;;16295:18;;:::i;:::-;16280:35;16337:1;16334;16330:9;16325:14;;16160:185;;;;:::o;16351:232::-;16491:34;16487:1;16479:6;16475:14;16468:58;16560:15;16555:2;16547:6;16543:15;16536:40;16351:232;:::o;16589:366::-;16731:3;16752:67;16816:2;16811:3;16752:67;:::i;:::-;16745:74;;16828:93;16917:3;16828:93;:::i;:::-;16946:2;16941:3;16937:12;16930:19;;16589:366;;;:::o;16961:419::-;17127:4;17165:2;17154:9;17150:18;17142:26;;17214:9;17208:4;17204:20;17200:1;17189:9;17185:17;17178:47;17242:131;17368:4;17242:131;:::i;:::-;17234:139;;16961:419;;;:::o;17386:410::-;17426:7;17449:20;17467:1;17449:20;:::i;:::-;17444:25;;17483:20;17501:1;17483:20;:::i;:::-;17478:25;;17538:1;17535;17531:9;17560:30;17578:11;17560:30;:::i;:::-;17549:41;;17739:1;17730:7;17726:15;17723:1;17720:22;17700:1;17693:9;17673:83;17650:139;;17769:18;;:::i;:::-;17650:139;17434:362;17386:410;;;;:::o;17802:232::-;17942:34;17938:1;17930:6;17926:14;17919:58;18011:15;18006:2;17998:6;17994:15;17987:40;17802:232;:::o;18040:366::-;18182:3;18203:67;18267:2;18262:3;18203:67;:::i;:::-;18196:74;;18279:93;18368:3;18279:93;:::i;:::-;18397:2;18392:3;18388:12;18381:19;;18040:366;;;:::o;18412:419::-;18578:4;18616:2;18605:9;18601:18;18593:26;;18665:9;18659:4;18655:20;18651:1;18640:9;18636:17;18629:47;18693:131;18819:4;18693:131;:::i;:::-;18685:139;;18412:419;;;:::o;18837:191::-;18877:3;18896:20;18914:1;18896:20;:::i;:::-;18891:25;;18930:20;18948:1;18930:20;:::i;:::-;18925:25;;18973:1;18970;18966:9;18959:16;;18994:3;18991:1;18988:10;18985:36;;;19001:18;;:::i;:::-;18985:36;18837:191;;;;:::o;19034:237::-;19174:34;19170:1;19162:6;19158:14;19151:58;19243:20;19238:2;19230:6;19226:15;19219:45;19034:237;:::o;19277:366::-;19419:3;19440:67;19504:2;19499:3;19440:67;:::i;:::-;19433:74;;19516:93;19605:3;19516:93;:::i;:::-;19634:2;19629:3;19625:12;19618:19;;19277:366;;;:::o;19649:419::-;19815:4;19853:2;19842:9;19838:18;19830:26;;19902:9;19896:4;19892:20;19888:1;19877:9;19873:17;19866:47;19930:131;20056:4;19930:131;:::i;:::-;19922:139;;19649:419;;;:::o;20074:223::-;20214:34;20210:1;20202:6;20198:14;20191:58;20283:6;20278:2;20270:6;20266:15;20259:31;20074:223;:::o;20303:366::-;20445:3;20466:67;20530:2;20525:3;20466:67;:::i;:::-;20459:74;;20542:93;20631:3;20542:93;:::i;:::-;20660:2;20655:3;20651:12;20644:19;;20303:366;;;:::o;20675:419::-;20841:4;20879:2;20868:9;20864:18;20856:26;;20928:9;20922:4;20918:20;20914:1;20903:9;20899:17;20892:47;20956:131;21082:4;20956:131;:::i;:::-;20948:139;;20675:419;;;:::o;21100:223::-;21240:34;21236:1;21228:6;21224:14;21217:58;21309:6;21304:2;21296:6;21292:15;21285:31;21100:223;:::o;21329:366::-;21471:3;21492:67;21556:2;21551:3;21492:67;:::i;:::-;21485:74;;21568:93;21657:3;21568:93;:::i;:::-;21686:2;21681:3;21677:12;21670:19;;21329:366;;;:::o;21701:419::-;21867:4;21905:2;21894:9;21890:18;21882:26;;21954:9;21948:4;21944:20;21940:1;21929:9;21925:17;21918:47;21982:131;22108:4;21982:131;:::i;:::-;21974:139;;21701:419;;;:::o;22126:173::-;22266:25;22262:1;22254:6;22250:14;22243:49;22126:173;:::o;22305:366::-;22447:3;22468:67;22532:2;22527:3;22468:67;:::i;:::-;22461:74;;22544:93;22633:3;22544:93;:::i;:::-;22662:2;22657:3;22653:12;22646:19;;22305:366;;;:::o;22677:419::-;22843:4;22881:2;22870:9;22866:18;22858:26;;22930:9;22924:4;22920:20;22916:1;22905:9;22901:17;22894:47;22958:131;23084:4;22958:131;:::i;:::-;22950:139;;22677:419;;;:::o;23102:174::-;23242:26;23238:1;23230:6;23226:14;23219:50;23102:174;:::o;23282:366::-;23424:3;23445:67;23509:2;23504:3;23445:67;:::i;:::-;23438:74;;23521:93;23610:3;23521:93;:::i;:::-;23639:2;23634:3;23630:12;23623:19;;23282:366;;;:::o;23654:419::-;23820:4;23858:2;23847:9;23843:18;23835:26;;23907:9;23901:4;23897:20;23893:1;23882:9;23878:17;23871:47;23935:131;24061:4;23935:131;:::i;:::-;23927:139;;23654:419;;;:::o;24079:224::-;24219:34;24215:1;24207:6;24203:14;24196:58;24288:7;24283:2;24275:6;24271:15;24264:32;24079:224;:::o;24309:366::-;24451:3;24472:67;24536:2;24531:3;24472:67;:::i;:::-;24465:74;;24548:93;24637:3;24548:93;:::i;:::-;24666:2;24661:3;24657:12;24650:19;;24309:366;;;:::o;24681:419::-;24847:4;24885:2;24874:9;24870:18;24862:26;;24934:9;24928:4;24924:20;24920:1;24909:9;24905:17;24898:47;24962:131;25088:4;24962:131;:::i;:::-;24954:139;;24681:419;;;:::o;25106:250::-;25246:34;25242:1;25234:6;25230:14;25223:58;25315:33;25310:2;25302:6;25298:15;25291:58;25106:250;:::o;25362:366::-;25504:3;25525:67;25589:2;25584:3;25525:67;:::i;:::-;25518:74;;25601:93;25690:3;25601:93;:::i;:::-;25719:2;25714:3;25710:12;25703:19;;25362:366;;;:::o;25734:419::-;25900:4;25938:2;25927:9;25923:18;25915:26;;25987:9;25981:4;25977:20;25973:1;25962:9;25958:17;25951:47;26015:131;26141:4;26015:131;:::i;:::-;26007:139;;25734:419;;;:::o;26159:250::-;26299:34;26295:1;26287:6;26283:14;26276:58;26368:33;26363:2;26355:6;26351:15;26344:58;26159:250;:::o;26415:366::-;26557:3;26578:67;26642:2;26637:3;26578:67;:::i;:::-;26571:74;;26654:93;26743:3;26654:93;:::i;:::-;26772:2;26767:3;26763:12;26756:19;;26415:366;;;:::o;26787:419::-;26953:4;26991:2;26980:9;26976:18;26968:26;;27040:9;27034:4;27030:20;27026:1;27015:9;27011:17;27004:47;27068:131;27194:4;27068:131;:::i;:::-;27060:139;;26787:419;;;:::o;27212:332::-;27333:4;27371:2;27360:9;27356:18;27348:26;;27384:71;27452:1;27441:9;27437:17;27428:6;27384:71;:::i;:::-;27465:72;27533:2;27522:9;27518:18;27509:6;27465:72;:::i;:::-;27212:332;;;;;:::o;27550:229::-;27690:34;27686:1;27678:6;27674:14;27667:58;27759:12;27754:2;27746:6;27742:15;27735:37;27550:229;:::o;27785:366::-;27927:3;27948:67;28012:2;28007:3;27948:67;:::i;:::-;27941:74;;28024:93;28113:3;28024:93;:::i;:::-;28142:2;28137:3;28133:12;28126:19;;27785:366;;;:::o;28157:419::-;28323:4;28361:2;28350:9;28346:18;28338:26;;28410:9;28404:4;28400:20;28396:1;28385:9;28381:17;28374:47;28438:131;28564:4;28438:131;:::i;:::-;28430:139;;28157:419;;;:::o;28582:221::-;28722:34;28718:1;28710:6;28706:14;28699:58;28791:4;28786:2;28778:6;28774:15;28767:29;28582:221;:::o;28809:366::-;28951:3;28972:67;29036:2;29031:3;28972:67;:::i;:::-;28965:74;;29048:93;29137:3;29048:93;:::i;:::-;29166:2;29161:3;29157:12;29150:19;;28809:366;;;:::o;29181:419::-;29347:4;29385:2;29374:9;29370:18;29362:26;;29434:9;29428:4;29424:20;29420:1;29409:9;29405:17;29398:47;29462:131;29588:4;29462:131;:::i;:::-;29454:139;;29181:419;;;:::o;29606:225::-;29746:34;29742:1;29734:6;29730:14;29723:58;29815:8;29810:2;29802:6;29798:15;29791:33;29606:225;:::o;29837:366::-;29979:3;30000:67;30064:2;30059:3;30000:67;:::i;:::-;29993:74;;30076:93;30165:3;30076:93;:::i;:::-;30194:2;30189:3;30185:12;30178:19;;29837:366;;;:::o;30209:419::-;30375:4;30413:2;30402:9;30398:18;30390:26;;30462:9;30456:4;30452:20;30448:1;30437:9;30433:17;30426:47;30490:131;30616:4;30490:131;:::i;:::-;30482:139;;30209:419;;;:::o;30634:242::-;30774:34;30770:1;30762:6;30758:14;30751:58;30843:25;30838:2;30830:6;30826:15;30819:50;30634:242;:::o;30882:366::-;31024:3;31045:67;31109:2;31104:3;31045:67;:::i;:::-;31038:74;;31121:93;31210:3;31121:93;:::i;:::-;31239:2;31234:3;31230:12;31223:19;;30882:366;;;:::o;31254:419::-;31420:4;31458:2;31447:9;31443:18;31435:26;;31507:9;31501:4;31497:20;31493:1;31482:9;31478:17;31471:47;31535:131;31661:4;31535:131;:::i;:::-;31527:139;;31254:419;;;:::o;31679:143::-;31736:5;31767:6;31761:13;31752:22;;31783:33;31810:5;31783:33;:::i;:::-;31679:143;;;;:::o;31828:351::-;31898:6;31947:2;31935:9;31926:7;31922:23;31918:32;31915:119;;;31953:79;;:::i;:::-;31915:119;32073:1;32098:64;32154:7;32145:6;32134:9;32130:22;32098:64;:::i;:::-;32088:74;;32044:128;31828:351;;;;:::o;32185:332::-;32306:4;32344:2;32333:9;32329:18;32321:26;;32357:71;32425:1;32414:9;32410:17;32401:6;32357:71;:::i;:::-;32438:72;32506:2;32495:9;32491:18;32482:6;32438:72;:::i;:::-;32185:332;;;;;:::o;32523:137::-;32577:5;32608:6;32602:13;32593:22;;32624:30;32648:5;32624:30;:::i;:::-;32523:137;;;;:::o;32666:345::-;32733:6;32782:2;32770:9;32761:7;32757:23;32753:32;32750:119;;;32788:79;;:::i;:::-;32750:119;32908:1;32933:61;32986:7;32977:6;32966:9;32962:22;32933:61;:::i;:::-;32923:71;;32879:125;32666:345;;;;:::o;33017:223::-;33157:34;33153:1;33145:6;33141:14;33134:58;33226:6;33221:2;33213:6;33209:15;33202:31;33017:223;:::o;33246:366::-;33388:3;33409:67;33473:2;33468:3;33409:67;:::i;:::-;33402:74;;33485:93;33574:3;33485:93;:::i;:::-;33603:2;33598:3;33594:12;33587:19;;33246:366;;;:::o;33618:419::-;33784:4;33822:2;33811:9;33807:18;33799:26;;33871:9;33865:4;33861:20;33857:1;33846:9;33842:17;33835:47;33899:131;34025:4;33899:131;:::i;:::-;33891:139;;33618:419;;;:::o;34043:221::-;34183:34;34179:1;34171:6;34167:14;34160:58;34252:4;34247:2;34239:6;34235:15;34228:29;34043:221;:::o;34270:366::-;34412:3;34433:67;34497:2;34492:3;34433:67;:::i;:::-;34426:74;;34509:93;34598:3;34509:93;:::i;:::-;34627:2;34622:3;34618:12;34611:19;;34270:366;;;:::o;34642:419::-;34808:4;34846:2;34835:9;34831:18;34823:26;;34895:9;34889:4;34885:20;34881:1;34870:9;34866:17;34859:47;34923:131;35049:4;34923:131;:::i;:::-;34915:139;;34642:419;;;:::o;35067:224::-;35207:34;35203:1;35195:6;35191:14;35184:58;35276:7;35271:2;35263:6;35259:15;35252:32;35067:224;:::o;35297:366::-;35439:3;35460:67;35524:2;35519:3;35460:67;:::i;:::-;35453:74;;35536:93;35625:3;35536:93;:::i;:::-;35654:2;35649:3;35645:12;35638:19;;35297:366;;;:::o;35669:419::-;35835:4;35873:2;35862:9;35858:18;35850:26;;35922:9;35916:4;35912:20;35908:1;35897:9;35893:17;35886:47;35950:131;36076:4;35950:131;:::i;:::-;35942:139;;35669:419;;;:::o;36094:222::-;36234:34;36230:1;36222:6;36218:14;36211:58;36303:5;36298:2;36290:6;36286:15;36279:30;36094:222;:::o;36322:366::-;36464:3;36485:67;36549:2;36544:3;36485:67;:::i;:::-;36478:74;;36561:93;36650:3;36561:93;:::i;:::-;36679:2;36674:3;36670:12;36663:19;;36322:366;;;:::o;36694:419::-;36860:4;36898:2;36887:9;36883:18;36875:26;;36947:9;36941:4;36937:20;36933:1;36922:9;36918:17;36911:47;36975:131;37101:4;36975:131;:::i;:::-;36967:139;;36694:419;;;:::o;37119:174::-;37259:26;37255:1;37247:6;37243:14;37236:50;37119:174;:::o;37299:366::-;37441:3;37462:67;37526:2;37521:3;37462:67;:::i;:::-;37455:74;;37538:93;37627:3;37538:93;:::i;:::-;37656:2;37651:3;37647:12;37640:19;;37299:366;;;:::o;37671:419::-;37837:4;37875:2;37864:9;37860:18;37852:26;;37924:9;37918:4;37914:20;37910:1;37899:9;37895:17;37888:47;37952:131;38078:4;37952:131;:::i;:::-;37944:139;;37671:419;;;:::o;38096:246::-;38236:34;38232:1;38224:6;38220:14;38213:58;38305:29;38300:2;38292:6;38288:15;38281:54;38096:246;:::o;38348:366::-;38490:3;38511:67;38575:2;38570:3;38511:67;:::i;:::-;38504:74;;38587:93;38676:3;38587:93;:::i;:::-;38705:2;38700:3;38696:12;38689:19;;38348:366;;;:::o;38720:419::-;38886:4;38924:2;38913:9;38909:18;38901:26;;38973:9;38967:4;38963:20;38959:1;38948:9;38944:17;38937:47;39001:131;39127:4;39001:131;:::i;:::-;38993:139;;38720:419;;;:::o;39145:194::-;39185:4;39205:20;39223:1;39205:20;:::i;:::-;39200:25;;39239:20;39257:1;39239:20;:::i;:::-;39234:25;;39283:1;39280;39276:9;39268:17;;39307:1;39301:4;39298:11;39295:37;;;39312:18;;:::i;:::-;39295:37;39145:194;;;;:::o;39345:235::-;39485:34;39481:1;39473:6;39469:14;39462:58;39554:18;39549:2;39541:6;39537:15;39530:43;39345:235;:::o;39586:366::-;39728:3;39749:67;39813:2;39808:3;39749:67;:::i;:::-;39742:74;;39825:93;39914:3;39825:93;:::i;:::-;39943:2;39938:3;39934:12;39927:19;;39586:366;;;:::o;39958:419::-;40124:4;40162:2;40151:9;40147:18;40139:26;;40211:9;40205:4;40201:20;40197:1;40186:9;40182:17;40175:47;40239:131;40365:4;40239:131;:::i;:::-;40231:139;;39958:419;;;:::o;40383:179::-;40523:31;40519:1;40511:6;40507:14;40500:55;40383:179;:::o;40568:366::-;40710:3;40731:67;40795:2;40790:3;40731:67;:::i;:::-;40724:74;;40807:93;40896:3;40807:93;:::i;:::-;40925:2;40920:3;40916:12;40909:19;;40568:366;;;:::o;40940:419::-;41106:4;41144:2;41133:9;41129:18;41121:26;;41193:9;41187:4;41183:20;41179:1;41168:9;41164:17;41157:47;41221:131;41347:4;41221:131;:::i;:::-;41213:139;;40940:419;;;:::o;41365:147::-;41466:11;41503:3;41488:18;;41365:147;;;;:::o;41518:114::-;;:::o;41638:398::-;41797:3;41818:83;41899:1;41894:3;41818:83;:::i;:::-;41811:90;;41910:93;41999:3;41910:93;:::i;:::-;42028:1;42023:3;42019:11;42012:18;;41638:398;;;:::o;42042:379::-;42226:3;42248:147;42391:3;42248:147;:::i;:::-;42241:154;;42412:3;42405:10;;42042:379;;;:::o;42427:225::-;42567:34;42563:1;42555:6;42551:14;42544:58;42636:8;42631:2;42623:6;42619:15;42612:33;42427:225;:::o;42658:366::-;42800:3;42821:67;42885:2;42880:3;42821:67;:::i;:::-;42814:74;;42897:93;42986:3;42897:93;:::i;:::-;43015:2;43010:3;43006:12;42999:19;;42658:366;;;:::o;43030:419::-;43196:4;43234:2;43223:9;43219:18;43211:26;;43283:9;43277:4;43273:20;43269:1;43258:9;43254:17;43247:47;43311:131;43437:4;43311:131;:::i;:::-;43303:139;;43030:419;;;:::o;43455:180::-;43503:77;43500:1;43493:88;43600:4;43597:1;43590:15;43624:4;43621:1;43614:15;43641:180;43689:77;43686:1;43679:88;43786:4;43783:1;43776:15;43810:4;43807:1;43800:15;43827:143;43884:5;43915:6;43909:13;43900:22;;43931:33;43958:5;43931:33;:::i;:::-;43827:143;;;;:::o;43976:351::-;44046:6;44095:2;44083:9;44074:7;44070:23;44066:32;44063:119;;;44101:79;;:::i;:::-;44063:119;44221:1;44246:64;44302:7;44293:6;44282:9;44278:22;44246:64;:::i;:::-;44236:74;;44192:128;43976:351;;;;:::o;44333:85::-;44378:7;44407:5;44396:16;;44333:85;;;:::o;44424:158::-;44482:9;44515:61;44533:42;44542:32;44568:5;44542:32;:::i;:::-;44533:42;:::i;:::-;44515:61;:::i;:::-;44502:74;;44424:158;;;:::o;44588:147::-;44683:45;44722:5;44683:45;:::i;:::-;44678:3;44671:58;44588:147;;:::o;44741:114::-;44808:6;44842:5;44836:12;44826:22;;44741:114;;;:::o;44861:184::-;44960:11;44994:6;44989:3;44982:19;45034:4;45029:3;45025:14;45010:29;;44861:184;;;;:::o;45051:132::-;45118:4;45141:3;45133:11;;45171:4;45166:3;45162:14;45154:22;;45051:132;;;:::o;45189:108::-;45266:24;45284:5;45266:24;:::i;:::-;45261:3;45254:37;45189:108;;:::o;45303:179::-;45372:10;45393:46;45435:3;45427:6;45393:46;:::i;:::-;45471:4;45466:3;45462:14;45448:28;;45303:179;;;;:::o;45488:113::-;45558:4;45590;45585:3;45581:14;45573:22;;45488:113;;;:::o;45637:732::-;45756:3;45785:54;45833:5;45785:54;:::i;:::-;45855:86;45934:6;45929:3;45855:86;:::i;:::-;45848:93;;45965:56;46015:5;45965:56;:::i;:::-;46044:7;46075:1;46060:284;46085:6;46082:1;46079:13;46060:284;;;46161:6;46155:13;46188:63;46247:3;46232:13;46188:63;:::i;:::-;46181:70;;46274:60;46327:6;46274:60;:::i;:::-;46264:70;;46120:224;46107:1;46104;46100:9;46095:14;;46060:284;;;46064:14;46360:3;46353:10;;45761:608;;;45637:732;;;;:::o;46375:831::-;46638:4;46676:3;46665:9;46661:19;46653:27;;46690:71;46758:1;46747:9;46743:17;46734:6;46690:71;:::i;:::-;46771:80;46847:2;46836:9;46832:18;46823:6;46771:80;:::i;:::-;46898:9;46892:4;46888:20;46883:2;46872:9;46868:18;46861:48;46926:108;47029:4;47020:6;46926:108;:::i;:::-;46918:116;;47044:72;47112:2;47101:9;47097:18;47088:6;47044:72;:::i;:::-;47126:73;47194:3;47183:9;47179:19;47170:6;47126:73;:::i;:::-;46375:831;;;;;;;;:::o

Swarm Source

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