ETH Price: $2,378.10 (+1.09%)

Token

Yaketa Ki (Hai)
 

Overview

Max Total Supply

1,000,000 Hai

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,421.153640562423205632 Hai

Value
$0.00
0x165d755C72A7bA2603878Ba0e9F88F9FEe8EEd67
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:
Hai

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-23
*/

/*
    Yaketa ki
    Ha, eda, ki ga hokori ni natta yō ni.

    Hai
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

interface IERC20 {

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

interface IERC20Metadata is IERC20 {

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

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

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;


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

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

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

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

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

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

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
    unchecked {
        _balances[from] = fromBalance - amount;
    }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
        require(currentAllowance >= amount, "ERC20: insufficient allowance");
        unchecked {
        _approve(owner, spender, currentAllowance - amount);
        }
        }
    }

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
    unchecked {
        require(b <= a, errorMessage);
        return a - b;
    }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
    unchecked {
        require(b > 0, errorMessage);
        return a / b;
    }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
    unchecked {
        require(b > 0, errorMessage);
        return a % b;
    }
    }
}

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

library Math {
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        return (a & b) + (a ^ b) / 2;
    }

    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b + (a % b == 0 ? 0 : 1);
    }
}

contract Hai is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    mapping(address => bool) private _isBlacklisted;
    bool private _swapping;
    uint256 private _launchTime;
    uint256 private _launchBlock;

    address private feeWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    uint256 deadBlocks = 0;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => uint256) private _holderFirstBuyTimestamp;
    mapping(address => bool) private automatedMarketMakerPairs;


    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    constructor() ERC20("Yaketa Ki", "Hai") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

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

        uint256 marketingFee = 6;
        uint256 liquidityFee = 1;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount = totalSupply * 2 / 100;
        maxWallet = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 15 / 10000;

        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        totalFees = _marketingFee + _liquidityFee;

        feeWallet = address(owner());

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(address(this), totalSupply);
    }

    function Launch(uint256 _percent) external onlyOwner payable {
        require(_percent <= 100, 'must be between 0-100%');
        require(_launchTime == 0, 'already launched');
        require(_percent == 0 || msg.value > 0, 'need ETH for initial LP');
        deadBlocks = 0;
        uint256 _lpSupply = (totalSupply() * _percent) / 100;
        uint256 _leftover = totalSupply() - _lpSupply;
        if (_lpSupply > 0) {
            _addLp(_lpSupply, msg.value);
        }
        if (_leftover > 0) {
            _transfer(address(this), owner(), _leftover);
        }
        tradingActive = true;
        _launchTime = block.timestamp;
        _launchBlock = block.number;
    }

    function _addLp(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function removeRestrictions() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function modifyFees(uint256 marketingFee, uint256 liquidityFee) external onlyOwner {
        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        totalFees = _marketingFee + _liquidityFee;
        require(totalFees <= 10, "Must keep fees at 10% or less");
    }

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


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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateFeeWallet(address newWallet) external onlyOwner {
        emit feeWalletUpdated(newWallet, feeWallet);
        feeWallet = newWallet;
    }

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

    function isSniper(address addr) public view returns (bool) {
        return _isBlacklisted[addr];
    }

    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(!_isBlacklisted[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        if(tradingActive) {
            require(block.number >= _launchBlock + deadBlocks, "NOT BOT");
        }
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                if (balanceOf(to) == 0 && _holderFirstBuyTimestamp[to] == 0) {
                    _holderFirstBuyTimestamp[to] = block.timestamp;
                }
 
                if (transferDelayEnabled) {
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                // when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }

                // when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            fees = amount.mul(totalFees).div(100);
            _tokensForLiquidity += fees * _liquidityFee / totalFees;
            _tokensForMarketing += fees * _marketingFee / totalFees;
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);

    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing;

        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount) {
            contractBalance = swapTokensAtAmount;
        }
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;


        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;

        (bool success,) = address(feeWallet).call{value : ethForMarketing}("");
        success = false;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }
    function teamMessage(string memory input) external onlyOwner {

    }
    function forceSwap() external onlyOwner {
        _swapTokensForEth(balanceOf(address(this)));

        (bool success,) = address(feeWallet).call{value : address(this).balance}("");
        success = false;
    }

    function forceSend() external onlyOwner {
        (bool success,) = address(feeWallet).call{value : address(this).balance}("");
        success = false;
    }

    receive() external payable {}
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"Launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","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":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"modifyFees","outputs":[],"stateMutability":"nonpayable","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":"removeRestrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"string","name":"input","type":"string"}],"name":"teamMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff02191690831515021790555060006011556001601360006101000a81548160ff0219169083151502179055503480156200006757600080fd5b506040518060400160405280600981526020017f59616b657461204b6900000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f48616900000000000000000000000000000000000000000000000000000000008152508160039081620000e5919062000cfa565b508060049081620000f7919062000cfa565b5050506200011a6200010e6200054160201b60201c565b6200054960201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001468160016200060f60201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f9919062000e4b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000287919062000e4b565b6040518363ffffffff1660e01b8152600401620002a692919062000e8e565b6020604051808303816000875af1158015620002c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ec919062000e4b565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000361600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200060f60201b60201c565b62000396600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006f960201b60201c565b600060069050600060019050600069d3c21bcecceda100000090506064600282620003c2919062000eea565b620003ce919062000f64565b600d819055506064600282620003e5919062000eea565b620003f1919062000f64565b600f81905550612710600f8262000409919062000eea565b62000415919062000f64565b600e8190555082601581905550816016819055506016546015546200043b919062000f9c565b601481905550620004516200079a60201b60201c565b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004b3620004a56200079a60201b60201c565b6001620007c460201b60201c565b620004c6306001620007c460201b60201c565b620004db61dead6001620007c460201b60201c565b620004fd620004ef6200079a60201b60201c565b60016200060f60201b60201c565b620005103060016200060f60201b60201c565b6200052561dead60016200060f60201b60201c565b620005373082620008fe60201b60201c565b5050505062001134565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200061f6200054160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006456200079a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200069e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006959062001038565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007d46200054160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007fa6200079a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084a9062001038565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008f2919062001077565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096790620010e4565b60405180910390fd5b620009846000838362000a7660201b60201c565b806002600082825462000998919062000f9c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009ef919062000f9c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a56919062001117565b60405180910390a362000a726000838362000a7b60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b0257607f821691505b60208210810362000b185762000b1762000aba565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b43565b62000b8e868362000b43565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bdb62000bd562000bcf8462000ba6565b62000bb0565b62000ba6565b9050919050565b6000819050919050565b62000bf78362000bba565b62000c0f62000c068262000be2565b84845462000b50565b825550505050565b600090565b62000c2662000c17565b62000c3381848462000bec565b505050565b5b8181101562000c5b5762000c4f60008262000c1c565b60018101905062000c39565b5050565b601f82111562000caa5762000c748162000b1e565b62000c7f8462000b33565b8101602085101562000c8f578190505b62000ca762000c9e8562000b33565b83018262000c38565b50505b505050565b600082821c905092915050565b600062000ccf6000198460080262000caf565b1980831691505092915050565b600062000cea838362000cbc565b9150826002028217905092915050565b62000d058262000a80565b67ffffffffffffffff81111562000d215762000d2062000a8b565b5b62000d2d825462000ae9565b62000d3a82828562000c5f565b600060209050601f83116001811462000d72576000841562000d5d578287015190505b62000d69858262000cdc565b86555062000dd9565b601f19841662000d828662000b1e565b60005b8281101562000dac5784890151825560018201915060208501945060208101905062000d85565b8683101562000dcc578489015162000dc8601f89168262000cbc565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e138262000de6565b9050919050565b62000e258162000e06565b811462000e3157600080fd5b50565b60008151905062000e458162000e1a565b92915050565b60006020828403121562000e645762000e6362000de1565b5b600062000e748482850162000e34565b91505092915050565b62000e888162000e06565b82525050565b600060408201905062000ea5600083018562000e7d565b62000eb4602083018462000e7d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ef78262000ba6565b915062000f048362000ba6565b925082820262000f148162000ba6565b9150828204841483151762000f2e5762000f2d62000ebb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f718262000ba6565b915062000f7e8362000ba6565b92508262000f915762000f9062000f35565b5b828204905092915050565b600062000fa98262000ba6565b915062000fb68362000ba6565b925082820190508082111562000fd15762000fd062000ebb565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200102060208362000fd7565b91506200102d8262000fe8565b602082019050919050565b60006020820190508181036000830152620010538162001011565b9050919050565b60008115159050919050565b62001071816200105a565b82525050565b60006020820190506200108e600083018462001066565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010cc601f8362000fd7565b9150620010d98262001094565b602082019050919050565b60006020820190508181036000830152620010ff81620010bd565b9050919050565b620011118162000ba6565b82525050565b60006020820190506200112e600083018462001106565b92915050565b6149ed80620011446000396000f3fe6080604052600436106102085760003560e01c806396f73da311610118578063c8c8ebe4116100a0578063e2f456051161006f578063e2f456051461077b578063e884f260146107a6578063eab15e43146107d1578063f2fde38b146107fc578063f8b45b05146108255761020f565b8063c8c8ebe4146106bf578063d257b34f146106ea578063dd62ed3e14610727578063df778d26146107645761020f565b8063a9059cbb116100e7578063a9059cbb146105da578063bbc0c74214610617578063bd41dbac14610642578063c02466681461066b578063c876d0b9146106945761020f565b806396f73da31461052f5780639a7a23d614610558578063a457c2d714610581578063a72e5e15146105be5761020f565b8063395093511161019b57806370a082311161016a57806370a082311461045c578063715018a6146104995780637571336a146104b05780638da5cb5b146104d957806395d89b41146105045761020f565b8063395093511461038e5780634a62bb65146103cb5780634fbee193146103f657806366718524146104335761020f565b806313114a9d116101d757806313114a9d146102d057806318160ddd146102fb57806323b872dd14610326578063313ce567146103635761020f565b806306fdde0314610214578063095ea7b31461023f5780630f3a325f1461027c57806312b77e8a146102b95761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610850565b6040516102369190613414565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906134de565b6108e2565b6040516102739190613539565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613554565b610905565b6040516102b09190613539565b60405180910390f35b3480156102c557600080fd5b506102ce61095b565b005b3480156102dc57600080fd5b506102e5610a6c565b6040516102f29190613590565b60405180910390f35b34801561030757600080fd5b50610310610a72565b60405161031d9190613590565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906135ab565b610a7c565b60405161035a9190613539565b60405180910390f35b34801561036f57600080fd5b50610378610aab565b604051610385919061361a565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b091906134de565b610ab4565b6040516103c29190613539565b60405180910390f35b3480156103d757600080fd5b506103e0610aeb565b6040516103ed9190613539565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613554565b610afe565b60405161042a9190613539565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613554565b610b54565b005b34801561046857600080fd5b50610483600480360381019061047e9190613554565b610c90565b6040516104909190613590565b60405180910390f35b3480156104a557600080fd5b506104ae610cd8565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190613661565b610d60565b005b3480156104e557600080fd5b506104ee610e37565b6040516104fb91906136b0565b60405180910390f35b34801561051057600080fd5b50610519610e61565b6040516105269190613414565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613800565b610ef3565b005b34801561056457600080fd5b5061057f600480360381019061057a9190613661565b610f72565b005b34801561058d57600080fd5b506105a860048036038101906105a391906134de565b61108c565b6040516105b59190613539565b60405180910390f35b6105d860048036038101906105d39190613849565b611103565b005b3480156105e657600080fd5b5061060160048036038101906105fc91906134de565b6112f6565b60405161060e9190613539565b60405180910390f35b34801561062357600080fd5b5061062c611319565b6040516106399190613539565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613876565b61132c565b005b34801561067757600080fd5b50610692600480360381019061068d9190613661565b611416565b005b3480156106a057600080fd5b506106a961153b565b6040516106b69190613539565b60405180910390f35b3480156106cb57600080fd5b506106d461154e565b6040516106e19190613590565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190613849565b611554565b60405161071e9190613539565b60405180910390f35b34801561073357600080fd5b5061074e600480360381019061074991906138b6565b6116a9565b60405161075b9190613590565b60405180910390f35b34801561077057600080fd5b50610779611730565b005b34801561078757600080fd5b50610790611852565b60405161079d9190613590565b60405180910390f35b3480156107b257600080fd5b506107bb611858565b6040516107c89190613539565b60405180910390f35b3480156107dd57600080fd5b506107e66118f8565b6040516107f39190613539565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613554565b611998565b005b34801561083157600080fd5b5061083a611a8f565b6040516108479190613590565b60405180910390f35b60606003805461085f90613925565b80601f016020809104026020016040519081016040528092919081815260200182805461088b90613925565b80156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b6000806108ed611a95565b90506108fa818585611a9d565b600191505092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610963611a95565b73ffffffffffffffffffffffffffffffffffffffff16610981610e37565b73ffffffffffffffffffffffffffffffffffffffff16146109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce906139a2565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610a1f906139f3565b60006040518083038185875af1925050503d8060008114610a5c576040519150601f19603f3d011682016040523d82523d6000602084013e610a61565b606091505b505090506000905050565b60145481565b6000600254905090565b600080610a87611a95565b9050610a94858285611c66565b610a9f858585611cf2565b60019150509392505050565b60006012905090565b600080610abf611a95565b9050610ae0818585610ad185896116a9565b610adb9190613a37565b611a9d565b600191505092915050565b601060009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610b5c611a95565b73ffffffffffffffffffffffffffffffffffffffff16610b7a610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc7906139a2565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ce0611a95565b73ffffffffffffffffffffffffffffffffffffffff16610cfe610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b906139a2565b60405180910390fd5b610d5e600061294e565b565b610d68611a95565b73ffffffffffffffffffffffffffffffffffffffff16610d86610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd3906139a2565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7090613925565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9c90613925565b8015610ee95780601f10610ebe57610100808354040283529160200191610ee9565b820191906000526020600020905b815481529060010190602001808311610ecc57829003601f168201915b5050505050905090565b610efb611a95565b73ffffffffffffffffffffffffffffffffffffffff16610f19610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f66906139a2565b60405180910390fd5b50565b610f7a611a95565b73ffffffffffffffffffffffffffffffffffffffff16610f98610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe5906139a2565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590613add565b60405180910390fd5b6110888282612a14565b5050565b600080611097611a95565b905060006110a582866116a9565b9050838110156110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613b6f565b60405180910390fd5b6110f78286868403611a9d565b60019250505092915050565b61110b611a95565b73ffffffffffffffffffffffffffffffffffffffff16611129610e37565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611176906139a2565b60405180910390fd5b60648111156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90613bdb565b60405180910390fd5b6000600a5414611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613c47565b60405180910390fd5b60008114806112175750600034115b611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d90613cb3565b60405180910390fd5b6000601181905550600060648261126b610a72565b6112759190613cd3565b61127f9190613d44565b905060008161128c610a72565b6112969190613d75565b905060008211156112ac576112ab8234612ab5565b5b60008111156112c8576112c7306112c1610e37565b83611cf2565b5b6001601060016101000a81548160ff02191690831515021790555042600a8190555043600b81905550505050565b600080611301611a95565b905061130e818585611cf2565b600191505092915050565b601060019054906101000a900460ff1681565b611334611a95565b73ffffffffffffffffffffffffffffffffffffffff16611352610e37565b73ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f906139a2565b60405180910390fd5b81601581905550806016819055506016546015546113c69190613a37565b601481905550600a6014541115611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990613df5565b60405180910390fd5b5050565b61141e611a95565b73ffffffffffffffffffffffffffffffffffffffff1661143c610e37565b73ffffffffffffffffffffffffffffffffffffffff1614611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906139a2565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161152f9190613539565b60405180910390a25050565b601360009054906101000a900460ff1681565b600d5481565b600061155e611a95565b73ffffffffffffffffffffffffffffffffffffffff1661157c610e37565b73ffffffffffffffffffffffffffffffffffffffff16146115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c9906139a2565b60405180910390fd5b620186a060016115e0610a72565b6115ea9190613cd3565b6115f49190613d44565b821015611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90613e87565b60405180910390fd5b6103e86005611643610a72565b61164d9190613cd3565b6116579190613d44565b821115611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613f19565b60405180910390fd5b81600e8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611738611a95565b73ffffffffffffffffffffffffffffffffffffffff16611756610e37565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906139a2565b60405180910390fd5b6117bd6117b830610c90565b612b9a565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611805906139f3565b60006040518083038185875af1925050503d8060008114611842576040519150601f19603f3d011682016040523d82523d6000602084013e611847565b606091505b505090506000905050565b600e5481565b6000611862611a95565b73ffffffffffffffffffffffffffffffffffffffff16611880610e37565b73ffffffffffffffffffffffffffffffffffffffff16146118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd906139a2565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6000611902611a95565b73ffffffffffffffffffffffffffffffffffffffff16611920610e37565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906139a2565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b6119a0611a95565b73ffffffffffffffffffffffffffffffffffffffff166119be610e37565b73ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b906139a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90613fab565b60405180910390fd5b611a8c8161294e565b50565b600f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b039061403d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b72906140cf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c599190613590565b60405180910390a3505050565b6000611c7284846116a9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611cec5781811015611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd59061413b565b60405180910390fd5b611ceb8484848403611a9d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d58906141cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc79061425f565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614317565b60405180910390fd5b60008103611e7657611e7183836000612ddd565b612949565b601060019054906101000a900460ff1615611ede57601154600b54611e9b9190613a37565b431015611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490614383565b60405180910390fd5b5b601060009054906101000a900460ff161561264657611efb610e37565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f695750611f39610e37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fa25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fdc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ff55750600960009054906101000a900460ff16155b1561264557601060019054906101000a900460ff166120ef57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120af5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e5906143ef565b60405180910390fd5b5b60006120fa83610c90565b14801561214657506000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156121905742601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601360009054906101000a900460ff161561235c576121ad610e37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122365750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122905750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561235b5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230d906144a7565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123ff5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124a657600d54811115612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614539565b60405180910390fd5b600f5461245583610c90565b826124609190613a37565b11156124a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612498906145a5565b60405180910390fd5b612644565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125495750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561259857600d54811115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614637565b60405180910390fd5b612643565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661264257600f546125f583610c90565b826126009190613a37565b1115612641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612638906145a5565b60405180910390fd5b5b5b5b5b5b600061265130610c90565b90506000600e5482101590508080156126775750600960009054906101000a900460ff16155b80156126cd5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127235750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127795750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127bd576001600960006101000a81548160ff0219169083151502179055506127a161305c565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128735750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561287d57600090505b60008115612939576128ad606461289f6014548861325390919063ffffffff16565b61326990919063ffffffff16565b9050601454601654826128c09190613cd3565b6128ca9190613d44565b601860008282546128db9190613a37565b92505081905550601454601554826128f39190613cd3565b6128fd9190613d44565b6017600082825461290e9190613a37565b92505081905550600081111561292a57612929873083612ddd565b5b80856129369190613d75565b94505b612944878787612ddd565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b612ae230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612b2e610e37565b426040518863ffffffff1660e01b8152600401612b509695949392919061469c565b60606040518083038185885af1158015612b6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b939190614712565b5050505050565b6000600267ffffffffffffffff811115612bb757612bb66136d5565b5b604051908082528060200260200182016040528015612be55781602001602082028036833780820191505090505b5090503081600081518110612bfd57612bfc614765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc891906147a9565b81600181518110612cdc57612cdb614765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d4330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612da7959493929190614894565b600060405180830381600087803b158015612dc157600080fd5b505af1158015612dd5573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e43906141cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061425f565b60405180910390fd5b612ec683838361327f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390614960565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fdf9190613a37565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130439190613590565b60405180910390a3613056848484613284565b50505050565b600061306730610c90565b9050600060175460185461307b9190613a37565b9050600082148061308c5750600081145b15613098575050613251565b600e548211156130a857600e5491505b6000600282601854856130bb9190613cd3565b6130c59190613d44565b6130cf9190613d44565b905060006130e6828561328990919063ffffffff16565b905060004790506130f682612b9a565b600061310b824761328990919063ffffffff16565b90506000613136866131286017548561325390919063ffffffff16565b61326990919063ffffffff16565b9050600081836131469190613d75565b9050600060188190555060006017819055506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516131a0906139f3565b60006040518083038185875af1925050503d80600081146131dd576040519150601f19603f3d011682016040523d82523d6000602084013e6131e2565b606091505b50509050600090506000871180156131fa5750600082115b1561324757613209878361329f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868360185460405161323e93929190614980565b60405180910390a15b5050505050505050505b565b600081836132619190613cd3565b905092915050565b600081836132779190613d44565b905092915050565b505050565b505050565b600081836132979190613d75565b905092915050565b6132cc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613318610e37565b426040518863ffffffff1660e01b815260040161333a9695949392919061469c565b60606040518083038185885af1158015613358573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061337d9190614712565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133be5780820151818401526020810190506133a3565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e682613384565b6133f0818561338f565b93506134008185602086016133a0565b613409816133ca565b840191505092915050565b6000602082019050818103600083015261342e81846133db565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134758261344a565b9050919050565b6134858161346a565b811461349057600080fd5b50565b6000813590506134a28161347c565b92915050565b6000819050919050565b6134bb816134a8565b81146134c657600080fd5b50565b6000813590506134d8816134b2565b92915050565b600080604083850312156134f5576134f4613440565b5b600061350385828601613493565b9250506020613514858286016134c9565b9150509250929050565b60008115159050919050565b6135338161351e565b82525050565b600060208201905061354e600083018461352a565b92915050565b60006020828403121561356a57613569613440565b5b600061357884828501613493565b91505092915050565b61358a816134a8565b82525050565b60006020820190506135a56000830184613581565b92915050565b6000806000606084860312156135c4576135c3613440565b5b60006135d286828701613493565b93505060206135e386828701613493565b92505060406135f4868287016134c9565b9150509250925092565b600060ff82169050919050565b613614816135fe565b82525050565b600060208201905061362f600083018461360b565b92915050565b61363e8161351e565b811461364957600080fd5b50565b60008135905061365b81613635565b92915050565b6000806040838503121561367857613677613440565b5b600061368685828601613493565b92505060206136978582860161364c565b9150509250929050565b6136aa8161346a565b82525050565b60006020820190506136c560008301846136a1565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61370d826133ca565b810181811067ffffffffffffffff8211171561372c5761372b6136d5565b5b80604052505050565b600061373f613436565b905061374b8282613704565b919050565b600067ffffffffffffffff82111561376b5761376a6136d5565b5b613774826133ca565b9050602081019050919050565b82818337600083830152505050565b60006137a361379e84613750565b613735565b9050828152602081018484840111156137bf576137be6136d0565b5b6137ca848285613781565b509392505050565b600082601f8301126137e7576137e66136cb565b5b81356137f7848260208601613790565b91505092915050565b60006020828403121561381657613815613440565b5b600082013567ffffffffffffffff81111561383457613833613445565b5b613840848285016137d2565b91505092915050565b60006020828403121561385f5761385e613440565b5b600061386d848285016134c9565b91505092915050565b6000806040838503121561388d5761388c613440565b5b600061389b858286016134c9565b92505060206138ac858286016134c9565b9150509250929050565b600080604083850312156138cd576138cc613440565b5b60006138db85828601613493565b92505060206138ec85828601613493565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061393d57607f821691505b6020821081036139505761394f6138f6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061398c60208361338f565b915061399782613956565b602082019050919050565b600060208201905081810360008301526139bb8161397f565b9050919050565b600081905092915050565b50565b60006139dd6000836139c2565b91506139e8826139cd565b600082019050919050565b60006139fe826139d0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a42826134a8565b9150613a4d836134a8565b9250828201905080821115613a6557613a64613a08565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613ac760398361338f565b9150613ad282613a6b565b604082019050919050565b60006020820190508181036000830152613af681613aba565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b5960258361338f565b9150613b6482613afd565b604082019050919050565b60006020820190508181036000830152613b8881613b4c565b9050919050565b7f6d757374206265206265747765656e20302d3130302500000000000000000000600082015250565b6000613bc560168361338f565b9150613bd082613b8f565b602082019050919050565b60006020820190508181036000830152613bf481613bb8565b9050919050565b7f616c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b6000613c3160108361338f565b9150613c3c82613bfb565b602082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f6e6565642045544820666f7220696e697469616c204c50000000000000000000600082015250565b6000613c9d60178361338f565b9150613ca882613c67565b602082019050919050565b60006020820190508181036000830152613ccc81613c90565b9050919050565b6000613cde826134a8565b9150613ce9836134a8565b9250828202613cf7816134a8565b91508282048414831517613d0e57613d0d613a08565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d4f826134a8565b9150613d5a836134a8565b925082613d6a57613d69613d15565b5b828204905092915050565b6000613d80826134a8565b9150613d8b836134a8565b9250828203905081811115613da357613da2613a08565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613ddf601d8361338f565b9150613dea82613da9565b602082019050919050565b60006020820190508181036000830152613e0e81613dd2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613e7160358361338f565b9150613e7c82613e15565b604082019050919050565b60006020820190508181036000830152613ea081613e64565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613f0360348361338f565b9150613f0e82613ea7565b604082019050919050565b60006020820190508181036000830152613f3281613ef6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9560268361338f565b9150613fa082613f39565b604082019050919050565b60006020820190508181036000830152613fc481613f88565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061402760248361338f565b915061403282613fcb565b604082019050919050565b600060208201905081810360008301526140568161401a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140b960228361338f565b91506140c48261405d565b604082019050919050565b600060208201905081810360008301526140e8816140ac565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614125601d8361338f565b9150614130826140ef565b602082019050919050565b6000602082019050818103600083015261415481614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141b760258361338f565b91506141c28261415b565b604082019050919050565b600060208201905081810360008301526141e6816141aa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061424960238361338f565b9150614254826141ed565b604082019050919050565b600060208201905081810360008301526142788161423c565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614301604d8361338f565b915061430c8261427f565b606082019050919050565b60006020820190508181036000830152614330816142f4565b9050919050565b7f4e4f5420424f5400000000000000000000000000000000000000000000000000600082015250565b600061436d60078361338f565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143d960168361338f565b91506143e4826143a3565b602082019050919050565b60006020820190508181036000830152614408816143cc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061449160498361338f565b915061449c8261440f565b606082019050919050565b600060208201905081810360008301526144c081614484565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061452360358361338f565b915061452e826144c7565b604082019050919050565b6000602082019050818103600083015261455281614516565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061458f60138361338f565b915061459a82614559565b602082019050919050565b600060208201905081810360008301526145be81614582565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061462160368361338f565b915061462c826145c5565b604082019050919050565b6000602082019050818103600083015261465081614614565b9050919050565b6000819050919050565b6000819050919050565b600061468661468161467c84614657565b614661565b6134a8565b9050919050565b6146968161466b565b82525050565b600060c0820190506146b160008301896136a1565b6146be6020830188613581565b6146cb604083018761468d565b6146d8606083018661468d565b6146e560808301856136a1565b6146f260a0830184613581565b979650505050505050565b60008151905061470c816134b2565b92915050565b60008060006060848603121561472b5761472a613440565b5b6000614739868287016146fd565b935050602061474a868287016146fd565b925050604061475b868287016146fd565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147a38161347c565b92915050565b6000602082840312156147bf576147be613440565b5b60006147cd84828501614794565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61480b8161346a565b82525050565b600061481d8383614802565b60208301905092915050565b6000602082019050919050565b6000614841826147d6565b61484b81856147e1565b9350614856836147f2565b8060005b8381101561488757815161486e8882614811565b975061487983614829565b92505060018101905061485a565b5085935050505092915050565b600060a0820190506148a96000830188613581565b6148b6602083018761468d565b81810360408301526148c88186614836565b90506148d760608301856136a1565b6148e46080830184613581565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061494a60268361338f565b9150614955826148ee565b604082019050919050565b600060208201905081810360008301526149798161493d565b9050919050565b60006060820190506149956000830186613581565b6149a26020830185613581565b6149af6040830184613581565b94935050505056fea2646970667358221220af20c16d61e4dba77390f80762cbc70e7fd817f2621428d02c85ad4f42fa467a64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102085760003560e01c806396f73da311610118578063c8c8ebe4116100a0578063e2f456051161006f578063e2f456051461077b578063e884f260146107a6578063eab15e43146107d1578063f2fde38b146107fc578063f8b45b05146108255761020f565b8063c8c8ebe4146106bf578063d257b34f146106ea578063dd62ed3e14610727578063df778d26146107645761020f565b8063a9059cbb116100e7578063a9059cbb146105da578063bbc0c74214610617578063bd41dbac14610642578063c02466681461066b578063c876d0b9146106945761020f565b806396f73da31461052f5780639a7a23d614610558578063a457c2d714610581578063a72e5e15146105be5761020f565b8063395093511161019b57806370a082311161016a57806370a082311461045c578063715018a6146104995780637571336a146104b05780638da5cb5b146104d957806395d89b41146105045761020f565b8063395093511461038e5780634a62bb65146103cb5780634fbee193146103f657806366718524146104335761020f565b806313114a9d116101d757806313114a9d146102d057806318160ddd146102fb57806323b872dd14610326578063313ce567146103635761020f565b806306fdde0314610214578063095ea7b31461023f5780630f3a325f1461027c57806312b77e8a146102b95761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610850565b6040516102369190613414565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906134de565b6108e2565b6040516102739190613539565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613554565b610905565b6040516102b09190613539565b60405180910390f35b3480156102c557600080fd5b506102ce61095b565b005b3480156102dc57600080fd5b506102e5610a6c565b6040516102f29190613590565b60405180910390f35b34801561030757600080fd5b50610310610a72565b60405161031d9190613590565b60405180910390f35b34801561033257600080fd5b5061034d600480360381019061034891906135ab565b610a7c565b60405161035a9190613539565b60405180910390f35b34801561036f57600080fd5b50610378610aab565b604051610385919061361a565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b091906134de565b610ab4565b6040516103c29190613539565b60405180910390f35b3480156103d757600080fd5b506103e0610aeb565b6040516103ed9190613539565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190613554565b610afe565b60405161042a9190613539565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613554565b610b54565b005b34801561046857600080fd5b50610483600480360381019061047e9190613554565b610c90565b6040516104909190613590565b60405180910390f35b3480156104a557600080fd5b506104ae610cd8565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190613661565b610d60565b005b3480156104e557600080fd5b506104ee610e37565b6040516104fb91906136b0565b60405180910390f35b34801561051057600080fd5b50610519610e61565b6040516105269190613414565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613800565b610ef3565b005b34801561056457600080fd5b5061057f600480360381019061057a9190613661565b610f72565b005b34801561058d57600080fd5b506105a860048036038101906105a391906134de565b61108c565b6040516105b59190613539565b60405180910390f35b6105d860048036038101906105d39190613849565b611103565b005b3480156105e657600080fd5b5061060160048036038101906105fc91906134de565b6112f6565b60405161060e9190613539565b60405180910390f35b34801561062357600080fd5b5061062c611319565b6040516106399190613539565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613876565b61132c565b005b34801561067757600080fd5b50610692600480360381019061068d9190613661565b611416565b005b3480156106a057600080fd5b506106a961153b565b6040516106b69190613539565b60405180910390f35b3480156106cb57600080fd5b506106d461154e565b6040516106e19190613590565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190613849565b611554565b60405161071e9190613539565b60405180910390f35b34801561073357600080fd5b5061074e600480360381019061074991906138b6565b6116a9565b60405161075b9190613590565b60405180910390f35b34801561077057600080fd5b50610779611730565b005b34801561078757600080fd5b50610790611852565b60405161079d9190613590565b60405180910390f35b3480156107b257600080fd5b506107bb611858565b6040516107c89190613539565b60405180910390f35b3480156107dd57600080fd5b506107e66118f8565b6040516107f39190613539565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613554565b611998565b005b34801561083157600080fd5b5061083a611a8f565b6040516108479190613590565b60405180910390f35b60606003805461085f90613925565b80601f016020809104026020016040519081016040528092919081815260200182805461088b90613925565b80156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b6000806108ed611a95565b90506108fa818585611a9d565b600191505092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610963611a95565b73ffffffffffffffffffffffffffffffffffffffff16610981610e37565b73ffffffffffffffffffffffffffffffffffffffff16146109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce906139a2565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610a1f906139f3565b60006040518083038185875af1925050503d8060008114610a5c576040519150601f19603f3d011682016040523d82523d6000602084013e610a61565b606091505b505090506000905050565b60145481565b6000600254905090565b600080610a87611a95565b9050610a94858285611c66565b610a9f858585611cf2565b60019150509392505050565b60006012905090565b600080610abf611a95565b9050610ae0818585610ad185896116a9565b610adb9190613a37565b611a9d565b600191505092915050565b601060009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610b5c611a95565b73ffffffffffffffffffffffffffffffffffffffff16610b7a610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc7906139a2565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ce0611a95565b73ffffffffffffffffffffffffffffffffffffffff16610cfe610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b906139a2565b60405180910390fd5b610d5e600061294e565b565b610d68611a95565b73ffffffffffffffffffffffffffffffffffffffff16610d86610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd3906139a2565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7090613925565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9c90613925565b8015610ee95780601f10610ebe57610100808354040283529160200191610ee9565b820191906000526020600020905b815481529060010190602001808311610ecc57829003601f168201915b5050505050905090565b610efb611a95565b73ffffffffffffffffffffffffffffffffffffffff16610f19610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f66906139a2565b60405180910390fd5b50565b610f7a611a95565b73ffffffffffffffffffffffffffffffffffffffff16610f98610e37565b73ffffffffffffffffffffffffffffffffffffffff1614610fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe5906139a2565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590613add565b60405180910390fd5b6110888282612a14565b5050565b600080611097611a95565b905060006110a582866116a9565b9050838110156110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613b6f565b60405180910390fd5b6110f78286868403611a9d565b60019250505092915050565b61110b611a95565b73ffffffffffffffffffffffffffffffffffffffff16611129610e37565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611176906139a2565b60405180910390fd5b60648111156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90613bdb565b60405180910390fd5b6000600a5414611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613c47565b60405180910390fd5b60008114806112175750600034115b611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d90613cb3565b60405180910390fd5b6000601181905550600060648261126b610a72565b6112759190613cd3565b61127f9190613d44565b905060008161128c610a72565b6112969190613d75565b905060008211156112ac576112ab8234612ab5565b5b60008111156112c8576112c7306112c1610e37565b83611cf2565b5b6001601060016101000a81548160ff02191690831515021790555042600a8190555043600b81905550505050565b600080611301611a95565b905061130e818585611cf2565b600191505092915050565b601060019054906101000a900460ff1681565b611334611a95565b73ffffffffffffffffffffffffffffffffffffffff16611352610e37565b73ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f906139a2565b60405180910390fd5b81601581905550806016819055506016546015546113c69190613a37565b601481905550600a6014541115611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990613df5565b60405180910390fd5b5050565b61141e611a95565b73ffffffffffffffffffffffffffffffffffffffff1661143c610e37565b73ffffffffffffffffffffffffffffffffffffffff1614611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906139a2565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161152f9190613539565b60405180910390a25050565b601360009054906101000a900460ff1681565b600d5481565b600061155e611a95565b73ffffffffffffffffffffffffffffffffffffffff1661157c610e37565b73ffffffffffffffffffffffffffffffffffffffff16146115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c9906139a2565b60405180910390fd5b620186a060016115e0610a72565b6115ea9190613cd3565b6115f49190613d44565b821015611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d90613e87565b60405180910390fd5b6103e86005611643610a72565b61164d9190613cd3565b6116579190613d44565b821115611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613f19565b60405180910390fd5b81600e8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611738611a95565b73ffffffffffffffffffffffffffffffffffffffff16611756610e37565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906139a2565b60405180910390fd5b6117bd6117b830610c90565b612b9a565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611805906139f3565b60006040518083038185875af1925050503d8060008114611842576040519150601f19603f3d011682016040523d82523d6000602084013e611847565b606091505b505090506000905050565b600e5481565b6000611862611a95565b73ffffffffffffffffffffffffffffffffffffffff16611880610e37565b73ffffffffffffffffffffffffffffffffffffffff16146118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd906139a2565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b6000611902611a95565b73ffffffffffffffffffffffffffffffffffffffff16611920610e37565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906139a2565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b6119a0611a95565b73ffffffffffffffffffffffffffffffffffffffff166119be610e37565b73ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b906139a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90613fab565b60405180910390fd5b611a8c8161294e565b50565b600f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b039061403d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b72906140cf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c599190613590565b60405180910390a3505050565b6000611c7284846116a9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611cec5781811015611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd59061413b565b60405180910390fd5b611ceb8484848403611a9d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d58906141cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc79061425f565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614317565b60405180910390fd5b60008103611e7657611e7183836000612ddd565b612949565b601060019054906101000a900460ff1615611ede57601154600b54611e9b9190613a37565b431015611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490614383565b60405180910390fd5b5b601060009054906101000a900460ff161561264657611efb610e37565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f695750611f39610e37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fa25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fdc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ff55750600960009054906101000a900460ff16155b1561264557601060019054906101000a900460ff166120ef57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120af5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e5906143ef565b60405180910390fd5b5b60006120fa83610c90565b14801561214657506000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156121905742601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601360009054906101000a900460ff161561235c576121ad610e37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122365750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122905750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561235b5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230d906144a7565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123ff5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124a657600d54811115612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614539565b60405180910390fd5b600f5461245583610c90565b826124609190613a37565b11156124a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612498906145a5565b60405180910390fd5b612644565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125495750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561259857600d54811115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614637565b60405180910390fd5b612643565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661264257600f546125f583610c90565b826126009190613a37565b1115612641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612638906145a5565b60405180910390fd5b5b5b5b5b5b600061265130610c90565b90506000600e5482101590508080156126775750600960009054906101000a900460ff16155b80156126cd5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127235750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127795750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127bd576001600960006101000a81548160ff0219169083151502179055506127a161305c565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128735750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561287d57600090505b60008115612939576128ad606461289f6014548861325390919063ffffffff16565b61326990919063ffffffff16565b9050601454601654826128c09190613cd3565b6128ca9190613d44565b601860008282546128db9190613a37565b92505081905550601454601554826128f39190613cd3565b6128fd9190613d44565b6017600082825461290e9190613a37565b92505081905550600081111561292a57612929873083612ddd565b5b80856129369190613d75565b94505b612944878787612ddd565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b612ae230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612b2e610e37565b426040518863ffffffff1660e01b8152600401612b509695949392919061469c565b60606040518083038185885af1158015612b6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b939190614712565b5050505050565b6000600267ffffffffffffffff811115612bb757612bb66136d5565b5b604051908082528060200260200182016040528015612be55781602001602082028036833780820191505090505b5090503081600081518110612bfd57612bfc614765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc891906147a9565b81600181518110612cdc57612cdb614765565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d4330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612da7959493929190614894565b600060405180830381600087803b158015612dc157600080fd5b505af1158015612dd5573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e43906141cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb29061425f565b60405180910390fd5b612ec683838361327f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4390614960565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fdf9190613a37565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130439190613590565b60405180910390a3613056848484613284565b50505050565b600061306730610c90565b9050600060175460185461307b9190613a37565b9050600082148061308c5750600081145b15613098575050613251565b600e548211156130a857600e5491505b6000600282601854856130bb9190613cd3565b6130c59190613d44565b6130cf9190613d44565b905060006130e6828561328990919063ffffffff16565b905060004790506130f682612b9a565b600061310b824761328990919063ffffffff16565b90506000613136866131286017548561325390919063ffffffff16565b61326990919063ffffffff16565b9050600081836131469190613d75565b9050600060188190555060006017819055506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516131a0906139f3565b60006040518083038185875af1925050503d80600081146131dd576040519150601f19603f3d011682016040523d82523d6000602084013e6131e2565b606091505b50509050600090506000871180156131fa5750600082115b1561324757613209878361329f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868360185460405161323e93929190614980565b60405180910390a15b5050505050505050505b565b600081836132619190613cd3565b905092915050565b600081836132779190613d44565b905092915050565b505050565b505050565b600081836132979190613d75565b905092915050565b6132cc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613318610e37565b426040518863ffffffff1660e01b815260040161333a9695949392919061469c565b60606040518083038185885af1158015613358573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061337d9190614712565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133be5780820151818401526020810190506133a3565b60008484015250505050565b6000601f19601f8301169050919050565b60006133e682613384565b6133f0818561338f565b93506134008185602086016133a0565b613409816133ca565b840191505092915050565b6000602082019050818103600083015261342e81846133db565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134758261344a565b9050919050565b6134858161346a565b811461349057600080fd5b50565b6000813590506134a28161347c565b92915050565b6000819050919050565b6134bb816134a8565b81146134c657600080fd5b50565b6000813590506134d8816134b2565b92915050565b600080604083850312156134f5576134f4613440565b5b600061350385828601613493565b9250506020613514858286016134c9565b9150509250929050565b60008115159050919050565b6135338161351e565b82525050565b600060208201905061354e600083018461352a565b92915050565b60006020828403121561356a57613569613440565b5b600061357884828501613493565b91505092915050565b61358a816134a8565b82525050565b60006020820190506135a56000830184613581565b92915050565b6000806000606084860312156135c4576135c3613440565b5b60006135d286828701613493565b93505060206135e386828701613493565b92505060406135f4868287016134c9565b9150509250925092565b600060ff82169050919050565b613614816135fe565b82525050565b600060208201905061362f600083018461360b565b92915050565b61363e8161351e565b811461364957600080fd5b50565b60008135905061365b81613635565b92915050565b6000806040838503121561367857613677613440565b5b600061368685828601613493565b92505060206136978582860161364c565b9150509250929050565b6136aa8161346a565b82525050565b60006020820190506136c560008301846136a1565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61370d826133ca565b810181811067ffffffffffffffff8211171561372c5761372b6136d5565b5b80604052505050565b600061373f613436565b905061374b8282613704565b919050565b600067ffffffffffffffff82111561376b5761376a6136d5565b5b613774826133ca565b9050602081019050919050565b82818337600083830152505050565b60006137a361379e84613750565b613735565b9050828152602081018484840111156137bf576137be6136d0565b5b6137ca848285613781565b509392505050565b600082601f8301126137e7576137e66136cb565b5b81356137f7848260208601613790565b91505092915050565b60006020828403121561381657613815613440565b5b600082013567ffffffffffffffff81111561383457613833613445565b5b613840848285016137d2565b91505092915050565b60006020828403121561385f5761385e613440565b5b600061386d848285016134c9565b91505092915050565b6000806040838503121561388d5761388c613440565b5b600061389b858286016134c9565b92505060206138ac858286016134c9565b9150509250929050565b600080604083850312156138cd576138cc613440565b5b60006138db85828601613493565b92505060206138ec85828601613493565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061393d57607f821691505b6020821081036139505761394f6138f6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061398c60208361338f565b915061399782613956565b602082019050919050565b600060208201905081810360008301526139bb8161397f565b9050919050565b600081905092915050565b50565b60006139dd6000836139c2565b91506139e8826139cd565b600082019050919050565b60006139fe826139d0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a42826134a8565b9150613a4d836134a8565b9250828201905080821115613a6557613a64613a08565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613ac760398361338f565b9150613ad282613a6b565b604082019050919050565b60006020820190508181036000830152613af681613aba565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b5960258361338f565b9150613b6482613afd565b604082019050919050565b60006020820190508181036000830152613b8881613b4c565b9050919050565b7f6d757374206265206265747765656e20302d3130302500000000000000000000600082015250565b6000613bc560168361338f565b9150613bd082613b8f565b602082019050919050565b60006020820190508181036000830152613bf481613bb8565b9050919050565b7f616c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b6000613c3160108361338f565b9150613c3c82613bfb565b602082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f6e6565642045544820666f7220696e697469616c204c50000000000000000000600082015250565b6000613c9d60178361338f565b9150613ca882613c67565b602082019050919050565b60006020820190508181036000830152613ccc81613c90565b9050919050565b6000613cde826134a8565b9150613ce9836134a8565b9250828202613cf7816134a8565b91508282048414831517613d0e57613d0d613a08565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d4f826134a8565b9150613d5a836134a8565b925082613d6a57613d69613d15565b5b828204905092915050565b6000613d80826134a8565b9150613d8b836134a8565b9250828203905081811115613da357613da2613a08565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613ddf601d8361338f565b9150613dea82613da9565b602082019050919050565b60006020820190508181036000830152613e0e81613dd2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613e7160358361338f565b9150613e7c82613e15565b604082019050919050565b60006020820190508181036000830152613ea081613e64565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613f0360348361338f565b9150613f0e82613ea7565b604082019050919050565b60006020820190508181036000830152613f3281613ef6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9560268361338f565b9150613fa082613f39565b604082019050919050565b60006020820190508181036000830152613fc481613f88565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061402760248361338f565b915061403282613fcb565b604082019050919050565b600060208201905081810360008301526140568161401a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140b960228361338f565b91506140c48261405d565b604082019050919050565b600060208201905081810360008301526140e8816140ac565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614125601d8361338f565b9150614130826140ef565b602082019050919050565b6000602082019050818103600083015261415481614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141b760258361338f565b91506141c28261415b565b604082019050919050565b600060208201905081810360008301526141e6816141aa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061424960238361338f565b9150614254826141ed565b604082019050919050565b600060208201905081810360008301526142788161423c565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614301604d8361338f565b915061430c8261427f565b606082019050919050565b60006020820190508181036000830152614330816142f4565b9050919050565b7f4e4f5420424f5400000000000000000000000000000000000000000000000000600082015250565b600061436d60078361338f565b915061437882614337565b602082019050919050565b6000602082019050818103600083015261439c81614360565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143d960168361338f565b91506143e4826143a3565b602082019050919050565b60006020820190508181036000830152614408816143cc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061449160498361338f565b915061449c8261440f565b606082019050919050565b600060208201905081810360008301526144c081614484565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061452360358361338f565b915061452e826144c7565b604082019050919050565b6000602082019050818103600083015261455281614516565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061458f60138361338f565b915061459a82614559565b602082019050919050565b600060208201905081810360008301526145be81614582565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061462160368361338f565b915061462c826145c5565b604082019050919050565b6000602082019050818103600083015261465081614614565b9050919050565b6000819050919050565b6000819050919050565b600061468661468161467c84614657565b614661565b6134a8565b9050919050565b6146968161466b565b82525050565b600060c0820190506146b160008301896136a1565b6146be6020830188613581565b6146cb604083018761468d565b6146d8606083018661468d565b6146e560808301856136a1565b6146f260a0830184613581565b979650505050505050565b60008151905061470c816134b2565b92915050565b60008060006060848603121561472b5761472a613440565b5b6000614739868287016146fd565b935050602061474a868287016146fd565b925050604061475b868287016146fd565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147a38161347c565b92915050565b6000602082840312156147bf576147be613440565b5b60006147cd84828501614794565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61480b8161346a565b82525050565b600061481d8383614802565b60208301905092915050565b6000602082019050919050565b6000614841826147d6565b61484b81856147e1565b9350614856836147f2565b8060005b8381101561488757815161486e8882614811565b975061487983614829565b92505060018101905061485a565b5085935050505092915050565b600060a0820190506148a96000830188613581565b6148b6602083018761468d565b81810360408301526148c88186614836565b90506148d760608301856136a1565b6148e46080830184613581565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061494a60268361338f565b9150614955826148ee565b604082019050919050565b600060208201905081810360008301526149798161493d565b9050919050565b60006060820190506149956000830186613581565b6149a26020830185613581565b6149af6040830184613581565b94935050505056fea2646970667358221220af20c16d61e4dba77390f80762cbc70e7fd817f2621428d02c85ad4f42fa467a64736f6c63430008110033

Deployed Bytecode Sourcemap

18300:12308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1736:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2668:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24270:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30407:161;;;;;;;;;;;;;:::i;:::-;;18993:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2057:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2877:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1956:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3180:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18763:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24136:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23971:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2173:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7075:103;;;;;;;;;;;;;:::i;:::-;;22882:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6852:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1844:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30105:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23523:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3426:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21137:700;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2308:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18803:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23034:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23331:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18945:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18648:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22487:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2509:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30182:217;;;;;;;;;;;;;:::i;:::-;;18690:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22344:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22209:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7186:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18730:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1736:100;1790:13;1823:5;1816:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1736:100;:::o;2668:201::-;2751:4;2768:13;2784:12;:10;:12::i;:::-;2768:28;;2807:32;2816:5;2823:7;2832:6;2807:8;:32::i;:::-;2857:4;2850:11;;;2668:201;;;;:::o;24270:105::-;24323:4;24347:14;:20;24362:4;24347:20;;;;;;;;;;;;;;;;;;;;;;;;;24340:27;;24270:105;;;:::o;30407:161::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30459:12:::1;30484:9;;;;;;;;;;;30476:23;;30508:21;30476:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30458:76;;;30555:5;30545:15;;30447:121;30407:161::o:0;18993:24::-;;;;:::o;2057:108::-;2118:7;2145:12;;2138:19;;2057:108;:::o;2877:295::-;3008:4;3025:15;3043:12;:10;:12::i;:::-;3025:30;;3066:38;3082:4;3088:7;3097:6;3066:15;:38::i;:::-;3115:27;3125:4;3131:2;3135:6;3115:9;:27::i;:::-;3160:4;3153:11;;;2877:295;;;;;:::o;1956:93::-;2014:5;2039:2;2032:9;;1956:93;:::o;3180:238::-;3268:4;3285:13;3301:12;:10;:12::i;:::-;3285:28;;3324:64;3333:5;3340:7;3377:10;3349:25;3359:5;3366:7;3349:9;:25::i;:::-;:38;;;;:::i;:::-;3324:8;:64::i;:::-;3406:4;3399:11;;;3180:238;;;;:::o;18763:33::-;;;;;;;;;;;;;:::o;24136:126::-;24202:4;24226:19;:28;24246:7;24226:28;;;;;;;;;;;;;;;;;;;;;;;;;24219:35;;24136:126;;;:::o;23971:157::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24078:9:::1;;;;;;;;;;;24050:38;;24067:9;24050:38;;;;;;;;;;;;24111:9;24099;;:21;;;;;;;;;;;;;;;;;;23971:157:::0;:::o;2173:127::-;2247:7;2274:9;:18;2284:7;2274:18;;;;;;;;;;;;;;;;2267:25;;2173:127;;;:::o;7075:103::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7140:30:::1;7167:1;7140:18;:30::i;:::-;7075:103::o:0;22882:144::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23014:4:::1;22972:31;:39;23004:6;22972:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22882:144:::0;;:::o;6852:87::-;6898:7;6925:6;;;;;;;;;;;6918:13;;6852:87;:::o;1844:104::-;1900:13;1933:7;1926:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:104;:::o;30105:71::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30105:71;:::o;23523:244::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23630:13:::1;;;;;;;;;;;23622:21;;:4;:21;;::::0;23614:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23718:41;23747:4;23753:5;23718:28;:41::i;:::-;23523:244:::0;;:::o;3426:424::-;3519:4;3536:13;3552:12;:10;:12::i;:::-;3536:28;;3575:24;3602:25;3612:5;3619:7;3602:9;:25::i;:::-;3575:52;;3666:15;3646:16;:35;;3638:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3751:60;3760:5;3767:7;3795:15;3776:16;:34;3751:8;:60::i;:::-;3838:4;3831:11;;;;3426:424;;;;:::o;21137:700::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21229:3:::1;21217:8;:15;;21209:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;21293:1;21278:11;;:16;21270:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;21346:1;21334:8;:13;:30;;;;21363:1;21351:9;:13;21334:30;21326:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21416:1;21403:10;:14;;;;21428:17;21477:3;21465:8;21449:13;:11;:13::i;:::-;:24;;;;:::i;:::-;21448:32;;;;:::i;:::-;21428:52;;21491:17;21527:9;21511:13;:11;:13::i;:::-;:25;;;;:::i;:::-;21491:45;;21563:1;21551:9;:13;21547:74;;;21581:28;21588:9;21599;21581:6;:28::i;:::-;21547:74;21647:1;21635:9;:13;21631:90;;;21665:44;21683:4;21690:7;:5;:7::i;:::-;21699:9;21665;:44::i;:::-;21631:90;21747:4;21731:13;;:20;;;;;;;;;;;;;;;;;;21776:15;21762:11;:29;;;;21817:12;21802;:27;;;;21198:639;;21137:700:::0;:::o;2308:193::-;2387:4;2404:13;2420:12;:10;:12::i;:::-;2404:28;;2443;2453:5;2460:2;2464:6;2443:9;:28::i;:::-;2489:4;2482:11;;;2308:193;;;;:::o;18803:33::-;;;;;;;;;;;;;:::o;23034:289::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23144:12:::1;23128:13;:28;;;;23183:12;23167:13;:28;;;;23234:13;;23218;;:29;;;;:::i;:::-;23206:9;:41;;;;23279:2;23266:9;;:15;;23258:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23034:289:::0;;:::o;23331:182::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23447:8:::1;23416:19;:28;23436:7;23416:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23487:7;23471:34;;;23496:8;23471:34;;;;;;:::i;:::-;;;;;;;;23331:182:::0;;:::o;18945:39::-;;;;;;;;;;;;;:::o;18648:35::-;;;;:::o;22487:387::-;22568:4;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22626:6:::1;22622:1;22606:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;22593:9;:39;;22585:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;22742:4;22738:1;22722:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;22709:9;:37;;22701:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22835:9;22814:18;:30;;;;22862:4;22855:11;;22487:387:::0;;;:::o;2509:151::-;2598:7;2625:11;:18;2637:5;2625:18;;;;;;;;;;;;;;;:27;2644:7;2625:27;;;;;;;;;;;;;;;;2618:34;;2509:151;;;;:::o;30182:217::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30233:43:::1;30251:24;30269:4;30251:9;:24::i;:::-;30233:17;:43::i;:::-;30290:12;30315:9;;;;;;;;;;;30307:23;;30339:21;30307:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30289:76;;;30386:5;30376:15;;30222:177;30182:217::o:0;18690:33::-;;;;:::o;22344:135::-;22404:4;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22444:5:::1;22421:20;;:28;;;;;;;;;;;;;;;;;;22467:4;22460:11;;22344:135:::0;:::o;22209:127::-;22267:4;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22301:5:::1;22284:14;;:22;;;;;;;;;;;;;;;;;;22324:4;22317:11;;22209:127:::0;:::o;7186:201::-;6998:12;:10;:12::i;:::-;6987:23;;:7;:5;:7::i;:::-;:23;;;6979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7295:1:::1;7275:22;;:8;:22;;::::0;7267:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7351:28;7370:8;7351:18;:28::i;:::-;7186:201:::0;:::o;18730:24::-;;;;:::o;1114:98::-;1167:7;1194:10;1187:17;;1114:98;:::o;5519:380::-;5672:1;5655:19;;:5;:19;;;5647:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5753:1;5734:21;;:7;:21;;;5726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5837:6;5807:11;:18;5819:5;5807:18;;;;;;;;;;;;;;;:27;5826:7;5807:27;;;;;;;;;;;;;;;:36;;;;5875:7;5859:32;;5868:5;5859:32;;;5884:6;5859:32;;;;;;:::i;:::-;;;;;;;;5519:380;;;:::o;5907:433::-;6042:24;6069:25;6079:5;6086:7;6069:9;:25::i;:::-;6042:52;;6129:17;6109:16;:37;6105:228;;6187:6;6167:16;:26;;6159:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6259:51;6268:5;6275:7;6303:6;6284:16;:25;6259:8;:51::i;:::-;6105:228;6031:309;5907:433;;;:::o;24383:3504::-;24531:1;24515:18;;:4;:18;;;24507:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24608:1;24594:16;;:2;:16;;;24586:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24670:14;:20;24685:4;24670:20;;;;;;;;;;;;;;;;;;;;;;;;;24669:21;24661:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24797:1;24787:6;:11;24783:93;;24815:28;24831:4;24837:2;24841:1;24815:15;:28::i;:::-;24858:7;;24783:93;24889:13;;;;;;;;;;;24886:106;;;24958:10;;24943:12;;:25;;;;:::i;:::-;24927:12;:41;;24919:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24886:106;25006:14;;;;;;;;;;;25002:1845;;;25067:7;:5;:7::i;:::-;25059:15;;:4;:15;;;;:49;;;;;25101:7;:5;:7::i;:::-;25095:13;;:2;:13;;;;25059:49;:86;;;;;25143:1;25129:16;;:2;:16;;;;25059:86;:128;;;;;25180:6;25166:21;;:2;:21;;;;25059:128;:159;;;;;25209:9;;;;;;;;;;;25208:10;25059:159;25037:1799;;;25258:13;;;;;;;;;;;25253:150;;25304:19;:25;25324:4;25304:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25333:19;:23;25353:2;25333:23;;;;;;;;;;;;;;;;;;;;;;;;;25304:52;25296:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;25253:150;25444:1;25427:13;25437:2;25427:9;:13::i;:::-;:18;:55;;;;;25481:1;25449:24;:28;25474:2;25449:28;;;;;;;;;;;;;;;;:33;25427:55;25423:150;;;25538:15;25507:24;:28;25532:2;25507:28;;;;;;;;;;;;;;;:46;;;;25423:150;25598:20;;;;;;;;;;;25594:425;;;25653:7;:5;:7::i;:::-;25647:13;;:2;:13;;;;:47;;;;;25678:15;;;;;;;;;;;25664:30;;:2;:30;;;;25647:47;:79;;;;;25712:13;;;;;;;;;;;25698:28;;:2;:28;;;;25647:79;25643:357;;;25805:12;25763:28;:39;25792:9;25763:39;;;;;;;;;;;;;;;;:54;25755:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25964:12;25922:28;:39;25951:9;25922:39;;;;;;;;;;;;;;;:54;;;;25643:357;25594:425;26072:25;:31;26098:4;26072:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26108:31;:35;26140:2;26108:35;;;;;;;;;;;;;;;;;;;;;;;;;26107:36;26072:71;26068:753;;;26186:20;;26176:6;:30;;26168:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;26321:9;;26304:13;26314:2;26304:9;:13::i;:::-;26295:6;:22;;;;:::i;:::-;:35;;26287:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26068:753;;;26433:25;:29;26459:2;26433:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26467:31;:37;26499:4;26467:37;;;;;;;;;;;;;;;;;;;;;;;;;26466:38;26433:71;26429:392;;;26547:20;;26537:6;:30;;26529:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;26429:392;;;26674:31;:35;26706:2;26674:35;;;;;;;;;;;;;;;;;;;;;;;;;26669:152;;26768:9;;26751:13;26761:2;26751:9;:13::i;:::-;26742:6;:22;;;;:::i;:::-;:35;;26734:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26669:152;26429:392;26068:753;25037:1799;25002:1845;26859:28;26890:24;26908:4;26890:9;:24::i;:::-;26859:55;;26925:12;26964:18;;26940:20;:42;;26925:57;;27011:7;:34;;;;;27036:9;;;;;;;;;;;27035:10;27011:34;:83;;;;;27063:25;:31;27089:4;27063:31;;;;;;;;;;;;;;;;;;;;;;;;;27062:32;27011:83;:126;;;;;27112:19;:25;27132:4;27112:25;;;;;;;;;;;;;;;;;;;;;;;;;27111:26;27011:126;:167;;;;;27155:19;:23;27175:2;27155:23;;;;;;;;;;;;;;;;;;;;;;;;;27154:24;27011:167;26993:297;;;27217:4;27205:9;;:16;;;;;;;;;;;;;;;;;;27236:10;:8;:10::i;:::-;27273:5;27261:9;;:17;;;;;;;;;;;;;;;;;;26993:297;27302:12;27318:9;;;;;;;;;;;27317:10;27302:25;;27344:19;:25;27364:4;27344:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27373:19;:23;27393:2;27373:23;;;;;;;;;;;;;;;;;;;;;;;;;27344:52;27340:100;;;27423:5;27413:15;;27340:100;27452:12;27483:7;27479:353;;;27514:30;27540:3;27514:21;27525:9;;27514:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27507:37;;27605:9;;27589:13;;27582:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;27559:19;;:55;;;;;;;:::i;:::-;;;;;;;;27675:9;;27659:13;;27652:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;27629:19;;:55;;;;;;;:::i;:::-;;;;;;;;27710:1;27703:4;:8;27699:91;;;27732:42;27748:4;27762;27769;27732:15;:42::i;:::-;27699:91;27816:4;27806:14;;;;;:::i;:::-;;;27479:353;27844:33;27860:4;27866:2;27870:6;27844:15;:33::i;:::-;24496:3391;;;;24383:3504;;;;:::o;7395:191::-;7469:16;7488:6;;;;;;;;;;;7469:25;;7514:8;7505:6;;:17;;;;;;;;;;;;;;;;;;7569:8;7538:40;;7559:8;7538:40;;;;;;;;;;;;7458:128;7395:191;:::o;23775:188::-;23892:5;23858:25;:31;23884:4;23858:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23949:5;23915:40;;23943:4;23915:40;;;;;;;;;;;;23775:188;;:::o;21845:356::-;21920:62;21937:4;21952:15;;;;;;;;;;;21970:11;21920:8;:62::i;:::-;21993:15;;;;;;;;;;;:31;;;22033:9;22067:4;22087:11;22113:1;22129;22145:7;:5;:7::i;:::-;22167:15;21993:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21845:356;;:::o;27895:476::-;27962:21;28000:1;27986:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27962:40;;28031:4;28013;28018:1;28013:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28057:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28047:4;28052:1;28047:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28092:62;28109:4;28124:15;;;;;;;;;;;28142:11;28092:8;:62::i;:::-;28167:15;;;;;;;;;;;:66;;;28248:11;28274:1;28290:4;28317;28337:15;28167:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27951:420;27895:476;:::o;3858:659::-;4005:1;3989:18;;:4;:18;;;3981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4082:1;4068:16;;:2;:16;;;4060:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4137:38;4158:4;4164:2;4168:6;4137:20;:38::i;:::-;4188:19;4210:9;:15;4220:4;4210:15;;;;;;;;;;;;;;;;4188:37;;4259:6;4244:11;:21;;4236:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4368:6;4354:11;:20;4336:9;:15;4346:4;4336:15;;;;;;;;;;;;;;;:38;;;;4409:6;4392:9;:13;4402:2;4392:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;4448:2;4433:26;;4442:4;4433:26;;;4452:6;4433:26;;;;;;:::i;:::-;;;;;;;;4472:37;4492:4;4498:2;4502:6;4472:19;:37::i;:::-;3970:547;3858:659;;;:::o;28805:1294::-;28844:23;28870:24;28888:4;28870:9;:24::i;:::-;28844:50;;28905:25;28955:19;;28933;;:41;;;;:::i;:::-;28905:69;;29010:1;28991:15;:20;:46;;;;29036:1;29015:17;:22;28991:46;28987:59;;;29039:7;;;;28987:59;29078:18;;29060:15;:36;29056:105;;;29131:18;;29113:36;;29056:105;29171:23;29257:1;29237:17;29215:19;;29197:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;29171:87;;29269:26;29298:36;29318:15;29298;:19;;:36;;;;:::i;:::-;29269:65;;29347:25;29375:21;29347:49;;29409:37;29427:18;29409:17;:37::i;:::-;29459:18;29480:44;29506:17;29480:21;:25;;:44;;;;:::i;:::-;29459:65;;29535:23;29561:58;29601:17;29561:35;29576:19;;29561:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;29535:84;;29630:23;29669:15;29656:10;:28;;;;:::i;:::-;29630:54;;29721:1;29699:19;:23;;;;29755:1;29733:19;:23;;;;29770:12;29795:9;;;;;;;;;;;29787:23;;29819:15;29787:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29769:70;;;29860:5;29850:15;;29900:1;29882:15;:19;:42;;;;;29923:1;29905:15;:19;29882:42;29878:214;;;29941:47;29955:15;29972;29941:13;:47::i;:::-;30008:72;30023:18;30043:15;30060:19;;30008:72;;;;;;;;:::i;:::-;;;;;;;;29878:214;28833:1266;;;;;;;;;28805:1294;:::o;8855:98::-;8913:7;8944:1;8940;:5;;;;:::i;:::-;8933:12;;8855:98;;;;:::o;8961:::-;9019:7;9050:1;9046;:5;;;;:::i;:::-;9039:12;;8961:98;;;;:::o;6348:125::-;;;;:::o;6481:124::-;;;;:::o;8749:98::-;8807:7;8838:1;8834;:5;;;;:::i;:::-;8827:12;;8749:98;;;;:::o;28379:418::-;28461:62;28478:4;28493:15;;;;;;;;;;;28511:11;28461:8;:62::i;:::-;28536:15;;;;;;;;;;;:31;;;28576:9;28609:4;28629:11;28655:1;28698;28741:7;:5;:7::i;:::-;28763:15;28536:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28379:418;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:116::-;5258:21;5273:5;5258:21;:::i;:::-;5251:5;5248:32;5238:60;;5294:1;5291;5284:12;5238:60;5188:116;:::o;5310:133::-;5353:5;5391:6;5378:20;5369:29;;5407:30;5431:5;5407:30;:::i;:::-;5310:133;;;;:::o;5449:468::-;5514:6;5522;5571:2;5559:9;5550:7;5546:23;5542:32;5539:119;;;5577:79;;:::i;:::-;5539:119;5697:1;5722:53;5767:7;5758:6;5747:9;5743:22;5722:53;:::i;:::-;5712:63;;5668:117;5824:2;5850:50;5892:7;5883:6;5872:9;5868:22;5850:50;:::i;:::-;5840:60;;5795:115;5449:468;;;;;:::o;5923:118::-;6010:24;6028:5;6010:24;:::i;:::-;6005:3;5998:37;5923:118;;:::o;6047:222::-;6140:4;6178:2;6167:9;6163:18;6155:26;;6191:71;6259:1;6248:9;6244:17;6235:6;6191:71;:::i;:::-;6047:222;;;;:::o;6275:117::-;6384:1;6381;6374:12;6398:117;6507:1;6504;6497:12;6521:180;6569:77;6566:1;6559:88;6666:4;6663:1;6656:15;6690:4;6687:1;6680:15;6707:281;6790:27;6812:4;6790:27;:::i;:::-;6782:6;6778:40;6920:6;6908:10;6905:22;6884:18;6872:10;6869:34;6866:62;6863:88;;;6931:18;;:::i;:::-;6863:88;6971:10;6967:2;6960:22;6750:238;6707:281;;:::o;6994:129::-;7028:6;7055:20;;:::i;:::-;7045:30;;7084:33;7112:4;7104:6;7084:33;:::i;:::-;6994:129;;;:::o;7129:308::-;7191:4;7281:18;7273:6;7270:30;7267:56;;;7303:18;;:::i;:::-;7267:56;7341:29;7363:6;7341:29;:::i;:::-;7333:37;;7425:4;7419;7415:15;7407:23;;7129:308;;;:::o;7443:146::-;7540:6;7535:3;7530;7517:30;7581:1;7572:6;7567:3;7563:16;7556:27;7443:146;;;:::o;7595:425::-;7673:5;7698:66;7714:49;7756:6;7714:49;:::i;:::-;7698:66;:::i;:::-;7689:75;;7787:6;7780:5;7773:21;7825:4;7818:5;7814:16;7863:3;7854:6;7849:3;7845:16;7842:25;7839:112;;;7870:79;;:::i;:::-;7839:112;7960:54;8007:6;8002:3;7997;7960:54;:::i;:::-;7679:341;7595:425;;;;;:::o;8040:340::-;8096:5;8145:3;8138:4;8130:6;8126:17;8122:27;8112:122;;8153:79;;:::i;:::-;8112:122;8270:6;8257:20;8295:79;8370:3;8362:6;8355:4;8347:6;8343:17;8295:79;:::i;:::-;8286:88;;8102:278;8040:340;;;;:::o;8386:509::-;8455:6;8504:2;8492:9;8483:7;8479:23;8475:32;8472:119;;;8510:79;;:::i;:::-;8472:119;8658:1;8647:9;8643:17;8630:31;8688:18;8680:6;8677:30;8674:117;;;8710:79;;:::i;:::-;8674:117;8815:63;8870:7;8861:6;8850:9;8846:22;8815:63;:::i;:::-;8805:73;;8601:287;8386:509;;;;:::o;8901:329::-;8960:6;9009:2;8997:9;8988:7;8984:23;8980:32;8977:119;;;9015:79;;:::i;:::-;8977:119;9135:1;9160:53;9205:7;9196:6;9185:9;9181:22;9160:53;:::i;:::-;9150:63;;9106:117;8901:329;;;;:::o;9236:474::-;9304:6;9312;9361:2;9349:9;9340:7;9336:23;9332:32;9329:119;;;9367:79;;:::i;:::-;9329:119;9487:1;9512:53;9557:7;9548:6;9537:9;9533:22;9512:53;:::i;:::-;9502:63;;9458:117;9614:2;9640:53;9685:7;9676:6;9665:9;9661:22;9640:53;:::i;:::-;9630:63;;9585:118;9236:474;;;;;:::o;9716:::-;9784:6;9792;9841:2;9829:9;9820:7;9816:23;9812:32;9809:119;;;9847:79;;:::i;:::-;9809:119;9967:1;9992:53;10037:7;10028:6;10017:9;10013:22;9992:53;:::i;:::-;9982:63;;9938:117;10094:2;10120:53;10165:7;10156:6;10145:9;10141:22;10120:53;:::i;:::-;10110:63;;10065:118;9716:474;;;;;:::o;10196:180::-;10244:77;10241:1;10234:88;10341:4;10338:1;10331:15;10365:4;10362:1;10355:15;10382:320;10426:6;10463:1;10457:4;10453:12;10443:22;;10510:1;10504:4;10500:12;10531:18;10521:81;;10587:4;10579:6;10575:17;10565:27;;10521:81;10649:2;10641:6;10638:14;10618:18;10615:38;10612:84;;10668:18;;:::i;:::-;10612:84;10433:269;10382:320;;;:::o;10708:182::-;10848:34;10844:1;10836:6;10832:14;10825:58;10708:182;:::o;10896:366::-;11038:3;11059:67;11123:2;11118:3;11059:67;:::i;:::-;11052:74;;11135:93;11224:3;11135:93;:::i;:::-;11253:2;11248:3;11244:12;11237:19;;10896:366;;;:::o;11268:419::-;11434:4;11472:2;11461:9;11457:18;11449:26;;11521:9;11515:4;11511:20;11507:1;11496:9;11492:17;11485:47;11549:131;11675:4;11549:131;:::i;:::-;11541:139;;11268:419;;;:::o;11693:147::-;11794:11;11831:3;11816:18;;11693:147;;;;:::o;11846:114::-;;:::o;11966:398::-;12125:3;12146:83;12227:1;12222:3;12146:83;:::i;:::-;12139:90;;12238:93;12327:3;12238:93;:::i;:::-;12356:1;12351:3;12347:11;12340:18;;11966:398;;;:::o;12370:379::-;12554:3;12576:147;12719:3;12576:147;:::i;:::-;12569:154;;12740:3;12733:10;;12370:379;;;:::o;12755:180::-;12803:77;12800:1;12793:88;12900:4;12897:1;12890:15;12924:4;12921:1;12914:15;12941:191;12981:3;13000:20;13018:1;13000:20;:::i;:::-;12995:25;;13034:20;13052:1;13034:20;:::i;:::-;13029:25;;13077:1;13074;13070:9;13063:16;;13098:3;13095:1;13092:10;13089:36;;;13105:18;;:::i;:::-;13089:36;12941:191;;;;:::o;13138:244::-;13278:34;13274:1;13266:6;13262:14;13255:58;13347:27;13342:2;13334:6;13330:15;13323:52;13138:244;:::o;13388:366::-;13530:3;13551:67;13615:2;13610:3;13551:67;:::i;:::-;13544:74;;13627:93;13716:3;13627:93;:::i;:::-;13745:2;13740:3;13736:12;13729:19;;13388:366;;;:::o;13760:419::-;13926:4;13964:2;13953:9;13949:18;13941:26;;14013:9;14007:4;14003:20;13999:1;13988:9;13984:17;13977:47;14041:131;14167:4;14041:131;:::i;:::-;14033:139;;13760:419;;;:::o;14185:224::-;14325:34;14321:1;14313:6;14309:14;14302:58;14394:7;14389:2;14381:6;14377:15;14370:32;14185:224;:::o;14415:366::-;14557:3;14578:67;14642:2;14637:3;14578:67;:::i;:::-;14571:74;;14654:93;14743:3;14654:93;:::i;:::-;14772:2;14767:3;14763:12;14756:19;;14415:366;;;:::o;14787:419::-;14953:4;14991:2;14980:9;14976:18;14968:26;;15040:9;15034:4;15030:20;15026:1;15015:9;15011:17;15004:47;15068:131;15194:4;15068:131;:::i;:::-;15060:139;;14787:419;;;:::o;15212:172::-;15352:24;15348:1;15340:6;15336:14;15329:48;15212:172;:::o;15390:366::-;15532:3;15553:67;15617:2;15612:3;15553:67;:::i;:::-;15546:74;;15629:93;15718:3;15629:93;:::i;:::-;15747:2;15742:3;15738:12;15731:19;;15390:366;;;:::o;15762:419::-;15928:4;15966:2;15955:9;15951:18;15943:26;;16015:9;16009:4;16005:20;16001:1;15990:9;15986:17;15979:47;16043:131;16169:4;16043:131;:::i;:::-;16035:139;;15762:419;;;:::o;16187:166::-;16327:18;16323:1;16315:6;16311:14;16304:42;16187:166;:::o;16359:366::-;16501:3;16522:67;16586:2;16581:3;16522:67;:::i;:::-;16515:74;;16598:93;16687:3;16598:93;:::i;:::-;16716:2;16711:3;16707:12;16700:19;;16359:366;;;:::o;16731:419::-;16897:4;16935:2;16924:9;16920:18;16912:26;;16984:9;16978:4;16974:20;16970:1;16959:9;16955:17;16948:47;17012:131;17138:4;17012:131;:::i;:::-;17004:139;;16731:419;;;:::o;17156:173::-;17296:25;17292:1;17284:6;17280:14;17273:49;17156:173;:::o;17335:366::-;17477:3;17498:67;17562:2;17557:3;17498:67;:::i;:::-;17491:74;;17574:93;17663:3;17574:93;:::i;:::-;17692:2;17687:3;17683:12;17676:19;;17335:366;;;:::o;17707:419::-;17873:4;17911:2;17900:9;17896:18;17888:26;;17960:9;17954:4;17950:20;17946:1;17935:9;17931:17;17924:47;17988:131;18114:4;17988:131;:::i;:::-;17980:139;;17707:419;;;:::o;18132:410::-;18172:7;18195:20;18213:1;18195:20;:::i;:::-;18190:25;;18229:20;18247:1;18229:20;:::i;:::-;18224:25;;18284:1;18281;18277:9;18306:30;18324:11;18306:30;:::i;:::-;18295:41;;18485:1;18476:7;18472:15;18469:1;18466:22;18446:1;18439:9;18419:83;18396:139;;18515:18;;:::i;:::-;18396:139;18180:362;18132:410;;;;:::o;18548:180::-;18596:77;18593:1;18586:88;18693:4;18690:1;18683:15;18717:4;18714:1;18707:15;18734:185;18774:1;18791:20;18809:1;18791:20;:::i;:::-;18786:25;;18825:20;18843:1;18825:20;:::i;:::-;18820:25;;18864:1;18854:35;;18869:18;;:::i;:::-;18854:35;18911:1;18908;18904:9;18899:14;;18734:185;;;;:::o;18925:194::-;18965:4;18985:20;19003:1;18985:20;:::i;:::-;18980:25;;19019:20;19037:1;19019:20;:::i;:::-;19014:25;;19063:1;19060;19056:9;19048:17;;19087:1;19081:4;19078:11;19075:37;;;19092:18;;:::i;:::-;19075:37;18925:194;;;;:::o;19125:179::-;19265:31;19261:1;19253:6;19249:14;19242:55;19125:179;:::o;19310:366::-;19452:3;19473:67;19537:2;19532:3;19473:67;:::i;:::-;19466:74;;19549:93;19638:3;19549:93;:::i;:::-;19667:2;19662:3;19658:12;19651:19;;19310:366;;;:::o;19682:419::-;19848:4;19886:2;19875:9;19871:18;19863:26;;19935:9;19929:4;19925:20;19921:1;19910:9;19906:17;19899:47;19963:131;20089:4;19963:131;:::i;:::-;19955:139;;19682:419;;;:::o;20107:240::-;20247:34;20243:1;20235:6;20231:14;20224:58;20316:23;20311:2;20303:6;20299:15;20292:48;20107:240;:::o;20353:366::-;20495:3;20516:67;20580:2;20575:3;20516:67;:::i;:::-;20509:74;;20592:93;20681:3;20592:93;:::i;:::-;20710:2;20705:3;20701:12;20694:19;;20353:366;;;:::o;20725:419::-;20891:4;20929:2;20918:9;20914:18;20906:26;;20978:9;20972:4;20968:20;20964:1;20953:9;20949:17;20942:47;21006:131;21132:4;21006:131;:::i;:::-;20998:139;;20725:419;;;:::o;21150:239::-;21290:34;21286:1;21278:6;21274:14;21267:58;21359:22;21354:2;21346:6;21342:15;21335:47;21150:239;:::o;21395:366::-;21537:3;21558:67;21622:2;21617:3;21558:67;:::i;:::-;21551:74;;21634:93;21723:3;21634:93;:::i;:::-;21752:2;21747:3;21743:12;21736:19;;21395:366;;;:::o;21767:419::-;21933:4;21971:2;21960:9;21956:18;21948:26;;22020:9;22014:4;22010:20;22006:1;21995:9;21991:17;21984:47;22048:131;22174:4;22048:131;:::i;:::-;22040:139;;21767:419;;;:::o;22192:225::-;22332:34;22328:1;22320:6;22316:14;22309:58;22401:8;22396:2;22388:6;22384:15;22377:33;22192:225;:::o;22423:366::-;22565:3;22586:67;22650:2;22645:3;22586:67;:::i;:::-;22579:74;;22662:93;22751:3;22662:93;:::i;:::-;22780:2;22775:3;22771:12;22764:19;;22423:366;;;:::o;22795:419::-;22961:4;22999:2;22988:9;22984:18;22976:26;;23048:9;23042:4;23038:20;23034:1;23023:9;23019:17;23012:47;23076:131;23202:4;23076:131;:::i;:::-;23068:139;;22795:419;;;:::o;23220:223::-;23360:34;23356:1;23348:6;23344:14;23337:58;23429:6;23424:2;23416:6;23412:15;23405:31;23220:223;:::o;23449:366::-;23591:3;23612:67;23676:2;23671:3;23612:67;:::i;:::-;23605:74;;23688:93;23777:3;23688:93;:::i;:::-;23806:2;23801:3;23797:12;23790:19;;23449:366;;;:::o;23821:419::-;23987:4;24025:2;24014:9;24010:18;24002:26;;24074:9;24068:4;24064:20;24060:1;24049:9;24045:17;24038:47;24102:131;24228:4;24102:131;:::i;:::-;24094:139;;23821:419;;;:::o;24246:221::-;24386:34;24382:1;24374:6;24370:14;24363:58;24455:4;24450:2;24442:6;24438:15;24431:29;24246:221;:::o;24473:366::-;24615:3;24636:67;24700:2;24695:3;24636:67;:::i;:::-;24629:74;;24712:93;24801:3;24712:93;:::i;:::-;24830:2;24825:3;24821:12;24814:19;;24473:366;;;:::o;24845:419::-;25011:4;25049:2;25038:9;25034:18;25026:26;;25098:9;25092:4;25088:20;25084:1;25073:9;25069:17;25062:47;25126:131;25252:4;25126:131;:::i;:::-;25118:139;;24845:419;;;:::o;25270:179::-;25410:31;25406:1;25398:6;25394:14;25387:55;25270:179;:::o;25455:366::-;25597:3;25618:67;25682:2;25677:3;25618:67;:::i;:::-;25611:74;;25694:93;25783:3;25694:93;:::i;:::-;25812:2;25807:3;25803:12;25796:19;;25455:366;;;:::o;25827:419::-;25993:4;26031:2;26020:9;26016:18;26008:26;;26080:9;26074:4;26070:20;26066:1;26055:9;26051:17;26044:47;26108:131;26234:4;26108:131;:::i;:::-;26100:139;;25827:419;;;:::o;26252:224::-;26392:34;26388:1;26380:6;26376:14;26369:58;26461:7;26456:2;26448:6;26444:15;26437:32;26252:224;:::o;26482:366::-;26624:3;26645:67;26709:2;26704:3;26645:67;:::i;:::-;26638:74;;26721:93;26810:3;26721:93;:::i;:::-;26839:2;26834:3;26830:12;26823:19;;26482:366;;;:::o;26854:419::-;27020:4;27058:2;27047:9;27043:18;27035:26;;27107:9;27101:4;27097:20;27093:1;27082:9;27078:17;27071:47;27135:131;27261:4;27135:131;:::i;:::-;27127:139;;26854:419;;;:::o;27279:222::-;27419:34;27415:1;27407:6;27403:14;27396:58;27488:5;27483:2;27475:6;27471:15;27464:30;27279:222;:::o;27507:366::-;27649:3;27670:67;27734:2;27729:3;27670:67;:::i;:::-;27663:74;;27746:93;27835:3;27746:93;:::i;:::-;27864:2;27859:3;27855:12;27848:19;;27507:366;;;:::o;27879:419::-;28045:4;28083:2;28072:9;28068:18;28060:26;;28132:9;28126:4;28122:20;28118:1;28107:9;28103:17;28096:47;28160:131;28286:4;28160:131;:::i;:::-;28152:139;;27879:419;;;:::o;28304:301::-;28444:34;28440:1;28432:6;28428:14;28421:58;28513:34;28508:2;28500:6;28496:15;28489:59;28582:15;28577:2;28569:6;28565:15;28558:40;28304:301;:::o;28611:366::-;28753:3;28774:67;28838:2;28833:3;28774:67;:::i;:::-;28767:74;;28850:93;28939:3;28850:93;:::i;:::-;28968:2;28963:3;28959:12;28952:19;;28611:366;;;:::o;28983:419::-;29149:4;29187:2;29176:9;29172:18;29164:26;;29236:9;29230:4;29226:20;29222:1;29211:9;29207:17;29200:47;29264:131;29390:4;29264:131;:::i;:::-;29256:139;;28983:419;;;:::o;29408:157::-;29548:9;29544:1;29536:6;29532:14;29525:33;29408:157;:::o;29571:365::-;29713:3;29734:66;29798:1;29793:3;29734:66;:::i;:::-;29727:73;;29809:93;29898:3;29809:93;:::i;:::-;29927:2;29922:3;29918:12;29911:19;;29571:365;;;:::o;29942:419::-;30108:4;30146:2;30135:9;30131:18;30123:26;;30195:9;30189:4;30185:20;30181:1;30170:9;30166:17;30159:47;30223:131;30349:4;30223:131;:::i;:::-;30215:139;;29942:419;;;:::o;30367:172::-;30507:24;30503:1;30495:6;30491:14;30484:48;30367:172;:::o;30545:366::-;30687:3;30708:67;30772:2;30767:3;30708:67;:::i;:::-;30701:74;;30784:93;30873:3;30784:93;:::i;:::-;30902:2;30897:3;30893:12;30886:19;;30545:366;;;:::o;30917:419::-;31083:4;31121:2;31110:9;31106:18;31098:26;;31170:9;31164:4;31160:20;31156:1;31145:9;31141:17;31134:47;31198:131;31324:4;31198:131;:::i;:::-;31190:139;;30917:419;;;:::o;31342:297::-;31482:34;31478:1;31470:6;31466:14;31459:58;31551:34;31546:2;31538:6;31534:15;31527:59;31620:11;31615:2;31607:6;31603:15;31596:36;31342:297;:::o;31645:366::-;31787:3;31808:67;31872:2;31867:3;31808:67;:::i;:::-;31801:74;;31884:93;31973:3;31884:93;:::i;:::-;32002:2;31997:3;31993:12;31986:19;;31645:366;;;:::o;32017:419::-;32183:4;32221:2;32210:9;32206:18;32198:26;;32270:9;32264:4;32260:20;32256:1;32245:9;32241:17;32234:47;32298:131;32424:4;32298:131;:::i;:::-;32290:139;;32017:419;;;:::o;32442:240::-;32582:34;32578:1;32570:6;32566:14;32559:58;32651:23;32646:2;32638:6;32634:15;32627:48;32442:240;:::o;32688:366::-;32830:3;32851:67;32915:2;32910:3;32851:67;:::i;:::-;32844:74;;32927:93;33016:3;32927:93;:::i;:::-;33045:2;33040:3;33036:12;33029:19;;32688:366;;;:::o;33060:419::-;33226:4;33264:2;33253:9;33249:18;33241:26;;33313:9;33307:4;33303:20;33299:1;33288:9;33284:17;33277:47;33341:131;33467:4;33341:131;:::i;:::-;33333:139;;33060:419;;;:::o;33485:169::-;33625:21;33621:1;33613:6;33609:14;33602:45;33485:169;:::o;33660:366::-;33802:3;33823:67;33887:2;33882:3;33823:67;:::i;:::-;33816:74;;33899:93;33988:3;33899:93;:::i;:::-;34017:2;34012:3;34008:12;34001:19;;33660:366;;;:::o;34032:419::-;34198:4;34236:2;34225:9;34221:18;34213:26;;34285:9;34279:4;34275:20;34271:1;34260:9;34256:17;34249:47;34313:131;34439:4;34313:131;:::i;:::-;34305:139;;34032:419;;;:::o;34457:241::-;34597:34;34593:1;34585:6;34581:14;34574:58;34666:24;34661:2;34653:6;34649:15;34642:49;34457:241;:::o;34704:366::-;34846:3;34867:67;34931:2;34926:3;34867:67;:::i;:::-;34860:74;;34943:93;35032:3;34943:93;:::i;:::-;35061:2;35056:3;35052:12;35045:19;;34704:366;;;:::o;35076:419::-;35242:4;35280:2;35269:9;35265:18;35257:26;;35329:9;35323:4;35319:20;35315:1;35304:9;35300:17;35293:47;35357:131;35483:4;35357:131;:::i;:::-;35349:139;;35076:419;;;:::o;35501:85::-;35546:7;35575:5;35564:16;;35501:85;;;:::o;35592:60::-;35620:3;35641:5;35634:12;;35592:60;;;:::o;35658:158::-;35716:9;35749:61;35767:42;35776:32;35802:5;35776:32;:::i;:::-;35767:42;:::i;:::-;35749:61;:::i;:::-;35736:74;;35658:158;;;:::o;35822:147::-;35917:45;35956:5;35917:45;:::i;:::-;35912:3;35905:58;35822:147;;:::o;35975:807::-;36224:4;36262:3;36251:9;36247:19;36239:27;;36276:71;36344:1;36333:9;36329:17;36320:6;36276:71;:::i;:::-;36357:72;36425:2;36414:9;36410:18;36401:6;36357:72;:::i;:::-;36439:80;36515:2;36504:9;36500:18;36491:6;36439:80;:::i;:::-;36529;36605:2;36594:9;36590:18;36581:6;36529:80;:::i;:::-;36619:73;36687:3;36676:9;36672:19;36663:6;36619:73;:::i;:::-;36702;36770:3;36759:9;36755:19;36746:6;36702:73;:::i;:::-;35975:807;;;;;;;;;:::o;36788:143::-;36845:5;36876:6;36870:13;36861:22;;36892:33;36919:5;36892:33;:::i;:::-;36788:143;;;;:::o;36937:663::-;37025:6;37033;37041;37090:2;37078:9;37069:7;37065:23;37061:32;37058:119;;;37096:79;;:::i;:::-;37058:119;37216:1;37241:64;37297:7;37288:6;37277:9;37273:22;37241:64;:::i;:::-;37231:74;;37187:128;37354:2;37380:64;37436:7;37427:6;37416:9;37412:22;37380:64;:::i;:::-;37370:74;;37325:129;37493:2;37519:64;37575:7;37566:6;37555:9;37551:22;37519:64;:::i;:::-;37509:74;;37464:129;36937:663;;;;;:::o;37606:180::-;37654:77;37651:1;37644:88;37751:4;37748:1;37741:15;37775:4;37772:1;37765:15;37792:143;37849:5;37880:6;37874:13;37865:22;;37896:33;37923:5;37896:33;:::i;:::-;37792:143;;;;:::o;37941:351::-;38011:6;38060:2;38048:9;38039:7;38035:23;38031:32;38028:119;;;38066:79;;:::i;:::-;38028:119;38186:1;38211:64;38267:7;38258:6;38247:9;38243:22;38211:64;:::i;:::-;38201:74;;38157:128;37941:351;;;;:::o;38298:114::-;38365:6;38399:5;38393:12;38383:22;;38298:114;;;:::o;38418:184::-;38517:11;38551:6;38546:3;38539:19;38591:4;38586:3;38582:14;38567:29;;38418:184;;;;:::o;38608:132::-;38675:4;38698:3;38690:11;;38728:4;38723:3;38719:14;38711:22;;38608:132;;;:::o;38746:108::-;38823:24;38841:5;38823:24;:::i;:::-;38818:3;38811:37;38746:108;;:::o;38860:179::-;38929:10;38950:46;38992:3;38984:6;38950:46;:::i;:::-;39028:4;39023:3;39019:14;39005:28;;38860:179;;;;:::o;39045:113::-;39115:4;39147;39142:3;39138:14;39130:22;;39045:113;;;:::o;39194:732::-;39313:3;39342:54;39390:5;39342:54;:::i;:::-;39412:86;39491:6;39486:3;39412:86;:::i;:::-;39405:93;;39522:56;39572:5;39522:56;:::i;:::-;39601:7;39632:1;39617:284;39642:6;39639:1;39636:13;39617:284;;;39718:6;39712:13;39745:63;39804:3;39789:13;39745:63;:::i;:::-;39738:70;;39831:60;39884:6;39831:60;:::i;:::-;39821:70;;39677:224;39664:1;39661;39657:9;39652:14;;39617:284;;;39621:14;39917:3;39910:10;;39318:608;;;39194:732;;;;:::o;39932:831::-;40195:4;40233:3;40222:9;40218:19;40210:27;;40247:71;40315:1;40304:9;40300:17;40291:6;40247:71;:::i;:::-;40328:80;40404:2;40393:9;40389:18;40380:6;40328:80;:::i;:::-;40455:9;40449:4;40445:20;40440:2;40429:9;40425:18;40418:48;40483:108;40586:4;40577:6;40483:108;:::i;:::-;40475:116;;40601:72;40669:2;40658:9;40654:18;40645:6;40601:72;:::i;:::-;40683:73;40751:3;40740:9;40736:19;40727:6;40683:73;:::i;:::-;39932:831;;;;;;;;:::o;40769:225::-;40909:34;40905:1;40897:6;40893:14;40886:58;40978:8;40973:2;40965:6;40961:15;40954:33;40769:225;:::o;41000:366::-;41142:3;41163:67;41227:2;41222:3;41163:67;:::i;:::-;41156:74;;41239:93;41328:3;41239:93;:::i;:::-;41357:2;41352:3;41348:12;41341:19;;41000:366;;;:::o;41372:419::-;41538:4;41576:2;41565:9;41561:18;41553:26;;41625:9;41619:4;41615:20;41611:1;41600:9;41596:17;41589:47;41653:131;41779:4;41653:131;:::i;:::-;41645:139;;41372:419;;;:::o;41797:442::-;41946:4;41984:2;41973:9;41969:18;41961:26;;41997:71;42065:1;42054:9;42050:17;42041:6;41997:71;:::i;:::-;42078:72;42146:2;42135:9;42131:18;42122:6;42078:72;:::i;:::-;42160;42228:2;42217:9;42213:18;42204:6;42160:72;:::i;:::-;41797:442;;;;;;:::o

Swarm Source

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