ETH Price: $2,333.76 (-3.26%)

Token

POCHITA (POCHITA)
 

Overview

Max Total Supply

1,000,000,000 POCHITA

Holders

189

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,112,629.335384771 POCHITA

Value
$0.00
0x875eb86a8b9e0bdbf535e6fec14bbf685792756d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
POCHITA

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-20
*/

/**
 * Twitter: https://twitter.com/pochitacoinerc
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

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

    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 POCHITA is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  liquidityFeeOnBuy;
    uint256 public  liquidityFeeOnSell;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    address public  marketingWallet;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event UpdateBuyFees(uint256 liquidityFeeOnBuy, uint256 marketingFeeOnBuy);
    event UpdateSellFees(uint256 liquidityFeeOnSell, uint256 marketingFeeOnSell);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("POCHITA", "POCHITA") 
    {   
        address router;
        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);

        liquidityFeeOnBuy  = 0;
        liquidityFeeOnSell = 0;

        marketingFeeOnBuy  = 30;
        marketingFeeOnSell = 30;

        _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        marketingWallet = 0xaC0801AeF0FFf52C035DCa6FFfc10C13FFbefc3C;

        maxTransactionLimitEnabled = true;

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

        maxWalletLimitEnabled = true;

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

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

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

        tradingEnabled = false;
        swapEnabled = true;
    }

    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 _liquidityFeeOnBuy, uint256 _marketingFeeOnBuy) external onlyOwner {
        liquidityFeeOnBuy = _liquidityFeeOnBuy;
        marketingFeeOnBuy = _marketingFeeOnBuy;

        _totalFeesOnBuy   = liquidityFeeOnBuy + marketingFeeOnBuy;


        emit UpdateBuyFees(liquidityFeeOnBuy, marketingFeeOnBuy);
    }

    function updateSellFees(uint256 _liquidityFeeOnSell, uint256 _marketingFeeOnSell) external onlyOwner {
        liquidityFeeOnSell = _liquidityFeeOnSell;
        marketingFeeOnSell = _marketingFeeOnSell;

        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;


        emit UpdateSellFees(liquidityFeeOnSell, marketingFeeOnSell);
    }

    function changeTaxWallet(address _marketingWallet) external onlyOwner{
        require(_marketingWallet != marketingWallet,"Marketing wallet is already that address");
        require(_marketingWallet != address(0),"Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;

        emit MarketingWalletChanged(marketingWallet);
    }

    bool public tradingEnabled;

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

    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;

            uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell;
            uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell;
            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell;

            if (liquidityShare > 0) {
                uint256 liquidityTokens = contractTokenBalance * liquidityShare / totalFee;
                swapAndLiquify(liquidityTokens);
            }
            
            if (marketingShare > 0) {
                uint256 marketingTokens = contractTokenBalance * marketingShare / totalFee;
                swapAndSendMarketing(marketingTokens);
            }          

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

    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 swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0,
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    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(marketingWallet).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 limis 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":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","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":"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":"liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeTaxWallet","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":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801562000010575f80fd5b506040518060400160405280600781526020017f504f4348495441000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f504f43484954410000000000000000000000000000000000000000000000000081525081600390816200008e91906200105e565b508060049081620000a091906200105e565b5050505f620000b462000a7560201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f6001461480620001625750600546145b156200018557737a250d5630b4cf539739df2c5dacb4c659f2488d905062000189565b5f80fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fe9190620011a7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000264573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200028a9190620011a7565b6040518363ffffffff1660e01b8152600401620002a9929190620011e8565b6020604051808303815f875af1158015620002c6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ec9190620011a7565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003c23060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000a7c60201b60201c565b5f6009819055505f600a81905550601e600b81905550601e600c81905550600b54600954620003f2919062001240565b600d81905550600c54600a546200040a919062001240565b600e8190555073ac0801aef0fff52c035dca6fffc10c13ffbefc3c600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160165f6101000a81548160ff021916908315150217905550600160155f6200049362000c4760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f6101000a81548160ff021916908315150217905550600160125f6200063362000c4760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f620007b962000c4760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620009796200093e62000c4760201b60201c565b6200094e62000c6f60201b60201c565b600a6200095c9190620013d6565b633b9aca006200096d919062001426565b62000c7760201b60201c565b6113886200098c62000de760201b60201c565b6200099891906200149d565b6010819055506103e86014620009b362000de760201b60201c565b620009bf919062001426565b620009cb91906200149d565b6017819055506103e86014620009e662000de760201b60201c565b620009f2919062001426565b620009fe91906200149d565b6018819055506103e8601462000a1962000de760201b60201c565b62000a25919062001426565b62000a3191906200149d565b6014819055505f601160026101000a81548160ff0219169083151502179055506001601160016101000a81548160ff021916908315150217905550505050620016a6565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae49062001558565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5590620015ec565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c3a91906200161d565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f6009905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cdf9062001686565b60405180910390fd5b62000cfb5f838362000df060201b60201c565b8060025f82825462000d0e919062001240565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000d62919062001240565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dc891906200161d565b60405180910390a362000de35f838362000df560201b60201c565b5050565b5f600254905090565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000e7657607f821691505b60208210810362000e8c5762000e8b62000e31565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ef07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000eb3565b62000efc868362000eb3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000f4662000f4062000f3a8462000f14565b62000f1d565b62000f14565b9050919050565b5f819050919050565b62000f618362000f26565b62000f7962000f708262000f4d565b84845462000ebf565b825550505050565b5f90565b62000f8f62000f81565b62000f9c81848462000f56565b505050565b5b8181101562000fc35762000fb75f8262000f85565b60018101905062000fa2565b5050565b601f821115620010125762000fdc8162000e92565b62000fe78462000ea4565b8101602085101562000ff7578190505b6200100f620010068562000ea4565b83018262000fa1565b50505b505050565b5f82821c905092915050565b5f620010345f198460080262001017565b1980831691505092915050565b5f6200104e838362001023565b9150826002028217905092915050565b620010698262000dfa565b67ffffffffffffffff81111562001085576200108462000e04565b5b62001091825462000e5e565b6200109e82828562000fc7565b5f60209050601f831160018114620010d4575f8415620010bf578287015190505b620010cb858262001041565b8655506200113a565b601f198416620010e48662000e92565b5f5b828110156200110d57848901518255600182019150602085019450602081019050620010e6565b868310156200112d578489015162001129601f89168262001023565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620011718262001146565b9050919050565b620011838162001165565b81146200118e575f80fd5b50565b5f81519050620011a18162001178565b92915050565b5f60208284031215620011bf57620011be62001142565b5b5f620011ce8482850162001191565b91505092915050565b620011e28162001165565b82525050565b5f604082019050620011fd5f830185620011d7565b6200120c6020830184620011d7565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200124c8262000f14565b9150620012598362000f14565b925082820190508082111562001274576200127362001213565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115620012d757808604811115620012af57620012ae62001213565b5b6001851615620012bf5780820291505b8081029050620012cf856200127a565b94506200128f565b94509492505050565b5f82620012f15760019050620013c3565b8162001300575f9050620013c3565b816001811462001319576002811462001324576200135a565b6001915050620013c3565b60ff84111562001339576200133862001213565b5b8360020a91508482111562001353576200135262001213565b5b50620013c3565b5060208310610133831016604e8410600b8410161715620013945782820a9050838111156200138e576200138d62001213565b5b620013c3565b620013a3848484600162001286565b92509050818404811115620013bd57620013bc62001213565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620013e28262000f14565b9150620013ef83620013ca565b92506200141e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620012e0565b905092915050565b5f620014328262000f14565b91506200143f8362000f14565b92508282026200144f8162000f14565b9150828204841483151762001469576200146862001213565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620014a98262000f14565b9150620014b68362000f14565b925082620014c957620014c862001470565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62001540602483620014d4565b91506200154d82620014e4565b604082019050919050565b5f6020820190508181035f830152620015718162001532565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620015d4602283620014d4565b9150620015e18262001578565b604082019050919050565b5f6020820190508181035f8301526200160581620015c6565b9050919050565b620016178162000f14565b82525050565b5f602082019050620016325f8301846200160c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200166e601f83620014d4565b91506200167b8262001638565b602082019050919050565b5f6020820190508181035f8301526200169f8162001660565b9050919050565b61574680620016b45f395ff3fe608060405260043610610280575f3560e01c806370a082311161014e578063aa4bde28116100c0578063dc4c7dbc11610079578063dc4c7dbc1461097f578063dd62ed3e146109a9578063e01af92c146109e5578063e2f4560514610a0d578063f2fde38b14610a37578063f9d0831a14610a5f57610287565b8063aa4bde281461088d578063afa4f3b2146108b7578063b6f7f681146108df578063c024666814610907578063cb7115951461092f578063d2fcc0011461095757610287565b80638a8c523c116101125780638a8c523c1461076f5780638da5cb5b1461078557806395d89b41146107af578063a457c2d7146107d9578063a8a69b9d14610815578063a9059cbb1461085157610287565b806370a08231146106a1578063715018a6146106dd57806375f0a874146106f35780637b3c83b11461071d578063880bcbc11461074757610287565b80632ba86bf2116101f25780634fbee193116101ab5780634fbee1931461059757806356a6cabf146105d357806359136fa5146105fb5780635fc2e5961461062557806366ca9b831461064f5780636ddd17131461067757610287565b80632ba86bf2146104895780632ce86fbf146104b3578063313ce567146104dd578063395093511461050757806349bd5a5e146105435780634ada218b1461056d57610287565b806318160ddd1161024457806318160ddd1461036d57806318d9ceae1461039757806321a9d82a146103d357806323b872dd146103fd57806327a14fc2146104395780632a6c7dba1461046157610287565b80630105d0fd1461028b57806302dbd8f8146102b557806306fdde03146102dd578063095ea7b3146103075780631694505e1461034357610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a87565b6040516102ac9190613e48565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613e8f565b610a8d565b005b3480156102e8575f80fd5b506102f1610b88565b6040516102fe9190613f57565b60405180910390f35b348015610312575f80fd5b5061032d60048036038101906103289190613fd1565b610c18565b60405161033a9190614029565b60405180910390f35b34801561034e575f80fd5b50610357610c35565b604051610364919061409d565b60405180910390f35b348015610378575f80fd5b50610381610c5a565b60405161038e9190613e48565b60405180910390f35b3480156103a2575f80fd5b506103bd60048036038101906103b891906140b6565b610c63565b6040516103ca9190614029565b60405180910390f35b3480156103de575f80fd5b506103e7610cb5565b6040516103f49190614029565b60405180910390f35b348015610408575f80fd5b50610423600480360381019061041e91906140e1565b610cc7565b6040516104309190614029565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190614131565b610de1565b005b34801561046c575f80fd5b5061048760048036038101906104829190614186565b610f4c565b005b348015610494575f80fd5b5061049d611097565b6040516104aa9190614029565b60405180910390f35b3480156104be575f80fd5b506104c76110a9565b6040516104d49190613e48565b60405180910390f35b3480156104e8575f80fd5b506104f16110af565b6040516104fe91906141cc565b60405180910390f35b348015610512575f80fd5b5061052d60048036038101906105289190613fd1565b6110b7565b60405161053a9190614029565b60405180910390f35b34801561054e575f80fd5b5061055761115e565b60405161056491906141f4565b60405180910390f35b348015610578575f80fd5b50610581611183565b60405161058e9190614029565b60405180910390f35b3480156105a2575f80fd5b506105bd60048036038101906105b891906140b6565b611196565b6040516105ca9190614029565b60405180910390f35b3480156105de575f80fd5b506105f960048036038101906105f49190614186565b6111e8565b005b348015610606575f80fd5b5061060f611333565b60405161061c9190613e48565b60405180910390f35b348015610630575f80fd5b50610639611339565b6040516106469190613e48565b60405180910390f35b34801561065a575f80fd5b5061067560048036038101906106709190613e8f565b61133f565b005b348015610682575f80fd5b5061068b61143a565b6040516106989190614029565b60405180910390f35b3480156106ac575f80fd5b506106c760048036038101906106c291906140b6565b61144d565b6040516106d49190613e48565b60405180910390f35b3480156106e8575f80fd5b506106f1611492565b005b3480156106fe575f80fd5b506107076115e5565b60405161071491906141f4565b60405180910390f35b348015610728575f80fd5b5061073161160a565b60405161073e9190613e48565b60405180910390f35b348015610752575f80fd5b5061076d6004803603810190610768919061420d565b611610565b005b34801561077a575f80fd5b50610783611849565b005b348015610790575f80fd5b50610799611967565b6040516107a691906141f4565b60405180910390f35b3480156107ba575f80fd5b506107c361198f565b6040516107d09190613f57565b60405180910390f35b3480156107e4575f80fd5b506107ff60048036038101906107fa9190613fd1565b611a1f565b60405161080c9190614029565b60405180910390f35b348015610820575f80fd5b5061083b600480360381019061083691906140b6565b611b05565b6040516108489190614029565b60405180910390f35b34801561085c575f80fd5b5061087760048036038101906108729190613fd1565b611b57565b6040516108849190614029565b60405180910390f35b348015610898575f80fd5b506108a1611b74565b6040516108ae9190613e48565b60405180910390f35b3480156108c2575f80fd5b506108dd60048036038101906108d89190614131565b611b7a565b005b3480156108ea575f80fd5b5061090560048036038101906109009190613e8f565b611caa565b005b348015610912575f80fd5b5061092d6004803603810190610928919061420d565b611e7e565b005b34801561093a575f80fd5b50610955600480360381019061095091906140b6565b612049565b005b348015610962575f80fd5b5061097d6004803603810190610978919061420d565b612277565b005b34801561098a575f80fd5b506109936124b0565b6040516109a09190613e48565b60405180910390f35b3480156109b4575f80fd5b506109cf60048036038101906109ca919061424b565b6124b6565b6040516109dc9190613e48565b60405180910390f35b3480156109f0575f80fd5b50610a0b6004803603810190610a069190614186565b612538565b005b348015610a18575f80fd5b50610a21612640565b604051610a2e9190613e48565b60405180910390f35b348015610a42575f80fd5b50610a5d6004803603810190610a5891906140b6565b612646565b005b348015610a6a575f80fd5b50610a856004803603810190610a8091906140b6565b612808565b005b60175481565b610a95612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a906142d3565b60405180910390fd5b81600a8190555080600c81905550600c54600a54610b41919061431e565b600e819055507f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051610b7c929190614351565b60405180910390a15050565b606060038054610b97906143a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc3906143a5565b8015610c0e5780601f10610be557610100808354040283529160200191610c0e565b820191905f5260205f20905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b5f610c2b610c24612a6f565b8484612a76565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60135f9054906101000a900460ff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d0f612a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dca5782811015610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90614445565b60405180910390fd5b610dc985610dc1612a6f565b858403612a76565b5b610dd5858585612c39565b60019150509392505050565b610de9612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e906142d3565b60405180910390fd5b6064610e816110af565b600a610e8d9190614592565b610e95610c5a565b610e9f9190614609565b610ea99190614609565b811015610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee2906146a9565b60405180910390fd5b610ef36110af565b600a610eff9190614592565b81610f0a91906146c7565b6014819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942601454604051610f419190613e48565b60405180910390a150565b610f54612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd9906142d3565b60405180910390fd5b60135f9054906101000a900460ff16151581151503611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614778565b60405180910390fd5b8060135f6101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f160135f9054906101000a900460ff1660405161108c9190614029565b60405180910390a150565b60165f9054906101000a900460ff1681565b600a5481565b5f6009905090565b5f6111546110c3612a6f565b848460015f6110d0612a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461114f919061431e565b612a76565b6001905092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160029054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6111f0612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611275906142d3565b60405180910390fd5b60165f9054906101000a900460ff161515811515036112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990614806565b60405180910390fd5b8060165f6101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf60165f9054906101000a900460ff166040516113289190614029565b60405180910390a150565b60185481565b600b5481565b611347612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc906142d3565b60405180910390fd5b8160098190555080600b81905550600b546009546113f3919061431e565b600d819055507fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b5460405161142e929190614351565b60405180910390a15050565b601160019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61149a612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f906142d3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b611618612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d906142d3565b60405180910390fd5b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90614894565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a906148fc565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c108260405161183d9190614029565b60405180910390a25050565b611851612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d6906142d3565b60405180910390fd5b601160029054906101000a900460ff161561192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690614964565b60405180910390fd5b6001601160026101000a81548160ff0219169083151502179055506001601160016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461199e906143a5565b80601f01602080910402602001604051908101604052809291908181526020018280546119ca906143a5565b8015611a155780601f106119ec57610100808354040283529160200191611a15565b820191905f5260205f20905b8154815290600101906020018083116119f857829003601f168201915b5050505050905090565b5f8060015f611a2c612a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add906149f2565b60405180910390fd5b611afa611af1612a6f565b85858403612a76565b600191505092915050565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611b6a611b63612a6f565b8484612c39565b6001905092915050565b60145481565b611b82612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c07906142d3565b60405180910390fd5b620f4240611c1c610c5a565b611c269190614609565b8111611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614a80565b60405180910390fd5b806010819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145601054604051611c9f9190613e48565b60405180910390a150565b611cb2612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d37906142d3565b60405180910390fd5b6103e8611d4b6110af565b600a611d579190614592565b611d5f610c5a565b611d699190614609565b611d739190614609565b8210158015611db457506103e8611d886110af565b600a611d949190614592565b611d9c610c5a565b611da69190614609565b611db09190614609565b8110155b611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90614b0e565b60405180910390fd5b611dfb6110af565b600a611e079190614592565b82611e1291906146c7565b601781905550611e206110af565b600a611e2c9190614592565b81611e3791906146c7565b6018819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601754601854604051611e72929190614351565b60405180910390a15050565b611e86612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b906142d3565b60405180910390fd5b80151560085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a90614b9c565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161203d9190614029565b60405180910390a25050565b612051612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d6906142d3565b60405180910390fd5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590614c2a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390614cb8565b60405180910390fd5b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161226c91906141f4565b60405180910390a150565b61227f612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612304906142d3565b60405180910390fd5b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390614894565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361240a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612401906148fc565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c826040516124a49190614029565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b612540612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c5906142d3565b60405180910390fd5b801515601160019054906101000a900460ff16151503612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614d46565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60105481565b61264e612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d3906142d3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361274a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274190614dd4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612810612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461289e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612895906142d3565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390614e62565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361296e57612968473373ffffffffffffffffffffffffffffffffffffffff1661353290919063ffffffff16565b50612a6c565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129ac91906141f4565b602060405180830381865afa1580156129c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129eb9190614e94565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612a28929190614ebf565b6020604051808303815f875af1158015612a44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a689190614efa565b5050505b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb90614f95565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4990615023565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c2c9190613e48565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e906150b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c9061513f565b60405180910390fd5b601160029054906101000a900460ff1680612d76575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612dc7575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfd906151a7565b60405180910390fd5b5f8103612e1d57612e1883835f6135e8565b61352d565b60165f9054906101000a900460ff16156130695760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612ed8575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612f2b575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f7e575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130685760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130215760175481111561301c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301390615235565b60405180910390fd5b613067565b601854811115613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90615235565b60405180910390fd5b5b5b5b5f6130733061144d565b90505f6010548210159050808015613097575060115f9054906101000a900460ff16155b80156130ef575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561310957505f600e54600d54613107919061431e565b115b80156131215750601160019054906101000a900460ff165b156131f057600160115f6101000a81548160ff0219169083151502179055505f600e54600d54613151919061431e565b90505f600a54600954613164919061431e565b90505f600c54600b54613177919061431e565b90505f8211156131a6575f83838761318f91906146c7565b6131999190614609565b90506131a48161385d565b505b5f8111156131d3575f8382876131bc91906146c7565b6131c69190614609565b90506131d181613b83565b505b5f60115f6101000a81548160ff0219169083151502179055505050505b5f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061328c575060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806132a2575060115f9054906101000a900460ff165b156132af575f9050613371565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361330d57600d549050613370565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361336b57600e54905061336f565b5f90505b5b5b5f8111156133af575f6064828661338891906146c7565b6133929190614609565b905080856133a09190615253565b94506133ad8730836135e8565b505b60135f9054906101000a900460ff161561351e5760125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613461575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134ba575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561351d575f6134c98661144d565b905060145485826134da919061431e565b111561351b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613512906152f6565b60405180910390fd5b505b5b6135298686866135e8565b5050505b505050565b5f81471015613576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356d9061535e565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff168360405161359b906153a9565b5f6040518083038185875af1925050503d805f81146135d5576040519150601f19603f3d011682016040523d82523d5f602084013e6135da565b606091505b505090508091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364d906150b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136bb9061513f565b60405180910390fd5b6136cf838383613e26565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613752576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137499061542d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546137e0919061431e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138449190613e48565b60405180910390a3613857848484613e2b565b50505050565b5f60028261386b9190614609565b90505f818361387a9190615253565b90505f4790505f600267ffffffffffffffff81111561389c5761389b61544b565b5b6040519080825280602002602001820160405280156138ca5781602001602082028036833780820191505090505b50905030815f815181106138e1576138e0615478565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613985573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139a991906154b9565b816001815181106139bd576139bc615478565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8430426040518663ffffffff1660e01b8152600401613a599594939291906155d4565b5f604051808303815f87803b158015613a70575f80fd5b505af1158015613a82573d5f803e3d5ffd5b505050505f8247613a939190615253565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230875f8061dead426040518863ffffffff1660e01b8152600401613afc9695949392919061562c565b60606040518083038185885af1158015613b18573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613b3d919061568b565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051613b73939291906156db565b60405180910390a1505050505050565b5f4790505f600267ffffffffffffffff811115613ba357613ba261544b565b5b604051908082528060200260200182016040528015613bd15781602001602082028036833780820191505090505b50905030815f81518110613be857613be7615478565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cb091906154b9565b81600181518110613cc457613cc3615478565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401613d609594939291906155d4565b5f604051808303815f87803b158015613d77575f80fd5b505af1158015613d89573d5f803e3d5ffd5b505050505f8247613d9a9190615253565b9050613de681600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661353290919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613e18929190614351565b60405180910390a150505050565b505050565b505050565b5f819050919050565b613e4281613e30565b82525050565b5f602082019050613e5b5f830184613e39565b92915050565b5f80fd5b613e6e81613e30565b8114613e78575f80fd5b50565b5f81359050613e8981613e65565b92915050565b5f8060408385031215613ea557613ea4613e61565b5b5f613eb285828601613e7b565b9250506020613ec385828601613e7b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613f04578082015181840152602081019050613ee9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613f2982613ecd565b613f338185613ed7565b9350613f43818560208601613ee7565b613f4c81613f0f565b840191505092915050565b5f6020820190508181035f830152613f6f8184613f1f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613fa082613f77565b9050919050565b613fb081613f96565b8114613fba575f80fd5b50565b5f81359050613fcb81613fa7565b92915050565b5f8060408385031215613fe757613fe6613e61565b5b5f613ff485828601613fbd565b925050602061400585828601613e7b565b9150509250929050565b5f8115159050919050565b6140238161400f565b82525050565b5f60208201905061403c5f83018461401a565b92915050565b5f819050919050565b5f61406561406061405b84613f77565b614042565b613f77565b9050919050565b5f6140768261404b565b9050919050565b5f6140878261406c565b9050919050565b6140978161407d565b82525050565b5f6020820190506140b05f83018461408e565b92915050565b5f602082840312156140cb576140ca613e61565b5b5f6140d884828501613fbd565b91505092915050565b5f805f606084860312156140f8576140f7613e61565b5b5f61410586828701613fbd565b935050602061411686828701613fbd565b925050604061412786828701613e7b565b9150509250925092565b5f6020828403121561414657614145613e61565b5b5f61415384828501613e7b565b91505092915050565b6141658161400f565b811461416f575f80fd5b50565b5f813590506141808161415c565b92915050565b5f6020828403121561419b5761419a613e61565b5b5f6141a884828501614172565b91505092915050565b5f60ff82169050919050565b6141c6816141b1565b82525050565b5f6020820190506141df5f8301846141bd565b92915050565b6141ee81613f96565b82525050565b5f6020820190506142075f8301846141e5565b92915050565b5f806040838503121561422357614222613e61565b5b5f61423085828601613fbd565b925050602061424185828601614172565b9150509250929050565b5f806040838503121561426157614260613e61565b5b5f61426e85828601613fbd565b925050602061427f85828601613fbd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6142bd602083613ed7565b91506142c882614289565b602082019050919050565b5f6020820190508181035f8301526142ea816142b1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61432882613e30565b915061433383613e30565b925082820190508082111561434b5761434a6142f1565b5b92915050565b5f6040820190506143645f830185613e39565b6143716020830184613e39565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806143bc57607f821691505b6020821081036143cf576143ce614378565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61442f602883613ed7565b915061443a826143d5565b604082019050919050565b5f6020820190508181035f83015261445c81614423565b9050919050565b5f8160011c9050919050565b5f808291508390505b60018511156144b857808604811115614494576144936142f1565b5b60018516156144a35780820291505b80810290506144b185614463565b9450614478565b94509492505050565b5f826144d0576001905061458b565b816144dd575f905061458b565b81600181146144f357600281146144fd5761452c565b600191505061458b565b60ff84111561450f5761450e6142f1565b5b8360020a915084821115614526576145256142f1565b5b5061458b565b5060208310610133831016604e8410600b84101617156145615782820a90508381111561455c5761455b6142f1565b5b61458b565b61456e848484600161446f565b92509050818404811115614585576145846142f1565b5b81810290505b9392505050565b5f61459c82613e30565b91506145a7836141b1565b92506145d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846144c1565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61461382613e30565b915061461e83613e30565b92508261462e5761462d6145dc565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f614693602d83613ed7565b915061469e82614639565b604082019050919050565b5f6020820190508181035f8301526146c081614687565b9050919050565b5f6146d182613e30565b91506146dc83613e30565b92508282026146ea81613e30565b91508282048414831517614701576147006142f1565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c726561647920736574205f8201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b5f614762602d83613ed7565b915061476d82614708565b604082019050919050565b5f6020820190508181035f83015261478f81614756565b9050919050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c72656164795f8201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b5f6147f0603283613ed7565b91506147fb82614796565b604082019050919050565b5f6020820190508181035f83015261481d816147e4565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f207468617420735f8201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b5f61487e602483613ed7565b915061488982614824565b604082019050919050565b5f6020820190508181035f8301526148ab81614872565b9050919050565b7f43616e277420736574207468697320616464726573732e0000000000000000005f82015250565b5f6148e6601783613ed7565b91506148f1826148b2565b602082019050919050565b5f6020820190508181035f830152614913816148da565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e00000000000000005f82015250565b5f61494e601883613ed7565b91506149598261491a565b602082019050919050565b5f6020820190508181035f83015261497b81614942565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6149dc602583613ed7565b91506149e782614982565b604082019050919050565b5f6020820190508181035f830152614a09816149d0565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d7573742062652067726561745f8201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b5f614a6a603f83613ed7565b9150614a7582614a10565b604082019050919050565b5f6020820190508181035f830152614a9781614a5e565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f74206265205f8201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b5f614af8603f83613ed7565b9150614b0382614a9e565b604082019050919050565b5f6020820190508181035f830152614b2581614aec565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f614b86602a83613ed7565b9150614b9182614b2c565b604082019050919050565b5f6020820190508181035f830152614bb381614b7a565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c726561647920746861745f8201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b5f614c14602883613ed7565b9150614c1f82614bba565b604082019050919050565b5f6020820190508181035f830152614c4181614c08565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f614ca2602b83613ed7565b9150614cad82614c48565b604082019050919050565b5f6020820190508181035f830152614ccf81614c96565b9050919050565b7f73776170456e61626c656420616c7265616479206174207468697320737461745f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d30602283613ed7565b9150614d3b82614cd6565b604082019050919050565b5f6020820190508181035f830152614d5d81614d24565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614dbe602683613ed7565b9150614dc982614d64565b604082019050919050565b5f6020820190508181035f830152614deb81614db2565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e747261637427732062615f8201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b5f614e4c603783613ed7565b9150614e5782614df2565b604082019050919050565b5f6020820190508181035f830152614e7981614e40565b9050919050565b5f81519050614e8e81613e65565b92915050565b5f60208284031215614ea957614ea8613e61565b5b5f614eb684828501614e80565b91505092915050565b5f604082019050614ed25f8301856141e5565b614edf6020830184613e39565b9392505050565b5f81519050614ef48161415c565b92915050565b5f60208284031215614f0f57614f0e613e61565b5b5f614f1c84828501614ee6565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614f7f602483613ed7565b9150614f8a82614f25565b604082019050919050565b5f6020820190508181035f830152614fac81614f73565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61500d602283613ed7565b915061501882614fb3565b604082019050919050565b5f6020820190508181035f83015261503a81615001565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61509b602583613ed7565b91506150a682615041565b604082019050919050565b5f6020820190508181035f8301526150c88161508f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615129602383613ed7565b9150615134826150cf565b604082019050919050565b5f6020820190508181035f8301526151568161511d565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f615191601883613ed7565b915061519c8261515d565b602082019050919050565b5f6020820190508181035f8301526151be81615185565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b5f61521f603b83613ed7565b915061522a826151c5565b604082019050919050565b5f6020820190508181035f83015261524c81615213565b9050919050565b5f61525d82613e30565b915061526883613e30565b92508282039050818111156152805761527f6142f1565b5b92915050565b7f4d617857616c6c65743a20526563697069656e742065786365656473207468655f8201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b5f6152e0603083613ed7565b91506152eb82615286565b604082019050919050565b5f6020820190508181035f83015261530d816152d4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f615348601d83613ed7565b915061535382615314565b602082019050919050565b5f6020820190508181035f8301526153758161533c565b9050919050565b5f81905092915050565b50565b5f6153945f8361537c565b915061539f82615386565b5f82019050919050565b5f6153b382615389565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615417602683613ed7565b9150615422826153bd565b604082019050919050565b5f6020820190508181035f8301526154448161540b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506154b381613fa7565b92915050565b5f602082840312156154ce576154cd613e61565b5b5f6154db848285016154a5565b91505092915050565b5f819050919050565b5f6155076155026154fd846154e4565b614042565b613e30565b9050919050565b615517816154ed565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61554f81613f96565b82525050565b5f6155608383615546565b60208301905092915050565b5f602082019050919050565b5f6155828261551d565b61558c8185615527565b935061559783615537565b805f5b838110156155c75781516155ae8882615555565b97506155b98361556c565b92505060018101905061559a565b5085935050505092915050565b5f60a0820190506155e75f830188613e39565b6155f4602083018761550e565b81810360408301526156068186615578565b905061561560608301856141e5565b6156226080830184613e39565b9695505050505050565b5f60c08201905061563f5f8301896141e5565b61564c6020830188613e39565b615659604083018761550e565b615666606083018661550e565b61567360808301856141e5565b61568060a0830184613e39565b979650505050505050565b5f805f606084860312156156a2576156a1613e61565b5b5f6156af86828701614e80565b93505060206156c086828701614e80565b92505060406156d186828701614e80565b9150509250925092565b5f6060820190506156ee5f830186613e39565b6156fb6020830185613e39565b6157086040830184613e39565b94935050505056fea2646970667358221220959ea9eeef026270c96d7e5179f796fe0d5324768d498363f2b4ffb99cc29e5d64736f6c63430008140033

Deployed Bytecode

0x608060405260043610610280575f3560e01c806370a082311161014e578063aa4bde28116100c0578063dc4c7dbc11610079578063dc4c7dbc1461097f578063dd62ed3e146109a9578063e01af92c146109e5578063e2f4560514610a0d578063f2fde38b14610a37578063f9d0831a14610a5f57610287565b8063aa4bde281461088d578063afa4f3b2146108b7578063b6f7f681146108df578063c024666814610907578063cb7115951461092f578063d2fcc0011461095757610287565b80638a8c523c116101125780638a8c523c1461076f5780638da5cb5b1461078557806395d89b41146107af578063a457c2d7146107d9578063a8a69b9d14610815578063a9059cbb1461085157610287565b806370a08231146106a1578063715018a6146106dd57806375f0a874146106f35780637b3c83b11461071d578063880bcbc11461074757610287565b80632ba86bf2116101f25780634fbee193116101ab5780634fbee1931461059757806356a6cabf146105d357806359136fa5146105fb5780635fc2e5961461062557806366ca9b831461064f5780636ddd17131461067757610287565b80632ba86bf2146104895780632ce86fbf146104b3578063313ce567146104dd578063395093511461050757806349bd5a5e146105435780634ada218b1461056d57610287565b806318160ddd1161024457806318160ddd1461036d57806318d9ceae1461039757806321a9d82a146103d357806323b872dd146103fd57806327a14fc2146104395780632a6c7dba1461046157610287565b80630105d0fd1461028b57806302dbd8f8146102b557806306fdde03146102dd578063095ea7b3146103075780631694505e1461034357610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a87565b6040516102ac9190613e48565b60405180910390f35b3480156102c0575f80fd5b506102db60048036038101906102d69190613e8f565b610a8d565b005b3480156102e8575f80fd5b506102f1610b88565b6040516102fe9190613f57565b60405180910390f35b348015610312575f80fd5b5061032d60048036038101906103289190613fd1565b610c18565b60405161033a9190614029565b60405180910390f35b34801561034e575f80fd5b50610357610c35565b604051610364919061409d565b60405180910390f35b348015610378575f80fd5b50610381610c5a565b60405161038e9190613e48565b60405180910390f35b3480156103a2575f80fd5b506103bd60048036038101906103b891906140b6565b610c63565b6040516103ca9190614029565b60405180910390f35b3480156103de575f80fd5b506103e7610cb5565b6040516103f49190614029565b60405180910390f35b348015610408575f80fd5b50610423600480360381019061041e91906140e1565b610cc7565b6040516104309190614029565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190614131565b610de1565b005b34801561046c575f80fd5b5061048760048036038101906104829190614186565b610f4c565b005b348015610494575f80fd5b5061049d611097565b6040516104aa9190614029565b60405180910390f35b3480156104be575f80fd5b506104c76110a9565b6040516104d49190613e48565b60405180910390f35b3480156104e8575f80fd5b506104f16110af565b6040516104fe91906141cc565b60405180910390f35b348015610512575f80fd5b5061052d60048036038101906105289190613fd1565b6110b7565b60405161053a9190614029565b60405180910390f35b34801561054e575f80fd5b5061055761115e565b60405161056491906141f4565b60405180910390f35b348015610578575f80fd5b50610581611183565b60405161058e9190614029565b60405180910390f35b3480156105a2575f80fd5b506105bd60048036038101906105b891906140b6565b611196565b6040516105ca9190614029565b60405180910390f35b3480156105de575f80fd5b506105f960048036038101906105f49190614186565b6111e8565b005b348015610606575f80fd5b5061060f611333565b60405161061c9190613e48565b60405180910390f35b348015610630575f80fd5b50610639611339565b6040516106469190613e48565b60405180910390f35b34801561065a575f80fd5b5061067560048036038101906106709190613e8f565b61133f565b005b348015610682575f80fd5b5061068b61143a565b6040516106989190614029565b60405180910390f35b3480156106ac575f80fd5b506106c760048036038101906106c291906140b6565b61144d565b6040516106d49190613e48565b60405180910390f35b3480156106e8575f80fd5b506106f1611492565b005b3480156106fe575f80fd5b506107076115e5565b60405161071491906141f4565b60405180910390f35b348015610728575f80fd5b5061073161160a565b60405161073e9190613e48565b60405180910390f35b348015610752575f80fd5b5061076d6004803603810190610768919061420d565b611610565b005b34801561077a575f80fd5b50610783611849565b005b348015610790575f80fd5b50610799611967565b6040516107a691906141f4565b60405180910390f35b3480156107ba575f80fd5b506107c361198f565b6040516107d09190613f57565b60405180910390f35b3480156107e4575f80fd5b506107ff60048036038101906107fa9190613fd1565b611a1f565b60405161080c9190614029565b60405180910390f35b348015610820575f80fd5b5061083b600480360381019061083691906140b6565b611b05565b6040516108489190614029565b60405180910390f35b34801561085c575f80fd5b5061087760048036038101906108729190613fd1565b611b57565b6040516108849190614029565b60405180910390f35b348015610898575f80fd5b506108a1611b74565b6040516108ae9190613e48565b60405180910390f35b3480156108c2575f80fd5b506108dd60048036038101906108d89190614131565b611b7a565b005b3480156108ea575f80fd5b5061090560048036038101906109009190613e8f565b611caa565b005b348015610912575f80fd5b5061092d6004803603810190610928919061420d565b611e7e565b005b34801561093a575f80fd5b50610955600480360381019061095091906140b6565b612049565b005b348015610962575f80fd5b5061097d6004803603810190610978919061420d565b612277565b005b34801561098a575f80fd5b506109936124b0565b6040516109a09190613e48565b60405180910390f35b3480156109b4575f80fd5b506109cf60048036038101906109ca919061424b565b6124b6565b6040516109dc9190613e48565b60405180910390f35b3480156109f0575f80fd5b50610a0b6004803603810190610a069190614186565b612538565b005b348015610a18575f80fd5b50610a21612640565b604051610a2e9190613e48565b60405180910390f35b348015610a42575f80fd5b50610a5d6004803603810190610a5891906140b6565b612646565b005b348015610a6a575f80fd5b50610a856004803603810190610a8091906140b6565b612808565b005b60175481565b610a95612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a906142d3565b60405180910390fd5b81600a8190555080600c81905550600c54600a54610b41919061431e565b600e819055507f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051610b7c929190614351565b60405180910390a15050565b606060038054610b97906143a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc3906143a5565b8015610c0e5780601f10610be557610100808354040283529160200191610c0e565b820191905f5260205f20905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b5f610c2b610c24612a6f565b8484612a76565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60135f9054906101000a900460ff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d0f612a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dca5782811015610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90614445565b60405180910390fd5b610dc985610dc1612a6f565b858403612a76565b5b610dd5858585612c39565b60019150509392505050565b610de9612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e906142d3565b60405180910390fd5b6064610e816110af565b600a610e8d9190614592565b610e95610c5a565b610e9f9190614609565b610ea99190614609565b811015610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee2906146a9565b60405180910390fd5b610ef36110af565b600a610eff9190614592565b81610f0a91906146c7565b6014819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942601454604051610f419190613e48565b60405180910390a150565b610f54612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd9906142d3565b60405180910390fd5b60135f9054906101000a900460ff16151581151503611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614778565b60405180910390fd5b8060135f6101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f160135f9054906101000a900460ff1660405161108c9190614029565b60405180910390a150565b60165f9054906101000a900460ff1681565b600a5481565b5f6009905090565b5f6111546110c3612a6f565b848460015f6110d0612a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461114f919061431e565b612a76565b6001905092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160029054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6111f0612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611275906142d3565b60405180910390fd5b60165f9054906101000a900460ff161515811515036112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990614806565b60405180910390fd5b8060165f6101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf60165f9054906101000a900460ff166040516113289190614029565b60405180910390a150565b60185481565b600b5481565b611347612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cc906142d3565b60405180910390fd5b8160098190555080600b81905550600b546009546113f3919061431e565b600d819055507fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b5460405161142e929190614351565b60405180910390a15050565b601160019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61149a612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f906142d3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b611618612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d906142d3565b60405180910390fd5b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90614894565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a906148fc565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c108260405161183d9190614029565b60405180910390a25050565b611851612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d6906142d3565b60405180910390fd5b601160029054906101000a900460ff161561192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690614964565b60405180910390fd5b6001601160026101000a81548160ff0219169083151502179055506001601160016101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461199e906143a5565b80601f01602080910402602001604051908101604052809291908181526020018280546119ca906143a5565b8015611a155780601f106119ec57610100808354040283529160200191611a15565b820191905f5260205f20905b8154815290600101906020018083116119f857829003601f168201915b5050505050905090565b5f8060015f611a2c612a6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add906149f2565b60405180910390fd5b611afa611af1612a6f565b85858403612a76565b600191505092915050565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611b6a611b63612a6f565b8484612c39565b6001905092915050565b60145481565b611b82612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c07906142d3565b60405180910390fd5b620f4240611c1c610c5a565b611c269190614609565b8111611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614a80565b60405180910390fd5b806010819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145601054604051611c9f9190613e48565b60405180910390a150565b611cb2612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d37906142d3565b60405180910390fd5b6103e8611d4b6110af565b600a611d579190614592565b611d5f610c5a565b611d699190614609565b611d739190614609565b8210158015611db457506103e8611d886110af565b600a611d949190614592565b611d9c610c5a565b611da69190614609565b611db09190614609565b8110155b611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90614b0e565b60405180910390fd5b611dfb6110af565b600a611e079190614592565b82611e1291906146c7565b601781905550611e206110af565b600a611e2c9190614592565b81611e3791906146c7565b6018819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601754601854604051611e72929190614351565b60405180910390a15050565b611e86612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b906142d3565b60405180910390fd5b80151560085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a90614b9c565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161203d9190614029565b60405180910390a25050565b612051612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d6906142d3565b60405180910390fd5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590614c2a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390614cb8565b60405180910390fd5b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161226c91906141f4565b60405180910390a150565b61227f612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612304906142d3565b60405180910390fd5b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390614894565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361240a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612401906148fc565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c826040516124a49190614029565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b612540612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c5906142d3565b60405180910390fd5b801515601160019054906101000a900460ff16151503612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614d46565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60105481565b61264e612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d3906142d3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361274a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274190614dd4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612810612a6f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461289e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612895906142d3565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361290c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290390614e62565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361296e57612968473373ffffffffffffffffffffffffffffffffffffffff1661353290919063ffffffff16565b50612a6c565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016129ac91906141f4565b602060405180830381865afa1580156129c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129eb9190614e94565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612a28929190614ebf565b6020604051808303815f875af1158015612a44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a689190614efa565b5050505b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adb90614f95565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4990615023565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c2c9190613e48565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e906150b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c9061513f565b60405180910390fd5b601160029054906101000a900460ff1680612d76575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612dc7575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfd906151a7565b60405180910390fd5b5f8103612e1d57612e1883835f6135e8565b61352d565b60165f9054906101000a900460ff16156130695760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612ed8575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612f2b575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f7e575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130685760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130215760175481111561301c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301390615235565b60405180910390fd5b613067565b601854811115613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90615235565b60405180910390fd5b5b5b5b5f6130733061144d565b90505f6010548210159050808015613097575060115f9054906101000a900460ff16155b80156130ef575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561310957505f600e54600d54613107919061431e565b115b80156131215750601160019054906101000a900460ff165b156131f057600160115f6101000a81548160ff0219169083151502179055505f600e54600d54613151919061431e565b90505f600a54600954613164919061431e565b90505f600c54600b54613177919061431e565b90505f8211156131a6575f83838761318f91906146c7565b6131999190614609565b90506131a48161385d565b505b5f8111156131d3575f8382876131bc91906146c7565b6131c69190614609565b90506131d181613b83565b505b5f60115f6101000a81548160ff0219169083151502179055505050505b5f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061328c575060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806132a2575060115f9054906101000a900460ff165b156132af575f9050613371565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361330d57600d549050613370565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361336b57600e54905061336f565b5f90505b5b5b5f8111156133af575f6064828661338891906146c7565b6133929190614609565b905080856133a09190615253565b94506133ad8730836135e8565b505b60135f9054906101000a900460ff161561351e5760125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015613461575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156134ba575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561351d575f6134c98661144d565b905060145485826134da919061431e565b111561351b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613512906152f6565b60405180910390fd5b505b5b6135298686866135e8565b5050505b505050565b5f81471015613576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356d9061535e565b60405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff168360405161359b906153a9565b5f6040518083038185875af1925050503d805f81146135d5576040519150601f19603f3d011682016040523d82523d5f602084013e6135da565b606091505b505090508091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364d906150b1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136bb9061513f565b60405180910390fd5b6136cf838383613e26565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613752576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137499061542d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546137e0919061431e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138449190613e48565b60405180910390a3613857848484613e2b565b50505050565b5f60028261386b9190614609565b90505f818361387a9190615253565b90505f4790505f600267ffffffffffffffff81111561389c5761389b61544b565b5b6040519080825280602002602001820160405280156138ca5781602001602082028036833780820191505090505b50905030815f815181106138e1576138e0615478565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613985573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139a991906154b9565b816001815181106139bd576139bc615478565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8430426040518663ffffffff1660e01b8152600401613a599594939291906155d4565b5f604051808303815f87803b158015613a70575f80fd5b505af1158015613a82573d5f803e3d5ffd5b505050505f8247613a939190615253565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230875f8061dead426040518863ffffffff1660e01b8152600401613afc9695949392919061562c565b60606040518083038185885af1158015613b18573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613b3d919061568b565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051613b73939291906156db565b60405180910390a1505050505050565b5f4790505f600267ffffffffffffffff811115613ba357613ba261544b565b5b604051908082528060200260200182016040528015613bd15781602001602082028036833780820191505090505b50905030815f81518110613be857613be7615478565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cb091906154b9565b81600181518110613cc457613cc3615478565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401613d609594939291906155d4565b5f604051808303815f87803b158015613d77575f80fd5b505af1158015613d89573d5f803e3d5ffd5b505050505f8247613d9a9190615253565b9050613de681600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661353290919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613e18929190614351565b60405180910390a150505050565b505050565b505050565b5f819050919050565b613e4281613e30565b82525050565b5f602082019050613e5b5f830184613e39565b92915050565b5f80fd5b613e6e81613e30565b8114613e78575f80fd5b50565b5f81359050613e8981613e65565b92915050565b5f8060408385031215613ea557613ea4613e61565b5b5f613eb285828601613e7b565b9250506020613ec385828601613e7b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613f04578082015181840152602081019050613ee9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613f2982613ecd565b613f338185613ed7565b9350613f43818560208601613ee7565b613f4c81613f0f565b840191505092915050565b5f6020820190508181035f830152613f6f8184613f1f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613fa082613f77565b9050919050565b613fb081613f96565b8114613fba575f80fd5b50565b5f81359050613fcb81613fa7565b92915050565b5f8060408385031215613fe757613fe6613e61565b5b5f613ff485828601613fbd565b925050602061400585828601613e7b565b9150509250929050565b5f8115159050919050565b6140238161400f565b82525050565b5f60208201905061403c5f83018461401a565b92915050565b5f819050919050565b5f61406561406061405b84613f77565b614042565b613f77565b9050919050565b5f6140768261404b565b9050919050565b5f6140878261406c565b9050919050565b6140978161407d565b82525050565b5f6020820190506140b05f83018461408e565b92915050565b5f602082840312156140cb576140ca613e61565b5b5f6140d884828501613fbd565b91505092915050565b5f805f606084860312156140f8576140f7613e61565b5b5f61410586828701613fbd565b935050602061411686828701613fbd565b925050604061412786828701613e7b565b9150509250925092565b5f6020828403121561414657614145613e61565b5b5f61415384828501613e7b565b91505092915050565b6141658161400f565b811461416f575f80fd5b50565b5f813590506141808161415c565b92915050565b5f6020828403121561419b5761419a613e61565b5b5f6141a884828501614172565b91505092915050565b5f60ff82169050919050565b6141c6816141b1565b82525050565b5f6020820190506141df5f8301846141bd565b92915050565b6141ee81613f96565b82525050565b5f6020820190506142075f8301846141e5565b92915050565b5f806040838503121561422357614222613e61565b5b5f61423085828601613fbd565b925050602061424185828601614172565b9150509250929050565b5f806040838503121561426157614260613e61565b5b5f61426e85828601613fbd565b925050602061427f85828601613fbd565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6142bd602083613ed7565b91506142c882614289565b602082019050919050565b5f6020820190508181035f8301526142ea816142b1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61432882613e30565b915061433383613e30565b925082820190508082111561434b5761434a6142f1565b5b92915050565b5f6040820190506143645f830185613e39565b6143716020830184613e39565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806143bc57607f821691505b6020821081036143cf576143ce614378565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61442f602883613ed7565b915061443a826143d5565b604082019050919050565b5f6020820190508181035f83015261445c81614423565b9050919050565b5f8160011c9050919050565b5f808291508390505b60018511156144b857808604811115614494576144936142f1565b5b60018516156144a35780820291505b80810290506144b185614463565b9450614478565b94509492505050565b5f826144d0576001905061458b565b816144dd575f905061458b565b81600181146144f357600281146144fd5761452c565b600191505061458b565b60ff84111561450f5761450e6142f1565b5b8360020a915084821115614526576145256142f1565b5b5061458b565b5060208310610133831016604e8410600b84101617156145615782820a90508381111561455c5761455b6142f1565b5b61458b565b61456e848484600161446f565b92509050818404811115614585576145846142f1565b5b81810290505b9392505050565b5f61459c82613e30565b91506145a7836141b1565b92506145d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846144c1565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61461382613e30565b915061461e83613e30565b92508261462e5761462d6145dc565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f614693602d83613ed7565b915061469e82614639565b604082019050919050565b5f6020820190508181035f8301526146c081614687565b9050919050565b5f6146d182613e30565b91506146dc83613e30565b92508282026146ea81613e30565b91508282048414831517614701576147006142f1565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c726561647920736574205f8201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b5f614762602d83613ed7565b915061476d82614708565b604082019050919050565b5f6020820190508181035f83015261478f81614756565b9050919050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c72656164795f8201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b5f6147f0603283613ed7565b91506147fb82614796565b604082019050919050565b5f6020820190508181035f83015261481d816147e4565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f207468617420735f8201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b5f61487e602483613ed7565b915061488982614824565b604082019050919050565b5f6020820190508181035f8301526148ab81614872565b9050919050565b7f43616e277420736574207468697320616464726573732e0000000000000000005f82015250565b5f6148e6601783613ed7565b91506148f1826148b2565b602082019050919050565b5f6020820190508181035f830152614913816148da565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e00000000000000005f82015250565b5f61494e601883613ed7565b91506149598261491a565b602082019050919050565b5f6020820190508181035f83015261497b81614942565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6149dc602583613ed7565b91506149e782614982565b604082019050919050565b5f6020820190508181035f830152614a09816149d0565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d7573742062652067726561745f8201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b5f614a6a603f83613ed7565b9150614a7582614a10565b604082019050919050565b5f6020820190508181035f830152614a9781614a5e565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f74206265205f8201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b5f614af8603f83613ed7565b9150614b0382614a9e565b604082019050919050565b5f6020820190508181035f830152614b2581614aec565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f614b86602a83613ed7565b9150614b9182614b2c565b604082019050919050565b5f6020820190508181035f830152614bb381614b7a565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c726561647920746861745f8201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b5f614c14602883613ed7565b9150614c1f82614bba565b604082019050919050565b5f6020820190508181035f830152614c4181614c08565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f614ca2602b83613ed7565b9150614cad82614c48565b604082019050919050565b5f6020820190508181035f830152614ccf81614c96565b9050919050565b7f73776170456e61626c656420616c7265616479206174207468697320737461745f8201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d30602283613ed7565b9150614d3b82614cd6565b604082019050919050565b5f6020820190508181035f830152614d5d81614d24565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614dbe602683613ed7565b9150614dc982614d64565b604082019050919050565b5f6020820190508181035f830152614deb81614db2565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e747261637427732062615f8201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b5f614e4c603783613ed7565b9150614e5782614df2565b604082019050919050565b5f6020820190508181035f830152614e7981614e40565b9050919050565b5f81519050614e8e81613e65565b92915050565b5f60208284031215614ea957614ea8613e61565b5b5f614eb684828501614e80565b91505092915050565b5f604082019050614ed25f8301856141e5565b614edf6020830184613e39565b9392505050565b5f81519050614ef48161415c565b92915050565b5f60208284031215614f0f57614f0e613e61565b5b5f614f1c84828501614ee6565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614f7f602483613ed7565b9150614f8a82614f25565b604082019050919050565b5f6020820190508181035f830152614fac81614f73565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61500d602283613ed7565b915061501882614fb3565b604082019050919050565b5f6020820190508181035f83015261503a81615001565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61509b602583613ed7565b91506150a682615041565b604082019050919050565b5f6020820190508181035f8301526150c88161508f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f615129602383613ed7565b9150615134826150cf565b604082019050919050565b5f6020820190508181035f8301526151568161511d565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f615191601883613ed7565b915061519c8261515d565b602082019050919050565b5f6020820190508181035f8301526151be81615185565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b5f61521f603b83613ed7565b915061522a826151c5565b604082019050919050565b5f6020820190508181035f83015261524c81615213565b9050919050565b5f61525d82613e30565b915061526883613e30565b92508282039050818111156152805761527f6142f1565b5b92915050565b7f4d617857616c6c65743a20526563697069656e742065786365656473207468655f8201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b5f6152e0603083613ed7565b91506152eb82615286565b604082019050919050565b5f6020820190508181035f83015261530d816152d4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f615348601d83613ed7565b915061535382615314565b602082019050919050565b5f6020820190508181035f8301526153758161533c565b9050919050565b5f81905092915050565b50565b5f6153945f8361537c565b915061539f82615386565b5f82019050919050565b5f6153b382615389565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615417602683613ed7565b9150615422826153bd565b604082019050919050565b5f6020820190508181035f8301526154448161540b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506154b381613fa7565b92915050565b5f602082840312156154ce576154cd613e61565b5b5f6154db848285016154a5565b91505092915050565b5f819050919050565b5f6155076155026154fd846154e4565b614042565b613e30565b9050919050565b615517816154ed565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61554f81613f96565b82525050565b5f6155608383615546565b60208301905092915050565b5f602082019050919050565b5f6155828261551d565b61558c8185615527565b935061559783615537565b805f5b838110156155c75781516155ae8882615555565b97506155b98361556c565b92505060018101905061559a565b5085935050505092915050565b5f60a0820190506155e75f830188613e39565b6155f4602083018761550e565b81810360408301526156068186615578565b905061561560608301856141e5565b6156226080830184613e39565b9695505050505050565b5f60c08201905061563f5f8301896141e5565b61564c6020830188613e39565b615659604083018761550e565b615666606083018661550e565b61567360808301856141e5565b61568060a0830184613e39565b979650505050505050565b5f805f606084860312156156a2576156a1613e61565b5b5f6156af86828701614e80565b93505060206156c086828701614e80565b92505060406156d186828701614e80565b9150509250925092565b5f6060820190506156ee5f830186613e39565b6156fb6020830185613e39565b6157086040830184613e39565b94935050505056fea2646970667358221220959ea9eeef026270c96d7e5179f796fe0d5324768d498363f2b4ffb99cc29e5d64736f6c63430008140033

Deployed Bytecode Sourcemap

19669:14620:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32357:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24326:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14955:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15868:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19753:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15275:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34145:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30765:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16045:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31343:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31055:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32308:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19941:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15175:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16626:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19801:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25073:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23840:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32722:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32403:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19984:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23973:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20260:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15391:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14142:148;;;;;;;;;;;;;:::i;:::-;;20146:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19901:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33738:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25108:175;;;;;;;;;;;;;:::i;:::-;;13928:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15063:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16849:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32090:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15526:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30808:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28845:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33041:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23542:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24692:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31691:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20024:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15709:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28658:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20186:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14298:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23069:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32357:39;;;;:::o;24326:358::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24459:19:::1;24438:18;:40;;;;24510:19;24489:18;:40;;;;24584:18;;24563;;:39;;;;:::i;:::-;24542:16;:60;;;;24622:54;24637:18;;24657;;24622:54;;;;;;;:::i;:::-;;;;;;;;24326:358:::0;;:::o;14955:100::-;15009:13;15042:5;15035:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14955:100;:::o;15868:169::-;15951:4;15968:39;15977:12;:10;:12::i;:::-;15991:7;16000:6;15968:8;:39::i;:::-;16025:4;16018:11;;15868:169;;;;:::o;19753:41::-;;;;;;;;;;;;;:::o;15275:108::-;15336:7;15363:12;;15356:19;;15275:108;:::o;34145:141::-;34220:4;34244:25;:34;34270:7;34244:34;;;;;;;;;;;;;;;;;;;;;;;;;34237:41;;34145:141;;;:::o;30765:36::-;;;;;;;;;;;;;:::o;16045:573::-;16185:4;16202:24;16229:11;:19;16241:6;16229:19;;;;;;;;;;;;;;;:33;16249:12;:10;:12::i;:::-;16229:33;;;;;;;;;;;;;;;;16202:60;;16297:17;16277:16;:37;16273:265;;16359:6;16339:16;:26;;16331:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;16454:57;16463:6;16471:12;:10;:12::i;:::-;16504:6;16485:16;:25;16454:8;:57::i;:::-;16273:265;16550:36;16560:6;16568:9;16579:6;16550:9;:36::i;:::-;16606:4;16599:11;;;16045:573;;;;;:::o;31343:340::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31494:3:::1;31479:10;:8;:10::i;:::-;31473:2;:16;;;;:::i;:::-;31456:13;:11;:13::i;:::-;:34;;;;:::i;:::-;31455:42;;;;:::i;:::-;31435:16;:62;;31427:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;31602:10;:8;:10::i;:::-;31596:2;:16;;;;:::i;:::-;31576;:37;;;;:::i;:::-;31558:15;:55;;;;31631:44;31659:15;;31631:44;;;;;;:::i;:::-;;;;;;;;31343:340:::0;:::o;31055:280::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31149:21:::1;;;;;;;;;;;31139:31;;:6;:31;;::::0;31131:88:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31254:6;31230:21;;:30;;;;;;;;;;;;;;;;;;31278:49;31305:21;;;;;;;;;;;31278:49;;;;;;:::i;:::-;;;;;;;;31055:280:::0;:::o;32308:42::-;;;;;;;;;;;;;:::o;19941:34::-;;;;:::o;15175:92::-;15233:5;15258:1;15251:8;;15175:92;:::o;16626:215::-;16714:4;16731:80;16740:12;:10;:12::i;:::-;16754:7;16800:10;16763:11;:25;16775:12;:10;:12::i;:::-;16763:25;;;;;;;;;;;;;;;:34;16789:7;16763:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;16731:8;:80::i;:::-;16829:4;16822:11;;16626:215;;;;:::o;19801:29::-;;;;;;;;;;;;;:::o;25073:26::-;;;;;;;;;;;;;:::o;23840:125::-;23905:4;23929:19;:28;23949:7;23929:28;;;;;;;;;;;;;;;;;;;;;;;;;23922:35;;23840:125;;;:::o;32722:311::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32821:26:::1;;;;;;;;;;;32811:36;;:6;:36;;::::0;32803:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32942:6;32913:26;;:35;;;;;;;;;;;;;;;;;;32966:59;32998:26;;;;;;;;;;;32966:59;;;;;;:::i;:::-;;;;;;;;32722:311:::0;:::o;32403:40::-;;;;:::o;19984:33::-;;;;:::o;23973:345::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24102:18:::1;24082:17;:38;;;;24151:18;24131:17;:38;;;;24222:17;;24202;;:37;;;;:::i;:::-;24182:15;:57;;;;24259:51;24273:17;;24292;;24259:51;;;;;;;:::i;:::-;;;;;;;;23973:345:::0;;:::o;20260:26::-;;;;;;;;;;;;;:::o;15391:127::-;15465:7;15492:9;:18;15502:7;15492:18;;;;;;;;;;;;;;;;15485:25;;15391:127;;;:::o;14142:148::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14249:1:::1;14212:40;;14233:6;;;;;;;;;;;14212:40;;;;;;;;;;;;14280:1;14263:6;;:19;;;;;;;;;;;;;;;;;;14142:148::o:0;20146:31::-;;;;;;;;;;;;;:::o;19901:33::-;;;;:::o;33738:399::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33886:7:::1;33848:45;;:25;:34;33874:7;33848:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;33839:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33972:4;33953:24;;:7;:24;;::::0;33945:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34055:7;34018:25;:34;34044:7;34018:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;34112:7;34080:49;;;34121:7;34080:49;;;;;;:::i;:::-;;;;;;;;33738:399:::0;;:::o;25108:175::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25171:14:::1;;;;;;;;;;;25170:15;25162:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25242:4;25225:14;;:21;;;;;;;;;;;;;;;;;;25271:4;25257:11;;:18;;;;;;;;;;;;;;;;;;25108:175::o:0;13928:79::-;13966:7;13993:6;;;;;;;;;;;13986:13;;13928:79;:::o;15063:104::-;15119:13;15152:7;15145:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15063:104;:::o;16849:413::-;16942:4;16959:24;16986:11;:25;16998:12;:10;:12::i;:::-;16986:25;;;;;;;;;;;;;;;:34;17012:7;16986:34;;;;;;;;;;;;;;;;16959:61;;17059:15;17039:16;:35;;17031:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17152:67;17161:12;:10;:12::i;:::-;17175:7;17203:15;17184:16;:34;17152:8;:67::i;:::-;17250:4;17243:11;;;16849:413;;;;:::o;32090:145::-;32165:4;32189:29;:38;32219:7;32189:38;;;;;;;;;;;;;;;;;;;;;;;;;32182:45;;32090:145;;;:::o;15526:175::-;15612:4;15629:42;15639:12;:10;:12::i;:::-;15653:9;15664:6;15629:9;:42::i;:::-;15689:4;15682:11;;15526:175;;;;:::o;30808:30::-;;;;:::o;28845:304::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28960:9:::1;28944:13;:11;:13::i;:::-;:25;;;;:::i;:::-;28932:9;:37;28924:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;29069:9;29048:18;:30;;;;29096:45;29122:18;;29096:45;;;;;;:::i;:::-;;;;;;;;28845:304:::0;:::o;33041:689::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33264:5:::1;33249:10;:8;:10::i;:::-;33243:2;:16;;;;:::i;:::-;33226:13;:11;:13::i;:::-;:34;;;;:::i;:::-;33225:44;;;;:::i;:::-;33196:24;:73;;:164;;;;;33355:5;33340:10;:8;:10::i;:::-;33334:2;:16;;;;:::i;:::-;33317:13;:11;:13::i;:::-;:34;;;;:::i;:::-;33316:44;;;;:::i;:::-;33287:25;:73;;33196:164;33174:278;;;;;;;;;;;;:::i;:::-;;;;;;;;;33526:10;:8;:10::i;:::-;33520:2;:16;;;;:::i;:::-;33491:24;:46;;;;:::i;:::-;33464:23;:73;;;;33610:10;:8;:10::i;:::-;33604:2;:16;;;;:::i;:::-;33575:25;:46;;;;:::i;:::-;33548:24;:73;;;;33639:83;33672:23;;33697:24;;33639:83;;;;;;;:::i;:::-;;;;;;;;33041:689:::0;;:::o;23542:290::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23668:8:::1;23636:40;;:19;:28;23656:7;23636:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;23628:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23764:8;23733:19;:28;23753:7;23733:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23806:7;23790:34;;;23815:8;23790:34;;;;;;:::i;:::-;;;;;;;;23542:290:::0;;:::o;24692:373::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24800:15:::1;;;;;;;;;;;24780:35;;:16;:35;;::::0;24772:87:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24906:1;24878:30;;:16;:30;;::::0;24870:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24984:16;24966:15;;:34;;;;;;;;;;;;;;;;;;25018:39;25041:15;;;;;;;;;;;25018:39;;;;;;:::i;:::-;;;;;;;;24692:373:::0;:::o;31691:391::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31833:7:::1;31791:49;;:29;:38;31821:7;31791:38;;;;;;;;;;;;;;;;;;;;;;;;;:49;;::::0;31782:98:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31918:4;31899:24;;:7;:24;;::::0;31891:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32005:7;31964:29;:38;31994:7;31964:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;32057:7;32030:44;;;32066:7;32030:44;;;;;;:::i;:::-;;;;;;;;31691:391:::0;;:::o;20024:34::-;;;;:::o;15709:151::-;15798:7;15825:11;:18;15837:5;15825:18;;;;;;;;;;;;;;;:27;15844:7;15825:27;;;;;;;;;;;;;;;;15818:34;;15709:151;;;;:::o;28658:179::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28749:8:::1;28734:23;;:11;;;;;;;;;;;:23;;::::0;28726:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28821:8;28807:11;;:22;;;;;;;;;;;;;;;;;;28658:179:::0;:::o;20186:34::-;;;;:::o;14298:244::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14407:1:::1;14387:22;;:8;:22;;::::0;14379:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14497:8;14468:38;;14489:6;;;;;;;;;;;14468:38;;;;;;;;;;;;14526:8;14517:6;;:17;;;;;;;;;;;;;;;;;;14298:244:::0;:::o;23069:465::-;14065:12;:10;:12::i;:::-;14055:22;;:6;;;;;;;;;;;:22;;;14047:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23165:4:::1;23148:22;;:5;:22;;::::0;23140:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23262:3;23245:21;;:5;:21;;::::0;23241:127:::1;;23283:52;23313:21;23291:10;23283:29;;;;:52;;;;:::i;:::-;;23350:7;;23241:127;23378:17;23405:5;23378:33;;23422:15;23440:10;:20;;;23469:4;23440:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23422:53;;23486:10;:19;;;23506:10;23518:7;23486:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23129:405;;14125:1;23069:465:::0;:::o;13251:98::-;13304:7;13331:10;13324:17;;13251:98;:::o;19017:380::-;19170:1;19153:19;;:5;:19;;;19145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19251:1;19232:21;;:7;:21;;;19224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19335:6;19305:11;:18;19317:5;19305:18;;;;;;;;;;;;;;;:27;19324:7;19305:27;;;;;;;;;;;;;;;:36;;;;19373:7;19357:32;;19366:5;19357:32;;;19382:6;19357:32;;;;;;:::i;:::-;;;;;;;;19017:380;;;:::o;25291:3359::-;25404:1;25388:18;;:4;:18;;;25380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25481:1;25467:16;;:2;:16;;;25459:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25542:14;;;;;;;;;;;:43;;;;25560:19;:25;25580:4;25560:25;;;;;;;;;;;;;;;;;;;;;;;;;25542:43;:70;;;;25589:19;:23;25609:2;25589:23;;;;;;;;;;;;;;;;;;;;;;;;;25542:70;25534:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;25675:1;25665:6;:11;25661:93;;25693:28;25709:4;25715:2;25719:1;25693:15;:28::i;:::-;25736:7;;25661:93;25770:26;;;;;;;;;;;25766:752;;;25836:13;;;;;;;;;;;25828:21;;:4;:21;;;:44;;;;25859:13;;;;;;;;;;;25853:19;;:2;:19;;;25828:44;25827:99;;;;;25895:25;:31;25921:4;25895:31;;;;;;;;;;;;;;;;;;;;;;;;;25894:32;25827:99;:151;;;;;25949:25;:29;25975:2;25949:29;;;;;;;;;;;;;;;;;;;;;;;;;25948:30;25827:151;25823:684;;;26025:13;;;;;;;;;;;26017:21;;:4;:21;;;26013:479;;26107:23;;26097:6;:33;;26063:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26013:479;;;26336:24;;26326:6;:34;;26292:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26013:479;25823:684;25766:752;26524:28;26555:24;26573:4;26555:9;:24::i;:::-;26524:55;;26592:12;26631:18;;26607:20;:42;;26592:57;;26666:7;:33;;;;;26691:8;;;;;;;;;;;26690:9;26666:33;:69;;;;;26722:13;;;;;;;;;;;26716:19;;:2;:19;;;26666:69;:124;;;;;26789:1;26770:16;;26752:15;;:34;;;;:::i;:::-;:38;26666:124;:152;;;;;26807:11;;;;;;;;;;;26666:152;26662:895;;;26856:4;26845:8;;:15;;;;;;;;;;;;;;;;;;26877:16;26914;;26896:15;;:34;;;;:::i;:::-;26877:53;;26945:22;26990:18;;26970:17;;:38;;;;:::i;:::-;26945:63;;27023:22;27068:18;;27048:17;;:38;;;;:::i;:::-;27023:63;;27124:1;27107:14;:18;27103:183;;;27146:23;27212:8;27195:14;27172:20;:37;;;;:::i;:::-;:48;;;;:::i;:::-;27146:74;;27239:31;27254:15;27239:14;:31::i;:::-;27127:159;27103:183;27335:1;27318:14;:18;27314:189;;;27357:23;27423:8;27406:14;27383:20;:37;;;;:::i;:::-;:48;;;;:::i;:::-;27357:74;;27450:37;27471:15;27450:20;:37::i;:::-;27338:165;27314:189;27540:5;27529:8;;:16;;;;;;;;;;;;;;;;;;26830:727;;;26662:895;27569:18;27602:19;:25;27622:4;27602:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27631:19;:23;27651:2;27631:23;;;;;;;;;;;;;;;;;;;;;;;;;27602:52;:64;;;;27658:8;;;;;;;;;;;27602:64;27598:333;;;27696:1;27683:14;;27598:333;;;27727:13;;;;;;;;;;;27719:21;;:4;:21;;;27715:216;;27770:15;;27757:28;;27715:216;;;27813:13;;;;;;;;;;;27807:19;;:2;:19;;;27803:128;;27856:16;;27843:29;;27803:128;;;27918:1;27905:14;;27803:128;27715:216;27598:333;27960:1;27947:10;:14;27943:183;;;27978:12;28017:3;28003:10;27994:6;:19;;;;:::i;:::-;27993:27;;;;:::i;:::-;27978:42;;28053:4;28044:6;:13;;;;:::i;:::-;28035:22;;28072:42;28088:4;28102;28109;28072:15;:42::i;:::-;27963:163;27943:183;28142:21;;;;;;;;;;;28138:459;;;28195:29;:35;28225:4;28195:35;;;;;;;;;;;;;;;;;;;;;;;;;28194:36;:92;;;;;28253:29;:33;28283:2;28253:33;;;;;;;;;;;;;;;;;;;;;;;;;28252:34;28194:92;:132;;;;;28313:13;;;;;;;;;;;28307:19;;:2;:19;;;;28194:132;28190:396;;;28361:15;28380:13;28390:2;28380:9;:13::i;:::-;28361:32;;28462:15;;28452:6;28442:7;:16;;;;:::i;:::-;:35;;28412:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;28342:244;28190:396;28138:459;28609:33;28625:4;28631:2;28635:6;28609:15;:33::i;:::-;25369:3281;;;25291:3359;;;;:::o;9161:266::-;9240:4;9289:6;9264:21;:31;;9256:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9343:12;9361:9;:14;;9383:6;9361:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9342:52;;;9412:7;9405:14;;;9161:266;;;;:::o;17270:733::-;17428:1;17410:20;;:6;:20;;;17402:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17512:1;17491:23;;:9;:23;;;17483:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17567:47;17588:6;17596:9;17607:6;17567:20;:47::i;:::-;17627:21;17651:9;:17;17661:6;17651:17;;;;;;;;;;;;;;;;17627:41;;17704:6;17687:13;:23;;17679:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17825:6;17809:13;:22;17789:9;:17;17799:6;17789:17;;;;;;;;;;;;;;;:42;;;;17877:6;17853:9;:20;17863:9;17853:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17918:9;17901:35;;17910:6;17901:35;;;17929:6;17901:35;;;;;;:::i;:::-;;;;;;;;17949:46;17969:6;17977:9;17988:6;17949:19;:46::i;:::-;17391:612;17270:733;;;:::o;29157:876::-;29216:12;29240:1;29231:6;:10;;;;:::i;:::-;29216:25;;29252:17;29281:4;29272:6;:13;;;;:::i;:::-;29252:33;;29298:22;29323:21;29298:46;;29357:21;29395:1;29381:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29357:40;;29426:4;29408;29413:1;29408:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29452:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29442:4;29447:1;29442:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29487:15;;;;;;;;;;;:66;;;29568:4;29587:1;29603:4;29630;29650:15;29487:179;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29687:18;29732:14;29708:21;:38;;;;:::i;:::-;29687:59;;29759:15;;;;;;;;;;;:31;;;29798:10;29832:4;29852:9;29876:1;29892;29916:6;29938:15;29759:205;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29982:43;29997:4;30003:10;30015:9;29982:43;;;;;;;;:::i;:::-;;;;;;;;29205:828;;;;;29157:876;:::o;30041:647::-;30111:22;30136:21;30111:46;;30170:21;30208:1;30194:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30170:40;;30239:4;30221;30226:1;30221:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30265:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30255:4;30260:1;30255:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30300:15;;;;;;;;;;;:66;;;30381:11;30407:1;30423:4;30450;30470:15;30300:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30499:18;30544:14;30520:21;:38;;;;:::i;:::-;30499:59;;30571:46;30606:10;30579:15;;;;;;;;;;;30571:34;;;;:46;;;;:::i;:::-;;30635:45;30656:11;30669:10;30635:45;;;;;;;:::i;:::-;;;;;;;;30100:588;;;30041:647;:::o;19405:125::-;;;;:::o;19538: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:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:474::-;1110:6;1118;1167:2;1155:9;1146:7;1142:23;1138:32;1135:119;;;1173:79;;:::i;:::-;1135:119;1293:1;1318:53;1363:7;1354:6;1343:9;1339:22;1318:53;:::i;:::-;1308:63;;1264:117;1420:2;1446:53;1491:7;1482:6;1471:9;1467:22;1446:53;:::i;:::-;1436:63;;1391:118;1042:474;;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:246::-;1883:1;1893:113;1907:6;1904:1;1901:13;1893:113;;;1992:1;1987:3;1983:11;1977:18;1973:1;1968:3;1964:11;1957:39;1929:2;1926:1;1922:10;1917:15;;1893:113;;;2040:1;2031:6;2026:3;2022:16;2015:27;1864:184;1802:246;;;:::o;2054:102::-;2095:6;2146:2;2142:7;2137:2;2130:5;2126:14;2122:28;2112:38;;2054:102;;;:::o;2162:377::-;2250:3;2278:39;2311:5;2278:39;:::i;:::-;2333:71;2397:6;2392:3;2333:71;:::i;:::-;2326:78;;2413:65;2471:6;2466:3;2459:4;2452:5;2448:16;2413:65;:::i;:::-;2503:29;2525:6;2503:29;:::i;:::-;2498:3;2494:39;2487:46;;2254:285;2162:377;;;;:::o;2545:313::-;2658:4;2696:2;2685:9;2681:18;2673:26;;2745:9;2739:4;2735:20;2731:1;2720:9;2716:17;2709:47;2773:78;2846:4;2837:6;2773:78;:::i;:::-;2765:86;;2545:313;;;;:::o;2864:126::-;2901:7;2941:42;2934:5;2930:54;2919:65;;2864:126;;;:::o;2996:96::-;3033:7;3062:24;3080:5;3062:24;:::i;:::-;3051:35;;2996:96;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:474::-;3439:6;3447;3496:2;3484:9;3475:7;3471:23;3467:32;3464:119;;;3502:79;;:::i;:::-;3464:119;3622:1;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3593:117;3749:2;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3720:118;3371:474;;;;;:::o;3851:90::-;3885:7;3928:5;3921:13;3914:21;3903:32;;3851:90;;;:::o;3947:109::-;4028:21;4043:5;4028:21;:::i;:::-;4023:3;4016:34;3947:109;;:::o;4062:210::-;4149:4;4187:2;4176:9;4172:18;4164:26;;4200:65;4262:1;4251:9;4247:17;4238:6;4200:65;:::i;:::-;4062:210;;;;:::o;4278:60::-;4306:3;4327:5;4320:12;;4278:60;;;:::o;4344:142::-;4394:9;4427:53;4445:34;4454:24;4472:5;4454:24;:::i;:::-;4445:34;:::i;:::-;4427:53;:::i;:::-;4414:66;;4344:142;;;:::o;4492:126::-;4542:9;4575:37;4606:5;4575:37;:::i;:::-;4562:50;;4492:126;;;:::o;4624:152::-;4700:9;4733:37;4764:5;4733:37;:::i;:::-;4720:50;;4624:152;;;:::o;4782:183::-;4895:63;4952:5;4895:63;:::i;:::-;4890:3;4883:76;4782:183;;:::o;4971:274::-;5090:4;5128:2;5117:9;5113:18;5105:26;;5141:97;5235:1;5224:9;5220:17;5211:6;5141:97;:::i;:::-;4971:274;;;;:::o;5251:329::-;5310:6;5359:2;5347:9;5338:7;5334:23;5330:32;5327:119;;;5365:79;;:::i;:::-;5327:119;5485:1;5510:53;5555:7;5546:6;5535:9;5531:22;5510:53;:::i;:::-;5500:63;;5456:117;5251:329;;;;:::o;5586:619::-;5663:6;5671;5679;5728:2;5716:9;5707:7;5703:23;5699:32;5696:119;;;5734:79;;:::i;:::-;5696:119;5854:1;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5825:117;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5586:619;;;;;:::o;6211:329::-;6270:6;6319:2;6307:9;6298:7;6294:23;6290:32;6287:119;;;6325:79;;:::i;:::-;6287:119;6445:1;6470:53;6515:7;6506:6;6495:9;6491:22;6470:53;:::i;:::-;6460:63;;6416:117;6211:329;;;;:::o;6546:116::-;6616:21;6631:5;6616:21;:::i;:::-;6609:5;6606:32;6596:60;;6652:1;6649;6642:12;6596:60;6546:116;:::o;6668:133::-;6711:5;6749:6;6736:20;6727:29;;6765:30;6789:5;6765:30;:::i;:::-;6668:133;;;;:::o;6807:323::-;6863:6;6912:2;6900:9;6891:7;6887:23;6883:32;6880:119;;;6918:79;;:::i;:::-;6880:119;7038:1;7063:50;7105:7;7096:6;7085:9;7081:22;7063:50;:::i;:::-;7053:60;;7009:114;6807:323;;;;:::o;7136:86::-;7171:7;7211:4;7204:5;7200:16;7189:27;;7136:86;;;:::o;7228:112::-;7311:22;7327:5;7311:22;:::i;:::-;7306:3;7299:35;7228:112;;:::o;7346:214::-;7435:4;7473:2;7462:9;7458:18;7450:26;;7486:67;7550:1;7539:9;7535:17;7526:6;7486:67;:::i;:::-;7346:214;;;;:::o;7566:118::-;7653:24;7671:5;7653:24;:::i;:::-;7648:3;7641:37;7566:118;;:::o;7690:222::-;7783:4;7821:2;7810:9;7806:18;7798:26;;7834:71;7902:1;7891:9;7887:17;7878:6;7834:71;:::i;:::-;7690:222;;;;:::o;7918:468::-;7983:6;7991;8040:2;8028:9;8019:7;8015:23;8011:32;8008:119;;;8046:79;;:::i;:::-;8008:119;8166:1;8191:53;8236:7;8227:6;8216:9;8212:22;8191:53;:::i;:::-;8181:63;;8137:117;8293:2;8319:50;8361:7;8352:6;8341:9;8337:22;8319:50;:::i;:::-;8309:60;;8264:115;7918:468;;;;;:::o;8392:474::-;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:180::-;9905:77;9902:1;9895:88;10002:4;9999:1;9992:15;10026:4;10023:1;10016:15;10043:191;10083:3;10102:20;10120:1;10102:20;:::i;:::-;10097:25;;10136:20;10154:1;10136:20;:::i;:::-;10131:25;;10179:1;10176;10172:9;10165:16;;10200:3;10197:1;10194:10;10191:36;;;10207:18;;:::i;:::-;10191:36;10043:191;;;;:::o;10240:332::-;10361:4;10399:2;10388:9;10384:18;10376:26;;10412:71;10480:1;10469:9;10465:17;10456:6;10412:71;:::i;:::-;10493:72;10561:2;10550:9;10546:18;10537:6;10493:72;:::i;:::-;10240:332;;;;;:::o;10578:180::-;10626:77;10623:1;10616:88;10723:4;10720:1;10713:15;10747:4;10744:1;10737:15;10764:320;10808:6;10845:1;10839:4;10835:12;10825:22;;10892:1;10886:4;10882:12;10913:18;10903:81;;10969:4;10961:6;10957:17;10947:27;;10903:81;11031:2;11023:6;11020:14;11000:18;10997:38;10994:84;;11050:18;;:::i;:::-;10994:84;10815:269;10764:320;;;:::o;11090:227::-;11230:34;11226:1;11218:6;11214:14;11207:58;11299:10;11294:2;11286:6;11282:15;11275:35;11090:227;:::o;11323:366::-;11465:3;11486:67;11550:2;11545:3;11486:67;:::i;:::-;11479:74;;11562:93;11651:3;11562:93;:::i;:::-;11680:2;11675:3;11671:12;11664:19;;11323:366;;;:::o;11695:419::-;11861:4;11899:2;11888:9;11884:18;11876:26;;11948:9;11942:4;11938:20;11934:1;11923:9;11919:17;11912:47;11976:131;12102:4;11976:131;:::i;:::-;11968:139;;11695:419;;;:::o;12120:102::-;12162:8;12209:5;12206:1;12202:13;12181:34;;12120:102;;;:::o;12228:848::-;12289:5;12296:4;12320:6;12311:15;;12344:5;12335:14;;12358:712;12379:1;12369:8;12366:15;12358:712;;;12474:4;12469:3;12465:14;12459:4;12456:24;12453:50;;;12483:18;;:::i;:::-;12453:50;12533:1;12523:8;12519:16;12516:451;;;12948:4;12941:5;12937:16;12928:25;;12516:451;12998:4;12992;12988:15;12980:23;;13028:32;13051:8;13028:32;:::i;:::-;13016:44;;12358:712;;;12228:848;;;;;;;:::o;13082:1073::-;13136:5;13327:8;13317:40;;13348:1;13339:10;;13350:5;;13317:40;13376:4;13366:36;;13393:1;13384:10;;13395:5;;13366:36;13462:4;13510:1;13505:27;;;;13546:1;13541:191;;;;13455:277;;13505:27;13523:1;13514:10;;13525:5;;;13541:191;13586:3;13576:8;13573:17;13570:43;;;13593:18;;:::i;:::-;13570:43;13642:8;13639:1;13635:16;13626:25;;13677:3;13670:5;13667:14;13664:40;;;13684:18;;:::i;:::-;13664:40;13717:5;;;13455:277;;13841:2;13831:8;13828:16;13822:3;13816:4;13813:13;13809:36;13791:2;13781:8;13778:16;13773:2;13767:4;13764:12;13760:35;13744:111;13741:246;;;13897:8;13891:4;13887:19;13878:28;;13932:3;13925:5;13922:14;13919:40;;;13939:18;;:::i;:::-;13919:40;13972:5;;13741:246;14012:42;14050:3;14040:8;14034:4;14031:1;14012:42;:::i;:::-;13997:57;;;;14086:4;14081:3;14077:14;14070:5;14067:25;14064:51;;;14095:18;;:::i;:::-;14064:51;14144:4;14137:5;14133:16;14124:25;;13082:1073;;;;;;:::o;14161:281::-;14219:5;14243:23;14261:4;14243:23;:::i;:::-;14235:31;;14287:25;14303:8;14287:25;:::i;:::-;14275:37;;14331:104;14368:66;14358:8;14352:4;14331:104;:::i;:::-;14322:113;;14161:281;;;;:::o;14448:180::-;14496:77;14493:1;14486:88;14593:4;14590:1;14583:15;14617:4;14614:1;14607:15;14634:185;14674:1;14691:20;14709:1;14691:20;:::i;:::-;14686:25;;14725:20;14743:1;14725:20;:::i;:::-;14720:25;;14764:1;14754:35;;14769:18;;:::i;:::-;14754:35;14811:1;14808;14804:9;14799:14;;14634:185;;;;:::o;14825:232::-;14965:34;14961:1;14953:6;14949:14;14942:58;15034:15;15029:2;15021:6;15017:15;15010:40;14825:232;:::o;15063:366::-;15205:3;15226:67;15290:2;15285:3;15226:67;:::i;:::-;15219:74;;15302:93;15391:3;15302:93;:::i;:::-;15420:2;15415:3;15411:12;15404:19;;15063:366;;;:::o;15435:419::-;15601:4;15639:2;15628:9;15624:18;15616:26;;15688:9;15682:4;15678:20;15674:1;15663:9;15659:17;15652:47;15716:131;15842:4;15716:131;:::i;:::-;15708:139;;15435:419;;;:::o;15860:410::-;15900:7;15923:20;15941:1;15923:20;:::i;:::-;15918:25;;15957:20;15975:1;15957:20;:::i;:::-;15952:25;;16012:1;16009;16005:9;16034:30;16052:11;16034:30;:::i;:::-;16023:41;;16213:1;16204:7;16200:15;16197:1;16194:22;16174:1;16167:9;16147:83;16124:139;;16243:18;;:::i;:::-;16124:139;15908:362;15860:410;;;;:::o;16276:232::-;16416:34;16412:1;16404:6;16400:14;16393:58;16485:15;16480:2;16472:6;16468:15;16461:40;16276:232;:::o;16514:366::-;16656:3;16677:67;16741:2;16736:3;16677:67;:::i;:::-;16670:74;;16753:93;16842:3;16753:93;:::i;:::-;16871:2;16866:3;16862:12;16855:19;;16514:366;;;:::o;16886:419::-;17052:4;17090:2;17079:9;17075:18;17067:26;;17139:9;17133:4;17129:20;17125:1;17114:9;17110:17;17103:47;17167:131;17293:4;17167:131;:::i;:::-;17159:139;;16886:419;;;:::o;17311:237::-;17451:34;17447:1;17439:6;17435:14;17428:58;17520:20;17515:2;17507:6;17503:15;17496:45;17311:237;:::o;17554:366::-;17696:3;17717:67;17781:2;17776:3;17717:67;:::i;:::-;17710:74;;17793:93;17882:3;17793:93;:::i;:::-;17911:2;17906:3;17902:12;17895:19;;17554:366;;;:::o;17926:419::-;18092:4;18130:2;18119:9;18115:18;18107:26;;18179:9;18173:4;18169:20;18165:1;18154:9;18150:17;18143:47;18207:131;18333:4;18207:131;:::i;:::-;18199:139;;17926:419;;;:::o;18351:223::-;18491:34;18487:1;18479:6;18475:14;18468:58;18560:6;18555:2;18547:6;18543:15;18536:31;18351:223;:::o;18580:366::-;18722:3;18743:67;18807:2;18802:3;18743:67;:::i;:::-;18736:74;;18819:93;18908:3;18819:93;:::i;:::-;18937:2;18932:3;18928:12;18921:19;;18580:366;;;:::o;18952:419::-;19118:4;19156:2;19145:9;19141:18;19133:26;;19205:9;19199:4;19195:20;19191:1;19180:9;19176:17;19169:47;19233:131;19359:4;19233:131;:::i;:::-;19225:139;;18952:419;;;:::o;19377:173::-;19517:25;19513:1;19505:6;19501:14;19494:49;19377:173;:::o;19556:366::-;19698:3;19719:67;19783:2;19778:3;19719:67;:::i;:::-;19712:74;;19795:93;19884:3;19795:93;:::i;:::-;19913:2;19908:3;19904:12;19897:19;;19556:366;;;:::o;19928:419::-;20094:4;20132:2;20121:9;20117:18;20109:26;;20181:9;20175:4;20171:20;20167:1;20156:9;20152:17;20145:47;20209:131;20335:4;20209:131;:::i;:::-;20201:139;;19928:419;;;:::o;20353:174::-;20493:26;20489:1;20481:6;20477:14;20470:50;20353:174;:::o;20533:366::-;20675:3;20696:67;20760:2;20755:3;20696:67;:::i;:::-;20689:74;;20772:93;20861:3;20772:93;:::i;:::-;20890:2;20885:3;20881:12;20874:19;;20533:366;;;:::o;20905:419::-;21071:4;21109:2;21098:9;21094:18;21086:26;;21158:9;21152:4;21148:20;21144:1;21133:9;21129:17;21122:47;21186:131;21312:4;21186:131;:::i;:::-;21178:139;;20905:419;;;:::o;21330:224::-;21470:34;21466:1;21458:6;21454:14;21447:58;21539:7;21534:2;21526:6;21522:15;21515:32;21330:224;:::o;21560:366::-;21702:3;21723:67;21787:2;21782:3;21723:67;:::i;:::-;21716:74;;21799:93;21888:3;21799:93;:::i;:::-;21917:2;21912:3;21908:12;21901:19;;21560:366;;;:::o;21932:419::-;22098:4;22136:2;22125:9;22121:18;22113:26;;22185:9;22179:4;22175:20;22171:1;22160:9;22156:17;22149:47;22213:131;22339:4;22213:131;:::i;:::-;22205:139;;21932:419;;;:::o;22357:250::-;22497:34;22493:1;22485:6;22481:14;22474:58;22566:33;22561:2;22553:6;22549:15;22542:58;22357:250;:::o;22613:366::-;22755:3;22776:67;22840:2;22835:3;22776:67;:::i;:::-;22769:74;;22852:93;22941:3;22852:93;:::i;:::-;22970:2;22965:3;22961:12;22954:19;;22613:366;;;:::o;22985:419::-;23151:4;23189:2;23178:9;23174:18;23166:26;;23238:9;23232:4;23228:20;23224:1;23213:9;23209:17;23202:47;23266:131;23392:4;23266:131;:::i;:::-;23258:139;;22985:419;;;:::o;23410:250::-;23550:34;23546:1;23538:6;23534:14;23527:58;23619:33;23614:2;23606:6;23602:15;23595:58;23410:250;:::o;23666:366::-;23808:3;23829:67;23893:2;23888:3;23829:67;:::i;:::-;23822:74;;23905:93;23994:3;23905:93;:::i;:::-;24023:2;24018:3;24014:12;24007:19;;23666:366;;;:::o;24038:419::-;24204:4;24242:2;24231:9;24227:18;24219:26;;24291:9;24285:4;24281:20;24277:1;24266:9;24262:17;24255:47;24319:131;24445:4;24319:131;:::i;:::-;24311:139;;24038:419;;;:::o;24463:229::-;24603:34;24599:1;24591:6;24587:14;24580:58;24672:12;24667:2;24659:6;24655:15;24648:37;24463:229;:::o;24698:366::-;24840:3;24861:67;24925:2;24920:3;24861:67;:::i;:::-;24854:74;;24937:93;25026:3;24937:93;:::i;:::-;25055:2;25050:3;25046:12;25039:19;;24698:366;;;:::o;25070:419::-;25236:4;25274:2;25263:9;25259:18;25251:26;;25323:9;25317:4;25313:20;25309:1;25298:9;25294:17;25287:47;25351:131;25477:4;25351:131;:::i;:::-;25343:139;;25070:419;;;:::o;25495:227::-;25635:34;25631:1;25623:6;25619:14;25612:58;25704:10;25699:2;25691:6;25687:15;25680:35;25495:227;:::o;25728:366::-;25870:3;25891:67;25955:2;25950:3;25891:67;:::i;:::-;25884:74;;25967:93;26056:3;25967:93;:::i;:::-;26085:2;26080:3;26076:12;26069:19;;25728:366;;;:::o;26100:419::-;26266:4;26304:2;26293:9;26289:18;26281:26;;26353:9;26347:4;26343:20;26339:1;26328:9;26324:17;26317:47;26381:131;26507:4;26381:131;:::i;:::-;26373:139;;26100:419;;;:::o;26525:230::-;26665:34;26661:1;26653:6;26649:14;26642:58;26734:13;26729:2;26721:6;26717:15;26710:38;26525:230;:::o;26761:366::-;26903:3;26924:67;26988:2;26983:3;26924:67;:::i;:::-;26917:74;;27000:93;27089:3;27000:93;:::i;:::-;27118:2;27113:3;27109:12;27102:19;;26761:366;;;:::o;27133:419::-;27299:4;27337:2;27326:9;27322:18;27314:26;;27386:9;27380:4;27376:20;27372:1;27361:9;27357:17;27350:47;27414:131;27540:4;27414:131;:::i;:::-;27406:139;;27133:419;;;:::o;27558:221::-;27698:34;27694:1;27686:6;27682:14;27675:58;27767:4;27762:2;27754:6;27750:15;27743:29;27558:221;:::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:225::-;28722:34;28718:1;28710:6;28706:14;28699:58;28791:8;28786:2;28778:6;28774:15;28767:33;28582:225;:::o;28813:366::-;28955:3;28976:67;29040:2;29035:3;28976:67;:::i;:::-;28969:74;;29052:93;29141:3;29052:93;:::i;:::-;29170:2;29165:3;29161:12;29154:19;;28813:366;;;:::o;29185:419::-;29351:4;29389:2;29378:9;29374:18;29366:26;;29438:9;29432:4;29428:20;29424:1;29413:9;29409:17;29402:47;29466:131;29592:4;29466:131;:::i;:::-;29458:139;;29185:419;;;:::o;29610:242::-;29750:34;29746:1;29738:6;29734:14;29727:58;29819:25;29814:2;29806:6;29802:15;29795:50;29610:242;:::o;29858:366::-;30000:3;30021:67;30085:2;30080:3;30021:67;:::i;:::-;30014:74;;30097:93;30186:3;30097:93;:::i;:::-;30215:2;30210:3;30206:12;30199:19;;29858:366;;;:::o;30230:419::-;30396:4;30434:2;30423:9;30419:18;30411:26;;30483:9;30477:4;30473:20;30469:1;30458:9;30454:17;30447:47;30511:131;30637:4;30511:131;:::i;:::-;30503:139;;30230:419;;;:::o;30655:143::-;30712:5;30743:6;30737:13;30728:22;;30759:33;30786:5;30759:33;:::i;:::-;30655:143;;;;:::o;30804:351::-;30874:6;30923:2;30911:9;30902:7;30898:23;30894:32;30891:119;;;30929:79;;:::i;:::-;30891:119;31049:1;31074:64;31130:7;31121:6;31110:9;31106:22;31074:64;:::i;:::-;31064:74;;31020:128;30804:351;;;;:::o;31161:332::-;31282:4;31320:2;31309:9;31305:18;31297:26;;31333:71;31401:1;31390:9;31386:17;31377:6;31333:71;:::i;:::-;31414:72;31482:2;31471:9;31467:18;31458:6;31414:72;:::i;:::-;31161:332;;;;;:::o;31499:137::-;31553:5;31584:6;31578:13;31569:22;;31600:30;31624:5;31600:30;:::i;:::-;31499:137;;;;:::o;31642:345::-;31709:6;31758:2;31746:9;31737:7;31733:23;31729:32;31726:119;;;31764:79;;:::i;:::-;31726:119;31884:1;31909:61;31962:7;31953:6;31942:9;31938:22;31909:61;:::i;:::-;31899:71;;31855:125;31642:345;;;;:::o;31993:223::-;32133:34;32129:1;32121:6;32117:14;32110:58;32202:6;32197:2;32189:6;32185:15;32178:31;31993:223;:::o;32222:366::-;32364:3;32385:67;32449:2;32444:3;32385:67;:::i;:::-;32378:74;;32461:93;32550:3;32461:93;:::i;:::-;32579:2;32574:3;32570:12;32563:19;;32222:366;;;:::o;32594:419::-;32760:4;32798:2;32787:9;32783:18;32775:26;;32847:9;32841:4;32837:20;32833:1;32822:9;32818:17;32811:47;32875:131;33001:4;32875:131;:::i;:::-;32867:139;;32594:419;;;:::o;33019:221::-;33159:34;33155:1;33147:6;33143:14;33136:58;33228:4;33223:2;33215:6;33211:15;33204:29;33019:221;:::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:224::-;34183:34;34179:1;34171:6;34167:14;34160:58;34252:7;34247:2;34239:6;34235:15;34228:32;34043:224;:::o;34273:366::-;34415:3;34436:67;34500:2;34495:3;34436:67;:::i;:::-;34429:74;;34512:93;34601:3;34512:93;:::i;:::-;34630:2;34625:3;34621:12;34614:19;;34273:366;;;:::o;34645:419::-;34811:4;34849:2;34838:9;34834:18;34826:26;;34898:9;34892:4;34888:20;34884:1;34873:9;34869:17;34862:47;34926:131;35052:4;34926:131;:::i;:::-;34918:139;;34645:419;;;:::o;35070:222::-;35210:34;35206:1;35198:6;35194:14;35187:58;35279:5;35274:2;35266:6;35262:15;35255:30;35070:222;:::o;35298:366::-;35440:3;35461:67;35525:2;35520:3;35461:67;:::i;:::-;35454:74;;35537:93;35626:3;35537:93;:::i;:::-;35655:2;35650:3;35646:12;35639:19;;35298:366;;;:::o;35670:419::-;35836:4;35874:2;35863:9;35859:18;35851:26;;35923:9;35917:4;35913:20;35909:1;35898:9;35894:17;35887:47;35951:131;36077:4;35951:131;:::i;:::-;35943:139;;35670:419;;;:::o;36095:174::-;36235:26;36231:1;36223:6;36219:14;36212:50;36095:174;:::o;36275:366::-;36417:3;36438:67;36502:2;36497:3;36438:67;:::i;:::-;36431:74;;36514:93;36603:3;36514:93;:::i;:::-;36632:2;36627:3;36623:12;36616:19;;36275:366;;;:::o;36647:419::-;36813:4;36851:2;36840:9;36836:18;36828:26;;36900:9;36894:4;36890:20;36886:1;36875:9;36871:17;36864:47;36928:131;37054:4;36928:131;:::i;:::-;36920:139;;36647:419;;;:::o;37072:246::-;37212:34;37208:1;37200:6;37196:14;37189:58;37281:29;37276:2;37268:6;37264:15;37257:54;37072:246;:::o;37324:366::-;37466:3;37487:67;37551:2;37546:3;37487:67;:::i;:::-;37480:74;;37563:93;37652:3;37563:93;:::i;:::-;37681:2;37676:3;37672:12;37665:19;;37324:366;;;:::o;37696:419::-;37862:4;37900:2;37889:9;37885:18;37877:26;;37949:9;37943:4;37939:20;37935:1;37924:9;37920:17;37913:47;37977:131;38103:4;37977:131;:::i;:::-;37969:139;;37696:419;;;:::o;38121:194::-;38161:4;38181:20;38199:1;38181:20;:::i;:::-;38176:25;;38215:20;38233:1;38215:20;:::i;:::-;38210:25;;38259:1;38256;38252:9;38244:17;;38283:1;38277:4;38274:11;38271:37;;;38288:18;;:::i;:::-;38271:37;38121:194;;;;:::o;38321:235::-;38461:34;38457:1;38449:6;38445:14;38438:58;38530:18;38525:2;38517:6;38513:15;38506:43;38321:235;:::o;38562:366::-;38704:3;38725:67;38789:2;38784:3;38725:67;:::i;:::-;38718:74;;38801:93;38890:3;38801:93;:::i;:::-;38919:2;38914:3;38910:12;38903:19;;38562:366;;;:::o;38934:419::-;39100:4;39138:2;39127:9;39123:18;39115:26;;39187:9;39181:4;39177:20;39173:1;39162:9;39158:17;39151:47;39215:131;39341:4;39215:131;:::i;:::-;39207:139;;38934:419;;;:::o;39359:179::-;39499:31;39495:1;39487:6;39483:14;39476:55;39359:179;:::o;39544:366::-;39686:3;39707:67;39771:2;39766:3;39707:67;:::i;:::-;39700:74;;39783:93;39872:3;39783:93;:::i;:::-;39901:2;39896:3;39892:12;39885:19;;39544:366;;;:::o;39916:419::-;40082:4;40120:2;40109:9;40105:18;40097:26;;40169:9;40163:4;40159:20;40155:1;40144:9;40140:17;40133:47;40197:131;40323:4;40197:131;:::i;:::-;40189:139;;39916:419;;;:::o;40341:147::-;40442:11;40479:3;40464:18;;40341:147;;;;:::o;40494:114::-;;:::o;40614:398::-;40773:3;40794:83;40875:1;40870:3;40794:83;:::i;:::-;40787:90;;40886:93;40975:3;40886:93;:::i;:::-;41004:1;40999:3;40995:11;40988:18;;40614:398;;;:::o;41018:379::-;41202:3;41224:147;41367:3;41224:147;:::i;:::-;41217:154;;41388:3;41381:10;;41018:379;;;:::o;41403:225::-;41543:34;41539:1;41531:6;41527:14;41520:58;41612:8;41607:2;41599:6;41595:15;41588:33;41403:225;:::o;41634:366::-;41776:3;41797:67;41861:2;41856:3;41797:67;:::i;:::-;41790:74;;41873:93;41962:3;41873:93;:::i;:::-;41991:2;41986:3;41982:12;41975:19;;41634:366;;;:::o;42006:419::-;42172:4;42210:2;42199:9;42195:18;42187:26;;42259:9;42253:4;42249:20;42245:1;42234:9;42230:17;42223:47;42287:131;42413:4;42287:131;:::i;:::-;42279:139;;42006:419;;;:::o;42431:180::-;42479:77;42476:1;42469:88;42576:4;42573:1;42566:15;42600:4;42597:1;42590:15;42617:180;42665:77;42662:1;42655:88;42762:4;42759:1;42752:15;42786:4;42783:1;42776:15;42803:143;42860:5;42891:6;42885:13;42876:22;;42907:33;42934:5;42907:33;:::i;:::-;42803:143;;;;:::o;42952:351::-;43022:6;43071:2;43059:9;43050:7;43046:23;43042:32;43039:119;;;43077:79;;:::i;:::-;43039:119;43197:1;43222:64;43278:7;43269:6;43258:9;43254:22;43222:64;:::i;:::-;43212:74;;43168:128;42952:351;;;;:::o;43309:85::-;43354:7;43383:5;43372:16;;43309:85;;;:::o;43400:158::-;43458:9;43491:61;43509:42;43518:32;43544:5;43518:32;:::i;:::-;43509:42;:::i;:::-;43491:61;:::i;:::-;43478:74;;43400:158;;;:::o;43564:147::-;43659:45;43698:5;43659:45;:::i;:::-;43654:3;43647:58;43564:147;;:::o;43717:114::-;43784:6;43818:5;43812:12;43802:22;;43717:114;;;:::o;43837:184::-;43936:11;43970:6;43965:3;43958:19;44010:4;44005:3;44001:14;43986:29;;43837:184;;;;:::o;44027:132::-;44094:4;44117:3;44109:11;;44147:4;44142:3;44138:14;44130:22;;44027:132;;;:::o;44165:108::-;44242:24;44260:5;44242:24;:::i;:::-;44237:3;44230:37;44165:108;;:::o;44279:179::-;44348:10;44369:46;44411:3;44403:6;44369:46;:::i;:::-;44447:4;44442:3;44438:14;44424:28;;44279:179;;;;:::o;44464:113::-;44534:4;44566;44561:3;44557:14;44549:22;;44464:113;;;:::o;44613:732::-;44732:3;44761:54;44809:5;44761:54;:::i;:::-;44831:86;44910:6;44905:3;44831:86;:::i;:::-;44824:93;;44941:56;44991:5;44941:56;:::i;:::-;45020:7;45051:1;45036:284;45061:6;45058:1;45055:13;45036:284;;;45137:6;45131:13;45164:63;45223:3;45208:13;45164:63;:::i;:::-;45157:70;;45250:60;45303:6;45250:60;:::i;:::-;45240:70;;45096:224;45083:1;45080;45076:9;45071:14;;45036:284;;;45040:14;45336:3;45329:10;;44737:608;;;44613:732;;;;:::o;45351:831::-;45614:4;45652:3;45641:9;45637:19;45629:27;;45666:71;45734:1;45723:9;45719:17;45710:6;45666:71;:::i;:::-;45747:80;45823:2;45812:9;45808:18;45799:6;45747:80;:::i;:::-;45874:9;45868:4;45864:20;45859:2;45848:9;45844:18;45837:48;45902:108;46005:4;45996:6;45902:108;:::i;:::-;45894:116;;46020:72;46088:2;46077:9;46073:18;46064:6;46020:72;:::i;:::-;46102:73;46170:3;46159:9;46155:19;46146:6;46102:73;:::i;:::-;45351:831;;;;;;;;:::o;46188:807::-;46437:4;46475:3;46464:9;46460:19;46452:27;;46489:71;46557:1;46546:9;46542:17;46533:6;46489:71;:::i;:::-;46570:72;46638:2;46627:9;46623:18;46614:6;46570:72;:::i;:::-;46652:80;46728:2;46717:9;46713:18;46704:6;46652:80;:::i;:::-;46742;46818:2;46807:9;46803:18;46794:6;46742:80;:::i;:::-;46832:73;46900:3;46889:9;46885:19;46876:6;46832:73;:::i;:::-;46915;46983:3;46972:9;46968:19;46959:6;46915:73;:::i;:::-;46188:807;;;;;;;;;:::o;47001:663::-;47089:6;47097;47105;47154:2;47142:9;47133:7;47129:23;47125:32;47122:119;;;47160:79;;:::i;:::-;47122:119;47280:1;47305:64;47361:7;47352:6;47341:9;47337:22;47305:64;:::i;:::-;47295:74;;47251:128;47418:2;47444:64;47500:7;47491:6;47480:9;47476:22;47444:64;:::i;:::-;47434:74;;47389:129;47557:2;47583:64;47639:7;47630:6;47619:9;47615:22;47583:64;:::i;:::-;47573:74;;47528:129;47001:663;;;;;:::o;47670:442::-;47819:4;47857:2;47846:9;47842:18;47834:26;;47870:71;47938:1;47927:9;47923:17;47914:6;47870:71;:::i;:::-;47951:72;48019:2;48008:9;48004:18;47995:6;47951:72;:::i;:::-;48033;48101:2;48090:9;48086:18;48077:6;48033:72;:::i;:::-;47670:442;;;;;;:::o

Swarm Source

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